src/Services/FactureFinanceService.php line 221

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  */
  5. namespace App\Services;
  6. use App\Entity\Avoir;
  7. use App\Entity\AvoirFactureFinance;
  8. use App\Entity\CommentFactureFinance;
  9. use App\Entity\CompteurErpiEcriture;
  10. use App\Entity\CompteurErpiEcritureReglement;
  11. use App\Entity\DocUpload;
  12. use App\Entity\Etap1;
  13. use App\Entity\Etap160;
  14. use App\Entity\Etap2;
  15. use App\Entity\Etap3;
  16. use App\Entity\Etap4;
  17. use App\Entity\Etap5;
  18. use App\Entity\Etap6;
  19. use App\Entity\Etap7;
  20. use App\Entity\Etap8;
  21. use App\Entity\Etap9;
  22. use App\Entity\Etap10;
  23. use App\Entity\Etap11;
  24. use App\Entity\Etap12;
  25. use App\Entity\Etap13;
  26. use App\Entity\Etap14;
  27. use App\Entity\Etap15;
  28. use App\Entity\Etap16;
  29. use App\Entity\Etap17;
  30. use App\Entity\Etap18;
  31. use App\Entity\Etap19;
  32. use App\Entity\Etap20;
  33. use App\Entity\Etap21;
  34. use App\Entity\Etap22;
  35. use App\Entity\Etaps;
  36. use App\Entity\EtapsCategory;
  37. use App\Entity\Facture;
  38. use App\Entity\FactureFinance;
  39. use App\Entity\FactureFinanceBrouillon;
  40. use App\Entity\FactureFinanceMontantTva;
  41. use App\Entity\FactureFinanceMontantTvaProject;
  42. use App\Entity\FactureFinancePaiement;
  43. use App\Entity\FactureFinancePaiementDetail;
  44. use App\Entity\Fournisseur;
  45. use App\Entity\LogSendFichier;
  46. use App\Entity\Project;
  47. use App\Entity\ProjectAvoir;
  48. use App\Entity\ProjectEdit;
  49. use App\Entity\ProjectFactureFinance;
  50. use App\Entity\Rib;
  51. use App\Entity\Spv;
  52. use App\Entity\User;
  53. use App\Form\FactureFinanceBrouillonType;
  54. use App\Form\FactureFinanceClassificationType;
  55. use App\Form\FactureFinanceType;
  56. use App\Form\FactureFinanceV2Type;
  57. use App\Form\ProjectEditType;
  58. use App\Form\ProjectType;
  59. use App\Form\UserType;
  60. use Kunnu\Dropbox\Dropbox;
  61. use Kunnu\Dropbox\DropboxApp;
  62. use Kunnu\Dropbox\Exceptions\DropboxClientException;
  63. use PhpOffice\PhpSpreadsheet\Shared\Date;
  64. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  65. use PhpOffice\PhpSpreadsheet\Style\Border;
  66. use PhpOffice\PhpSpreadsheet\Style\Color;
  67. use PhpOffice\PhpSpreadsheet\Style\Fill;
  68. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  69. use PhpOffice\PhpSpreadsheet\Writer\Csv;
  70. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  71. use Spipu\Html2Pdf\Html2Pdf;
  72. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  73. use Doctrine\ORM\EntityManagerInterface;
  74. use Symfony\Component\Filesystem\Filesystem;
  75. use Symfony\Component\Form\Extension\Core\Type\DateType;
  76. use Symfony\Component\Form\FormFactoryInterface;
  77. use Symfony\Component\HttpFoundation\File\UploadedFile;
  78. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  79. use Symfony\Component\Routing\RouterInterface;
  80. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  81. use Symfony\Contracts\Translation\TranslatorInterface;
  82. use Symfony\Component\Security\Core\Security;
  83. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  84. use Twig\Environment;
  85. use App\Entity\Centrale;
  86. use Symfony\Component\Validator\Constraints as Assert;
  87. use Symfony\Component\Validator\Validator\ValidatorInterface;
  88. use Mindee\Client;
  89. use Mindee\Product\Invoice\InvoiceV4;
  90. use Digitick\Sepa\TransferFile\Factory\TransferFileFacadeFactory;
  91. use Digitick\Sepa\PaymentInformation;
  92. use App\Services\HistoryService;
  93. use PhpOffice\PhpSpreadsheet\IOFactory;
  94. class FactureFinanceService
  95. {
  96.     private $em;
  97.     private $trans;
  98.     private $params;
  99.     private $security;
  100.     private $session;
  101.     private $twig;
  102.     private $notification;
  103.     private $fournisseurService;
  104.     const API_KEY_MINDEE = '3e387daa959dc24c042d11c37bd76db5';
  105.     const CHARGE_INVESTISSEMENT_DEPENSE = [
  106.         'CAPEX - Connection' => 'I',
  107.         'CAPEX - EPC' => 'I',
  108.         'CAPEX – Rent' => 'I',
  109.         'CAPEX - Insurance' => 'I',
  110.         'CAPEX – Monitoring' => 'I',
  111.         'CAPEX - Soulte' => 'I',
  112.         'CAPEX - Sponsor fee' => 'I',
  113.         'DEVEX - Architect' => 'I',
  114.         'DEVEX - DD legal' => 'I',
  115.         'DEVEX - DD technical' => 'I',
  116.         'DEVEX - Developer' => 'I',
  117.         'DEVEX - Geology' => 'I',
  118.         'DEVEX - Surveying' => 'I',
  119.         'DEVEX - Notary' => 'I',
  120.         'DEVEX - Baillif' => 'I',
  121.         'OPEX - Accounting' => 'C',
  122.         'OPEX - Bank account management' => 'C',
  123.         'OPEX - Corporation tax' => 'C',
  124.         'OPEX - EDF / Enedis / Gérédis' => 'C',
  125.         'OPEX - Expense account' => 'C',
  126.         'OPEX - Insurance' => 'C',
  127.         'OPEX - Legal' => 'C',
  128.         'OPEX - Local taxes' => 'C',
  129.         'OPEX - NICs & pensions' => 'C',
  130.         'OPEX - NDF' => 'C',
  131.         'OPEX - O&M' => 'C',
  132.         'OPEX - Other' => 'C',
  133.         'OPEX - Rent' => 'C',
  134.         'OPEX - Salaries' => 'C',
  135.         'OPEX - Tax' => 'C',
  136.         'OPEX - Tax - IFER' => 'C',
  137.         'OPEX - Tax - CFE' => 'C',
  138.         'OPEX - Tax - CVAE' => '-',
  139.         'OPEX - Telecom' => 'C',
  140.         'OTHER - Centralised cash management' => 'C',
  141.         'OTHER - Financial costs - Bank - Interest/Margin' => 'C',
  142.         'OTHER - Intraco' => 'C',
  143.         'OTHER - Management fees' => 'C',
  144.         'OTHER - Rebilling' => 'C',
  145.         'OTHER - SHL' => 'C',
  146.         'OTHER - Swap costs' => 'C',
  147.         'OTHER - VAT bridging loan' => 'C',
  148.         'OTHER - VAT payment' => 'C',
  149.         'OTHER - VAT refund' => 'C',
  150.         'CAPEX - AUTRES' => 'I',
  151.         'CAPEX - RACCORDEMENT' => 'I',
  152.         'CAPEX IMMO - TRAVAUX' => 'I',
  153.         'CAPEX STOCK - TRAVAUX' => 'C',
  154.         'CAPEX - ASSURANCES' => 'I',
  155.         'CAPEX - LOCATION' => 'I',
  156.         'CAPEX - STOCK' => 'C',
  157.         'DEVEX IMMO - HONORAIRES EXTERNES' => 'I',
  158.         'DEVEX STOCK - HONORAIRES EXTERNES' => 'C',
  159.         'DEVEX IMMO - HUISSIER' => 'I',
  160.         'DEVEX STOCK - HUISSIER' => 'C',
  161.         'DEVEX IMMO - CONSEILS LEGAUX' => 'I',
  162.         'DEVEX STOCK - CONSEILS LEGAUX' => 'C',
  163.         'DEVEX IMMO - DD TECHNIQUE' => 'I',
  164.         'DEVEX STOCK - DD TECHNIQUE' => 'C',
  165.         'DEVEX IMMO - DEVELOPPEUR' => 'I',
  166.         'DEVEX STOCK - DEVELOPPEUR' => 'C',
  167.         'DEVEX IMMO - NOTAIRE' => 'I',
  168.         'DEVEX STOCK - NOTAIRE' => 'C',
  169.         'OPEX - COMPTABILITE' => 'C',
  170.         'OPEX - ADMINISTRATIF' => 'C',
  171.         'OPEX - FRAIS BANCAIRES' => 'C',
  172.         'OPEX - EDF / Enedis / Gérédis' => 'C',
  173.         'OPEX - ASSURANCES' => 'C',
  174.         'OPEX - JURIDIQUE' => 'C',
  175.         'OPEX - O&M' => 'C',
  176.         'OPEX - AUTRES' => 'C',
  177.         'OPEX - LOYERS' => 'C',
  178.         'OPEX - TELECOM' => 'C',
  179.         'CAPEX IMMO - ACQUISITION TERRAIN' => 'I'
  180.     ];
  181.     public function __construct(
  182.         Environment $twig,
  183.         SessionInterface $session,
  184.         Security $security,
  185.         ParameterBagInterface $params,
  186.         EntityManagerInterface $em,
  187.         TranslatorInterface $trans,
  188.         ValidatorInterface $validator,
  189.         FlashBagInterface $flashBag,
  190.         UserPasswordEncoderInterface $passwordEncoder,
  191.         Notifications $notifications,
  192.         EtapsService $etapsService,
  193.         FormFactoryInterface $form,
  194.         HistoryService $historyService,
  195.         RouterInterface $router,
  196.         FournisseurService $fournisseurService
  197.     ) {
  198.         $this->em = $em;
  199.         $this->trans = $trans;
  200.         $this->params = $params;
  201.         $this->security = $security;
  202.         $this->session = $session;
  203.         $this->twig = $twig;
  204.         $this->validator = $validator;
  205.         $this->form = $form;
  206.         $this->flashBag = $flashBag;
  207.         $this->passwordEncoder = $passwordEncoder;
  208.         $this->notification = $notifications;
  209.         $this->etapsService = $etapsService;
  210.         $this->router = $router;
  211.         $this->historyService = $historyService;
  212.         $this->fournisseurService = $fournisseurService;
  213.     }
  214.     public function addFactureFinance($request,$user)
  215.     {
  216.         $facture = new FactureFinance();
  217.         $form = $this->form->create(FactureFinanceType::class, $facture);
  218.         $form->add('datePaiement', DateType::class, [
  219.             'widget' => 'single_text',
  220.             'attr' => ['class' => 'js-datepicker d-none'],
  221.             'format' => 'yyyy-MM-dd',
  222.             'html5' => true,
  223.             'empty_data' => '',
  224.             'required' => false
  225.         ]) ;
  226.         $form->handleRequest($request);
  227.         if ($form->isSubmitted() && $form->isValid()) {
  228.             $userCurrent = $this->security->getUser();
  229.             $spv = $form->get('spv')->getData();
  230.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  231.             }else {
  232.                 if (!$spv->getIsPrejeance() && !$userCurrent->getIsAccesCreateFactureSpv()) {
  233.                     return [
  234.                         'form' => $form->createView(),
  235.                         'messageErreur' => '<p>vous n\'êtes pas autorisé à créer la facture</p>',
  236.                         'success' => false,
  237.                         'action' => $this->router->generate('admin_facture_finance_submit'),
  238.                     ];
  239.                 }
  240.                 if ($spv->getIsPrejeance() && !$userCurrent->getIsAccesCreateFacturePrejeance()) {
  241.                     return [
  242.                         'form' => $form->createView(),
  243.                         'messageErreur' => '<p>vous n\'êtes pas autorisé à créer la facture</p>',
  244.                         'success' => false,
  245.                         'action' => $this->router->generate('admin_facture_finance_submit'),
  246.                     ];
  247.                 }
  248.             }
  249.             $projectFactureFinance = $form->get('projectFactureFinance')->getData();
  250.             $montantHt = $form->get('monatantHt')->getData();
  251.             $montantHtProject = 0;
  252.             $isProjectAltarea = false;
  253.             if(count($projectFactureFinance)> 0){
  254.                 foreach ($projectFactureFinance as $value){
  255.                     $montantHtProject = $montantHtProject + floatval(str_replace([','], ".", str_replace([' '], "", $value->getMontantHt())));
  256.                     if($value->getProject() && $value->getProject()->getEntreprise() && $value->getProject()->getEntreprise()->getIsAlteria()){
  257. //                        $isProjectAltarea = true;
  258.                     }
  259.                 }
  260.                 if($montantHtProject != 0){
  261.                     if((string)$montantHtProject != (string)floatval($montantHt)){
  262.                         return [
  263.                             'form' => $form->createView(),
  264.                             'messageErreur' => '<p>Veuillez verifier les prix des projets</p><p>Il faut que le prix du projet corresponde au prix global</p>',
  265.                             'success' => false,
  266.                             'action' => $this->router->generate('admin_facture_finance_submit'),
  267.                         ];
  268.                     }
  269.                 }
  270.                 if($isProjectAltarea){
  271.                     return [
  272.                         'form' => $form->createView(),
  273.                         'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">Les projets Altarea sont actuellement indisponibles sur le module Finance.</p><p class="blockCheckProjectAltarea2"> Seuls les projets Préjeance Industrial restent accessibles pour le moment.</p></div>',
  274.                         'success' => false,
  275.                         'action' => $this->router->generate('admin_facture_finance_submit'),
  276.                     ];
  277.                 }
  278.             }else{
  279.                 return [
  280.                     'form' => $form->createView(),
  281.                     'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champs projet est obligatoire !</p></div>',
  282.                     'success' => false,
  283.                     'action' => $this->router->generate('admin_facture_finance_submit'),
  284.                 ];
  285.             }
  286.             $facture->setUserCreated($user);
  287.             $facture->setStatus(FactureFinance::STATUS_EN_ATTENT_VALIDATION);
  288.             $fileFactureToken = $request->get('fileFactureFinance');
  289.             if($fileFactureToken){
  290.                 $fileFacture = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileFactureToken]);
  291.                 $nomenclature = $this->getNomenclature($facture,$fileFacture);
  292.                 $facture->setFileFacture($fileFacture);
  293.             }
  294.             $ribInput = $request->get('ribInput');
  295.             if($ribInput){
  296.                 $rib = $this->em->getRepository(Rib::class)->find($ribInput);
  297.                 $facture->setRib($rib);
  298.             }
  299.             $ribInputSpv = $request->get('ribInputSpv');
  300.             if($ribInputSpv){
  301.                 $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  302.                 $facture->setRibSpv($ribSpv);
  303.             }
  304. //            if(!$ribInput || !$ribInputSpv || $ribInput == 0 ||  $ribInputSpv == 0){
  305. //                return [
  306. //                    'form' => $form->createView(),
  307. //                    'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">les champs rib fournisseur et rib spv sont obligatoires !</p></div>',
  308. //                    'success' => false,
  309. //                    'action' => $this->router->generate('admin_facture_finance_submit'),
  310. //                ];
  311. //            }else{
  312. //                if($ribInputSpv != 0){
  313. //                    $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  314. //                    if($ribSpv){
  315. //                        if (preg_match('/^[a-zA-Z0-9]+$/', $ribSpv->getIban())) {
  316. //
  317. //                        } else {
  318. //                            return [
  319. //                                'form' => $form->createView(),
  320. //                                'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champ rib spv n\'est pas valide !</p></div>',
  321. //                                'success' => false,
  322. //                                'action' => $this->router->generate('admin_facture_finance_submit'),
  323. //                            ];
  324. //                        }
  325. //                    }
  326. //                }
  327. //            }
  328.             $this->em->persist($facture);
  329.             $this->em->flush();
  330.             $this->notification->setCompteurErpiPiece($facture);
  331.             $this->notification->setCompteurErpiEcriture($facture);
  332.             if(in_array('ROLE_OPERATEUR_FINANCIER', $user->getRoles())){
  333.                 $usersTo = $this->em->getRepository(User::class)->getUserByRole('ROLE_ADMINISTRATEUR_FINANCIER');
  334.                 if($usersTo){
  335.                     foreach ($usersTo as $userTo){
  336.                         $this->notification->addNotificationFacture($userTo,$user,$facture,'La facture n°'.$facture->getNumeroFacture30Max().' est en attente de validation');
  337.                     }
  338.                 }
  339.             }
  340.             return [
  341.                 'form' => $form->createView(),
  342.                 'factureFinance' => $facture,
  343.                 'success' => true
  344.             ];
  345.         }
  346.         return [
  347.             'form' => $form->createView(),
  348.             'success' => false,
  349.             'action' => $this->router->generate('admin_facture_finance_submit'),
  350.         ];
  351.     }
  352.     public function addFactureFinanceOld($request,$user)
  353.     {
  354.         $facture = new FactureFinance();
  355.         $form = $this->form->create(FactureFinanceType::class, $facture);
  356.         $form->add('datePaiement', DateType::class, [
  357.             'widget' => 'single_text',
  358.             'attr' => ['class' => 'js-datepicker d-none'],
  359.             'format' => 'yyyy-MM-dd',
  360.             'html5' => true,
  361.             'empty_data' => '',
  362.             'required' => false
  363.         ]) ;
  364.         $form->handleRequest($request);
  365.         if ($form->isSubmitted() && $form->isValid()) {
  366.             $userCurrent = $this->security->getUser();
  367.             $spv = $form->get('spv')->getData();
  368.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  369.             }else {
  370.                 if (!$spv->getIsPrejeance() && !$userCurrent->getIsAccesCreateFactureSpv()) {
  371.                     return [
  372.                         'form' => $form->createView(),
  373.                         'messageErreur' => '<p>vous n\'êtes pas autorisé à créer la facture</p>',
  374.                         'success' => false,
  375.                         'action' => $this->router->generate('admin_facture_finance_submit'),
  376.                     ];
  377.                 }
  378.                 if ($spv->getIsPrejeance() && !$userCurrent->getIsAccesCreateFacturePrejeance()) {
  379.                     return [
  380.                         'form' => $form->createView(),
  381.                         'messageErreur' => '<p>vous n\'êtes pas autorisé à créer la facture</p>',
  382.                         'success' => false,
  383.                         'action' => $this->router->generate('admin_facture_finance_submit'),
  384.                     ];
  385.                 }
  386.             }
  387.             $facture->setUserCreated($user);
  388.             $facture->setStatus(FactureFinance::STATUS_VERFIFIER_ANCIENT);
  389.             $fileFactureToken = $request->get('fileFactureFinance');
  390.             if($fileFactureToken){
  391.                 $fileFacture = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileFactureToken]);
  392.                 $nomenclature = $this->getNomenclature($facture,$fileFacture);
  393.                 $facture->setFileFacture($fileFacture);
  394.             }
  395.             $this->em->persist($facture);
  396.             $this->em->flush();
  397.             $this->notification->setCompteurErpiPiece($facture);
  398.             $this->notification->setCompteurErpiEcriture($facture);
  399.             return [
  400.                 'form' => $form->createView(),
  401.                 'factureFinance' => $facture,
  402.                 'success' => true
  403.             ];
  404.         }
  405.         return [
  406.             'form' => $form->createView(),
  407.             'success' => false,
  408.             'action' => $this->router->generate('admin_facture_finance_old_submit'),
  409.         ];
  410.     }
  411.     public function convertFactureFinanceOld($facture)
  412.     {
  413.         if ($facture->getStatus() == FactureFinance::STATUS_EN_ATTENT_VALIDATION) {
  414.             $facture->setStatus(FactureFinance::STATUS_VERFIFIER_ANCIENT);
  415.             $this->em->persist($facture);
  416.             $this->em->flush();
  417.             return true;
  418.         }
  419.         return false;
  420.     }
  421.     public function getNomenclature($facture,$file){
  422.         if(is_object($facture) && is_object($file)){
  423.             $numFacture = $facture->getNumeroFacture()?$facture->getNumeroFacture():'' ;
  424.             $nameSpv = $facture->getSpv() ? $facture->getSpv()->getName() : '';
  425.             $nameFournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  426.             $date = $facture->getDateFacture() ? $facture->getDateFacture()->format('ymd') : '';
  427.             $montant = $facture->getMonatantTtc() ? $facture->getMonatantTtc().'€' : '';
  428.             $extension = substr($file->getPath(), strrpos($file->getPath(), ".",-1) + 1);
  429.             $nomenclature = $nameFournisseur.' - '.$nameSpv.' - '.$numFacture.' - '.$date.' - '.$montant.'.'.$extension;
  430.             $file->setNomenclature($nomenclature);
  431.             $this->em->persist($file);
  432.             $this->em->flush();
  433.             return $nomenclature;
  434.         }
  435.         return false;
  436.     }
  437.     public function editFactureFinance($request,$token)
  438.     {
  439.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  440.         $prjectIds  = null ;
  441.         if($facture->getSpv()){
  442.             $projects = $this->em->getRepository(Project::class)->findBy(['spv'=>$facture->getSpv()->getId()]);
  443.             foreach ($projects as $project ){
  444.                 $prjectIds[] = $project->getId();
  445.             }
  446.         }
  447.         if($facture){
  448.             $form = $this->form->create(FactureFinanceType::class, $facture,['projectIds'=>$prjectIds]);
  449. //            if($facture->getStatus() == FactureFinance::STATUS_PAYER or $facture->getStatus() == FactureFinance::STATUS_DATE_PAIEMENT_PAYER or $facture->getStatus() == FactureFinance::STATUS_PAYER_NEW or $facture->getStatus() == FactureFinance::STATUS_DATE_PAIEMENT_PAYER_NEW or $facture->getStatus() == FactureFinance::STATUS_VERFIFIER_ANCIENT ){
  450.                 $form->add('datePaiement', DateType::class, [
  451.                     'widget' => 'single_text',
  452.                     'attr' => ['class' => 'js-datepicker d-none'],
  453.                     'format' => 'yyyy-MM-dd',
  454.                     'html5' => true,
  455.                     'empty_data' => '',
  456.                     'required' => false
  457.                 ]) ;
  458. //            }
  459.             $form->handleRequest($request);
  460.             if ($form->isSubmitted() && $form->isValid()) {
  461.                 $userCurrent = $this->security->getUser();
  462.                 $spv = $form->get('spv')->getData();
  463.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  464.                 }else {
  465.                     if (!$spv->getIsPrejeance() && !$userCurrent->getIsAccesCreateFactureSpv()) {
  466.                         return [
  467.                             'form' => $form->createView(),
  468.                             'messageErreur' => '<p>vous n\'êtes pas autorisé à modifier la facture</p>',
  469.                             'success' => false,
  470.                             'factureFinance' => $facture,
  471.                             'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  472.                         ];
  473.                     }
  474.                     if ($spv->getIsPrejeance() && !$userCurrent->getIsAccesCreateFacturePrejeance()) {
  475.                         return [
  476.                             'form' => $form->createView(),
  477.                             'messageErreur' => '<p>vous n\'êtes pas autorisé à modifier la facture</p>',
  478.                             'success' => false,
  479.                             'factureFinance' => $facture,
  480.                             'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  481.                         ];
  482.                     }
  483.                 }
  484.                 $projectFactureFinance = $form->get('projectFactureFinance')->getData();
  485.                 $montantHt = $form->get('monatantHt')->getData();
  486.                 $montantHtProject = 0;
  487.                 $isProjectAltarea = false;
  488.                 if(count($projectFactureFinance)> 0){
  489.                     foreach ($projectFactureFinance as $value){
  490.                         $montantHtProject = $montantHtProject + floatval(str_replace([','], ".", str_replace([' '], "", $value->getMontantHt())));
  491.                         if($value->getProject() && $value->getProject()->getEntreprise() && $value->getProject()->getEntreprise()->getIsAlteria()){
  492. //                            $isProjectAltarea = true;
  493.                         }
  494.                     }
  495.                     if($montantHtProject != 0){
  496.                         if((string)$montantHtProject != (string)floatval($montantHt)){
  497.                             return [
  498.                                 'form' => $form->createView(),
  499.                                 'messageErreur' => '<p>Veuillez verifier les prix des projets</p><p>Il faut que le prix du projet corresponde au prix global</p>',
  500.                                 'success' => false,
  501.                                 'factureFinance' => $facture,
  502.                                 'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  503.                             ];
  504.                         }
  505.                     }
  506. //                    if($isProjectAltarea){
  507. //                        return [
  508. //                            'form' => $form->createView(),
  509. //                            'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">Les projets Altarea sont actuellement indisponibles sur le module Finance.</p><p class="blockCheckProjectAltarea2"> Seuls les projets Préjeance Industrial restent accessibles pour le moment.</p></div>',
  510. //                            'success' => false,
  511. //                            'factureFinance' => $facture,
  512. //                            'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  513. //                        ];
  514. //                    }
  515.                 }else{
  516.                     return [
  517.                         'form' => $form->createView(),
  518.                         'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champs projet est obligatoire !</p></div>',
  519.                         'success' => false,
  520.                         'factureFinance' => $facture,
  521.                         'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  522.                     ];
  523.                 }
  524.                 $fileFactureToken = $request->get('fileFactureFinance');
  525.                 if($fileFactureToken){
  526.                     $fileFacture = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileFactureToken]);
  527.                     $nomenclature = $this->getNomenclature($facture,$fileFacture);
  528.                     $facture->setFileFacture($fileFacture);
  529.                 }
  530.                 if($facture->getStatus() == FactureFinance::STATUS_DEMANDE_MODIFICATION){
  531.                     $facture->setStatus(FactureFinance::STATUS_A_VERIFIER);
  532.                 }elseif ($facture->getStatus() == FactureFinance::STATUS_A_COMPLETER){
  533.                     $facture->setStatus(FactureFinance::STATUS_EN_ATTENT_VALIDATION);
  534.                 }
  535.                 $ribInput = $request->get('ribInput');
  536.                 if($ribInput){
  537.                     $rib = $this->em->getRepository(Rib::class)->find($ribInput);
  538.                     $facture->setRib($rib);
  539.                 }
  540.                 $ribInputSpv = $request->get('ribInputSpv');
  541.                 if($ribInputSpv){
  542.                     $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  543.                     $facture->setRibSpv($ribSpv);
  544.                 }
  545. //                if(!$ribInput || !$ribInputSpv || $ribInput == 0 ||  $ribInputSpv == 0){
  546. //                    return [
  547. //                        'form' => $form->createView(),
  548. //                        'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">les champs rib fournisseur et rib spv sont obligatoires !</p></div>',
  549. //                        'success' => false,
  550. //                        'factureFinance' => $facture,
  551. //                        'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  552. //                    ];
  553. //                }else{
  554. //                    if($ribInputSpv != 0){
  555. //                        $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  556. //                        if($ribSpv){
  557. //                            if (preg_match('/^[a-zA-Z0-9]+$/', $ribSpv->getIban())) {
  558. //
  559. //                            } else {
  560. //                                return [
  561. //                                    'form' => $form->createView(),
  562. //                                    'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champ rib spv n\'est pas valide !</p></div>',
  563. //                                    'success' => false,
  564. //                                    'factureFinance' => $facture,
  565. //                                    'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  566. //                                ];
  567. //                            }
  568. //                        }
  569. //                    }
  570. //                }
  571.                 $this->em->persist($facture);
  572.                 $this->em->flush();
  573.                 // add project in Produit(s)/Service(s)
  574.                 $tvaFactureFinancePriceService = $request->get('tvaFactureFinancePriceService');
  575.                 $tvaFactureFinancePriceServiceOld = $this->em->getRepository(FactureFinanceMontantTvaProject::class)->getByFacture($facture);
  576.                 if($tvaFactureFinancePriceServiceOld){
  577.                     foreach ($tvaFactureFinancePriceServiceOld as $value){
  578.                         $this->em->remove($value);
  579.                     }
  580.                     $this->em->flush();
  581.                 }
  582.                 if($tvaFactureFinancePriceService){
  583.                     foreach ($tvaFactureFinancePriceService as $tvaFactureFinancePriceServiceItem) {
  584.                         foreach ($tvaFactureFinancePriceServiceItem as $item) {
  585.                             if(isset($item['project'])){
  586.                                 $tvaFactureFinance = $this->em->getRepository(FactureFinanceMontantTva::class)->find($item['idService']);
  587.                                 $project = $this->em->getRepository(Project::class)->find($item['project']);
  588.                                 $tvaFactureFinancePriceServiceEntity = new FactureFinanceMontantTvaProject();
  589.                                 $tvaFactureFinancePriceServiceEntity->setFactureFinanceMontantTva($tvaFactureFinance);
  590.                                 $tvaFactureFinancePriceServiceEntity->setProject($project);
  591.                                 $tvaFactureFinancePriceServiceEntity->setMontantHt($item['montantHt']);
  592.                                 $tvaFactureFinancePriceServiceEntity->setMontantTtc($item['montantTtc']);
  593.                                 $this->em->persist($tvaFactureFinancePriceServiceEntity);
  594.                                 $this->em->flush();
  595.                             }
  596.                         }
  597.                     }
  598.                 }
  599.                 $this->notification->setCompteurErpiEcriture($facture);
  600.                 return [
  601.                     'form' => $form->createView(),
  602.                     'factureFinance' => $facture,
  603.                     'success' => true
  604.                 ];
  605.             }
  606.         }
  607.         return [
  608.             'form' => $form->createView(),
  609.             'factureFinance' => $facture,
  610.             'success' => false,
  611.             'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  612.         ];
  613.     }
  614.     public function editFactureFinanceV2($request,$token)
  615.     {
  616.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  617.         $prjectIds  = null ;
  618.         if($facture->getSpv()){
  619.             $projects = $this->em->getRepository(Project::class)->findBy(['spv'=>$facture->getSpv()->getId()]);
  620.             foreach ($projects as $project ){
  621.                 $prjectIds[] = $project->getId();
  622.             }
  623.         }
  624.         if($facture){
  625.             $form = $this->form->create(FactureFinanceV2Type::class, $facture,['projectIds'=>$prjectIds]);
  626.             $form->add('datePaiement', DateType::class, [
  627.                 'widget' => 'single_text',
  628.                 'attr' => ['class' => 'js-datepicker d-none'],
  629.                 'format' => 'yyyy-MM-dd',
  630.                 'html5' => true,
  631.                 'empty_data' => '',
  632.                 'required' => false
  633.             ]) ;
  634.             $form->handleRequest($request);
  635.             if($facture->getStatus() == FactureFinance::STATUS_REFUS){
  636.                 $this->flashBag->add(
  637.                     'danger',
  638.                     'Facture refusée'
  639.                 );
  640.                 return [
  641.                     'form' => $form->createView(),
  642.                     'factureFinance' => $facture,
  643.                     'success' => false,
  644.                     'redirect' => true,
  645.                     'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  646.                 ];
  647.             }
  648.             if ($form->isSubmitted() && $form->isValid()) {
  649.                 $userCurrent = $this->security->getUser();
  650.                 $spv = $form->get('spv')->getData();
  651.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  652.                 }else {
  653.                     if (!$spv->getIsPrejeance() && !$userCurrent->getIsAccesCreateFactureSpv()) {
  654.                         return [
  655.                             'form' => $form->createView(),
  656.                             'messageErreur' => '<p>vous n\'êtes pas autorisé à modifier la facture</p>',
  657.                             'success' => false,
  658.                             'factureFinance' => $facture,
  659.                             'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  660.                         ];
  661.                     }
  662.                     if ($spv->getIsPrejeance() && !$userCurrent->getIsAccesCreateFacturePrejeance()) {
  663.                         return [
  664.                             'form' => $form->createView(),
  665.                             'messageErreur' => '<p>vous n\'êtes pas autorisé à modifier la facture</p>',
  666.                             'success' => false,
  667.                             'factureFinance' => $facture,
  668.                             'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  669.                         ];
  670.                     }
  671.                 }
  672.                 $projectFactureFinance = $form->get('projectFactureFinance')->getData();
  673.                 $montantHt = $form->get('monatantHt')->getData();
  674.                 $montantHtProject = 0;
  675.                 $isProjectAltarea = false;
  676.                 if(count($projectFactureFinance)> 0){
  677.                     foreach ($projectFactureFinance as $value){
  678.                         $montantHtProject = $montantHtProject + floatval(str_replace([','], ".", str_replace([' '], "", $value->getMontantHt())));
  679.                         if($value->getProject() && $value->getProject()->getEntreprise() && $value->getProject()->getEntreprise()->getIsAlteria()){
  680.                             $isProjectAltarea = true;
  681.                         }
  682.                     }
  683.                     if($montantHtProject != 0){
  684.                         if((string)$montantHtProject != (string)floatval($montantHt)){
  685.                             return [
  686.                                 'form' => $form->createView(),
  687.                                 'messageErreur' => '<p>Veuillez verifier les prix des projets</p><p>Il faut que le prix du projet corresponde au prix global</p>',
  688.                                 'success' => false,
  689.                                 'factureFinance' => $facture,
  690.                                 'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  691.                             ];
  692.                         }
  693.                     }
  694. //                    if($isProjectAltarea){
  695. //                        return [
  696. //                            'form' => $form->createView(),
  697. //                            'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">Les projets Altarea sont actuellement indisponibles sur le module Finance.</p><p class="blockCheckProjectAltarea2"> Seuls les projets Préjeance Industrial restent accessibles pour le moment.</p></div>',
  698. //                            'success' => false,
  699. //                            'factureFinance' => $facture,
  700. //                            'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  701. //                        ];
  702. //                    }
  703.                 }else{
  704.                     return [
  705.                         'form' => $form->createView(),
  706.                         'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champs projet est obligatoire !</p></div>',
  707.                         'success' => false,
  708.                         'factureFinance' => $facture,
  709.                         'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  710.                     ];
  711.                 }
  712.                 // Si Taux de TVA = "Autre" (0) : les sommes des lignes de TVA doivent correspondre aux montants globaux
  713.                 if($facture->getAutoliquidation()){
  714.                     $facture->setTauxTva(20);
  715.                 }elseif(count($facture->getTvaFactureFinance()) > 0 && $facture->getTauxTva() !== null && $facture->getTauxTva() !== '' && floatval($facture->getTauxTva()) == 0){
  716.                     $sumTvaAutre = 0; $sumHtAutre = 0; $sumTtcAutre = 0;
  717.                     foreach ($facture->getTvaFactureFinance() as $ligneTva){
  718.                         $sumTvaAutre += floatval(str_replace(',', '.', str_replace(' ', '', (string)$ligneTva->getTva())));
  719.                         $sumHtAutre  += floatval(str_replace(',', '.', str_replace(' ', '', (string)$ligneTva->getMontantHt())));
  720.                         $sumTtcAutre += floatval(str_replace(',', '.', str_replace(' ', '', (string)$ligneTva->getMontantTtc())));
  721.                     }
  722.                     $tvaGlobal = floatval(str_replace(',', '.', str_replace(' ', '', (string)$facture->getTva())));
  723.                     $htGlobal  = floatval(str_replace(',', '.', str_replace(' ', '', (string)$facture->getMonatantHt())));
  724.                     $ttcGlobal = floatval(str_replace(',', '.', str_replace(' ', '', (string)$facture->getMonatantTtc())));
  725.                     if(round($sumTvaAutre, 2) != round($tvaGlobal, 2)
  726.                         || round($sumHtAutre, 2) != round($htGlobal, 2)
  727.                         || round($sumTtcAutre, 2) != round($ttcGlobal, 2)){
  728.                         $erreurs = '';
  729.                         if(round($sumTvaAutre, 2) != round($tvaGlobal, 2)){
  730.                             $erreurs .= '<p>La somme des montants TVA des lignes ('.$sumTvaAutre.') ne correspond pas au Montant TVA ('.$tvaGlobal.').</p>';
  731.                         }
  732.                         if(round($sumHtAutre, 2) != round($htGlobal, 2)){
  733.                             $erreurs .= '<p>La somme des montants HT des lignes ('.$sumHtAutre.') ne correspond pas au Montant HT ('.$htGlobal.').</p>';
  734.                         }
  735.                         if(round($sumTtcAutre, 2) != round($ttcGlobal, 2)){
  736.                             $erreurs .= '<p>La somme des montants TTC des lignes ('.$sumTtcAutre.') ne correspond pas au Montant TTC ('.$ttcGlobal.').</p>';
  737.                         }
  738.                         return [
  739.                             'form' => $form->createView(),
  740.                             'messageErreur' => $erreurs,
  741.                             'success' => false,
  742.                             'factureFinance' => $facture,
  743.                             'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  744.                         ];
  745.                     }
  746.                 }
  747.                 $fileFactureToken = $request->get('fileFactureFinance');
  748.                 if($fileFactureToken){
  749.                     $fileFacture = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileFactureToken]);
  750.                     $nomenclature = $this->getNomenclature($facture,$fileFacture);
  751.                     $facture->setFileFacture($fileFacture);
  752.                 }
  753.                 if($facture->getStatus() == FactureFinance::STATUS_DEMANDE_MODIFICATION){
  754.                     $facture->setStatus(FactureFinance::STATUS_A_VERIFIER);
  755.                 }elseif ($facture->getStatus() == FactureFinance::STATUS_A_COMPLETER){
  756.                     $facture->setStatus(FactureFinance::STATUS_EN_ATTENT_VALIDATION);
  757.                 }
  758.                 $ribInput = $request->get('ribInput');
  759.                 if($ribInput){
  760.                     $rib = $this->em->getRepository(Rib::class)->find($ribInput);
  761.                     $facture->setRib($rib);
  762.                 }
  763.                 $ribInputSpv = $request->get('ribInputSpv');
  764.                 if($ribInputSpv){
  765.                     $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  766.                     $facture->setRibSpv($ribSpv);
  767.                 }
  768.                 $this->em->persist($facture);
  769.                 $this->em->flush();
  770.                 $this->notification->setCompteurErpiEcriture($facture);
  771.                 return [
  772.                     'form' => $form->createView(),
  773.                     'factureFinance' => $facture,
  774.                     'success' => true
  775.                 ];
  776.             }
  777.         }
  778.         return [
  779.             'form' => $form->createView(),
  780.             'factureFinance' => $facture,
  781.             'success' => false,
  782.             'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  783.         ];
  784.     }
  785.     public function checkRibSpv($request,$token){
  786.         $factureFinance = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  787.         $ribInput = $factureFinance->getRib();
  788.         $ribInputSpv = $factureFinance->getRibSpv();
  789.         if(!$ribInput || !$ribInputSpv){
  790.             return [
  791.                 'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">les champs rib fournisseur et rib spv sont obligatoires !</p></div>',
  792.                 'success' => false,
  793.                 'status' => 1,
  794.             ];
  795.         }else{
  796.             if($ribInputSpv){
  797.                 if (preg_match('/^[a-zA-Z0-9]+$/', $ribInputSpv->getIban())) {
  798.                 } else {
  799.                     return [
  800.                         'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champ rib spv n\'est pas valide !</p></div>',
  801.                         'success' => false,
  802.                         'status' => 2,
  803.                     ];
  804.                 }
  805.             }
  806.         }
  807.         return [
  808.             'messageErreur' => '',
  809.             'success' => true,
  810.         ];
  811.     }
  812.     public function editFactureFinanceBrouillon($request,$token)
  813.     {
  814.         $facture = $this->em->getRepository(FactureFinanceBrouillon::class)->findOneBy(['token'=>$token]);
  815.         if($facture){
  816.             $form = $this->form->create(FactureFinanceBrouillonType::class, $facture);
  817.             $form->handleRequest($request);
  818.             if ($form->isSubmitted() && $form->isValid()) {
  819.                 $fileFactureToken = $request->get('fileFactureFinance');
  820.                 if($fileFactureToken){
  821.                     $fileFacture = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileFactureToken]);
  822.                     $facture->setFileFacture($fileFacture);
  823.                 }
  824.                 if($facture->getCategory() == 'Avoir'){
  825.                     $this->em->persist($facture);
  826.                     $this->em->flush();
  827.                     $factureFinance = new Avoir();
  828.                     $factureFinance->setFileAvoir($facture->getFileFacture());
  829.                     $factureFinance->setStatus(Avoir::STATUS_EN_ATTENT_VALIDATION);
  830.                     $factureFinance->setDateAvoir($facture->getDateFacture());
  831.                     $factureFinance->setDeveloppeur($facture->getDeveloppeur());
  832.                     $factureFinance->setEpc($facture->getEpc());
  833.                     $factureFinance->setFournisseur($facture->getFournisseur());
  834.                     $factureFinance->setMonatantTtc($facture->getMonatantTtc());
  835.                     $factureFinance->setMonatantHt($facture->getMonatantHt());
  836.                     $factureFinance->setNote($facture->getNote());
  837.                     $factureFinance->setNumeroAvoir($facture->getNumeroFacture());
  838.                     $factureFinance->setSpv($facture->getSpv());
  839.                     $factureFinance->setTauxTva($facture->getTauxTva());
  840.                     $factureFinance->setTva($facture->getTva());
  841.                     $factureFinance->setUserCreated($facture->getUserCreated());
  842.                     if (count($facture->getProjectFactureFinanceBrouillon())) {
  843.                         foreach ($facture->getProjectFactureFinanceBrouillon() as $projectBrouillon) {
  844.                             $projectFactureFinance = new ProjectAvoir();
  845.                             $projectFactureFinance->setTva($projectBrouillon->getTva());
  846.                             $projectFactureFinance->setCategory($projectBrouillon->getCategory());
  847.                             $projectFactureFinance->setProject($projectBrouillon->getProject());
  848.                             $projectFactureFinance->setEtap($projectBrouillon->getEtap());
  849.                             $projectFactureFinance->setMontantHt($projectBrouillon->getMontantHt());
  850.                             $projectFactureFinance->setMontantTtc($projectBrouillon->getMontantTtc());
  851.                             $projectFactureFinance->setAvoir($factureFinance);
  852.                             $this->em->persist($projectFactureFinance);
  853.                         }
  854.                     }
  855.                     $this->em->persist($factureFinance);
  856.                     $this->em->flush();
  857.                     $this->notification->setCompteurErpiPiece(null,$factureFinance);
  858.                     $this->notification->setCompteurErpiEcriture(null,$facture);
  859.                     $facture->setStatus(FactureFinance::STATUS_Brouillon_valide);
  860.                     $this->em->persist($facture);
  861.                     $this->em->flush();
  862.                     if($factureFinance->getFileFacture()){
  863.                         $this->getNomenclatureAvoir($factureFinance,$factureFinance->getFileFacture());
  864.                     }
  865.                     return [
  866.                         'form' => $form->createView(),
  867.                         'factureFinance' => $facture,
  868.                         'avoir' => $factureFinance,
  869.                         'success' => true
  870.                     ];
  871.                 }else {
  872.                     $projectFactureFinance = $form->get('projectFactureFinanceBrouillon')->getData();
  873.                     $montantHt = $form->get('monatantHt')->getData();
  874.                     $montantHtProject = 0;
  875.                     $isProjectAltarea = false;
  876.                     if(count($projectFactureFinance)> 0){
  877.                         foreach ($projectFactureFinance as $value){
  878.                             $montantHtProject = $montantHtProject + floatval(str_replace([','], ".", str_replace([' '], "", $value->getMontantHt())));
  879.                             if($value->getProject() && $value->getProject()->getEntreprise() && $value->getProject()->getEntreprise()->getIsAlteria()){
  880. //                                $isProjectAltarea = true;
  881.                             }
  882.                         }
  883.                         if($montantHtProject != 0){
  884.                             if((string)$montantHtProject != (string)floatval($montantHt)){
  885.                                 return [
  886.                                     'form' => $form->createView(),
  887.                                     'messageErreur' => '<p>Veuillez verifier les prix des projets</p><p>Il faut que le prix du projet corresponde au prix global</p>',
  888.                                     'factureFinance' => $facture,
  889.                                     'success' => false,
  890.                                     'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  891.                                 ];
  892.                             }
  893.                         }
  894.                         if($isProjectAltarea){
  895.                             return [
  896.                                 'form' => $form->createView(),
  897.                                 'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">Les projets Altarea sont actuellement indisponibles sur le module Finance.</p><p class="blockCheckProjectAltarea2"> Seuls les projets Préjeance Industrial restent accessibles pour le moment.</p></div>',
  898.                                 'factureFinance' => $facture,
  899.                                 'success' => false,
  900.                                 'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  901.                             ];
  902.                         }
  903.                     }else{
  904.                         return [
  905.                             'form' => $form->createView(),
  906.                             'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champs projet est obligatoire !</p></div>',
  907.                             'factureFinance' => $facture,
  908.                             'success' => false,
  909.                             'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  910.                         ];
  911.                     }
  912.                     $factureFinanceOld = $this->em->getRepository(FactureFinance::class)->findOneBy(['numeroFacture' => $facture->getNumeroFacture(), 'fournisseur' => $facture->getFournisseur()]);
  913.                     if ($factureFinanceOld) {
  914.                         return [
  915.                             'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">facture existe déja!</p></div>',
  916.                             'form' => $form->createView(),
  917.                             'factureFinance' => $facture,
  918.                             'success' => false,
  919.                             'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  920.                         ];
  921.                     }
  922.                     $facture->setStatus(FactureFinance::STATUS_EN_ATTENT_VALIDATION);
  923.                     $this->em->persist($facture);
  924.                     $this->em->flush();
  925.                     $factureFinance = new FactureFinance();
  926.                     $facture->setFileFacture($fileFacture);
  927.                     $factureFinance->setFileFacture($facture->getFileFacture());
  928.                     $factureFinance->setStatus($facture->getStatus());
  929.                     $factureFinance->setCategory($facture->getCategory());
  930.                     $factureFinance->setClassification($facture->getClassification());
  931.                     $factureFinance->setDate($facture->getDate());
  932.                     $factureFinance->setDateFacture($facture->getDateFacture());
  933.                     $factureFinance->setDatePaiement($facture->getDatePaiement());
  934.                     $factureFinance->setDelaiPaiementDate($facture->getDelaiPaiementDate());
  935.                     $factureFinance->setDeveloppeur($facture->getDeveloppeur());
  936.                     $factureFinance->setEpc($facture->getEpc());
  937.                     $factureFinance->setFournisseur($facture->getFournisseur());
  938.                     $factureFinance->setMonatantTtc($facture->getMonatantTtc());
  939.                     $factureFinance->setMonatantHt($facture->getMonatantHt());
  940.                     $factureFinance->setNote($facture->getNote());
  941.                     $factureFinance->setNumeroFacture($facture->getNumeroFacture());
  942.                     $factureFinance->setSpv($facture->getSpv());
  943.                     $factureFinance->setTauxTva($facture->getTauxTva());
  944.                     $factureFinance->setTva($facture->getTva());
  945.                     $factureFinance->setUserCreated($facture->getUserCreated());
  946.                     if (count($facture->getProjectFactureFinanceBrouillon()) > 0) {
  947.                         foreach ($facture->getProjectFactureFinanceBrouillon() as $projectBrouillon) {
  948.                             $projectFactureFinance = new ProjectFactureFinance();
  949.                             $projectFactureFinance->setTva($projectBrouillon->getTva());
  950.                             $projectFactureFinance->setCategory($projectBrouillon->getCategory());
  951.                             $projectFactureFinance->setProject($projectBrouillon->getProject());
  952.                             $projectFactureFinance->setEtap($projectBrouillon->getEtap());
  953.                             $projectFactureFinance->setMontantHt($projectBrouillon->getMontantHt());
  954.                             $projectFactureFinance->setMontantTtc($projectBrouillon->getMontantTtc());
  955.                             $projectFactureFinance->setFactureFinance($factureFinance);
  956.                             $this->em->persist($projectFactureFinance);
  957.                         }
  958.                     }else{
  959.                     }
  960.                     $ribInput = $request->get('ribInput');
  961.                     if($ribInput){
  962.                         $rib = $this->em->getRepository(Rib::class)->find($ribInput);
  963.                         $facture->setRib($rib);
  964.                     }
  965.                     $ribInputSpv = $request->get('ribInputSpv');
  966.                     if($ribInputSpv){
  967.                         $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  968.                         $facture->setRibSpv($ribSpv);
  969.                     }
  970. //                    if(!$ribInput || !$ribInputSpv || $ribInput == 0 ||  $ribInputSpv == 0){
  971. //                        return [
  972. //                            'form' => $form->createView(),
  973. //                            'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">les champs rib fournisseur et rib spv sont obligatoires !</p></div>',
  974. //                            'factureFinance' => $facture,
  975. //                            'success' => false,
  976. //                            'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  977. //                        ];
  978. //                    }else{
  979. //                        if($ribInputSpv != 0){
  980. //                            $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  981. //                            if($ribSpv){
  982. //                                if (preg_match('/^[a-zA-Z0-9]+$/', $ribSpv->getIban())) {
  983. //
  984. //                                } else {
  985. //                                    return [
  986. //                                        'form' => $form->createView(),
  987. //                                        'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champ rib spv n\'est pas valide !</p></div>',
  988. //                                        'factureFinance' => $facture,
  989. //                                        'success' => false,
  990. //                                        'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  991. //                                    ];
  992. //                                }
  993. //                            }
  994. //                        }
  995. //                    }
  996.                     $this->em->persist($factureFinance);
  997.                     $this->em->flush();
  998.                     $this->notification->setCompteurErpiPiece($factureFinance);
  999.                     $this->notification->setCompteurErpiEcriture($factureFinance);
  1000.                     $facture->setStatus(FactureFinance::STATUS_Brouillon_valide);
  1001.                     $this->em->persist($facture);
  1002.                     $this->em->flush();
  1003.                     if($facture->getCommentaire()) {
  1004.                         $commentFactureFinance = new CommentFactureFinance();
  1005.                         $commentFactureFinance->setFactureFinance($factureFinance);
  1006.                         $commentFactureFinance->setComment($facture->getCommentaire());
  1007.                         $commentFactureFinance->setUser($this->security->getUser());
  1008.                         $this->em->persist($commentFactureFinance);
  1009.                         $this->em->flush();
  1010.                     }
  1011.                     if($factureFinance->getFileFacture()){
  1012.                         $this->getNomenclature($factureFinance,$factureFinance->getFileFacture());
  1013.                     }
  1014.                     return [
  1015.                         'form' => $form->createView(),
  1016.                         'factureFinance' => $facture,
  1017.                         'facture' => $factureFinance,
  1018.                         'success' => true
  1019.                     ];
  1020.                 }
  1021.             }
  1022.         }
  1023.         return [
  1024.             'form' => $form->createView(),
  1025.             'factureFinance' => $facture,
  1026.             'success' => false,
  1027.             'action' => $this->router->generate('admin_facture_finance_submit_brouillon',['token'=>$token]),
  1028.         ];
  1029.     }
  1030.     public function paginateFacture($request,$isAfaire = false,$isPayer = false){
  1031.         $length = $request->get('length');
  1032.         $length = $length && ($length!=-1)?$length:0;
  1033.         $start = $request->get('start');
  1034.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1035.         $column =  $search = $request->get('columns');
  1036.         $order = $request->get('order')[0];
  1037.         $columnOrder = $order['column'];
  1038.         $dirOrder = $order['dir'];
  1039.         $columNameOrder = $column[$columnOrder]['data'];
  1040.         $search = $request->get('search');
  1041.         $spv = $request->get('spv');
  1042.         $fournisseur = $request->get('fournisseur');
  1043.         $status = $request->get('statusFactureFinance');
  1044.         $btnTypeTab = $request->get('btnTypeTab');
  1045.         $arraySession = [];
  1046.         $arraySession['search'] = trim(@$search['value']);
  1047.         $arraySession['spv'] = $spv;
  1048.         $arraySession['fournisseur'] = $fournisseur;
  1049.         $arraySession['statusFactureFinance'] = $status;
  1050.         $arraySession['length'] = $length;
  1051.         $arraySession['btnTypeTab'] = $btnTypeTab;
  1052.         $this->session->set('arraySessionFilterFactureFinance',$arraySession);
  1053.         $searchTabDate = $request->get('searchTabDate');
  1054.         $responsableProject = $request->get('responsableProject');
  1055.         $responsableDevProject = $request->get('responsableDevProject');
  1056.         $classificationFactureFinance = $request->get('classificationFactureFinance');
  1057.         $paiementFactureDate = $request->get('paiementFactureDate');
  1058.         $paiementFactureDate1 = $request->get('paiementFactureDate1') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate1')) : null ;
  1059.         $paiementFactureDate2 = $request->get('paiementFactureDate2') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate2')) : null;
  1060.         $filters = [
  1061.             'query' => trim(@$search['value']),
  1062.             'spv' => $spv,
  1063.             'fournisseur' => $fournisseur,
  1064.             'status' => $status,
  1065.             'isAfaire' => $isAfaire,
  1066.             'isPayer' => $isPayer,
  1067.             'paiementFactureDate' => $paiementFactureDate,
  1068.             'btnTypeTab' => $btnTypeTab,
  1069.             'paiementFactureDate1' => $paiementFactureDate1,
  1070.             'paiementFactureDate2' => $paiementFactureDate2,
  1071.             'responsableProject' => $responsableProject,
  1072.             'classificationFactureFinance' => $classificationFactureFinance,
  1073.             'responsableDevProject' => $responsableDevProject
  1074.         ];
  1075.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  1076.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1077.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1078.         $output = array(
  1079.             'data' => array(),
  1080.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1081.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1082.         );
  1083.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1084.         foreach ($factureFinances as $factureFinance) {
  1085.             $action =
  1086.                 $this->twig->render(
  1087.                     'admin/facture-finance/default/bouton.html.twig', array(
  1088.                     'factureFinance' => $factureFinance
  1089.                 ));
  1090.             $action2 =
  1091.                 $this->twig->render(
  1092.                     'admin/facture-finance/default/bouton-valid.html.twig', array(
  1093.                     'factureFinance' => $factureFinance
  1094.                 ));
  1095.             $action3 =
  1096.                 $this->twig->render(
  1097.                     'admin/facture-finance/default/bouton3.html.twig', array(
  1098.                     'factureFinance' => $factureFinance
  1099.                 ));
  1100.             $statut =
  1101.                 $this->twig->render(
  1102.                     'admin/facture-finance/default/status.html.twig', array(
  1103.                     'status' => $factureFinance->getStatus(),
  1104.                     'factureFinance' => $factureFinance,
  1105.                 ));
  1106.             $dateValid =
  1107.                 $this->twig->render(
  1108.                     'admin/facture-finance/default/input-date-valid.html.twig', array(
  1109.                     'factureFinance' => $factureFinance
  1110.                 ));
  1111.             $btnSelect =
  1112.                 $this->twig->render(
  1113.                     'admin/facture-finance/default/btnSelect.html.twig', array(
  1114.                     'factureFinance' => $factureFinance
  1115.                 ));
  1116.             $fluxBancaireSpv = '';
  1117.             $banqueSpvStr = '';
  1118.             if($factureFinance->getSpv()){
  1119.                 $fluxBancaireSpv = $factureFinance->getSpv()->getFluxBancaire() ? 'Exabanque' : 'Manuel';
  1120.                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId(), 'isDefault' => true]);
  1121.                 if(!$spvBanque){
  1122.                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId()]);
  1123.                 }
  1124.                 if($spvBanque){
  1125.                     $banqueSpvStr = $spvBanque->getBanque();
  1126.                 }
  1127.             }
  1128.             $banqueFourniseurStr = '';
  1129.             if($factureFinance->getFournisseur()){
  1130.                 if($factureFinance->getRib()) {
  1131.                     $fournisseurBanque = $factureFinance->getRib();
  1132.                 }else {
  1133.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId(), 'isDefault' => true]);
  1134.                 }
  1135.                 if(!$fournisseurBanque){
  1136.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId()]);
  1137.                 }
  1138.                 if($fournisseurBanque){
  1139.                     $banqueFourniseurStr = $fournisseurBanque->getBanque();
  1140.                 }
  1141.             }
  1142.             if($factureFinance->getIsAvoir()){
  1143.                 $avoir = $factureFinance->getMonatantAvoirTtc();
  1144.                 if($factureFinance->getMonatantRestantTtc() == '0' ){
  1145.                     $isBanque = false;
  1146.                 }else{
  1147.                     $isBanque = true;
  1148.                 }
  1149.             }else{
  1150.                 $avoir = 0;
  1151.                 $isBanque = true;
  1152.             }
  1153.             $projects = '';
  1154.             if(count($factureFinance->getProjectFactureFinance())>0){
  1155.                 $projectsArray = [];
  1156.                 foreach ($factureFinance->getProjectFactureFinance() as $item){
  1157.                     if($item->getProject()){
  1158.                         $projectsArray[strtolower($item->getProject()->getName())] = $item;
  1159.                     }
  1160.                 }
  1161.                 ksort($projectsArray);
  1162.                 $project =  reset($projectsArray);
  1163.                 if(count($factureFinance->getProjectFactureFinance()) == 1){
  1164.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName() : ' ' ;
  1165.                 }else{
  1166.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName().'...' : ' ' ;
  1167.                 }
  1168.             }
  1169.             $output['data'][] = [
  1170.                 'responsive_id' => '',
  1171.                 'id' => $factureFinance->getId(),
  1172.                 'numeroFacture' => $factureFinance->getNumeroFacture(),
  1173.                 'numeroFactureDiaposon' => $factureFinance->getNumeroFactureDiaposon(),
  1174.                 'compteurErpiPiece' => $factureFinance->getCompteurErpiPiece(),
  1175.                 'monatantTtc' => $factureFinance->getMonatantTtc() ? $this->espaceNumber($factureFinance->getMonatantTtc()).'€' : '',
  1176.                 'monatantHt' => $factureFinance->getMonatantHt() ? $this->espaceNumber($factureFinance->getMonatantHt()).'€' : '',
  1177.                 'tva' => $factureFinance->getTva() ? $factureFinance->getTva().'€' : '',
  1178.                 'category' => $factureFinance->getCategory() ? $factureFinance->getCategory() : '',
  1179.                 'fluxBancaireSpv' => $fluxBancaireSpv,
  1180.                 'fournisseur' => $factureFinance->getFournisseur() ? $factureFinance->getFournisseur()->getName() : '',
  1181.                 'developpeur' => $factureFinance->getDeveloppeur() ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '',
  1182.                 'spv' => $factureFinance->getSpv() ? $factureFinance->getSpv()->getName() : '',
  1183.                 'date' => $factureFinance->getDelaiPaiementDate() ? $factureFinance->getDelaiPaiementDate()->format('d/m/Y') : '',
  1184.                 'banqueSpv' => $banqueSpvStr,
  1185.                 'banqueFourniseur' => $isBanque ? $banqueFourniseurStr : '---',
  1186.                 'classification' => $factureFinance->getClassification(),
  1187.                 'datePaiement' => $factureFinance->getDatePaiement() ? $factureFinance->getDatePaiement()->format('d/m/Y') : '',
  1188.                 'dateValidation' => $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('d/m/Y') : '',
  1189.                 'dateFacture' => $factureFinance->getDateFacture() ? $factureFinance->getDateFacture()->format('d/m/Y') : '',
  1190.                 'createdAt' => $factureFinance->getCreatedAt() ? $factureFinance->getCreatedAt()->format('d/m/Y') : '',
  1191.                 'status' => $statut,
  1192.                 'dateValid' => $dateValid,
  1193.                 'action' => $action,
  1194.                 'action2' => $action2,
  1195.                 'action3' => $action3,
  1196.                 'btnSelect' => $btnSelect,
  1197.                 'projects' => $projects,
  1198.                 'avoir' => $avoir.' €'
  1199.             ];
  1200.         }
  1201.         return $output;
  1202.     }
  1203.     public function paginateFactureArchive($request,$isAfaire = false,$isPayer = false){
  1204.         $length = $request->get('length');
  1205.         $length = $length && ($length!=-1)?$length:0;
  1206.         $start = $request->get('start');
  1207.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1208.         $column =  $search = $request->get('columns');
  1209.         $order = $request->get('order')[0];
  1210.         $columnOrder = $order['column'];
  1211.         $dirOrder = $order['dir'];
  1212.         $columNameOrder = $column[$columnOrder]['data'];
  1213.         $search = $request->get('search');
  1214.         $spv = $request->get('spv');
  1215.         $fournisseur = $request->get('fournisseur');
  1216.         $status = $request->get('statusFactureFinance');
  1217.         $btnTypeTab = $request->get('btnTypeTab');
  1218.         $arraySession = [];
  1219.         $arraySession['search'] = trim(@$search['value']);
  1220.         $arraySession['spv'] = $spv;
  1221.         $arraySession['fournisseur'] = $fournisseur;
  1222.         $arraySession['statusFactureFinance'] = $status;
  1223.         $arraySession['length'] = $length;
  1224.         $arraySession['btnTypeTab'] = $btnTypeTab;
  1225.         $this->session->set('arraySessionFilterFactureFinance',$arraySession);
  1226.         $searchTabDate = $request->get('searchTabDate');
  1227.         $responsableProject = $request->get('responsableProject');
  1228.         $responsableDevProject = $request->get('responsableDevProject');
  1229.         $classificationFactureFinance = $request->get('classificationFactureFinance');
  1230.         $paiementFactureDate = $request->get('paiementFactureDate');
  1231.         $paiementFactureDate1 = $request->get('paiementFactureDate1') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate1')) : null ;
  1232.         $paiementFactureDate2 = $request->get('paiementFactureDate2') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate2')) : null;
  1233.         $filters = [
  1234.             'query' => trim(@$search['value']),
  1235.             'spv' => $spv,
  1236.             'fournisseur' => $fournisseur,
  1237.             'status' => $status,
  1238.             'isAfaire' => $isAfaire,
  1239.             'isPayer' => $isPayer,
  1240.             'paiementFactureDate' => $paiementFactureDate,
  1241.             'btnTypeTab' => $btnTypeTab,
  1242.             'paiementFactureDate1' => $paiementFactureDate1,
  1243.             'paiementFactureDate2' => $paiementFactureDate2,
  1244.             'responsableProject' => $responsableProject,
  1245.             'classificationFactureFinance' => $classificationFactureFinance,
  1246.             'responsableDevProject' => $responsableDevProject,
  1247.             'isArchive' => 1
  1248.         ];
  1249.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  1250.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1251.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1252.         $output = array(
  1253.             'data' => array(),
  1254.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1255.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1256.         );
  1257.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1258.         foreach ($factureFinances as $factureFinance) {
  1259.             $action =
  1260.                 $this->twig->render(
  1261.                     'admin/facture-finance/default/bouton.html.twig', array(
  1262.                     'factureFinance' => $factureFinance
  1263.                 ));
  1264.             $action2 =
  1265.                 $this->twig->render(
  1266.                     'admin/facture-finance/default/bouton-valid.html.twig', array(
  1267.                     'factureFinance' => $factureFinance
  1268.                 ));
  1269.             $action3 =
  1270.                 $this->twig->render(
  1271.                     'admin/facture-finance/default/bouton3.html.twig', array(
  1272.                     'factureFinance' => $factureFinance
  1273.                 ));
  1274.             $statut =
  1275.                 $this->twig->render(
  1276.                     'admin/facture-finance/default/status.html.twig', array(
  1277.                     'status' => $factureFinance->getStatus(),
  1278.                     'factureFinance' => $factureFinance,
  1279.                 ));
  1280.             $dateValid =
  1281.                 $this->twig->render(
  1282.                     'admin/facture-finance/default/input-date-valid.html.twig', array(
  1283.                     'factureFinance' => $factureFinance
  1284.                 ));
  1285.             $btnSelect =
  1286.                 $this->twig->render(
  1287.                     'admin/facture-finance/default/btnSelect.html.twig', array(
  1288.                     'factureFinance' => $factureFinance
  1289.                 ));
  1290.             $fluxBancaireSpv = '';
  1291.             $banqueSpvStr = '';
  1292.             if($factureFinance->getSpv()){
  1293.                 $fluxBancaireSpv = $factureFinance->getSpv()->getFluxBancaire() ? 'Exabanque' : 'Manuel';
  1294.                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId(), 'isDefault' => true]);
  1295.                 if(!$spvBanque){
  1296.                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId()]);
  1297.                 }
  1298.                 if($spvBanque){
  1299.                     $banqueSpvStr = $spvBanque->getBanque();
  1300.                 }
  1301.             }
  1302.             $banqueFourniseurStr = '';
  1303.             if($factureFinance->getFournisseur()){
  1304.                 if($factureFinance->getRib()) {
  1305.                     $fournisseurBanque = $factureFinance->getRib();
  1306.                 }else {
  1307.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId(), 'isDefault' => true]);
  1308.                 }
  1309.                 if(!$fournisseurBanque){
  1310.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId()]);
  1311.                 }
  1312.                 if($fournisseurBanque){
  1313.                     $banqueFourniseurStr = $fournisseurBanque->getBanque();
  1314.                 }
  1315.             }
  1316.             if($factureFinance->getIsAvoir()){
  1317.                 $avoir = $factureFinance->getMonatantAvoirTtc();
  1318.                 if($factureFinance->getMonatantRestantTtc() == '0' ){
  1319.                     $isBanque = false;
  1320.                 }else{
  1321.                     $isBanque = true;
  1322.                 }
  1323.             }else{
  1324.                 $avoir = 0;
  1325.                 $isBanque = true;
  1326.             }
  1327.             $projects = '';
  1328.             if(count($factureFinance->getProjectFactureFinance())>0){
  1329.                 $projectsArray = [];
  1330.                 foreach ($factureFinance->getProjectFactureFinance() as $item){
  1331.                     if($item->getProject()){
  1332.                         $projectsArray[strtolower($item->getProject()->getName())] = $item;
  1333.                     }
  1334.                 }
  1335.                 ksort($projectsArray);
  1336.                 $project =  reset($projectsArray);
  1337.                 if(count($factureFinance->getProjectFactureFinance()) == 1){
  1338.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName() : ' ' ;
  1339.                 }else{
  1340.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName().'...' : ' ' ;
  1341.                 }
  1342.             }
  1343.             $output['data'][] = [
  1344.                 'responsive_id' => '',
  1345.                 'id' => $factureFinance->getId(),
  1346.                 'numeroFacture' => $factureFinance->getNumeroFacture(),
  1347.                 'numeroFactureDiaposon' => $factureFinance->getNumeroFactureDiaposon(),
  1348.                 'compteurErpiPiece' => $factureFinance->getCompteurErpiPiece(),
  1349.                 'monatantTtc' => $factureFinance->getMonatantTtc() ? $this->espaceNumber($factureFinance->getMonatantTtc()).'€' : '',
  1350.                 'monatantHt' => $factureFinance->getMonatantHt() ? $this->espaceNumber($factureFinance->getMonatantHt()).'€' : '',
  1351.                 'tva' => $factureFinance->getTva() ? $factureFinance->getTva().'€' : '',
  1352.                 'category' => $factureFinance->getCategory() ? $factureFinance->getCategory() : '',
  1353.                 'fluxBancaireSpv' => $fluxBancaireSpv,
  1354.                 'fournisseur' => $factureFinance->getFournisseur() ? $factureFinance->getFournisseur()->getName() : '',
  1355.                 'developpeur' => $factureFinance->getDeveloppeur() ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '',
  1356.                 'spv' => $factureFinance->getSpv() ? $factureFinance->getSpv()->getName() : '',
  1357.                 'date' => $factureFinance->getDelaiPaiementDate() ? $factureFinance->getDelaiPaiementDate()->format('d/m/Y') : '',
  1358.                 'banqueSpv' => $banqueSpvStr,
  1359.                 'banqueFourniseur' => $isBanque ? $banqueFourniseurStr : '---',
  1360.                 'classification' => $factureFinance->getClassification(),
  1361.                 'datePaiement' => $factureFinance->getDatePaiement() ? $factureFinance->getDatePaiement()->format('d/m/Y') : '',
  1362.                 'dateValidation' => $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('d/m/Y') : '',
  1363.                 'dateFacture' => $factureFinance->getDateFacture() ? $factureFinance->getDateFacture()->format('d/m/Y') : '',
  1364.                 'createdAt' => $factureFinance->getCreatedAt() ? $factureFinance->getCreatedAt()->format('d/m/Y') : '',
  1365.                 'status' => $statut,
  1366.                 'dateValid' => $dateValid,
  1367.                 'action' => $action,
  1368.                 'action2' => $action2,
  1369.                 'action3' => $action3,
  1370.                 'btnSelect' => $btnSelect,
  1371.                 'projects' => $projects,
  1372.                 'avoir' => $avoir.' €'
  1373.             ];
  1374.         }
  1375.         return $output;
  1376.     }
  1377.     public function paginateFactureBrouillon($request){
  1378.         $length = $request->get('length');
  1379.         $length = $length && ($length!=-1)?$length:0;
  1380.         $start = $request->get('start');
  1381.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1382.         $column =  $search = $request->get('columns');
  1383.         $order = $request->get('order')[0];
  1384.         $columnOrder = $order['column'];
  1385.         $dirOrder = $order['dir'];
  1386.         $columNameOrder = $column[$columnOrder]['data'];
  1387.         $search = $request->get('search');
  1388.         $spv = $request->get('spv');
  1389.         $fournisseur = $request->get('fournisseur');
  1390.         $status = $request->get('statusFactureFinance');
  1391.         $btnTypeTab = $request->get('btnTypeTab');
  1392.         $arraySession = [];
  1393.         $arraySession['search'] = trim(@$search['value']);
  1394.         $arraySession['spv'] = $spv;
  1395.         $arraySession['fournisseur'] = $fournisseur;
  1396.         $arraySession['statusFactureFinance'] = $status;
  1397.         $arraySession['length'] = $length;
  1398.         $arraySession['btnTypeTab'] = $btnTypeTab;
  1399.         $this->session->set('arraySessionFilterFactureFinance',$arraySession);
  1400.         $searchTabDate = $request->get('searchTabDate');
  1401.         $responsableProject = $request->get('responsableProject');
  1402.         $responsableDevProject = $request->get('responsableDevProject');
  1403.         $classificationFactureFinance = $request->get('classificationFactureFinance');
  1404.         $paiementFactureDate = $request->get('paiementFactureDate');
  1405.         $paiementFactureDate1 = $request->get('paiementFactureDate1') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate1')) : null ;
  1406.         $paiementFactureDate2 = $request->get('paiementFactureDate2') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate2')) : null;
  1407.         $filters = [
  1408.             'query' => trim(@$search['value']),
  1409.             'spv' => $spv,
  1410.             'fournisseur' => $fournisseur,
  1411.             'status' => $status,
  1412.             'paiementFactureDate' => $paiementFactureDate,
  1413.             'btnTypeTab' => $btnTypeTab,
  1414.             'paiementFactureDate1' => $paiementFactureDate1,
  1415.             'paiementFactureDate2' => $paiementFactureDate2,
  1416.             'responsableProject' => $responsableProject,
  1417.             'classificationFactureFinance' => $classificationFactureFinance,
  1418.             'responsableDevProject' => $responsableDevProject
  1419.         ];
  1420.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinanceBrouillon::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  1421.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinanceBrouillon::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1422.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinanceBrouillon::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1423.         $output = array(
  1424.             'data' => array(),
  1425.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1426.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1427.         );
  1428.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1429.         foreach ($factureFinances as $factureFinance) {
  1430.             $action =
  1431.                 $this->twig->render(
  1432.                     'admin/facture-finance/default/boutonBrouillon.html.twig', array(
  1433.                     'factureFinance' => $factureFinance
  1434.                 ));
  1435.             $statut =
  1436.                 $this->twig->render(
  1437.                     'admin/facture-finance/default/status.html.twig', array(
  1438.                     'status' => $factureFinance->getStatus(),
  1439.                     'factureFinance' => $factureFinance,
  1440.                 ));
  1441.             $btnSelect =
  1442.                 $this->twig->render(
  1443.                     'admin/facture-finance/default/btnSelectBrouillon.html.twig', array(
  1444.                     'factureFinance' => $factureFinance
  1445.                 ));
  1446.             $projects = '';
  1447.             if(count($factureFinance->getProjectFactureFinanceBrouillon())>0){
  1448.                 $projectsArray = [];
  1449.                 foreach ($factureFinance->getProjectFactureFinanceBrouillon() as $item){
  1450.                     if($item->getProject()){
  1451.                         $projectsArray[strtolower($item->getProject()->getName())] = $item;
  1452.                     }
  1453.                 }
  1454.                 ksort($projectsArray);
  1455.                 $project =  reset($projectsArray);
  1456.                 if(count($factureFinance->getProjectFactureFinanceBrouillon()) == 1){
  1457.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName() : ' ' ;
  1458.                 }else{
  1459.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName().'...' : ' ' ;
  1460.                 }
  1461.             }
  1462.             $output['data'][] = [
  1463.                 'responsive_id' => '',
  1464.                 'id' => $factureFinance->getId(),
  1465.                 'numeroFacture' => $factureFinance->getNumeroFacture(),
  1466.                 'monatantTtc' => $factureFinance->getMonatantTtc() ? $this->espaceNumber($factureFinance->getMonatantTtc()).'€' : '',
  1467.                 'monatantHt' => $factureFinance->getMonatantHt() ? $this->espaceNumber($factureFinance->getMonatantHt()).'€' : '',
  1468.                 'tva' => $factureFinance->getTva() ? $factureFinance->getTva().'€' : '',
  1469.                 'category' => $factureFinance->getCategory() ? $factureFinance->getCategory() : '',
  1470.                 'fournisseur' => $factureFinance->getFournisseur() ? $factureFinance->getFournisseur()->getName() : '',
  1471.                 'developpeur' => $factureFinance->getDeveloppeur() ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '',
  1472.                 'spv' => $factureFinance->getSpv() ? $factureFinance->getSpv()->getName() : '',
  1473.                 'date' => $factureFinance->getDelaiPaiementDate() ? $factureFinance->getDelaiPaiementDate()->format('d/m/Y') : '',
  1474.                 'classification' => $factureFinance->getClassification(),
  1475.                 'datePaiement' => $factureFinance->getDatePaiement() ? $factureFinance->getDatePaiement()->format('d/m/Y') : '',
  1476.                 'dateValidation' => $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('d/m/Y') : '',
  1477.                 'dateFacture' => $factureFinance->getDateFacture() ? $factureFinance->getDateFacture()->format('d/m/Y') : '',
  1478.                 'createdAt' => $factureFinance->getCreatedAt() ? $factureFinance->getCreatedAt()->format('d/m/Y') : '',
  1479.                 'status' => $statut,
  1480.                 'action' => $action,
  1481.                 'btnSelect' => $btnSelect,
  1482.                 'projects' => $projects
  1483.             ];
  1484.         }
  1485.         return $output;
  1486.     }
  1487.     public function formatTabFactures($factureFinances){
  1488.         $output = [];
  1489.         foreach ($factureFinances as $factureFinance) {
  1490.             $action =
  1491.                 $this->twig->render(
  1492.                     'admin/facture-finance/default/bouton.html.twig', array(
  1493.                     'factureFinance' => $factureFinance
  1494.                 ));
  1495.             $action2 =
  1496.                 $this->twig->render(
  1497.                     'admin/facture-finance/default/bouton-valid.html.twig', array(
  1498.                     'factureFinance' => $factureFinance
  1499.                 ));
  1500.             $action3 =
  1501.                 $this->twig->render(
  1502.                     'admin/facture-finance/default/bouton3.html.twig', array(
  1503.                     'factureFinance' => $factureFinance
  1504.                 ));
  1505.             $statut =
  1506.                 $this->twig->render(
  1507.                     'admin/facture-finance/default/status.html.twig', array(
  1508.                     'status' => $factureFinance->getStatus()
  1509.                 ));
  1510.             $dateValid =
  1511.                 $this->twig->render(
  1512.                     'admin/facture-finance/default/input-date-valid.html.twig', array(
  1513.                     'factureFinance' => $factureFinance
  1514.                 ));
  1515.             $btnSelect =
  1516.                 $this->twig->render(
  1517.                     'admin/facture-finance/default/btnSelect.html.twig', array(
  1518.                     'factureFinance' => $factureFinance
  1519.                 ));
  1520.             $fluxBancaireSpv = '';
  1521.             $banqueSpvStr = '';
  1522.             if($factureFinance->getSpv()){
  1523.                 $fluxBancaireSpv = $factureFinance->getSpv()->getFluxBancaire() ? 'Exabanque' : 'Manuel';
  1524.                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId(), 'isDefault' => true]);
  1525.                 if(!$spvBanque){
  1526.                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId()]);
  1527.                 }
  1528.                 if($spvBanque){
  1529.                     $banqueSpvStr = $spvBanque->getBanque();
  1530.                 }
  1531.             }
  1532.             $banqueFourniseurStr = '';
  1533.             if($factureFinance->getFournisseur()){
  1534.                 if($factureFinance->getRib()) {
  1535.                     $fournisseurBanque = $factureFinance->getRib();
  1536.                 }else {
  1537.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId(), 'isDefault' => true]);
  1538.                 }
  1539.                 if(!$fournisseurBanque){
  1540.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId()]);
  1541.                 }
  1542.                 if($fournisseurBanque){
  1543.                     $banqueFourniseurStr = $fournisseurBanque->getBanque();
  1544.                 }
  1545.             }
  1546.             if($factureFinance->getIsAvoir()){
  1547.                 $avoir = $factureFinance->getMonatantAvoirTtc();
  1548.                 if($factureFinance->getMonatantRestantTtc() == '0' ){
  1549.                     $isBanque = false;
  1550.                 }else{
  1551.                     $isBanque = true;
  1552.                 }
  1553.             }else{
  1554.                 $avoir = 0;
  1555.                 $isBanque = true;
  1556.             }
  1557.             $projects = '';
  1558.             if(count($factureFinance->getProjectFactureFinance())>0){
  1559.                 $project = $factureFinance->getProjectFactureFinance()[0];
  1560.                 if(count($factureFinance->getProjectFactureFinance()) == 1){
  1561.                     $projects =  $project->getProject() ? $project->getProject()->getName() : ' ' ;
  1562.                 }else{
  1563.                     $projects =  $project->getProject() ? $project->getProject()->getName().'...' : ' ' ;
  1564.                 }
  1565.             }
  1566.             $output[] = [
  1567.                 'responsive_id' => '',
  1568.                 'id' => $factureFinance->getId(),
  1569.                 'numeroFacture' => $factureFinance->getNumeroFacture30Max(),
  1570.                 'monatantTtc' => $factureFinance->getMonatantTtc() ? $factureFinance->getMonatantTtc().'€' : '',
  1571.                 'fluxBancaireSpv' => $fluxBancaireSpv,
  1572.                 'fournisseur' => $factureFinance->getFournisseur() ? $factureFinance->getFournisseur()->getName() : '',
  1573.                 'spv' => $factureFinance->getSpv() ? $factureFinance->getSpv()->getName() : '',
  1574.                 'date' => $factureFinance->getDelaiPaiementDate() ? $factureFinance->getDelaiPaiementDate()->format('d/m/Y') : '',
  1575.                 'banqueSpv' => $banqueSpvStr,
  1576.                 'banqueFourniseur' => $isBanque ? $banqueFourniseurStr : '---',
  1577.                 'classification' => $factureFinance->getClassification(),
  1578.                 'datePaiement' => $factureFinance->getDatePaiement() ? $factureFinance->getDatePaiement()->format('d/m/Y') : '',
  1579.                 'dateFacture' => $factureFinance->getDateFacture() ? $factureFinance->getDateFacture()->format('d/m/Y') : '',
  1580.                 'status' => $statut,
  1581.                 'dateValid' => $dateValid,
  1582.                 'action' => $action,
  1583.                 'action2' => $action2,
  1584.                 'action3' => $action3,
  1585.                 'btnSelect' => $btnSelect,
  1586.                 'projects' => $projects,
  1587.                 'avoir' => $avoir.' €'
  1588.             ];
  1589.         }
  1590.         return $output;
  1591.     }
  1592.     public function paginateFacturePaiement($request){
  1593.         $length = $request->get('length');
  1594.         $length = $length && ($length!=-1)?$length:0;
  1595.         $start = $request->get('start');
  1596.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1597.         $column =  $search = $request->get('columns');
  1598.         $order = $request->get('order')[0];
  1599.         $columnOrder = $order['column'];
  1600.         $dirOrder = $order['dir'];
  1601.         $columNameOrder = $column[$columnOrder]['data'];
  1602.         $searchTabDate = $request->get('searchTabDate');
  1603.         $filters = [
  1604.             'searchTabDate' => $searchTabDate,
  1605.             'spvFacturePaiement' => $request->get('spvFacturePaiement'),
  1606.         ];
  1607.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->search2($filters, $start, $length, true,$columNameOrder, $dirOrder);
  1608.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->search2($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1609.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->search2(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1610.         $output = array(
  1611.             'data' => array(),
  1612.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1613.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1614.         );
  1615.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1616.         $arraySpv = [];
  1617.         foreach ($factureFinances as $factureFinance) {
  1618.             $dateValidation = $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('Y-m-d') : (new \DateTime())->format('Y-m-d');
  1619.             $action =
  1620.                 $this->twig->render(
  1621.                     'admin/facture-finance/default/bouton-eye-paiement.html.twig', array(
  1622.                     'factureFinance' => $factureFinance,
  1623.                     'spv' => $factureFinance->getSpv(),
  1624.                     'date' => $searchTabDate
  1625.                 ));
  1626.             $actionTelechargeBtn =
  1627.                 $this->twig->render(
  1628.                     'admin/facture-finance/default/bouton-telecharger.html.twig', array(
  1629.                     'factureFinance' => $factureFinance,
  1630.                     'spv' => $factureFinance->getSpv(),
  1631.                     'searchTabDate' => $searchTabDate
  1632.                 ));
  1633.             $actionTelechargeBtn2 =
  1634.                 $this->twig->render(
  1635.                     'admin/facture-finance/default/bouton-telecharger2.html.twig', array(
  1636.                     'factureFinance' => $factureFinance,
  1637.                     'spv' => $factureFinance->getSpv(),
  1638.                     'searchTabDate' => $searchTabDate != "" ? $searchTabDate : $dateValidation
  1639.                 ));
  1640.             $fluxBancaireSpv = '';
  1641.             $banqueSpvStr = '';
  1642.             if($factureFinance->getSpv()){
  1643.                 $fluxBancaireSpv = $factureFinance->getSpv()->getFluxBancaire() ? 'Exabanque' : 'Manuel';
  1644.                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId(), 'isDefault' => true]);
  1645.                 if(!$spvBanque){
  1646.                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId()]);
  1647.                     if($spvBanque){
  1648.                         $banqueSpvStr = $spvBanque->getBanque();
  1649.                     }
  1650.                 }
  1651.             }
  1652.             $arraySpv[$factureFinance->getSpv()->getId()] = [
  1653.                 'responsive_id' => '',
  1654.                 'spv' => $factureFinance->getSpv()->getName(),
  1655.                 'fluxBancaireSpv' => $fluxBancaireSpv,
  1656.                 'dateValidation' => $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('d/m/Y') : '',
  1657.                 'action3' => $actionTelechargeBtn,
  1658.                 'action4' => $actionTelechargeBtn2,
  1659.                 'action' => $action
  1660.             ];
  1661.         }
  1662.         foreach ($arraySpv as $item) {
  1663.             $output['data'][] = [
  1664.                 'responsive_id' => $item['responsive_id'],
  1665.                 'spv' =>  $item['spv'],
  1666.                 'fluxBancaireSpv' =>  $item['fluxBancaireSpv'],
  1667.                 'dateValidation' =>  $item['dateValidation'],
  1668.                 'action3' =>  $item['action3'],
  1669.                 'action4' =>  $item['action4'],
  1670.                 'action' =>  $item['action'],
  1671.             ];
  1672.         }
  1673.         return $output;
  1674.     }
  1675.     public function paginateFacturePaiementNew($request){
  1676.         $length = $request->get('length');
  1677.         $length = $length && ($length!=-1)?$length:0;
  1678.         $start = $request->get('start');
  1679.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1680.         $column =  $search = $request->get('columns');
  1681.         $order = $request->get('order')[0];
  1682.         $columnOrder = $order['column'];
  1683.         $dirOrder = $order['dir'];
  1684.         $columNameOrder = $column[$columnOrder]['data'];
  1685.         $searchTabDate = $request->get('searchTabDate');
  1686.         $filters = [
  1687.             'searchTabDate' => $searchTabDate,
  1688.             'statusPaiementFactureSpv' => $request->get('statusPaiementFactureSpv'),
  1689.             'searchFacturePaiementSepa' => $request->get('searchFacturePaiementSepa'),
  1690.             'spvFacturePaiementSepa' => $request->get('spvFacturePaiementSepa'),
  1691.         ];
  1692.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->searchNewPaiement($filters, $start, $length, true,$columNameOrder, $dirOrder);
  1693.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->searchNewPaiement($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1694.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->searchNewPaiement(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1695.         $output = array(
  1696.             'data' => array(),
  1697.             'recordsFiltered' => count($recordsFiltered),
  1698.             'recordsTotal' => count($recordsTotal),
  1699.         );
  1700.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1701.         foreach ($factureFinances as $factureFinance) {
  1702.             $spv = $this->em->getRepository(Spv::class)->find($factureFinance['spvId']);
  1703.             $dateValidation = new \DateTime($factureFinance['FormattedDate']);
  1704.             $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDate($factureFinance['spvId'], $factureFinance['FormattedDate']);
  1705.             $montantTotal = $this->getEcheanceTtc($factureFinance['spvId'], $factureFinance['FormattedDate']);
  1706.             $status =
  1707.                 $this->twig->render(
  1708.                     'admin/facture-finance/miseEnPaiement/default/status.html.twig', array(
  1709.                     'status' => $factureFinance['statusTotal'],
  1710.                 ));
  1711.             $action =
  1712.                 $this->twig->render(
  1713.                     'admin/facture-finance/miseEnPaiement/default/bouton-eye-paiement.html.twig', array(
  1714.                     'spv' => $spv,
  1715.                     'date' => $factureFinance['FormattedDate']
  1716.                 ));
  1717.             $output['data'][] = [
  1718.                 'spv' =>  $factureFinance['name'],
  1719.                 'nbrPaiement' =>  $factureFinance['nbrPaiement'],
  1720.                 'dateValidation' =>  $dateValidation->format('d/m/Y'),
  1721.                 'montantTotal' =>   $montantTotal ? $this->espaceNumber($montantTotal).'€' : '',
  1722.                 'status' =>  $status,
  1723.                 'action' =>  $action,
  1724.             ];
  1725.         }
  1726.         return $output;
  1727.     }
  1728.     public function valideDate($request,$token)
  1729.     {
  1730.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1731.         $date = $request->get('datePaiementFacture');
  1732.         if($facture){
  1733.             $userCurrent = $this->security->getUser();
  1734.             $spvFacture = $facture->getSpv();
  1735.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  1736.             }else {
  1737.                 if (!$spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFactureSpv()) {
  1738.                     return [
  1739.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  1740.                         'success' => false,
  1741.                         'factureFinance' => $facture,
  1742.                     ];
  1743.                 }
  1744.                 if ($spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFacturePrejeance()) {
  1745.                     return [
  1746.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide  la facture</p>',
  1747.                         'success' => false,
  1748.                         'factureFinance' => $facture,
  1749.                     ];
  1750.                 }
  1751.             }
  1752.             if($date){
  1753.                 $banqueSpv = '';
  1754.                 $ibanSpv = '';
  1755.                 $bicSpv = '';
  1756.                 $fluxBancaireSpv = '';
  1757.                 if ($facture->getSpv()) {
  1758.                     if($facture->getRib()) {
  1759.                         $spvBanque = $facture->getRibSpv();
  1760.                     }else {
  1761.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  1762.                     }
  1763.                     if (!$spvBanque) {
  1764.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  1765.                     }
  1766.                     if ($spvBanque) {
  1767.                         $banqueSpv = $spvBanque->getBanque();
  1768.                         $ibanSpv = $spvBanque->getIban();
  1769.                         $bicSpv = $spvBanque->getBic();
  1770.                     }
  1771.                     $fluxBancaireSpv = $facture->getSpv()->getFluxBancaire();
  1772.                 }
  1773.                 $banqueFournisseur = '';
  1774.                 $ibanFournisseur = '';
  1775.                 $bicFournisseur = '';
  1776.                 if ($facture->getFournisseur()) {
  1777.                     if($facture->getRib()) {
  1778.                         $fournisseurBanque = $facture->getRib();
  1779.                     }else {
  1780.                         $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  1781.                     }
  1782.                     if (!$fournisseurBanque) {
  1783.                         $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  1784.                     }
  1785.                     if ($fournisseurBanque) {
  1786.                         $banqueFournisseur = $fournisseurBanque->getBanque();
  1787.                         $ibanFournisseur = $fournisseurBanque->getIban();
  1788.                         $bicFournisseur = $fournisseurBanque->getBic();
  1789.                     }
  1790.                 }
  1791.                 $facture->setIbanSpv($ibanSpv);
  1792.                 $facture->setBicSpv($bicSpv);
  1793.                 $facture->setBanqueSpv($banqueSpv);
  1794.                 $facture->setFluxBancaireSpv($fluxBancaireSpv);
  1795.                 $facture->setIbanFournisseur($ibanFournisseur);
  1796.                 $facture->setBicFournisseur($bicFournisseur);
  1797.                 $facture->setBanqueFournisseur($banqueFournisseur);
  1798.                 $facture->setDateValidation(new \DateTime());
  1799.                 $facture->setDate(new \DateTime($date));
  1800. //                $facture->setStatus(FactureFinance::STATUS_PAYER);
  1801.                 $facture->setStatus(FactureFinance::STATUS_PAYER_NEW);
  1802.                 $this->em->persist($facture);
  1803.                 $this->em->flush();
  1804.                 return [
  1805.                     'success' => true,
  1806.                     'factureFinance' => $facture,
  1807.                 ];
  1808.             }
  1809.         }
  1810.         return [
  1811.             'success' => false,
  1812.             'factureFinance' => $facture,
  1813.         ];
  1814.     }
  1815.     public function valideDateNowMontant0($token)
  1816.     {
  1817.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1818.         if($facture->getMonatantRestantTtc() == 0){
  1819.             $date = new \DateTime('now');
  1820.             if($facture){
  1821.                 $userCurrent = $this->security->getUser();
  1822.                 $spvFacture = $facture->getSpv();
  1823.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  1824.                 }else {
  1825.                     if (!$spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFactureSpv()) {
  1826.                         return [
  1827.                             'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  1828.                             'success' => false,
  1829.                             'factureFinance' => $facture,
  1830.                         ];
  1831.                     }
  1832.                     if ($spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFacturePrejeance()) {
  1833.                         return [
  1834.                             'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  1835.                             'success' => false,
  1836.                             'factureFinance' => $facture,
  1837.                         ];
  1838.                     }
  1839.                 }
  1840.                 $facture->setStatus(FactureFinance::STATUS_DATE_PAIEMENT_PAYER);
  1841.                 $this->em->persist($facture);
  1842.                 $this->em->flush();
  1843.                 if($date){
  1844.                     $banqueSpv = '';
  1845.                     $ibanSpv = '';
  1846.                     $bicSpv = '';
  1847.                     $fluxBancaireSpv = '';
  1848.                     if ($facture->getSpv()) {
  1849.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  1850.                         if (!$spvBanque) {
  1851.                             $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  1852.                         }
  1853.                         if ($spvBanque) {
  1854.                             $banqueSpv = $spvBanque->getBanque();
  1855.                             $ibanSpv = $spvBanque->getIban();
  1856.                             $bicSpv = $spvBanque->getBic();
  1857.                         }
  1858.                         $fluxBancaireSpv = $facture->getSpv()->getFluxBancaire();
  1859.                     }
  1860.                     $banqueFournisseur = '';
  1861.                     $ibanFournisseur = '';
  1862.                     $bicFournisseur = '';
  1863.                     if ($facture->getFournisseur()) {
  1864.                         if($facture->getRib()) {
  1865.                             $fournisseurBanque = $facture->getRib();
  1866.                         }else {
  1867.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  1868.                         }
  1869.                         if (!$fournisseurBanque) {
  1870.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  1871.                         }
  1872.                         if ($fournisseurBanque) {
  1873.                             $banqueFournisseur = $fournisseurBanque->getBanque();
  1874.                             $ibanFournisseur = $fournisseurBanque->getIban();
  1875.                             $bicFournisseur = $fournisseurBanque->getBic();
  1876.                         }
  1877.                     }
  1878.                     $facture->setIbanSpv($ibanSpv);
  1879.                     $facture->setBicSpv($bicSpv);
  1880.                     $facture->setBanqueSpv($banqueSpv);
  1881.                     $facture->setFluxBancaireSpv($fluxBancaireSpv);
  1882.                     $facture->setIbanFournisseur($ibanFournisseur);
  1883.                     $facture->setBicFournisseur($bicFournisseur);
  1884.                     $facture->setBanqueFournisseur($banqueFournisseur);
  1885.                     $facture->setDateValidation(new \DateTime());
  1886.                     $facture->setDate($date);
  1887. //                    $facture->setStatus(FactureFinance::STATUS_PAYER);
  1888.                     $facture->setStatus(FactureFinance::STATUS_PAYER_NEW);
  1889.                     $this->em->persist($facture);
  1890.                     $this->em->flush();
  1891.                     return [
  1892.                         'success' => true,
  1893.                         'factureFinance' => $facture,
  1894.                     ];
  1895.                 }
  1896.             }
  1897.         }
  1898.         return [
  1899.             'success' => false,
  1900.         ];
  1901.     }
  1902.     public function demandeModificationFacture($request,$token)
  1903.     {
  1904.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1905.         $textDemande = $request->get('textDemande');
  1906.         if($facture && in_array($facture->getStatus(),[FactureFinance::STATUS_EN_ATTENT_VALIDATION,FactureFinance::STATUS_REFUS])){
  1907.             $facture->setTextDemande($textDemande);
  1908.             $facture->setStatus(FactureFinance::STATUS_DEMANDE_MODIFICATION);
  1909.             $this->em->persist($facture);
  1910.             $this->em->flush();
  1911.             return [
  1912.                 'success' => true,
  1913.                 'factureFinance' => $facture
  1914.             ];
  1915.         }
  1916.         return [
  1917.             'success' => false,
  1918.         ];
  1919.     }
  1920.     public function reediteFacture($request,$token)
  1921.     {
  1922.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1923.         if($facture && $facture->getStatus() == FactureFinance::STATUS_REFUS){
  1924.             $facture->setStatus(FactureFinance::STATUS_DEMANDE_MODIFICATION);
  1925.             $this->em->persist($facture);
  1926.             $this->em->flush();
  1927.             return [
  1928.                 'success' => true,
  1929.                 'factureFinance' => $facture
  1930.             ];
  1931.         }
  1932.         return [
  1933.             'success' => false,
  1934.         ];
  1935.     }
  1936.     public function refusFactureFinance($request,$token)
  1937.     {
  1938.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1939.         $textRefus = $request->get('textRefus');
  1940.         if($facture){
  1941.             $userCurrent = $this->security->getUser();
  1942.             $spvFacture = $facture->getSpv();
  1943.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  1944.             }else {
  1945.                 if (!$spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFactureSpv()) {
  1946.                     return [
  1947.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé de refuser la facture</p>',
  1948.                         'success' => false,
  1949.                         'factureFinance' => $facture,
  1950.                     ];
  1951.                 }
  1952.                 if ($spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFacturePrejeance()) {
  1953.                     return [
  1954.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé de refuser la facture</p>',
  1955.                         'success' => false,
  1956.                         'factureFinance' => $facture,
  1957.                     ];
  1958.                 }
  1959.             }
  1960.             $facture->setDateRefus(new \DateTime());
  1961.             $facture->setTextRefus($textRefus);
  1962.             $facture->setStatus(FactureFinance::STATUS_REFUS);
  1963.             $this->em->persist($facture);
  1964.             $this->em->flush();
  1965.             return [
  1966.                 'success' => true,
  1967.                 'factureFinance' => $facture,
  1968.             ];
  1969.         }
  1970.         return [
  1971.             'success' => false,
  1972.         ];
  1973.     }
  1974.     public function valideEnattentFactureFinance($request,$token)
  1975.     {
  1976.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1977.         if($facture){
  1978.             $userCurrent = $this->security->getUser();
  1979.             $spvFacture = $facture->getSpv();
  1980.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  1981.             }else {
  1982.                 if (!$spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFactureSpv()) {
  1983.                     return [
  1984.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  1985.                         'success' => false,
  1986.                         'factureFinance' => $facture,
  1987.                     ];
  1988.                 }
  1989.                 if ($spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFacturePrejeance()) {
  1990.                     return [
  1991.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  1992.                         'success' => false,
  1993.                         'factureFinance' => $facture,
  1994.                     ];
  1995.                 }
  1996.             }
  1997.             $facture->setStatus(FactureFinance::STATUS_EN_ATTENT_PAIEMENT);
  1998.             $this->em->persist($facture);
  1999.             $this->em->flush();
  2000.             return [
  2001.                 'success' => true,
  2002.                 'factureFinance' => $facture,
  2003.             ];
  2004.         }
  2005.         return [
  2006.             'success' => false,
  2007.         ];
  2008.     }
  2009.     public function exportCSV($request,$spvId,$date)
  2010.     {
  2011.         if($spvId) {
  2012.             $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDateOld($spvId, $date);
  2013.             $array = [];
  2014.             if ($factures) {
  2015.                 $contenu = '';
  2016.                 $contenu .= 'Référence de facture ;Nom du SPV;IBAN du SPV;BIC du SPV;Nom de banque SPV;Nom du fournisseur;IBAN du fournisseur;BIC du fournisseur ;Nom de banque Fournisseur;Date de paiement;Montant facture;Etaps project;' . "\r\n";
  2017.                 foreach ($factures as $facture) {
  2018.                     $spv = $facture->getSpv() ? $facture->getSpv()->getName() : '';
  2019.                     $fournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  2020.                     $date = $facture->getDate() ? $facture->getDate()->format('d/m/Y') : '';
  2021.                     if($facture->getIsAvoir()){
  2022.                         $montant = $facture->getMonatantRestantTtc();
  2023.                     }else {
  2024.                         $montant = $facture->getMonatantTtc();
  2025.                     }
  2026.                     $banqueSpv = '';
  2027.                     $ibanSpv = '';
  2028.                     $bicSpv = '';
  2029.                     if ($facture->getSpv()) {
  2030.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  2031.                         if (!$spvBanque) {
  2032.                             $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  2033.                         }
  2034.                         if ($spvBanque) {
  2035.                             $banqueSpv = $spvBanque->getBanque();
  2036.                             $ibanSpv = $spvBanque->getIban();
  2037.                             $bicSpv = $spvBanque->getBic();
  2038.                         }
  2039.                     }
  2040.                     $banqueFournisseur = '';
  2041.                     $ibanFournisseur = '';
  2042.                     $bicFournisseur = '';
  2043.                     $codePaysFournisseur = '';
  2044.                     if ($facture->getFournisseur()) {
  2045.                         if($facture->getRib()) {
  2046.                             $fournisseurBanque = $facture->getRib();
  2047.                         }else {
  2048.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2049.                         }
  2050.                         if (!$fournisseurBanque) {
  2051.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2052.                         }
  2053.                         if ($fournisseurBanque) {
  2054.                             $banqueFournisseur = $fournisseurBanque->getBanque();
  2055.                             $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  2056.                             $bicFournisseur = $fournisseurBanque->getBic();
  2057.                         }
  2058.                         $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  2059.                     }
  2060.                     $projects = '';
  2061.                     if(count($facture->getProjectFactureFinance())>0){
  2062.                         foreach ($facture->getProjectFactureFinance()  as $key => $item){
  2063.                             $nameProject = $item->getProject() ? $item->getProject()->getName().'  '  : ' ' ;
  2064.                             $nameCategory = $item->getCategory() ? $item->getCategory()->getName().' / '  : ' ' ;
  2065.                             $nameEtap = $item->getEtap() ? 'Etape '.$item->getEtap()->getEtapsNum().' / '  : ' ' ;
  2066.                             $porcentage = $item->getTva() ? $item->getTva().'%'  : ' ' ;
  2067.                             if($key+1 == count($facture->getProjectFactureFinance())){
  2068. //                                $projects .= $nameProject .$nameCategory.$nameEtap.$porcentage;
  2069.                                 $projects .= $nameProject ;
  2070.                             }else{
  2071.                                 $projects .= $nameProject."\n";
  2072. //                                $projects .= $nameProject .$nameCategory.$nameEtap.$porcentage."\n";
  2073.                             }
  2074.                         }
  2075.                     }
  2076. //                    $contenu .= $facture->getNumeroFacture() . ';' . $spv . ';' . $ibanSpv . ';' . $bicSpv . ';' . $banqueSpv . ';' . $fournisseur . ';' . $ibanFournisseur . ';' . $bicFournisseur . ';' . $banqueFournisseur . ';' . $date . ';' . $montant . ';' .$projects . ';' . "\r\n";
  2077.                     $pattern  = '/(^")|("$)/';// doubles quotes en début ou doubles quotes en fin de saisie
  2078.                     $array[] = [
  2079.                         $facture->getNumeroFacture30Max(),
  2080.                         str_replace ($pattern,'',$spv),
  2081.                         (string)$ibanSpv,
  2082.                         $bicSpv,
  2083.                         str_replace ($pattern,'',$banqueSpv),
  2084.                         str_replace ($pattern,'',$fournisseur),
  2085.                         (string)$ibanFournisseur,
  2086.                         $bicFournisseur,
  2087.                         str_replace ($pattern,'',$banqueFournisseur),
  2088.                         $date,
  2089.                         str_replace([','], ".", str_replace([' '], "", $montant)),
  2090.                         $codePaysFournisseur,
  2091.                         $facture->getNumeroFacture30Max(),
  2092.                         $projects
  2093.                     ];
  2094.                 }
  2095.                 $file = $this->params->get('zips_directory') . "/paiement_" . time() . ".csv";
  2096.                 return [
  2097.                     'file' => $file,
  2098.                     'contenu' => $array
  2099.                 ];
  2100.             }
  2101.         }
  2102.         return false;
  2103.     }
  2104.     public function exportXmlFlux($factureFinancePaiement)
  2105.     {
  2106.         if($factureFinancePaiement) {
  2107.             $factureFinancePaiementDetail = $this->em->getRepository(FactureFinancePaiementDetail::class)->findBy(['factureFinancePaiement'=>$factureFinancePaiement->getId()]);
  2108.             $pattern  = '/(^")|("$)/';// doubles quotes en début ou doubles quotes en fin de saisie
  2109.             if ($factureFinancePaiementDetail) {
  2110.                 $spvEntity = $factureFinancePaiement->getSpv();
  2111.                 $spv = $spvEntity ? $spvEntity->getName() : '';
  2112.                 $banqueSpv = '';
  2113.                 $ibanSpv = '';
  2114.                 $bicSpv = '';
  2115.                 if ($spvEntity) {
  2116.                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $spvEntity->getId(), 'isDefault' => true]);
  2117.                     if (!$spvBanque) {
  2118.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $spvEntity->getId()]);
  2119.                     }
  2120.                     if ($spvBanque) {
  2121.                         $banqueSpv = $spvBanque->getBanque();
  2122.                         $ibanSpv = $spvBanque->getIban();
  2123.                         $bicSpv = $spvBanque->getBic();
  2124.                     }
  2125.                 }
  2126.                 $sampleUniqueMsgId = "pt" . substr($spv, 0, 12).'-'.$factureFinancePaiement->getDatePaiementPrevu()->format('Ymd').'-'.time() ;
  2127.                 $SampleInitiatingPartyName =  $spv ;
  2128.                 $customerCredit = TransferFileFacadeFactory::createCustomerCredit($sampleUniqueMsgId, $SampleInitiatingPartyName, 'pain.001.001.03');
  2129.                 $dateTimeFactureValidePayement = $factureFinancePaiement->getDatePrevu() ? $factureFinancePaiement->getDatePrevu(): null;
  2130.                 $dateTimeFacturePayementPrevu = $factureFinancePaiement->getDatePaiementPrevu()? $factureFinancePaiement->getDatePaiementPrevu(): null;
  2131.                 if($dateTimeFacturePayementPrevu){
  2132.                     $id = 'Paiement-'.$spvEntity->getId().'-'.$dateTimeFacturePayementPrevu->getTimestamp().'-'.time();
  2133.                 }else{
  2134.                     $id = 'Paiement-'.$spvEntity->getId().'-'.$dateTimeFactureValidePayement->getTimestamp().'-'.time();
  2135.                 }
  2136.                 $customerCredit->addPaymentInfo($id, array(
  2137.                     'id' => $id,
  2138.                     'debtorName'              => str_replace ($pattern,'',$spv),
  2139.                     'debtorAccountIBAN'       => (string)$ibanSpv,
  2140.                     'debtorAgentBIC'          => (string)$bicSpv,
  2141.                     'batchBooking'            => true,
  2142.                     'dueDate'            => $dateTimeFacturePayementPrevu,
  2143.                 ));
  2144.                 foreach ($factureFinancePaiementDetail as $item) {
  2145.                     $facture = $item->getFactureFinance();
  2146.                     $fournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  2147.                     $dateFacture = $facture->getDate();
  2148.                     if($facture->getIsAvoir()){
  2149.                         $montant = $facture->getMonatantRestantTtc();
  2150.                     }else {
  2151.                         $montant = $facture->getMonatantTtc();
  2152.                     }
  2153.                     $banqueFournisseur = '';
  2154.                     $ibanFournisseur = '';
  2155.                     $bicFournisseur = '';
  2156.                     $codePaysFournisseur = '';
  2157.                     if ($facture->getFournisseur()) {
  2158.                         if($facture->getRib()) {
  2159.                             $fournisseurBanque = $facture->getRib();
  2160.                         }else {
  2161.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2162.                         }
  2163.                         if (!$fournisseurBanque) {
  2164.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2165.                         }
  2166.                         if ($fournisseurBanque) {
  2167.                             $banqueFournisseur = $fournisseurBanque->getBanque();
  2168.                             $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  2169.                             $bicFournisseur = $fournisseurBanque->getBic();
  2170.                         }
  2171.                         $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  2172.                     }
  2173.                     $projects = '';
  2174.                     if(count($facture->getProjectFactureFinance())>0){
  2175.                         foreach ($facture->getProjectFactureFinance()  as $key => $item){
  2176.                             $nameProject = $item->getProject() ? $item->getProject()->getName().'  '  : ' ' ;
  2177.                             $nameCategory = $item->getCategory() ? $item->getCategory()->getName().' / '  : ' ' ;
  2178.                             $nameEtap = $item->getEtap() ? 'Etape '.$item->getEtap()->getEtapsNum().' / '  : ' ' ;
  2179.                             $porcentage = $item->getTva() ? $item->getTva().'%'  : ' ' ;
  2180.                             if($key+1 == count($facture->getProjectFactureFinance())){
  2181. //                                $projects .= $nameProject .$nameCategory.$nameEtap.$porcentage;
  2182.                                 $projects .= $nameProject ;
  2183.                             }else{
  2184.                                 $projects .= $nameProject."\n";
  2185. //                                $projects .= $nameProject .$nameCategory.$nameEtap.$porcentage."\n";
  2186.                             }
  2187.                         }
  2188.                     }
  2189.                     $numeroSansCaractaireSpeciaux = preg_replace('/[^a-zA-Z0-9_ -]/s', '', $facture->getNumeroFacture());
  2190.                     $numeroFactureDiaposon = substr(str_replace(' ','',$numeroSansCaractaireSpeciaux), 0, 35);
  2191.                     $facture->setNumeroFactureDiaposon($numeroFactureDiaposon);
  2192.                     $this->em->persist($facture);
  2193.                     $this->em->flush();
  2194.                     $customerCredit->addTransfer($id, array(
  2195.                         'amount'                => str_replace([','], ".", str_replace([' '], "", $montant)) * 100, // `amount` should be in cents
  2196.                         'creditorIban'            => (string)$ibanFournisseur ,
  2197.                         'creditorBic'             => (string)$bicFournisseur ,
  2198.                         'creditorName'            => str_replace ($pattern,'',(string)$fournisseur),
  2199.                         'creditorReference'         => $facture->getNumeroFacture30Max(),
  2200.                         'endToEndId'         => $numeroFactureDiaposon,
  2201.                         'remittanceInformation' => ''
  2202.                     ));
  2203.                 }
  2204. //                $file = $customerCredit->asXML();
  2205.                 // modifier le dom
  2206.                 $xml = $customerCredit->asXML();
  2207.                 $dom = new \DOMDocument();
  2208.                 $dom->preserveWhiteSpace = false;
  2209.                 $dom->formatOutput = true;
  2210.                 $dom->loadXML($xml);
  2211.                 $xpath = new \DOMXPath($dom);
  2212.                 $xpath->registerNamespace(
  2213.                     'sepa',
  2214.                     'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03'
  2215.                 );
  2216.                 $nodes = $xpath->query('//sepa:CdtTrfTxInf/sepa:PmtTpInf');
  2217.                 foreach ($nodes as $node) {
  2218.                     $node->parentNode->removeChild($node);
  2219.                 }
  2220.                 // end modifier le dom
  2221.                 $file = $dom->saveXML();
  2222.                 return [
  2223.                     'file' => $file,
  2224.                 ];
  2225.             }
  2226.         }
  2227.         return false;
  2228.     }
  2229.     public function exportFactureFinanceParDateXml(){
  2230.         $factureFinancePaiements = $this->em->getRepository(FactureFinancePaiement::class)->findAllNotFichierBySpvAndDate();
  2231.         if($factureFinancePaiements){
  2232.             foreach ($factureFinancePaiements as $factureFinancePaiement){
  2233.                 $data = $this->exportXmlFlux($factureFinancePaiement);
  2234.                 if($data){
  2235.                     $fileExport = $data['file'];
  2236.                     $fileName = "pt" .substr($factureFinancePaiement->getSpv()->getName(), 0, 12).'_'.$factureFinancePaiement->getDatePaiementPrevu()->format('Ymd').'_'.time() . ".xml";
  2237.                     $factureFinancePaiement->setIsFichierCreated(true);
  2238.                     $factureFinancePaiement->setFichier($fileName);
  2239.                     $this->em->persist($factureFinancePaiement);
  2240.                     $this->em->flush();
  2241.                     $factureFinancePaiementDetails = $this->em->getRepository(FactureFinancePaiementDetail::class)->findBy(['factureFinancePaiement'=>$factureFinancePaiement->getId()]);
  2242.                     $faturesData = [];
  2243.                     foreach ($factureFinancePaiementDetails as $item) {
  2244.                         $item->getFactureFinance()->setIsPaiement(FactureFinance::STATUS_TERMINE_PAYE_SEPA);
  2245.                         $item->getFactureFinance()->setDatePaiementGenerateFichier(new \DateTime());
  2246.                         $this->em->persist($item->getFactureFinance());
  2247.                         $this->em->flush();
  2248.                         $this->notification->setCompteurErpiPieceRegelement($item->getFactureFinance());
  2249.                         $faturesData[] = $item->getFactureFinance();
  2250.                     }
  2251.                     $file = $this->params->get('paiements_altarea_directory') . "/".$fileName;
  2252.                     $fp = fopen($file,"wb");
  2253.                     fwrite($fp,$fileExport);
  2254.                     fclose($fp);
  2255.                     $this->sendToServeur($fileName ,'/altarea/paiements',$this->params->get('paiements_altarea_directory'));
  2256.                     $this->insertLogFichier($factureFinancePaiement->getSpv(),$faturesData,$fileName);
  2257.                 }
  2258.             }
  2259.         }
  2260.     }
  2261.     public function exportFactureFinanceParDateXmlBySpvAndDateValidation($spv,$date){
  2262.         $dataFacture = [];
  2263.         $factureFinancePaiements = $this->em->getRepository(FactureFinancePaiement::class)->findAllNotFichierBySpvAndDateValidation($spv,$date);
  2264.         if($factureFinancePaiements){
  2265.             foreach ($factureFinancePaiements as $factureFinancePaiement){
  2266.                 $data = $this->exportXmlFlux($factureFinancePaiement);
  2267.                 if($data){
  2268.                     $fileExport = $data['file'];
  2269.                     $fileName = "pt" .substr($factureFinancePaiement->getSpv()->getName(), 0, 12).'_'.$factureFinancePaiement->getDatePaiementPrevu()->format('Ymd').'_'.time() . ".xml";
  2270.                     $factureFinancePaiement->setIsFichierCreated(true);
  2271.                     $factureFinancePaiement->setFichier($fileName);
  2272.                     $this->em->persist($factureFinancePaiement);
  2273.                     $this->em->flush();
  2274.                     $factureFinancePaiementDetails = $this->em->getRepository(FactureFinancePaiementDetail::class)->findBy(['factureFinancePaiement'=>$factureFinancePaiement->getId()]);
  2275.                     foreach ($factureFinancePaiementDetails as $item) {
  2276.                         $item->getFactureFinance()->setIsPaiement(FactureFinance::STATUS_TERMINE_PAYE_SEPA);
  2277.                         $item->getFactureFinance()->setDatePaiementGenerateFichier(new \DateTime());
  2278.                         $this->em->persist($item->getFactureFinance());
  2279.                         $this->em->flush();
  2280.                         $this->notification->setCompteurErpiPieceRegelement($item->getFactureFinance());
  2281.                         $dataFacture[] = $item->getFactureFinance();
  2282.                     }
  2283.                     $file = $this->params->get('paiements_altarea_directory') . "/".$fileName;
  2284.                     $fp = fopen($file,"wb");
  2285.                     fwrite($fp,$fileExport);
  2286.                     fclose($fp);
  2287. //                    $this->sendToServeur($fileName ,'/altarea/paiements',$this->params->get('paiements_altarea_directory'));
  2288.                 }
  2289.             }
  2290.         }
  2291.         return $dataFacture;
  2292.     }
  2293.     public function exportFactureFinanceParDate($datetime){
  2294.         if($datetime) {
  2295.             $spvs = $this->em->getRepository(Spv::class)->getSpvEnabled();
  2296.             if($spvs){
  2297.                 foreach ($spvs as $spvObj){
  2298.                     $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDateOld($spvObj->getId(), $datetime->format('Y-m-d'));
  2299.                     $array = [];
  2300.                     if ($factures) {
  2301.                         foreach ($factures as $facture) {
  2302.                             $spv = $facture->getSpv() ? $facture->getSpv()->getName() : '';
  2303.                             $fournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  2304.                             $date = $facture->getDate() ? $facture->getDate()->format('d/m/Y') : '';
  2305.                             if($facture->getIsAvoir()){
  2306.                                 $montant = $facture->getMonatantRestantTtc();
  2307.                             }else {
  2308.                                 $montant = $facture->getMonatantTtc();
  2309.                             }
  2310.                             $banqueSpv = '';
  2311.                             $ibanSpv = '';
  2312.                             $bicSpv = '';
  2313.                             if ($facture->getSpv()) {
  2314.                                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  2315.                                 if (!$spvBanque) {
  2316.                                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  2317.                                 }
  2318.                                 if ($spvBanque) {
  2319.                                     $banqueSpv = $spvBanque->getBanque();
  2320.                                     $ibanSpv = $spvBanque->getIban();
  2321.                                     $bicSpv = $spvBanque->getBic();
  2322.                                 }
  2323.                             }
  2324.                             $banqueFournisseur = '';
  2325.                             $ibanFournisseur = '';
  2326.                             $bicFournisseur = '';
  2327.                             $codePaysFournisseur = '';
  2328.                             if ($facture->getFournisseur()) {
  2329.                                 if($facture->getRib()) {
  2330.                                     $fournisseurBanque = $facture->getRib();
  2331.                                 }else {
  2332.                                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2333.                                 }
  2334.                                 if (!$fournisseurBanque) {
  2335.                                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2336.                                 }
  2337.                                 if ($fournisseurBanque) {
  2338.                                     $banqueFournisseur = $fournisseurBanque->getBanque();
  2339.                                     $ibanFournisseur = $fournisseurBanque->getIban();
  2340.                                     $bicFournisseur = $fournisseurBanque->getBic();
  2341.                                 }
  2342.                                 $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  2343.                             }
  2344.                             $projects = '';
  2345.                             if(count($facture->getProjectFactureFinance())>0){
  2346.                                 foreach ($facture->getProjectFactureFinance()  as $key => $item){
  2347.                                     $nameProject = $item->getProject() ? $item->getProject()->getName().'  '  : ' ' ;
  2348.                                     $nameCategory = $item->getCategory() ? $item->getCategory()->getName().' / '  : ' ' ;
  2349.                                     $nameEtap = $item->getEtap() ? 'Etape '.$item->getEtap()->getEtapsNum().' / '  : ' ' ;
  2350.                                     $porcentage = $item->getTva() ? $item->getTva().'%'  : ' ' ;
  2351.                                     if($key+1 == count($facture->getProjectFactureFinance())){
  2352.                                         $projects .= $nameProject ;
  2353.                                     }else{
  2354.                                         $projects .= $nameProject."\n";
  2355.                                     }
  2356.                                 }
  2357.                             }
  2358.                             $pattern  = '/(^")|("$)/';// doubles quotes en début ou doubles quotes en fin de saisie
  2359.                             $array[] = [
  2360.                                 $facture->getNumeroFacture30Max(),
  2361.                                 str_replace ($pattern,'',$spv),
  2362.                                 (string)$ibanSpv,
  2363.                                 $bicSpv,
  2364.                                 str_replace ($pattern,'',$banqueSpv),
  2365.                                 str_replace ($pattern,'',$fournisseur),
  2366.                                 (string)$ibanFournisseur,
  2367.                                 $bicFournisseur,
  2368.                                 str_replace ($pattern,'',$banqueFournisseur),
  2369.                                 $date,
  2370.                                 str_replace([','], ".", str_replace([' '], "", $montant)),
  2371.                                 $codePaysFournisseur,
  2372.                                 $facture->getNumeroFacture30Max(),
  2373.                                 $projects
  2374.                             ];
  2375.                         }
  2376.                         $file = $this->params->get('facture_finance_directory') . "/paiements/paiement_" . $spvObj->getName().'_'.$datetime->format('Y-m-d') . ".csv";
  2377.                         $contenu = $array;
  2378.                         $fp=fopen($file,"w" ); // ouverture du fichier
  2379. //                       fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
  2380.                         foreach ($contenu as $item){
  2381.                             fputcsv($fp,$item,';'," ");
  2382.                         }
  2383.                     }
  2384.                 }
  2385.             }
  2386.         }
  2387.     }
  2388.     public function exportCSV2($request,$spvId,$date)
  2389.     {
  2390.         if($spvId && $date) {
  2391.             $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDateOld($spvId, $date);
  2392.             $array = [];
  2393.             if ($factures) {
  2394.                 foreach ($factures as $facture) {
  2395.                     $spv = $facture->getSpv() ? $facture->getSpv()->getName() : '';
  2396.                     $fournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  2397.                     $date = $facture->getDate() ? $facture->getDate()->format('d/m/Y') : '';
  2398.                     if($facture->getIsAvoir()){
  2399.                         $montant = $facture->getMonatantRestantTtc();
  2400.                     }else {
  2401.                         $montant = $facture->getMonatantTtc();
  2402.                     }
  2403.                     $banqueSpv = '';
  2404.                     $ibanSpv = '';
  2405.                     $bicSpv = '';
  2406.                     if ($facture->getSpv()) {
  2407.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  2408.                         if (!$spvBanque) {
  2409.                             $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  2410.                         }
  2411.                         if ($spvBanque) {
  2412.                             $banqueSpv = $spvBanque->getBanque();
  2413.                             $ibanSpv = $spvBanque->getIban();
  2414.                             $bicSpv = $spvBanque->getBic();
  2415.                         }
  2416.                     }
  2417.                     $banqueFournisseur = '';
  2418.                     $ibanFournisseur = '';
  2419.                     $bicFournisseur = '';
  2420.                     $codePaysFournisseur = '';
  2421.                     if ($facture->getFournisseur()) {
  2422.                         if($facture->getRib()) {
  2423.                             $fournisseurBanque = $facture->getRib();
  2424.                         }else {
  2425.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2426.                         }
  2427.                         if (!$fournisseurBanque) {
  2428.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2429.                         }
  2430.                         if ($fournisseurBanque) {
  2431.                             $banqueFournisseur = $fournisseurBanque->getBanque();
  2432.                             $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  2433.                             $bicFournisseur = $fournisseurBanque->getBic();
  2434.                         }
  2435.                         $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  2436.                     }
  2437.                     if($spvBanque && $spvBanque->getIsANETOSG()){
  2438.                         $array[] = [
  2439.                             '',
  2440.                             str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$fournisseur),
  2441.                             (string)$ibanFournisseur,
  2442.                             str_replace(['€'],'',str_replace([','], ".", str_replace([' '], "", $montant))),
  2443.                             $date,
  2444.                             (string)$ibanSpv,
  2445.                             str_replace (' ','',str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$facture->getNumeroFacture30Max())),
  2446.                             'NOTPROVIDED',
  2447.                             $banqueFournisseur,
  2448.                             str_replace (' ','',str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$facture->getNumeroFacture30Max())),
  2449.                             $codePaysFournisseur,
  2450.                             'SEPA',
  2451.                             'ANETO'
  2452.                         ];
  2453.                     }else{
  2454.                         $array[] = [
  2455.                             '',
  2456.                             str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$fournisseur),
  2457.                             (string)$ibanFournisseur,
  2458.                             str_replace(['€'],'',str_replace([','], ".", str_replace([' '], "", $montant))),
  2459.                             $date,
  2460.                             (string)$ibanSpv,
  2461.                             str_replace (' ','',str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$facture->getNumeroFacture30Max())),
  2462.                             'NOTPROVIDED',
  2463.                             $banqueFournisseur,
  2464.                             str_replace (' ','',str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$facture->getNumeroFacture30Max())),
  2465.                             $codePaysFournisseur,
  2466.                             'SEPA'
  2467.                         ];
  2468.                     }
  2469.                 }
  2470.                 $file = $this->params->get('zips_directory') . "/paiement_" . time() . ".csv";
  2471.                 return [
  2472.                     'file' => $file,
  2473.                     'contenu' => $array
  2474.                 ];
  2475.             }
  2476.         }
  2477.         return false;
  2478.     }
  2479.     public function exportFactureFinanceParDate2($datetime){
  2480.         if($datetime) {
  2481.             $spvs = $this->em->getRepository(Spv::class)->getSpvEnabled();
  2482.             if($spvs){
  2483.                 foreach ($spvs as $spvObj){
  2484.                     $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDateOld($spvObj->getId(), $datetime->format('Y-m-d'));
  2485.                     $array = [];
  2486.                     if ($factures) {
  2487.                         foreach ($factures as $facture) {
  2488.                             $spv = $facture->getSpv() ? $facture->getSpv()->getName() : '';
  2489.                             $fournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  2490.                             $date = $facture->getDate() ? $facture->getDate()->format('d/m/Y') : '';
  2491.                             if($facture->getIsAvoir()){
  2492.                                 $montant = $facture->getMonatantRestantTtc();
  2493.                             }else {
  2494.                                 $montant = $facture->getMonatantTtc();
  2495.                             }
  2496.                             $banqueSpv = '';
  2497.                             $ibanSpv = '';
  2498.                             $bicSpv = '';
  2499.                             if ($facture->getSpv()) {
  2500.                                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  2501.                                 if (!$spvBanque) {
  2502.                                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  2503.                                 }
  2504.                                 if ($spvBanque) {
  2505.                                     $banqueSpv = $spvBanque->getBanque();
  2506.                                     $ibanSpv = $spvBanque->getIban();
  2507.                                     $bicSpv = $spvBanque->getBic();
  2508.                                 }
  2509.                             }
  2510.                             $banqueFournisseur = '';
  2511.                             $ibanFournisseur = '';
  2512.                             $bicFournisseur = '';
  2513.                             $codePaysFournisseur = '';
  2514.                             if ($facture->getFournisseur()) {
  2515.                                 if($facture->getRib()) {
  2516.                                     $fournisseurBanque = $facture->getRib();
  2517.                                 }else {
  2518.                                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2519.                                 }
  2520.                                 if (!$fournisseurBanque) {
  2521.                                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2522.                                 }
  2523.                                 if ($fournisseurBanque) {
  2524.                                     $banqueFournisseur = $fournisseurBanque->getBanque();
  2525.                                     $ibanFournisseur = $fournisseurBanque->getIban();
  2526.                                     $bicFournisseur = $fournisseurBanque->getBic();
  2527.                                 }
  2528.                                 $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  2529.                             }
  2530.                             if($spvBanque && $spvBanque->getIsANETOSG()){
  2531.                                 $array[] = [
  2532.                                     '',
  2533.                                     str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $fournisseur),
  2534.                                     (string)$ibanFournisseur,
  2535.                                     str_replace(['€'], '', str_replace([','], ".", str_replace([' '], "", $montant))),
  2536.                                     $date,
  2537.                                     (string)$ibanSpv,
  2538.                                     str_replace(' ', '', str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $facture->getNumeroFacture30Max())),
  2539.                                     'NOTPROVIDED',
  2540.                                     $banqueFournisseur,
  2541.                                     str_replace(' ', '', str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $facture->getNumeroFacture30Max())),
  2542.                                     $codePaysFournisseur,
  2543.                                     'SEPA',
  2544.                                     'ANETO',
  2545.                                 ];
  2546.                             }else {
  2547.                                 $array[] = [
  2548.                                     '',
  2549.                                     str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $fournisseur),
  2550.                                     (string)$ibanFournisseur,
  2551.                                     str_replace(['€'], '', str_replace([','], ".", str_replace([' '], "", $montant))),
  2552.                                     $date,
  2553.                                     (string)$ibanSpv,
  2554.                                     str_replace(' ', '', str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $facture->getNumeroFacture30Max())),
  2555.                                     'NOTPROVIDED',
  2556.                                     $banqueFournisseur,
  2557.                                     str_replace(' ', '', str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $facture->getNumeroFacture30Max())),
  2558.                                     $codePaysFournisseur,
  2559.                                     'SEPA'
  2560.                                 ];
  2561.                             }
  2562.                         }
  2563.                         $file = $this->params->get('facture_finance_directory') . "/flux_paiements/paiement_" . $spvObj->getName().'_'.$datetime->format('Y-m-d') . ".csv";
  2564.                         $contenu = $array;
  2565.                         $fp=fopen($file,"w" ); // ouverture du fichier
  2566. //                        fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
  2567.                         $spvBanqueObj = null;
  2568.                         if ($spvObj->getId()) {
  2569.                             $spvBanqueObj = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $spvObj->getId(), 'isDefault' => true]);
  2570.                             if (!$spvBanqueObj) {
  2571.                                 $spvBanqueObj = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $spvObj->getId()]);
  2572.                             }
  2573.                         }
  2574.                         if($spvBanqueObj && $spvBanqueObj->getIsANETOSG()){
  2575.                             $array1 = ['#CSV2ISO#','109','143','43','17','21','42','58','62','8','37','14','35'];
  2576.                         }else{
  2577.                             $array1 = ['#CSV2ISO#','109','143','43','17','21','42','58','62','8','37','14'];
  2578.                         }
  2579.                         fputcsv($fp,$array1,';'," ");
  2580.                         foreach ($contenu as $item){
  2581.                             fputcsv($fp,$item,';'," ");
  2582.                         }
  2583.                     }
  2584.                 }
  2585.             }
  2586.         }
  2587.     }
  2588.     public function exportXml($request,$spvId,$date)
  2589.     {
  2590.         if($spvId && $date) {
  2591.             $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDateOld($spvId, $date);
  2592.             if ($factures) {
  2593.                 foreach ($factures as $facture) {
  2594.                     if($facture->getIsAvoir()){
  2595.                         $montant = $facture->getMonatantRestantTtc().'€';
  2596.                     }else {
  2597.                         $montant = $facture->getMonatantTtc().'€';
  2598.                     }
  2599.                     $banqueSpv = '';
  2600.                     $ibanSpv = '';
  2601.                     $bicSpv = '';
  2602.                     if ($facture->getSpv()) {
  2603.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  2604.                         if (!$spvBanque) {
  2605.                             $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  2606.                         }
  2607.                         if ($spvBanque) {
  2608.                             $banqueSpv = $spvBanque->getBanque();
  2609.                             $ibanSpv = $spvBanque->getIban();
  2610.                             $bicSpv = $spvBanque->getBic();
  2611.                         }
  2612.                     }
  2613.                     $banqueFournisseur = '';
  2614.                     $ibanFournisseur = '';
  2615.                     $bicFournisseur = '';
  2616.                     if ($facture->getFournisseur()) {
  2617.                         if($facture->getRib()) {
  2618.                             $fournisseurBanque = $facture->getRib();
  2619.                         }else {
  2620.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2621.                         }
  2622.                         if (!$fournisseurBanque) {
  2623.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2624.                         }
  2625.                         if ($fournisseurBanque) {
  2626.                             $banqueFournisseur = $fournisseurBanque->getBanque();
  2627.                             $ibanFournisseur = $fournisseurBanque->getIban();
  2628.                             $bicFournisseur = $fournisseurBanque->getBic();
  2629.                         }
  2630.                     }
  2631.                     $spv = $facture->getSpv()?$facture->getSpv()->getName():'';
  2632.                     $fournisseur = $facture->getFournisseur()?$facture->getFournisseur()->getName():'';
  2633.                     $date = $facture->getDate()?$facture->getDate()->format('d/m/Y'):'';
  2634.                     $dom = new \DOMDocument('1.0', 'UTF-8');
  2635.                     $xmlRoot = $dom->createElement("xml");
  2636.                     $xmlRoot = $dom->appendChild($xmlRoot);
  2637.                     $currentItem1 = $dom->createElement("Reference_facture",$facture->getNumeroFacture30Max());
  2638.                     $xmlRoot->appendChild($currentItem1);
  2639.                     $currentItem2 = $dom->createElement("SPV");
  2640.                     $currentItem2 = $xmlRoot->appendChild($currentItem2);
  2641.                     $currentItem2->appendChild($dom->createElement('Name',$spv));
  2642.                     $currentItem2->appendChild($dom->createElement('IBAN',$ibanSpv));
  2643.                     $currentItem2->appendChild($dom->createElement('BIC',$bicSpv));
  2644.                     $currentItem2->appendChild($dom->createElement('Banque',$banqueSpv));
  2645.                     $currentItem3 = $dom->createElement("Fournisseur");
  2646.                     $currentItem3 = $xmlRoot->appendChild($currentItem3);
  2647.                     $currentItem3->appendChild($dom->createElement('name',$fournisseur));
  2648.                     $currentItem3->appendChild($dom->createElement('IBAN',$banqueFournisseur));
  2649.                     $currentItem3->appendChild($dom->createElement('BIC', $bicFournisseur));
  2650.                     $currentItem3->appendChild($dom->createElement('Banque',$ibanFournisseur));
  2651.                     $currentItem4 = $dom->createElement("Date_paiement",$date);
  2652.                     $xmlRoot->appendChild($currentItem4);
  2653.                     $currentItem5 = $dom->createElement("Montant_facture",$montant);
  2654.                     $xmlRoot->appendChild($currentItem5);
  2655.                     $file = $this->params->get('zips_directory') . "/paiement_".$facture->getToken().".xml";
  2656.                     $dom->save($file);
  2657.                     $dom->formatOutput = TRUE;
  2658.                     $contenu = $dom->saveXml();
  2659.                     $zip = new \ZipArchive();
  2660.                     $zipfile = $this->params->get('zips_directory') . '/paiement_-' . time() .'.zip';
  2661.                     if (file_exists($zipfile)) unlink($zipfile);
  2662.                     if ($zip->open($zipfile, \ZipArchive::CREATE) === TRUE) {
  2663.                         $zip->addFile($file,'paiement_-' . $facture->getToken());
  2664.                         $zip->close();
  2665.                         return $zipfile;
  2666.                     }
  2667.                 }
  2668.             }
  2669.         }
  2670.         return false;
  2671.     }
  2672.     public function sendFacturesEnAttenteNotSend(){
  2673.         $factures = $this->em->getRepository(FactureFinance::class)->getFacturesEnAttenteNotSend();
  2674.         $date = new \DateTime();
  2675.         $this->notification->sendFacturesEnAttenteNotSend('Factures en attents de validation',$factures,$date);
  2676.     }
  2677.     public function sendFacturesEnAttenteNotSendRappel(){
  2678.         $factures7j = $this->em->getRepository(FactureFinance::class)->getFacturesEnAttenteNotSend7j();
  2679.         $this->notification->sendFacturesEnAttenteNotSend7jRappel('Factures en attente de paiement',$factures7j);
  2680.         $usersTo = $this->em->getRepository(User::class)->getUserByRole('ROLE_ADMINISTRATEUR_FINANCIER');
  2681.         if($factures7j){
  2682.             foreach ($factures7j as $facture){
  2683.                 foreach ($usersTo as $userTo){
  2684.                     $this->notification->addNotificationFactureNotification($userTo,$facture->getUserCreated(),$facture);
  2685.                 }
  2686.             }
  2687.         }
  2688.         $factures3j = $this->em->getRepository(FactureFinance::class)->getFacturesEnAttenteNotSend3j();
  2689.         $this->notification->sendFacturesEnAttenteNotSend3jRappel('Factures en attente de paiement',$factures3j);
  2690.         if($factures3j){
  2691.             foreach ($factures3j as $facture){
  2692.                 foreach ($usersTo as $userTo){
  2693.                     $this->notification->addNotificationFactureNotification($userTo,$facture->getUserCreated(),$facture);
  2694.                 }
  2695.             }
  2696.         }
  2697.     }
  2698.     public function kpiSpvProject($request){
  2699.         $spvTabKpi = $request->get('spvTabKpi');
  2700.         $spvTabProject = $request->get('spvTabProject');
  2701.         $dateKpi1 = $request->get('searchTabDateKpi1');
  2702.         $dateKpi2 = $request->get('searchTabDateKpi2');
  2703.         $arrySpv = [];
  2704.         $arryProject = [];
  2705.         $tabGlobal = [];
  2706.         $tabGlobalTotal = [];
  2707.         if($spvTabKpi) {
  2708.             foreach ($spvTabKpi as $item) {
  2709.                 $spv = $this->em->getRepository(Spv::class)->find($item);
  2710.                 $arrySpv[] = $spv;
  2711.             }
  2712.         }
  2713.         if($spvTabProject) {
  2714.             foreach ($spvTabProject as $item) {
  2715.                 $project = $this->em->getRepository(Project::class)->find($item);
  2716.                 $arryProject[] = $project;
  2717.             }
  2718.         }
  2719.         if($arrySpv) {
  2720.             foreach ($arrySpv as $value) {
  2721.                 if($value){
  2722.                     $tabGlobal[$value->getId()]['name'] = $value->getName();
  2723.                     $totalSpv = 0;
  2724.                     foreach ($arryProject as $item) {
  2725.                         $facturesProject = $this->em->getRepository(ProjectFactureFinance::class)->getFacturesSpv($value->getId(), $item->getId(), $dateKpi1, $dateKpi2);
  2726.                         $totalSpvProject = 0;
  2727.                         if ($facturesProject) {
  2728.                             foreach ($facturesProject as $factureProject) {
  2729.                                 $totalSpvProject += $factureProject->getMontantTtc();
  2730.                             }
  2731.                         }
  2732.                         $tabGlobal[$value->getId()]['projectMontant'][] = $totalSpvProject;
  2733.                         $totalSpv += $totalSpvProject;
  2734.                     }
  2735.                     $tabGlobal[$value->getId()]['montantTotal'] = $totalSpv;
  2736.                 }
  2737.             }
  2738.         }
  2739.         if($tabGlobal) {
  2740.             foreach ($tabGlobal as $tabGlobalItem) {
  2741.                 if(isset($tabGlobalItem['projectMontant'])) {
  2742.                     foreach ($tabGlobalItem['projectMontant'] as $key => $tabGlobalItemProjectMontant) {
  2743.                         if (!isset($tabGlobalTotal[$key])) {
  2744.                             $tabGlobalTotal[$key] = 0;
  2745.                         }
  2746.                         $tabGlobalTotal[$key] += $tabGlobalItemProjectMontant;
  2747.                     }
  2748.                 }
  2749.             }
  2750.         }
  2751.         return [
  2752.             'arryProject'=>$arryProject ,
  2753.             'tabGlobal'=>$tabGlobal ,
  2754.             'tabGlobalTotal'=>$tabGlobalTotal
  2755.         ];
  2756.     }
  2757.     public function kpiFournisseurProject($request){
  2758.         $fournisseurTabKpi = $request->get('fournisseurTabKpi');
  2759.         $fournisseurTabProject = $request->get('fournisseurTabProject');
  2760.         $dateKpi1 = $request->get('searchTabDateKpi1');
  2761.         $dateKpi2 = $request->get('searchTabDateKpi2');
  2762.         $arryFournisseur = [];
  2763.         $arryProject = [];
  2764.         $tabGlobal = [];
  2765.         $tabGlobalTotal = [];
  2766.         if($fournisseurTabKpi) {
  2767.             foreach ($fournisseurTabKpi as $item) {
  2768.                 $fournisseur = $this->em->getRepository(Fournisseur::class)->find($item);
  2769.                 $arryFournisseur[] = $fournisseur;
  2770.             }
  2771.         }
  2772.         if($fournisseurTabProject) {
  2773.             foreach ($fournisseurTabProject as $item) {
  2774.                 $project = $this->em->getRepository(Project::class)->find($item);
  2775.                 $arryProject[] = $project;
  2776.             }
  2777.         }
  2778.         if($arryFournisseur) {
  2779.             foreach ($arryFournisseur as $value) {
  2780.                 if($value) {
  2781.                     $tabGlobal[$value->getId()]['name'] = $value->getName();
  2782.                     $totalFournisseur = 0;
  2783.                     foreach ($arryProject as $item) {
  2784.                         $facturesProject = $this->em->getRepository(ProjectFactureFinance::class)->getFacturesFournisseur($value->getId(), $item->getId(), $dateKpi1, $dateKpi2);
  2785.                         $totalFournisseurProject = 0;
  2786.                         if ($facturesProject) {
  2787.                             foreach ($facturesProject as $factureProject) {
  2788.                                 $totalFournisseurProject += $factureProject->getMontantTtc();
  2789.                             }
  2790.                         }
  2791.                         $tabGlobal[$value->getId()]['projectMontant'][] = $totalFournisseurProject;
  2792.                         $totalFournisseur += $totalFournisseurProject;
  2793.                     }
  2794.                     $tabGlobal[$value->getId()]['montantTotal'] = $totalFournisseur;
  2795.                 }
  2796.             }
  2797.         }
  2798.         foreach ($tabGlobal as $tabGlobalItem){
  2799.             if(isset($tabGlobalItem['projectMontant'])) {
  2800.                 foreach ($tabGlobalItem['projectMontant'] as $key => $tabGlobalItemProjectMontant) {
  2801.                     if (!isset($tabGlobalTotal[$key])) {
  2802.                         $tabGlobalTotal[$key] = 0;
  2803.                     }
  2804.                     $tabGlobalTotal[$key] += $tabGlobalItemProjectMontant;
  2805.                 }
  2806.             }
  2807.         }
  2808.         return [
  2809.             'arryProject'=>$arryProject ,
  2810.             'tabGlobal'=>$tabGlobal ,
  2811.             'tabGlobalTotal'=>$tabGlobalTotal
  2812.         ];
  2813.     }
  2814.     public function kpiClassificationProject($request){
  2815.         $classificationTabKpi = $request->get('classificationTabKpi');
  2816.         $classificationTabProject = $request->get('classificationTabProject');
  2817.         $dateKpi1 = $request->get('searchTabDateKpi1');
  2818.         $dateKpi2 = $request->get('searchTabDateKpi2');
  2819.         $SPVNotMultipleTabProject = $request->get('SPVNotMultipleTabProject');
  2820.         $arryClassification = [];
  2821.         $arryProject = [];
  2822.         $tabGlobal = [];
  2823.         $tabGlobalTotal = [];
  2824.         if(!$classificationTabKpi){
  2825.             $classificationTabKpi = FactureFinance::DEPENSE_NEW2;
  2826.             foreach ($classificationTabKpi as $item){
  2827.                 $arryClassification[]['name'] =  $item;
  2828.             }
  2829.         }else{
  2830.             foreach ($classificationTabKpi as $item){
  2831.                 $arryClassification[]['name'] =  $item;
  2832.             }
  2833.         }
  2834.         if($SPVNotMultipleTabProject &&  !$classificationTabProject){
  2835.             $projects = $this->em->getRepository(Project::class)->getProjectsBySpvs($SPVNotMultipleTabProject);
  2836.             foreach ($projects as $item){
  2837.                 $arryProject[] =  $item;
  2838.             }
  2839.         }else{
  2840.             foreach ($classificationTabProject as $item){
  2841.                 $project = $this->em->getRepository(Project::class)->find($item);
  2842.                 $arryProject[] =  $project;
  2843.             }
  2844.         }
  2845.         foreach ($arryClassification as $i => $value){
  2846.             $tabGlobal[$i]['name'] = $value['name'];
  2847.             $totalClassification = 0;
  2848.             foreach ($arryProject as $item){
  2849.                 $facturesProject = $this->em->getRepository(ProjectFactureFinance::class)->getFacturesClassification($value['name'],$item->getId(),$dateKpi1,$dateKpi2);
  2850.                 $totalClassificationProject = 0;
  2851.                 if($facturesProject){
  2852.                     foreach ($facturesProject as $factureProject){
  2853.                         $totalClassificationProject += $factureProject->getMontantTtc();
  2854.                     }
  2855.                 }
  2856.                 $tabGlobal[$i]['projectMontant'][] = $totalClassificationProject;
  2857.                 $totalClassification += $totalClassificationProject;
  2858.             }
  2859.             $tabGlobal[$i]['montantTotal'] = $totalClassification;
  2860.         }
  2861.         foreach ($tabGlobal as $tabGlobalItem){
  2862.             if(isset($tabGlobalItem['projectMontant'])) {
  2863.                 foreach ($tabGlobalItem['projectMontant'] as $key => $tabGlobalItemProjectMontant) {
  2864.                     if (!isset($tabGlobalTotal[$key])) {
  2865.                         $tabGlobalTotal[$key] = 0;
  2866.                     }
  2867.                     $tabGlobalTotal[$key] += $tabGlobalItemProjectMontant;
  2868.                 }
  2869.             }
  2870.         }
  2871.         return [
  2872.             'arryProject'=>$arryProject ,
  2873.             'tabGlobal'=>$tabGlobal ,
  2874.             'tabGlobalTotal'=>$tabGlobalTotal
  2875.         ];
  2876.     }
  2877.     public function getPorjectBySpv($request)
  2878.     {
  2879.         $spvProjects = $request->get('spvProjects');
  2880.         $projects = $this->em->getRepository(Project::class)->getProjectsBySpvs($spvProjects);
  2881.         return $projects;
  2882.     }
  2883.     public function getFacturesToken($token){
  2884.         $facture = $this->em->getRepository(FactureFinance::class)->findBy(['token'=>$token]);
  2885.         return $facture;
  2886.     }
  2887.     public function addStyleToCellDate($cell,$row,$string,$spreadsheet){
  2888.         if($string && is_object($string)){
  2889.             $spreadsheet->getActiveSheet()->setCellValue($cell.$row,Date::PHPToExcel($string->format('d/m/Y')) );
  2890.             $spreadsheet->getActiveSheet()->getStyle($cell.$row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);
  2891.         }else{
  2892.             $spreadsheet->getActiveSheet()->setCellValue($cell.$row,'-' );
  2893.         }
  2894.         return $spreadsheet;
  2895.     }
  2896.     public function extractFactures($factures,$request){
  2897.         $file= $this->params->get('zips_directory')."/extraire_factures.xlsx";
  2898.         $spreadsheet = new Spreadsheet();
  2899.         $sheet = $spreadsheet->getActiveSheet();
  2900.         // Head 2
  2901.         $tableHead2 = [
  2902.             'font'=>[
  2903.                 'color'=>[
  2904.                     'rgb'=>'0071c1'
  2905.                 ],
  2906.                 'bold'=>true,
  2907.                 'size'=>12
  2908.             ],
  2909.             'fill'=>[
  2910.                 'fillType' => Fill::FILL_SOLID,
  2911.                 'startColor' => [
  2912.                     'rgb' => 'dcebf4'
  2913.                 ]
  2914.             ],
  2915.         ];
  2916.         $sheet->setCellValue('A1',"N° de facture")
  2917.             ->setCellValue('B1',"Date de création de facture")
  2918.             ->setCellValue('C1',"Fournisseur")
  2919.             ->setCellValue('D1',"SPV")
  2920.             ->setCellValue('E1',"Développeur")
  2921.             ->setCellValue('F1',"Classification dépense")
  2922.             ->setCellValue('G1',"Taux de TVA")
  2923.             ->setCellValue('H1',"Montant TVA")
  2924.             ->setCellValue('I1',"Montant HT")
  2925.             ->setCellValue('J1',"Montant TTC")
  2926.             ->setCellValue('K1',"Délai de paiement")
  2927.             ->setCellValue('L1',"Facture url")
  2928.             ->setCellValue('M1',"Statut")
  2929.             ->setCellValue('N1',"Projet")
  2930.             ->setCellValue('O1',"Date d'émission de la facture")
  2931.             ->setCellValue('P1',"Date de paiement banque")
  2932.             ->setCellValue('Q1',"Date de validation")
  2933.             ->setCellValue('R1',"Date de demande de paiement")
  2934.             ->setCellValue('S1',"Commentaires")
  2935.             ->setCellValue('T1',"COMPTEUR ERPI PIECE");
  2936.         // Borders a2 z2
  2937.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2938.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2939.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2940.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2941.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2942.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2943.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2944.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2945.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2946.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2947.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2948.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2949.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2950.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2951.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2952.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2953.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2954.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2955.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2956.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2957.         //width
  2958.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(17);
  2959.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  2960.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  2961.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  2962.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  2963.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  2964.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(30);
  2965.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(16);
  2966.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(20);
  2967.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  2968.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(30);
  2969.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(30);
  2970.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(50);
  2971.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(50);
  2972.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(50);
  2973.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(30);
  2974.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(30);
  2975.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(35);
  2976.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(30);
  2977.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(30);
  2978.         $spreadsheet->getActiveSheet()->getStyle('A1:T1')->applyFromArray($tableHead2);
  2979.         //loop through the data
  2980.         //current row
  2981.         $row=2;
  2982.         foreach($factures as $facture){
  2983.             $urlFacture = $facture->getFileFacture()?$facture->getFileFacture()->getPath() : null;
  2984.             $nameFacture = $facture->getFileFacture()?$facture->getFileFacture()->getNomenclature()?$facture->getFileFacture()->getNomenclature():$facture->getFileFacture()->getName():null;
  2985.             $spreadsheet->getActiveSheet()
  2986.                 ->setCellValue('A'.$row , (string)$facture->getNumeroFacture30Max())
  2987.                 ->setCellValue('C'.$row , $facture->getFournisseur()?$facture->getFournisseur()->getName():'')
  2988.                 ->setCellValue('D'.$row , $facture->getSpv()?$facture->getSpv()->getName():'')
  2989.                 ->setCellValue('E'.$row , $facture->getDeveloppeur()?$facture->getDeveloppeur()->getFirstname().' '.$facture->getDeveloppeur()->getLastname():'')
  2990.                 ->setCellValue('F'.$row , $facture->getEpc()?$facture->getEpc()->getFirstname().' '.$facture->getEpc()->getLastname():'')
  2991.                 ->setCellValue('F'.$row , $facture->getClassification())
  2992.                 ->setCellValue('G'.$row , $facture->getTauxTva()?$facture->getTauxTva().'%' : '')
  2993.                 ->setCellValue('H'.$row , $facture->getTva())
  2994.                 ->setCellValue('I'.$row , $facture->getMonatantHt())
  2995.                 ->setCellValue('J'.$row , $facture->getMonatantTtc())
  2996.             ;
  2997.             $spreadsheet = $this->addStyleToCellDate('B',$row,$facture->getCreatedAt(),$spreadsheet);
  2998.             $spreadsheet = $this->addStyleToCellDate('K',$row,$facture->getDelaiPaiementDate(),$spreadsheet);
  2999.             if($urlFacture){
  3000.                 $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  3001.                 $spreadsheet->getActiveSheet()->setCellValue('L'.$row ,$nameFacture);
  3002.                 $spreadsheet->getActiveSheet()->getCell('L'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  3003.             }
  3004.             $strStatusAvoir = '';
  3005.             if($facture->getIsAvoir()){
  3006.                 $strStatusAvoir .= ' ( compensée par ';
  3007.                 if(count($facture->getAvoirFactureFinance()) == 1){
  3008.                     $strStatusAvoir .=  'un avoir ';
  3009.                 }else{
  3010.                     $strStatusAvoir .=  'plusieurs avoirs ';
  3011.                 }
  3012.                 if($facture->getMonatantRestantTtc() == 0){
  3013.                 }else{
  3014.                     $strStatusAvoir .=  'partiellement ';
  3015.                 }
  3016.                 $strStatusAvoir .= ' ) ';
  3017.             }
  3018.             $spreadsheet->getActiveSheet()->setCellValue('M'.$row , $facture->getStatusString().$strStatusAvoir);
  3019.             $projectName = '';
  3020.             if(count($facture->getProjectFactureFinance())>0){
  3021.                 $a = count($facture->getProjectFactureFinance());
  3022.                 $i = 1;
  3023.                 foreach ($facture->getProjectFactureFinance() as $item){
  3024.                     if($i == $a){
  3025.                         $projectName .= $item->getProject()->getName();
  3026.                     }else{
  3027.                         $projectName .= $item->getProject()->getName()."\n";
  3028.                     }
  3029.                     $i++;
  3030.                 }
  3031.                 $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getAlignment()->setWrapText(true);
  3032.             }
  3033.             $spreadsheet->getActiveSheet()->setCellValue('N'.$row , $projectName);
  3034.             $spreadsheet = $this->addStyleToCellDate('O',$row,$facture->getDateFacture(),$spreadsheet);
  3035.             $spreadsheet = $this->addStyleToCellDate('P',$row,$facture->getDatePaiement(),$spreadsheet);
  3036.             $spreadsheet = $this->addStyleToCellDate('Q',$row,$facture->getDateValidation(),$spreadsheet);
  3037.             $spreadsheet = $this->addStyleToCellDate('R',$row,$facture->getDate(),$spreadsheet);
  3038.             $commantaires = '';
  3039.             if(count($facture->getComment())>0){
  3040.                 $a = count($facture->getComment());
  3041.                 $i = 1;
  3042.                 foreach ($facture->getComment() as $item){
  3043.                     if($i == $a){
  3044.                         $commantaires .= $item->getComment();
  3045.                     }else{
  3046.                         $commantaires .= $item->getComment()."\n";
  3047.                     }
  3048.                     $i++;
  3049.                 }
  3050.                 $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getAlignment()->setWrapText(true);
  3051.             }
  3052.             $spreadsheet->getActiveSheet()->setCellValue('S'.$row , $commantaires);
  3053.             $spreadsheet->getActiveSheet()->setCellValue('T'.$row , $facture->getCompteurErpiPiece());
  3054.             //increment row
  3055.             $row++;
  3056.         }
  3057.         $firstRow=1;
  3058.         $lastRow=$row-1;
  3059.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":T".$lastRow);
  3060.         $writer = new Xlsx($spreadsheet);
  3061.         $writer->save($file);
  3062.         return $file;
  3063.     }
  3064.     public function extractFacturesAvoir($factures,$request){
  3065.         $file= $this->params->get('zips_directory')."/extraire_factures.xlsx";
  3066.         $spreadsheet = new Spreadsheet();
  3067.         $sheet = $spreadsheet->getActiveSheet();
  3068.         // Head 2
  3069.         $tableHead2 = [
  3070.             'font'=>[
  3071.                 'color'=>[
  3072.                     'rgb'=>'0071c1'
  3073.                 ],
  3074.                 'bold'=>true,
  3075.                 'size'=>12
  3076.             ],
  3077.             'fill'=>[
  3078.                 'fillType' => Fill::FILL_SOLID,
  3079.                 'startColor' => [
  3080.                     'rgb' => 'dcebf4'
  3081.                 ]
  3082.             ],
  3083.         ];
  3084.         $sheet->setCellValue('A1',"N° de facture")
  3085.             ->setCellValue('B1',"Date de création de facture")
  3086.             ->setCellValue('C1',"Fournisseur")
  3087.             ->setCellValue('D1',"SPV")
  3088.             ->setCellValue('E1',"Développeur")
  3089.             ->setCellValue('F1',"EPC")
  3090.             ->setCellValue('G1',"Classification dépense")
  3091.             ->setCellValue('H1',"Montant déduit de l’avoir")
  3092.             ->setCellValue('I1',"Montant restant à régler")
  3093.             ->setCellValue('J1',"Montant TTC")
  3094.             ->setCellValue('K1',"Délai de paiement")
  3095.             ->setCellValue('L1',"Facture url")
  3096.             ->setCellValue('M1',"Statut")
  3097.             ->setCellValue('N1',"Projet")
  3098.             ->setCellValue('O1',"Avoir(s)");
  3099.         // Borders a2 z2
  3100.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3101.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3102.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3103.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3104.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3105.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3106.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3107.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3108.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3109.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3110.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3111.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3112.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3113.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3114.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3115.         //width
  3116.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(17);
  3117.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  3118.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  3119.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  3120.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  3121.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  3122.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(30);
  3123.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(35);
  3124.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(35);
  3125.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  3126.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(20);
  3127.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(30);
  3128.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(50);
  3129.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(30);
  3130.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(60);
  3131.         $spreadsheet->getActiveSheet()->getStyle('A1:O1')->applyFromArray($tableHead2);
  3132.         //loop through the data
  3133.         //current row
  3134.         $row=2;
  3135.         foreach($factures as $facture){
  3136.             $urlFacture = $facture->getFileFacture()?$facture->getFileFacture()->getPath() : null;
  3137.             $nameFacture = $facture->getFileFacture()?$facture->getFileFacture()->getNomenclature()?$facture->getFileFacture()->getNomenclature():$facture->getFileFacture()->getName():null;
  3138.             $spreadsheet->getActiveSheet()
  3139.                 ->setCellValue('A'.$row , (string)$facture->getNumeroFacture30Max())
  3140.                 ->setCellValue('C'.$row , $facture->getFournisseur()?$facture->getFournisseur()->getName():'')
  3141.                 ->setCellValue('D'.$row , $facture->getSpv()?$facture->getSpv()->getName():'')
  3142.                 ->setCellValue('E'.$row , $facture->getDeveloppeur()?$facture->getDeveloppeur()->getFirstname().' '.$facture->getDeveloppeur()->getLastname():'')
  3143.                 ->setCellValue('F'.$row , $facture->getEpc()?$facture->getEpc()->getFirstname().' '.$facture->getEpc()->getLastname():'')
  3144.                 ->setCellValue('G'.$row , $facture->getClassification())
  3145.                 ->setCellValue('H'.$row , $facture->getMonatantAvoirTtc())
  3146.                 ->setCellValue('I'.$row , $facture->getMonatantRestantTtc())
  3147.                 ->setCellValue('J'.$row , $facture->getMonatantTtc())
  3148.             ;
  3149.             $spreadsheet = $this->addStyleToCellDate('B',$row,$facture->getCreatedAt(),$spreadsheet);
  3150.             $spreadsheet = $this->addStyleToCellDate('K',$row,$facture->getDelaiPaiementDate(),$spreadsheet);
  3151.             if($urlFacture){
  3152.                 $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  3153.                 $spreadsheet->getActiveSheet()->setCellValue('L'.$row ,$nameFacture);
  3154.                 $spreadsheet->getActiveSheet()->getCell('L'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  3155.             }
  3156.             $spreadsheet->getActiveSheet()->setCellValue('M'.$row , $facture->getStatusString());
  3157.             $projectName = '';
  3158.             if(count($facture->getProjectFactureFinance())>0){
  3159.                 $a = count($facture->getProjectFactureFinance());
  3160.                 $i = 1;
  3161.                 foreach ($facture->getProjectFactureFinance() as $item){
  3162.                     if($i == $a){
  3163.                         $projectName .= $item->getProject()->getName();
  3164.                     }else{
  3165.                         $projectName .= $item->getProject()->getName()."\n";
  3166.                     }
  3167.                     $i++;
  3168.                 }
  3169.                 $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getAlignment()->setWrapText(true);
  3170.             }
  3171.             $spreadsheet->getActiveSheet()->setCellValue('N'.$row , $projectName);
  3172.             $avoirNum = '';
  3173.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  3174.             if($avoirs){
  3175.                 $a = count($avoirs);
  3176.                 $i = 1;
  3177.                 foreach ($avoirs as $item){
  3178.                     if($i == $a){
  3179.                         $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  3180.                     }else{
  3181.                         $avoirNum .= $item->getAvoir()->getNumeroAvoir()."\n";
  3182.                     }
  3183.                     $i++;
  3184.                 }
  3185.                 $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getAlignment()->setWrapText(true);
  3186.             }
  3187.             $spreadsheet->getActiveSheet()->setCellValue('O'.$row , $avoirNum);
  3188.             //increment row
  3189.             $row++;
  3190.         }
  3191.         $firstRow=1;
  3192.         $lastRow=$row-1;
  3193.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":O".$lastRow);
  3194.         $writer = new Xlsx($spreadsheet);
  3195.         $writer->save($file);
  3196.         return $file;
  3197.     }
  3198.     public function getAvoirDispoFacture($request,$token)
  3199.     {
  3200.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  3201.         $avoirs = [];
  3202.         if($facture){
  3203.             $oldAvoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  3204.             if($oldAvoirs){
  3205.                 foreach ($oldAvoirs as $obj){
  3206.                     $avoir = $obj->getAvoir();
  3207.                     $avoir->setStatus(Avoir::STATUS_VALIDE);
  3208.                     $htAndTtc = $this->hTAndTTC($obj->getMonatantAvoirTtc(),$avoir->getTauxTva());
  3209.                     $avoir->setMonatantRestantTtc($obj->getMonatantAvoirTtc());
  3210.                     $avoir->setMonatantHt($htAndTtc['ht']);
  3211.                     $avoir->setMonatantTtc($obj->getMonatantAvoirTtc());
  3212.                     $this->em->persist($avoir);
  3213.                     $this->em->remove($obj);
  3214.                     $this->em->flush();
  3215.                 }
  3216.             }
  3217.             $fourniseur = $facture->getFournisseur();
  3218.             $spv = $facture->getSpv();
  3219.             if($fourniseur && $spv){
  3220.                 $avoirs = $this->em->getRepository(Avoir::class)->findAvoirDispo($fourniseur,$spv);
  3221.             }
  3222.         }
  3223.         return $avoirs;
  3224.     }
  3225.     public function getMontantAvoirDispoFacture($request,$token,$tokens)
  3226.     {
  3227.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  3228.         $mantantFacture = 0;
  3229.         $mantantTotalAvoir = 0;
  3230.         $mantantTotalAvoirRestant = 0;
  3231.         $mantantTotalFactureRestant = 0;
  3232.         if($facture){
  3233.             $mantantFacture = (float)(str_replace(',','.',$facture->getMonatantTtc()));
  3234.             $avoirs = $this->em->getRepository(Avoir::class)->findByTokensAndActive($tokens);
  3235.             if($avoirs){
  3236.                 foreach ($avoirs as $avoir){
  3237.                     if($avoir->getStatus() == Avoir::STATUS_AVOIR_REGULARISE_PARTIELLEMENT){
  3238.                         $mantantTotalAvoir += (float)(str_replace(',','.',$avoir->getMonatantRestantTtc()));
  3239.                     }else{
  3240.                         $mantantTotalAvoir += (float)(str_replace(',','.',$avoir->getMonatantTtc()));
  3241.                     }
  3242.                 }
  3243.             }
  3244.             if($mantantFacture >= $mantantTotalAvoir){
  3245.                 $mantantTotalAvoirRestant = 0;
  3246.                 $mantantTotalFactureRestant = $mantantFacture - $mantantTotalAvoir;
  3247.             }else{
  3248.                 $mantantTotalAvoirRestant = $mantantTotalAvoir - $mantantFacture;
  3249.                 $mantantTotalFactureRestant = 0;
  3250.             }
  3251.         }
  3252.         return [
  3253.             'mantantFacture'=> $mantantFacture,
  3254.             'mantantTotalAvoir'=> $mantantTotalAvoir,
  3255.             'mantantTotalAvoirRestant'=> $mantantTotalAvoirRestant,
  3256.             'mantantTotalFactureRestant'=> $mantantTotalFactureRestant,
  3257.         ];
  3258.     }
  3259.     public function espaceNumber($str,$chiffreApresVergule = 2){
  3260.         $formattedNumber = str_replace(',','.',$str);
  3261.         if($formattedNumber and is_numeric($formattedNumber)){
  3262.             if(strpos($formattedNumber,'.') or strpos($formattedNumber,',')){
  3263.                 if(strpos($formattedNumber,'.')){
  3264.                     $formattedNumber = number_format($formattedNumber, $chiffreApresVergule, '.', ' ');
  3265.                 }else{
  3266.                     $formattedNumber = number_format($formattedNumber, $chiffreApresVergule, ',', ' ');
  3267.                 }
  3268.             }else{
  3269.                 $formattedNumber = number_format($formattedNumber, 0, '0', ' ');
  3270.             }
  3271.         }
  3272.         return $formattedNumber;
  3273.     }
  3274.     public function addAvoirInFacture($request,$token,$tokens)
  3275.     {
  3276.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  3277.         if($facture) {
  3278.             $userCurrent = $this->security->getUser();
  3279.             $spvFacture = $facture->getSpv();
  3280.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  3281.             }else {
  3282.                 if (!$spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFactureSpv()) {
  3283.                     return [
  3284.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  3285.                         'success' => false,
  3286.                     ];
  3287.                 }
  3288.                 if ($spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFacturePrejeance()) {
  3289.                     return [
  3290.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide  la facture</p>',
  3291.                         'success' => false,
  3292.                     ];
  3293.                 }
  3294.             }
  3295.             $mantantData = $this->getMontantAvoirDispoFacture($request,$token,$tokens);
  3296.             $mantantTotalAvoir = $mantantData['mantantTotalAvoir'];
  3297.             $avoirs = $this->em->getRepository(Avoir::class)->findByTokensAndActive($tokens);
  3298.             $this->addAvoirs($facture ,$avoirs);
  3299.             return ['success' => false];
  3300.         }
  3301.     }
  3302.     private function addAvoirs($financeFacture ,$avoirs){
  3303.         $oldAvoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$financeFacture->getId()]);
  3304.         if($oldAvoirs){
  3305.             foreach ($oldAvoirs as $obj){
  3306.                 $avoir = $obj->getAvoir();
  3307.                 $avoir->setStatus(Avoir::STATUS_VALIDE);
  3308.                 $htAndTtc = $this->hTAndTTC($obj->getMonatantAvoirTtc(),$avoir->getTauxTva());
  3309.                 $avoir->setMonatantRestantTtc($obj->getMonatantAvoirTtc());
  3310.                 $avoir->setMonatantHt($htAndTtc['ht']);
  3311.                 $avoir->setMonatantTtc($obj->getMonatantAvoirTtc());
  3312.                 $this->em->persist($avoir);
  3313.                 $this->em->remove($obj);
  3314.                 $this->em->flush();
  3315.             }
  3316.             $financeFacture->setIsAvoir(false);
  3317.             $financeFacture->setMonatantAvoirTtc('0');
  3318.             $financeFacture->setMonatantRestantTtc('0');
  3319.             $this->em->persist($financeFacture);
  3320.             $this->em->flush();
  3321.         }
  3322.         if($avoirs && $financeFacture){
  3323.             $mantantFacture = (float)(str_replace(',','.',$financeFacture->getMonatantTtc()));
  3324.             $mantantTotalAvoir = 0;
  3325.             foreach ($avoirs as $avoir){
  3326.                 if($mantantFacture > 0){
  3327.                     if($avoir->getStatus() == Avoir::STATUS_AVOIR_REGULARISE_PARTIELLEMENT){
  3328.                         $mantantAvoirTtc = (float)(str_replace(',','.',$avoir->getMonatantRestantTtc()));
  3329.                     }else{
  3330.                         $mantantAvoirTtc = (float)(str_replace(',','.',$avoir->getMonatantTtc()));
  3331.                     }
  3332.                     $mantantTotalAvoir = $mantantTotalAvoir + $mantantAvoirTtc;
  3333.                     if($mantantFacture >= $mantantAvoirTtc){
  3334.                         $mantantFacture = $mantantFacture - $mantantAvoirTtc;
  3335.                         $factureAvoir = new AvoirFactureFinance();
  3336.                         $factureAvoir->setAvoir($avoir);
  3337.                         $factureAvoir->setFinanceFacture($financeFacture);
  3338.                         if($avoir->getStatus() == Avoir::STATUS_AVOIR_REGULARISE_PARTIELLEMENT){
  3339.                             $factureAvoir->setMonatantHt('');
  3340.                             $factureAvoir->setMonatantTtc($mantantAvoirTtc);
  3341.                             $factureAvoir->setMonatantAvoirTtc($mantantAvoirTtc);
  3342.                             $factureAvoir->setTauxTva('');
  3343.                             $factureAvoir->setTva(null);
  3344.                         }else{
  3345.                             $factureAvoir->setMonatantHt((str_replace(',','.',$avoir->getMonatantHt())));
  3346.                             $factureAvoir->setMonatantTtc((str_replace(',','.',$avoir->getMonatantTtc())));
  3347.                             $factureAvoir->setMonatantAvoirTtc((str_replace(',','.',$avoir->getMonatantTtc())));
  3348.                             $factureAvoir->setTauxTva($avoir->getTauxTva());
  3349.                             $factureAvoir->setTva($avoir->getTva());
  3350.                         }
  3351.                         $this->em->persist($factureAvoir);
  3352.                         $avoir->setStatus(Avoir::STATUS_AVOIR_EN_ATTENT_REGULARISE);
  3353.                         $avoir->setMonatantRestantTtc('0');
  3354.                         $this->em->persist($avoir);
  3355.                         $this->em->flush();
  3356.                     }else{
  3357.                         $montantRestantTtc = $mantantAvoirTtc - $mantantFacture;
  3358.                         $factureAvoir = new AvoirFactureFinance();
  3359.                         $factureAvoir->setAvoir($avoir);
  3360.                         $factureAvoir->setFinanceFacture($financeFacture);
  3361.                         $factureAvoir->setMonatantTtc($mantantFacture);
  3362.                         $factureAvoir->setMonatantAvoirTtc($mantantAvoirTtc);
  3363.                         $this->em->persist($factureAvoir);
  3364.                         $avoir->setStatus(Avoir::STATUS_AVOIR_EN_ATTENT_REGULARISE);
  3365.                         $avoir->setMonatantRestantTtc($montantRestantTtc);
  3366.                         if($montantRestantTtc && $avoir->getTauxTva()){
  3367.                             $htAndTtc = $this->hTAndTTC($montantRestantTtc,$avoir->getTauxTva());
  3368.                             $avoir->setMonatantRestantTtc($montantRestantTtc);
  3369.                             $avoir->setMonatantHt($htAndTtc['ht']);
  3370.                             $avoir->setMonatantTtc($montantRestantTtc);
  3371.                             $avoir->setTva($htAndTtc['tva']);
  3372.                         }
  3373.                         $this->em->persist($avoir);
  3374.                         $this->em->flush();
  3375.                         $mantantFacture = 0;
  3376.                     }
  3377.                 }
  3378.                 $financeFacture->setIsAvoir(true);
  3379.                 $financeFacture->setMonatantAvoirTtc($mantantTotalAvoir);
  3380.                 $financeFacture->setMonatantRestantTtc($mantantFacture);
  3381.                 $this->em->persist($financeFacture);
  3382.                 $this->em->flush();
  3383.             }
  3384.         }
  3385.     }
  3386.     public function hTAndTTC($ttc,$TauxTva){
  3387.         $ht = 0;
  3388.         $tva = 0;
  3389.         if($ttc && $TauxTva){
  3390.             $ttc = (float) (str_replace(',','.',$ttc));
  3391.             $TauxTva = (float) (str_replace(',','.',$TauxTva));
  3392.             $ht = $ttc / (($TauxTva/100) + 1);
  3393.             $tva = $ttc - $ht;
  3394.         }
  3395.         return ['ht'=>$ht,'tva'=>$tva];
  3396.     }
  3397.     public function valideAvoirPaiement($financeFacture){
  3398.         $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$financeFacture->getId()]);
  3399.         if($avoirs){
  3400.             foreach ($avoirs as $avoirFacture){
  3401.                 $avoir = $avoirFacture->getAvoir();
  3402.                 if((float)$avoir->getMonatantRestantTtc() == 0){
  3403.                     $avoir->setStatus(Avoir::STATUS_AVOIR_REGULARISE);
  3404.                     $this->em->persist($avoir);
  3405.                     $this->em->flush();
  3406.                 }else{
  3407.                     $avoir->setStatus(Avoir::STATUS_AVOIR_REGULARISE_PARTIELLEMENT);
  3408.                     $this->em->persist($avoir);
  3409.                     $this->em->flush();
  3410.                 }
  3411.             }
  3412.             $nameFile = $this->createJustificatifAvoir($financeFacture);
  3413.             if($nameFile){
  3414.                 $financeFacture->setJustification($nameFile);
  3415.                 $this->em->persist($financeFacture);
  3416.                 $this->em->flush();
  3417.             }
  3418.         }
  3419.     }
  3420.     public function createJustificatifAvoir($financeFacture){
  3421.         if($financeFacture && $financeFacture->getIsAvoir()){
  3422.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$financeFacture->getId()]);
  3423.             $html = $this->twig->render('admin/facture-finance/pdf-justificatif-avoir.html.twig',['avoirs'=>$avoirs,'factureFinance'=>$financeFacture]);
  3424.             $html2pdf = new Html2Pdf('P', 'A4', 'fr', true, 'UTF-8', array('5','5','5','5'));
  3425.             $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  3426.             $html2pdf->pdf->SetAuthor('Prejeace-Industrial');
  3427.             $html2pdf->pdf->SetTitle('Justificatif Avoir');
  3428.             $html2pdf->pdf->SetSubject('Justificatif Avoir');
  3429.             $html2pdf->pdf->SetKeywords('Justificatif Avoir');
  3430.             $html2pdf->pdf->SetDisplayMode('real');
  3431.             $html2pdf->WriteHTML($html);
  3432.             $nameFichier = 'Justificatif-'.time().'-'.$financeFacture->getId().'.pdf';
  3433.             $path_pdf = $this->params->get('justificatif_finance_directory').'/'.$nameFichier;
  3434.             $html2pdf->Output($path_pdf,'F');
  3435.             return $nameFichier;
  3436.         }
  3437.         return false;
  3438.     }
  3439.     public function paginateFactureCompensationPaiement($request){
  3440.         $length = $request->get('length');
  3441.         $length = $length && ($length!=-1)?$length:0;
  3442.         $start = $request->get('start');
  3443.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  3444.         $column =  $search = $request->get('columns');
  3445.         $order = $request->get('order')[0];
  3446.         $columnOrder = $order['column'];
  3447.         $dirOrder = $order['dir'];
  3448.         $columNameOrder = $column[$columnOrder]['data'];
  3449.         $search = $request->get('search');
  3450.         $spv = $request->get('spv');
  3451.         $fournisseur = $request->get('fournisseur');
  3452.         $searchTabDate = $request->get('searchTabDate');
  3453.         $filters = [
  3454.             'query' => trim(@$search['value']),
  3455.             'spv' => $spv,
  3456.             'isAvoir' => 1,
  3457.             'fournisseur' => $fournisseur,
  3458.             'searchTabDate' => $searchTabDate,
  3459.         ];
  3460.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  3461.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  3462.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, null, null, true,$columNameOrder, $dirOrder,true);
  3463.         $output = array(
  3464.             'data' => array(),
  3465.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  3466.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  3467.         );
  3468.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  3469.         foreach ($factureFinances as $factureFinance) {
  3470.             $action =
  3471.                 $this->twig->render(
  3472.                     'admin/facture-finance/default/bouton-compensation.html.twig', array(
  3473.                     'factureFinance' => $factureFinance
  3474.                 ));
  3475.             $action2 =
  3476.                 $this->twig->render(
  3477.                     'admin/facture-finance/default/select-compensation.html.twig', array(
  3478.                     'factureFinance' => $factureFinance
  3479.                 ));
  3480.             $avoirsList =
  3481.                 $this->twig->render(
  3482.                     'admin/facture-finance/default/avoirStrByFacture.html.twig', array(
  3483.                     'avoirs' => $this->getAvoirsFacture($factureFinance)
  3484.                 ));
  3485.             $monatantAvoirTtc = 0;
  3486.             if((!is_null($factureFinance->getMonatantAvoirTtc()) && !is_null($factureFinance->getMonatantTtc())) ){
  3487.                 if($factureFinance->getMonatantAvoirTtc() > $factureFinance->getMonatantTtc() ){
  3488.                     $monatantAvoirTtc = $factureFinance->getMonatantTtc();
  3489.                 }else{
  3490.                     $monatantAvoirTtc = $factureFinance->getMonatantAvoirTtc();
  3491.                 }
  3492.             }
  3493.             $output['data'][] = [
  3494.                 'responsive_id' => '',
  3495.                 'id' => $factureFinance->getId(),
  3496.                 'numeroFacture' => $factureFinance->getNumeroFacture30Max(),
  3497.                 'monatantTtc' => $factureFinance->getMonatantTtc() ? $this->espaceNumber($factureFinance->getMonatantTtc()).'€' : '0€',
  3498.                 'date' => $factureFinance->getDate() ? $factureFinance->getDate()->format('d/m/Y') : '',
  3499.                 'monatantAvoirTtc' => $this->espaceNumber($monatantAvoirTtc).'€',
  3500.                 'monatantRestantTtc' => $factureFinance->getMonatantRestantTtc() ? $this->espaceNumber($factureFinance->getMonatantRestantTtc()).'€' : '0€',
  3501.                 'avoirsList' => $avoirsList,
  3502.                 'action' => $action,
  3503.                 'action2' => $action2
  3504.             ];
  3505.         }
  3506.         return $output;
  3507.     }
  3508.     private function getAvoirsFacture($facture){
  3509.         $avoirs = null;
  3510.         if($facture && $facture->getIsAvoir()){
  3511.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  3512.         }
  3513.         return $avoirs;
  3514.     }
  3515.     public function supprimeFacture($request,$token)
  3516.     {
  3517.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  3518.         if($facture){
  3519.             $facture->setIsArchived(true);
  3520.             $facture->setNumeroFacture( $facture->getNumeroFacture().'----');
  3521.             $this->em->persist($facture);
  3522.             $this->em->flush();
  3523.             return [
  3524.                 'success' => true,
  3525.                 'factureFinance' => $facture
  3526.             ];
  3527.         }
  3528.         return [
  3529.             'success' => false,
  3530.         ];
  3531.     }
  3532.     public function getFilesPaiement(){
  3533.         $ftp_server = "ftpbank8.exalog.net";
  3534.         $ftp_username = "6e545e1b-01";
  3535.         $ftp_userpass = "]dQQxbkC99ENFi{N]$]E";
  3536.         $path ="/success_recept";
  3537.         $ftp_conn = ftp_ssl_connect($ftp_server,7021) or die("Could not connect to $ftp_server");
  3538.         $login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
  3539.         ftp_pasv($ftp_conn, true) or die("Cannot switch to passive mode");
  3540.         $contents = ftp_mlsd($ftp_conn, $path);
  3541.         $results = array();
  3542.         foreach ($contents as $content) {
  3543.             $results[] = array('name' => $content['name'], 'timestamp' => $content['modify']);
  3544.         }
  3545.         usort($results, function($a, $b) { return $b['timestamp'] - $a['timestamp']; });
  3546.         if($results){
  3547.             foreach ($results as $result){
  3548.                 $name = $result['name'];
  3549.                 $timestamp = $result['timestamp'];
  3550.                 $datetimeModify = new \DateTime($timestamp);
  3551.                 $dateNow = new \DateTime();
  3552.                 $dateNow->modify('-15 days');
  3553.                 $namePos = strpos($name, '.txt');
  3554.                 if($datetimeModify > $dateNow && $namePos !== false){
  3555.                     $local_file = $this->params->get('facture_finance_directory') . "/releve/".$name;
  3556.                     $server_file = 'success_recept/'.$name;
  3557.                     if (ftp_get($ftp_conn, $local_file, $server_file, FTP_BINARY)) {
  3558.                         $factures = $this->em->getRepository(FactureFinance::class)->getFacturesValide();
  3559.                         foreach ($factures as $facture){
  3560.                             $totalEcheaceTtc = $this->getEcheanceTtc($facture->getSpv()?$facture->getSpv()->getId():null,$facture->getDateValidation()->format('Y-m-d'));
  3561.                             $totalEcheaceTtc = trim((float)$totalEcheaceTtc);
  3562.                             $totalPosPoint = strpos($totalEcheaceTtc,'.');
  3563.                             if($totalPosPoint){
  3564.                                 $totalTtc = substr($totalEcheaceTtc,0,$totalPosPoint +2);
  3565.                                 $totalTtc = str_replace('.','',$totalTtc);
  3566.                             }else{
  3567.                                 $totalTtc = $totalEcheaceTtc;
  3568.                             }
  3569.                             if($totalTtc > 0){
  3570.                                 $lines = file($local_file);
  3571.                                 foreach ($lines as $line)
  3572.                                 {
  3573.                                     $findStringPos = strpos($line, $totalTtc);
  3574.                                     $findStringPos2 = strpos($line, 'REM VIR SEPA DU');
  3575.                                     if ($findStringPos !== false && $findStringPos2 !== false) {
  3576.                                         $explodeLine = explode(' ',rtrim(substr($line, 0, -2)));
  3577.                                         $lineTotalPrix = $explodeLine[count($explodeLine)-1];
  3578.                                         $lineTotalPrixPos = strpos($lineTotalPrix, $totalTtc);
  3579.                                         if($lineTotalPrixPos !== false){
  3580.                                             $findStringTab = substr($line, $findStringPos2 + 16,8);
  3581.                                             if($findStringTab){
  3582.                                                 $tabString = explode('/',trim($findStringTab));
  3583.                                                 $d = isset($tabString[0])?$tabString[0]:null;
  3584.                                                 $m = isset($tabString[1])?$tabString[1]:null;
  3585.                                                 $y = isset($tabString[2])?$tabString[2]:null;
  3586.                                                 if($y && $m && $d && (strlen($d) == 2) && (strlen($m) == 2) && (strlen($y) == 2)){
  3587.                                                     $date = \DateTime::createFromFormat('d/m/Y', $d.'/'.$m.'/'.'20'.$y );
  3588.                                                     if($date){
  3589.                                                         $dateMoin12J = new \DateTime($date->format('Y-m-d'));
  3590.                                                         $dateMoin12J->modify('-11 days');
  3591.                                                         if(($date > $facture->getDateValidation()) && ($facture->getDateValidation() > $dateMoin12J)){
  3592.                                                             if($facture->getDatePaiement()){
  3593.                                                             }else{
  3594.                                                                 $facture->setDatePaiement($date);
  3595.                                                                 $this->em->persist($facture);
  3596.                                                                 $this->em->flush();
  3597.                                                                 echo "Successfully date to facture numero ".$facture->getNumeroFacture30Max()." \n";
  3598.                                                                 break ;
  3599.                                                             }
  3600.                                                         }
  3601.                                                     }
  3602.                                                 }
  3603.                                             }
  3604.                                         }
  3605.                                     }
  3606.                                 }
  3607.                             }
  3608.                         }
  3609.                         echo "Successfully written to $local_file\n";
  3610.                     } else {
  3611.                         echo "There was a problem\n";
  3612.                     }
  3613.                 }
  3614.             }
  3615.         }
  3616.         ftp_close($ftp_conn);
  3617.     }
  3618.     public function extractFacturesAvoirsProject($arrays,$request=null){
  3619.         $file= $this->params->get('zips_directory')."/extraire_factures.xlsx";
  3620.         $spreadsheet = new Spreadsheet();
  3621.         $sheet = $spreadsheet->getActiveSheet();
  3622.         // Head 2
  3623.         $tableHead2 = [
  3624.             'font'=>[
  3625.                 'color'=>[
  3626.                     'rgb'=>'ffffff'
  3627.                 ],
  3628.                 'bold'=>true,
  3629.                 'size'=>12
  3630.             ],
  3631.             'fill'=>[
  3632.                 'fillType' => Fill::FILL_SOLID,
  3633.                 'startColor' => [
  3634.                     'rgb' => '002060'
  3635.                 ]
  3636.             ],
  3637.         ];
  3638.         $tableRand = [
  3639.             'fill'=>[
  3640.                 'fillType' => Fill::FILL_SOLID,
  3641.                 'startColor' => [
  3642.                     'rgb' => 'C8D6EE'
  3643.                 ]
  3644.             ],
  3645.         ];
  3646.         $sheet->setCellValue('A1',"Element")
  3647.             ->setCellValue('B1',"Mois")
  3648.             ->setCellValue('C1',"Date Facture")
  3649.             ->setCellValue('D1',"Libellé - Référence")
  3650.             ->setCellValue('E1',"Société facturée")
  3651.             ->setCellValue('F1',"Emetteur de la Facture")
  3652.             ->setCellValue('G1',"Projet homogénéisé")
  3653.             ->setCellValue('H1',"Motif homogénéisé")
  3654.             ->setCellValue('I1',"Type dépense / revenu")
  3655.             ->setCellValue('J1',"Total Facture")
  3656.             ->setCellValue('K1',"Montant TTC")
  3657.             ->setCellValue('L1',"Montant HT")
  3658.             ->setCellValue('M1',"TVA")
  3659.             ->setCellValue('N1',"Échéance TTC")
  3660.             ->setCellValue('O1',"Lettrage")
  3661.             ->setCellValue('P1',"Date paiement")
  3662.             ->setCellValue('Q1',"Payé par")
  3663.             ->setCellValue('R1',"Mode paiement")
  3664.             ->setCellValue('S1',"Facture url");
  3665.         // Borders a2 z2
  3666.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3667.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3668.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3669.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3670.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3671.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3672.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3673.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3674.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3675.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3676.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3677.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3678.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3679.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3680.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3681.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3682.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3683.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3684.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3685.         //width
  3686.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(15);
  3687.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(15);
  3688.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(15);
  3689.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(17);
  3690.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(15);
  3691.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(24);
  3692.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(35);
  3693.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(30);
  3694.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(40);
  3695.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(16);
  3696.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(16);
  3697.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(16);
  3698.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(16);
  3699.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(16);
  3700.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(15);
  3701.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  3702.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  3703.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(20);
  3704.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(40);
  3705.         $spreadsheet->getActiveSheet()->getStyle('A1:S1')->applyFromArray($tableHead2);
  3706.         //loop through the data
  3707.         //current row
  3708.         $row=2;
  3709.         foreach($arrays as $array){
  3710.             $spreadsheet->getActiveSheet()
  3711.                 ->setCellValue('A'.$row , $array['element'])
  3712.                 ->setCellValue('B'.$row , $array['mois'])
  3713.                 ->setCellValue('D'.$row , $array['reference'])
  3714.                 ->setCellValue('E'.$row , $array['societeFacture'])
  3715.                 ->setCellValue('F'.$row , $array['fourniseur'])
  3716.                 ->setCellValue('G'.$row , $array['projetHomogeneise'])
  3717.                 ->setCellValue('H'.$row , $array['motifHomogeneise'])
  3718.                 ->setCellValue('I'.$row , $array['typeDepense'])
  3719.                 ->setCellValue('J'.$row , $array['totalFactureTtc'])
  3720.                 ->setCellValue('K'.$row , $array['projetMontantTtc'])
  3721.                 ->setCellValue('L'.$row , $array['projetMontantHt'])
  3722.                 ->setCellValue('M'.$row , $array['projetMontantTva'])
  3723.                 ->setCellValue('N'.$row , $array['totalEcheaceTtc'])
  3724.                 ->setCellValue('O'.$row , $array['lettrage'])
  3725.                 ->setCellValue('Q'.$row , $array['payPar'])
  3726.                 ->setCellValue('R'.$row , $array['moyenPayement'])
  3727.             ;
  3728.             $urlFacture = $array['facture_url']?$array['facture_url']->getPath() : null;
  3729.             $nameFacture = $array['facture_url']?$array['facture_url']->getNomenclature()?$array['facture_url']->getNomenclature():$array['facture_url']->getName():null;
  3730.             if($urlFacture && $request){
  3731.                 $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  3732.                 $spreadsheet->getActiveSheet()->setCellValue('S'.$row ,$nameFacture);
  3733.                 $spreadsheet->getActiveSheet()->getCell('S'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  3734.             }
  3735.             $spreadsheet = $this->addStyleToCellDate('C',$row,$array['dateFacture'],$spreadsheet);
  3736.             $spreadsheet = $this->addStyleToCellDate('P',$row,$array['datePayementDate'],$spreadsheet);
  3737.             if($row % 2 == 0){
  3738.                 $spreadsheet->getActiveSheet()->getStyle('A'.$row.':S'.$row)->applyFromArray($tableRand);
  3739.             }
  3740.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3741.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3742.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3743.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3744.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3745.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3746.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3747.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3748.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3749.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3750.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3751.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3752.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3753.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3754.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3755.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3756.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3757.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3758.             $row++;
  3759.         }
  3760.         $firstRow=1;
  3761.         $lastRow=$row-1;
  3762.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":S".$lastRow);
  3763.         $writer = new Xlsx($spreadsheet);
  3764.         $writer->save($file);
  3765.         return $file;
  3766.     }
  3767.     public function getEcheanceTtc($spv,$date){
  3768.         if($spv && $date) {
  3769.             $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDate($spv, $date);
  3770.             $prix = 0;
  3771.             if($factures){
  3772.                 foreach ($factures as $facture){
  3773.                     if( $facture->getIsAvoir() and ($facture->getMonatantRestantTtc() > 0) ){
  3774.                         $prix += (float)str_replace(',','.',$facture->getMonatantRestantTtc());
  3775.                     }elseif ($facture->getIsAvoir() and ($facture->getMonatantRestantTtc() == 0)){
  3776.                     }
  3777.                     else{
  3778.                         $prix += (float)str_replace(',','.',$facture->getMonatantTtc());
  3779.                     }
  3780.                 }
  3781.             }
  3782.             return  $prix;
  3783.         }
  3784.         return 0 ;
  3785.     }
  3786.     public function getFacturesAvoirsProject($spvFactureAvoir=null,$date1=null,$date2=null){
  3787.         $factures = $this->em->getRepository(FactureFinance::class)->searchFacturePaiementAndValide($spvFactureAvoir,$date1,$date2);
  3788.         $arrayFactureAvoir = [];
  3789.         $h = 0;
  3790.         foreach($factures as $facture){
  3791.             $element  = 'Facture';
  3792.             $datePayementDate = null;
  3793.             $dateFacture  = $facture->getDateFacture() ? $facture->getDateFacture() : null;
  3794.             $mois  = $facture->getDateFacture() ? $facture->getDateFacture()->format("M-y") : '';
  3795.             $reference = (string)$facture->getNumeroFacture30Max();
  3796.             $societeFacture = $facture->getSpv()?$facture->getSpv()->getName():'';
  3797.             $fourniseur = $facture->getFournisseur()?$facture->getFournisseur()->getName():'';
  3798.             $motifHomogeneise = '';
  3799.             $typeDepense = $facture->getClassification();
  3800.             if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  3801.                 $totalEcheaceTtc = '/';
  3802.                 $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  3803.                 $strAvoir = '';
  3804.                 if($avoirs) {
  3805.                     foreach ($avoirs as $avoir) {
  3806.                         $strAvoir = $strAvoir.'n°'.$avoir->getAvoir()->getNumeroAvoir().' ';
  3807.                     }
  3808.                 }
  3809.                 $datePayement = 'Annulée par l\'avoir '.$strAvoir;
  3810.             }else{
  3811.                 $totalEcheaceTtc = $this->getEcheanceTtc($facture->getSpv()?$facture->getSpv()->getId():null,$facture->getDateValidation()?$facture->getDateValidation()->format('Y-m-d') : null);
  3812.                 $datePayement = null;
  3813.                if($facture->getDatePaiement()){
  3814.                    $datePayement = $facture->getDatePaiement()->format('d/m/Y')  ;
  3815.                    $datePayementDate = $facture->getDatePaiement();
  3816.                }else{
  3817.                    if($facture->getDateValidation()){
  3818.                        $datePayement = $facture->getDateValidation()->format('d/m/Y')  ;
  3819.                        $datePayementDate = $facture->getDateValidation() ;
  3820.                    }
  3821.                }
  3822.             }
  3823.             $totalFactureTtc = str_replace(',','.',$facture->getMonatantTtc());
  3824.             $lettrage = '';
  3825.             $payPar = $facture->getSpv()?$facture->getSpv()->getName():'';
  3826.             $moyenPayement = 'VIREMENT';
  3827.             if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  3828.                 $moyenPayement = 'AVOIR';
  3829.             }
  3830.             $arrayProject = [];
  3831.             $i = 0;
  3832.             if(count($facture->getProjectFactureFinance())>0){
  3833.                 foreach ($facture->getProjectFactureFinance() as $item){
  3834.                     $arrayProject[$i]['projetHomogeneise'] =  $item->getProject() ? $item->getProject()->getName() : '';
  3835.                     $arrayProject[$i]['projetMontantTtc'] = str_replace(',','.',$item->getMontantTtc());
  3836.                     $arrayProject[$i]['projetMontantHt'] = str_replace(',','.',$item->getMontantHt());
  3837.                     $arrayProject[$i]['projetMontantTva'] = str_replace(',','.','');
  3838.                     $i++;
  3839.                 }
  3840.             }else{
  3841.                 $arrayProject[$i]['projetHomogeneise'] = '';
  3842.                 $arrayProject[$i]['projetMontantTtc'] = '';
  3843.                 $arrayProject[$i]['projetMontantHt'] =  '';
  3844.                 $arrayProject[$i]['projetMontantTva'] =  '';
  3845.             }
  3846.             foreach ($arrayProject as $projectFactureAvoir){
  3847.                 $arrayFactureAvoir[$h]['element'] = $element;
  3848.                 $arrayFactureAvoir[$h]['mois'] = $mois;
  3849.                 $arrayFactureAvoir[$h]['dateFacture'] = $dateFacture;
  3850.                 $arrayFactureAvoir[$h]['reference'] = $reference;
  3851.                 $arrayFactureAvoir[$h]['societeFacture'] = $societeFacture;
  3852.                 $arrayFactureAvoir[$h]['fourniseur'] = $fourniseur;
  3853.                 $arrayFactureAvoir[$h]['projetHomogeneise'] = $projectFactureAvoir['projetHomogeneise'];
  3854.                 $arrayFactureAvoir[$h]['motifHomogeneise'] = $motifHomogeneise;
  3855.                 $arrayFactureAvoir[$h]['typeDepense'] = $typeDepense;
  3856.                 $arrayFactureAvoir[$h]['totalFactureTtc'] = $totalFactureTtc;
  3857.                 $arrayFactureAvoir[$h]['projetMontantTtc'] = $projectFactureAvoir['projetMontantTtc'] ;
  3858.                 $arrayFactureAvoir[$h]['projetMontantHt'] = $projectFactureAvoir['projetMontantHt'] ;
  3859.                 $arrayFactureAvoir[$h]['projetMontantTva'] = $projectFactureAvoir['projetMontantTva'] ;
  3860.                 $arrayFactureAvoir[$h]['totalEcheaceTtc'] = $totalEcheaceTtc;
  3861.                 $arrayFactureAvoir[$h]['lettrage'] = $lettrage;
  3862.                 $arrayFactureAvoir[$h]['datePayement'] = $datePayement;
  3863.                 $arrayFactureAvoir[$h]['datePayementDate'] = $datePayementDate;
  3864.                 $arrayFactureAvoir[$h]['payPar'] = $payPar;
  3865.                 $arrayFactureAvoir[$h]['moyenPayement'] = $moyenPayement;
  3866.                 $arrayFactureAvoir[$h]['dateValidation'] = $facture->getDateValidation() ? $facture->getDateValidation()->format('d/m/Y'):null;
  3867.                 $arrayFactureAvoir[$h]['facture_url'] = $facture->getFileFacture();
  3868.                 $h++;
  3869.             }
  3870.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  3871.             if($avoirs){
  3872.                 foreach ($avoirs as $avoir){
  3873.                     $fileAvoir = $avoir->getAvoir()->getFileAvoir();
  3874.                     $element  = 'Avoir';
  3875.                     $dateAvoir  = $avoir->getAvoir()->getDateAvoir() ? $avoir->getAvoir()->getDateAvoir() : null;
  3876.                     $mois  = $avoir->getAvoir()->getDateAvoir() ? $avoir->getAvoir()->getDateAvoir()->format("M-y") : '';
  3877.                     $reference = (string)$avoir->getAvoir()->getNumeroAvoir();
  3878.                     $fourniseur = $avoir->getAvoir()->getFournisseur()?$avoir->getAvoir()->getFournisseur()->getName():'';
  3879.                     $motifHomogeneise = '';
  3880.                     $typeDepense = $avoir->getAvoir()->getClassification();
  3881. //                    $avoirsFacture = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  3882. //                    if($avoirsFacture){
  3883. //                        $totalFactureTtc = str_replace(',','.',$avoirsFacture[0]->getMonatantAvoirTtc());
  3884. //                    }else{
  3885.                         $totalFactureTtc = str_replace(',','.',$avoir->getMonatantTtc());
  3886. //                    }
  3887.                     $datePayementDate = null;
  3888.                     $lettrage = '';
  3889.                     $payPar = $avoir->getAvoir()->getSpv()?$avoir->getAvoir()->getSpv()->getName():'';
  3890.                     $arrayProject = [];
  3891.                     if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  3892.                         $totalEcheaceTtc = '/';
  3893.                         $datePayement = 'Avoir sur la facture '.$facture->getNumeroFacture();
  3894.                     }else{
  3895.                         $totalEcheaceTtc = $this->getEcheanceTtc($facture->getSpv()?$facture->getSpv()->getId():null,$facture->getDateValidation()?$facture->getDateValidation()->format('Y-m-d') : null);
  3896.                         $datePayement = null;
  3897.                         if($facture->getDatePaiement()){
  3898.                             $datePayement = $facture->getDatePaiement()->format('d/m/Y')  ;
  3899.                             $datePayementDate = $facture->getDatePaiement() ;
  3900.                         }else{
  3901.                             if($facture->getDateValidation()){
  3902.                                 $datePayement = $facture->getDateValidation()->format('d/m/Y')  ;
  3903.                                 $datePayementDate = $facture->getDateValidation();
  3904.                             }
  3905.                         }
  3906.                     }
  3907.                     $i = 0;
  3908.                     if(count($avoir->getAvoir()->getProjectAvoir())>0){
  3909.                         foreach ($avoir->getAvoir()->getProjectAvoir() as $item){
  3910.                             $arrayProject[$i]['projetHomogeneise'] = $item->getProject() ? $item->getProject()->getName() : '';
  3911.                             $arrayProject[$i]['projetMontantTtc'] = str_replace(',','.',$item->getMontantTtc());
  3912.                             $arrayProject[$i]['projetMontantHt'] = str_replace(',','.',$item->getMontantHt());
  3913.                             $arrayProject[$i]['projetMontantTva'] = str_replace(',','.','');
  3914.                             $i++;
  3915.                         }
  3916.                     }else{
  3917.                         $arrayProject[$i]['projetHomogeneise'] = '';
  3918.                         $arrayProject[$i]['projetMontantTtc'] = '';
  3919.                         $arrayProject[$i]['projetMontantHt'] =  '';
  3920.                         $arrayProject[$i]['projetMontantTva'] =  '';
  3921.                     }
  3922.                     foreach ($arrayProject as $projectFactureAvoir){
  3923.                         $arrayFactureAvoir[$h]['element'] = $element;
  3924.                         $arrayFactureAvoir[$h]['mois'] = $mois;
  3925.                         $arrayFactureAvoir[$h]['dateFacture'] = $dateAvoir;
  3926.                         $arrayFactureAvoir[$h]['reference'] = $reference;
  3927.                         $arrayFactureAvoir[$h]['societeFacture'] = $societeFacture;
  3928.                         $arrayFactureAvoir[$h]['fourniseur'] = $fourniseur;
  3929.                         $arrayFactureAvoir[$h]['projetHomogeneise'] = $projectFactureAvoir['projetHomogeneise'];
  3930.                         $arrayFactureAvoir[$h]['motifHomogeneise'] = $motifHomogeneise;
  3931.                         $arrayFactureAvoir[$h]['typeDepense'] = $typeDepense;
  3932.                         $arrayFactureAvoir[$h]['totalFactureTtc'] = '-'.$totalFactureTtc;
  3933.                         $arrayFactureAvoir[$h]['projetMontantTtc'] = $projectFactureAvoir['projetMontantTtc'] ? '-'.$projectFactureAvoir['projetMontantTtc']: '' ;
  3934.                         $arrayFactureAvoir[$h]['projetMontantHt'] = $projectFactureAvoir['projetMontantHt'] ? '-'.$projectFactureAvoir['projetMontantHt']: '' ;
  3935.                         $arrayFactureAvoir[$h]['projetMontantTva'] = $projectFactureAvoir['projetMontantTva'] ? '-'.$projectFactureAvoir['projetMontantTva']: '' ;
  3936.                         $arrayFactureAvoir[$h]['totalEcheaceTtc'] = $totalEcheaceTtc;
  3937.                         $arrayFactureAvoir[$h]['lettrage'] = $lettrage;
  3938.                         $arrayFactureAvoir[$h]['datePayement'] = $datePayement;
  3939.                         $arrayFactureAvoir[$h]['datePayementDate'] = $datePayementDate;
  3940.                         $arrayFactureAvoir[$h]['payPar'] = $payPar;
  3941.                         $arrayFactureAvoir[$h]['moyenPayement'] = $moyenPayement;
  3942.                         $arrayFactureAvoir[$h]['dateValidation'] = $facture->getDateValidation() ? $facture->getDateValidation()->format('d/m/Y') : null;
  3943.                         $arrayFactureAvoir[$h]['facture_url'] = $fileAvoir;
  3944.                         $h++;
  3945.                     }
  3946.                 }
  3947.             }
  3948.         }
  3949.         return $arrayFactureAvoir;
  3950.     }
  3951.     /**
  3952.      * Pagination DataTable (serverSide) de la liste factures/avoirs par projet.
  3953.      * La source est le tableau construit par getFacturesAvoirsProject : la recherche,
  3954.      * le tri et la pagination sont appliqués en PHP sur ce tableau.
  3955.      * La valeur de sélection de chaque ligne est son index dans le tableau de base
  3956.      * (mêmes filtres SPV/dates), réutilisé par getFacturesAvoirsByRequestSelectAll.
  3957.      */
  3958.     public function paginateFactureAvoir($request){
  3959.         $length = $request->get('length');
  3960.         $length = ($length && $length != -1) ? (int) $length : 0;
  3961.         $start = (int) $request->get('start');
  3962.         $columns = $request->get('columns');
  3963.         $order = $request->get('order');
  3964.         $order = isset($order[0]) ? $order[0] : null;
  3965.         $search = $request->get('search');
  3966.         $query = trim((string) (isset($search['value']) ? $search['value'] : ''));
  3967.         $spvFactureAvoir = $request->get('spvFactureAvoir');
  3968.         $date1 = $request->get('date1FactureAvoir') ? \DateTime::createFromFormat('Y-m-d', $request->get('date1FactureAvoir')) : null;
  3969.         $date2 = $request->get('date2FactureAvoir') ? \DateTime::createFromFormat('Y-m-d', $request->get('date2FactureAvoir')) : null;
  3970.         $arrays = $this->getFacturesAvoirsProject($spvFactureAvoir, $date1, $date2);
  3971.         foreach ($arrays as $k => &$rowRef) {
  3972.             $rowRef['rowIndex'] = $k;
  3973.         }
  3974.         unset($rowRef);
  3975.         $recordsTotal = count($arrays);
  3976.         if ($query !== '') {
  3977.             $self = $this;
  3978.             $arrays = array_values(array_filter($arrays, function ($item) use ($self, $query) {
  3979.                 return $self->matchFactureAvoirQuery($item, $query);
  3980.             }));
  3981.         }
  3982.         $recordsFiltered = count($arrays);
  3983.         $columnName = null;
  3984.         $dirOrder = 'asc';
  3985.         if ($order && isset($columns[$order['column']]['data'])) {
  3986.             $columnName = $columns[$order['column']]['data'];
  3987.             $dirOrder = $order['dir'];
  3988.         }
  3989.         if ($columnName && !in_array($columnName, ['btnSelect', 'action'], true)) {
  3990.             $numericCols = ['totalFactureTtc', 'projetMontantTtc', 'projetMontantHt', 'projetMontantTva', 'totalEcheaceTtc'];
  3991.             usort($arrays, function ($a, $b) use ($columnName, $dirOrder, $numericCols) {
  3992.                 if ($columnName === 'dateFacture') {
  3993.                     $va = !empty($a['dateFacture']) ? $a['dateFacture']->getTimestamp() : 0;
  3994.                     $vb = !empty($b['dateFacture']) ? $b['dateFacture']->getTimestamp() : 0;
  3995.                     $cmp = $va <=> $vb;
  3996.                 } elseif ($columnName === 'datePayement') {
  3997.                     $va = !empty($a['datePayementDate']) ? $a['datePayementDate']->getTimestamp() : 0;
  3998.                     $vb = !empty($b['datePayementDate']) ? $b['datePayementDate']->getTimestamp() : 0;
  3999.                     $cmp = $va <=> $vb;
  4000.                 } elseif (in_array($columnName, $numericCols, true)) {
  4001.                     $cmp = (float) (isset($a[$columnName]) ? $a[$columnName] : 0) <=> (float) (isset($b[$columnName]) ? $b[$columnName] : 0);
  4002.                 } else {
  4003.                     $cmp = strcasecmp((string) (isset($a[$columnName]) ? $a[$columnName] : ''), (string) (isset($b[$columnName]) ? $b[$columnName] : ''));
  4004.                 }
  4005.                 return $dirOrder === 'desc' ? -$cmp : $cmp;
  4006.             });
  4007.         }
  4008.         $page = $length ? array_slice($arrays, $start, $length) : $arrays;
  4009.         $output = [
  4010.             'data' => [],
  4011.             'recordsFiltered' => $recordsFiltered,
  4012.             'recordsTotal' => $recordsTotal,
  4013.         ];
  4014.         foreach ($page as $item) {
  4015.             $output['data'][] = [
  4016.                 'responsive_id' => '',
  4017.                 'btnSelect' => '<input type="checkbox" class="selectFactureAvoirExtracted ml-1" value="' . $item['rowIndex'] . '" name="selectFactureAvoirExtracted[]">',
  4018.                 'element' => htmlspecialchars((string) $item['element']),
  4019.                 'mois' => htmlspecialchars((string) $item['mois']),
  4020.                 'dateFacture' => !empty($item['dateFacture']) ? $item['dateFacture']->format('d-m-Y') : '-',
  4021.                 'reference' => htmlspecialchars((string) $item['reference']),
  4022.                 'projetHomogeneise' => htmlspecialchars((string) $item['projetHomogeneise']),
  4023.                 'totalFactureTtc' => htmlspecialchars((string) $item['totalFactureTtc']),
  4024.                 'projetMontantTtc' => htmlspecialchars((string) $item['projetMontantTtc']),
  4025.                 'projetMontantHt' => htmlspecialchars((string) $item['projetMontantHt']),
  4026.                 'projetMontantTva' => htmlspecialchars((string) $item['projetMontantTva']),
  4027.                 'totalEcheaceTtc' => htmlspecialchars((string) $item['totalEcheaceTtc']),
  4028.                 'datePayement' => htmlspecialchars((string) $item['datePayement']),
  4029.                 'payPar' => htmlspecialchars((string) $item['payPar']),
  4030.                 'moyenPayement' => htmlspecialchars((string) $item['moyenPayement']),
  4031.                 'action' => '',
  4032.             ];
  4033.         }
  4034.         return $output;
  4035.     }
  4036.     /** Une ligne facture/avoir correspond-elle à la recherche libre du DataTable ? */
  4037.     public function matchFactureAvoirQuery(array $item, $query)
  4038.     {
  4039.         $cols = ['element', 'mois', 'reference', 'societeFacture', 'fourniseur', 'projetHomogeneise', 'typeDepense',
  4040.             'totalFactureTtc', 'projetMontantTtc', 'projetMontantHt', 'projetMontantTva', 'totalEcheaceTtc',
  4041.             'datePayement', 'payPar', 'moyenPayement'];
  4042.         foreach ($cols as $col) {
  4043.             if (isset($item[$col]) && $item[$col] !== null && stripos((string) $item[$col], $query) !== false) {
  4044.                 return true;
  4045.             }
  4046.         }
  4047.         if (!empty($item['dateFacture']) && $item['dateFacture'] instanceof \DateTimeInterface
  4048.             && strpos($item['dateFacture']->format('d-m-Y'), $query) !== false) {
  4049.             return true;
  4050.         }
  4051.         return false;
  4052.     }
  4053.     /**
  4054.      * Lignes factures/avoirs à extraire selon la requête :
  4055.      *  - selectedRows[] (indexes du tableau de base) -> uniquement ces lignes ;
  4056.      *  - sinon tout le tableau filtré (SPV/dates + recherche libre éventuelle).
  4057.      */
  4058.     public function getFacturesAvoirsByRequestSelectAll($request)
  4059.     {
  4060.         $spvFactureAvoir = $request->get('spvFactureAvoir');
  4061.         $date1 = $request->get('date1FactureAvoir') ? \DateTime::createFromFormat('Y-m-d', $request->get('date1FactureAvoir')) : null;
  4062.         $date2 = $request->get('date2FactureAvoir') ? \DateTime::createFromFormat('Y-m-d', $request->get('date2FactureAvoir')) : null;
  4063.         $arrays = $this->getFacturesAvoirsProject($spvFactureAvoir, $date1, $date2);
  4064.         $selectedRows = $request->get('selectedRows');
  4065.         if (is_array($selectedRows) && count($selectedRows) > 0) {
  4066.             $selected = [];
  4067.             foreach ($selectedRows as $idx) {
  4068.                 if (isset($arrays[(int) $idx])) {
  4069.                     $selected[] = $arrays[(int) $idx];
  4070.                 }
  4071.             }
  4072.             return $selected;
  4073.         }
  4074.         $search = $request->get('search');
  4075.         $query = trim((string) (isset($search['value']) ? $search['value'] : ''));
  4076.         if ($query !== '') {
  4077.             $self = $this;
  4078.             $arrays = array_values(array_filter($arrays, function ($item) use ($self, $query) {
  4079.                 return $self->matchFactureAvoirQuery($item, $query);
  4080.             }));
  4081.         }
  4082.         return $arrays;
  4083.     }
  4084.     public function importDatePaiement($filename)
  4085.     {
  4086.         $file = $this->params->get('uploads_directory')."/".$filename;
  4087.         $array = [];
  4088.         $f = fopen($file, "r");
  4089.         $flag = true;
  4090.         $i = 0;
  4091.         $header = [];
  4092.         while (($line = fgetcsv($f,0,";")) !== false) {
  4093.             if($flag) {
  4094.                 $header = [];
  4095.                 foreach ($line as $cell) {
  4096.                     $header[] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  4097.                 }
  4098.                 $flag = false;
  4099.                 continue;
  4100.             }
  4101.             foreach ($line as $key => $cell) {
  4102.                 $array[$i][$header[$key]] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  4103.             }
  4104.             $i++ ;
  4105.         }
  4106.         fclose($f);
  4107.         foreach ($array as &$item){
  4108.             if(isset($item['NUM DE FACTURE'])){
  4109.                 $numFacture = trim($item['NUM DE FACTURE']);
  4110.                 $nameFournisseur = trim($item['FOURNISSEUR']);
  4111.                 $fournisseur = $this->em->getRepository(Fournisseur::class)->findOneBy(['name'=>$nameFournisseur]);
  4112.                 if($fournisseur) {
  4113.                     $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['numeroFacture' => $numFacture, 'fournisseur' => $fournisseur->getId()]);
  4114.                     if ($facture) {
  4115.                         if (isset($item['DATE DE PAIEMENT']) && !empty($item['DATE DE PAIEMENT'])) {
  4116.                             $dateStr = trim($item['DATE DE PAIEMENT']);
  4117.                             $dateStrTab = explode("/", $dateStr);
  4118.                             if (isset($dateStrTab[2]) && strlen($dateStrTab[2]) == 2) {
  4119.                                 $date = \DateTime::createFromFormat('d/m/y', $item['DATE DE PAIEMENT']);
  4120.                             } else {
  4121.                                 $date = \DateTime::createFromFormat('d/m/Y', $item['DATE DE PAIEMENT']);
  4122.                             }
  4123.                             if ($date) {
  4124.                                 $facture->setDatePaiement($date);
  4125.                             }
  4126.                         }
  4127.                         $this->em->persist($facture);
  4128.                         $this->em->flush();
  4129.                         $item['action'] = 1;
  4130.                     }
  4131.                 }else{
  4132.                     $item['action'] = 0;
  4133.                 }
  4134.             }else{
  4135.                 $item['action'] = 0;
  4136.             }
  4137.         }
  4138.         return ['headerTab' => $header,'bodyTab'=>$array];
  4139.     }
  4140.     public function addComment($request,$user)
  4141.     {
  4142.         $comment = $request->get('comment');
  4143.         $token = $request->get('token');
  4144.         if($comment and $token){
  4145.             $factureFinance = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  4146.             if($factureFinance && $user){
  4147.                 $commentEntity = new CommentFactureFinance();
  4148.                 $commentEntity->setFactureFinance($factureFinance);
  4149.                 $commentEntity->setUser($user);
  4150.                 $commentEntity->setComment($comment);
  4151.                 $this->em->persist($commentEntity);
  4152.                 $this->em->flush();
  4153.                 return [
  4154.                     'commentEntity' => $commentEntity,
  4155.                     'success' => true
  4156.                 ];
  4157.             }
  4158.         }
  4159.         return [
  4160.             'success' => false
  4161.         ];
  4162.     }
  4163.     public function extractFacturesPdf($factures,$request){
  4164.         if($factures){
  4165.             $zip = new \ZipArchive();
  4166.             $zipfile = $this->params->get('zips_directory') . '/factures-pdf.zip';
  4167.             if (file_exists($zipfile)) unlink($zipfile);
  4168.             if ($zip->open($zipfile, \ZipArchive::CREATE) === TRUE) {
  4169.                 foreach ($factures as $facture) {
  4170.                     if ($facture->getFileFacture()) {
  4171.                         $token = $facture->getFileFacture()->getToken();
  4172.                         $file = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $token]);
  4173.                         $filePath = $this->params->get('uploads_directory') . "/" . $file->getPath();
  4174.                         $name = $file->getNomenclature() ? str_replace('/','-',$file->getNomenclature()) : $file->getName();
  4175.                         $zip->addFile($filePath, $name);
  4176.                     }
  4177.                 }
  4178.                 $zip->close();
  4179.                 return $zipfile;
  4180.             }
  4181.         }
  4182.         return false;
  4183.     }
  4184.     public function updateStatusValidePaye()
  4185.     {
  4186.         $factures = $this->em->getRepository(FactureFinance::class)->getFacturesValide();
  4187.         if($factures) {
  4188.             foreach ($factures as $facture){
  4189.                 if($facture->getDatePaiement()){
  4190.                     $facture->setStatus(FactureFinance::STATUS_DATE_PAIEMENT_PAYER);
  4191.                     $this->em->persist($facture);
  4192.                     $this->em->flush();
  4193.                 }
  4194.             }
  4195.         }
  4196.     }
  4197.     public function addFactureBrouillon($array){
  4198.         $tab = [];
  4199.         if($array){
  4200.             foreach ($array as $item){
  4201.                 $tokenFile = $item['tokenFile'];
  4202.                 $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  4203.                 if($docUpload){
  4204.                     $factureBrouillon = new FactureFinanceBrouillon();
  4205.                     $factureBrouillon->setFileFacture($docUpload);
  4206.                     $this->em->persist($factureBrouillon);
  4207.                     $this->em->flush();
  4208.                     $this->factureImportApi($factureBrouillon);
  4209.                     $tab[] = $factureBrouillon->getToken();
  4210.                 }
  4211.             }
  4212.         }
  4213.         return $tab;
  4214.     }
  4215.     public function addFactureBrouillonCsv($array){
  4216.         $tab = [];
  4217.         if($array){
  4218.             foreach ($array as $item){
  4219.                 $tokenFile = $item['tokenFile'];
  4220.                 $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  4221.                 if($docUpload){
  4222.                     $array = $this->getCsvRowsFromDocUpload($docUpload);
  4223.                      foreach ($array as $item){
  4224.                          $numFacture = isset($item["Numéro facture"]) ? $item["Numéro facture"] : null;
  4225.                          $spvName = isset($item['Société']) ? $item['Société'] : null;
  4226.                          $fournisseurName = isset($item['Nom fournisseur']) ? $item['Nom fournisseur'] : null;
  4227.                          $dateCreationFacture = isset($item['Date réception']) ? $item['Date réception'] : null;
  4228.                          $montantHt = isset($item['Montant HT']) ? $item['Montant HT'] : 0;
  4229.                          $montantTtc = isset($item['Montant TTC']) ? $item['Montant TTC'] : 0;
  4230.                          $montantTva = isset($item['Montant TVA']) ? $item['Montant TVA'] : null;
  4231.                          $tauxTva = isset($item['Taux TVA']) ? $item['Taux TVA'] : null;
  4232.                          $dateEcheance = isset($item['Date échéance']) ? $item['Date échéance'] : null;
  4233.                          $dateEmissionFacture = isset($item['Date facture']) ? $item['Date facture'] : null;
  4234.                          $commantaire = isset($item['Commentaires']) ? $item['Commentaires'] : null;
  4235.                          if($numFacture){
  4236.                              $factureBrouillon = new FactureFinanceBrouillon();
  4237.                              $factureBrouillon->setNumeroFacture($numFacture);
  4238.                              if($dateCreationFacture){
  4239.                                  $dateCreationFactureObject = \DateTime::createFromFormat('d/m/Y', $dateCreationFacture );
  4240.                                  $factureBrouillon->setCreatedAt($dateCreationFactureObject);
  4241.                              }
  4242.                              if($dateEcheance){
  4243.                                  $dateEcheanceObject = \DateTime::createFromFormat('d/m/Y', $dateEcheance );
  4244.                                  $factureBrouillon->setDelaiPaiementDate($dateEcheanceObject);
  4245.                                  if($dateCreationFacture){
  4246.                                      $dateCreationFactureObject = \DateTime::createFromFormat('d/m/Y', $dateCreationFacture );
  4247.                                      $interval = $dateCreationFactureObject->diff($dateEcheanceObject);
  4248.                                      $factureBrouillon->setDelaiPaiement((int)$interval->format("%a"));
  4249.                                  }
  4250.                              }
  4251.                              if($dateEmissionFacture){
  4252.                                  $dateEmissionFactureObject = \DateTime::createFromFormat('d/m/Y', $dateEmissionFacture );
  4253.                                  $factureBrouillon->setDateFacture($dateEmissionFactureObject);
  4254.                              }
  4255.                              $factureBrouillon->setTauxTva(($tauxTva !== null && $tauxTva !== '') ? $tauxTva : 20);
  4256.                              $factureBrouillon->setMonatantHt($montantHt);
  4257.                              $factureBrouillon->setMonatantTtc($montantTtc);
  4258.                              if($montantTva !== null && $montantTva !== ''){
  4259.                                  $factureBrouillon->setTva((float)str_replace(',', '.', $montantTva));
  4260.                              }else{
  4261.                                  $factureBrouillon->setTva((float)str_replace(',', '.', $montantTtc) - (float)str_replace(',', '.', $montantHt));
  4262.                              }
  4263.                              if($spvName){
  4264.                                  $spv = $this->em->getRepository(Spv::class)->findOneBy(['name' => $spvName]);
  4265.                                  if($spv){
  4266.                                      $factureBrouillon->setSpv($spv);
  4267.                                  }
  4268.                              }
  4269.                              if ($fournisseurName) {
  4270.                                  $fournisseur = $this->em->getRepository(Fournisseur::class)->findOneBy(['name' => $fournisseurName]);
  4271.                                  if($fournisseur){
  4272.                                      $factureBrouillon->setFournisseur($fournisseur);
  4273.                                  }
  4274.                              }
  4275.                              if($commantaire){
  4276.                                  $factureBrouillon->setCommentaire($commantaire);
  4277.                              }
  4278.                              $this->em->persist($factureBrouillon);
  4279.                              $this->em->flush();
  4280.                              $tab[] = $factureBrouillon->getToken();
  4281.                          }
  4282.                      }
  4283.                 }
  4284.             }
  4285.         }
  4286.         return $tab;
  4287.     }
  4288.     public function getCsvRowsFromDocUpload(DocUpload $docUpload): array
  4289.     {
  4290.         $file = $this->params->get('uploads_directory')."/".$docUpload->getPath();
  4291.         if(strpos($docUpload->getPath(), '.xlsx')){
  4292.             $spreadsheet = IOFactory::load($file);
  4293.             $writer = new Csv($spreadsheet);
  4294.             $writer->setDelimiter(';');
  4295.             $writer->setEnclosure('"');
  4296.             $writer->setSheetIndex(0);
  4297.             $fileCsv = str_replace('.xlsx','.csv',$file);
  4298.             $writer->save($fileCsv);
  4299.             $file = $fileCsv;
  4300.         }
  4301.         $array = [];
  4302.         $f = fopen($file, "r");
  4303.         $flag = true;
  4304.         $i = 0;
  4305.         $header = [];
  4306.         while (($line = fgetcsv($f,0,";")) !== false) {
  4307.             if($flag) {
  4308.                 $header = [];
  4309.                 foreach ($line as $key1 => $cell) {
  4310.                     $cell = str_replace("\xEF\xBB\xBF", '', $cell);
  4311.                     $header[] =  str_replace('"','',$this->convertCellUtf8(trim($cell)));
  4312.                 }
  4313.                 $flag = false;
  4314.                 continue;
  4315.             }
  4316.             foreach ($line as $key => $cell) {
  4317.                 $array[$i][$header[$key]]=  $this->convertCellUtf8(trim($cell));
  4318.             }
  4319.             $i++ ;
  4320.         }
  4321.         fclose($f);
  4322.         return $array;
  4323.     }
  4324.     public function parseCsvFactureFinanceRows(DocUpload $docUpload): array
  4325.     {
  4326.         $rows = [];
  4327.         $seen = [];
  4328.         foreach ($this->getCsvRowsFromDocUpload($docUpload) as $index => $item){
  4329.             if(!array_filter($item, function($v){ return $v !== null && $v !== ''; })){
  4330.                 continue;
  4331.             }
  4332.             $numFacture = isset($item["Numéro facture"]) ? $item["Numéro facture"] : null;
  4333.             $spvName = isset($item['Société']) ? $item['Société'] : null;
  4334.             $fournisseurName = isset($item['Nom fournisseur']) ? $item['Nom fournisseur'] : null;
  4335.             $dateReception = isset($item['Date réception']) ? $item['Date réception'] : null;
  4336.             $montantHt = isset($item['Montant HT']) ? $item['Montant HT'] : 0;
  4337.             $montantTtc = isset($item['Montant TTC']) ? $item['Montant TTC'] : 0;
  4338.             $montantTva = isset($item['Montant TVA']) ? $item['Montant TVA'] : null;
  4339.             $tauxTva = isset($item['Taux TVA']) ? $item['Taux TVA'] : null;
  4340.             $dateEcheance = isset($item['Date échéance']) ? $item['Date échéance'] : null;
  4341.             $dateEmissionFacture = isset($item['Date facture']) ? $item['Date facture'] : null;
  4342.             $commantaire = isset($item['Commentaires']) ? $item['Commentaires'] : null;
  4343.             $errors = [];
  4344.             $spv = null;
  4345.             $fournisseur = null;
  4346.             if(!$numFacture){
  4347.                 $errors[] = 'Numéro de facture manquant';
  4348.             }
  4349.             if($spvName){
  4350.                 $spv = $this->em->getRepository(Spv::class)->findOneBy(['name' => $spvName]);
  4351.             }
  4352.             if(!$spv){
  4353.                 $errors[] = $spvName ? 'Société "'.$spvName.'" introuvable' : 'Société manquante';
  4354.             }
  4355.             if($fournisseurName){
  4356.                 $fournisseur = $this->em->getRepository(Fournisseur::class)->findOneBy(['name' => $fournisseurName]);
  4357.             }
  4358.             if(!$fournisseur){
  4359.                 $errors[] = $fournisseurName ? 'Fournisseur "'.$fournisseurName.'" introuvable' : 'Fournisseur manquant';
  4360.             }
  4361.             $dateReceptionObject = null;
  4362.             if($dateReception){
  4363.                 $dateReceptionObject = \DateTime::createFromFormat('d/m/Y', $dateReception);
  4364.                 if(!$dateReceptionObject){
  4365.                     $errors[] = 'Date réception invalide "'.$dateReception.'"';
  4366.                 }
  4367.             }
  4368.             $dateEcheanceObject = null;
  4369.             if($dateEcheance){
  4370.                 $dateEcheanceObject = \DateTime::createFromFormat('d/m/Y', $dateEcheance);
  4371.                 if(!$dateEcheanceObject){
  4372.                     $errors[] = 'Date échéance invalide "'.$dateEcheance.'"';
  4373.                 }
  4374.             }
  4375.             $dateEmissionFactureObject = null;
  4376.             if($dateEmissionFacture){
  4377.                 $dateEmissionFactureObject = \DateTime::createFromFormat('d/m/Y', $dateEmissionFacture);
  4378.                 if(!$dateEmissionFactureObject){
  4379.                     $errors[] = 'Date facture invalide "'.$dateEmissionFacture.'"';
  4380.                 }
  4381.             }
  4382.             if($numFacture && $fournisseur){
  4383.                 $factureFinanceOld = $this->em->getRepository(FactureFinance::class)->findOneBy(['numeroFacture' => $numFacture, 'fournisseur' => $fournisseur]);
  4384.                 if($factureFinanceOld){
  4385.                     $errors[] = 'Une facture avec ce numéro existe déjà pour ce fournisseur';
  4386.                 }
  4387.                 $keySeen = $numFacture.'|'.$fournisseur->getId();
  4388.                 if(isset($seen[$keySeen])){
  4389.                     $errors[] = 'Doublon dans le fichier (ligne '.$seen[$keySeen].')';
  4390.                 }else{
  4391.                     $seen[$keySeen] = $index + 2;
  4392.                 }
  4393.             }
  4394.             $rows[] = [
  4395.                 'index' => $index,
  4396.                 'line' => $index + 2,
  4397.                 'numeroFacture' => $numFacture,
  4398.                 'spvName' => $spvName,
  4399.                 'spv' => $spv,
  4400.                 'fournisseurName' => $fournisseurName,
  4401.                 'fournisseur' => $fournisseur,
  4402.                 'dateReception' => $dateReceptionObject ?: null,
  4403.                 'dateEcheance' => $dateEcheanceObject ?: null,
  4404.                 'dateFacture' => $dateEmissionFactureObject ?: null,
  4405.                 'montantHt' => $montantHt,
  4406.                 'montantTtc' => $montantTtc,
  4407.                 'montantTva' => $montantTva,
  4408.                 'tauxTva' => $tauxTva,
  4409.                 'commentaire' => $commantaire,
  4410.                 'errors' => $errors,
  4411.             ];
  4412.         }
  4413.         return $rows;
  4414.     }
  4415.     public function importFacturesFinanceCsv($tokenCsv, $pdfTokens, $user): array
  4416.     {
  4417.         $result = ['imported' => 0, 'skipped' => []];
  4418.         $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenCsv]);
  4419.         if(!$docUpload){
  4420.             $result['error'] = 'Fichier à importer introuvable';
  4421.             return $result;
  4422.         }
  4423.         $rows = $this->parseCsvFactureFinanceRows($docUpload);
  4424.         $usedPdfTokens = [];
  4425.         foreach ($rows as $row){
  4426.             if(count($row['errors']) > 0){
  4427.                 $result['skipped'][] = ['line' => $row['line'], 'numeroFacture' => $row['numeroFacture'], 'reason' => implode(' / ', $row['errors'])];
  4428.                 continue;
  4429.             }
  4430.             $pdfToken = isset($pdfTokens[$row['index']]) ? $pdfTokens[$row['index']] : null;
  4431.             $fileFacture = null;
  4432.             if($pdfToken && !in_array($pdfToken, $usedPdfTokens)){
  4433.                 $fileFacture = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $pdfToken]);
  4434.             }
  4435.             if(!$fileFacture){
  4436.                 $result['skipped'][] = ['line' => $row['line'], 'numeroFacture' => $row['numeroFacture'], 'reason' => 'PDF de la facture manquant'];
  4437.                 continue;
  4438.             }
  4439.             $usedPdfTokens[] = $pdfToken;
  4440.             $facture = new FactureFinance();
  4441.             $facture->setNumeroFacture($row['numeroFacture']);
  4442.             if($row['dateReception']){
  4443.                 $facture->setCreatedAt($row['dateReception']);
  4444.             }
  4445.             if($row['dateEcheance']){
  4446.                 $facture->setDelaiPaiementDate($row['dateEcheance']);
  4447.                 if($row['dateReception']){
  4448.                     $interval = $row['dateReception']->diff($row['dateEcheance']);
  4449.                     $facture->setDelaiPaiement((int)$interval->format("%a"));
  4450.                 }
  4451.             }
  4452.             if($row['dateFacture']){
  4453.                 $facture->setDateFacture($row['dateFacture']);
  4454.             }
  4455.             $facture->setTauxTva(($row['tauxTva'] !== null && $row['tauxTva'] !== '') ? $row['tauxTva'] : 20);
  4456.             $facture->setMonatantHt($row['montantHt']);
  4457.             $facture->setMonatantTtc($row['montantTtc']);
  4458.             if($row['montantTva'] !== null && $row['montantTva'] !== ''){
  4459.                 $facture->setTva((float)str_replace(',', '.', $row['montantTva']));
  4460.             }else{
  4461.                 $facture->setTva((float)str_replace(',', '.', $row['montantTtc']) - (float)str_replace(',', '.', $row['montantHt']));
  4462.             }
  4463.             $facture->setSpv($row['spv']);
  4464.             $facture->setFournisseur($row['fournisseur']);
  4465.             $facture->setCategory('Facture');
  4466.             $facture->setUserCreated($user);
  4467.             $facture->setStatus(FactureFinance::STATUS_EN_ATTENT_VALIDATION);
  4468.             $this->getNomenclature($facture, $fileFacture);
  4469.             $facture->setFileFacture($fileFacture);
  4470.             $this->em->persist($facture);
  4471.             $this->em->flush();
  4472.             $this->notification->setCompteurErpiPiece($facture);
  4473.             $this->notification->setCompteurErpiEcriture($facture);
  4474.             if($row['commentaire']){
  4475.                 $commentFactureFinance = new CommentFactureFinance();
  4476.                 $commentFactureFinance->setFactureFinance($facture);
  4477.                 $commentFactureFinance->setComment($row['commentaire']);
  4478.                 $commentFactureFinance->setUser($user);
  4479.                 $this->em->persist($commentFactureFinance);
  4480.                 $this->em->flush();
  4481.             }
  4482.             $this->historyService->addHistoryFactureAvoir($user, 'Création de la facture', null, $facture);
  4483.             $result['imported']++;
  4484.         }
  4485.         return $result;
  4486.     }
  4487.     /**
  4488.      * Convertit une cellule CSV en UTF-8. Les fichiers enregistrés par Excel en
  4489.      * « CSV (séparateur : point-virgule) » sont en Windows-1252 et non en UTF-8 :
  4490.      * mb_convert_encoding avec 'auto' ne détecte pas cet encodage (accents perdus).
  4491.      */
  4492.     private function convertCellUtf8($cell)
  4493.     {
  4494.         if (mb_check_encoding($cell, 'UTF-8')) {
  4495.             return $cell;
  4496.         }
  4497.         return mb_convert_encoding($cell, 'UTF-8', 'Windows-1252');
  4498.     }
  4499.     public function getFactureBrouillonByToken($array){
  4500.         $facturesBrouillon = [];
  4501.         if($array){
  4502.             $facturesBrouillon = $this->em->getRepository(FactureFinanceBrouillon::class)->findByTokens($array);
  4503.         }
  4504.         return $facturesBrouillon;
  4505.     }
  4506.     public function factureImportApi($factureFinanceBrouillon){
  4507.         $facturePdf = $factureFinanceBrouillon->getFileFacture();
  4508.         if($facturePdf){
  4509.             $mindeeClient = new Client(self::API_KEY_MINDEE);
  4510.             $inputSource = $mindeeClient->sourceFromPath($this->params->get('uploads_directory').'/'.$facturePdf->getPath());
  4511.             $apiResponse = $mindeeClient->parse(InvoiceV4::class, $inputSource);
  4512.             if($apiResponse->document && $apiResponse->document->inference && $apiResponse->document->inference->prediction){
  4513.                 try {
  4514.                     $spvName = $apiResponse->document->inference->prediction->customerName->value;
  4515.                     $factureDate = ($apiResponse->document->inference->prediction->date and $apiResponse->document->inference->prediction->date->value and property_exists($apiResponse->document->inference->prediction->date, 'dateObject')) ? $apiResponse->document->inference->prediction->date->dateObject : null;
  4516.                     $factureNumber = $apiResponse->document->inference->prediction->invoiceNumber->value;
  4517.                     $fournisseurName = $apiResponse->document->inference->prediction->supplierName->value;
  4518.                     $prixTtc = $apiResponse->document->inference->prediction->totalAmount->value;
  4519.                     $prixHt = $apiResponse->document->inference->prediction->totalNet->value;
  4520.                     $prixTva = $apiResponse->document->inference->prediction->totalTax->value;
  4521.                     $tva =
  4522.                     $siretFournisseur = null;
  4523.                     $sirenFournisseur = null;
  4524.                     if ($apiResponse->document->inference->prediction->supplierCompanyRegistrations) {
  4525.                         foreach ($apiResponse->document->inference->prediction->supplierCompanyRegistrations as $item) {
  4526.                             if ($item->type == 'SIREN') {
  4527.                                 $sirenFournisseur = $item->value;
  4528.                             }
  4529.                             if ($item->type == 'SIRET') {
  4530.                                 $siretFournisseur = $item->value;
  4531.                             }
  4532.                         }
  4533.                     }
  4534.                     $spv = null;
  4535.                     if ($spvName) {
  4536.                         $spv = $this->em->getRepository(Spv::class)->findOneBy(['name' => str_replace('SOCIÉTÉ ', '', $spvName)]);
  4537.                     }
  4538.                     $fourniseur = null;
  4539.                     if ($fournisseurName || $sirenFournisseur || $siretFournisseur) {
  4540.                         $fournisseurByName = null;
  4541.                         $fournisseurBySiren = null;
  4542.                         $fournisseurBySiret = null;
  4543.                         if ($fournisseurName) {
  4544.                             $fournisseurByName = $this->em->getRepository(Fournisseur::class)->findOneBy(['name' => $fournisseurName]);
  4545.                         }
  4546.                         if ($sirenFournisseur) {
  4547.                             $fournisseurBySiren = $this->em->getRepository(Fournisseur::class)->findOneBy(['siren' => number_format($sirenFournisseur, 0, ' ', ' ')]);
  4548.                         }
  4549.                         if ($siretFournisseur) {
  4550.                             $fournisseurBySiret = $this->em->getRepository(Fournisseur::class)->findOneBy(['siret' => number_format($siretFournisseur, 0, ' ', ' ')]);
  4551.                         }
  4552.                         if ($fournisseurByName) {
  4553.                             $fourniseur = $fournisseurByName;
  4554.                         } elseif ($fournisseurBySiren) {
  4555.                             $fourniseur = $fournisseurBySiren;
  4556.                         } elseif ($fournisseurBySiret) {
  4557.                             $fourniseur = $fournisseurBySiret;
  4558.                         }
  4559.                     }
  4560.                     $factureFinanceBrouillon->setNumeroFacture($factureNumber);
  4561.                     if ($spv) {
  4562.                         $factureFinanceBrouillon->setSpv($spv);
  4563.                     }
  4564.                     if ($fourniseur) {
  4565.                         $factureFinanceBrouillon->setFournisseur($fourniseur);
  4566.                     }
  4567.                     if ($factureDate) {
  4568.                         $factureFinanceBrouillon->setDateFacture($factureDate);
  4569.                     }
  4570.                     $factureFinanceBrouillon->setMonatantHt($prixHt);
  4571.                     $factureFinanceBrouillon->setTva((float)$prixTtc - (float)$prixHt);
  4572.                     $factureFinanceBrouillon->setMonatantTtc($prixTtc);
  4573.                     $factureFinanceBrouillon->setTauxTva(20);
  4574.                     $this->em->persist($factureFinanceBrouillon);
  4575.                     $this->em->flush();
  4576.                     if($factureFinanceBrouillon->getFileFacture()){
  4577.                         $this->getNomenclature($factureFinanceBrouillon,$factureFinanceBrouillon->getFileFacture());
  4578.                     }
  4579.                 }catch (\Exception $e){
  4580.                     return false;
  4581.                 }
  4582.             }
  4583.         }
  4584.     }
  4585.     public function getFacturesAvoirsProjectCommande(){
  4586.         $factures = $this->em->getRepository(FactureFinance::class)->searchFacturePaiementCommande();
  4587.         $arrayFactureAvoir = [];
  4588.         $h = 0;
  4589.         foreach($factures as $facture){
  4590.             $element  = 'Facture';
  4591.             $dateFacture  = $facture->getDateFacture() ? $facture->getDateFacture() : null;
  4592.             $mois  = $facture->getDateFacture() ? $facture->getDateFacture()->format("M-y") : '';
  4593.             $reference = (string)$facture->getNumeroFacture30Max();
  4594.             $societeFacture = $facture->getSpv()?$facture->getSpv()->getName():'';
  4595.             $fourniseur = $facture->getFournisseur()?$facture->getFournisseur()->getName():'';
  4596.             $motifHomogeneise = '';
  4597.             $typeDepense = $facture->getClassification();
  4598.             if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  4599.                 $totalEcheaceTtc = '/';
  4600.                 $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  4601.                 $strAvoir = '';
  4602.                 if($avoirs) {
  4603.                     foreach ($avoirs as $avoir) {
  4604.                         $strAvoir = $strAvoir.'n°'.$avoir->getAvoir()->getNumeroAvoir().' ';
  4605.                     }
  4606.                 }
  4607.                 $datePayement = 'Annulée par l\'avoir '.$strAvoir;
  4608.             }else{
  4609.                 $totalEcheaceTtc = $this->getEcheanceTtc($facture->getSpv()?$facture->getSpv()->getId():null,$facture->getDateValidation()?$facture->getDateValidation()->format('Y-m-d') : null);
  4610.                 $datePayement = null;
  4611.                 if($facture->getDatePaiement()){
  4612.                     $datePayement = $facture->getDatePaiement()->format('d/m/Y')  ;
  4613.                 }else{
  4614.                     if($facture->getDateValidation()){
  4615.                         $datePayement = $facture->getDateValidation()->format('d/m/Y')  ;
  4616.                     }
  4617.                 }
  4618.             }
  4619.             $totalFactureTtc = str_replace(',','.',$facture->getMonatantTtc());
  4620.             $lettrage = '';
  4621.             $payPar = $facture->getSpv()?$facture->getSpv()->getName():'';
  4622.             $moyenPayement = 'VIREMENT';
  4623.             if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  4624.                 $moyenPayement = 'AVOIR';
  4625.             }
  4626.             $arrayProject = [];
  4627.             $i = 0;
  4628.             if(count($facture->getProjectFactureFinance())>0){
  4629.                 foreach ($facture->getProjectFactureFinance() as $item){
  4630.                     $arrayProject[$i]['projetHomogeneise'] =  $item->getProject() ? $item->getProject()->getName() : '';
  4631.                     $arrayProject[$i]['projetMontantTtc'] = str_replace(',','.',$item->getMontantTtc());
  4632.                     $arrayProject[$i]['projetMontantHt'] = str_replace(',','.',$item->getMontantHt());
  4633.                     $arrayProject[$i]['projetMontantTva'] = str_replace(',','.','');
  4634.                     $i++;
  4635.                 }
  4636.             }else{
  4637.                 $arrayProject[$i]['projetHomogeneise'] = '';
  4638.                 $arrayProject[$i]['projetMontantTtc'] = '';
  4639.                 $arrayProject[$i]['projetMontantHt'] =  '';
  4640.                 $arrayProject[$i]['projetMontantTva'] =  '';
  4641.             }
  4642.             foreach ($arrayProject as $projectFactureAvoir){
  4643.                 $arrayFactureAvoir[$h]['element'] = $element;
  4644.                 $arrayFactureAvoir[$h]['mois'] = $mois;
  4645.                 $arrayFactureAvoir[$h]['dateFacture'] = $dateFacture;
  4646.                 $arrayFactureAvoir[$h]['reference'] = $reference;
  4647.                 $arrayFactureAvoir[$h]['societeFacture'] = $societeFacture;
  4648.                 $arrayFactureAvoir[$h]['fourniseur'] = $fourniseur;
  4649.                 $arrayFactureAvoir[$h]['projetHomogeneise'] = $projectFactureAvoir['projetHomogeneise'];
  4650.                 $arrayFactureAvoir[$h]['motifHomogeneise'] = $motifHomogeneise;
  4651.                 $arrayFactureAvoir[$h]['typeDepense'] = $typeDepense;
  4652.                 $arrayFactureAvoir[$h]['totalFactureTtc'] = $totalFactureTtc;
  4653.                 $arrayFactureAvoir[$h]['projetMontantTtc'] = $projectFactureAvoir['projetMontantTtc'] ;
  4654.                 $arrayFactureAvoir[$h]['projetMontantHt'] = $projectFactureAvoir['projetMontantHt'] ;
  4655.                 $arrayFactureAvoir[$h]['projetMontantTva'] = $projectFactureAvoir['projetMontantTva'] ;
  4656.                 $arrayFactureAvoir[$h]['totalEcheaceTtc'] = $totalEcheaceTtc;
  4657.                 $arrayFactureAvoir[$h]['lettrage'] = $lettrage;
  4658.                 $arrayFactureAvoir[$h]['datePayement'] = $datePayement;
  4659.                 $arrayFactureAvoir[$h]['payPar'] = $payPar;
  4660.                 $arrayFactureAvoir[$h]['moyenPayement'] = $moyenPayement;
  4661.                 $arrayFactureAvoir[$h]['dateValidation'] = $facture->getDateValidation() ? $facture->getDateValidation()->format('d/m/Y'):null;
  4662.                 $arrayFactureAvoir[$h]['facture_url'] = $facture->getFileFacture();
  4663.                 $h++;
  4664.             }
  4665.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  4666.             if($avoirs){
  4667.                 foreach ($avoirs as $avoir){
  4668.                     $fileAvoir = $avoir->getAvoir()->getFileAvoir();
  4669.                     $element  = 'Avoir';
  4670.                     $dateAvoir  = $avoir->getAvoir()->getDateAvoir() ? $avoir->getAvoir()->getDateAvoir() : null;
  4671.                     $mois  = $avoir->getAvoir()->getDateAvoir() ? $avoir->getAvoir()->getDateAvoir()->format("M-y") : '';
  4672.                     $reference = (string)$avoir->getAvoir()->getNumeroAvoir();
  4673.                     $fourniseur = $avoir->getAvoir()->getFournisseur()?$avoir->getAvoir()->getFournisseur()->getName():'';
  4674.                     $motifHomogeneise = '';
  4675.                     $typeDepense = '';
  4676. //                    $avoirsFacture = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  4677. //                    if($avoirsFacture){
  4678. //                        $totalFactureTtc = str_replace(',','.',$avoirsFacture[0]->getMonatantAvoirTtc());
  4679. //                    }else{
  4680.                         $totalFactureTtc = str_replace(',','.',$avoir->getMonatantTtc());
  4681. //                    }
  4682.                     $lettrage = '';
  4683.                     $payPar = $avoir->getAvoir()->getSpv()?$avoir->getAvoir()->getSpv()->getName():'';
  4684.                     $arrayProject = [];
  4685.                     if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  4686.                         $totalEcheaceTtc = '/';
  4687.                         $datePayement = 'Avoir sur la facture '.$facture->getNumeroFacture();
  4688.                     }else{
  4689.                         $totalEcheaceTtc = $this->getEcheanceTtc($facture->getSpv()?$facture->getSpv()->getId():null,$facture->getDateValidation()?$facture->getDateValidation()->format('Y-m-d') : null);
  4690.                         $datePayement = null;
  4691.                         if($facture->getDatePaiement()){
  4692.                             $datePayement = $facture->getDatePaiement()->format('d/m/Y')  ;
  4693.                         }else{
  4694.                             if($facture->getDateValidation()){
  4695.                                 $datePayement = $facture->getDateValidation()->format('d/m/Y')  ;
  4696.                             }
  4697.                         }
  4698.                     }
  4699.                     $i = 0;
  4700.                     if(count($avoir->getAvoir()->getProjectAvoir())>0){
  4701.                         foreach ($avoir->getAvoir()->getProjectAvoir() as $item){
  4702.                             $arrayProject[$i]['projetHomogeneise'] = $item->getProject() ? $item->getProject()->getName() : '';
  4703.                             $arrayProject[$i]['projetMontantTtc'] = str_replace(',','.',$item->getMontantTtc());
  4704.                             $arrayProject[$i]['projetMontantHt'] = str_replace(',','.',$item->getMontantHt());
  4705.                             $arrayProject[$i]['projetMontantTva'] = str_replace(',','.','');
  4706.                             $i++;
  4707.                         }
  4708.                     }else{
  4709.                         $arrayProject[$i]['projetHomogeneise'] = '';
  4710.                         $arrayProject[$i]['projetMontantTtc'] = '';
  4711.                         $arrayProject[$i]['projetMontantHt'] =  '';
  4712.                         $arrayProject[$i]['projetMontantTva'] =  '';
  4713.                     }
  4714.                     foreach ($arrayProject as $projectFactureAvoir){
  4715.                         $arrayFactureAvoir[$h]['element'] = $element;
  4716.                         $arrayFactureAvoir[$h]['mois'] = $mois;
  4717.                         $arrayFactureAvoir[$h]['dateFacture'] = $dateAvoir;
  4718.                         $arrayFactureAvoir[$h]['reference'] = $reference;
  4719.                         $arrayFactureAvoir[$h]['societeFacture'] = $societeFacture;
  4720.                         $arrayFactureAvoir[$h]['fourniseur'] = $fourniseur;
  4721.                         $arrayFactureAvoir[$h]['projetHomogeneise'] = $projectFactureAvoir['projetHomogeneise'];
  4722.                         $arrayFactureAvoir[$h]['motifHomogeneise'] = $motifHomogeneise;
  4723.                         $arrayFactureAvoir[$h]['typeDepense'] = $typeDepense;
  4724.                         $arrayFactureAvoir[$h]['totalFactureTtc'] = '-'.$totalFactureTtc;
  4725.                         $arrayFactureAvoir[$h]['projetMontantTtc'] = $projectFactureAvoir['projetMontantTtc'] ? '-'.$projectFactureAvoir['projetMontantTtc']: '' ;
  4726.                         $arrayFactureAvoir[$h]['projetMontantHt'] = $projectFactureAvoir['projetMontantHt'] ? '-'.$projectFactureAvoir['projetMontantHt']: '' ;
  4727.                         $arrayFactureAvoir[$h]['projetMontantTva'] = $projectFactureAvoir['projetMontantTva'] ? '-'.$projectFactureAvoir['projetMontantTva']: '' ;
  4728.                         $arrayFactureAvoir[$h]['totalEcheaceTtc'] = $totalEcheaceTtc;
  4729.                         $arrayFactureAvoir[$h]['lettrage'] = $lettrage;
  4730.                         $arrayFactureAvoir[$h]['datePayement'] = $datePayement;
  4731.                         $arrayFactureAvoir[$h]['payPar'] = $payPar;
  4732.                         $arrayFactureAvoir[$h]['moyenPayement'] = $moyenPayement;
  4733.                         $arrayFactureAvoir[$h]['dateValidation'] = $facture->getDateValidation() ? $facture->getDateValidation()->format('d/m/Y') : null;
  4734.                         $arrayFactureAvoir[$h]['facture_url'] = $fileAvoir;
  4735.                         $h++;
  4736.                     }
  4737.                 }
  4738.             }
  4739.         }
  4740.         return $arrayFactureAvoir;
  4741.     }
  4742.     public function extractFacturesProjectCommande(){
  4743.         $arrays = $this->getFacturesAvoirsProjectCommande();
  4744.         $file1 = $this->extractFile1($arrays);
  4745.         $arrays2 = $projects= $this->em->getRepository(\App\Entity\Project::class)->findAll();
  4746.         $file2 = $this->extractFile2($arrays2);
  4747.         $arrays3 = $projects= $this->em->getRepository(\App\Entity\FactureFinance::class)->searchFacturePaiementIsAvoir();
  4748.         $file3 = $this->extractFile3($arrays3);
  4749.         $arrays4 = $projects= $this->em->getRepository(\App\Entity\FactureFinance::class)->searchAllFacturePaiement();
  4750.         $file3 = $this->extractFile4($arrays4);
  4751.         return $file1;
  4752.     }
  4753.     public function extractFile1($arrays){
  4754.         $file= $this->params->get('facture_finance_export_directory')."/immobilisations.xlsx";
  4755.         if(file_exists($file)){
  4756.             $filesystem = new Filesystem();
  4757.             $filesystem->remove($file);
  4758.         }
  4759.         $spreadsheet = new Spreadsheet();
  4760.         $sheet = $spreadsheet->getActiveSheet();
  4761.         // Head 2
  4762.         $tableHead2 = [
  4763.             'font'=>[
  4764.                 'color'=>[
  4765.                     'rgb'=>'ffffff'
  4766.                 ],
  4767.                 'bold'=>true,
  4768.                 'size'=>12
  4769.             ],
  4770.             'fill'=>[
  4771.                 'fillType' => Fill::FILL_SOLID,
  4772.                 'startColor' => [
  4773.                     'rgb' => '002060'
  4774.                 ]
  4775.             ],
  4776.         ];
  4777.         $tableRand = [
  4778.             'fill'=>[
  4779.                 'fillType' => Fill::FILL_SOLID,
  4780.                 'startColor' => [
  4781.                     'rgb' => 'C8D6EE'
  4782.                 ]
  4783.             ],
  4784.         ];
  4785.         $sheet->setCellValue('A1',"Element")
  4786.             ->setCellValue('B1',"Mois")
  4787.             ->setCellValue('C1',"Date Facture")
  4788.             ->setCellValue('D1',"Libellé - Référence")
  4789.             ->setCellValue('E1',"Société facturée")
  4790.             ->setCellValue('F1',"Emetteur de la Facture")
  4791.             ->setCellValue('G1',"Projet homogénéisé")
  4792.             ->setCellValue('H1',"Motif homogénéisé")
  4793.             ->setCellValue('I1',"Type dépense / revenu")
  4794.             ->setCellValue('J1',"Total Facture")
  4795.             ->setCellValue('K1',"Montant TTC")
  4796.             ->setCellValue('L1',"Montant HT")
  4797.             ->setCellValue('M1',"TVA")
  4798.             ->setCellValue('N1',"Échéance TTC")
  4799.             ->setCellValue('O1',"Lettrage")
  4800.             ->setCellValue('P1',"Date paiement")
  4801.             ->setCellValue('Q1',"Payé par")
  4802.             ->setCellValue('R1',"Mode paiement")
  4803.             ->setCellValue('S1',"Facture url");
  4804.         // Borders a2 z2
  4805.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4806.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4807.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4808.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4809.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4810.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4811.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4812.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4813.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4814.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4815.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4816.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4817.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4818.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4819.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4820.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4821.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4822.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4823.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4824.         //width
  4825.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(15);
  4826.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(15);
  4827.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(15);
  4828.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(17);
  4829.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(15);
  4830.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(24);
  4831.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(35);
  4832.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(30);
  4833.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(40);
  4834.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(16);
  4835.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(16);
  4836.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(16);
  4837.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(16);
  4838.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(16);
  4839.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(15);
  4840.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  4841.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  4842.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(20);
  4843.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(40);
  4844.         $spreadsheet->getActiveSheet()->getStyle('A1:S1')->applyFromArray($tableHead2);
  4845.         //loop through the data
  4846.         //current row
  4847.         $row=2;
  4848.         foreach($arrays as $array){
  4849.             $spreadsheet->getActiveSheet()
  4850.                 ->setCellValue('A'.$row , $array['element'])
  4851.                 ->setCellValue('B'.$row , $array['mois'])
  4852.                 ->setCellValue('D'.$row , $array['reference'])
  4853.                 ->setCellValue('E'.$row , $array['societeFacture'])
  4854.                 ->setCellValue('F'.$row , $array['fourniseur'])
  4855.                 ->setCellValue('G'.$row , $array['projetHomogeneise'])
  4856.                 ->setCellValue('H'.$row , $array['motifHomogeneise'])
  4857.                 ->setCellValue('I'.$row , $array['typeDepense'])
  4858.                 ->setCellValue('J'.$row , $array['totalFactureTtc'])
  4859.                 ->setCellValue('K'.$row , $array['projetMontantTtc'])
  4860.                 ->setCellValue('L'.$row , $array['projetMontantHt'])
  4861.                 ->setCellValue('M'.$row , $array['projetMontantTva'])
  4862.                 ->setCellValue('N'.$row , $array['totalEcheaceTtc'])
  4863.                 ->setCellValue('O'.$row , $array['lettrage'])
  4864.                 ->setCellValue('P'.$row , $array['datePayement'])
  4865.                 ->setCellValue('Q'.$row , $array['payPar'])
  4866.                 ->setCellValue('R'.$row , $array['moyenPayement'])
  4867.             ;
  4868.             $urlFacture = $array['facture_url']?$array['facture_url']->getPath() : null;
  4869.             $nameFacture = $array['facture_url']?$array['facture_url']->getNomenclature()?$array['facture_url']->getNomenclature():$array['facture_url']->getName():null;
  4870.             $context = $this->router->getContext();
  4871.             $host = $context->getHost();
  4872.             $scheme = $context->getScheme();
  4873.             $basePath = $context->getBaseUrl();
  4874.             if($urlFacture){
  4875.                 $baseurl = $scheme . '://' . $host . $basePath;
  4876.                 $spreadsheet->getActiveSheet()->setCellValue('S'.$row ,$nameFacture);
  4877.                 $spreadsheet->getActiveSheet()->getCell('S'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  4878.             }
  4879.             $spreadsheet = $this->addStyleToCellDate('C',$row,$array['dateFacture'],$spreadsheet);
  4880.             if($row % 2 == 0){
  4881.                 $spreadsheet->getActiveSheet()->getStyle('A'.$row.':S'.$row)->applyFromArray($tableRand);
  4882.             }
  4883.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4884.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4885.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4886.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4887.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4888.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4889.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4890.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4891.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4892.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4893.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4894.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4895.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4896.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4897.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4898.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4899.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4900.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4901.             $row++;
  4902.         }
  4903.         $firstRow=1;
  4904.         $lastRow=$row-1;
  4905.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":S".$lastRow);
  4906.         $writer = new Xlsx($spreadsheet);
  4907.         $writer->save($file);
  4908.         return $file;
  4909.     }
  4910.     public function extractFile2($projects){
  4911.         $file= $this->params->get('facture_finance_export_directory')."/noms_projets.xlsx";
  4912.         if(file_exists($file)){
  4913.             $filesystem = new Filesystem();
  4914.             $filesystem->remove($file);
  4915.         }
  4916.         $spreadsheet = new Spreadsheet();
  4917.         $sheet = $spreadsheet->getActiveSheet();
  4918.         // Head 2
  4919.         $tableHead2 = [
  4920.             'font'=>[
  4921.                 'color'=>[
  4922.                     'rgb'=>'ffffff'
  4923.                 ],
  4924.                 'bold'=>true,
  4925.                 'size'=>12
  4926.             ],
  4927.             'fill'=>[
  4928.                 'fillType' => Fill::FILL_SOLID,
  4929.                 'startColor' => [
  4930.                     'rgb' => '002060'
  4931.                 ]
  4932.             ],
  4933.         ];
  4934.         $tableRand = [
  4935.             'fill'=>[
  4936.                 'fillType' => Fill::FILL_SOLID,
  4937.                 'startColor' => [
  4938.                     'rgb' => 'C8D6EE'
  4939.                 ]
  4940.             ],
  4941.         ];
  4942.         $sheet->setCellValue('A1',"Projet")
  4943.             ->setCellValue('B1',"SPV")
  4944.             ->setCellValue('C1',"Statut tracker")
  4945.             ->setCellValue('D1',"Développeur")
  4946.             ->setCellValue('E1',"Capacité")
  4947.             ->setCellValue('F1',"Adresse")
  4948.             ->setCellValue('G1',"Code Postal")
  4949.             ->setCellValue('H1',"Ville")
  4950.             ->setCellValue('I1',"Nom du bailleur")
  4951.             ->setCellValue('J1',"Prénom du bailleur");
  4952.         // Borders a2 z2
  4953.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4954.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4955.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4956.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4957.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4958.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4959.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4960.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4961.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4962.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4963.         //width
  4964.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(20);
  4965.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(20);
  4966.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(20);
  4967.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(20);
  4968.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(20);
  4969.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  4970.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  4971.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  4972.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(20);
  4973.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  4974.         $spreadsheet->getActiveSheet()->getStyle('A1:j1')->applyFromArray($tableHead2);
  4975.         //loop through the data
  4976.         //current row
  4977.         $row=2;
  4978.         foreach ($projects as $project) {
  4979.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  4980.             $spreadsheet->getActiveSheet()
  4981.                 ->setCellValue('A'.$row , $project->getName())
  4982.                 ->setCellValue('B'.$row , $project->getSpv() ? $project->getSpv()->getName() : '')
  4983.                 ->setCellValue('C'.$row , $project->getStatusTrackerStr())
  4984.                 ->setCellValue('D'.$row , $project->getDeveloppeur() ? $project->getDeveloppeur()->getFirstname().' '.$project->getDeveloppeur()->getLastname() : '')
  4985.                 ->setCellValue('E'.$row , $project->getCapacite())
  4986.                 ->setCellValue('F'.$row , $etap14->getAdresseMiseEnService() ? $etap14->getAdresseMiseEnService() : $project->getAdresse())
  4987.                 ->setCellValue('G'.$row , $etap14->getCodePostalMiseEnService() ? $etap14->getCodePostalMiseEnService() : $project->getCodePostal())
  4988.                 ->setCellValue('H'.$row , $etap14->getCityMiseEnService() ? $etap14->getCityMiseEnService() : $project->getCity())
  4989.                 ->setCellValue('I'.$row , $etap14->getFirstnameProprietaire())
  4990.                 ->setCellValue('J'.$row , $etap14->getLastnameProprietaire())
  4991.             ;
  4992.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4993.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4994.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4995.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4996.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4997.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4998.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4999.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  5000.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  5001.             $row++;
  5002.         }
  5003.         $firstRow=1;
  5004.         $lastRow=$row-1;
  5005.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":J".$lastRow);
  5006.         $writer = new Xlsx($spreadsheet);
  5007.         $writer->save($file);
  5008.         return $file;
  5009.     }
  5010.     public function extractFile3($arrays){
  5011.         $file= $this->params->get('facture_finance_export_directory')."/au_compensation.xlsx";
  5012.         if(file_exists($file)){
  5013.             $filesystem = new Filesystem();
  5014.             $filesystem->remove($file);
  5015.         }
  5016.         $spreadsheet = new Spreadsheet();
  5017.         $sheet = $spreadsheet->getActiveSheet();
  5018.         // Head 2
  5019.         $tableHead2 = [
  5020.             'font'=>[
  5021.                 'color'=>[
  5022.                     'rgb'=>'ffffff'
  5023.                 ],
  5024.                 'bold'=>true,
  5025.                 'size'=>12
  5026.             ],
  5027.             'fill'=>[
  5028.                 'fillType' => Fill::FILL_SOLID,
  5029.                 'startColor' => [
  5030.                     'rgb' => '002060'
  5031.                 ]
  5032.             ],
  5033.         ];
  5034.         $sheet->setCellValue('A1',"N° de facture")
  5035.             ->setCellValue('B1',"Avoir(s)")
  5036.             ->setCellValue('C1',"Date de création de facture")
  5037.             ->setCellValue('D1',"Fournisseur")
  5038.             ->setCellValue('E1',"SPV")
  5039.             ->setCellValue('F1',"Montant déduit de l’avoir")
  5040.             ->setCellValue('G1',"Montant restant à régler")
  5041.             ->setCellValue('H1',"Montant TTC")
  5042.             ->setCellValue('I1',"Statut")
  5043.             ->setCellValue('J1',"Projet")
  5044.             ->setCellValue('K1',"Développeur")
  5045.             ->setCellValue('L1',"Classification dépense")
  5046.             ->setCellValue('M1',"Facture url");
  5047.         // Borders a2 z2
  5048.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5049.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5050.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5051.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5052.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5053.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5054.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5055.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5056.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5057.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5058.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5059.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5060.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5061.         //width
  5062.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(20);
  5063.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(20);
  5064.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  5065.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(20);
  5066.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(20);
  5067.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  5068.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(30);
  5069.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  5070.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(20);
  5071.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(30);
  5072.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(25);
  5073.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(30);
  5074.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(50);
  5075.         $spreadsheet->getActiveSheet()->getStyle('A1:M1')->applyFromArray($tableHead2);
  5076.         //loop through the data
  5077.         //current row
  5078.         $row=2;
  5079.         foreach($arrays as $factureFinance){
  5080.             $avoirs = '';
  5081.             $avoirsTab = $this->getAvoirsFacture($factureFinance);
  5082.             if($avoirsTab){
  5083.                 $i = 1;
  5084.                 foreach ($avoirsTab as $item){
  5085.                     if($i == count($avoirsTab)){
  5086.                         $avoirs .= $item->getAvoir()->getNumeroAvoir();
  5087.                     }else{
  5088.                         $avoirs .= $item->getAvoir()->getNumeroAvoir()."\n";
  5089.                     }
  5090.                     $i++;
  5091.                 }
  5092.             }
  5093.             $monatantAvoirTtc = 0;
  5094.             if((!is_null($factureFinance->getMonatantAvoirTtc()) && !is_null($factureFinance->getMonatantTtc())) ){
  5095.                 if($factureFinance->getMonatantAvoirTtc() > $factureFinance->getMonatantTtc() ){
  5096.                     $monatantAvoirTtc = $factureFinance->getMonatantTtc();
  5097.                 }else{
  5098.                     $monatantAvoirTtc = $factureFinance->getMonatantAvoirTtc();
  5099.                 }
  5100.             }
  5101.             $projects = '';
  5102.             if(count($factureFinance->getProjectFactureFinance())>0){
  5103.                 $i = 1 ;
  5104.                 foreach ($factureFinance->getProjectFactureFinance() as $item){
  5105.                     if($i == count($factureFinance->getProjectFactureFinance())){
  5106.                         $projects .= $item->getProject() ? $item->getProject()->getName() : '';
  5107.                     }else {
  5108.                         $projects .= $item->getProject() ? $item->getProject()->getName()."\n" : '';
  5109.                     }
  5110.                     $i++;
  5111.                 }
  5112.             }
  5113.             $spreadsheet->getActiveSheet()
  5114.                 ->setCellValue('A'.$row , $factureFinance->getNumeroFacture30Max())
  5115.                 ->setCellValue('B'.$row , $avoirs)
  5116.                 ->setCellValue('D'.$row , $factureFinance->getFournisseur()?$factureFinance->getFournisseur()->getName():'')
  5117.                 ->setCellValue('E'.$row , $factureFinance->getSpv()?$factureFinance->getSpv()->getName():'')
  5118.                 ->setCellValue('F'.$row , $monatantAvoirTtc)
  5119.                 ->setCellValue('G'.$row , $factureFinance->getMonatantRestantTtc() ? $factureFinance->getMonatantRestantTtc() : '0')
  5120.                 ->setCellValue('H'.$row , $factureFinance->getMonatantTtc() ? $factureFinance->getMonatantTtc() : '0')
  5121.                 ->setCellValue('I'.$row , $factureFinance->getStatusString())
  5122.                 ->setCellValue('J'.$row , $projects)
  5123.                 ->setCellValue('K'.$row , $factureFinance->getDeveloppeur()  ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '')
  5124.                 ->setCellValue('L'.$row , $factureFinance->getClassification())
  5125.             ;
  5126.             $urlFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getPath() : null;
  5127.             $nameFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getNomenclature()?$factureFinance->getFileFacture()->getNomenclature():$factureFinance->getFileFacture()->getName():null;
  5128.             $context = $this->router->getContext();
  5129.             $host = $context->getHost();
  5130.             $scheme = $context->getScheme();
  5131.             $basePath = $context->getBaseUrl();
  5132.             if($urlFacture){
  5133.                 $baseurl = $scheme . '://' . $host . $basePath;
  5134.                 $spreadsheet->getActiveSheet()->setCellValue('M'.$row ,$nameFacture);
  5135.                 $spreadsheet->getActiveSheet()->getCell('M'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  5136.             }
  5137.             $spreadsheet = $this->addStyleToCellDate('C',$row,$factureFinance->getCreatedAt(),$spreadsheet);
  5138.             $row++;
  5139.         }
  5140.         $firstRow=1;
  5141.         $lastRow=$row-1;
  5142.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":L".$lastRow);
  5143.         $writer = new Xlsx($spreadsheet);
  5144.         $writer->save($file);
  5145.         return $file;
  5146.     }
  5147.     public function extractFile4($arrays){
  5148.         $file= $this->params->get('facture_finance_export_directory')."/template_4eme_fichier.xlsx";
  5149.         if(file_exists($file)){
  5150.             $filesystem = new Filesystem();
  5151.             $filesystem->remove($file);
  5152.         }
  5153.         $spreadsheet = new Spreadsheet();
  5154.         $sheet = $spreadsheet->getActiveSheet();
  5155.         // Head 2
  5156.         $tableHead2 = [
  5157.             'font'=>[
  5158.                 'color'=>[
  5159.                     'rgb'=>'ffffff'
  5160.                 ],
  5161.                 'bold'=>true,
  5162.                 'size'=>12
  5163.             ],
  5164.             'fill'=>[
  5165.                 'fillType' => Fill::FILL_SOLID,
  5166.                 'startColor' => [
  5167.                     'rgb' => '002060'
  5168.                 ]
  5169.             ],
  5170.         ];
  5171.         $sheet->setCellValue('A1',"N° de facture")
  5172.             ->setCellValue('B1',"Date de création de facture")
  5173.             ->setCellValue('C1',"Fournisseur")
  5174.             ->setCellValue('D1',"SPV")
  5175.             ->setCellValue('E1',"Montant TTC")
  5176.             ->setCellValue('F1',"Délai de paiement")
  5177.             ->setCellValue('G1',"Facture url")
  5178.             ->setCellValue('H1',"Statut")
  5179.             ->setCellValue('I1',"Projet")
  5180.             ->setCellValue('J1',"Date d'émission")
  5181.             ->setCellValue('K1',"Date de paiement");
  5182.         // Borders a2 z2
  5183.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5184.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5185.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5186.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5187.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5188.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5189.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5190.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5191.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5192.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5193.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5194.         //width
  5195.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(20);
  5196.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(20);
  5197.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  5198.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(35);
  5199.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(35);
  5200.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  5201.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(40);
  5202.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(30);
  5203.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(50);
  5204.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  5205.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(20);
  5206.         $spreadsheet->getActiveSheet()->getStyle('A1:K1')->applyFromArray($tableHead2);
  5207.         //loop through the data
  5208.         //current row
  5209.         $row=2;
  5210.         foreach($arrays as $factureFinance){
  5211.             $projects = '';
  5212.             if(count($factureFinance->getProjectFactureFinance())>0){
  5213.                 $i = 1 ;
  5214.                 foreach ($factureFinance->getProjectFactureFinance() as $item){
  5215.                     if($i == count($factureFinance->getProjectFactureFinance())){
  5216.                         $projects .= $item->getProject() ? $item->getProject()->getName() : '';
  5217.                     }else {
  5218.                         $projects .= $item->getProject() ? $item->getProject()->getName()."\n" : '';
  5219.                     }
  5220.                     $i++;
  5221.                 }
  5222.             }
  5223.             $spreadsheet->getActiveSheet()
  5224.                 ->setCellValue('A'.$row , $factureFinance->getNumeroFacture30Max())
  5225.                 ->setCellValue('C'.$row , $factureFinance->getFournisseur()?$factureFinance->getFournisseur()->getName():'')
  5226.                 ->setCellValue('D'.$row , $factureFinance->getSpv()?$factureFinance->getSpv()->getName():'')
  5227.                 ->setCellValue('E'.$row , $factureFinance->getMonatantTtc() ? $factureFinance->getMonatantTtc() : '0')
  5228.                 ->setCellValue('F'.$row , $factureFinance->getDelaiPaiement())
  5229.                 ->setCellValue('H'.$row , $factureFinance->getStatusString())
  5230.                 ->setCellValue('I'.$row , $projects)
  5231.             ;
  5232.             $urlFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getPath() : null;
  5233.             $nameFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getNomenclature()?$factureFinance->getFileFacture()->getNomenclature():$factureFinance->getFileFacture()->getName():null;
  5234.             $context = $this->router->getContext();
  5235.             $host = $context->getHost();
  5236.             $scheme = $context->getScheme();
  5237.             $basePath = $context->getBaseUrl();
  5238.             if($urlFacture){
  5239.                 $baseurl = $scheme . '://' . $host . $basePath;
  5240.                 $spreadsheet->getActiveSheet()->setCellValue('G'.$row ,$nameFacture);
  5241.                 $spreadsheet->getActiveSheet()->getCell('G'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  5242.             }
  5243.             $spreadsheet = $this->addStyleToCellDate('B',$row,$factureFinance->getCreatedAt(),$spreadsheet);
  5244.             $spreadsheet = $this->addStyleToCellDate('J',$row,$factureFinance->getDateFacture(),$spreadsheet);
  5245.             $spreadsheet = $this->addStyleToCellDate('K',$row,$factureFinance->getDatePaiement(),$spreadsheet);
  5246.             $row++;
  5247.         }
  5248.         $firstRow=1;
  5249.         $lastRow=$row-1;
  5250.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":L".$lastRow);
  5251.         $writer = new Xlsx($spreadsheet);
  5252.         $writer->save($file);
  5253.         return $file;
  5254.     }
  5255.     public function formatTab3($arrays){
  5256.         $array = [];
  5257.             $row=0;
  5258.             foreach($arrays as $factureFinance){
  5259.                 $avoirs = '';
  5260.                 $avoirsTab = $this->getAvoirsFacture($factureFinance);
  5261.                 if($avoirsTab){
  5262.                     $i = 1;
  5263.                     foreach ($avoirsTab as $item){
  5264.                         if($i == count($avoirsTab)){
  5265.                             $avoirs .= $item->getAvoir()->getNumeroAvoir();
  5266.                         }else{
  5267.                             $avoirs .= $item->getAvoir()->getNumeroAvoir()."\n";
  5268.                         }
  5269.                         $i++;
  5270.                     }
  5271.                 }
  5272.                 $monatantAvoirTtc = 0;
  5273.                 if((!is_null($factureFinance->getMonatantAvoirTtc()) && !is_null($factureFinance->getMonatantTtc())) ){
  5274.                     if($factureFinance->getMonatantAvoirTtc() > $factureFinance->getMonatantTtc() ){
  5275.                         $monatantAvoirTtc = $factureFinance->getMonatantTtc();
  5276.                     }else{
  5277.                         $monatantAvoirTtc = $factureFinance->getMonatantAvoirTtc();
  5278.                     }
  5279.                 }
  5280.                 $projects = '';
  5281.                 if(count($factureFinance->getProjectFactureFinance())>0){
  5282.                     $i = 1 ;
  5283.                     foreach ($factureFinance->getProjectFactureFinance() as $item){
  5284.                         if($i == count($factureFinance->getProjectFactureFinance())){
  5285.                             $projects .= $item->getProject() ? $item->getProject()->getName() : '';
  5286.                         }else {
  5287.                             $projects .= $item->getProject() ? $item->getProject()->getName()."\n" : '';
  5288.                         }
  5289.                         $i++;
  5290.                     }
  5291.                 }
  5292.                 $array[$row]['facture'] = $factureFinance->getNumeroFacture30Max() ;
  5293.                 $array[$row]['avoirs'] = $avoirs;
  5294.                 $array[$row]['dateCreated'] = $factureFinance->getCreatedAt() ? $factureFinance->getCreatedAt()->format('d/m/Y') : '-' ;
  5295.                 $array[$row]['Fournisseur'] = $factureFinance->getFournisseur()?$factureFinance->getFournisseur()->getName():'' ;
  5296.                 $array[$row]['SPV'] = $factureFinance->getSpv()?$factureFinance->getSpv()->getName():'';
  5297.                 $array[$row]['montantDetuitAvoir'] = $monatantAvoirTtc ;
  5298.                 $array[$row]['montantRestantRegler'] = $factureFinance->getMonatantRestantTtc() ? $factureFinance->getMonatantRestantTtc() : '0';
  5299.                 $array[$row]['montantTtc'] =  $factureFinance->getMonatantTtc() ? $factureFinance->getMonatantTtc() : '0';
  5300.                 $array[$row]['statut'] = $factureFinance->getStatusString();
  5301.                 $array[$row]['project'] = $projects ;
  5302.                 $array[$row]['developpeur'] = $factureFinance->getDeveloppeur()  ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '' ;
  5303.                 $array[$row]['classification'] = $factureFinance->getClassification();
  5304.                 $urlFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getPath() : null;
  5305.                 $nameFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getNomenclature()?$factureFinance->getFileFacture()->getNomenclature():$factureFinance->getFileFacture()->getName():null;
  5306.                 $context = $this->router->getContext();
  5307.                 $host = $context->getHost();
  5308.                 $scheme = $context->getScheme();
  5309.                 $basePath = $context->getBaseUrl();
  5310.                 $baseurl = $scheme . '://' . $host . $basePath;
  5311.                 $array[$row]['FactureUrl'] = $urlFacture ? $baseurl.'/uploads/'.$urlFacture :'' ;
  5312.                 $array[$row]['FactureName'] = $nameFacture ;
  5313.                 $array[$row]['delaiPaiement'] = $factureFinance->getDelaiPaiement() ;
  5314.                 $array[$row]['dateEmission'] = $factureFinance->getDateFacture() ? $factureFinance->getDateFacture()->format('d/m/Y') : '-' ;
  5315.                 $array[$row]['datePaiement'] = $factureFinance->getDatePaiement() ? $factureFinance->getDatePaiement()->format('d/m/Y') : '-' ;
  5316.                 $array[$row]['montantHt'] =  $factureFinance->getMonatantHt() ? $factureFinance->getMonatantHt() : '0';
  5317.                 $array[$row]['montantTva'] =  $factureFinance->getTva() ? $factureFinance->getTva() : '0';
  5318.                 $row++;
  5319.         }
  5320.         return $array ;
  5321.     }
  5322.     public function fixedBugFactureHt(){
  5323.         $factures = $this->em->getRepository(FactureFinance::class)->findAll();
  5324.         foreach ($factures as $facture){
  5325.             if(count($facture->getProjectFactureFinance()) == 1){
  5326.                 $prixHt = $facture->getMonatantHt();
  5327.                 $prixTtc = $facture->getMonatantTtc();
  5328.                 $projectFacture = $facture->getProjectFactureFinance()[0];
  5329.                 $projectFacture->setMontantHt($prixHt);
  5330.                 $projectFacture->setMontantTtc($prixTtc);
  5331.                 $this->em->persist($projectFacture);
  5332.                 $this->em->flush();
  5333.             }
  5334.         }
  5335.     }
  5336.     public function updateSoulteAndLoyerProject(){
  5337.         $projects = $this->em->getRepository(Project::class)->findAll();
  5338.         foreach ($projects as $project){
  5339.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  5340.             if($etap5){
  5341.                 $soulteEtap5 = $etap5->getSoulteConfirme();
  5342.                 $loyerEtap5 = $etap5->getLoyerConfirme();
  5343.                 if($soulteEtap5){
  5344.                     $project->setSoulteVise($soulteEtap5) ;
  5345.                 }
  5346.                 if($loyerEtap5){
  5347.                     $project->setLoyerVise($loyerEtap5) ;
  5348.                 }
  5349.                 $this->em->persist($project);
  5350.                 $this->em->flush();
  5351.             }
  5352.         }
  5353.     }
  5354.     public function importProjectsTab($filename)
  5355.     {
  5356.         $file = $this->params->get('uploads_directory') . "/" . $filename;
  5357.         $array = [];
  5358.         $f = fopen($file, "r");
  5359.         $flag = true;
  5360.         $i = 0;
  5361.         $header = [];
  5362.         while (($line = fgetcsv($f, 0, ";")) !== false) {
  5363.             if ($flag) {
  5364.                 $header = [];
  5365.                 foreach ($line as $cell) {
  5366.                     $header[] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  5367.                 }
  5368.                 $flag = false;
  5369.                 continue;
  5370.             }
  5371.             foreach ($line as $key => $cell) {
  5372.                 $array[$i][$header[$key]] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  5373.             }
  5374.             $i++;
  5375.         }
  5376.         fclose($f);
  5377.         $arrayProject = [];
  5378.         $i = 0;
  5379.         foreach ($array as $item) {
  5380.             if (isset($item['Nom du projet'])) {
  5381.                 $nameProject = trim($item['Nom du projet']);
  5382.                 $project = $this->em->getRepository(Project::class)->findOneBy(['name' => $nameProject]);
  5383.                 if ($project) {
  5384.                     $arrayProject[$i]['project'] = $project->getName();
  5385.                     $arrayProject[$i]['projectId'] = $project->getId();
  5386.                     $arrayProject[$i]['montantHt'] = isset($item['Montant HT']) ? $item['Montant HT'] : 0;
  5387.                     $arrayProject[$i]['action'] = 1;
  5388.                 } else {
  5389.                     $arrayProject[$i]['action'] = 0;
  5390.                     $arrayProject[$i]['project'] = isset($item['Nom du projet']) ? $item['Nom du projet'] : 0;
  5391.                     $arrayProject[$i]['montantHt'] = isset($item['Montant HT']) ? $item['Montant HT'] : 0;
  5392.                 }
  5393.                 $i++;
  5394.             } else {
  5395.             }
  5396.         }
  5397.         return ['bodyTab' => $arrayProject];
  5398.     }
  5399.     public function getNomenclatureAvoir($avoir,$file){
  5400.         if(is_object($avoir) && is_object($file)){
  5401.             $numAvoir = $avoir->getNumeroAvoir()?$avoir->getNumeroAvoir():'' ;
  5402.             $nameSpv = $avoir->getSpv() ? $avoir->getSpv()->getName() : '';
  5403.             $nameFournisseur = $avoir->getFournisseur() ? $avoir->getFournisseur()->getName() : '';
  5404.             $date = $avoir->getCreatedAt() ? $avoir->getCreatedAt()->format('d/m/Y') : '';
  5405.             $montant = $avoir->getMonatantTtc() ? $avoir->getMonatantTtc().'€' : '';
  5406.             $extension = substr($file->getPath(), strrpos($file->getPath(), ".",-1) + 1);
  5407.             $nomenclature = $nameFournisseur.' - '.$nameSpv.' - '.$numAvoir.' - '.$date.' - '.$montant.'.'.$extension;
  5408.             $file->setNomenclature($nomenclature);
  5409.             $this->em->persist($file);
  5410.             $this->em->flush();
  5411.             return $nomenclature;
  5412.         }
  5413.         return false;
  5414.     }
  5415.     public function getMontantFinalTtcFacture($facture){
  5416.         $prix = 0;
  5417.         if ($facture){
  5418.             if( $facture->getIsAvoir() and ($facture->getMonatantRestantTtc() > 0) ){
  5419.                 $prix = (float)str_replace(',','.',$facture->getMonatantRestantTtc());
  5420.             }
  5421.             elseif ($facture->getIsAvoir() and ($facture->getMonatantRestantTtc() == 0)){
  5422.             }
  5423.             else{
  5424.                 $prix = (float)str_replace(',','.',$facture->getMonatantTtc());
  5425.             }
  5426.         }
  5427.         return number_format($prix,2,'.','');
  5428.     }
  5429.     public function getDataPaiementSepaDetail($request){
  5430.         $dataIds = $request->get('arrayIds');
  5431.         $prix = 0;
  5432.         $select = 0;
  5433.         if($dataIds){
  5434.             $factures = $this->em->getRepository(FactureFinance::class)->findBy(['token'=>$dataIds]);
  5435.             if($factures){
  5436.                 foreach ($factures as $facture){
  5437.                     if( $facture->getIsAvoir() and ($facture->getMonatantRestantTtc() > 0) ){
  5438.                         $prix += (float)str_replace(',','.',$facture->getMonatantRestantTtc());
  5439.                     }elseif ($facture->getIsAvoir() and ($facture->getMonatantRestantTtc() == 0)){
  5440.                     }
  5441.                     else{
  5442.                         $prix += (float)str_replace(',','.',$facture->getMonatantTtc());
  5443.                     }
  5444.                 }
  5445.                 $select = count($factures);
  5446.             }
  5447.         }
  5448.         return [
  5449.           'montant' => $this->espaceNumber($prix).'€' ,
  5450.           'select' => $select,
  5451.         ];
  5452.     }
  5453.     public function addPaiementSelect($request){
  5454.         $data = $request->get('arrayData');
  5455.         $date = $request->get('date');
  5456.         $spvId = $request->get('spvId');
  5457.         if($data && $date && $spvId){
  5458.             $spv = $this->em->getRepository(Spv::class)->find($spvId);
  5459.             $userCurrent = $this->security->getUser();
  5460.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  5461.             }else {
  5462.                 if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  5463.                     return [
  5464.                         'messageErreur' => '<p>vous n\'êtes pas autorisé à payer la facture</p>',
  5465.                     ];
  5466.                 }
  5467.             }
  5468. //            $dateNow = new \DateTime();
  5469. //            $dateNow->modify('+1 day');
  5470. //            $array = [];
  5471. //            foreach($data as $datum){
  5472. //                $datePrevuStrInit = $datum['date'];
  5473. //                $datePaiementPrevuInit = new \DateTime($datePrevuStrInit.' 23:59:59');
  5474. //                if($datePaiementPrevuInit >= $dateNow){
  5475. //                    $array[$datePrevuStrInit] = $datum;
  5476. //                }else{
  5477. //                    $array[$dateNow->format('Y-m-d')]['date'] = $dateNow->format('Y-m-d');
  5478. //                    foreach ($datum['ids'] as $id){
  5479. //                        $array[$dateNow->format('Y-m-d')]['ids'][] = $id;
  5480. //                    }
  5481. //                }
  5482. //            }
  5483.             foreach ($data as $datePrevuTab){
  5484.                 $datePrevuStr = $datePrevuTab['date'];
  5485.                 $datePaiementPrevu = new \DateTime($datePrevuStr);
  5486. //                if($datePaiementPrevu >= $dateNow){
  5487. //
  5488. //                }else{
  5489. //                    $datePaiementPrevu = $dateNow;
  5490. //                }
  5491.                 $tokensFactures = $datePrevuTab['ids'];
  5492.                 $dateValidation = new \DateTime($date);
  5493.                 $factures = $this->em->getRepository(FactureFinance::class)->findBy(['token'=>$tokensFactures]);
  5494.                 $factureFinancePaiement = $this->em->getRepository(FactureFinancePaiement::class)->findNotFichierBySpvAndDate($spv,$dateValidation,$datePaiementPrevu);
  5495.                $factureExistInDetail = [];
  5496.                 if($factureFinancePaiement){
  5497.                     $factureFinancePaiementDetails = $this->em->getRepository(FactureFinancePaiementDetail::class)->findBy(['factureFinancePaiement'=>$factureFinancePaiement->getId()]);
  5498.                     if($factureFinancePaiementDetails){
  5499.                         foreach ($factureFinancePaiementDetails as $item){
  5500.                             $factureExistInDetail[$item->getFactureFinance()->getId()] = $item->getFactureFinance()->getId();
  5501.                             $item->getFactureFinance()->setIsPaiement(0);
  5502.                             $this->em->persist($item->getFactureFinance());
  5503.                             $this->em->remove($item);
  5504.                         }
  5505.                         $this->em->flush();
  5506.                     }
  5507.                 }
  5508.                 else{
  5509.                     $factureFinancePaiement = new FactureFinancePaiement();
  5510.                     $factureFinancePaiement->setSpv($spv);
  5511.                     $factureFinancePaiement->setDatePrevu($dateValidation);
  5512.                     $factureFinancePaiement->setDatePaiementPrevu($datePaiementPrevu);
  5513.                     $this->em->persist($factureFinancePaiement);
  5514.                     $this->em->flush();
  5515.                 }
  5516.                 $this->em->refresh($factureFinancePaiement);
  5517.                 foreach ($factures as $facture){
  5518.                     if($this->checkAltareaFacture($facture)){
  5519.                     }else{
  5520.                         if($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)) {
  5521.                             $facture->setIsPaiement(FactureFinance::STATUS_PAYE_SEPA);
  5522.                             $this->em->persist($facture);
  5523.                             $factureFinancePaiementDetailNew = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance'=>$facture->getId()]);
  5524.                             $factureDetailNotExist = isset($factureExistInDetail[$facture->getId()]);
  5525.                             if(!$factureFinancePaiementDetailNew){
  5526.                                 $factureFinancePaiementDetailNew = new FactureFinancePaiementDetail();
  5527.                             }
  5528.                             $factureFinancePaiementDetailNew->setFactureFinance($facture);
  5529.                             $factureFinancePaiementDetailNew->setDatePrevu($dateValidation);
  5530.                             $factureFinancePaiementDetailNew->setFactureFinancePaiement($factureFinancePaiement);
  5531.                             $this->em->persist($factureFinancePaiementDetailNew);
  5532.                             $this->em->flush();
  5533.                             if(!$factureDetailNotExist) {
  5534.                                 $str = $this->security->getUser()->getFirstname() . ' ' . $this->security->getUser()->getLastname() . ' a validé la mise en paiement : ' . $facture->getFournisseur()->getName() . ' (' . $facture->getNumeroFacture() . ')';
  5535.                                 $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(), $str, $facture);
  5536.                             }
  5537.                         }
  5538.                     }
  5539.                 }
  5540.             }
  5541.         }
  5542.         return 1;
  5543.     }
  5544.     public function addPaiementFacture($request){
  5545.         $datePrevuStr = $request->get('datePrevuPaiement');
  5546.         $dataId = $request->get('factureId');
  5547.         $date = $request->get('date');
  5548.         $spvId = $request->get('spvId');
  5549.         if($datePrevuStr && $dataId && $date && $spvId){
  5550.             $spv = $this->em->getRepository(Spv::class)->find($spvId);
  5551.             $dateValidation = new \DateTime($date);
  5552.             $datePrevuPaiement = new \DateTime($datePrevuStr.' 23:59:59');
  5553.             $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$dataId]);
  5554.             $userCurrent = $this->security->getUser();
  5555.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  5556.             }else {
  5557.                 if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  5558.                     return [
  5559.                         'messageErreur' => '<p>vous n\'êtes pas autorisé à payer la facture</p>',
  5560.                     ];
  5561.                 }
  5562.             }
  5563. //            $dateNow = new \DateTime();
  5564. //            $dateNow->modify('+1 day');
  5565. //            if($datePrevuPaiement >= $dateNow){
  5566. //            }else{
  5567. //                $datePrevuPaiement = $dateNow;
  5568. //            }
  5569.             $factureFinancePaiement = $this->em->getRepository(FactureFinancePaiement::class)->findNotFichierBySpvAndDate($spv,$dateValidation,$datePrevuPaiement);
  5570.             if(!$factureFinancePaiement){
  5571.                 $factureFinancePaiement = new FactureFinancePaiement();
  5572.                 $factureFinancePaiement->setSpv($spv);
  5573.                 $factureFinancePaiement->setDatePrevu($dateValidation);
  5574.                 $factureFinancePaiement->setDatePaiementPrevu($datePrevuPaiement);
  5575.                 $this->em->persist($factureFinancePaiement);
  5576.                 $this->em->flush();
  5577.             }
  5578.             if($facture){
  5579.                 if($this->checkAltareaFacture($facture)){
  5580.                 }else {
  5581.                     if ($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)) {
  5582.                         $facture->setIsPaiement(FactureFinance::STATUS_PAYE_SEPA);
  5583.                         $this->em->persist($facture);
  5584.                         $factureFinancePaiementDetailNew = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance' => $facture->getId()]);
  5585.                         $factureDetailNotExist = false;
  5586.                         if (!$factureFinancePaiementDetailNew) {
  5587.                             $factureFinancePaiementDetailNew = new FactureFinancePaiementDetail();
  5588.                             $factureDetailNotExist = true;
  5589.                         }
  5590.                         $factureFinancePaiementDetailNew->setFactureFinance($facture);
  5591.                         $factureFinancePaiementDetailNew->setDatePrevu($dateValidation);
  5592.                         $factureFinancePaiementDetailNew->setFactureFinancePaiement($factureFinancePaiement);
  5593.                         $this->em->persist($factureFinancePaiementDetailNew);
  5594.                         $this->em->flush();
  5595.                         if ($factureDetailNotExist) {
  5596.                             $str = $this->security->getUser()->getFirstname() . ' ' . $this->security->getUser()->getLastname() . ' a validé la mise en paiement : ' . $facture->getFournisseur()->getName() . ' (' . $facture->getNumeroFacture() . ')';
  5597.                             $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(), $str, $facture);
  5598.                         }
  5599.                     }
  5600.                 }
  5601.             }
  5602.         }
  5603.         return 1;
  5604.     }
  5605.     public function checkPaiemantFactureDetailAndUpdate($facture,$datePaiment){
  5606.         $detailPaiement = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance'=>$facture->getId()]);
  5607.         if($detailPaiement){
  5608.             $datePaeiementOld = $detailPaiement->getFactureFinancePaiement()->getDatePaiementPrevu();
  5609.             if($datePaeiementOld && ($datePaeiementOld->format('d-m-Y') == $datePaiment->format('d-m-Y'))){
  5610.             }else{
  5611.                 $facture->setIsPaiement(0);
  5612.                 $this->em->persist($facture);
  5613.                 $this->em->remove($detailPaiement);
  5614.                 $this->em->flush();
  5615.                 $spv = $facture->getSpv();
  5616.                 $dateValidation = $facture->getVateValidation();
  5617.                 $datePrevuPaiement = $datePaiment;
  5618.                 $userCurrent = $this->security->getUser();
  5619.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  5620.                 }else {
  5621.                     if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  5622.                         return 0;
  5623.                     }
  5624.                 }
  5625.                 $factureFinancePaiement = $this->em->getRepository(FactureFinancePaiement::class)->findNotFichierBySpvAndDate($spv,$dateValidation,$datePrevuPaiement);
  5626.                 if(!$factureFinancePaiement){
  5627.                     $factureFinancePaiement = new FactureFinancePaiement();
  5628.                     $factureFinancePaiement->setSpv($spv);
  5629.                     $factureFinancePaiement->setDatePrevu($dateValidation);
  5630.                     $factureFinancePaiement->setDatePaiementPrevu($datePrevuPaiement);
  5631.                     $this->em->persist($factureFinancePaiement);
  5632.                     $this->em->flush();
  5633.                 }
  5634.                 if($facture){
  5635.                     if($this->checkAltareaFacture($facture)){
  5636.                     }else {
  5637.                         if ($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)) {
  5638.                             $facture->setIsPaiement(FactureFinance::STATUS_PAYE_SEPA);
  5639.                             $this->em->persist($facture);
  5640.                             $factureFinancePaiementDetailNew = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance' => $facture->getId()]);
  5641.                             $factureDetailNotExist = false;
  5642.                             if (!$factureFinancePaiementDetailNew) {
  5643.                                 $factureFinancePaiementDetailNew = new FactureFinancePaiementDetail();
  5644.                                 $factureDetailNotExist = true;
  5645.                             }
  5646.                             $factureFinancePaiementDetailNew->setFactureFinance($facture);
  5647.                             $factureFinancePaiementDetailNew->setDatePrevu($dateValidation);
  5648.                             $factureFinancePaiementDetailNew->setFactureFinancePaiement($factureFinancePaiement);
  5649.                             $this->em->persist($factureFinancePaiementDetailNew);
  5650.                             $this->em->flush();
  5651.                             if ($factureDetailNotExist) {
  5652.                                 $str = $this->security->getUser()->getFirstname() . ' ' . $this->security->getUser()->getLastname() . ' a validé la mise en paiement : ' . $facture->getFournisseur()->getName() . ' (' . $facture->getNumeroFacture() . ')';
  5653.                                 $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(), $str, $facture);
  5654.                             }
  5655.                         }
  5656.                     }
  5657.                 }
  5658.             }
  5659.         }
  5660.     }
  5661.     public function refusePaiementFacture($request){
  5662.         $dataId = $request->get('factureId');
  5663.         $comment = $request->get('comment');
  5664.         if($dataId && $comment){
  5665.             $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$dataId]);
  5666.             if($facture){
  5667.                 $userCurrent = $this->security->getUser();
  5668.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  5669.                 }else {
  5670.                     if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  5671.                         return [
  5672.                             'messageErreur' => '<p>Vous n\'êtes pas autorisé</p>',
  5673.                             'facture' => $facture,
  5674.                             'spvId' => $facture->getSpv()->getId(),
  5675.                             'date' => $facture->getDateValidation()->format('Y-m-d'),
  5676.                         ];
  5677.                     }
  5678.                 }
  5679.                 if($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)){
  5680.                     $facture->setIsPaiement(FactureFinance::STATUS_NOT_PAYE_SEPA);
  5681.                     $this->em->persist($facture);
  5682.                     $this->em->flush();
  5683.                     $str = $this->security->getUser()->getFirstname().' '.$this->security->getUser()->getLastname().' a refusé la mise en paiement : '.$facture->getFournisseur()->getName().' ('.$facture->getNumeroFacture().')';
  5684.                     $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(),$str,$facture,$comment);
  5685.                     $factureFinancePaiementDetail = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance'=>$facture->getId()]);
  5686.                     if($factureFinancePaiementDetail){
  5687.                         $this->em->remove($factureFinancePaiementDetail);
  5688.                         $this->em->flush();
  5689.                     }
  5690.                 }
  5691.                 return [
  5692.                     'facture' => $facture,
  5693.                     'spvId' => $facture->getSpv()->getId(),
  5694.                     'date' => $facture->getDateValidation()->format('Y-m-d'),
  5695.                 ];
  5696.             }
  5697.         }
  5698.         return false ;
  5699.     }
  5700.     public function deletePaiementFacture($request,$token){
  5701.         $dataId = $token;
  5702.         if($dataId){
  5703.             $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$dataId]);
  5704.             if($facture){
  5705.                 $userCurrent = $this->security->getUser();
  5706.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  5707.                 }else {
  5708.                     if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  5709.                         return [
  5710.                             'messageErreur' => '<p>Vous n\'êtes pas autorisé</p>',
  5711.                             'facture' => $facture,
  5712.                             'spvId' => $facture->getSpv()->getId(),
  5713.                             'date' => $facture->getDateValidation()->format('Y-m-d'),
  5714.                         ];
  5715.                     }
  5716.                 }
  5717. //                if((!$this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) or !$this->checkFactureFinanceCodeProject($facture)) or $facture->getIsPaiement() == FactureFinance::STATUS_NOT_PAYE_SEPA){
  5718.                     $facture->setIsPaiement(FactureFinance::STATUS_DELETE_PAYE_SEPA);
  5719.                     $this->em->persist($facture);
  5720.                     $this->em->flush();
  5721.                     $str = $this->security->getUser()->getFirstname().' '.$this->security->getUser()->getLastname().' a supprimé la mise en paiement : '.$facture->getFournisseur()->getName().' ('.$facture->getNumeroFacture().')';
  5722.                     $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(),$str,$facture,"");
  5723.                     $factureFinancePaiementDetail = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance'=>$facture->getId()]);
  5724.                     if($factureFinancePaiementDetail){
  5725.                         $this->em->remove($factureFinancePaiementDetail);
  5726.                         $this->em->flush();
  5727.                     }
  5728. //                }
  5729.                 return [
  5730.                     'facture' => $facture,
  5731.                     'spvId' => $facture->getSpv()->getId(),
  5732.                     'date' => $facture->getDateValidation()->format('Y-m-d'),
  5733.                 ];
  5734.             }
  5735.         }
  5736.         return false ;
  5737.     }
  5738.     public function importTvaTab($filename)
  5739.     {
  5740.         $file = $this->params->get('uploads_directory') . "/" . $filename;
  5741.         $array = [];
  5742.         $f = fopen($file, "r");
  5743.         $flag = true;
  5744.         $i = 0;
  5745.         $header = [];
  5746.         while (($line = fgetcsv($f, 0, ";")) !== false) {
  5747.             if ($flag) {
  5748.                 $header = [];
  5749.                 foreach ($line as $cell) {
  5750.                     $header[] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  5751.                 }
  5752.                 $flag = false;
  5753.                 continue;
  5754.             }
  5755.             foreach ($line as $key => $cell) {
  5756.                 $array[$i][$header[$key]] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  5757.             }
  5758.             $i++;
  5759.         }
  5760.         fclose($f);
  5761.         $arrayProject = [];
  5762.         $i = 0;
  5763.         foreach ($array as $item) {
  5764.             $arrayProject[$i]['tauxTva'] = isset($item['Taux de TVA']) ? $item['Taux de TVA'] : 0;
  5765.             $arrayProject[$i]['tva'] = isset($item['Montant TVA']) ? $item['Montant TVA'] : 0;
  5766.             $arrayProject[$i]['montantHt'] = isset($item['Montant HT']) ? $item['Montant HT'] : 0;
  5767.             $arrayProject[$i]['montantTtc'] = isset($item['Montant TTC']) ? $item['Montant TTC'] : 0;
  5768.             $i++;
  5769.         }
  5770.         return ['bodyTab' => $arrayProject];
  5771.     }
  5772.     public function exportComptable($date){
  5773.         $arrays1 = $this->getC1FacturesExport($date);
  5774.             $this->c1FacturesExportXls($arrays1);
  5775.         $arrays2 = $this->getC2AvoirExport($date);
  5776.             $this->c2AvoirExportXls($arrays2);
  5777.         $arrays3 = $this->getC3AcomptesExport($date);
  5778.             $this->c3AcomptesExportXls($arrays3);
  5779.         $arrays4 = $this->getC4ReglementsExport($date);
  5780.             $this->c4ReglementsExportXls($arrays4);
  5781.     }
  5782.     public function exportComptableNotSend($date){
  5783.         $arrays1 = $this->getC1FacturesExport($date);
  5784.         $this->c1FacturesExportXls($arrays1,true,$date);
  5785.         $arrays2 = $this->getC2AvoirExport($date);
  5786.         $this->c2AvoirExportXls($arrays2,true,$date);
  5787.         $arrays3 = $this->getC3AcomptesExport($date);
  5788.         $this->c3AcomptesExportXls($arrays3,true,$date);
  5789.         $arrays4 = $this->getC4ReglementsExport($date);
  5790.         $this->c4ReglementsExportXls($arrays4,true,$date);
  5791.     }
  5792.     public function getC1FacturesExport($date){
  5793.         $factures = $this->em->getRepository(FactureFinance::class)->searchFactureValide($date);
  5794.         $arrays = [];
  5795.         $i = 0;
  5796.         foreach ($factures as $facture){
  5797.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  5798.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  5799.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  5800.             $classification = $facture->getClassification();
  5801.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  5802.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  5803.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  5804.             $numeroFacture = $facture->getNumeroFacture();
  5805.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  5806.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  5807.                     $arrays[$i]['Type de ligne'] = 'Facture';
  5808.                     $arrays[$i]['Code Société'] = $spvName;
  5809.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  5810.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  5811.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  5812.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  5813.                     $arrays[$i]['Date comptable'] = $dateComptable;
  5814.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  5815.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  5816.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  5817.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  5818.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  5819. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  5820.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  5821.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  5822.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  5823.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  5824.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  5825. //                    if($facture->getIsAvoir()){
  5826. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  5827. //                        $a = count($avoirs);
  5828. //                        $b = 1;
  5829. //                        $avoirNum = '';
  5830. //                        foreach ($avoirs as $item){
  5831. //                            if($b == $a){
  5832. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  5833. //                            }else{
  5834. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  5835. //                            }
  5836. //                            $b++;
  5837. //                        }
  5838. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  5839. //                    }else{
  5840.                         $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127)) ;
  5841. //                    }
  5842.                     $arrays[$i]['Code projet'] = '';
  5843.                     $arrays[$i]['libellé projet'] = '';
  5844.                     $arrays[$i]['Compteur facture associée'] = '';
  5845.                     $arrays[$i]['Autoliquidation'] = 0;
  5846.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  5847.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  5848.                     $i++;
  5849.                     if(count($facture->getProjectFactureFinance())>0){
  5850.                         foreach ($facture->getProjectFactureFinance() as $project){
  5851.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  5852.                             $arrays[$i]['Code Société'] = '';
  5853.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  5854.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  5855.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  5856.                             $arrays[$i]['Facture de charge'] = '';
  5857.                             $arrays[$i]['Date comptable'] = '';
  5858.                             $arrays[$i]['Date d’échéance'] = '';
  5859.                             $arrays[$i]['Date de création dans ERPI'] = '';
  5860.                             $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$tvaMultiple->getMontantHt()),2,'.','');
  5861.                             $arrays[$i]['Montant TTC'] = '';
  5862.                             $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$tvaMultiple->getTauxTva()),2,'.','');
  5863.                             $arrays[$i]['Montant à régler'] = '';
  5864.                             $arrays[$i]['Référence facture fournisseur'] = '';
  5865.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  5866.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  5867.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  5868.                             $arrays[$i]['Commentaire comptable'] = '';
  5869.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  5870.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  5871.                             $arrays[$i]['Compteur facture associée'] = '';
  5872.                             $arrays[$i]['Autoliquidation'] = 0;
  5873.                             $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  5874.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  5875.                             $i++;
  5876.                         }
  5877.                     }
  5878.                 }
  5879.             }
  5880.             else{
  5881.                 $arrays[$i]['Type de ligne'] = 'Facture';
  5882.                 $arrays[$i]['Code Société'] = $spvName;
  5883.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  5884.                 $arrays[$i]['Code budgétaire'] = $classification;
  5885.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  5886.                 $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  5887.                 $arrays[$i]['Date comptable'] = $dateComptable;
  5888.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  5889.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  5890.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  5891.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  5892.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  5893.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  5894.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  5895.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  5896.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  5897.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  5898. //                if($facture->getIsAvoir()){
  5899. //                    $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  5900. //                    $a = count($avoirs);
  5901. //                    $b = 1;
  5902. //                    $avoirNum = '';
  5903. //                    foreach ($avoirs as $item){
  5904. //                        if($b == $a){
  5905. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  5906. //                        }else{
  5907. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  5908. //                        }
  5909. //                        $b++;
  5910. //                    }
  5911. //                    $arrays[$i]['Commentaire comptable'] = $avoirNum;
  5912. //                }else{
  5913.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  5914. //                }
  5915.                 $arrays[$i]['Code projet'] = '';
  5916.                 $arrays[$i]['libellé projet'] = '';
  5917.                 $arrays[$i]['Compteur facture associée'] = '';
  5918.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  5919.                 if($facture->getAutoliquidation() == 1){
  5920.                     $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  5921.                 }else{
  5922.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  5923.                 }
  5924.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  5925.                 $i++;
  5926.                 if(count($facture->getProjectFactureFinance())>0){
  5927.                     foreach ($facture->getProjectFactureFinance() as $project){
  5928.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  5929.                         $arrays[$i]['Code Société'] = '';
  5930.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  5931.                         $arrays[$i]['Code budgétaire'] = $classification;
  5932.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  5933.                         $arrays[$i]['Facture de charge'] = '';
  5934.                         $arrays[$i]['Date comptable'] = '';
  5935.                         $arrays[$i]['Date d’échéance'] = '';
  5936.                         $arrays[$i]['Date de création dans ERPI'] = '';
  5937.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  5938.                         $arrays[$i]['Montant TTC'] = '';
  5939.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  5940.                         $arrays[$i]['Montant à régler'] = '';
  5941.                         $arrays[$i]['Référence facture fournisseur'] = '';
  5942.                         $arrays[$i]['Compteur ERPI pièce'] =  $facture->getCompteurErpiPiece();
  5943.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  5944.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  5945.                         $arrays[$i]['Commentaire comptable'] = '';
  5946.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  5947.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  5948.                         $arrays[$i]['Compteur facture associée'] = '';
  5949.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  5950.                         if($facture->getAutoliquidation() == 1){
  5951.                             $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  5952.                         }else{
  5953.                             $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  5954.                         }
  5955.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  5956.                         $i++;
  5957.                     }
  5958.                 }
  5959.             }
  5960.         }
  5961.         return $arrays;
  5962.     }
  5963.     public function c1FacturesExportXls($arrays,$isNotSend = false,$date = false){
  5964.         if($date){
  5965.             $dateNow = $date;
  5966.         }else{
  5967.             $dateNow = new \DateTime();
  5968.         }
  5969.         $dateNowStr = '_'.$dateNow->format('Ymd').'_'.$dateNow->format('H').'h'.$dateNow->format('i');
  5970.         $fileName = "C1_factures".$dateNowStr.".csv";
  5971.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  5972.         if(file_exists($file)){
  5973.             $filesystem = new Filesystem();
  5974.             $filesystem->remove($file);
  5975.         }
  5976.         $spreadsheet = new Spreadsheet();
  5977.         $sheet = $spreadsheet->getActiveSheet();
  5978.         // Head 2
  5979.         $tableHead2 = [
  5980.             'font'=>[
  5981.                 'color'=>[
  5982.                     'rgb'=>'ffffff'
  5983.                 ],
  5984.                 'bold'=>true,
  5985.                 'size'=>12
  5986.             ],
  5987.             'fill'=>[
  5988.                 'fillType' => Fill::FILL_SOLID,
  5989.                 'startColor' => [
  5990.                     'rgb' => '002060'
  5991.                 ]
  5992.             ],
  5993.         ];
  5994.         $tableRand = [
  5995.             'fill'=>[
  5996.                 'fillType' => Fill::FILL_SOLID,
  5997.                 'startColor' => [
  5998.                     'rgb' => 'C8D6EE'
  5999.                 ]
  6000.             ],
  6001.         ];
  6002.         $sheet->setCellValue('A1',"Type de ligne")
  6003.             ->setCellValue('B1',"Code Sage")
  6004.             ->setCellValue('C1',"Code budgétaire")
  6005.             ->setCellValue('D1',"Code fournisseur Evalua")
  6006.             ->setCellValue('E1',"Valeur de charge ou investissement")
  6007.             ->setCellValue('F1',"Date comptable")
  6008.             ->setCellValue('G1',"Date d’échéance")
  6009.             ->setCellValue('H1',"Date de création dans ERPI")
  6010.             ->setCellValue('I1',"Montant HT")
  6011.             ->setCellValue('J1',"Montant TTC")
  6012.             ->setCellValue('K1',"taux de TVA")
  6013.             ->setCellValue('L1',"Montant à régler")
  6014.             ->setCellValue('M1',"Référence facture fournisseur")
  6015.             ->setCellValue('N1',"Compteur ERPI pièce")
  6016.             ->setCellValue('O1',"Compteur ERPI écritures")
  6017.             ->setCellValue('P1',"Commentaire comptable")
  6018.             ->setCellValue('Q1',"Code projet")
  6019.             ->setCellValue('R1',"libellé projet")
  6020.             ->setCellValue('S1',"Compteur facture associée")
  6021.             ->setCellValue('T1',"Autoliquidation")
  6022.             ->setCellValue('U1',"Montant TVA");
  6023.         // Borders a2 z2
  6024.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6025.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6026.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6027.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6028.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6029.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6030.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6031.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6032.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6033.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6034.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6035.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6036.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6037.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6038.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6039.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6040.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6041.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6042.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6043.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6044.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6045.         //width
  6046.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  6047.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  6048.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  6049.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  6050.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  6051.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  6052.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  6053.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  6054.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  6055.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  6056.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  6057.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  6058.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  6059.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  6060.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  6061.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  6062.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  6063.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  6064.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  6065.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(15);
  6066.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(15);
  6067.         $spreadsheet->getActiveSheet()->getStyle('A1:T1')->applyFromArray($tableHead2);
  6068.         //loop through the data
  6069.         //current row
  6070.         $row=2;
  6071.         foreach($arrays as $array){
  6072.             $spreadsheet->getActiveSheet()
  6073.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  6074.                 ->setCellValue('B'.$row , $array['Code Sage'])
  6075.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  6076.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  6077.                 ->setCellValue('E'.$row , $array['Facture de charge'])
  6078.                 ->setCellValue('F'.$row , $array['Date comptable'])
  6079.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  6080.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  6081.                 ->setCellValue('I'.$row , $array['Montant HT'])
  6082.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  6083.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  6084.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  6085.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  6086.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  6087.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  6088.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  6089.                 ->setCellValue('Q'.$row , $array['Code projet'])
  6090.                 ->setCellValue('R'.$row , $array['libellé projet'])
  6091.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  6092.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  6093.                 ->setCellValue('U'.$row , $array['Montant TVA'])
  6094.             ;
  6095.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6096.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6097.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6098.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6099.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6100.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6101.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6102.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6103.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6104.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6105.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6106.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6107.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6108.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6109.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6110.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6111.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6112.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6113.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6114.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6115.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6116.             $row++;
  6117.         }
  6118.         $firstRow=1;
  6119.         $lastRow=$row-1;
  6120.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  6121.         $writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
  6122.         $writer->setDelimiter('|');
  6123.         $writer->setEnclosure('');
  6124.         $writer->setUseBOM(false);
  6125. //        $writer->setOutputEncoding('UTF-8');
  6126.         $writer->save($file);
  6127.         if($isNotSend){
  6128.         }else{
  6129.             $this->sendToServeur($fileName ,'/altarea/comptable',$this->params->get('comptable_altarea_directory'));
  6130.         }
  6131.         return $file;
  6132.     }
  6133.     public function getC2AvoirExport($date){
  6134.         $avoirs = $this->em->getRepository(Avoir::class)->searchAvoirValide($date);
  6135.         $arrays = [];
  6136.         $i = 0;
  6137.         foreach ($avoirs as $avoir){
  6138.             $spvName = $avoir->getSpv()?$avoir->getSpv()->getName():'';
  6139.             $spvCodeSage = $avoir->getSpv()?$avoir->getSpv()->getCodeSage():'';
  6140.             $fournisseurCode = $avoir->getFournisseur()?$avoir->getFournisseur()->getCodeFournisseur():'';
  6141.             $classification = $avoir->getClassification();
  6142.             $dateComptable = $avoir->getDateAvoir()?$avoir->getDateAvoir()->format('d/m/Y'):'';
  6143.             $dateEcheance = '';
  6144.             $dateCreation = $avoir->getCreatedAt()?$avoir->getCreatedAt()->format('d/m/Y'):'';
  6145.             $numeroFacture = $avoir->getNumeroAvoir();
  6146.             if(count($avoir->getTvaAvoir())>0 && $avoir->getTauxTva() == 0){
  6147.                 foreach ($avoir->getTvaAvoir() as $tvaMultiple){
  6148.                     $arrays[$i]['Type de ligne'] = 'Avoir';
  6149.                     $arrays[$i]['Code Société'] = $spvName;
  6150.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  6151.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  6152.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6153.                     $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  6154.                     $arrays[$i]['Date comptable'] = $dateComptable;
  6155.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  6156.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6157.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  6158.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  6159.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  6160.                     $arrays[$i]['Montant à régler'] = '';
  6161.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6162.                     $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  6163.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTva($avoir,$tvaMultiple);
  6164.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6165.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($avoir->getNote(), 0, 127));
  6166.                     $arrays[$i]['Code projet'] = '';
  6167.                     $arrays[$i]['libellé projet'] = '';
  6168.                     $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  6169.                     $factureAssocie = '';
  6170.                     if ($avoirFactures) {
  6171.                         $h = 1;
  6172.                         $total = count($avoirFactures);
  6173.                         foreach ($avoirFactures as $avoirFacture) {
  6174.                             if ($total == $h) {
  6175.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  6176.                             } else {
  6177.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  6178.                             }
  6179.                             $h++;
  6180.                         }
  6181.                     }
  6182.                     $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  6183.                     $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  6184.                     if($avoir->getAutoliquidation() == 1){
  6185.                         $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  6186.                     }else{
  6187.                         $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  6188.                     }
  6189.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  6190.                     $i++;
  6191.                     if(count($avoir->getProjectAvoir())>0){
  6192.                         foreach ($avoir->getProjectAvoir() as $project){
  6193.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  6194.                             $arrays[$i]['Code Société'] = '';
  6195.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  6196.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  6197.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  6198.                             $arrays[$i]['Avoir de charge'] = '';
  6199.                             $arrays[$i]['Date comptable'] = '';
  6200.                             $arrays[$i]['Date d’échéance'] = '';
  6201.                             $arrays[$i]['Date de création dans ERPI'] = '';
  6202. //                            if (count($avoir->getProjectAvoir()) == 1) {
  6203. //                                $arrays[$i]['Montant HT'] = (float)$avoir->getMonatantHt();
  6204. //                            } else {
  6205. //                                $arrays[$i]['Montant HT'] = (float)$project->getMontantHt();
  6206. //                            }
  6207. //                            $arrays[$i]['Montant TTC'] = '';
  6208. //                            $arrays[$i]['taux de TVA'] = '';
  6209.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  6210.                             $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  6211.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  6212.                             $arrays[$i]['Montant à régler'] = '';
  6213.                             $arrays[$i]['Référence facture fournisseur'] = '';
  6214.                             $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  6215.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTvaProject($avoir,$tvaMultiple,$project->getProject());
  6216.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  6217.                             $arrays[$i]['Commentaire comptable'] = '';
  6218.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  6219.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  6220.                             $arrays[$i]['Compteur facture associée'] = '';
  6221.                             $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  6222.                             if($avoir->getAutoliquidation() == 1){
  6223.                                 $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  6224.                             }else{
  6225.                                 $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  6226.                             }
  6227.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  6228.                             $i++;
  6229.                         }
  6230.                     }
  6231.                 }
  6232.             }
  6233.             else {
  6234.                 $arrays[$i]['Type de ligne'] = 'Avoir';
  6235.                 $arrays[$i]['Code Société'] = $spvName;
  6236.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  6237.                 $arrays[$i]['Code budgétaire'] = $classification;
  6238.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6239.                 $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]) ? self::CHARGE_INVESTISSEMENT_DEPENSE[$classification] : '';
  6240.                 $arrays[$i]['Date comptable'] = $dateComptable;
  6241.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  6242.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6243.                 $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  6244.                 if($avoirs){
  6245.                     $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  6246.                     $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  6247.                     $montantHt = $montantTtc / (1 + ($tauxTva/100));
  6248.                     $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  6249.                     $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  6250.                     $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  6251.                     $tvaMontant = $tauxTva * $montantHt / 100;
  6252.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  6253.                 }else{
  6254.                     $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$avoir->getMonatantHt()),2,'.','');
  6255.                     $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$avoir->getMonatantTtc()),2,'.','');
  6256.                     $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$avoir->getTauxTva()),2,'.','');
  6257.                     if($avoir->getAutoliquidation() == 1){
  6258.                         $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $avoir->getTauxTva())['tva'];
  6259.                     }else{
  6260.                         $tvaMontant = (float)str_replace(',','.',$avoir->getTauxTva()) * (float)str_replace(',','.',$avoir->getMonatantHt()) / 100;
  6261.                     }
  6262.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  6263.                 }
  6264.                 $arrays[$i]['Montant à régler'] = '';
  6265.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6266.                 $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  6267.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTva($avoir);
  6268.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6269.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($avoir->getNote(), 0, 127));
  6270.                 $arrays[$i]['Code projet'] = '';
  6271.                 $arrays[$i]['libellé projet'] = '';
  6272.                 $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  6273.                 $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  6274.                 $factureAssocie = '';
  6275.                 if ($avoirFactures) {
  6276.                     $h = 1;
  6277.                     $total = count($avoirFactures);
  6278.                     foreach ($avoirFactures as $avoirFacture) {
  6279.                         if ($total == $h) {
  6280.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  6281.                         } else {
  6282.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  6283.                         }
  6284.                         $h++;
  6285.                     }
  6286.                 }
  6287.                 $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  6288.                 $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  6289.                 $i++;
  6290.                 if (count($avoir->getProjectAvoir()) > 0) {
  6291.                     foreach ($avoir->getProjectAvoir() as $project) {
  6292.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  6293.                         $arrays[$i]['Code Société'] = '';
  6294.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  6295.                         $arrays[$i]['Code budgétaire'] = $classification;
  6296.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  6297.                         $arrays[$i]['Avoir de charge'] = '';
  6298.                         $arrays[$i]['Date comptable'] = '';
  6299.                         $arrays[$i]['Date d’échéance'] = '';
  6300.                         $arrays[$i]['Date de création dans ERPI'] = '';
  6301.                         if (count($avoir->getProjectAvoir()) == 1) {
  6302.                             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir->getId()]);
  6303.                             if ($avoirs) {
  6304.                                 $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  6305.                                 $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  6306.                                 $montantHt = $montantTtc / (1 + ($tauxTva / 100));
  6307.                                 $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  6308.                                 $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  6309.                                 $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  6310.                                 $tvaMontant = $tauxTva * $montantHt / 100;
  6311.                                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  6312.                             } else {
  6313.                                 $arrays[$i]['Montant HT'] = number_format((float)$avoir->getMonatantHt(),2,'.','');
  6314.                                 $arrays[$i]['Montant TTC'] = number_format((float)$avoir->getMonatantTtc(),2,'.','');
  6315.                                 $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  6316.                                 if($avoir->getAutoliquidation() == 1){
  6317.                                     $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $avoir->getTauxTva())['tva'];
  6318.                                 }else{
  6319.                                     $tvaMontant = (float)str_replace(',','.',$avoir->getTauxTva()) * (float)str_replace(',','.',$avoir->getMonatantHt()) / 100;
  6320.                                 }
  6321.                                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  6322.                             }
  6323.                         }else{
  6324.                             $montantHt = (float)str_replace(',','.',$avoir->getMonatantHt());
  6325.                             $tauxTva = $avoir->getTauxTva() && (float)$avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  6326.                             $arrays[$i]['Montant HT'] = number_format($montantHt,2,'.','');
  6327.                             $arrays[$i]['Montant TTC'] = number_format($montantHt + (1 *( $tauxTva/100)),2,'.','');
  6328.                             $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  6329.                             if($avoir->getAutoliquidation() == 1){
  6330.                                 $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $tauxTva)['tva'];
  6331.                             }else{
  6332.                                 $tvaMontant = $tauxTva * $montantHt / 100;
  6333.                             }
  6334.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  6335.                         }
  6336.                         $arrays[$i]['Montant à régler'] = '';
  6337.                         $arrays[$i]['Référence facture fournisseur'] = '';
  6338.                         $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  6339.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTvaProject($avoir, $project->getProject());
  6340.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  6341.                         $arrays[$i]['Commentaire comptable'] = '';
  6342.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  6343.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  6344.                         $arrays[$i]['Compteur facture associée'] = '';
  6345.                         $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  6346.                         $i++;
  6347.                     }
  6348.                 }
  6349.             }
  6350.         }
  6351.         return $arrays;
  6352.     }
  6353.     public function c2AvoirExportXls($arrays,$isNotSend = false,$date = false){
  6354.         if($date){
  6355.             $dateNow = $date;
  6356.         }else{
  6357.             $dateNow = new \DateTime();
  6358.         }
  6359.         $dateNowStr = '_'.$dateNow->format('Ymd').'_'.$dateNow->format('H').'h'.$dateNow->format('i');
  6360.         $fileName = "C2_avoirs".$dateNowStr.".csv";
  6361.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  6362.         if(file_exists($file)){
  6363.             $filesystem = new Filesystem();
  6364.             $filesystem->remove($file);
  6365.         }
  6366.         $spreadsheet = new Spreadsheet();
  6367.         $sheet = $spreadsheet->getActiveSheet();
  6368.         // Head 2
  6369.         $tableHead2 = [
  6370.             'font'=>[
  6371.                 'color'=>[
  6372.                     'rgb'=>'ffffff'
  6373.                 ],
  6374.                 'bold'=>true,
  6375.                 'size'=>12
  6376.             ],
  6377.             'fill'=>[
  6378.                 'fillType' => Fill::FILL_SOLID,
  6379.                 'startColor' => [
  6380.                     'rgb' => '002060'
  6381.                 ]
  6382.             ],
  6383.         ];
  6384.         $tableRand = [
  6385.             'fill'=>[
  6386.                 'fillType' => Fill::FILL_SOLID,
  6387.                 'startColor' => [
  6388.                     'rgb' => 'C8D6EE'
  6389.                 ]
  6390.             ],
  6391.         ];
  6392.         $sheet->setCellValue('A1',"Type de ligne")
  6393.             ->setCellValue('B1',"Code Sage")
  6394.             ->setCellValue('C1',"Code budgétaire")
  6395.             ->setCellValue('D1',"Code fournisseur Evalua")
  6396.             ->setCellValue('E1',"Valeur de charge ou investissement")
  6397.             ->setCellValue('F1',"Date comptable")
  6398.             ->setCellValue('G1',"Date d’échéance")
  6399.             ->setCellValue('H1',"Date de création dans ERPI")
  6400.             ->setCellValue('I1',"Montant HT")
  6401.             ->setCellValue('J1',"Montant TTC")
  6402.             ->setCellValue('K1',"taux de TVA")
  6403.             ->setCellValue('L1',"Montant à régler")
  6404.             ->setCellValue('M1',"Référence facture fournisseur")
  6405.             ->setCellValue('N1',"Compteur ERPI pièce")
  6406.             ->setCellValue('O1',"Compteur ERPI écritures")
  6407.             ->setCellValue('P1',"Commentaire comptable")
  6408.             ->setCellValue('Q1',"Code projet")
  6409.             ->setCellValue('R1',"libellé projet")
  6410.             ->setCellValue('S1',"Compteur facture associée")
  6411.             ->setCellValue('T1',"Autoliquidation")
  6412.             ->setCellValue('U1',"Montant TVA");
  6413.         // Borders a2 z2
  6414.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6415.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6416.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6417.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6418.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6419.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6420.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6421.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6422.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6423.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6424.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6425.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6426.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6427.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6428.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6429.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6430.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6431.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6432.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6433.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6434.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6435.         //width
  6436.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  6437.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  6438.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  6439.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  6440.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  6441.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  6442.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  6443.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  6444.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  6445.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  6446.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  6447.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  6448.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  6449.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  6450.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  6451.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  6452.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  6453.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  6454.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  6455.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  6456.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(25);
  6457.         $spreadsheet->getActiveSheet()->getStyle('A1:U1')->applyFromArray($tableHead2);
  6458.         //loop through the data
  6459.         //current row
  6460.         $row=2;
  6461.         foreach($arrays as $array){
  6462.             $spreadsheet->getActiveSheet()
  6463.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  6464.                 ->setCellValue('B'.$row , $array['Code Sage'])
  6465.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  6466.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  6467.                 ->setCellValue('E'.$row , $array['Avoir de charge'])
  6468.                 ->setCellValue('F'.$row , $array['Date comptable'])
  6469.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  6470.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  6471.                 ->setCellValue('I'.$row , $array['Montant HT'])
  6472.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  6473.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  6474.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  6475.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  6476.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  6477.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  6478.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  6479.                 ->setCellValue('Q'.$row , $array['Code projet'])
  6480.                 ->setCellValue('R'.$row , $array['libellé projet'])
  6481.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  6482.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  6483.                 ->setCellValue('U'.$row , $array['Montant TVA']);
  6484.             ;
  6485.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6486.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6487.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6488.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6489.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6490.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6491.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6492.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6493.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6494.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6495.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6496.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6497.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6498.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6499.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6500.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6501.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6502.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6503.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6504.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6505.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6506.             $row++;
  6507.         }
  6508.         $firstRow=1;
  6509.         $lastRow=$row-1;
  6510.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  6511.         $writer = new Csv($spreadsheet);
  6512.         $writer->setDelimiter('|');
  6513.         $writer->setEnclosure('');
  6514.         $writer->setUseBOM(false);
  6515. //        $writer->setOutputEncoding('UTF-8');
  6516.         $writer->save($file);
  6517.         if($isNotSend){
  6518.         }else{
  6519.             $this->sendToServeur($fileName ,'/altarea/comptable',$this->params->get('comptable_altarea_directory'));
  6520.         }
  6521.         return $file;
  6522.     }
  6523.     public function getC3AcomptesExport($date){
  6524.         $factures = $this->em->getRepository(FactureFinance::class)->searchAcompteValide($date);
  6525.         $arrays = [];
  6526.         $i = 0;
  6527.         foreach ($factures as $facture){
  6528.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  6529.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  6530.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  6531.             $classification = $facture->getClassification();
  6532.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  6533.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  6534.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  6535.             $numeroFacture = $facture->getNumeroFacture();
  6536.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  6537.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  6538.                     $arrays[$i]['Type de ligne'] = 'Acompte';
  6539.                     $arrays[$i]['Code Société'] = $spvName;
  6540.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  6541.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  6542.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6543.                     $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  6544.                     $arrays[$i]['Date comptable'] = $dateComptable;
  6545.                     $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  6546.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6547.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  6548.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  6549.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  6550. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  6551.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  6552.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6553.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  6554.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  6555.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6556. //                    if($facture->getIsAvoir()){
  6557. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  6558. //                        $a = count($avoirs);
  6559. //                        $b = 1;
  6560. //                        $avoirNum = '';
  6561. //                        foreach ($avoirs as $item){
  6562. //                            if($b == $a){
  6563. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  6564. //                            }else{
  6565. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  6566. //                            }
  6567. //                            $b++;
  6568. //                        }
  6569. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  6570. //                    }else{
  6571.                         $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  6572. //                    }
  6573.                     $arrays[$i]['Code projet'] = '';
  6574.                     $arrays[$i]['libellé projet'] = '';
  6575.                     $arrays[$i]['Compteur facture associée'] = '';
  6576.                     $arrays[$i]['Autoliquidation'] = 0;
  6577.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  6578.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  6579.                     $i++;
  6580.                     if(count($facture->getProjectFactureFinance())>0){
  6581.                         foreach ($facture->getProjectFactureFinance() as $project){
  6582.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  6583.                             $arrays[$i]['Code Société'] = '';
  6584.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  6585.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  6586.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  6587.                             $arrays[$i]['Acompte pour une charge'] = '';
  6588.                             $arrays[$i]['Date comptable'] = '';
  6589.                             $arrays[$i]['Date d’échéance'] = '';
  6590.                             $arrays[$i]['Date de création dans ERPI'] = '';
  6591.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  6592.                             $arrays[$i]['Montant TTC'] = '';
  6593.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  6594.                             $arrays[$i]['Montant à régler'] = '';
  6595.                             $arrays[$i]['Référence facture fournisseur'] = '';
  6596.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  6597.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  6598.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  6599.                             $arrays[$i]['Commentaire comptable'] = '';
  6600.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  6601.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  6602.                             $arrays[$i]['Compteur facture associée'] = '';
  6603.                             $arrays[$i]['Autoliquidation'] = 0;
  6604.                             $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  6605.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  6606.                             $i++;
  6607.                         }
  6608.                     }
  6609.                 }
  6610.             }
  6611.             else{
  6612.                 $arrays[$i]['Type de ligne'] = 'Acompte';
  6613.                 $arrays[$i]['Code Société'] = $spvName;
  6614.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  6615.                 $arrays[$i]['Code budgétaire'] = $classification;
  6616.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6617.                 $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  6618.                 $arrays[$i]['Date comptable'] = $dateComptable;
  6619.                 $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  6620.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6621.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  6622.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  6623.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  6624.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  6625.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6626.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  6627.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  6628.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6629. //                if($facture->getIsAvoir()){
  6630. //                    $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  6631. //                    $a = count($avoirs);
  6632. //                    $b = 1;
  6633. //                    $avoirNum = '';
  6634. //                    foreach ($avoirs as $item){
  6635. //                        if($b == $a){
  6636. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  6637. //                        }else{
  6638. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  6639. //                        }
  6640. //                        $b++;
  6641. //                    }
  6642. //                    $arrays[$i]['Commentaire comptable'] = $avoirNum;
  6643. //                }else{
  6644.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  6645. //                }
  6646.                 $arrays[$i]['Code projet'] = '';
  6647.                 $arrays[$i]['libellé projet'] = '';
  6648.                 $arrays[$i]['Compteur facture associée'] = '';
  6649.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  6650.                 if($facture->getAutoliquidation() == 1){
  6651.                     $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  6652.                 }else{
  6653.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  6654.                 }
  6655.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  6656.                 $i++;
  6657.                 if(count($facture->getProjectFactureFinance())>0){
  6658.                     foreach ($facture->getProjectFactureFinance() as $project){
  6659.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  6660.                         $arrays[$i]['Code Société'] = '';
  6661.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  6662.                         $arrays[$i]['Code budgétaire'] = $classification;
  6663.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  6664.                         $arrays[$i]['Acompte pour une charge'] = '';
  6665.                         $arrays[$i]['Date comptable'] = '';
  6666.                         $arrays[$i]['Date d’échéance'] = '';
  6667.                         $arrays[$i]['Date de création dans ERPI'] = '';
  6668.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  6669.                         $arrays[$i]['Montant TTC'] = '';
  6670.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  6671.                         $arrays[$i]['Montant à régler'] = '';
  6672.                         $arrays[$i]['Référence facture fournisseur'] = '';
  6673.                         $arrays[$i]['Compteur ERPI pièce'] = '';
  6674.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  6675.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  6676.                         $arrays[$i]['Commentaire comptable'] = '';
  6677.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  6678.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  6679.                         $arrays[$i]['Compteur facture associée'] = '';
  6680.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  6681.                         if($facture->getAutoliquidation() == 1){
  6682.                             $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  6683.                         }else{
  6684.                             $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  6685.                         }
  6686.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  6687.                         $i++;
  6688.                     }
  6689.                 }
  6690.             }
  6691.         }
  6692.         return $arrays;
  6693.     }
  6694.     public function c3AcomptesExportXls($arrays,$isNotSend = false,$date = false){
  6695.         if($date){
  6696.             $dateNow = $date;
  6697.         }else{
  6698.             $dateNow = new \DateTime();
  6699.         }
  6700.         $dateNowStr = '_'.$dateNow->format('Ymd').'_'.$dateNow->format('H').'h'.$dateNow->format('i');
  6701.         $fileName = "C3_acomptes".$dateNowStr.".csv";
  6702.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  6703.         if(file_exists($file)){
  6704.             $filesystem = new Filesystem();
  6705.             $filesystem->remove($file);
  6706.         }
  6707.         $spreadsheet = new Spreadsheet();
  6708.         $sheet = $spreadsheet->getActiveSheet();
  6709.         // Head 2
  6710.         $tableHead2 = [
  6711.             'font'=>[
  6712.                 'color'=>[
  6713.                     'rgb'=>'ffffff'
  6714.                 ],
  6715.                 'bold'=>true,
  6716.                 'size'=>12
  6717.             ],
  6718.             'fill'=>[
  6719.                 'fillType' => Fill::FILL_SOLID,
  6720.                 'startColor' => [
  6721.                     'rgb' => '002060'
  6722.                 ]
  6723.             ],
  6724.         ];
  6725.         $tableRand = [
  6726.             'fill'=>[
  6727.                 'fillType' => Fill::FILL_SOLID,
  6728.                 'startColor' => [
  6729.                     'rgb' => 'C8D6EE'
  6730.                 ]
  6731.             ],
  6732.         ];
  6733.         $sheet->setCellValue('A1',"Type de ligne")
  6734.             ->setCellValue('B1',"Code Sage")
  6735.             ->setCellValue('C1',"Code budgétaire")
  6736.             ->setCellValue('D1',"Code fournisseur Evalua")
  6737.             ->setCellValue('E1',"Valeur de charge ou investissement")
  6738.             ->setCellValue('F1',"Date comptable")
  6739.             ->setCellValue('G1',"Date d’échéance")
  6740.             ->setCellValue('H1',"Date de création dans ERPI")
  6741.             ->setCellValue('I1',"Montant HT")
  6742.             ->setCellValue('J1',"Montant TTC")
  6743.             ->setCellValue('K1',"taux de TVA")
  6744.             ->setCellValue('L1',"Montant à régler")
  6745.             ->setCellValue('M1',"Référence facture fournisseur")
  6746.             ->setCellValue('N1',"Compteur ERPI pièce")
  6747.             ->setCellValue('O1',"Compteur ERPI écritures")
  6748.             ->setCellValue('P1',"Commentaire comptable")
  6749.             ->setCellValue('Q1',"Code projet")
  6750.             ->setCellValue('R1',"libellé projet")
  6751.             ->setCellValue('S1',"Compteur facture associée")
  6752.             ->setCellValue('T1',"Autoliquidation")
  6753.             ->setCellValue('U1',"Montant TVA");
  6754.         // Borders a2 z2
  6755.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6756.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6757.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6758.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6759.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6760.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6761.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6762.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6763.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6764.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6765.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6766.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6767.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6768.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6769.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6770.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6771.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6772.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6773.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6774.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6775.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6776.         //width
  6777.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  6778.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  6779.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  6780.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  6781.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  6782.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  6783.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  6784.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  6785.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  6786.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  6787.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  6788.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  6789.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  6790.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  6791.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  6792.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  6793.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  6794.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  6795.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  6796.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  6797.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(25);
  6798.         $spreadsheet->getActiveSheet()->getStyle('A1:U1')->applyFromArray($tableHead2);
  6799.         //loop through the data
  6800.         //current row
  6801.         $row=2;
  6802.         foreach($arrays as $array){
  6803.             $spreadsheet->getActiveSheet()
  6804.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  6805.                 ->setCellValue('B'.$row , $array['Code Sage'])
  6806.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  6807.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  6808.                 ->setCellValue('E'.$row , $array['Acompte pour une charge'])
  6809.                 ->setCellValue('F'.$row , $array['Date comptable'])
  6810.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  6811.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  6812.                 ->setCellValue('I'.$row , $array['Montant HT'])
  6813.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  6814.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  6815.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  6816.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  6817.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  6818.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  6819.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  6820.                 ->setCellValue('Q'.$row , $array['Code projet'])
  6821.                 ->setCellValue('R'.$row , $array['libellé projet'])
  6822.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  6823.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  6824.                 ->setCellValue('U'.$row , $array['Montant TVA'])
  6825.             ;
  6826.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6827.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6828.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6829.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6830.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6831.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6832.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6833.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6834.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6835.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6836.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6837.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6838.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6839.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6840.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6841.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6842.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6843.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6844.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6845.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6846.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6847.             $row++;
  6848.         }
  6849.         $firstRow=1;
  6850.         $lastRow=$row-1;
  6851.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  6852.         $writer = new Csv($spreadsheet);
  6853.         $writer->setDelimiter('|');
  6854.         $writer->setEnclosure('');
  6855.         $writer->setUseBOM(false);
  6856. //        $writer->setOutputEncoding('UTF-8');
  6857.         $writer->save($file);
  6858.         if($isNotSend){
  6859.         }else{
  6860.             $this->sendToServeur($fileName ,'/altarea/comptable',$this->params->get('comptable_altarea_directory'));
  6861.         }
  6862.         return $file;
  6863.     }
  6864.     public function getC4ReglementsExport($date){
  6865.         $factures = $this->em->getRepository(FactureFinance::class)->searchFacturePayee($date);
  6866.         $arrays = [];
  6867.         $i = 0;
  6868.         foreach ($factures as $facture){
  6869.             $banqueFournisseur = '';
  6870.             $ibanFournisseur = '';
  6871.             $bicFournisseur = '';
  6872.             $codePaysFournisseur = '';
  6873.             if ($facture->getFournisseur()) {
  6874.                 if($facture->getRib()) {
  6875.                     $fournisseurBanque = $facture->getRib();
  6876.                 }else {
  6877.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  6878.                 }
  6879.                 if (!$fournisseurBanque) {
  6880.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  6881.                 }
  6882.                 if ($fournisseurBanque) {
  6883.                     $banqueFournisseur = $fournisseurBanque->getBanque();
  6884.                     $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  6885.                     $bicFournisseur = $fournisseurBanque->getBic();
  6886.                 }
  6887.                 $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  6888.             }
  6889. //            $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  6890.             $spvName = '';
  6891.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  6892.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  6893.             $classification = $facture->getClassification();
  6894.             $dateComptable = $facture->getDate()?$facture->getDate()->format('d/m/Y'):'';
  6895.             $dateEcheance = '';
  6896.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  6897.             $numeroFacture = $facture->getNumeroFacture();
  6898. //            if(count($facture->getProjectFactureFinance())>1){
  6899. //                foreach ($facture->getProjectFactureFinance() as $projectFinance){
  6900. //                    $arrays[$i]['Type de ligne'] = 'Reglement';
  6901. //                    $arrays[$i]['Code Société'] = $spvName;
  6902. //                    $arrays[$i]['Code Sage'] = $spvCodeSage;
  6903. //                    $arrays[$i]['Code budgétaire'] = $facture->getClassification();
  6904. //                    $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6905. //                    $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()]:'';
  6906. //                    $arrays[$i]['Date comptable'] = $dateComptable;
  6907. //                    $arrays[$i]['Date d’échéance'] = $dateEcheance;
  6908. //                    $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6909. //                    $arrays[$i]['Montant HT'] = (float)$projectFinance->getMontantHt();
  6910. //                    if($facture->getTauxTva()){
  6911. //                        $tva = (float)$facture->getTauxTva();
  6912. //                    }else{
  6913. //                        $tva = 20;
  6914. //                    }
  6915. //                    $arrays[$i]['Montant TTC'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  6916. //                    $arrays[$i]['taux de TVA'] = $tva;
  6917. //                    $arrays[$i]['Montant à régler'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  6918. //                    $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6919. //                    $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  6920. ////                    $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  6921. ////                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6922. //
  6923. //                    $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$projectFinance->getProject());
  6924. //                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  6925. //
  6926. //                    if($facture->getIsAvoir()){
  6927. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  6928. //                        $a = count($avoirs);
  6929. //                        $b = 1;
  6930. //                        $avoirNum = '';
  6931. //                        foreach ($avoirs as $item){
  6932. //                            if($b == $a){
  6933. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  6934. //                            }else{
  6935. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  6936. //                            }
  6937. //                            $b++;
  6938. //                        }
  6939. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  6940. //                    }else{
  6941. //                        $arrays[$i]['Commentaire comptable'] = $facture->getCommentComptable();
  6942. //                    }
  6943. //                    $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  6944. //                    $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  6945. //                    $arrays[$i]['Compteur facture associée'] = $numeroFacture;
  6946. //                    $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  6947. //                    $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  6948. //                    $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  6949. //                    $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  6950. //                    $i++;
  6951. //                }
  6952. //            }else{
  6953.                 if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  6954.                     foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  6955.                         $arrays[$i]['Type de ligne'] = 'Reglement';
  6956.                         $arrays[$i]['Code Société'] = $spvName;
  6957.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  6958.                         $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  6959.                         $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6960.                         $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  6961.                         $arrays[$i]['Date comptable'] = $dateComptable;
  6962.                         $arrays[$i]['Date d’échéance'] = $dateEcheance;
  6963.                         $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6964.                         $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  6965.                         $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  6966.                         $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  6967.                         $arrays[$i]['Montant à régler'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  6968. //                    $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  6969.                         $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6970.                         $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  6971.                         $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  6972.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6973.                         if($facture->getIsAvoir()){
  6974.                             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  6975.                             $a = count($avoirs);
  6976.                             $b = 1;
  6977.                             $avoirNum = '';
  6978.                             foreach ($avoirs as $item){
  6979.                                 if($b == $a){
  6980.                                     $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  6981.                                 }else{
  6982.                                     $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  6983.                                 }
  6984.                                 $b++;
  6985.                             }
  6986.                             $arrays[$i]['Commentaire comptable'] = substr($avoirNum, 0, 127) ;
  6987.                         }else{
  6988.                             $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  6989.                         }
  6990.                         $arrays[$i]['Code projet'] = '';
  6991.                         $arrays[$i]['libellé projet'] = '';
  6992.                         $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  6993.                         $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  6994.                         $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  6995.                         $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  6996.                         $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  6997.                         $arrays[$i]['Autoliquidation'] = 0;
  6998.                         $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  6999.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  7000.                         $i++;
  7001.                     }
  7002.                 }
  7003.                 else{
  7004.                     $arrays[$i]['Type de ligne'] = 'Reglement';
  7005.                     $arrays[$i]['Code Société'] = $spvName;
  7006.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  7007.                     $arrays[$i]['Code budgétaire'] = $classification;
  7008.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  7009.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  7010.                     $arrays[$i]['Date comptable'] = $dateComptable;
  7011.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  7012.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  7013.                     $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  7014.                     $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  7015.                     $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  7016.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  7017.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  7018.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  7019.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndNotTva($facture);
  7020.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  7021.                     if($facture->getIsAvoir()){
  7022.                         $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  7023.                         $a = count($avoirs);
  7024.                         $b = 1;
  7025.                         $avoirNum = '';
  7026.                         foreach ($avoirs as $item){
  7027.                             if($b == $a){
  7028.                                 $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir();
  7029.                             }else{
  7030.                                 $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir()." / ";
  7031.                             }
  7032.                             $b++;
  7033.                         }
  7034.                         $arrays[$i]['Commentaire comptable'] = substr($avoirNum, 0, 127);
  7035.                     }else{
  7036.                         $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  7037.                     }
  7038. //                    foreach ($facture->getProjectFactureFinance() as $projectFinance){
  7039. //                        $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  7040. //                        $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  7041. //                    }
  7042.                     $arrays[$i]['Code projet'] = '';
  7043.                     $arrays[$i]['libellé projet'] =  '';
  7044.                     $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  7045.                     $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  7046.                     $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  7047.                     $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  7048.                     $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  7049.                     $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  7050.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  7051.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  7052.                     $i++;
  7053.                 }
  7054. //            }
  7055.         }
  7056.         return $arrays;
  7057.     }
  7058.     public function c4ReglementsExportXls($arrays,$isNotSend = false,$date = false){
  7059.         if($date){
  7060.             $dateNow = $date;
  7061.         }else{
  7062.             $dateNow = new \DateTime();
  7063.         }
  7064.         $dateNowStr = '_'.$dateNow->format('Ymd').'_'.$dateNow->format('H').'h'.$dateNow->format('i');
  7065.         $fileName = "C4_reglements".$dateNowStr.".csv";
  7066.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  7067.         if(file_exists($file)){
  7068.             $filesystem = new Filesystem();
  7069.             $filesystem->remove($file);
  7070.         }
  7071.         $spreadsheet = new Spreadsheet();
  7072.         $sheet = $spreadsheet->getActiveSheet();
  7073.         // Head 2
  7074.         $tableHead2 = [
  7075.             'font'=>[
  7076.                 'color'=>[
  7077.                     'rgb'=>'ffffff'
  7078.                 ],
  7079.                 'bold'=>true,
  7080.                 'size'=>12
  7081.             ],
  7082.             'fill'=>[
  7083.                 'fillType' => Fill::FILL_SOLID,
  7084.                 'startColor' => [
  7085.                     'rgb' => '002060'
  7086.                 ]
  7087.             ],
  7088.         ];
  7089.         $tableRand = [
  7090.             'fill'=>[
  7091.                 'fillType' => Fill::FILL_SOLID,
  7092.                 'startColor' => [
  7093.                     'rgb' => 'C8D6EE'
  7094.                 ]
  7095.             ],
  7096.         ];
  7097.         $sheet->setCellValue('A1',"Type de ligne")
  7098.             ->setCellValue('B1',"Code Sage")
  7099.             ->setCellValue('C1',"Code budgétaire")
  7100.             ->setCellValue('D1',"Code fournisseur Evalua")
  7101.             ->setCellValue('E1',"Valeur de charge ou investissement")
  7102.             ->setCellValue('F1',"Date comptable")
  7103.             ->setCellValue('G1',"Date d’échéance")
  7104.             ->setCellValue('H1',"Date de création dans ERPI")
  7105.             ->setCellValue('I1',"Montant HT")
  7106.             ->setCellValue('J1',"Montant TTC")
  7107.             ->setCellValue('K1',"taux de TVA")
  7108.             ->setCellValue('L1',"Montant à régler")
  7109.             ->setCellValue('M1',"Référence facture fournisseur")
  7110.             ->setCellValue('N1',"Compteur ERPI pièce")
  7111.             ->setCellValue('O1',"Compteur ERPI écritures")
  7112.             ->setCellValue('P1',"Commentaire comptable")
  7113.             ->setCellValue('Q1',"Code projet")
  7114.             ->setCellValue('R1',"libellé projet")
  7115.             ->setCellValue('S1',"Compteur facture associée")
  7116.             ->setCellValue('T1',"IBAN fournisseur");
  7117.         // Borders a2 z2
  7118.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7119.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7120.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7121.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7122.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7123.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7124.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7125.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7126.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7127.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7128.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7129.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7130.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7131.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7132.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7133.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7134.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7135.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7136.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7137.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7138.         //width
  7139.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  7140.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  7141.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  7142.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  7143.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  7144.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  7145.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  7146.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  7147.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  7148.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  7149.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  7150.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  7151.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  7152.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  7153.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  7154.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  7155.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  7156.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  7157.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  7158.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  7159.         $spreadsheet->getActiveSheet()->getStyle('A1:V1')->applyFromArray($tableHead2);
  7160.         //loop through the data
  7161.         //current row
  7162.         $row=2;
  7163.         foreach($arrays as $array){
  7164.             $spreadsheet->getActiveSheet()
  7165.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  7166.                 ->setCellValue('B'.$row , $array['Code Sage'])
  7167.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  7168.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  7169.                 ->setCellValue('E'.$row , $array['Facture de charge'])
  7170.                 ->setCellValue('F'.$row , $array['Date comptable'])
  7171.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  7172.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  7173.                 ->setCellValue('I'.$row , $array['Montant HT'])
  7174.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  7175.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  7176.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  7177.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  7178.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  7179.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  7180.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  7181.                 ->setCellValue('Q'.$row , $array['Code projet'])
  7182.                 ->setCellValue('R'.$row , $array['libellé projet'])
  7183.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  7184.                 ->setCellValue('T'.$row , $array['ibanFournisseur'])
  7185.             ;
  7186.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7187.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7188.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7189.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7190.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7191.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7192.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7193.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7194.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7195.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7196.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7197.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7198.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7199.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7200.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7201.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7202.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7203.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7204.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7205.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7206.             $row++;
  7207.         }
  7208.         $firstRow=1;
  7209.         $lastRow=$row-1;
  7210.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":T".$lastRow);
  7211.         $writer = new Csv($spreadsheet);
  7212.         $writer->setDelimiter('|');
  7213.         $writer->setEnclosure('');
  7214.         $writer->setUseBOM(false);
  7215. //        $writer->setOutputEncoding('UTF-8');
  7216.         $writer->save($file);
  7217.         if($isNotSend){
  7218.         }else{
  7219.             $this->sendToServeur($fileName ,'/altarea/comptable',$this->params->get('comptable_altarea_directory'));
  7220.         }
  7221.         return $file;
  7222.     }
  7223.     public function getFacturesByRequestSelectAll($request){
  7224.         $search = $request->get('search');
  7225.         $spv = $request->get('spv');
  7226.         $fournisseur = $request->get('fournisseur');
  7227.         $status = $request->get('statusFactureFinance');
  7228.         $btnTypeTab = $request->get('btnTypeTab');
  7229.         $responsableProject = $request->get('responsableProject');
  7230.         $responsableDevProject = $request->get('responsableDevProject');
  7231.         $paiementFactureDate = $request->get('paiementFactureDate');
  7232.         $paiementFactureDate1 = $request->get('paiementFactureDate1') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate1')) : null ;
  7233.         $paiementFactureDate2 = $request->get('paiementFactureDate2') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate2')) : null;
  7234.         $filters = [
  7235.             'query' => trim(@$search['value']),
  7236.             'spv' => $spv,
  7237.             'fournisseur' => $fournisseur,
  7238.             'status' => $status,
  7239.             'paiementFactureDate' => $paiementFactureDate,
  7240.             'btnTypeTab' => $btnTypeTab,
  7241.             'paiementFactureDate1' => $paiementFactureDate1,
  7242.             'paiementFactureDate2' => $paiementFactureDate2,
  7243.             'responsableProject' => $responsableProject,
  7244.             'responsableDevProject' => $responsableDevProject
  7245.         ];
  7246.         $factureFinances = $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters);
  7247.         return $factureFinances ;
  7248.     }
  7249.     public function sendToServeur($nameFile ,$pathServeur,$pathLocal){
  7250.         $ftp_server="162.19.120.192";
  7251.         $ftp_user_name="altarea-prod";
  7252.         $ftp_user_pass="E_AeX_red2xi2vf1";
  7253.         $conn_id = ftp_ssl_connect($ftp_server);
  7254.         $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
  7255.         ftp_pasv($conn_id, true) or die("Cannot switch to passive mode");
  7256.         if (ftp_put($conn_id, $pathServeur.'/'.$nameFile , $pathLocal.'/'.$nameFile, FTP_BINARY)) {
  7257.             return true;
  7258.         } else {
  7259.             return false;
  7260.         }
  7261.     }
  7262.     public function addPdFactureAssocieBrouillon($array){
  7263.         $tab = [];
  7264.         if($array){
  7265.             foreach ($array as $item){
  7266.                 $tokenFile = $item['tokenFile'];
  7267.                 $tokenFacture= $item['tokenFacture'];
  7268.                 $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  7269.                 $factureBrouillon = $this->em->getRepository(FactureFinanceBrouillon::class)->findOneBy(['token' => $tokenFacture]);
  7270.                 if($docUpload && $factureBrouillon){
  7271.                     $factureBrouillon->setFileFacture($docUpload);
  7272.                     $this->em->persist($factureBrouillon);
  7273.                     $this->em->flush();
  7274.                     $tab[] = $factureBrouillon->getToken();
  7275.                 }
  7276.             }
  7277.         }
  7278.         return $tab;
  7279.     }
  7280.     public function supprimeFactureBrouillon($request,$token)
  7281.     {
  7282.         $facture = $this->em->getRepository(FactureFinanceBrouillon::class)->findOneBy(['token'=>$token]);
  7283.         if($facture){
  7284.             $facture->setStatus(FactureFinance::STATUS_Brouillon_delete);
  7285.             $this->em->persist($facture);
  7286.             $this->em->flush();
  7287.         }
  7288.         return [
  7289.             'success' => true,
  7290.         ];
  7291.     }
  7292.     public function getFacturesBrouillonByRequestSelectAll($request){
  7293.         $search = $request->get('search');
  7294.         $spv = $request->get('spv');
  7295.         $fournisseur = $request->get('fournisseur');
  7296.         $status = $request->get('statusFactureFinance');
  7297.         $btnTypeTab = $request->get('btnTypeTab');
  7298.         $responsableProject = $request->get('responsableProject');
  7299.         $responsableDevProject = $request->get('responsableDevProject');
  7300.         $paiementFactureDate = $request->get('paiementFactureDate');
  7301.         $paiementFactureDate1 = $request->get('paiementFactureDate1') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate1')) : null ;
  7302.         $paiementFactureDate2 = $request->get('paiementFactureDate2') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate2')) : null;
  7303.         $filters = [
  7304.             'query' => trim(@$search['value']),
  7305.             'spv' => $spv,
  7306.             'fournisseur' => $fournisseur,
  7307.             'status' => $status,
  7308.             'paiementFactureDate' => $paiementFactureDate,
  7309.             'btnTypeTab' => $btnTypeTab,
  7310.             'paiementFactureDate1' => $paiementFactureDate1,
  7311.             'paiementFactureDate2' => $paiementFactureDate2,
  7312.             'responsableProject' => $responsableProject,
  7313.             'responsableDevProject' => $responsableDevProject
  7314.         ];
  7315.         $factureFinances = $this->em->getRepository(\App\Entity\FactureFinanceBrouillon::class)->search($filters);
  7316.         return $factureFinances ;
  7317.     }
  7318.     public function getC1FacturesExportDateRange($dateStart,$dateEnd){
  7319.         $factures = $this->em->getRepository(FactureFinance::class)->searchFactureValideDateRange($dateStart,$dateEnd);
  7320.         $arrays = [];
  7321.         $i = 0;
  7322.         foreach ($factures as $facture){
  7323.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  7324.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  7325.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  7326.             $classification = $facture->getClassification();
  7327.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  7328.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  7329.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  7330.             $numeroFacture = $facture->getNumeroFacture();
  7331.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  7332.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  7333.                     $arrays[$i]['Type de ligne'] = 'Facture';
  7334.                     $arrays[$i]['Code Société'] = $spvName;
  7335.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  7336.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  7337.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  7338.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  7339.                     $arrays[$i]['Date comptable'] = $dateComptable;
  7340.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  7341.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  7342.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  7343.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  7344.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  7345. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  7346.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  7347.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  7348.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  7349.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  7350.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  7351.                     $arrays[$i]['Commentaire comptable'] = $facture->getCommentComptable();
  7352.                     $arrays[$i]['Code projet'] = '';
  7353.                     $arrays[$i]['libellé projet'] = '';
  7354.                     $arrays[$i]['Compteur facture associée'] = '';
  7355.                     $arrays[$i]['Autoliquidation'] = 0;
  7356.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  7357.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  7358.                     $i++;
  7359.                     if(count($facture->getProjectFactureFinance())>0){
  7360.                         foreach ($facture->getProjectFactureFinance() as $project){
  7361.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  7362.                             $arrays[$i]['Code Société'] = '';
  7363.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  7364.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  7365.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  7366.                             $arrays[$i]['Facture de charge'] = '';
  7367.                             $arrays[$i]['Date comptable'] = '';
  7368.                             $arrays[$i]['Date d’échéance'] = '';
  7369.                             $arrays[$i]['Date de création dans ERPI'] = '';
  7370.                             $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$tvaMultiple->getMontantHt()),2,'.','');
  7371.                             $arrays[$i]['Montant TTC'] = '';
  7372.                             $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$tvaMultiple->getTauxTva()),2,'.','');
  7373.                             $arrays[$i]['Montant à régler'] = '';
  7374.                             $arrays[$i]['Référence facture fournisseur'] = '';
  7375.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  7376.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  7377.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  7378.                             $arrays[$i]['Commentaire comptable'] = '';
  7379.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  7380.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  7381.                             $arrays[$i]['Compteur facture associée'] = '';
  7382.                             $arrays[$i]['Autoliquidation'] = 0;
  7383.                             $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  7384.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  7385.                             $i++;
  7386.                         }
  7387.                     }
  7388.                 }
  7389.             }
  7390.             else{
  7391.                 $arrays[$i]['Type de ligne'] = 'Facture';
  7392.                 $arrays[$i]['Code Société'] = $spvName;
  7393.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  7394.                 $arrays[$i]['Code budgétaire'] = $classification;
  7395.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  7396.                 $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  7397.                 $arrays[$i]['Date comptable'] = $dateComptable;
  7398.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  7399.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  7400.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  7401.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  7402.                 $arrays[$i]['taux de TVA'] =  number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  7403.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  7404.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  7405.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  7406.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  7407.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  7408.                 $arrays[$i]['Commentaire comptable'] = $facture->getCommentComptable();
  7409.                 $arrays[$i]['Code projet'] = '';
  7410.                 $arrays[$i]['libellé projet'] = '';
  7411.                 $arrays[$i]['Compteur facture associée'] = '';
  7412.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  7413.                 if($facture->getAutoliquidation() == 1){
  7414.                     $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  7415.                 }else{
  7416.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  7417.                 }
  7418.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  7419.                 $i++;
  7420.                 if(count($facture->getProjectFactureFinance())>0){
  7421.                     foreach ($facture->getProjectFactureFinance() as $project){
  7422.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  7423.                         $arrays[$i]['Code Société'] = '';
  7424.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  7425.                         $arrays[$i]['Code budgétaire'] = $classification;
  7426.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  7427.                         $arrays[$i]['Facture de charge'] = '';
  7428.                         $arrays[$i]['Date comptable'] = '';
  7429.                         $arrays[$i]['Date d’échéance'] = '';
  7430.                         $arrays[$i]['Date de création dans ERPI'] = '';
  7431.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  7432.                         $arrays[$i]['Montant TTC'] = '';
  7433.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  7434.                         $arrays[$i]['Montant à régler'] = '';
  7435.                         $arrays[$i]['Référence facture fournisseur'] = '';
  7436.                         $arrays[$i]['Compteur ERPI pièce'] =  $facture->getCompteurErpiPiece();
  7437.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  7438.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  7439.                         $arrays[$i]['Commentaire comptable'] = '';
  7440.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  7441.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  7442.                         $arrays[$i]['Compteur facture associée'] = '';
  7443.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  7444.                         if($facture->getAutoliquidation() == 1){
  7445.                             $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  7446.                         }else{
  7447.                             $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  7448.                         }
  7449.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  7450.                         $i++;
  7451.                     }
  7452.                 }
  7453.             }
  7454.         }
  7455.         return $arrays;
  7456.     }
  7457.     public function c1FacturesExportXlsDateRange($arrays,$dateStart,$dateEnd){
  7458.         $dateNow = new \DateTime();
  7459.         $dateNowStr = '_'.$dateStart->format('Ymd').'_'.$dateStart->format('H').'h'.$dateStart->format('i').'___'.$dateEnd->format('Ymd').'_'.$dateEnd->format('H').'h'.$dateEnd->format('i');
  7460.         $fileName = "C1_factures".$dateNowStr.".csv";
  7461.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  7462.         if(file_exists($file)){
  7463.             $filesystem = new Filesystem();
  7464.             $filesystem->remove($file);
  7465.         }
  7466.         $spreadsheet = new Spreadsheet();
  7467.         $sheet = $spreadsheet->getActiveSheet();
  7468.         // Head 2
  7469.         $tableHead2 = [
  7470.             'font'=>[
  7471.                 'color'=>[
  7472.                     'rgb'=>'ffffff'
  7473.                 ],
  7474.                 'bold'=>true,
  7475.                 'size'=>12
  7476.             ],
  7477.             'fill'=>[
  7478.                 'fillType' => Fill::FILL_SOLID,
  7479.                 'startColor' => [
  7480.                     'rgb' => '002060'
  7481.                 ]
  7482.             ],
  7483.         ];
  7484.         $tableRand = [
  7485.             'fill'=>[
  7486.                 'fillType' => Fill::FILL_SOLID,
  7487.                 'startColor' => [
  7488.                     'rgb' => 'C8D6EE'
  7489.                 ]
  7490.             ],
  7491.         ];
  7492.         $sheet->setCellValue('A1',"Type de ligne")
  7493.             ->setCellValue('B1',"Code Sage")
  7494.             ->setCellValue('C1',"Code budgétaire")
  7495.             ->setCellValue('D1',"Code fournisseur Evalua")
  7496.             ->setCellValue('E1',"Valeur de charge ou investissement")
  7497.             ->setCellValue('F1',"Date comptable")
  7498.             ->setCellValue('G1',"Date d’échéance")
  7499.             ->setCellValue('H1',"Date de création dans ERPI")
  7500.             ->setCellValue('I1',"Montant HT")
  7501.             ->setCellValue('J1',"Montant TTC")
  7502.             ->setCellValue('K1',"taux de TVA")
  7503.             ->setCellValue('L1',"Montant à régler")
  7504.             ->setCellValue('M1',"Référence facture fournisseur")
  7505.             ->setCellValue('N1',"Compteur ERPI pièce")
  7506.             ->setCellValue('O1',"Compteur ERPI écritures")
  7507.             ->setCellValue('P1',"Commentaire comptable")
  7508.             ->setCellValue('Q1',"Code projet")
  7509.             ->setCellValue('R1',"libellé projet")
  7510.             ->setCellValue('S1',"Compteur facture associée")
  7511.             ->setCellValue('T1',"Autoliquidation")
  7512.             ->setCellValue('U1',"Montant TVA");
  7513.         // Borders a2 z2
  7514.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7515.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7516.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7517.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7518.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7519.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7520.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7521.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7522.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7523.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7524.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7525.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7526.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7527.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7528.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7529.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7530.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7531.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7532.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7533.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7534.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7535.         //width
  7536.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  7537.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  7538.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  7539.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  7540.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  7541.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  7542.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  7543.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  7544.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  7545.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  7546.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  7547.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  7548.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  7549.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  7550.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  7551.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  7552.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  7553.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  7554.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  7555.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  7556.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(25);
  7557.         $spreadsheet->getActiveSheet()->getStyle('A1:U1')->applyFromArray($tableHead2);
  7558.         //loop through the data
  7559.         //current row
  7560.         $row=2;
  7561.         foreach($arrays as $array){
  7562.             $spreadsheet->getActiveSheet()
  7563.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  7564.                 ->setCellValue('B'.$row , $array['Code Sage'])
  7565.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  7566.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  7567.                 ->setCellValue('E'.$row , $array['Facture de charge'])
  7568.                 ->setCellValue('F'.$row , $array['Date comptable'])
  7569.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  7570.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  7571.                 ->setCellValue('I'.$row , $array['Montant HT'])
  7572.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  7573.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  7574.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  7575.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  7576.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  7577.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  7578.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  7579.                 ->setCellValue('Q'.$row , $array['Code projet'])
  7580.                 ->setCellValue('R'.$row , $array['libellé projet'])
  7581.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  7582.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  7583.                 ->setCellValue('U'.$row , $array['Montant TVA'])
  7584.             ;
  7585.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7586.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7587.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7588.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7589.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7590.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7591.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7592.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7593.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7594.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7595.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7596.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7597.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7598.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7599.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7600.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7601.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7602.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7603.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7604.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7605.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7606.             $row++;
  7607.         }
  7608.         $firstRow=1;
  7609.         $lastRow=$row-1;
  7610.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  7611.         $writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
  7612.         $writer->setDelimiter('|');
  7613.         $writer->setEnclosure('');
  7614.         $writer->setUseBOM(false);
  7615.         $writer->save($file);
  7616.         return $file;
  7617.     }
  7618.     public function getC2AvoirExportDateRange($dateStart,$dateEnd){
  7619.         $avoirs = $this->em->getRepository(Avoir::class)->searchAvoirValideDateRange($dateStart,$dateEnd);
  7620.         $arrays = [];
  7621.         $i = 0;
  7622.         foreach ($avoirs as $avoir){
  7623.             $spvName = $avoir->getSpv()?$avoir->getSpv()->getName():'';
  7624.             $spvCodeSage = $avoir->getSpv()?$avoir->getSpv()->getCodeSage():'';
  7625.             $fournisseurCode = $avoir->getFournisseur()?$avoir->getFournisseur()->getCodeFournisseur():'';
  7626.             $classification = $avoir->getClassification();
  7627.             $dateComptable = $avoir->getDateAvoir()?$avoir->getDateAvoir()->format('d/m/Y'):'';
  7628.             $dateEcheance = '';
  7629.             $dateCreation = $avoir->getCreatedAt()?$avoir->getCreatedAt()->format('d/m/Y'):'';
  7630.             $numeroFacture = $avoir->getNumeroAvoir();
  7631.             if(count($avoir->getTvaAvoir())>0 && $avoir->getTauxTva() == 0){
  7632.                 foreach ($avoir->getTvaAvoir() as $tvaMultiple){
  7633.                     $arrays[$i]['Type de ligne'] = 'Avoir';
  7634.                     $arrays[$i]['Code Société'] = $spvName;
  7635.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  7636.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  7637.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  7638.                     $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  7639.                     $arrays[$i]['Date comptable'] = $dateComptable;
  7640.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  7641.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  7642.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  7643.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  7644.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  7645.                     $arrays[$i]['Montant à régler'] = '';
  7646.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  7647.                     $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  7648.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTva($avoir,$tvaMultiple);
  7649.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  7650.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', $avoir->getNote());
  7651.                     $arrays[$i]['Code projet'] = '';
  7652.                     $arrays[$i]['libellé projet'] = '';
  7653.                     $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  7654.                     $factureAssocie = '';
  7655.                     if ($avoirFactures) {
  7656.                         $h = 1;
  7657.                         $total = count($avoirFactures);
  7658.                         foreach ($avoirFactures as $avoirFacture) {
  7659.                             if ($total == $h) {
  7660.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  7661.                             } else {
  7662.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  7663.                             }
  7664.                             $h++;
  7665.                         }
  7666.                     }
  7667.                     $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  7668.                     $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  7669.                     if($avoir->getAutoliquidation() == 1){
  7670.                         $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  7671.                     }else{
  7672.                         $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  7673.                     }
  7674.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  7675.                     $i++;
  7676.                     if(count($avoir->getProjectAvoir())>0){
  7677.                         foreach ($avoir->getProjectAvoir() as $project){
  7678.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  7679.                             $arrays[$i]['Code Société'] = '';
  7680.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  7681.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  7682.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  7683.                             $arrays[$i]['Avoir de charge'] = '';
  7684.                             $arrays[$i]['Date comptable'] = '';
  7685.                             $arrays[$i]['Date d’échéance'] = '';
  7686.                             $arrays[$i]['Date de création dans ERPI'] = '';
  7687. //                            if (count($avoir->getProjectAvoir()) == 1) {
  7688. //                                $arrays[$i]['Montant HT'] = (float)$avoir->getMonatantHt();
  7689. //                            } else {
  7690. //                                $arrays[$i]['Montant HT'] = (float)$project->getMontantHt();
  7691. //                            }
  7692. //                            $arrays[$i]['Montant TTC'] = '';
  7693. //                            $arrays[$i]['taux de TVA'] = '';
  7694.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  7695.                             $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  7696.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  7697.                             $arrays[$i]['Montant à régler'] = '';
  7698.                             $arrays[$i]['Référence facture fournisseur'] = '';
  7699.                             $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  7700.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTvaProject($avoir,$tvaMultiple,$project->getProject());
  7701.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  7702.                             $arrays[$i]['Commentaire comptable'] = '';
  7703.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  7704.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  7705.                             $arrays[$i]['Compteur facture associée'] = '';
  7706.                             $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  7707.                             if($avoir->getAutoliquidation() == 1){
  7708.                                 $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  7709.                             }else{
  7710.                                 $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  7711.                             }
  7712.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  7713.                             $i++;
  7714.                         }
  7715.                     }
  7716.                 }
  7717.             }
  7718.             else {
  7719.                 $arrays[$i]['Type de ligne'] = 'Avoir';
  7720.                 $arrays[$i]['Code Société'] = $spvName;
  7721.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  7722.                 $arrays[$i]['Code budgétaire'] = $classification;
  7723.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  7724.                 $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]) ? self::CHARGE_INVESTISSEMENT_DEPENSE[$classification] : '';
  7725.                 $arrays[$i]['Date comptable'] = $dateComptable;
  7726.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  7727.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  7728.                 $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  7729.                 if($avoirs){
  7730.                     $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  7731.                     $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  7732.                     $montantHt = $montantTtc / (1 + ($tauxTva/100));
  7733.                     $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  7734.                     $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  7735.                     $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  7736.                     $tvaMontant = $tauxTva * $montantHt / 100;
  7737.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  7738.                 }else{
  7739.                     $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$avoir->getMonatantHt()),2,'.','');
  7740.                     $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$avoir->getMonatantTtc()),2,'.','');
  7741.                     $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$avoir->getTauxTva()),2,'.','');
  7742.                     if($avoir->getAutoliquidation() == 1){
  7743.                         $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $avoir->getTauxTva())['tva'];
  7744.                     }else{
  7745.                         $tvaMontant = (float)str_replace(',','.',$avoir->getTauxTva()) * (float)str_replace(',','.',$avoir->getMonatantHt()) / 100;
  7746.                     }
  7747.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  7748.                 }
  7749.                 $arrays[$i]['Montant à régler'] = '';
  7750.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  7751.                 $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  7752.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTva($avoir);
  7753.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  7754.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', $avoir->getNote());
  7755.                 $arrays[$i]['Code projet'] = '';
  7756.                 $arrays[$i]['libellé projet'] = '';
  7757.                 $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  7758.                 $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  7759.                 $factureAssocie = '';
  7760.                 if ($avoirFactures) {
  7761.                     $h = 1;
  7762.                     $total = count($avoirFactures);
  7763.                     foreach ($avoirFactures as $avoirFacture) {
  7764.                         if ($total == $h) {
  7765.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  7766.                         } else {
  7767.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  7768.                         }
  7769.                         $h++;
  7770.                     }
  7771.                 }
  7772.                 $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  7773.                 $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  7774.                 $i++;
  7775.                 if (count($avoir->getProjectAvoir()) > 0) {
  7776.                     foreach ($avoir->getProjectAvoir() as $project) {
  7777.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  7778.                         $arrays[$i]['Code Société'] = '';
  7779.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  7780.                         $arrays[$i]['Code budgétaire'] = $classification;
  7781.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  7782.                         $arrays[$i]['Avoir de charge'] = '';
  7783.                         $arrays[$i]['Date comptable'] = '';
  7784.                         $arrays[$i]['Date d’échéance'] = '';
  7785.                         $arrays[$i]['Date de création dans ERPI'] = '';
  7786.                         if (count($avoir->getProjectAvoir()) == 1) {
  7787.                             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir->getId()]);
  7788.                             if ($avoirs) {
  7789.                                 $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  7790.                                 $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  7791.                                 $montantHt = $montantTtc / (1 + ($tauxTva / 100));
  7792.                                 $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  7793.                                 $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  7794.                                 $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  7795.                                 $tvaMontant = $tauxTva * $montantHt / 100;
  7796.                                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  7797.                             } else {
  7798.                                 $arrays[$i]['Montant HT'] = number_format((float)$avoir->getMonatantHt(),2,'.','');
  7799.                                 $arrays[$i]['Montant TTC'] = number_format((float)$avoir->getMonatantTtc(),2,'.','');
  7800.                                 $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  7801.                                 if($avoir->getAutoliquidation() == 1){
  7802.                                     $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $avoir->getTauxTva())['tva'];
  7803.                                 }else{
  7804.                                     $tvaMontant = (float)str_replace(',','.',$avoir->getTauxTva()) * (float)str_replace(',','.',$avoir->getMonatantHt()) / 100;
  7805.                                 }
  7806.                                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  7807.                             }
  7808.                         }else{
  7809.                             $montantHt = (float)str_replace(',','.',$avoir->getMonatantHt());
  7810.                             $tauxTva = $avoir->getTauxTva() && (float)$avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  7811.                             $arrays[$i]['Montant HT'] = number_format($montantHt,2,'.','');
  7812.                             $arrays[$i]['Montant TTC'] = number_format($montantHt + (1 *( $tauxTva/100)),2,'.','');
  7813.                             $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  7814.                             if($avoir->getAutoliquidation() == 1){
  7815.                                 $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $tauxTva)['tva'];
  7816.                             }else{
  7817.                                 $tvaMontant = $tauxTva * $montantHt / 100;
  7818.                             }
  7819.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  7820.                         }
  7821.                         $arrays[$i]['Montant à régler'] = '';
  7822.                         $arrays[$i]['Référence facture fournisseur'] = '';
  7823.                         $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  7824.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTvaProject($avoir, $project->getProject());
  7825.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  7826.                         $arrays[$i]['Commentaire comptable'] = '';
  7827.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  7828.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  7829.                         $arrays[$i]['Compteur facture associée'] = '';
  7830.                         $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  7831.                         $i++;
  7832.                     }
  7833.                 }
  7834.             }
  7835.         }
  7836.         return $arrays;
  7837.     }
  7838.     public function c2AvoirExportXlsDateRange($arrays,$dateStart,$dateEnd){
  7839.         $dateNow = new \DateTime();
  7840.         $dateNowStr = '_'.$dateStart->format('Ymd').'_'.$dateStart->format('H').'h'.$dateStart->format('i').'___'.$dateEnd->format('Ymd').'_'.$dateEnd->format('H').'h'.$dateEnd->format('i');
  7841.         $fileName = "C2_avoirs".$dateNowStr.".csv";
  7842.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  7843.         if(file_exists($file)){
  7844.             $filesystem = new Filesystem();
  7845.             $filesystem->remove($file);
  7846.         }
  7847.         $spreadsheet = new Spreadsheet();
  7848.         $sheet = $spreadsheet->getActiveSheet();
  7849.         // Head 2
  7850.         $tableHead2 = [
  7851.             'font'=>[
  7852.                 'color'=>[
  7853.                     'rgb'=>'ffffff'
  7854.                 ],
  7855.                 'bold'=>true,
  7856.                 'size'=>12
  7857.             ],
  7858.             'fill'=>[
  7859.                 'fillType' => Fill::FILL_SOLID,
  7860.                 'startColor' => [
  7861.                     'rgb' => '002060'
  7862.                 ]
  7863.             ],
  7864.         ];
  7865.         $tableRand = [
  7866.             'fill'=>[
  7867.                 'fillType' => Fill::FILL_SOLID,
  7868.                 'startColor' => [
  7869.                     'rgb' => 'C8D6EE'
  7870.                 ]
  7871.             ],
  7872.         ];
  7873.         $sheet->setCellValue('A1',"Type de ligne")
  7874.             ->setCellValue('B1',"Code Sage")
  7875.             ->setCellValue('C1',"Code budgétaire")
  7876.             ->setCellValue('D1',"Code fournisseur Evalua")
  7877.             ->setCellValue('E1',"Valeur de charge ou investissement")
  7878.             ->setCellValue('F1',"Date comptable")
  7879.             ->setCellValue('G1',"Date d’échéance")
  7880.             ->setCellValue('H1',"Date de création dans ERPI")
  7881.             ->setCellValue('I1',"Montant HT")
  7882.             ->setCellValue('J1',"Montant TTC")
  7883.             ->setCellValue('K1',"taux de TVA")
  7884.             ->setCellValue('L1',"Montant à régler")
  7885.             ->setCellValue('M1',"Référence facture fournisseur")
  7886.             ->setCellValue('N1',"Compteur ERPI pièce")
  7887.             ->setCellValue('O1',"Compteur ERPI écritures")
  7888.             ->setCellValue('P1',"Commentaire comptable")
  7889.             ->setCellValue('Q1',"Code projet")
  7890.             ->setCellValue('R1',"libellé projet")
  7891.             ->setCellValue('S1',"Compteur facture associée")
  7892.             ->setCellValue('T1',"Autoliquidation")
  7893.             ->setCellValue('U1',"Montant TVA");
  7894.         // Borders a2 z2
  7895.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7896.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7897.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7898.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7899.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7900.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7901.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7902.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7903.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7904.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7905.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7906.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7907.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7908.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7909.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7910.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7911.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7912.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7913.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7914.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7915.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7916.         //width
  7917.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  7918.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  7919.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  7920.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  7921.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  7922.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  7923.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  7924.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  7925.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  7926.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  7927.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  7928.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  7929.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  7930.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  7931.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  7932.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  7933.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  7934.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  7935.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  7936.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  7937.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(25);
  7938.         $spreadsheet->getActiveSheet()->getStyle('A1:U1')->applyFromArray($tableHead2);
  7939.         //loop through the data
  7940.         //current row
  7941.         $row=2;
  7942.         foreach($arrays as $array){
  7943.             $spreadsheet->getActiveSheet()
  7944.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  7945.                 ->setCellValue('B'.$row , $array['Code Sage'])
  7946.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  7947.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  7948.                 ->setCellValue('E'.$row , $array['Avoir de charge'])
  7949.                 ->setCellValue('F'.$row , $array['Date comptable'])
  7950.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  7951.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  7952.                 ->setCellValue('I'.$row , $array['Montant HT'])
  7953.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  7954.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  7955.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  7956.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  7957.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  7958.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  7959.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  7960.                 ->setCellValue('Q'.$row , $array['Code projet'])
  7961.                 ->setCellValue('R'.$row , $array['libellé projet'])
  7962.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  7963.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  7964.                 ->setCellValue('U'.$row , $array['Montant TVA']);
  7965.             ;
  7966.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7967.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7968.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7969.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7970.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7971.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7972.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7973.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7974.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7975.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7976.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7977.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7978.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7979.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7980.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7981.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7982.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7983.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7984.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7985.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7986.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7987.             $row++;
  7988.         }
  7989.         $firstRow=1;
  7990.         $lastRow=$row-1;
  7991.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  7992.         $writer = new Csv($spreadsheet);
  7993.         $writer->setDelimiter('|');
  7994.         $writer->setEnclosure('');
  7995.         $writer->setUseBOM(false);
  7996. //        $writer->setOutputEncoding('UTF-8');
  7997.         $writer->save($file);
  7998.         return $file;
  7999.     }
  8000.     public function getC3AcomptesExportDateRange($dateStart,$dateEnd){
  8001.         $factures = $this->em->getRepository(FactureFinance::class)->searchAcompteValideDateRange($dateStart,$dateEnd);
  8002.         $arrays = [];
  8003.         $i = 0;
  8004.         foreach ($factures as $facture){
  8005.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  8006.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  8007.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  8008.             $classification = $facture->getClassification();
  8009.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  8010.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  8011.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  8012.             $numeroFacture = $facture->getNumeroFacture();
  8013.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  8014.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  8015.                     $arrays[$i]['Type de ligne'] = 'Acompte';
  8016.                     $arrays[$i]['Code Société'] = $spvName;
  8017.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  8018.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  8019.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  8020.                     $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  8021.                     $arrays[$i]['Date comptable'] = $dateComptable;
  8022.                     $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  8023.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  8024.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  8025.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  8026.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  8027. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  8028.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  8029.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  8030.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  8031.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  8032.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  8033.                     $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  8034. //                    if($facture->getIsAvoir()){
  8035. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  8036. //                        $a = count($avoirs);
  8037. //                        $b = 1;
  8038. //                        $avoirNum = '';
  8039. //                        foreach ($avoirs as $item){
  8040. //                            if($b == $a){
  8041. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  8042. //                            }else{
  8043. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  8044. //                            }
  8045. //                            $b++;
  8046. //                        }
  8047. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  8048. //                    }else{
  8049.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  8050. //                    }
  8051.                     $arrays[$i]['Code projet'] = '';
  8052.                     $arrays[$i]['libellé projet'] = '';
  8053.                     $arrays[$i]['Compteur facture associée'] = '';
  8054.                     if($facture->getAutoliquidation() == 1){
  8055.                         $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  8056.                     }else{
  8057.                         $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  8058.                     }
  8059.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  8060.                     $i++;
  8061.                     if(count($facture->getProjectFactureFinance())>0){
  8062.                         foreach ($facture->getProjectFactureFinance() as $project){
  8063.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  8064.                             $arrays[$i]['Code Société'] = '';
  8065.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  8066.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  8067.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  8068.                             $arrays[$i]['Acompte pour une charge'] = '';
  8069.                             $arrays[$i]['Date comptable'] = '';
  8070.                             $arrays[$i]['Date d’échéance'] = '';
  8071.                             $arrays[$i]['Date de création dans ERPI'] = '';
  8072.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  8073.                             $arrays[$i]['Montant TTC'] = '';
  8074.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  8075.                             $arrays[$i]['Montant à régler'] = '';
  8076.                             $arrays[$i]['Référence facture fournisseur'] = '';
  8077.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  8078.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  8079.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  8080.                             $arrays[$i]['Commentaire comptable'] = '';
  8081.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  8082.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  8083.                             $arrays[$i]['Compteur facture associée'] = '';
  8084.                             $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  8085.                             if($facture->getAutoliquidation() == 1){
  8086.                                 $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  8087.                             }else{
  8088.                                 $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  8089.                             }
  8090.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  8091.                             $i++;
  8092.                         }
  8093.                     }
  8094.                 }
  8095.             }
  8096.             else{
  8097.                 $arrays[$i]['Type de ligne'] = 'Acompte';
  8098.                 $arrays[$i]['Code Société'] = $spvName;
  8099.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  8100.                 $arrays[$i]['Code budgétaire'] = $classification;
  8101.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  8102.                 $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  8103.                 $arrays[$i]['Date comptable'] = $dateComptable;
  8104.                 $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  8105.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  8106.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  8107.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  8108.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  8109.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  8110.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  8111.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  8112.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  8113.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  8114. //                if($facture->getIsAvoir()){
  8115. //                    $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  8116. //                    $a = count($avoirs);
  8117. //                    $b = 1;
  8118. //                    $avoirNum = '';
  8119. //                    foreach ($avoirs as $item){
  8120. //                        if($b == $a){
  8121. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  8122. //                        }else{
  8123. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  8124. //                        }
  8125. //                        $b++;
  8126. //                    }
  8127. //                    $arrays[$i]['Commentaire comptable'] = $avoirNum;
  8128. //                }else{
  8129.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  8130. //                }
  8131.                 $arrays[$i]['Code projet'] = '';
  8132.                 $arrays[$i]['libellé projet'] = '';
  8133.                 $arrays[$i]['Compteur facture associée'] = '';
  8134.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  8135.                 if($facture->getAutoliquidation() == 1){
  8136.                     $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  8137.                 }else{
  8138.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  8139.                 }
  8140.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  8141.                 $i++;
  8142.                 if(count($facture->getProjectFactureFinance())>0){
  8143.                     foreach ($facture->getProjectFactureFinance() as $project){
  8144.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  8145.                         $arrays[$i]['Code Société'] = '';
  8146.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  8147.                         $arrays[$i]['Code budgétaire'] = $classification;
  8148.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  8149.                         $arrays[$i]['Acompte pour une charge'] = '';
  8150.                         $arrays[$i]['Date comptable'] = '';
  8151.                         $arrays[$i]['Date d’échéance'] = '';
  8152.                         $arrays[$i]['Date de création dans ERPI'] = '';
  8153.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  8154.                         $arrays[$i]['Montant TTC'] = '';
  8155.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  8156.                         $arrays[$i]['Montant à régler'] = '';
  8157.                         $arrays[$i]['Référence facture fournisseur'] = '';
  8158.                         $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  8159.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  8160.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  8161.                         $arrays[$i]['Commentaire comptable'] = '';
  8162.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  8163.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  8164.                         $arrays[$i]['Compteur facture associée'] = '';
  8165.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  8166.                         if($facture->getAutoliquidation() == 1){
  8167.                             $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  8168.                         }else{
  8169.                             $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  8170.                         }
  8171.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  8172.                         $i++;
  8173.                     }
  8174.                 }
  8175.             }
  8176.         }
  8177.         return $arrays;
  8178.     }
  8179.     public function c3AcomptesExportXlsDateRange($arrays,$dateStart,$dateEnd){
  8180.         $dateNow = new \DateTime();
  8181.         $dateNowStr = '_'.$dateStart->format('Ymd').'_'.$dateStart->format('H').'h'.$dateStart->format('i').'___'.$dateEnd->format('Ymd').'_'.$dateEnd->format('H').'h'.$dateEnd->format('i');
  8182.         $fileName = "C3_acomptes".$dateNowStr.".csv";
  8183.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  8184.         if(file_exists($file)){
  8185.             $filesystem = new Filesystem();
  8186.             $filesystem->remove($file);
  8187.         }
  8188.         $spreadsheet = new Spreadsheet();
  8189.         $sheet = $spreadsheet->getActiveSheet();
  8190.         // Head 2
  8191.         $tableHead2 = [
  8192.             'font'=>[
  8193.                 'color'=>[
  8194.                     'rgb'=>'ffffff'
  8195.                 ],
  8196.                 'bold'=>true,
  8197.                 'size'=>12
  8198.             ],
  8199.             'fill'=>[
  8200.                 'fillType' => Fill::FILL_SOLID,
  8201.                 'startColor' => [
  8202.                     'rgb' => '002060'
  8203.                 ]
  8204.             ],
  8205.         ];
  8206.         $tableRand = [
  8207.             'fill'=>[
  8208.                 'fillType' => Fill::FILL_SOLID,
  8209.                 'startColor' => [
  8210.                     'rgb' => 'C8D6EE'
  8211.                 ]
  8212.             ],
  8213.         ];
  8214.         $sheet->setCellValue('A1',"Type de ligne")
  8215.             ->setCellValue('B1',"Code Sage")
  8216.             ->setCellValue('C1',"Code budgétaire")
  8217.             ->setCellValue('D1',"Code fournisseur Evalua")
  8218.             ->setCellValue('E1',"Valeur de charge ou investissement")
  8219.             ->setCellValue('F1',"Date comptable")
  8220.             ->setCellValue('G1',"Date d’échéance")
  8221.             ->setCellValue('H1',"Date de création dans ERPI")
  8222.             ->setCellValue('I1',"Montant HT")
  8223.             ->setCellValue('J1',"Montant TTC")
  8224.             ->setCellValue('K1',"taux de TVA")
  8225.             ->setCellValue('L1',"Montant à régler")
  8226.             ->setCellValue('M1',"Référence facture fournisseur")
  8227.             ->setCellValue('N1',"Compteur ERPI pièce")
  8228.             ->setCellValue('O1',"Compteur ERPI écritures")
  8229.             ->setCellValue('P1',"Commentaire comptable")
  8230.             ->setCellValue('Q1',"Code projet")
  8231.             ->setCellValue('R1',"libellé projet")
  8232.             ->setCellValue('S1',"Compteur facture associée")
  8233.             ->setCellValue('T1',"Autoliquidation")
  8234.             ->setCellValue('U1',"Montant TVA");
  8235.         // Borders a2 z2
  8236.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8237.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8238.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8239.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8240.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8241.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8242.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8243.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8244.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8245.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8246.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8247.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8248.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8249.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8250.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8251.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8252.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8253.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8254.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8255.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8256.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8257.         //width
  8258.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  8259.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  8260.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  8261.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  8262.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  8263.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  8264.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  8265.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  8266.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  8267.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  8268.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  8269.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  8270.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  8271.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  8272.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  8273.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  8274.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  8275.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  8276.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  8277.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(25);
  8278.         $spreadsheet->getActiveSheet()->getStyle('A1:U1')->applyFromArray($tableHead2);
  8279.         //loop through the data
  8280.         //current row
  8281.         $row=2;
  8282.         foreach($arrays as $array){
  8283.             $spreadsheet->getActiveSheet()
  8284.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  8285.                 ->setCellValue('B'.$row , $array['Code Sage'])
  8286.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  8287.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  8288.                 ->setCellValue('E'.$row , $array['Acompte pour une charge'])
  8289.                 ->setCellValue('F'.$row , $array['Date comptable'])
  8290.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  8291.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  8292.                 ->setCellValue('I'.$row , $array['Montant HT'])
  8293.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  8294.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  8295.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  8296.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  8297.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  8298.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  8299.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  8300.                 ->setCellValue('Q'.$row , $array['Code projet'])
  8301.                 ->setCellValue('R'.$row , $array['libellé projet'])
  8302.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  8303.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  8304.                 ->setCellValue('U'.$row , $array['Montant TVA'])
  8305.             ;
  8306.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8307.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8308.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8309.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8310.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8311.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8312.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8313.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8314.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8315.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8316.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8317.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8318.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8319.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8320.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8321.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8322.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8323.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8324.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8325.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8326.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8327.             $row++;
  8328.         }
  8329.         $firstRow=1;
  8330.         $lastRow=$row-1;
  8331.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  8332.         $writer = new Csv($spreadsheet);
  8333.         $writer->setDelimiter('|');
  8334.         $writer->setEnclosure('');
  8335.         $writer->setUseBOM(false);
  8336. //        $writer->setOutputEncoding('UTF-8');
  8337.         $writer->save($file);
  8338.         return $file;
  8339.     }
  8340.     public function getC4ReglementsExportDateRange($dateStart,$dateEnd){
  8341.         $factures = $this->em->getRepository(FactureFinance::class)->searchFacturePayeeDateRange($dateStart,$dateEnd);
  8342.         $arrays = [];
  8343.         $i = 0;
  8344.         foreach ($factures as $facture){
  8345.             $banqueFournisseur = '';
  8346.             $ibanFournisseur = '';
  8347.             $bicFournisseur = '';
  8348.             $codePaysFournisseur = '';
  8349.             if ($facture->getFournisseur()) {
  8350.                 if($facture->getRib()) {
  8351.                     $fournisseurBanque = $facture->getRib();
  8352.                 }else {
  8353.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  8354.                 }
  8355.                 if (!$fournisseurBanque) {
  8356.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  8357.                 }
  8358.                 if ($fournisseurBanque) {
  8359.                     $banqueFournisseur = $fournisseurBanque->getBanque();
  8360.                     $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  8361.                     $bicFournisseur = $fournisseurBanque->getBic();
  8362.                 }
  8363.                 $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  8364.             }
  8365. //            $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  8366.             $spvName = '';
  8367.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  8368.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  8369.             $classification = $facture->getClassification();
  8370.             $dateComptable = $facture->getDate()?$facture->getDate()->format('d/m/Y'):'';
  8371.             $dateEcheance = '';
  8372.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  8373.             $numeroFacture = $facture->getNumeroFacture();
  8374. //            if(count($facture->getProjectFactureFinance())>1){
  8375. //                foreach ($facture->getProjectFactureFinance() as $projectFinance){
  8376. //                    $arrays[$i]['Type de ligne'] = 'Reglement';
  8377. //                    $arrays[$i]['Code Société'] = $spvName;
  8378. //                    $arrays[$i]['Code Sage'] = $spvCodeSage;
  8379. //                    $arrays[$i]['Code budgétaire'] = $facture->getClassification();
  8380. //                    $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  8381. //                    $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()]:'';
  8382. //                    $arrays[$i]['Date comptable'] = $dateComptable;
  8383. //                    $arrays[$i]['Date d’échéance'] = $dateEcheance;
  8384. //                    $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  8385. //                    $arrays[$i]['Montant HT'] = (float)$projectFinance->getMontantHt();
  8386. //                    if($facture->getTauxTva()){
  8387. //                        $tva = (float)$facture->getTauxTva();
  8388. //                    }else{
  8389. //                        $tva = 20;
  8390. //                    }
  8391. //                    $arrays[$i]['Montant TTC'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  8392. //                    $arrays[$i]['taux de TVA'] = $tva;
  8393. //                    $arrays[$i]['Montant à régler'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  8394. //                    $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  8395. //                    $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  8396. ////                    $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  8397. ////                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  8398. //
  8399. //                    $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$projectFinance->getProject());
  8400. //                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  8401. //
  8402. //                    if($facture->getIsAvoir()){
  8403. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  8404. //                        $a = count($avoirs);
  8405. //                        $b = 1;
  8406. //                        $avoirNum = '';
  8407. //                        foreach ($avoirs as $item){
  8408. //                            if($b == $a){
  8409. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  8410. //                            }else{
  8411. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  8412. //                            }
  8413. //                            $b++;
  8414. //                        }
  8415. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  8416. //                    }else{
  8417. //                        $arrays[$i]['Commentaire comptable'] = $facture->getCommentComptable();
  8418. //                    }
  8419. //                    $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  8420. //                    $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  8421. //                    $arrays[$i]['Compteur facture associée'] = $numeroFacture;
  8422. //                    $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  8423. //                    $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  8424. //                    $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  8425. //                    $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  8426. //                    $i++;
  8427. //                }
  8428. //            }else{
  8429.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  8430.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  8431.                     $arrays[$i]['Type de ligne'] = 'Reglement';
  8432.                     $arrays[$i]['Code Société'] = $spvName;
  8433.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  8434.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  8435.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  8436.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  8437.                     $arrays[$i]['Date comptable'] = $dateComptable;
  8438.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  8439.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  8440.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  8441.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  8442.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  8443.                     $arrays[$i]['Montant à régler'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  8444. //                    $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  8445.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  8446.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  8447.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  8448.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  8449.                     if($facture->getIsAvoir()){
  8450.                         $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  8451.                         $a = count($avoirs);
  8452.                         $b = 1;
  8453.                         $avoirNum = '';
  8454.                         foreach ($avoirs as $item){
  8455.                             if($b == $a){
  8456.                                 $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  8457.                             }else{
  8458.                                 $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  8459.                             }
  8460.                             $b++;
  8461.                         }
  8462.                         $arrays[$i]['Commentaire comptable'] = $avoirNum;
  8463.                     }else{
  8464.                         $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', $facture->getNote());
  8465.                     }
  8466.                     $arrays[$i]['Code projet'] = '';
  8467.                     $arrays[$i]['libellé projet'] = '';
  8468.                     $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  8469.                     $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  8470.                     $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  8471.                     $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  8472.                     $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  8473.                     $i++;
  8474.                 }
  8475.             }
  8476.             else{
  8477.                 $arrays[$i]['Type de ligne'] = 'Reglement';
  8478.                 $arrays[$i]['Code Société'] = $spvName;
  8479.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  8480.                 $arrays[$i]['Code budgétaire'] = $classification;
  8481.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  8482.                 $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  8483.                 $arrays[$i]['Date comptable'] = $dateComptable;
  8484.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  8485.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  8486.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  8487.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  8488.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  8489.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  8490.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  8491.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  8492.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndNotTva($facture);
  8493.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  8494.                 if($facture->getIsAvoir()){
  8495.                     $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  8496.                     $a = count($avoirs);
  8497.                     $b = 1;
  8498.                     $avoirNum = '';
  8499.                     foreach ($avoirs as $item){
  8500.                         if($b == $a){
  8501.                             $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir();
  8502.                         }else{
  8503.                             $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir()." / ";
  8504.                         }
  8505.                         $b++;
  8506.                     }
  8507.                     $arrays[$i]['Commentaire comptable'] = $avoirNum;
  8508.                 }else{
  8509.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', $facture->getNote());
  8510.                 }
  8511. //                    foreach ($facture->getProjectFactureFinance() as $projectFinance){
  8512. //                        $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  8513. //                        $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  8514. //                    }
  8515.                 $arrays[$i]['Code projet'] = '';
  8516.                 $arrays[$i]['libellé projet'] =  '';
  8517.                 $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  8518.                 $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  8519.                 $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  8520.                 $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  8521.                 $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  8522.                 $i++;
  8523.             }
  8524. //            }
  8525.         }
  8526.         return $arrays;
  8527.     }
  8528.     public function c4ReglementsExportXlsDateRange($arrays,$dateStart,$dateEnd){
  8529.         $dateNow = new \DateTime();
  8530.         $dateNowStr = '_'.$dateStart->format('Ymd').'_'.$dateStart->format('H').'h'.$dateStart->format('i').'___'.$dateEnd->format('Ymd').'_'.$dateEnd->format('H').'h'.$dateEnd->format('i');
  8531.         $fileName = "C4_reglements".$dateNowStr.".csv";
  8532.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  8533.         if(file_exists($file)){
  8534.             $filesystem = new Filesystem();
  8535.             $filesystem->remove($file);
  8536.         }
  8537.         $spreadsheet = new Spreadsheet();
  8538.         $sheet = $spreadsheet->getActiveSheet();
  8539.         // Head 2
  8540.         $tableHead2 = [
  8541.             'font'=>[
  8542.                 'color'=>[
  8543.                     'rgb'=>'ffffff'
  8544.                 ],
  8545.                 'bold'=>true,
  8546.                 'size'=>12
  8547.             ],
  8548.             'fill'=>[
  8549.                 'fillType' => Fill::FILL_SOLID,
  8550.                 'startColor' => [
  8551.                     'rgb' => '002060'
  8552.                 ]
  8553.             ],
  8554.         ];
  8555.         $tableRand = [
  8556.             'fill'=>[
  8557.                 'fillType' => Fill::FILL_SOLID,
  8558.                 'startColor' => [
  8559.                     'rgb' => 'C8D6EE'
  8560.                 ]
  8561.             ],
  8562.         ];
  8563.         $sheet->setCellValue('A1',"Type de ligne")
  8564.             ->setCellValue('B1',"Code Sage")
  8565.             ->setCellValue('C1',"Code budgétaire")
  8566.             ->setCellValue('D1',"Code fournisseur Evalua")
  8567.             ->setCellValue('E1',"Valeur de charge ou investissement")
  8568.             ->setCellValue('F1',"Date comptable")
  8569.             ->setCellValue('G1',"Date d’échéance")
  8570.             ->setCellValue('H1',"Date de création dans ERPI")
  8571.             ->setCellValue('I1',"Montant HT")
  8572.             ->setCellValue('J1',"Montant TTC")
  8573.             ->setCellValue('K1',"taux de TVA")
  8574.             ->setCellValue('L1',"Montant à régler")
  8575.             ->setCellValue('M1',"Référence facture fournisseur")
  8576.             ->setCellValue('N1',"Compteur ERPI pièce")
  8577.             ->setCellValue('O1',"Compteur ERPI écritures")
  8578.             ->setCellValue('P1',"Commentaire comptable")
  8579.             ->setCellValue('Q1',"Code projet")
  8580.             ->setCellValue('R1',"libellé projet")
  8581.             ->setCellValue('S1',"Compteur facture associée")
  8582.             ->setCellValue('T1',"IBAN fournisseur");
  8583.         // Borders a2 z2
  8584.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8585.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8586.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8587.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8588.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8589.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8590.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8591.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8592.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8593.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8594.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8595.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8596.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8597.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8598.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8599.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8600.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8601.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8602.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8603.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8604.         //width
  8605.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  8606.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  8607.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  8608.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  8609.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  8610.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  8611.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  8612.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  8613.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  8614.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  8615.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  8616.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  8617.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  8618.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  8619.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  8620.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  8621.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  8622.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  8623.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  8624.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  8625.         $spreadsheet->getActiveSheet()->getStyle('A1:T1')->applyFromArray($tableHead2);
  8626.         //loop through the data
  8627.         //current row
  8628.         $row=2;
  8629.         foreach($arrays as $array){
  8630.             $spreadsheet->getActiveSheet()
  8631.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  8632.                 ->setCellValue('B'.$row , $array['Code Sage'])
  8633.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  8634.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  8635.                 ->setCellValue('E'.$row , $array['Facture de charge'])
  8636.                 ->setCellValue('F'.$row , $array['Date comptable'])
  8637.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  8638.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  8639.                 ->setCellValue('I'.$row , $array['Montant HT'])
  8640.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  8641.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  8642.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  8643.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  8644.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  8645.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  8646.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  8647.                 ->setCellValue('Q'.$row , $array['Code projet'])
  8648.                 ->setCellValue('R'.$row , $array['libellé projet'])
  8649.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  8650.                 ->setCellValue('T'.$row , $array['ibanFournisseur'])
  8651.             ;
  8652.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8653.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8654.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8655.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8656.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8657.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8658.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8659.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8660.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8661.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8662.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8663.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8664.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8665.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8666.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8667.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8668.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8669.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8670.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8671.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8672.             $row++;
  8673.         }
  8674.         $firstRow=1;
  8675.         $lastRow=$row-1;
  8676.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":T".$lastRow);
  8677.         $writer = new Csv($spreadsheet);
  8678.         $writer->setDelimiter('|');
  8679.         $writer->setEnclosure('');
  8680.         $writer->setUseBOM(false);
  8681. //        $writer->setOutputEncoding('UTF-8');
  8682.         $writer->save($file);
  8683.         return $file;
  8684.     }
  8685.     public function paginateFacturePaiementNewMiseEnpaiement($request){
  8686.         $length = $request->get('length');
  8687.         $length = $length && ($length!=-1)?$length:0;
  8688.         $start = $request->get('start');
  8689.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  8690.         $column =  $search = $request->get('columns');
  8691.         $order = $request->get('order')[0];
  8692.         $columnOrder = $order['column'];
  8693.         $dirOrder = $order['dir'];
  8694.         $columNameOrder = $column[$columnOrder]['data'];
  8695.         $searchTabDate = $request->get('searchTabDate');
  8696.         $search = $request->get('search');
  8697.         $filters = [
  8698.             'searchTabDate' => $searchTabDate,
  8699.             'fournisseur' => $request->get('fournisseur'),
  8700.             'spv' => $request->get('spv'),
  8701.             'statusMiseEnPaiement' => $request->get('statusMiseEnPaiement'),
  8702.             'query' => trim(@$search['value']),
  8703.         ];
  8704.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->getFacturesValideMiseEnPaiement($filters, $start, $length, true,$columNameOrder, $dirOrder);
  8705.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->getFacturesValideMiseEnPaiement($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  8706.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->getFacturesValideMiseEnPaiement(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  8707.         $output = array(
  8708.             'data' => array(),
  8709.             'recordsFiltered' => count($recordsFiltered),
  8710.             'recordsTotal' => count($recordsTotal),
  8711.         );
  8712.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  8713.         foreach ($factureFinances as $factureFinance) {
  8714.             $status =
  8715.                 $this->twig->render(
  8716.                     'admin/facture-finance/miseEnPaiement/default/statusMiseEnPaiementV2.html.twig', array(
  8717.                     'factureFinance' => $factureFinance,
  8718.                 ));
  8719.             $action = $this->twig->render(
  8720.                 'admin/facture-finance/miseEnPaiement/default/miseEnpaiementBtnV2.html.twig', array(
  8721.                 'factureFinance' => $factureFinance
  8722.             ));
  8723.             $btnSelect =
  8724.                 $this->twig->render(
  8725.                     'admin/facture-finance/miseEnPaiement/default/btnSelectMiseEnPaiement.html.twig', array(
  8726.                     'factureFinance' => $factureFinance
  8727.                 ));
  8728.             if($factureFinance->getIsAvoir()){
  8729.                 $montantTtc = (float)str_replace([','], ".", str_replace([' '], "", $factureFinance->getMonatantRestantTtc())) ;
  8730.             }else {
  8731.                 $montantTtc = (float)str_replace([','], ".", str_replace([' '], "", $factureFinance->getMonatantTtc())) ;
  8732.             }
  8733.             $output['data'][] = [
  8734.                 'responsive_id' => '',
  8735.                 'id' => $factureFinance->getId(),
  8736.                 'numeroFacture' => $factureFinance->getNumeroFacture(),
  8737.                 'monatantTtc' => $this->espaceNumber($montantTtc).'€',
  8738.                 'monatantHt' => $factureFinance->getMonatantHt() ? $this->espaceNumber($factureFinance->getMonatantHt()).'€' : '',
  8739.                 'tva' => $factureFinance->getTva() ? $factureFinance->getTva().'€' : '',
  8740.                 'category' => $factureFinance->getCategory() ? $factureFinance->getCategory() : '',
  8741.                 'fournisseur' => $factureFinance->getFournisseur() ? $factureFinance->getFournisseur()->getName() : '',
  8742.                 'developpeur' => $factureFinance->getDeveloppeur() ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '',
  8743.                 'spv' => $factureFinance->getSpv() ? $factureFinance->getSpv()->getName() : '',
  8744.                 'dateValidation' => $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('d/m/Y') : '',
  8745.                 'createdAt' => $factureFinance->getCreatedAt() ? $factureFinance->getCreatedAt()->format('d/m/Y') : '',
  8746.                 'status' => $status,
  8747.                 'btnSelect' => $btnSelect,
  8748.                 'action' => $action
  8749.             ];
  8750.         }
  8751.         return $output;
  8752.     }
  8753.     public function getTabMiseEnPaiementDefault(){
  8754.         $factures = $this->session->get('factureAcomfirme');
  8755.         if($factures){
  8756.             $array = $factures;
  8757.         }else{
  8758.             $array = [];
  8759.         }
  8760.         foreach ($array as $facture){
  8761.             if($facture){
  8762.                 if($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and (is_null($facture->getIsPaiement()) or $facture->getIsPaiement() == 0)  and $this->checkFactureFinanceCodeProject($facture)) {
  8763.                 }else{
  8764.                     unset($array[$facture->getToken()]);
  8765.                     $this->session->set('factureAcomfirme',$array);
  8766.                 }
  8767.             }
  8768.         }
  8769.         $tab =  $this->twig->render(
  8770.             'admin/facture-finance/miseEnPaiement/default/trMiseEnPaiementAconfirme.html.twig', array(
  8771.             'factures' => $array
  8772.         ));
  8773.         $arraySpv = [];
  8774.         $montant = 0;
  8775.         foreach ($array as $value){
  8776.             if($value->getSpv()){
  8777.                 $arraySpv[$value->getSpv()->getId()] =  $value->getSpv();
  8778.             }
  8779.             if($value->getIsAvoir()){
  8780.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantRestantTtc())) ;
  8781.             }else {
  8782.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantTtc())) ;
  8783.             }
  8784.         }
  8785.         $block =  $this->twig->render(
  8786.             'admin/facture-finance/miseEnPaiement/default/blockMiseEnPaiementAconfirme.html.twig', array(
  8787.             'factures' => $array,
  8788.             'spvs' => $arraySpv,
  8789.             'montant' => $montant
  8790.         ));
  8791.         if($array){
  8792.             return [
  8793.                 'tab'=> $tab,
  8794.                 'block'=> $block,
  8795.             ];
  8796.         }else{
  8797.             return 0;
  8798.         }
  8799.     }
  8800.     public function getTabMiseEnPaiement($token){
  8801.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  8802.         $factures = $this->session->get('factureAcomfirme');
  8803.         if($factures){
  8804.             $array = $factures;
  8805.         }else{
  8806.             $array = [];
  8807.         }
  8808.         if($facture){
  8809.             if($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)) {
  8810.                 $array[$token] = $facture;
  8811.             }
  8812.             if($this->checkAltareaFacture($facture)){
  8813.             }else{
  8814.                 if($facture->getIsPaiement() == FactureFinance::STATUS_NOT_PAYE_SEPA){
  8815.                     $userCurrent = $this->security->getUser();
  8816.                     if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  8817.                     }else {
  8818.                         if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  8819.                             return 0;
  8820.                         }
  8821.                     }
  8822.                     $facture->setIsPaiement(null);
  8823.                     $this->em->persist($facture);
  8824.                     $this->em->flush();
  8825.                     $str = $this->security->getUser()->getFirstname().' '.$this->security->getUser()->getLastname().' a remis la facture '.' ('.$facture->getNumeroFacture().')'.' en mise en paiement';
  8826.                     $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(),$str,$facture);
  8827.                 }
  8828.             }
  8829.             $this->session->set('factureAcomfirme',$array);
  8830.         }
  8831.         $tab =  $this->twig->render(
  8832.             'admin/facture-finance/miseEnPaiement/default/trMiseEnPaiementAconfirme.html.twig', array(
  8833.             'factures' => $array
  8834.         ));
  8835.         $arraySpv = [];
  8836.         $montant = 0;
  8837.         foreach ($array as $value){
  8838.             if($value->getSpv()){
  8839.                 $arraySpv[$value->getSpv()->getId()] =  $value->getSpv();
  8840.             }
  8841.             if($value->getIsAvoir()){
  8842.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantRestantTtc())) ;
  8843.             }else {
  8844.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantTtc())) ;
  8845.             }
  8846.         }
  8847.         $block =  $this->twig->render(
  8848.             'admin/facture-finance/miseEnPaiement/default/blockMiseEnPaiementAconfirme.html.twig', array(
  8849.             'factures' => $array,
  8850.             'spvs' => $arraySpv,
  8851.             'montant' => $montant
  8852.         ));
  8853.         if($array){
  8854.             return [
  8855.                 'tab'=> $tab,
  8856.                 'block'=> $block,
  8857.             ];
  8858.         }else{
  8859.             return 0;
  8860.         }
  8861.     }
  8862.     public function getTabMiseEnPaiementDeselection($token){
  8863.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  8864.         $factures = $this->session->get('factureAcomfirme');
  8865.         if($factures){
  8866.             $array = $factures;
  8867.         }else{
  8868.             $array = [];
  8869.         }
  8870.         if($facture){
  8871.             if(isset($array[$token])){
  8872.                 unset($array[$token]);
  8873.                 $this->session->set('factureAcomfirme',$array);
  8874.             }
  8875.         }
  8876.         $tab =  $this->twig->render(
  8877.             'admin/facture-finance/miseEnPaiement/default/trMiseEnPaiementAconfirme.html.twig', array(
  8878.             'factures' => $array
  8879.         ));
  8880.         $arraySpv = [];
  8881.         $montant = 0;
  8882.         foreach ($array as $value){
  8883.             if($value->getSpv()){
  8884.                 $arraySpv[$value->getSpv()->getId()] =  $value->getSpv();
  8885.             }
  8886.             if($value->getIsAvoir()){
  8887.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantRestantTtc())) ;
  8888.             }else {
  8889.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantTtc())) ;
  8890.             }
  8891.         }
  8892.         $block =  $this->twig->render(
  8893.             'admin/facture-finance/miseEnPaiement/default/blockMiseEnPaiementAconfirme.html.twig', array(
  8894.             'factures' => $array,
  8895.             'spvs' => $arraySpv,
  8896.             'montant' => $montant
  8897.         ));
  8898.         if($array){
  8899.             return [
  8900.                 'tab'=> $tab,
  8901.                 'block'=> $block,
  8902.             ];
  8903.         }else{
  8904.             return 0;
  8905.         }
  8906.     }
  8907.     public function addPaiementFactureV2(){
  8908.         $userCurrent = $this->security->getUser();
  8909.         if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  8910.         }else {
  8911.             if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  8912.                 return [
  8913.                     'messageErreur' => '<p>vous n\'êtes pas autorisé à comfirmer la mise en paiement</p>',
  8914.                 ];
  8915.             }
  8916.         }
  8917.         $facturesTab = $this->session->get('factureAcomfirme');
  8918.         $tab = [];
  8919.         foreach ($facturesTab as $value){
  8920.             $facture = $this->em->getRepository(FactureFinance::class)->find($value->getId());
  8921.             $tab[]= $facture;
  8922.         }
  8923.         $arrayFactures = [];
  8924.         $array = [];
  8925.         if($tab){
  8926.             // update date Paiement si < date du jour
  8927.             foreach ($tab as $facture){
  8928.                 if($facture->getIsPaiement() == 0 or  is_null($facture->getIsPaiement())) {
  8929.                     $datePrevuPaiement = new \DateTime($facture->getDate()->format('Y-m-d') . ' 23:59:59');
  8930.                     $dateNow = new \DateTime();
  8931.                     $dateNow->modify('+1 day');
  8932.                     if ($datePrevuPaiement >= $dateNow) {
  8933.                     } else {
  8934.                         $datePrevuPaiement = $dateNow;
  8935.                     }
  8936.                     $facture->setDate($datePrevuPaiement);
  8937.                     $this->em->persist($facture);
  8938.                     $this->em->flush();
  8939.                     $arrayFactures[] = $facture;
  8940.                 }
  8941.             }
  8942.             // formate tableau mise en paiement
  8943.             foreach ($arrayFactures as $itemFacture){
  8944.                 if($itemFacture->getSpv()){
  8945.                     $array[$itemFacture->getSpv()->getId().$itemFacture->getDateValidation()->format('Y-m-d').$itemFacture->getDate()->format('Y-m-d')]['factures'][] = $itemFacture;
  8946.                     $array[$itemFacture->getSpv()->getId().$itemFacture->getDateValidation()->format('Y-m-d').$itemFacture->getDate()->format('Y-m-d')]['spv'] = $itemFacture->getSpv();
  8947.                     $array[$itemFacture->getSpv()->getId().$itemFacture->getDateValidation()->format('Y-m-d').$itemFacture->getDate()->format('Y-m-d')]['dateValidation'] = $itemFacture->getDateValidation();
  8948.                     $array[$itemFacture->getSpv()->getId().$itemFacture->getDateValidation()->format('Y-m-d').$itemFacture->getDate()->format('Y-m-d')]['datePrevuPaiement'] = $itemFacture->getDate();
  8949.                 }
  8950.             }
  8951.             foreach ($array as $value){
  8952.                 $spv = $value['spv'];
  8953.                 $datePaiementPrevu = $value['datePrevuPaiement'];
  8954.                 $dateValidation = $value['dateValidation'];
  8955.                 $facturesValide = $value['factures'];
  8956.                 $factureFinancePaiement = $this->em->getRepository(FactureFinancePaiement::class)->findNotFichierBySpvAndDate($spv,$dateValidation,$datePaiementPrevu);
  8957.                 if($factureFinancePaiement){
  8958.                 }
  8959.                 else{
  8960.                     $factureFinancePaiement = new FactureFinancePaiement();
  8961.                     $factureFinancePaiement->setSpv($spv);
  8962.                     $factureFinancePaiement->setDatePrevu($dateValidation);
  8963.                     $factureFinancePaiement->setDatePaiementPrevu($datePaiementPrevu);
  8964.                     $this->em->persist($factureFinancePaiement);
  8965.                     $this->em->flush();
  8966.                 }
  8967.                 foreach ($facturesValide as $factureValide){
  8968.                     if($this->checkAltareaFacture($facture)){
  8969.                     }else{
  8970.                         if($this->fournisseurService->checkFournisseurRibActive($factureValide->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)) {
  8971.                             $factureValide->setIsPaiement(FactureFinance::STATUS_PAYE_SEPA);
  8972.                             $this->em->persist($factureValide);
  8973.                             $factureFinancePaiementDetailNew = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance'=>$factureValide->getId()]);
  8974.                             $factureDetailNotExist = false;
  8975.                             if(!$factureFinancePaiementDetailNew){
  8976.                                 $factureFinancePaiementDetailNew = new FactureFinancePaiementDetail();
  8977.                                 $factureDetailNotExist = true;
  8978.                             }
  8979.                             $factureFinancePaiementDetailNew->setFactureFinance($factureValide);
  8980.                             $factureFinancePaiementDetailNew->setDatePrevu($dateValidation);
  8981.                             $factureFinancePaiementDetailNew->setFactureFinancePaiement($factureFinancePaiement);
  8982.                             $this->em->persist($factureFinancePaiementDetailNew);
  8983.                             $this->em->flush();
  8984.                             if($factureDetailNotExist) {
  8985.                                 $str = $this->security->getUser()->getFirstname() . ' ' . $this->security->getUser()->getLastname() . ' a validé la mise en paiement : ' . $factureValide->getFournisseur()->getName() . ' (' . $factureValide->getNumeroFacture() . ')';
  8986.                                 $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(), $str, $factureValide);
  8987.                             }
  8988.                         }
  8989.                     }
  8990.                 }
  8991.             }
  8992.             $this->session->remove('factureAcomfirme');
  8993.         }
  8994.         return $array;
  8995.     }
  8996.     public function getFacturePaiementNewMiseEnpaiement($request){
  8997.         $length = $request->get('length');
  8998.         $length = $length && ($length!=-1)?$length:0;
  8999.         $start = $request->get('start');
  9000.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  9001.         $column =  $search = $request->get('columns');
  9002.         $order = $request->get('order')[0];
  9003.         $columnOrder = $order['column'];
  9004.         $dirOrder = $order['dir'];
  9005.         $columNameOrder = $column[$columnOrder]['data'];
  9006.         $searchTabDate = $request->get('searchTabDate');
  9007.         $filters = [
  9008.             'searchTabDate' => $searchTabDate,
  9009.             'fournisseur' => $request->get('fournisseur'),
  9010.             'spv' => $request->get('spv'),
  9011.             'statusMiseEnPaiement' => $request->get('statusMiseEnPaiement'),
  9012.             'query' => trim(@$search['value']),
  9013.         ];
  9014.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->getFacturesValideMiseEnPaiementFilter($filters);
  9015.         return $factureFinances;
  9016.     }
  9017.     public function insertLogFichier($spv,$factures,$nameFichier){
  9018.         $text = '';
  9019.         foreach ($factures as $facture){
  9020.             $text .= '  '.$facture->getNumeroFacture();
  9021.         }
  9022.         $log = new LogSendFichier();
  9023.         $log->setLogText($text);
  9024.         $log->setNameFichier($nameFichier);
  9025.         $log->setSpvId($spv->getId());
  9026.         $this->em->persist($log);
  9027.         $this->em->flush();
  9028.     }
  9029.     public function checkFactureFinanceCodeProject($facture){
  9030.         if($facture){
  9031.             $projects = $facture->getProjectFactureFinance();
  9032.             if(count($projects)>0){
  9033.                 foreach ($projects as $projectFacture){
  9034.                     $project = $projectFacture->getProject();
  9035.                     if($project && $project->getCodeProject()){
  9036.                         return true;
  9037.                     }else{
  9038.                         return false;
  9039.                     }
  9040.                 }
  9041.             }
  9042.         }
  9043.         return true;
  9044.     }
  9045.     public function checkAltareaFacture($facture){
  9046. //        if($facture){
  9047. //            $projects = $facture->getProjectFactureFinance();
  9048. //            if(count($projects)>0){
  9049. //                foreach ($projects as $projectFacture){
  9050. //                    $project = $projectFacture->getProject();
  9051. //                    if($project && $project->getEntreprise() && $project->getEntreprise()->getIsAlteria()){
  9052. //                        return true;
  9053. //                    }else{
  9054. //                        return false;
  9055. //                    }
  9056. //                }
  9057. //            }
  9058. //        }
  9059.         return false;
  9060.     }
  9061.     public function extractFacturesPayer($factures,$request){
  9062.         $file= $this->params->get('zips_directory')."/extraire_factures.xlsx";
  9063.         $spreadsheet = new Spreadsheet();
  9064.         $sheet = $spreadsheet->getActiveSheet();
  9065.         // Head 2
  9066.         $tableHead2 = [
  9067.             'font'=>[
  9068.                 'color'=>[
  9069.                     'rgb'=>'0071c1'
  9070.                 ],
  9071.                 'bold'=>true,
  9072.                 'size'=>12
  9073.             ],
  9074.             'fill'=>[
  9075.                 'fillType' => Fill::FILL_SOLID,
  9076.                 'startColor' => [
  9077.                     'rgb' => 'dcebf4'
  9078.                 ]
  9079.             ],
  9080.         ];
  9081.         $sheet->setCellValue('A1',"Numéro de facture")
  9082.             ->setCellValue('B1',"Date de facture")
  9083.             ->setCellValue('C1',"Date de réception")
  9084.             ->setCellValue('D1',"Date de paiement")
  9085.             ->setCellValue('E1',"Montant")
  9086.             ->setCellValue('F1',"Code Société");
  9087.         // Borders a2 z2
  9088.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9089.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9090.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9091.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9092.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9093.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9094.         //width
  9095.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(17);
  9096.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  9097.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  9098.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  9099.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  9100.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  9101.         $spreadsheet->getActiveSheet()->getStyle('A1:F1')->applyFromArray($tableHead2);
  9102.         //loop through the data
  9103.         //current row
  9104.         $row=2;
  9105.         foreach($factures as $facture){
  9106.             $spreadsheet->getActiveSheet()
  9107.                 ->setCellValue('A'.$row , (string)$facture->getNumeroFacture30Max())
  9108.                 ->setCellValue('E'.$row , $facture->getMonatantTtc())
  9109.                 ->setCellValue('F'.$row , $facture->getSpv()?$facture->getSpv()->getName():'')
  9110.             ;
  9111.             $spreadsheet = $this->addStyleToCellDate('B',$row,$facture->getDateFacture(),$spreadsheet);
  9112.             $spreadsheet = $this->addStyleToCellDate('C',$row,$facture->getCreatedAt(),$spreadsheet);
  9113.             $spreadsheet = $this->addStyleToCellDate('D',$row,$facture->getDatePaiement(),$spreadsheet);
  9114.             //increment row
  9115.             $row++;
  9116.         }
  9117.         $firstRow=1;
  9118.         $lastRow=$row-1;
  9119.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":F".$lastRow);
  9120.         $writer = new Xlsx($spreadsheet);
  9121.         $writer->save($file);
  9122.         return $file;
  9123.     }
  9124.     public function editClassification($request,$token)
  9125.     {
  9126.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  9127.         if($facture){
  9128.             $form = $this->form->create(FactureFinanceClassificationType::class, $facture);
  9129.             $form->handleRequest($request);
  9130.             if ($form->isSubmitted()) {
  9131.                 $this->em->persist($facture);
  9132.                 $this->em->flush();
  9133.                 return [
  9134.                     'form' => $form->createView(),
  9135.                     'factureFinance' => $facture,
  9136.                     'success' => true
  9137.                 ];
  9138.             }
  9139.         }
  9140.         return [
  9141.             'form' => $form->createView(),
  9142.             'factureFinance' => $facture,
  9143.             'success' => false,
  9144.         ];
  9145.     }
  9146.     public function exportComptableNotSendByCompteur($arrayCompteur,$strType){
  9147.         if($strType == 'facture'){
  9148.             $arrays1 = $this->getC1FacturesExportByCompteur($arrayCompteur);
  9149.             $this->c1FacturesExportXls($arrays1,true,false);
  9150.         }
  9151.         if($strType == 'avoir'){
  9152.             $arrays2 = $this->getC2AvoirExportByCompteur($arrayCompteur);
  9153.             $this->c2AvoirExportXls($arrays2,true,false);
  9154.         }
  9155.         if($strType == 'acompte'){
  9156.             $arrays3 = $this->getC3AcomptesExportByCompteur($arrayCompteur);
  9157.             $this->c3AcomptesExportXls($arrays3,true,false);
  9158.         }
  9159.         if($strType == 'reglement'){
  9160.             $arrays4 = $this->getC4ReglementsExportByCompteur($arrayCompteur);
  9161.             $this->c4ReglementsExportXls($arrays4,true,false);
  9162.         }
  9163.     }
  9164.     public function getC1FacturesExportByCompteur($arrayCompteur){
  9165.         $factures = $this->em->getRepository(FactureFinance::class)->searchFactureByCompteur($arrayCompteur);
  9166.         $arrays = [];
  9167.         $i = 0;
  9168.         foreach ($factures as $facture){
  9169.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  9170.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  9171.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  9172.             $classification = $facture->getClassification();
  9173.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  9174.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  9175.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  9176.             $numeroFacture = $facture->getNumeroFacture();
  9177.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  9178.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  9179.                     $arrays[$i]['Type de ligne'] = 'Facture';
  9180.                     $arrays[$i]['Code Société'] = $spvName;
  9181.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  9182.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9183.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9184.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  9185.                     $arrays[$i]['Date comptable'] = $dateComptable;
  9186.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9187.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9188.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9189.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9190.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9191. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  9192.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9193.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9194.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9195.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  9196.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9197. //                    if($facture->getIsAvoir()){
  9198. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9199. //                        $a = count($avoirs);
  9200. //                        $b = 1;
  9201. //                        $avoirNum = '';
  9202. //                        foreach ($avoirs as $item){
  9203. //                            if($b == $a){
  9204. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  9205. //                            }else{
  9206. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  9207. //                            }
  9208. //                            $b++;
  9209. //                        }
  9210. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  9211. //                    }else{
  9212.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127)) ;
  9213. //                    }
  9214.                     $arrays[$i]['Code projet'] = '';
  9215.                     $arrays[$i]['libellé projet'] = '';
  9216.                     $arrays[$i]['Compteur facture associée'] = '';
  9217.                     $arrays[$i]['Autoliquidation'] = 0;
  9218.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  9219.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  9220.                     $i++;
  9221.                     if(count($facture->getProjectFactureFinance())>0){
  9222.                         foreach ($facture->getProjectFactureFinance() as $project){
  9223.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9224.                             $arrays[$i]['Code Société'] = '';
  9225.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  9226.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9227.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  9228.                             $arrays[$i]['Facture de charge'] = '';
  9229.                             $arrays[$i]['Date comptable'] = '';
  9230.                             $arrays[$i]['Date d’échéance'] = '';
  9231.                             $arrays[$i]['Date de création dans ERPI'] = '';
  9232.                             $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$tvaMultiple->getMontantHt()),2,'.','');
  9233.                             $arrays[$i]['Montant TTC'] = '';
  9234.                             $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$tvaMultiple->getTauxTva()),2,'.','');
  9235.                             $arrays[$i]['Montant à régler'] = '';
  9236.                             $arrays[$i]['Référence facture fournisseur'] = '';
  9237.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9238.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  9239.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9240.                             $arrays[$i]['Commentaire comptable'] = '';
  9241.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9242.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9243.                             $arrays[$i]['Compteur facture associée'] = '';
  9244.                             $arrays[$i]['Autoliquidation'] = 0;
  9245.                             $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  9246.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  9247.                             $i++;
  9248.                         }
  9249.                     }
  9250.                 }
  9251.             }
  9252.             else{
  9253.                 $arrays[$i]['Type de ligne'] = 'Facture';
  9254.                 $arrays[$i]['Code Société'] = $spvName;
  9255.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  9256.                 $arrays[$i]['Code budgétaire'] = $classification;
  9257.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9258.                 $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  9259.                 $arrays[$i]['Date comptable'] = $dateComptable;
  9260.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9261.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9262.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  9263.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  9264.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  9265.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9266.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9267.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9268.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  9269.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9270. //                if($facture->getIsAvoir()){
  9271. //                    $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9272. //                    $a = count($avoirs);
  9273. //                    $b = 1;
  9274. //                    $avoirNum = '';
  9275. //                    foreach ($avoirs as $item){
  9276. //                        if($b == $a){
  9277. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  9278. //                        }else{
  9279. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  9280. //                        }
  9281. //                        $b++;
  9282. //                    }
  9283. //                    $arrays[$i]['Commentaire comptable'] = $avoirNum;
  9284. //                }else{
  9285.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  9286. //                }
  9287.                 $arrays[$i]['Code projet'] = '';
  9288.                 $arrays[$i]['libellé projet'] = '';
  9289.                 $arrays[$i]['Compteur facture associée'] = '';
  9290.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  9291.                 if($facture->getAutoliquidation() == 1){
  9292.                     $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  9293.                 }else{
  9294.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  9295.                 }
  9296.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  9297.                 $i++;
  9298.                 if(count($facture->getProjectFactureFinance())>0){
  9299.                     foreach ($facture->getProjectFactureFinance() as $project){
  9300.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9301.                         $arrays[$i]['Code Société'] = '';
  9302.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  9303.                         $arrays[$i]['Code budgétaire'] = $classification;
  9304.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  9305.                         $arrays[$i]['Facture de charge'] = '';
  9306.                         $arrays[$i]['Date comptable'] = '';
  9307.                         $arrays[$i]['Date d’échéance'] = '';
  9308.                         $arrays[$i]['Date de création dans ERPI'] = '';
  9309.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$project->getMontantHt()),2,'.','');
  9310.                         $arrays[$i]['Montant TTC'] = '';
  9311.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  9312.                         $arrays[$i]['Montant à régler'] = '';
  9313.                         $arrays[$i]['Référence facture fournisseur'] = '';
  9314.                         $arrays[$i]['Compteur ERPI pièce'] =  $facture->getCompteurErpiPiece();
  9315.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  9316.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9317.                         $arrays[$i]['Commentaire comptable'] = '';
  9318.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9319.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9320.                         $arrays[$i]['Compteur facture associée'] = '';
  9321.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  9322.                         if($facture->getAutoliquidation() == 1){
  9323.                             $tvaMontant = $this->hTAndTTC($project->getMontantTtc(), $facture->getTauxTva())['tva'];
  9324.                         }else{
  9325.                             $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$project->getMontantHt()) / 100;
  9326.                         }
  9327.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  9328.                         $i++;
  9329.                     }
  9330.                 }
  9331.             }
  9332.         }
  9333.         return $arrays;
  9334.     }
  9335.     public function getC2AvoirExportByCompteur($arrayCompteur){
  9336.         $avoirs = $this->em->getRepository(Avoir::class)->searchAvoirByCompteur($arrayCompteur);
  9337.         $arrays = [];
  9338.         $i = 0;
  9339.         foreach ($avoirs as $avoir){
  9340.             $spvName = $avoir->getSpv()?$avoir->getSpv()->getName():'';
  9341.             $spvCodeSage = $avoir->getSpv()?$avoir->getSpv()->getCodeSage():'';
  9342.             $fournisseurCode = $avoir->getFournisseur()?$avoir->getFournisseur()->getCodeFournisseur():'';
  9343.             $classification = $avoir->getClassification();
  9344.             $dateComptable = $avoir->getDateAvoir()?$avoir->getDateAvoir()->format('d/m/Y'):'';
  9345.             $dateEcheance = '';
  9346.             $dateCreation = $avoir->getCreatedAt()?$avoir->getCreatedAt()->format('d/m/Y'):'';
  9347.             $numeroFacture = $avoir->getNumeroAvoir();
  9348.             if(count($avoir->getTvaAvoir())>0 && $avoir->getTauxTva() == 0){
  9349.                 foreach ($avoir->getTvaAvoir() as $tvaMultiple){
  9350.                     $arrays[$i]['Type de ligne'] = 'Avoir';
  9351.                     $arrays[$i]['Code Société'] = $spvName;
  9352.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  9353.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9354.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9355.                     $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  9356.                     $arrays[$i]['Date comptable'] = $dateComptable;
  9357.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9358.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9359.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9360.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9361.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9362.                     $arrays[$i]['Montant à régler'] = '';
  9363.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9364.                     $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  9365.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTva($avoir,$tvaMultiple);
  9366.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9367.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($avoir->getNote(), 0, 127));
  9368.                     $arrays[$i]['Code projet'] = '';
  9369.                     $arrays[$i]['libellé projet'] = '';
  9370.                     $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  9371.                     $factureAssocie = '';
  9372.                     if ($avoirFactures) {
  9373.                         $h = 1;
  9374.                         $total = count($avoirFactures);
  9375.                         foreach ($avoirFactures as $avoirFacture) {
  9376.                             if ($total == $h) {
  9377.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  9378.                             } else {
  9379.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  9380.                             }
  9381.                             $h++;
  9382.                         }
  9383.                     }
  9384.                     $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  9385.                     $i++;
  9386.                     if(count($avoir->getProjectAvoir())>0){
  9387.                         foreach ($avoir->getProjectAvoir() as $project){
  9388.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9389.                             $arrays[$i]['Code Société'] = '';
  9390.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  9391.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9392.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  9393.                             $arrays[$i]['Avoir de charge'] = '';
  9394.                             $arrays[$i]['Date comptable'] = '';
  9395.                             $arrays[$i]['Date d’échéance'] = '';
  9396.                             $arrays[$i]['Date de création dans ERPI'] = '';
  9397. //                            if (count($avoir->getProjectAvoir()) == 1) {
  9398. //                                $arrays[$i]['Montant HT'] = (float)$avoir->getMonatantHt();
  9399. //                            } else {
  9400. //                                $arrays[$i]['Montant HT'] = (float)$project->getMontantHt();
  9401. //                            }
  9402. //                            $arrays[$i]['Montant TTC'] = '';
  9403. //                            $arrays[$i]['taux de TVA'] = '';
  9404.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9405.                             $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9406.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9407.                             $arrays[$i]['Montant à régler'] = '';
  9408.                             $arrays[$i]['Référence facture fournisseur'] = '';
  9409.                             $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  9410.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTvaProject($avoir,$tvaMultiple,$project->getProject());
  9411.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9412.                             $arrays[$i]['Commentaire comptable'] = '';
  9413.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9414.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9415.                             $arrays[$i]['Compteur facture associée'] = '';
  9416.                             $i++;
  9417.                         }
  9418.                     }
  9419.                 }
  9420.             }
  9421.             else {
  9422.                 $arrays[$i]['Type de ligne'] = 'Avoir';
  9423.                 $arrays[$i]['Code Société'] = $spvName;
  9424.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  9425.                 $arrays[$i]['Code budgétaire'] = $classification;
  9426.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9427.                 $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]) ? self::CHARGE_INVESTISSEMENT_DEPENSE[$classification] : '';
  9428.                 $arrays[$i]['Date comptable'] = $dateComptable;
  9429.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9430.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9431.                 $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  9432.                 if($avoirs){
  9433.                     $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  9434.                     $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  9435.                     $montantHt = $montantTtc / (1 + ($tauxTva/100));
  9436.                     $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  9437.                     $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  9438.                     $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  9439.                 }else{
  9440.                     $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$avoir->getMonatantHt()),2,'.','');
  9441.                     $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$avoir->getMonatantTtc()),2,'.','');
  9442.                     $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$avoir->getTauxTva()),2,'.','');
  9443.                 }
  9444.                 $arrays[$i]['Montant à régler'] = '';
  9445.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9446.                 $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  9447.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTva($avoir);
  9448.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9449.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($avoir->getNote(), 0, 127));
  9450.                 $arrays[$i]['Code projet'] = '';
  9451.                 $arrays[$i]['libellé projet'] = '';
  9452.                 $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  9453.                 $factureAssocie = '';
  9454.                 if ($avoirFactures) {
  9455.                     $h = 1;
  9456.                     $total = count($avoirFactures);
  9457.                     foreach ($avoirFactures as $avoirFacture) {
  9458.                         if ($total == $h) {
  9459.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  9460.                         } else {
  9461.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  9462.                         }
  9463.                         $h++;
  9464.                     }
  9465.                 }
  9466.                 $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  9467.                 $i++;
  9468.                 if (count($avoir->getProjectAvoir()) > 0) {
  9469.                     foreach ($avoir->getProjectAvoir() as $project) {
  9470.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9471.                         $arrays[$i]['Code Société'] = '';
  9472.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  9473.                         $arrays[$i]['Code budgétaire'] = $classification;
  9474.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  9475.                         $arrays[$i]['Avoir de charge'] = '';
  9476.                         $arrays[$i]['Date comptable'] = '';
  9477.                         $arrays[$i]['Date d’échéance'] = '';
  9478.                         $arrays[$i]['Date de création dans ERPI'] = '';
  9479.                         if (count($avoir->getProjectAvoir()) == 1) {
  9480.                             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir->getId()]);
  9481.                             if ($avoirs) {
  9482.                                 $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  9483.                                 $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  9484.                                 $montantHt = $montantTtc / (1 + ($tauxTva / 100));
  9485.                                 $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  9486.                                 $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  9487.                                 $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  9488.                             } else {
  9489.                                 $arrays[$i]['Montant HT'] = number_format((float)$avoir->getMonatantHt(),2,'.','');
  9490.                                 $arrays[$i]['Montant TTC'] = number_format((float)$avoir->getMonatantTtc(),2,'.','');
  9491.                                 $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  9492.                             }
  9493.                         }else{
  9494.                             $montantHt = (float)str_replace(',','.',$project->getMontantHt());
  9495.                             $tauxTva = $avoir->getTauxTva() && (float)$avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  9496.                             $arrays[$i]['Montant HT'] = number_format($montantHt,2,'.','');
  9497.                             $arrays[$i]['Montant TTC'] = number_format($montantHt + (1 *( $tauxTva/100)),2,'.','');
  9498.                             $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  9499.                         }
  9500.                         $arrays[$i]['Montant à régler'] = '';
  9501.                         $arrays[$i]['Référence facture fournisseur'] = '';
  9502.                         $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  9503.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTvaProject($avoir, $project->getProject());
  9504.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9505.                         $arrays[$i]['Commentaire comptable'] = '';
  9506.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9507.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9508.                         $arrays[$i]['Compteur facture associée'] = '';
  9509.                         $i++;
  9510.                     }
  9511.                 }
  9512.             }
  9513.         }
  9514.         return $arrays;
  9515.     }
  9516.     public function getC3AcomptesExportByCompteur($arrayCompteur){
  9517.         $factures = $this->em->getRepository(FactureFinance::class)->searchFactureByCompteur($arrayCompteur);
  9518.         $arrays = [];
  9519.         $i = 0;
  9520.         foreach ($factures as $facture){
  9521.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  9522.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  9523.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  9524.             $classification = $facture->getClassification();
  9525.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  9526.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  9527.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  9528.             $numeroFacture = $facture->getNumeroFacture();
  9529.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  9530.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  9531.                     $arrays[$i]['Type de ligne'] = 'Acompte';
  9532.                     $arrays[$i]['Code Société'] = $spvName;
  9533.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  9534.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9535.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9536.                     $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  9537.                     $arrays[$i]['Date comptable'] = $dateComptable;
  9538.                     $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  9539.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9540.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9541.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9542.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9543. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  9544.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9545.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9546.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9547.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  9548.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9549. //                    if($facture->getIsAvoir()){
  9550. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9551. //                        $a = count($avoirs);
  9552. //                        $b = 1;
  9553. //                        $avoirNum = '';
  9554. //                        foreach ($avoirs as $item){
  9555. //                            if($b == $a){
  9556. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  9557. //                            }else{
  9558. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  9559. //                            }
  9560. //                            $b++;
  9561. //                        }
  9562. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  9563. //                    }else{
  9564.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  9565. //                    }
  9566.                     $arrays[$i]['Code projet'] = '';
  9567.                     $arrays[$i]['libellé projet'] = '';
  9568.                     $arrays[$i]['Compteur facture associée'] = '';
  9569.                     $i++;
  9570.                     if(count($facture->getProjectFactureFinance())>0){
  9571.                         foreach ($facture->getProjectFactureFinance() as $project){
  9572.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9573.                             $arrays[$i]['Code Société'] = '';
  9574.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  9575.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9576.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  9577.                             $arrays[$i]['Acompte pour une charge'] = '';
  9578.                             $arrays[$i]['Date comptable'] = '';
  9579.                             $arrays[$i]['Date d’échéance'] = '';
  9580.                             $arrays[$i]['Date de création dans ERPI'] = '';
  9581.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9582.                             $arrays[$i]['Montant TTC'] = '';
  9583.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9584.                             $arrays[$i]['Montant à régler'] = '';
  9585.                             $arrays[$i]['Référence facture fournisseur'] = '';
  9586.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9587.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  9588.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9589.                             $arrays[$i]['Commentaire comptable'] = '';
  9590.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9591.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9592.                             $arrays[$i]['Compteur facture associée'] = '';
  9593.                             $i++;
  9594.                         }
  9595.                     }
  9596.                 }
  9597.             }
  9598.             else{
  9599.                 $arrays[$i]['Type de ligne'] = 'Acompte';
  9600.                 $arrays[$i]['Code Société'] = $spvName;
  9601.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  9602.                 $arrays[$i]['Code budgétaire'] = $classification;
  9603.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9604.                 $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  9605.                 $arrays[$i]['Date comptable'] = $dateComptable;
  9606.                 $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  9607.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9608.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  9609.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  9610.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  9611.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9612.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9613.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9614.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  9615.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9616. //                if($facture->getIsAvoir()){
  9617. //                    $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9618. //                    $a = count($avoirs);
  9619. //                    $b = 1;
  9620. //                    $avoirNum = '';
  9621. //                    foreach ($avoirs as $item){
  9622. //                        if($b == $a){
  9623. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  9624. //                        }else{
  9625. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  9626. //                        }
  9627. //                        $b++;
  9628. //                    }
  9629. //                    $arrays[$i]['Commentaire comptable'] = $avoirNum;
  9630. //                }else{
  9631.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  9632. //                }
  9633.                 $arrays[$i]['Code projet'] = '';
  9634.                 $arrays[$i]['libellé projet'] = '';
  9635.                 $arrays[$i]['Compteur facture associée'] = '';
  9636.                 $i++;
  9637.                 if(count($facture->getProjectFactureFinance())>0){
  9638.                     foreach ($facture->getProjectFactureFinance() as $project){
  9639.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9640.                         $arrays[$i]['Code Société'] = '';
  9641.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  9642.                         $arrays[$i]['Code budgétaire'] = $classification;
  9643.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  9644.                         $arrays[$i]['Acompte pour une charge'] = '';
  9645.                         $arrays[$i]['Date comptable'] = '';
  9646.                         $arrays[$i]['Date d’échéance'] = '';
  9647.                         $arrays[$i]['Date de création dans ERPI'] = '';
  9648.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$project->getMontantHt()),2,'.','');
  9649.                         $arrays[$i]['Montant TTC'] = '';
  9650.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  9651.                         $arrays[$i]['Montant à régler'] = '';
  9652.                         $arrays[$i]['Référence facture fournisseur'] = '';
  9653.                         $arrays[$i]['Compteur ERPI pièce'] = '';
  9654.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  9655.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9656.                         $arrays[$i]['Commentaire comptable'] = '';
  9657.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9658.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9659.                         $arrays[$i]['Compteur facture associée'] = '';
  9660.                         $i++;
  9661.                     }
  9662.                 }
  9663.             }
  9664.         }
  9665.         return $arrays;
  9666.     }
  9667.     public function getC4ReglementsExportByCompteur($arrayCompteur){
  9668.         $factures = $this->em->getRepository(FactureFinance::class)->searchreglementByCompteur($arrayCompteur);
  9669.         $arrays = [];
  9670.         $i = 0;
  9671.         foreach ($factures as $facture){
  9672.             $banqueFournisseur = '';
  9673.             $ibanFournisseur = '';
  9674.             $bicFournisseur = '';
  9675.             $codePaysFournisseur = '';
  9676.             if ($facture->getFournisseur()) {
  9677.                 if($facture->getRib()) {
  9678.                     $fournisseurBanque = $facture->getRib();
  9679.                 }else {
  9680.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  9681.                 }
  9682.                 if (!$fournisseurBanque) {
  9683.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  9684.                 }
  9685.                 if ($fournisseurBanque) {
  9686.                     $banqueFournisseur = $fournisseurBanque->getBanque();
  9687.                     $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  9688.                     $bicFournisseur = $fournisseurBanque->getBic();
  9689.                 }
  9690.                 $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  9691.             }
  9692. //            $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  9693.             $spvName = '';
  9694.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  9695.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  9696.             $classification = $facture->getClassification();
  9697.             $dateComptable = $facture->getDate()?$facture->getDate()->format('d/m/Y'):'';
  9698.             $dateEcheance = '';
  9699.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  9700.             $numeroFacture = $facture->getNumeroFacture();
  9701. //            if(count($facture->getProjectFactureFinance())>1){
  9702. //                foreach ($facture->getProjectFactureFinance() as $projectFinance){
  9703. //                    $arrays[$i]['Type de ligne'] = 'Reglement';
  9704. //                    $arrays[$i]['Code Société'] = $spvName;
  9705. //                    $arrays[$i]['Code Sage'] = $spvCodeSage;
  9706. //                    $arrays[$i]['Code budgétaire'] = $facture->getClassification();
  9707. //                    $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9708. //                    $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()]:'';
  9709. //                    $arrays[$i]['Date comptable'] = $dateComptable;
  9710. //                    $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9711. //                    $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9712. //                    $arrays[$i]['Montant HT'] = (float)$projectFinance->getMontantHt();
  9713. //                    if($facture->getTauxTva()){
  9714. //                        $tva = (float)$facture->getTauxTva();
  9715. //                    }else{
  9716. //                        $tva = 20;
  9717. //                    }
  9718. //                    $arrays[$i]['Montant TTC'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  9719. //                    $arrays[$i]['taux de TVA'] = $tva;
  9720. //                    $arrays[$i]['Montant à régler'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  9721. //                    $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9722. //                    $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  9723. ////                    $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  9724. ////                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9725. //
  9726. //                    $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$projectFinance->getProject());
  9727. //                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9728. //
  9729. //                    if($facture->getIsAvoir()){
  9730. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9731. //                        $a = count($avoirs);
  9732. //                        $b = 1;
  9733. //                        $avoirNum = '';
  9734. //                        foreach ($avoirs as $item){
  9735. //                            if($b == $a){
  9736. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  9737. //                            }else{
  9738. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  9739. //                            }
  9740. //                            $b++;
  9741. //                        }
  9742. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  9743. //                    }else{
  9744. //                        $arrays[$i]['Commentaire comptable'] = $facture->getCommentComptable();
  9745. //                    }
  9746. //                    $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  9747. //                    $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  9748. //                    $arrays[$i]['Compteur facture associée'] = $numeroFacture;
  9749. //                    $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  9750. //                    $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  9751. //                    $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  9752. //                    $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  9753. //                    $i++;
  9754. //                }
  9755. //            }else{
  9756.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  9757.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  9758.                     $arrays[$i]['Type de ligne'] = 'Reglement';
  9759.                     $arrays[$i]['Code Société'] = $spvName;
  9760.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  9761.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9762.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9763.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  9764.                     $arrays[$i]['Date comptable'] = $dateComptable;
  9765.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9766.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9767.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9768.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9769.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9770.                     $arrays[$i]['Montant à régler'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9771. //                    $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9772.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9773.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  9774.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  9775.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9776.                     if($facture->getIsAvoir()){
  9777.                         $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9778.                         $a = count($avoirs);
  9779.                         $b = 1;
  9780.                         $avoirNum = '';
  9781.                         foreach ($avoirs as $item){
  9782.                             if($b == $a){
  9783.                                 $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  9784.                             }else{
  9785.                                 $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  9786.                             }
  9787.                             $b++;
  9788.                         }
  9789.                         $arrays[$i]['Commentaire comptable'] = substr($avoirNum, 0, 127) ;
  9790.                     }else{
  9791.                         $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  9792.                     }
  9793.                     $arrays[$i]['Code projet'] = '';
  9794.                     $arrays[$i]['libellé projet'] = '';
  9795.                     $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  9796.                     $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  9797.                     $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  9798.                     $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  9799.                     $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  9800.                     $arrays[$i]['Autoliquidation'] = 0;
  9801.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  9802.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  9803.                     $i++;
  9804.                 }
  9805.             }
  9806.             else{
  9807.                 $arrays[$i]['Type de ligne'] = 'Reglement';
  9808.                 $arrays[$i]['Code Société'] = $spvName;
  9809.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  9810.                 $arrays[$i]['Code budgétaire'] = $classification;
  9811.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9812.                 $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  9813.                 $arrays[$i]['Date comptable'] = $dateComptable;
  9814.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9815.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9816.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  9817.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  9818.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  9819.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9820.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9821.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  9822.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndNotTva($facture);
  9823.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9824.                 if($facture->getIsAvoir()){
  9825.                     $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9826.                     $a = count($avoirs);
  9827.                     $b = 1;
  9828.                     $avoirNum = '';
  9829.                     foreach ($avoirs as $item){
  9830.                         if($b == $a){
  9831.                             $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir();
  9832.                         }else{
  9833.                             $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir()." / ";
  9834.                         }
  9835.                         $b++;
  9836.                     }
  9837.                     $arrays[$i]['Commentaire comptable'] = substr($avoirNum, 0, 127);
  9838.                 }else{
  9839.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  9840.                 }
  9841. //                    foreach ($facture->getProjectFactureFinance() as $projectFinance){
  9842. //                        $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  9843. //                        $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  9844. //                    }
  9845.                 $arrays[$i]['Code projet'] = '';
  9846.                 $arrays[$i]['libellé projet'] =  '';
  9847.                 $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  9848.                 $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  9849.                 $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  9850.                 $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  9851.                 $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  9852.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  9853.                 $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  9854.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  9855.                 $i++;
  9856.             }
  9857. //            }
  9858.         }
  9859.         return $arrays;
  9860.     }
  9861.     public function paginateLogAPI($request){
  9862.         $length = $request->get('length');
  9863.         $length = $length && ($length!=-1)?$length:0;
  9864.         $start = $request->get('start');
  9865.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  9866.         $column =  $search = $request->get('columns');
  9867.         $order = $request->get('order')[0];
  9868.         $columnOrder = $order['column'];
  9869.         $dirOrder = $order['dir'];
  9870.         $columNameOrder = $column[$columnOrder]['data'];
  9871.         $search = $request->get('search');
  9872.         $btnTypeTab = $request->get('btnTypeTab');
  9873.         $filters = [
  9874.             'query' => trim(@$search['value']),
  9875.             'btnTypeTab' => $btnTypeTab,
  9876.             'isError' => $request->get('isError'),
  9877.             'numeroDocument' => $request->get('numeroDocument'),
  9878.         ];
  9879.         $results= $this->em->getRepository(\App\Entity\EfacData::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  9880.         $recordsFiltered= $this->em->getRepository(\App\Entity\EfacData::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  9881.         $recordsTotal= $this->em->getRepository(\App\Entity\EfacData::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  9882.         $output = array(
  9883.             'data' => array(),
  9884.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  9885.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  9886.         );
  9887.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  9888.         foreach ($results as $result) {
  9889.             // N° de Facture | Avoir : extrait depuis le contenu JSON du log
  9890.             $numFacture = '';
  9891.             $dataEfac = $result->getDataEfac();
  9892.             if ($dataEfac) {
  9893.                 $decoded = json_decode($dataEfac, true);
  9894.                 if (is_array($decoded) && isset($decoded['documentList']) && is_array($decoded['documentList'])) {
  9895.                     $numeros = [];
  9896.                     foreach ($decoded['documentList'] as $document) {
  9897.                         if (isset($document['invoice_number_fournisseur']) && $document['invoice_number_fournisseur']) {
  9898.                             $numeros[] = $document['invoice_number_fournisseur'];
  9899.                         }
  9900.                     }
  9901.                     $numFacture = implode(', ', $numeros);
  9902.                 }
  9903.             }
  9904.             // Bouton "Voir" pour afficher le contenu du log (data-efac) dans une modal
  9905.             $action = '';
  9906.             if ($dataEfac) {
  9907.                 $action = '<a href="#" class="btn btn-primaryCustom btn-sm showDataEfac" style="color: #fff !important;" data-data="' . htmlspecialchars($dataEfac, ENT_QUOTES) . '">Voir</a>';
  9908.             }
  9909.             // Msg : "Ok" pour le succès (200) ; sinon bouton "Voir le msg" ouvrant une modal avec le message formaté
  9910.             $rawMsg = $result->getMsg();
  9911.             if ((string)$rawMsg === '200') {
  9912.                 $msg = 'Ok';
  9913.             } elseif ($rawMsg) {
  9914.                 $msg = '<a href="#" class="btn btn-primaryCustom btn-sm showMsgEfac" style="color: #fff !important;" data-msg="' . htmlspecialchars($rawMsg, ENT_QUOTES) . '">Voir le msg</a>';
  9915.             } else {
  9916.                 $msg = '';
  9917.             }
  9918.             $output['data'][] = [
  9919.                 'responsive_id' => '',
  9920.                 'id' => $result->getId(),
  9921.                 'numFacture' => $numFacture,
  9922.                 'transactionId' => $result->getTransactionId(),
  9923.                 'msg' => $msg,
  9924.                 'createdAt' => $result->getCreatedAt() ? $result->getCreatedAt()->format('d/m/Y H:i') : '',
  9925.                 'action' => $action,
  9926.             ];
  9927.         }
  9928.         return $output;
  9929.     }
  9930.     /**
  9931.      * Rend le message d'un log Efac lisible (décodage unicode / extraction des messages JSON).
  9932.      */
  9933.     public function formatEfacMsg($rawMsg)
  9934.     {
  9935.         if ((string)$rawMsg === '200') {
  9936.             return 'Ok';
  9937.         }
  9938.         if (!$rawMsg) {
  9939.             return '';
  9940.         }
  9941.         $decoded = json_decode($rawMsg, true);
  9942.         if (is_array($decoded)) {
  9943.             $messages = [];
  9944.             if (isset($decoded['message'])) {
  9945.                 $messages[] = $decoded['message'];
  9946.             } else {
  9947.                 foreach ($decoded as $item) {
  9948.                     if (is_array($item) && isset($item['message'])) {
  9949.                         $messages[] = $item['message'];
  9950.                     } elseif (is_string($item)) {
  9951.                         $messages[] = $item;
  9952.                     }
  9953.                 }
  9954.             }
  9955.             return $messages ? implode(' | ', $messages) : json_encode($decoded, JSON_UNESCAPED_UNICODE);
  9956.         }
  9957.         $msgDecoded = json_decode('"' . str_replace('"', '\"', $rawMsg) . '"');
  9958.         return $msgDecoded !== null ? $msgDecoded : $rawMsg;
  9959.     }
  9960.     /**
  9961.      * Envoie au super administrateur l'ensemble des logs Efac du jour.
  9962.      */
  9963.     public function sendLogEfacDuJour()
  9964.     {
  9965.         $date = new \DateTime();
  9966.         $results = $this->em->getRepository(\App\Entity\EfacData::class)->findByDay($date);
  9967.         $logs = [];
  9968.         foreach ($results as $result) {
  9969.             // N° de Facture | Avoir : extrait depuis le contenu JSON du log
  9970.             $numFacture = '';
  9971.             $dataEfac = $result->getDataEfac();
  9972.             if ($dataEfac) {
  9973.                 $decoded = json_decode($dataEfac, true);
  9974.                 if (is_array($decoded) && isset($decoded['documentList']) && is_array($decoded['documentList'])) {
  9975.                     $numeros = [];
  9976.                     foreach ($decoded['documentList'] as $document) {
  9977.                         if (isset($document['invoice_number_fournisseur']) && $document['invoice_number_fournisseur']) {
  9978.                             $numeros[] = $document['invoice_number_fournisseur'];
  9979.                         }
  9980.                     }
  9981.                     $numFacture = implode(', ', $numeros);
  9982.                 }
  9983.             }
  9984.             $logs[] = [
  9985.                 'numFacture' => $numFacture,
  9986.                 'transactionId' => $result->getTransactionId(),
  9987.                 'msg' => $this->formatEfacMsg($result->getMsg()),
  9988.             ];
  9989.         }
  9990.         $this->notification->sendLogEfacDuJour('Logs API Efac du ' . $date->format('d/m/Y'), $logs, $date);
  9991.         return count($logs);
  9992.     }
  9993. }