src/Services/FournisseurService.php line 110

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  */
  5. namespace App\Services;
  6. use App\Entity\AvoirFactureFinance;
  7. use App\Entity\DocUpload;
  8. use App\Entity\Etap1;
  9. use App\Entity\Etap160;
  10. use App\Entity\Etap2;
  11. use App\Entity\Etap3;
  12. use App\Entity\Etap4;
  13. use App\Entity\Etap5;
  14. use App\Entity\Etap6;
  15. use App\Entity\Etap7;
  16. use App\Entity\Etap8;
  17. use App\Entity\Etap9;
  18. use App\Entity\Etap10;
  19. use App\Entity\Etap11;
  20. use App\Entity\Etap12;
  21. use App\Entity\Etap13;
  22. use App\Entity\Etap14;
  23. use App\Entity\Etap15;
  24. use App\Entity\Etap16;
  25. use App\Entity\Etap17;
  26. use App\Entity\Etap18;
  27. use App\Entity\Etap19;
  28. use App\Entity\Etap20;
  29. use App\Entity\Etap21;
  30. use App\Entity\Etap22;
  31. use App\Entity\Etaps;
  32. use App\Entity\EtapsCategory;
  33. use App\Entity\FactureFinance;
  34. use App\Entity\Avoir;
  35. use App\Entity\Fournisseur;
  36. use App\Entity\FournisseurProject;
  37. use App\Entity\Project;
  38. use App\Entity\ProjectEdit;
  39. use App\Entity\ProjectFactureFinance;
  40. use App\Entity\Rib;
  41. use App\Entity\Spv;
  42. use App\Entity\User;
  43. use App\Form\AvoirType;
  44. use App\Form\FactureFinanceType;
  45. use App\Form\ProjectEditType;
  46. use App\Form\ProjectType;
  47. use App\Form\UserType;
  48. use Kunnu\Dropbox\Dropbox;
  49. use Kunnu\Dropbox\DropboxApp;
  50. use Kunnu\Dropbox\Exceptions\DropboxClientException;
  51. use PhpOffice\PhpSpreadsheet\Shared\Date;
  52. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  53. use PhpOffice\PhpSpreadsheet\Style\Border;
  54. use PhpOffice\PhpSpreadsheet\Style\Color;
  55. use PhpOffice\PhpSpreadsheet\Style\Fill;
  56. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  57. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  58. use Spipu\Html2Pdf\Html2Pdf;
  59. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  60. use Doctrine\ORM\EntityManagerInterface;
  61. use Symfony\Component\Form\FormFactoryInterface;
  62. use Symfony\Component\HttpFoundation\File\UploadedFile;
  63. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  64. use Symfony\Component\Routing\RouterInterface;
  65. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  66. use Symfony\Contracts\Translation\TranslatorInterface;
  67. use Symfony\Component\Security\Core\Security;
  68. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  69. use Twig\Environment;
  70. use App\Entity\Centrale;
  71. use Symfony\Component\Validator\Constraints as Assert;
  72. use Symfony\Component\Validator\Validator\ValidatorInterface;
  73. class FournisseurService
  74. {
  75.     private $em;
  76.     private $trans;
  77.     private $params;
  78.     private $security;
  79.     private $session;
  80.     private $twig;
  81.     private $notification;
  82.     public function __construct(
  83.         Environment $twig,
  84.         SessionInterface $session,
  85.         Security $security,
  86.         ParameterBagInterface $params,
  87.         EntityManagerInterface $em,
  88.         TranslatorInterface $trans,
  89.         ValidatorInterface $validator,
  90.         FlashBagInterface $flashBag,
  91.         UserPasswordEncoderInterface $passwordEncoder,
  92.         Notifications $notifications,
  93.         FormFactoryInterface $form,
  94.         RouterInterface $router
  95.     ) {
  96.         $this->em = $em;
  97.         $this->trans = $trans;
  98.         $this->params = $params;
  99.         $this->security = $security;
  100.         $this->session = $session;
  101.         $this->twig = $twig;
  102.         $this->validator = $validator;
  103.         $this->form = $form;
  104.         $this->flashBag = $flashBag;
  105.         $this->passwordEncoder = $passwordEncoder;
  106.         $this->notification = $notifications;
  107.         $this->router = $router;
  108.     }
  109.     public function importAuto(){
  110.         $path = '/altarea/fournisseurs';
  111.         $ftp_server="162.19.120.192";
  112.         $ftp_user_name="altarea-prod";
  113.         $ftp_user_pass="E_AeX_red2xi2vf1";
  114.         $dateJour = new \DateTime('now', new \DateTimeZone('Europe/Paris'));
  115.         $dateJour->modify('-3 days');
  116.         $conn_id = ftp_ssl_connect($ftp_server);
  117.         $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
  118.         ftp_pasv($conn_id, true) or die("Cannot switch to passive mode");
  119.         $contents = ftp_mlsd($conn_id, $path);
  120.         $results = array();
  121.         foreach ($contents as $content) {
  122.             if((int)($dateJour->format('Ymd').'000000') < (int)$content['modify']){
  123.                 $results[] = array('name' => $content['name'], 'timestamp' => $content['modify']);
  124.             }
  125.         }
  126.         usort($results, function($a, $b) { return $a['timestamp'] - $b['timestamp']; });
  127.         $file = null;
  128.         $files = [];
  129.         ftp_close($conn_id);
  130.         if($results) {
  131.             foreach ($results as $result) {
  132.                 $conn_id = ftp_ssl_connect($ftp_server);
  133.                 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
  134.                 ftp_pasv($conn_id, true) or die("Cannot switch to passive mode");
  135.                 $name = $result['name'];
  136.                 $namePos = strpos($name, 'ERPI-');
  137.                 if ($namePos !== false) {
  138.                     if (ftp_get($conn_id, $this->params->get('fournisseur_altarea_import_directory') . "/" . $name, $path . '/' . $name, FTP_BINARY)) {
  139.                         $file = $this->params->get('fournisseur_altarea_import_directory') . "/" . $name;
  140.                         $files[]=$file;
  141.                     } else {
  142.                         return false;
  143.                     }
  144.                 }
  145.                 ftp_close($conn_id);
  146.             }
  147.         }
  148.         if($files){
  149.             foreach ($files as $item){
  150.                 if($item && file_exists($item)){
  151.                     $array = [];
  152.                     $flag = true;
  153.                     $i = 0;
  154.                     $header = [];
  155.                     $fichier = file($item);
  156.                     foreach ($fichier as $line_num => $line) {
  157. //               if($line_num == 0 ){
  158. //                   continue;
  159. //               }
  160.                         $colonnes = explode('|',$line);
  161.                         if($flag) {
  162.                             $header = [];
  163.                             foreach ($colonnes as $key1 => $cell) {
  164.                                 $header[] = trim($cell);
  165.                             }
  166.                             $flag = false;
  167.                             continue;
  168.                         }
  169.                         foreach ($colonnes as $key => $cell) {
  170.                             $array[$i][$header[$key]] = trim(htmlspecialchars($cell));
  171.                         }
  172.                         $i++ ;
  173.                     }
  174.                     if($array){
  175.                         foreach ($array as $item){
  176.                             $fournisseur = null;
  177.                             $isModif = true;
  178.                             if(isset($item['CodeFournisseur']) && $item['CodeFournisseur']){
  179.                                 $fournisseurs = $this->em->getRepository(Fournisseur::class)->findNotArchiveByCode($item['CodeFournisseur']);
  180.                                 if(!$fournisseurs){
  181.                                     if(isset($item['Adresse messagerie 1']) && $item['Adresse messagerie 1']){
  182.                                         $fournisseurs = $this->em->getRepository(Fournisseur::class)->findBy(['email'=>$item['Adresse messagerie 1']]);
  183.                                     }
  184.                                 }
  185.                             }
  186.                             if($fournisseurs) {
  187.                                 foreach ($fournisseurs as $fournisseur) {
  188.                                     $this->updateOrAddFournissuerByFichier($item, $fournisseur);
  189.                                 }
  190.                             }else{
  191.                                 $fournisseur = new Fournisseur();
  192.                                 $isModif = false;
  193.                                 $this->updateOrAddFournissuerByFichier($item, $fournisseur);
  194.                             }
  195.                         }
  196.                     }
  197.                 }
  198.             }
  199.         }
  200.     }
  201.    private function updateOrAddFournissuerByFichier($item,$fournisseur){
  202.        if($fournisseur->getName()){
  203.        }else{
  204.            if(isset($item['Raison sociale']) && $item['Raison sociale']){$fournisseur->setName($item['Raison sociale']);}
  205.        }
  206.        if(isset($item['CodeFournisseur']) && $item['CodeFournisseur']){$fournisseur->setCodeFournisseur($item['CodeFournisseur']);}
  207.        if(isset($item['Adresse messagerie 1']) && $item['Adresse messagerie 1']){$fournisseur->setEmail($item['Adresse messagerie 1']);}
  208.        if(isset($item['Code pays ISO']) && $item['Code pays ISO']){$fournisseur->setCountryCode($item['Code pays ISO']);}
  209.        if(isset($item['Code postal']) && $item['Code postal']){$fournisseur->setCodePostal($item['Code postal']);}
  210.        if(isset($item['Ville']) && $item['Ville']){$fournisseur->setCity($item['Ville']);}
  211.        if(isset($item['Rue ou voie']) && $item['Rue ou voie']){$fournisseur->setRueVoie($item['Rue ou voie']);}
  212.        if(isset($item['Téléphone 1']) && $item['Téléphone 1']){$fournisseur->setTel($item['Téléphone 1']);}
  213.        if(isset($item['Complément Siret']) && $item['Complément Siret']){$fournisseur->setComplementSiret($item['Complément Siret']);}
  214.        if(isset($item['Boite postale ou Commune']) && $item['Boite postale ou Commune']){$fournisseur->setBoitePostaleCommune($item['Boite postale ou Commune']);}
  215.        if(isset($item['CodeBlocage']) && $item['CodeBlocage']){
  216.            $fournisseur->setCodeBlocage($item['CodeBlocage']);
  217.        }
  218.        if(isset($item['Code NAF (APE)']) && $item['Code NAF (APE)']){$fournisseur->setCodeNaf($item['Code NAF (APE)']);}
  219.        if(isset($item["Complément d'adresse"]) && $item["Complément d'adresse"]){$fournisseur->setComplementAdresse($item["Complément d'adresse"]);}
  220.        if(isset($item['Complément Identification']) && $item['Complément Identification']){$fournisseur->setComplementIdenetification($item['Complément Identification']);}
  221.        if(isset($item['Devise']) && $item['Devise']){$fournisseur->setDevise($item['Devise']);}
  222.        if(isset($item['Forme juridique']) && $item['Forme juridique']){$fournisseur->setFormuleJuridique($item['Forme juridique']);}
  223.        if(isset($item['Inscription au RCS ou RM']) && $item['Inscription au RCS ou RM']){$fournisseur->setRcsRm($item['Inscription au RCS ou RM']);}
  224.        if(isset($item['Téléphone 2']) && $item['Téléphone 2']){$fournisseur->setTel2($item['Téléphone 2']);}
  225.        if(isset($item['Télécopie']) && $item['Télécopie']){$fournisseur->setTelecopie($item['Télécopie']);}
  226.        if(isset($item['Numéro de TVA intracommunautaire']) && $item['Numéro de TVA intracommunautaire']){$fournisseur->setTvaIntracommunautaire($item['Numéro de TVA intracommunautaire']);}
  227.        if(isset($item['Code mode reglt']) && $item['Code mode reglt']){$fournisseur->setCodeModeReglt($item['Code mode reglt']);}
  228.        if(isset($item['ReverseFactoring']) && $item['ReverseFactoring']){$fournisseur->setReverseFactoring($item['ReverseFactoring']);}
  229.        if(isset($item['TVA Débit']) && $item['TVA Débit']){$fournisseur->setTvaDebit($item['TVA Débit']);}
  230.        $fournisseur->setIsFlux(true);
  231.        $fournisseur->setIsEnabled(true);
  232.        $this->em->persist($fournisseur);
  233.        $this->em->flush();
  234.        if(isset($item['IBAN']) && $item['IBAN']){
  235.            $ribs = $this->em->getRepository(Rib::class)->findBy(['fournisseur'=>$fournisseur->getId()]);
  236.            $rib = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur'=>$fournisseur->getId(),'iban'=>$item['IBAN']]);
  237.            if(!$rib){
  238.                $rib = new Rib();
  239.            }
  240.            $rib->setFournisseur($fournisseur);
  241.            $rib->setIsDefault(true);
  242.            if(isset($item['Code BIC']) && $item['Code BIC']){  $rib->setBic($item['Code BIC']);}
  243.            if(isset($item['IBAN']) && $item['IBAN']){  $rib->setIban($item['IBAN']);}
  244.            if(isset($item['Clé RIB']) && $item['Clé RIB']){  $rib->setCleRib($item['Clé RIB']);}
  245.            if(isset($item['Code guichet']) && $item['Code guichet']){  $rib->setCodeGuichet($item['Code guichet']);}
  246.            if(isset($item['Code banque']) && $item['Code banque']){  $rib->setCodeBanque($item['Code banque']);}
  247.            if(isset($item['Numéro de compte']) && $item['Numéro de compte']){  $rib->setNumeroCompte($item['Numéro de compte']);}
  248.            if(isset($item['Domiciliée à']) && $item['Domiciliée à']){  $rib->setDomiiciliee($item['Domiciliée à']);}
  249.            if(isset($item['RIB Actif'])){
  250.                if(trim($item['RIB Actif']) == 'O'){
  251.                    if($ribs){
  252.                        foreach ($ribs as $ribItem){
  253.                            $ribItem->setIsDefault(false);
  254.                            $this->em->persist($ribItem);
  255.                            $this->em->flush();
  256.                        }
  257.                    }
  258.                    $rib->setIsActive(true);
  259.                    $rib->setIsDefault(true);
  260.                }elseif ($item['RIB Actif'] == 'N'){
  261.                    $rib->setIsActive(false);
  262.                    $rib->setIsDefault(false);
  263.                }
  264.            }
  265.            $this->em->persist($rib);
  266.            $this->em->flush();
  267.        }
  268.    }
  269.    public function checkFournisseurRibActive($fournisseur){
  270.        $isActive = false;
  271.        if($fournisseur){
  272.            $ribs = $this->em->getRepository(Rib::class)->findBy(['fournisseur'=>$fournisseur->getId()]);
  273.            if($fournisseur->getIsFlux()){
  274.                foreach ($ribs as $rib){
  275.                    if($rib->getIsActive()){
  276.                        $isActive = true;
  277.                    }
  278.                }
  279.            }else{
  280.                if($ribs){
  281.                    $isActive = false;
  282.                }
  283.            }
  284.        }
  285.        return $isActive;
  286.    }
  287.     public function importAutoManuel(){
  288.         $files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040210-30-17.txt";
  289.         $files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040211-13-02.txt";
  290.         $files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040212-05-05.txt";
  291.         $files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040212-10-14.txt";
  292.         $files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040215-00-22.txt";
  293.         $files[] = $this->params->get('fournisseur_altarea_import_directory') . "/ERPI-2025040218-00-25.txt";
  294.        foreach ($files as $file) {
  295.            if ($file && file_exists($file)) {
  296.                $array = [];
  297.                $flag = true;
  298.                $i = 0;
  299.                $header = [];
  300.                $fichier = file($file);
  301.                foreach ($fichier as $line_num => $line) {
  302. //               if($line_num == 0 ){
  303. //                   continue;
  304. //               }
  305.                    $colonnes = explode('|', $line);
  306.                    if ($flag) {
  307.                        $header = [];
  308.                        foreach ($colonnes as $key1 => $cell) {
  309.                            $header[] = trim($cell);
  310.                        }
  311.                        $flag = false;
  312.                        continue;
  313.                    }
  314.                    foreach ($colonnes as $key => $cell) {
  315.                        $array[$i][$header[$key]] = trim(htmlspecialchars($cell));
  316.                    }
  317.                    $i++;
  318.                }
  319.                if ($array) {
  320.                    foreach ($array as $item) {
  321.                        $fournisseur = null;
  322.                        $isModif = true;
  323.                        if (isset($item['CodeFournisseur']) && $item['CodeFournisseur']) {
  324.                            $fournisseurs = $this->em->getRepository(Fournisseur::class)->findNotArchiveByCode($item['CodeFournisseur']);
  325.                            if (!$fournisseurs) {
  326.                                if (isset($item['Adresse messagerie 1']) && $item['Adresse messagerie 1']) {
  327.                                    $fournisseurs = $this->em->getRepository(Fournisseur::class)->findBy(['email' => $item['Adresse messagerie 1']]);
  328.                                }
  329.                            }
  330.                        }
  331.                        if ($fournisseurs) {
  332.                            foreach ($fournisseurs as $fournisseur) {
  333.                                $this->updateOrAddFournissuerByFichier($item, $fournisseur);
  334.                            }
  335.                        } else {
  336.                            $fournisseur = new Fournisseur();
  337.                            $isModif = false;
  338.                            $this->updateOrAddFournissuerByFichier($item, $fournisseur);
  339.                        }
  340.                    }
  341.                }
  342.            }
  343.        }
  344.     }
  345.     public function getUserNotaire(){
  346.         $notaires = $this->em->getRepository(User::class)->getNotaires();
  347.         return $notaires ;
  348.     }
  349.     public function getUserByTitreIntervenant($titre){
  350.         $fournisseurProjects = $this->em->getRepository(FournisseurProject::class)->getFournisseurProjectByTitre($titre);
  351.         $fournisseurs = [];
  352.         if($fournisseurProjects){
  353.             foreach ($fournisseurProjects as $fournisseurProject){
  354.                 $fournisseurs[] = $fournisseurProject;
  355.             }
  356.         }
  357.         return $fournisseurs ;
  358.     }
  359. }