src/Services/FactureFinanceService.php line 217

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.                 }else{
  540.                     $facture->setRib(null);
  541.                 }
  542.                 $ribInputSpv = $request->get('ribInputSpv');
  543.                 if($ribInputSpv){
  544.                     $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  545.                     $facture->setRibSpv($ribSpv);
  546.                 }else{
  547.                     $facture->setRibSpv(null);
  548.                 }
  549. //                if(!$ribInput || !$ribInputSpv || $ribInput == 0 ||  $ribInputSpv == 0){
  550. //                    return [
  551. //                        'form' => $form->createView(),
  552. //                        'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">les champs rib fournisseur et rib spv sont obligatoires !</p></div>',
  553. //                        'success' => false,
  554. //                        'factureFinance' => $facture,
  555. //                        'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  556. //                    ];
  557. //                }else{
  558. //                    if($ribInputSpv != 0){
  559. //                        $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  560. //                        if($ribSpv){
  561. //                            if (preg_match('/^[a-zA-Z0-9]+$/', $ribSpv->getIban())) {
  562. //
  563. //                            } else {
  564. //                                return [
  565. //                                    'form' => $form->createView(),
  566. //                                    'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champ rib spv n\'est pas valide !</p></div>',
  567. //                                    'success' => false,
  568. //                                    'factureFinance' => $facture,
  569. //                                    'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  570. //                                ];
  571. //                            }
  572. //                        }
  573. //                    }
  574. //                }
  575.                 $this->em->persist($facture);
  576.                 $this->em->flush();
  577.                 // add project in Produit(s)/Service(s)
  578.                 $tvaFactureFinancePriceService = $request->get('tvaFactureFinancePriceService');
  579.                 $tvaFactureFinancePriceServiceOld = $this->em->getRepository(FactureFinanceMontantTvaProject::class)->getByFacture($facture);
  580.                 if($tvaFactureFinancePriceServiceOld){
  581.                     foreach ($tvaFactureFinancePriceServiceOld as $value){
  582.                         $this->em->remove($value);
  583.                     }
  584.                     $this->em->flush();
  585.                 }
  586.                 if($tvaFactureFinancePriceService){
  587.                     foreach ($tvaFactureFinancePriceService as $tvaFactureFinancePriceServiceItem) {
  588.                         foreach ($tvaFactureFinancePriceServiceItem as $item) {
  589.                             if(isset($item['project'])){
  590.                                 $tvaFactureFinance = $this->em->getRepository(FactureFinanceMontantTva::class)->find($item['idService']);
  591.                                 $project = $this->em->getRepository(Project::class)->find($item['project']);
  592.                                 $tvaFactureFinancePriceServiceEntity = new FactureFinanceMontantTvaProject();
  593.                                 $tvaFactureFinancePriceServiceEntity->setFactureFinanceMontantTva($tvaFactureFinance);
  594.                                 $tvaFactureFinancePriceServiceEntity->setProject($project);
  595.                                 $tvaFactureFinancePriceServiceEntity->setMontantHt($item['montantHt']);
  596.                                 $tvaFactureFinancePriceServiceEntity->setMontantTtc($item['montantTtc']);
  597.                                 $this->em->persist($tvaFactureFinancePriceServiceEntity);
  598.                                 $this->em->flush();
  599.                             }
  600.                         }
  601.                     }
  602.                 }
  603.                 $this->notification->setCompteurErpiEcriture($facture);
  604.                 return [
  605.                     'form' => $form->createView(),
  606.                     'factureFinance' => $facture,
  607.                     'success' => true
  608.                 ];
  609.             }
  610.         }
  611.         return [
  612.             'form' => $form->createView(),
  613.             'factureFinance' => $facture,
  614.             'success' => false,
  615.             'action' => $this->router->generate('admin_facture_finance_submit_edit',['token'=>$token]),
  616.         ];
  617.     }
  618.     public function editFactureFinanceV2($request,$token)
  619.     {
  620.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  621.         $prjectIds  = null ;
  622.         if($facture->getSpv()){
  623.             $projects = $this->em->getRepository(Project::class)->findBy(['spv'=>$facture->getSpv()->getId()]);
  624.             foreach ($projects as $project ){
  625.                 $prjectIds[] = $project->getId();
  626.             }
  627.         }
  628.         if($facture){
  629.             $form = $this->form->create(FactureFinanceV2Type::class, $facture,['projectIds'=>$prjectIds]);
  630.             $form->add('datePaiement', DateType::class, [
  631.                 'widget' => 'single_text',
  632.                 'attr' => ['class' => 'js-datepicker d-none'],
  633.                 'format' => 'yyyy-MM-dd',
  634.                 'html5' => true,
  635.                 'empty_data' => '',
  636.                 'required' => false
  637.             ]) ;
  638.             $form->handleRequest($request);
  639.             if($facture->getStatus() == FactureFinance::STATUS_REFUS){
  640.                 $this->flashBag->add(
  641.                     'danger',
  642.                     'Facture refusée'
  643.                 );
  644.                 return [
  645.                     'form' => $form->createView(),
  646.                     'factureFinance' => $facture,
  647.                     'success' => false,
  648.                     'redirect' => true,
  649.                     'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  650.                 ];
  651.             }
  652.             if ($form->isSubmitted() && $form->isValid()) {
  653.                 $userCurrent = $this->security->getUser();
  654.                 $spv = $form->get('spv')->getData();
  655.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  656.                 }else {
  657.                     if (!$spv->getIsPrejeance() && !$userCurrent->getIsAccesCreateFactureSpv()) {
  658.                         return [
  659.                             'form' => $form->createView(),
  660.                             'messageErreur' => '<p>vous n\'êtes pas autorisé à modifier la facture</p>',
  661.                             'success' => false,
  662.                             'factureFinance' => $facture,
  663.                             'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  664.                         ];
  665.                     }
  666.                     if ($spv->getIsPrejeance() && !$userCurrent->getIsAccesCreateFacturePrejeance()) {
  667.                         return [
  668.                             'form' => $form->createView(),
  669.                             'messageErreur' => '<p>vous n\'êtes pas autorisé à modifier la facture</p>',
  670.                             'success' => false,
  671.                             'factureFinance' => $facture,
  672.                             'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  673.                         ];
  674.                     }
  675.                 }
  676.                 $projectFactureFinance = $form->get('projectFactureFinance')->getData();
  677.                 $montantHt = $form->get('monatantHt')->getData();
  678.                 $montantHtProject = 0;
  679.                 $isProjectAltarea = false;
  680.                 if(count($projectFactureFinance)> 0){
  681.                     foreach ($projectFactureFinance as $value){
  682.                         $montantHtProject = $montantHtProject + floatval(str_replace([','], ".", str_replace([' '], "", $value->getMontantHt())));
  683.                         if($value->getProject() && $value->getProject()->getEntreprise() && $value->getProject()->getEntreprise()->getIsAlteria()){
  684.                             $isProjectAltarea = true;
  685.                         }
  686.                     }
  687.                     if($montantHtProject != 0){
  688.                         if((string)$montantHtProject != (string)floatval($montantHt)){
  689.                             return [
  690.                                 'form' => $form->createView(),
  691.                                 'messageErreur' => '<p>Veuillez verifier les prix des projets</p><p>Il faut que le prix du projet corresponde au prix global</p>',
  692.                                 'success' => false,
  693.                                 'factureFinance' => $facture,
  694.                                 'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  695.                             ];
  696.                         }
  697.                     }
  698. //                    if($isProjectAltarea){
  699. //                        return [
  700. //                            'form' => $form->createView(),
  701. //                            '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>',
  702. //                            'success' => false,
  703. //                            'factureFinance' => $facture,
  704. //                            'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  705. //                        ];
  706. //                    }
  707.                 }else{
  708.                     return [
  709.                         'form' => $form->createView(),
  710.                         'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champs projet est obligatoire !</p></div>',
  711.                         'success' => false,
  712.                         'factureFinance' => $facture,
  713.                         'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  714.                     ];
  715.                 }
  716.                 // Si Taux de TVA = "Autre" (0) : les sommes des lignes de TVA doivent correspondre aux montants globaux
  717.                 if($facture->getAutoliquidation()){
  718.                     $facture->setTauxTva(20);
  719.                 }elseif(count($facture->getTvaFactureFinance()) > 0 && $facture->getTauxTva() !== null && $facture->getTauxTva() !== '' && floatval($facture->getTauxTva()) == 0){
  720.                     $sumTvaAutre = 0; $sumHtAutre = 0; $sumTtcAutre = 0;
  721.                     foreach ($facture->getTvaFactureFinance() as $ligneTva){
  722.                         $sumTvaAutre += floatval(str_replace(',', '.', str_replace(' ', '', (string)$ligneTva->getTva())));
  723.                         $sumHtAutre  += floatval(str_replace(',', '.', str_replace(' ', '', (string)$ligneTva->getMontantHt())));
  724.                         $sumTtcAutre += floatval(str_replace(',', '.', str_replace(' ', '', (string)$ligneTva->getMontantTtc())));
  725.                     }
  726.                     $tvaGlobal = floatval(str_replace(',', '.', str_replace(' ', '', (string)$facture->getTva())));
  727.                     $htGlobal  = floatval(str_replace(',', '.', str_replace(' ', '', (string)$facture->getMonatantHt())));
  728.                     $ttcGlobal = floatval(str_replace(',', '.', str_replace(' ', '', (string)$facture->getMonatantTtc())));
  729.                     if(round($sumTvaAutre, 2) != round($tvaGlobal, 2)
  730.                         || round($sumHtAutre, 2) != round($htGlobal, 2)
  731.                         || round($sumTtcAutre, 2) != round($ttcGlobal, 2)){
  732.                         $erreurs = '';
  733.                         if(round($sumTvaAutre, 2) != round($tvaGlobal, 2)){
  734.                             $erreurs .= '<p>La somme des montants TVA des lignes ('.$sumTvaAutre.') ne correspond pas au Montant TVA ('.$tvaGlobal.').</p>';
  735.                         }
  736.                         if(round($sumHtAutre, 2) != round($htGlobal, 2)){
  737.                             $erreurs .= '<p>La somme des montants HT des lignes ('.$sumHtAutre.') ne correspond pas au Montant HT ('.$htGlobal.').</p>';
  738.                         }
  739.                         if(round($sumTtcAutre, 2) != round($ttcGlobal, 2)){
  740.                             $erreurs .= '<p>La somme des montants TTC des lignes ('.$sumTtcAutre.') ne correspond pas au Montant TTC ('.$ttcGlobal.').</p>';
  741.                         }
  742.                         return [
  743.                             'form' => $form->createView(),
  744.                             'messageErreur' => $erreurs,
  745.                             'success' => false,
  746.                             'factureFinance' => $facture,
  747.                             'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  748.                         ];
  749.                     }
  750.                 }
  751.                 $fileFactureToken = $request->get('fileFactureFinance');
  752.                 if($fileFactureToken){
  753.                     $fileFacture = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileFactureToken]);
  754.                     $nomenclature = $this->getNomenclature($facture,$fileFacture);
  755.                     $facture->setFileFacture($fileFacture);
  756.                 }
  757.                 if($facture->getStatus() == FactureFinance::STATUS_DEMANDE_MODIFICATION){
  758.                     $facture->setStatus(FactureFinance::STATUS_A_VERIFIER);
  759.                 }elseif ($facture->getStatus() == FactureFinance::STATUS_A_COMPLETER){
  760.                     $facture->setStatus(FactureFinance::STATUS_EN_ATTENT_VALIDATION);
  761.                 }
  762.                 $ribInput = $request->get('ribInput');
  763.                 if($ribInput){
  764.                     $rib = $this->em->getRepository(Rib::class)->find($ribInput);
  765.                     $facture->setRib($rib);
  766.                 }
  767.                 $ribInputSpv = $request->get('ribInputSpv');
  768.                 if($ribInputSpv){
  769.                     $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  770.                     $facture->setRibSpv($ribSpv);
  771.                 }
  772.                 $this->em->persist($facture);
  773.                 $this->em->flush();
  774.                 $this->notification->setCompteurErpiEcriture($facture);
  775.                 return [
  776.                     'form' => $form->createView(),
  777.                     'factureFinance' => $facture,
  778.                     'success' => true
  779.                 ];
  780.             }
  781.         }
  782.         return [
  783.             'form' => $form->createView(),
  784.             'factureFinance' => $facture,
  785.             'success' => false,
  786.             'action' => $this->router->generate('admin_facture_finance_v2_submit_edit',['token'=>$token]),
  787.         ];
  788.     }
  789.     public function checkRibSpv($request,$token){
  790.         $factureFinance = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  791.         $ribInput = $factureFinance->getRib();
  792.         $ribInputSpv = $factureFinance->getRibSpv();
  793.         if(!$ribInput || !$ribInputSpv){
  794.             return [
  795.                 'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">les champs rib fournisseur et rib spv sont obligatoires !</p></div>',
  796.                 'success' => false,
  797.                 'status' => 1,
  798.             ];
  799.         }else{
  800.             if($ribInputSpv){
  801.                 if (preg_match('/^[a-zA-Z0-9]+$/', $ribInputSpv->getIban())) {
  802.                 } else {
  803.                     return [
  804.                         'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champ rib spv n\'est pas valide !</p></div>',
  805.                         'success' => false,
  806.                         'status' => 2,
  807.                     ];
  808.                 }
  809.             }
  810.         }
  811.         return [
  812.             'messageErreur' => '',
  813.             'success' => true,
  814.         ];
  815.     }
  816.     public function editFactureFinanceBrouillon($request,$token)
  817.     {
  818.         $facture = $this->em->getRepository(FactureFinanceBrouillon::class)->findOneBy(['token'=>$token]);
  819.         if($facture){
  820.             $form = $this->form->create(FactureFinanceBrouillonType::class, $facture);
  821.             $form->handleRequest($request);
  822.             if ($form->isSubmitted() && $form->isValid()) {
  823.                 $fileFactureToken = $request->get('fileFactureFinance');
  824.                 if($fileFactureToken){
  825.                     $fileFacture = $this->em->getRepository(DocUpload::class)->findOneBy(['token'=>$fileFactureToken]);
  826.                     $facture->setFileFacture($fileFacture);
  827.                 }
  828.                 if($facture->getCategory() == 'Avoir'){
  829.                     $this->em->persist($facture);
  830.                     $this->em->flush();
  831.                     $factureFinance = new Avoir();
  832.                     $factureFinance->setFileAvoir($facture->getFileFacture());
  833.                     $factureFinance->setStatus(Avoir::STATUS_EN_ATTENT_VALIDATION);
  834.                     $factureFinance->setDateAvoir($facture->getDateFacture());
  835.                     $factureFinance->setDeveloppeur($facture->getDeveloppeur());
  836.                     $factureFinance->setEpc($facture->getEpc());
  837.                     $factureFinance->setFournisseur($facture->getFournisseur());
  838.                     $factureFinance->setMonatantTtc($facture->getMonatantTtc());
  839.                     $factureFinance->setMonatantHt($facture->getMonatantHt());
  840.                     $factureFinance->setNote($facture->getNote());
  841.                     $factureFinance->setNumeroAvoir($facture->getNumeroFacture());
  842.                     $factureFinance->setSpv($facture->getSpv());
  843.                     $factureFinance->setTauxTva($facture->getTauxTva());
  844.                     $factureFinance->setTva($facture->getTva());
  845.                     $factureFinance->setUserCreated($facture->getUserCreated());
  846.                     if (count($facture->getProjectFactureFinanceBrouillon())) {
  847.                         foreach ($facture->getProjectFactureFinanceBrouillon() as $projectBrouillon) {
  848.                             $projectFactureFinance = new ProjectAvoir();
  849.                             $projectFactureFinance->setTva($projectBrouillon->getTva());
  850.                             $projectFactureFinance->setCategory($projectBrouillon->getCategory());
  851.                             $projectFactureFinance->setProject($projectBrouillon->getProject());
  852.                             $projectFactureFinance->setEtap($projectBrouillon->getEtap());
  853.                             $projectFactureFinance->setMontantHt($projectBrouillon->getMontantHt());
  854.                             $projectFactureFinance->setMontantTtc($projectBrouillon->getMontantTtc());
  855.                             $projectFactureFinance->setAvoir($factureFinance);
  856.                             $this->em->persist($projectFactureFinance);
  857.                         }
  858.                     }
  859.                     $this->em->persist($factureFinance);
  860.                     $this->em->flush();
  861.                     $this->notification->setCompteurErpiPiece(null,$factureFinance);
  862.                     $this->notification->setCompteurErpiEcriture(null,$facture);
  863.                     $facture->setStatus(FactureFinance::STATUS_Brouillon_valide);
  864.                     $this->em->persist($facture);
  865.                     $this->em->flush();
  866.                     if($factureFinance->getFileFacture()){
  867.                         $this->getNomenclatureAvoir($factureFinance,$factureFinance->getFileFacture());
  868.                     }
  869.                     return [
  870.                         'form' => $form->createView(),
  871.                         'factureFinance' => $facture,
  872.                         'avoir' => $factureFinance,
  873.                         'success' => true
  874.                     ];
  875.                 }else {
  876.                     $projectFactureFinance = $form->get('projectFactureFinanceBrouillon')->getData();
  877.                     $montantHt = $form->get('monatantHt')->getData();
  878.                     $montantHtProject = 0;
  879.                     $isProjectAltarea = false;
  880.                     if(count($projectFactureFinance)> 0){
  881.                         foreach ($projectFactureFinance as $value){
  882.                             $montantHtProject = $montantHtProject + floatval(str_replace([','], ".", str_replace([' '], "", $value->getMontantHt())));
  883.                             if($value->getProject() && $value->getProject()->getEntreprise() && $value->getProject()->getEntreprise()->getIsAlteria()){
  884. //                                $isProjectAltarea = true;
  885.                             }
  886.                         }
  887.                         if($montantHtProject != 0){
  888.                             if((string)$montantHtProject != (string)floatval($montantHt)){
  889.                                 return [
  890.                                     'form' => $form->createView(),
  891.                                     'messageErreur' => '<p>Veuillez verifier les prix des projets</p><p>Il faut que le prix du projet corresponde au prix global</p>',
  892.                                     'factureFinance' => $facture,
  893.                                     'success' => false,
  894.                                     'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  895.                                 ];
  896.                             }
  897.                         }
  898.                         if($isProjectAltarea){
  899.                             return [
  900.                                 'form' => $form->createView(),
  901.                                 '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>',
  902.                                 'factureFinance' => $facture,
  903.                                 'success' => false,
  904.                                 'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  905.                             ];
  906.                         }
  907.                     }else{
  908.                         return [
  909.                             'form' => $form->createView(),
  910.                             'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champs projet est obligatoire !</p></div>',
  911.                             'factureFinance' => $facture,
  912.                             'success' => false,
  913.                             'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  914.                         ];
  915.                     }
  916.                     $factureFinanceOld = $this->em->getRepository(FactureFinance::class)->findOneBy(['numeroFacture' => $facture->getNumeroFacture(), 'fournisseur' => $facture->getFournisseur()]);
  917.                     if ($factureFinanceOld) {
  918.                         return [
  919.                             'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">facture existe déja!</p></div>',
  920.                             'form' => $form->createView(),
  921.                             'factureFinance' => $facture,
  922.                             'success' => false,
  923.                             'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  924.                         ];
  925.                     }
  926.                     $facture->setStatus(FactureFinance::STATUS_EN_ATTENT_VALIDATION);
  927.                     $this->em->persist($facture);
  928.                     $this->em->flush();
  929.                     $factureFinance = new FactureFinance();
  930.                     $facture->setFileFacture($fileFacture);
  931.                     $factureFinance->setFileFacture($facture->getFileFacture());
  932.                     $factureFinance->setStatus($facture->getStatus());
  933.                     $factureFinance->setCategory($facture->getCategory());
  934.                     $factureFinance->setClassification($facture->getClassification());
  935.                     $factureFinance->setDate($facture->getDate());
  936.                     $factureFinance->setDateFacture($facture->getDateFacture());
  937.                     $factureFinance->setDatePaiement($facture->getDatePaiement());
  938.                     $factureFinance->setDelaiPaiementDate($facture->getDelaiPaiementDate());
  939.                     $factureFinance->setDeveloppeur($facture->getDeveloppeur());
  940.                     $factureFinance->setEpc($facture->getEpc());
  941.                     $factureFinance->setFournisseur($facture->getFournisseur());
  942.                     $factureFinance->setMonatantTtc($facture->getMonatantTtc());
  943.                     $factureFinance->setMonatantHt($facture->getMonatantHt());
  944.                     $factureFinance->setNote($facture->getNote());
  945.                     $factureFinance->setNumeroFacture($facture->getNumeroFacture());
  946.                     $factureFinance->setSpv($facture->getSpv());
  947.                     $factureFinance->setTauxTva($facture->getTauxTva());
  948.                     $factureFinance->setTva($facture->getTva());
  949.                     $factureFinance->setUserCreated($facture->getUserCreated());
  950.                     if (count($facture->getProjectFactureFinanceBrouillon()) > 0) {
  951.                         foreach ($facture->getProjectFactureFinanceBrouillon() as $projectBrouillon) {
  952.                             $projectFactureFinance = new ProjectFactureFinance();
  953.                             $projectFactureFinance->setTva($projectBrouillon->getTva());
  954.                             $projectFactureFinance->setCategory($projectBrouillon->getCategory());
  955.                             $projectFactureFinance->setProject($projectBrouillon->getProject());
  956.                             $projectFactureFinance->setEtap($projectBrouillon->getEtap());
  957.                             $projectFactureFinance->setMontantHt($projectBrouillon->getMontantHt());
  958.                             $projectFactureFinance->setMontantTtc($projectBrouillon->getMontantTtc());
  959.                             $projectFactureFinance->setFactureFinance($factureFinance);
  960.                             $this->em->persist($projectFactureFinance);
  961.                         }
  962.                     }else{
  963.                     }
  964.                     $ribInput = $request->get('ribInput');
  965.                     if($ribInput){
  966.                         $rib = $this->em->getRepository(Rib::class)->find($ribInput);
  967.                         $facture->setRib($rib);
  968.                     }
  969.                     $ribInputSpv = $request->get('ribInputSpv');
  970.                     if($ribInputSpv){
  971.                         $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  972.                         $facture->setRibSpv($ribSpv);
  973.                     }
  974. //                    if(!$ribInput || !$ribInputSpv || $ribInput == 0 ||  $ribInputSpv == 0){
  975. //                        return [
  976. //                            'form' => $form->createView(),
  977. //                            'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">les champs rib fournisseur et rib spv sont obligatoires !</p></div>',
  978. //                            'factureFinance' => $facture,
  979. //                            'success' => false,
  980. //                            'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  981. //                        ];
  982. //                    }else{
  983. //                        if($ribInputSpv != 0){
  984. //                            $ribSpv = $this->em->getRepository(Rib::class)->find($ribInputSpv);
  985. //                            if($ribSpv){
  986. //                                if (preg_match('/^[a-zA-Z0-9]+$/', $ribSpv->getIban())) {
  987. //
  988. //                                } else {
  989. //                                    return [
  990. //                                        'form' => $form->createView(),
  991. //                                        'messageErreur' => '<div class="blockCheckProjectAltarea"><p class="blockCheckProjectAltarea1">le champ rib spv n\'est pas valide !</p></div>',
  992. //                                        'factureFinance' => $facture,
  993. //                                        'success' => false,
  994. //                                        'action' => $this->router->generate('admin_facture_finance_submit_brouillon', ['token' => $token]),
  995. //                                    ];
  996. //                                }
  997. //                            }
  998. //                        }
  999. //                    }
  1000.                     $this->em->persist($factureFinance);
  1001.                     $this->em->flush();
  1002.                     $this->notification->setCompteurErpiPiece($factureFinance);
  1003.                     $this->notification->setCompteurErpiEcriture($factureFinance);
  1004.                     $facture->setStatus(FactureFinance::STATUS_Brouillon_valide);
  1005.                     $this->em->persist($facture);
  1006.                     $this->em->flush();
  1007.                     if($facture->getCommentaire()) {
  1008.                         $commentFactureFinance = new CommentFactureFinance();
  1009.                         $commentFactureFinance->setFactureFinance($factureFinance);
  1010.                         $commentFactureFinance->setComment($facture->getCommentaire());
  1011.                         $commentFactureFinance->setUser($this->security->getUser());
  1012.                         $this->em->persist($commentFactureFinance);
  1013.                         $this->em->flush();
  1014.                     }
  1015.                     if($factureFinance->getFileFacture()){
  1016.                         $this->getNomenclature($factureFinance,$factureFinance->getFileFacture());
  1017.                     }
  1018.                     return [
  1019.                         'form' => $form->createView(),
  1020.                         'factureFinance' => $facture,
  1021.                         'facture' => $factureFinance,
  1022.                         'success' => true
  1023.                     ];
  1024.                 }
  1025.             }
  1026.         }
  1027.         return [
  1028.             'form' => $form->createView(),
  1029.             'factureFinance' => $facture,
  1030.             'success' => false,
  1031.             'action' => $this->router->generate('admin_facture_finance_submit_brouillon',['token'=>$token]),
  1032.         ];
  1033.     }
  1034.     public function paginateFacture($request,$isAfaire = false,$isPayer = false){
  1035.         $length = $request->get('length');
  1036.         $length = $length && ($length!=-1)?$length:0;
  1037.         $start = $request->get('start');
  1038.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1039.         $column =  $search = $request->get('columns');
  1040.         $order = $request->get('order')[0];
  1041.         $columnOrder = $order['column'];
  1042.         $dirOrder = $order['dir'];
  1043.         $columNameOrder = $column[$columnOrder]['data'];
  1044.         $search = $request->get('search');
  1045.         $spv = $request->get('spv');
  1046.         $fournisseur = $request->get('fournisseur');
  1047.         $status = $request->get('statusFactureFinance');
  1048.         $btnTypeTab = $request->get('btnTypeTab');
  1049.         $arraySession = [];
  1050.         $arraySession['search'] = trim(@$search['value']);
  1051.         $arraySession['spv'] = $spv;
  1052.         $arraySession['fournisseur'] = $fournisseur;
  1053.         $arraySession['statusFactureFinance'] = $status;
  1054.         $arraySession['length'] = $length;
  1055.         $arraySession['btnTypeTab'] = $btnTypeTab;
  1056.         $this->session->set('arraySessionFilterFactureFinance',$arraySession);
  1057.         $searchTabDate = $request->get('searchTabDate');
  1058.         $responsableProject = $request->get('responsableProject');
  1059.         $responsableDevProject = $request->get('responsableDevProject');
  1060.         $classificationFactureFinance = $request->get('classificationFactureFinance');
  1061.         $paiementFactureDate = $request->get('paiementFactureDate');
  1062.         $paiementFactureDate1 = $request->get('paiementFactureDate1') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate1')) : null ;
  1063.         $paiementFactureDate2 = $request->get('paiementFactureDate2') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate2')) : null;
  1064.         $filters = [
  1065.             'query' => trim(@$search['value']),
  1066.             'spv' => $spv,
  1067.             'fournisseur' => $fournisseur,
  1068.             'status' => $status,
  1069.             'isAfaire' => $isAfaire,
  1070.             'isPayer' => $isPayer,
  1071.             'paiementFactureDate' => $paiementFactureDate,
  1072.             'btnTypeTab' => $btnTypeTab,
  1073.             'paiementFactureDate1' => $paiementFactureDate1,
  1074.             'paiementFactureDate2' => $paiementFactureDate2,
  1075.             'responsableProject' => $responsableProject,
  1076.             'classificationFactureFinance' => $classificationFactureFinance,
  1077.             'responsableDevProject' => $responsableDevProject
  1078.         ];
  1079.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  1080.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1081.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1082.         $output = array(
  1083.             'data' => array(),
  1084.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1085.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1086.         );
  1087.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1088.         foreach ($factureFinances as $factureFinance) {
  1089.             $action =
  1090.                 $this->twig->render(
  1091.                     'admin/facture-finance/default/bouton.html.twig', array(
  1092.                     'factureFinance' => $factureFinance
  1093.                 ));
  1094.             $action2 =
  1095.                 $this->twig->render(
  1096.                     'admin/facture-finance/default/bouton-valid.html.twig', array(
  1097.                     'factureFinance' => $factureFinance
  1098.                 ));
  1099.             $action3 =
  1100.                 $this->twig->render(
  1101.                     'admin/facture-finance/default/bouton3.html.twig', array(
  1102.                     'factureFinance' => $factureFinance
  1103.                 ));
  1104.             $statut =
  1105.                 $this->twig->render(
  1106.                     'admin/facture-finance/default/status.html.twig', array(
  1107.                     'status' => $factureFinance->getStatus(),
  1108.                     'factureFinance' => $factureFinance,
  1109.                 ));
  1110.             $dateValid =
  1111.                 $this->twig->render(
  1112.                     'admin/facture-finance/default/input-date-valid.html.twig', array(
  1113.                     'factureFinance' => $factureFinance
  1114.                 ));
  1115.             $btnSelect =
  1116.                 $this->twig->render(
  1117.                     'admin/facture-finance/default/btnSelect.html.twig', array(
  1118.                     'factureFinance' => $factureFinance
  1119.                 ));
  1120.             $fluxBancaireSpv = '';
  1121.             $banqueSpvStr = '';
  1122.             if($factureFinance->getSpv()){
  1123.                 $fluxBancaireSpv = $factureFinance->getSpv()->getFluxBancaire() ? 'Exabanque' : 'Manuel';
  1124.                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId(), 'isDefault' => true]);
  1125.                 if(!$spvBanque){
  1126.                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId()]);
  1127.                 }
  1128.                 if($spvBanque){
  1129.                     $banqueSpvStr = $spvBanque->getBanque();
  1130.                 }
  1131.             }
  1132.             $banqueFourniseurStr = '';
  1133.             if($factureFinance->getFournisseur()){
  1134.                 if($factureFinance->getRib()) {
  1135.                     $fournisseurBanque = $factureFinance->getRib();
  1136.                 }else {
  1137.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId(), 'isDefault' => true]);
  1138.                 }
  1139.                 if(!$fournisseurBanque){
  1140.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId()]);
  1141.                 }
  1142.                 if($fournisseurBanque){
  1143.                     $banqueFourniseurStr = $fournisseurBanque->getBanque();
  1144.                 }
  1145.             }
  1146.             if($factureFinance->getIsAvoir()){
  1147.                 $avoir = $factureFinance->getMonatantAvoirTtc();
  1148.                 if($factureFinance->getMonatantRestantTtc() == '0' ){
  1149.                     $isBanque = false;
  1150.                 }else{
  1151.                     $isBanque = true;
  1152.                 }
  1153.             }else{
  1154.                 $avoir = 0;
  1155.                 $isBanque = true;
  1156.             }
  1157.             $projects = '';
  1158.             if(count($factureFinance->getProjectFactureFinance())>0){
  1159.                 $projectsArray = [];
  1160.                 foreach ($factureFinance->getProjectFactureFinance() as $item){
  1161.                     if($item->getProject()){
  1162.                         $projectsArray[strtolower($item->getProject()->getName())] = $item;
  1163.                     }
  1164.                 }
  1165.                 ksort($projectsArray);
  1166.                 $project =  reset($projectsArray);
  1167.                 if(count($factureFinance->getProjectFactureFinance()) == 1){
  1168.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName() : ' ' ;
  1169.                 }else{
  1170.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName().'...' : ' ' ;
  1171.                 }
  1172.             }
  1173.             $output['data'][] = [
  1174.                 'responsive_id' => '',
  1175.                 'id' => $factureFinance->getId(),
  1176.                 'numeroFacture' => $factureFinance->getNumeroFacture(),
  1177.                 'numeroFactureDiaposon' => $factureFinance->getNumeroFactureDiaposon(),
  1178.                 'compteurErpiPiece' => $factureFinance->getCompteurErpiPiece(),
  1179.                 'monatantTtc' => $factureFinance->getMonatantTtc() ? $this->espaceNumber($factureFinance->getMonatantTtc()).'€' : '',
  1180.                 'monatantHt' => $factureFinance->getMonatantHt() ? $this->espaceNumber($factureFinance->getMonatantHt()).'€' : '',
  1181.                 'tva' => $factureFinance->getTva() ? $factureFinance->getTva().'€' : '',
  1182.                 'category' => $factureFinance->getCategory() ? $factureFinance->getCategory() : '',
  1183.                 'fluxBancaireSpv' => $fluxBancaireSpv,
  1184.                 'fournisseur' => $factureFinance->getFournisseur() ? $factureFinance->getFournisseur()->getName() : '',
  1185.                 'developpeur' => $factureFinance->getDeveloppeur() ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '',
  1186.                 'spv' => $factureFinance->getSpv() ? $factureFinance->getSpv()->getName() : '',
  1187.                 'date' => $factureFinance->getDelaiPaiementDate() ? $factureFinance->getDelaiPaiementDate()->format('d/m/Y') : '',
  1188.                 'banqueSpv' => $banqueSpvStr,
  1189.                 'banqueFourniseur' => $isBanque ? $banqueFourniseurStr : '---',
  1190.                 'classification' => $factureFinance->getClassification(),
  1191.                 'datePaiement' => $factureFinance->getDatePaiement() ? $factureFinance->getDatePaiement()->format('d/m/Y') : '',
  1192.                 'dateValidation' => $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('d/m/Y') : '',
  1193.                 'dateFacture' => $factureFinance->getDateFacture() ? $factureFinance->getDateFacture()->format('d/m/Y') : '',
  1194.                 'createdAt' => $factureFinance->getCreatedAt() ? $factureFinance->getCreatedAt()->format('d/m/Y') : '',
  1195.                 'status' => $statut,
  1196.                 'dateValid' => $dateValid,
  1197.                 'action' => $action,
  1198.                 'action2' => $action2,
  1199.                 'action3' => $action3,
  1200.                 'btnSelect' => $btnSelect,
  1201.                 'projects' => $projects,
  1202.                 'avoir' => $avoir.' €'
  1203.             ];
  1204.         }
  1205.         return $output;
  1206.     }
  1207.     public function paginateFactureArchive($request,$isAfaire = false,$isPayer = false){
  1208.         $length = $request->get('length');
  1209.         $length = $length && ($length!=-1)?$length:0;
  1210.         $start = $request->get('start');
  1211.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1212.         $column =  $search = $request->get('columns');
  1213.         $order = $request->get('order')[0];
  1214.         $columnOrder = $order['column'];
  1215.         $dirOrder = $order['dir'];
  1216.         $columNameOrder = $column[$columnOrder]['data'];
  1217.         $search = $request->get('search');
  1218.         $spv = $request->get('spv');
  1219.         $fournisseur = $request->get('fournisseur');
  1220.         $status = $request->get('statusFactureFinance');
  1221.         $btnTypeTab = $request->get('btnTypeTab');
  1222.         $arraySession = [];
  1223.         $arraySession['search'] = trim(@$search['value']);
  1224.         $arraySession['spv'] = $spv;
  1225.         $arraySession['fournisseur'] = $fournisseur;
  1226.         $arraySession['statusFactureFinance'] = $status;
  1227.         $arraySession['length'] = $length;
  1228.         $arraySession['btnTypeTab'] = $btnTypeTab;
  1229.         $this->session->set('arraySessionFilterFactureFinance',$arraySession);
  1230.         $searchTabDate = $request->get('searchTabDate');
  1231.         $responsableProject = $request->get('responsableProject');
  1232.         $responsableDevProject = $request->get('responsableDevProject');
  1233.         $classificationFactureFinance = $request->get('classificationFactureFinance');
  1234.         $paiementFactureDate = $request->get('paiementFactureDate');
  1235.         $paiementFactureDate1 = $request->get('paiementFactureDate1') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate1')) : null ;
  1236.         $paiementFactureDate2 = $request->get('paiementFactureDate2') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate2')) : null;
  1237.         $filters = [
  1238.             'query' => trim(@$search['value']),
  1239.             'spv' => $spv,
  1240.             'fournisseur' => $fournisseur,
  1241.             'status' => $status,
  1242.             'isAfaire' => $isAfaire,
  1243.             'isPayer' => $isPayer,
  1244.             'paiementFactureDate' => $paiementFactureDate,
  1245.             'btnTypeTab' => $btnTypeTab,
  1246.             'paiementFactureDate1' => $paiementFactureDate1,
  1247.             'paiementFactureDate2' => $paiementFactureDate2,
  1248.             'responsableProject' => $responsableProject,
  1249.             'classificationFactureFinance' => $classificationFactureFinance,
  1250.             'responsableDevProject' => $responsableDevProject,
  1251.             'isArchive' => 1
  1252.         ];
  1253.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  1254.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1255.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1256.         $output = array(
  1257.             'data' => array(),
  1258.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1259.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1260.         );
  1261.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1262.         foreach ($factureFinances as $factureFinance) {
  1263.             $action =
  1264.                 $this->twig->render(
  1265.                     'admin/facture-finance/default/bouton.html.twig', array(
  1266.                     'factureFinance' => $factureFinance
  1267.                 ));
  1268.             $action2 =
  1269.                 $this->twig->render(
  1270.                     'admin/facture-finance/default/bouton-valid.html.twig', array(
  1271.                     'factureFinance' => $factureFinance
  1272.                 ));
  1273.             $action3 =
  1274.                 $this->twig->render(
  1275.                     'admin/facture-finance/default/bouton3.html.twig', array(
  1276.                     'factureFinance' => $factureFinance
  1277.                 ));
  1278.             $statut =
  1279.                 $this->twig->render(
  1280.                     'admin/facture-finance/default/status.html.twig', array(
  1281.                     'status' => $factureFinance->getStatus(),
  1282.                     'factureFinance' => $factureFinance,
  1283.                 ));
  1284.             $dateValid =
  1285.                 $this->twig->render(
  1286.                     'admin/facture-finance/default/input-date-valid.html.twig', array(
  1287.                     'factureFinance' => $factureFinance
  1288.                 ));
  1289.             $btnSelect =
  1290.                 $this->twig->render(
  1291.                     'admin/facture-finance/default/btnSelect.html.twig', array(
  1292.                     'factureFinance' => $factureFinance
  1293.                 ));
  1294.             $fluxBancaireSpv = '';
  1295.             $banqueSpvStr = '';
  1296.             if($factureFinance->getSpv()){
  1297.                 $fluxBancaireSpv = $factureFinance->getSpv()->getFluxBancaire() ? 'Exabanque' : 'Manuel';
  1298.                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId(), 'isDefault' => true]);
  1299.                 if(!$spvBanque){
  1300.                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId()]);
  1301.                 }
  1302.                 if($spvBanque){
  1303.                     $banqueSpvStr = $spvBanque->getBanque();
  1304.                 }
  1305.             }
  1306.             $banqueFourniseurStr = '';
  1307.             if($factureFinance->getFournisseur()){
  1308.                 if($factureFinance->getRib()) {
  1309.                     $fournisseurBanque = $factureFinance->getRib();
  1310.                 }else {
  1311.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId(), 'isDefault' => true]);
  1312.                 }
  1313.                 if(!$fournisseurBanque){
  1314.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId()]);
  1315.                 }
  1316.                 if($fournisseurBanque){
  1317.                     $banqueFourniseurStr = $fournisseurBanque->getBanque();
  1318.                 }
  1319.             }
  1320.             if($factureFinance->getIsAvoir()){
  1321.                 $avoir = $factureFinance->getMonatantAvoirTtc();
  1322.                 if($factureFinance->getMonatantRestantTtc() == '0' ){
  1323.                     $isBanque = false;
  1324.                 }else{
  1325.                     $isBanque = true;
  1326.                 }
  1327.             }else{
  1328.                 $avoir = 0;
  1329.                 $isBanque = true;
  1330.             }
  1331.             $projects = '';
  1332.             if(count($factureFinance->getProjectFactureFinance())>0){
  1333.                 $projectsArray = [];
  1334.                 foreach ($factureFinance->getProjectFactureFinance() as $item){
  1335.                     if($item->getProject()){
  1336.                         $projectsArray[strtolower($item->getProject()->getName())] = $item;
  1337.                     }
  1338.                 }
  1339.                 ksort($projectsArray);
  1340.                 $project =  reset($projectsArray);
  1341.                 if(count($factureFinance->getProjectFactureFinance()) == 1){
  1342.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName() : ' ' ;
  1343.                 }else{
  1344.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName().'...' : ' ' ;
  1345.                 }
  1346.             }
  1347.             $output['data'][] = [
  1348.                 'responsive_id' => '',
  1349.                 'id' => $factureFinance->getId(),
  1350.                 'numeroFacture' => $factureFinance->getNumeroFacture(),
  1351.                 'numeroFactureDiaposon' => $factureFinance->getNumeroFactureDiaposon(),
  1352.                 'compteurErpiPiece' => $factureFinance->getCompteurErpiPiece(),
  1353.                 'monatantTtc' => $factureFinance->getMonatantTtc() ? $this->espaceNumber($factureFinance->getMonatantTtc()).'€' : '',
  1354.                 'monatantHt' => $factureFinance->getMonatantHt() ? $this->espaceNumber($factureFinance->getMonatantHt()).'€' : '',
  1355.                 'tva' => $factureFinance->getTva() ? $factureFinance->getTva().'€' : '',
  1356.                 'category' => $factureFinance->getCategory() ? $factureFinance->getCategory() : '',
  1357.                 'fluxBancaireSpv' => $fluxBancaireSpv,
  1358.                 'fournisseur' => $factureFinance->getFournisseur() ? $factureFinance->getFournisseur()->getName() : '',
  1359.                 'developpeur' => $factureFinance->getDeveloppeur() ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '',
  1360.                 'spv' => $factureFinance->getSpv() ? $factureFinance->getSpv()->getName() : '',
  1361.                 'date' => $factureFinance->getDelaiPaiementDate() ? $factureFinance->getDelaiPaiementDate()->format('d/m/Y') : '',
  1362.                 'banqueSpv' => $banqueSpvStr,
  1363.                 'banqueFourniseur' => $isBanque ? $banqueFourniseurStr : '---',
  1364.                 'classification' => $factureFinance->getClassification(),
  1365.                 'datePaiement' => $factureFinance->getDatePaiement() ? $factureFinance->getDatePaiement()->format('d/m/Y') : '',
  1366.                 'dateValidation' => $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('d/m/Y') : '',
  1367.                 'dateFacture' => $factureFinance->getDateFacture() ? $factureFinance->getDateFacture()->format('d/m/Y') : '',
  1368.                 'createdAt' => $factureFinance->getCreatedAt() ? $factureFinance->getCreatedAt()->format('d/m/Y') : '',
  1369.                 'status' => $statut,
  1370.                 'dateValid' => $dateValid,
  1371.                 'action' => $action,
  1372.                 'action2' => $action2,
  1373.                 'action3' => $action3,
  1374.                 'btnSelect' => $btnSelect,
  1375.                 'projects' => $projects,
  1376.                 'avoir' => $avoir.' €'
  1377.             ];
  1378.         }
  1379.         return $output;
  1380.     }
  1381.     public function paginateFactureBrouillon($request){
  1382.         $length = $request->get('length');
  1383.         $length = $length && ($length!=-1)?$length:0;
  1384.         $start = $request->get('start');
  1385.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1386.         $column =  $search = $request->get('columns');
  1387.         $order = $request->get('order')[0];
  1388.         $columnOrder = $order['column'];
  1389.         $dirOrder = $order['dir'];
  1390.         $columNameOrder = $column[$columnOrder]['data'];
  1391.         $search = $request->get('search');
  1392.         $spv = $request->get('spv');
  1393.         $fournisseur = $request->get('fournisseur');
  1394.         $status = $request->get('statusFactureFinance');
  1395.         $btnTypeTab = $request->get('btnTypeTab');
  1396.         $arraySession = [];
  1397.         $arraySession['search'] = trim(@$search['value']);
  1398.         $arraySession['spv'] = $spv;
  1399.         $arraySession['fournisseur'] = $fournisseur;
  1400.         $arraySession['statusFactureFinance'] = $status;
  1401.         $arraySession['length'] = $length;
  1402.         $arraySession['btnTypeTab'] = $btnTypeTab;
  1403.         $this->session->set('arraySessionFilterFactureFinance',$arraySession);
  1404.         $searchTabDate = $request->get('searchTabDate');
  1405.         $responsableProject = $request->get('responsableProject');
  1406.         $responsableDevProject = $request->get('responsableDevProject');
  1407.         $classificationFactureFinance = $request->get('classificationFactureFinance');
  1408.         $paiementFactureDate = $request->get('paiementFactureDate');
  1409.         $paiementFactureDate1 = $request->get('paiementFactureDate1') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate1')) : null ;
  1410.         $paiementFactureDate2 = $request->get('paiementFactureDate2') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate2')) : null;
  1411.         $filters = [
  1412.             'query' => trim(@$search['value']),
  1413.             'spv' => $spv,
  1414.             'fournisseur' => $fournisseur,
  1415.             'status' => $status,
  1416.             'paiementFactureDate' => $paiementFactureDate,
  1417.             'btnTypeTab' => $btnTypeTab,
  1418.             'paiementFactureDate1' => $paiementFactureDate1,
  1419.             'paiementFactureDate2' => $paiementFactureDate2,
  1420.             'responsableProject' => $responsableProject,
  1421.             'classificationFactureFinance' => $classificationFactureFinance,
  1422.             'responsableDevProject' => $responsableDevProject
  1423.         ];
  1424.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinanceBrouillon::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  1425.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinanceBrouillon::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1426.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinanceBrouillon::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1427.         $output = array(
  1428.             'data' => array(),
  1429.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1430.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1431.         );
  1432.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1433.         foreach ($factureFinances as $factureFinance) {
  1434.             $action =
  1435.                 $this->twig->render(
  1436.                     'admin/facture-finance/default/boutonBrouillon.html.twig', array(
  1437.                     'factureFinance' => $factureFinance
  1438.                 ));
  1439.             $statut =
  1440.                 $this->twig->render(
  1441.                     'admin/facture-finance/default/status.html.twig', array(
  1442.                     'status' => $factureFinance->getStatus(),
  1443.                     'factureFinance' => $factureFinance,
  1444.                 ));
  1445.             $btnSelect =
  1446.                 $this->twig->render(
  1447.                     'admin/facture-finance/default/btnSelectBrouillon.html.twig', array(
  1448.                     'factureFinance' => $factureFinance
  1449.                 ));
  1450.             $projects = '';
  1451.             if(count($factureFinance->getProjectFactureFinanceBrouillon())>0){
  1452.                 $projectsArray = [];
  1453.                 foreach ($factureFinance->getProjectFactureFinanceBrouillon() as $item){
  1454.                     if($item->getProject()){
  1455.                         $projectsArray[strtolower($item->getProject()->getName())] = $item;
  1456.                     }
  1457.                 }
  1458.                 ksort($projectsArray);
  1459.                 $project =  reset($projectsArray);
  1460.                 if(count($factureFinance->getProjectFactureFinanceBrouillon()) == 1){
  1461.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName() : ' ' ;
  1462.                 }else{
  1463.                     $projects =  $project && $project->getProject() ? $project->getProject()->getName().'...' : ' ' ;
  1464.                 }
  1465.             }
  1466.             $output['data'][] = [
  1467.                 'responsive_id' => '',
  1468.                 'id' => $factureFinance->getId(),
  1469.                 'numeroFacture' => $factureFinance->getNumeroFacture(),
  1470.                 'monatantTtc' => $factureFinance->getMonatantTtc() ? $this->espaceNumber($factureFinance->getMonatantTtc()).'€' : '',
  1471.                 'monatantHt' => $factureFinance->getMonatantHt() ? $this->espaceNumber($factureFinance->getMonatantHt()).'€' : '',
  1472.                 'tva' => $factureFinance->getTva() ? $factureFinance->getTva().'€' : '',
  1473.                 'category' => $factureFinance->getCategory() ? $factureFinance->getCategory() : '',
  1474.                 'fournisseur' => $factureFinance->getFournisseur() ? $factureFinance->getFournisseur()->getName() : '',
  1475.                 'developpeur' => $factureFinance->getDeveloppeur() ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '',
  1476.                 'spv' => $factureFinance->getSpv() ? $factureFinance->getSpv()->getName() : '',
  1477.                 'date' => $factureFinance->getDelaiPaiementDate() ? $factureFinance->getDelaiPaiementDate()->format('d/m/Y') : '',
  1478.                 'classification' => $factureFinance->getClassification(),
  1479.                 'datePaiement' => $factureFinance->getDatePaiement() ? $factureFinance->getDatePaiement()->format('d/m/Y') : '',
  1480.                 'dateValidation' => $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('d/m/Y') : '',
  1481.                 'dateFacture' => $factureFinance->getDateFacture() ? $factureFinance->getDateFacture()->format('d/m/Y') : '',
  1482.                 'createdAt' => $factureFinance->getCreatedAt() ? $factureFinance->getCreatedAt()->format('d/m/Y') : '',
  1483.                 'status' => $statut,
  1484.                 'action' => $action,
  1485.                 'btnSelect' => $btnSelect,
  1486.                 'projects' => $projects
  1487.             ];
  1488.         }
  1489.         return $output;
  1490.     }
  1491.     public function formatTabFactures($factureFinances){
  1492.         $output = [];
  1493.         foreach ($factureFinances as $factureFinance) {
  1494.             $action =
  1495.                 $this->twig->render(
  1496.                     'admin/facture-finance/default/bouton.html.twig', array(
  1497.                     'factureFinance' => $factureFinance
  1498.                 ));
  1499.             $action2 =
  1500.                 $this->twig->render(
  1501.                     'admin/facture-finance/default/bouton-valid.html.twig', array(
  1502.                     'factureFinance' => $factureFinance
  1503.                 ));
  1504.             $action3 =
  1505.                 $this->twig->render(
  1506.                     'admin/facture-finance/default/bouton3.html.twig', array(
  1507.                     'factureFinance' => $factureFinance
  1508.                 ));
  1509.             $statut =
  1510.                 $this->twig->render(
  1511.                     'admin/facture-finance/default/status.html.twig', array(
  1512.                     'status' => $factureFinance->getStatus()
  1513.                 ));
  1514.             $dateValid =
  1515.                 $this->twig->render(
  1516.                     'admin/facture-finance/default/input-date-valid.html.twig', array(
  1517.                     'factureFinance' => $factureFinance
  1518.                 ));
  1519.             $btnSelect =
  1520.                 $this->twig->render(
  1521.                     'admin/facture-finance/default/btnSelect.html.twig', array(
  1522.                     'factureFinance' => $factureFinance
  1523.                 ));
  1524.             $fluxBancaireSpv = '';
  1525.             $banqueSpvStr = '';
  1526.             if($factureFinance->getSpv()){
  1527.                 $fluxBancaireSpv = $factureFinance->getSpv()->getFluxBancaire() ? 'Exabanque' : 'Manuel';
  1528.                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId(), 'isDefault' => true]);
  1529.                 if(!$spvBanque){
  1530.                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId()]);
  1531.                 }
  1532.                 if($spvBanque){
  1533.                     $banqueSpvStr = $spvBanque->getBanque();
  1534.                 }
  1535.             }
  1536.             $banqueFourniseurStr = '';
  1537.             if($factureFinance->getFournisseur()){
  1538.                 if($factureFinance->getRib()) {
  1539.                     $fournisseurBanque = $factureFinance->getRib();
  1540.                 }else {
  1541.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId(), 'isDefault' => true]);
  1542.                 }
  1543.                 if(!$fournisseurBanque){
  1544.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $factureFinance->getFournisseur()->getId()]);
  1545.                 }
  1546.                 if($fournisseurBanque){
  1547.                     $banqueFourniseurStr = $fournisseurBanque->getBanque();
  1548.                 }
  1549.             }
  1550.             if($factureFinance->getIsAvoir()){
  1551.                 $avoir = $factureFinance->getMonatantAvoirTtc();
  1552.                 if($factureFinance->getMonatantRestantTtc() == '0' ){
  1553.                     $isBanque = false;
  1554.                 }else{
  1555.                     $isBanque = true;
  1556.                 }
  1557.             }else{
  1558.                 $avoir = 0;
  1559.                 $isBanque = true;
  1560.             }
  1561.             $projects = '';
  1562.             if(count($factureFinance->getProjectFactureFinance())>0){
  1563.                 $project = $factureFinance->getProjectFactureFinance()[0];
  1564.                 if(count($factureFinance->getProjectFactureFinance()) == 1){
  1565.                     $projects =  $project->getProject() ? $project->getProject()->getName() : ' ' ;
  1566.                 }else{
  1567.                     $projects =  $project->getProject() ? $project->getProject()->getName().'...' : ' ' ;
  1568.                 }
  1569.             }
  1570.             $output[] = [
  1571.                 'responsive_id' => '',
  1572.                 'id' => $factureFinance->getId(),
  1573.                 'numeroFacture' => $factureFinance->getNumeroFacture30Max(),
  1574.                 'monatantTtc' => $factureFinance->getMonatantTtc() ? $factureFinance->getMonatantTtc().'€' : '',
  1575.                 'fluxBancaireSpv' => $fluxBancaireSpv,
  1576.                 'fournisseur' => $factureFinance->getFournisseur() ? $factureFinance->getFournisseur()->getName() : '',
  1577.                 'spv' => $factureFinance->getSpv() ? $factureFinance->getSpv()->getName() : '',
  1578.                 'date' => $factureFinance->getDelaiPaiementDate() ? $factureFinance->getDelaiPaiementDate()->format('d/m/Y') : '',
  1579.                 'banqueSpv' => $banqueSpvStr,
  1580.                 'banqueFourniseur' => $isBanque ? $banqueFourniseurStr : '---',
  1581.                 'classification' => $factureFinance->getClassification(),
  1582.                 'datePaiement' => $factureFinance->getDatePaiement() ? $factureFinance->getDatePaiement()->format('d/m/Y') : '',
  1583.                 'dateFacture' => $factureFinance->getDateFacture() ? $factureFinance->getDateFacture()->format('d/m/Y') : '',
  1584.                 'status' => $statut,
  1585.                 'dateValid' => $dateValid,
  1586.                 'action' => $action,
  1587.                 'action2' => $action2,
  1588.                 'action3' => $action3,
  1589.                 'btnSelect' => $btnSelect,
  1590.                 'projects' => $projects,
  1591.                 'avoir' => $avoir.' €'
  1592.             ];
  1593.         }
  1594.         return $output;
  1595.     }
  1596.     public function paginateFacturePaiement($request){
  1597.         $length = $request->get('length');
  1598.         $length = $length && ($length!=-1)?$length:0;
  1599.         $start = $request->get('start');
  1600.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1601.         $column =  $search = $request->get('columns');
  1602.         $order = $request->get('order')[0];
  1603.         $columnOrder = $order['column'];
  1604.         $dirOrder = $order['dir'];
  1605.         $columNameOrder = $column[$columnOrder]['data'];
  1606.         $searchTabDate = $request->get('searchTabDate');
  1607.         $filters = [
  1608.             'searchTabDate' => $searchTabDate,
  1609.             'spvFacturePaiement' => $request->get('spvFacturePaiement'),
  1610.         ];
  1611.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->search2($filters, $start, $length, true,$columNameOrder, $dirOrder);
  1612.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->search2($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1613.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->search2(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1614.         $output = array(
  1615.             'data' => array(),
  1616.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  1617.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  1618.         );
  1619.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1620.         $arraySpv = [];
  1621.         foreach ($factureFinances as $factureFinance) {
  1622.             $dateValidation = $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('Y-m-d') : (new \DateTime())->format('Y-m-d');
  1623.             $action =
  1624.                 $this->twig->render(
  1625.                     'admin/facture-finance/default/bouton-eye-paiement.html.twig', array(
  1626.                     'factureFinance' => $factureFinance,
  1627.                     'spv' => $factureFinance->getSpv(),
  1628.                     'date' => $searchTabDate
  1629.                 ));
  1630.             $actionTelechargeBtn =
  1631.                 $this->twig->render(
  1632.                     'admin/facture-finance/default/bouton-telecharger.html.twig', array(
  1633.                     'factureFinance' => $factureFinance,
  1634.                     'spv' => $factureFinance->getSpv(),
  1635.                     'searchTabDate' => $searchTabDate
  1636.                 ));
  1637.             $actionTelechargeBtn2 =
  1638.                 $this->twig->render(
  1639.                     'admin/facture-finance/default/bouton-telecharger2.html.twig', array(
  1640.                     'factureFinance' => $factureFinance,
  1641.                     'spv' => $factureFinance->getSpv(),
  1642.                     'searchTabDate' => $searchTabDate != "" ? $searchTabDate : $dateValidation
  1643.                 ));
  1644.             $fluxBancaireSpv = '';
  1645.             $banqueSpvStr = '';
  1646.             if($factureFinance->getSpv()){
  1647.                 $fluxBancaireSpv = $factureFinance->getSpv()->getFluxBancaire() ? 'Exabanque' : 'Manuel';
  1648.                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId(), 'isDefault' => true]);
  1649.                 if(!$spvBanque){
  1650.                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $factureFinance->getSpv()->getId()]);
  1651.                     if($spvBanque){
  1652.                         $banqueSpvStr = $spvBanque->getBanque();
  1653.                     }
  1654.                 }
  1655.             }
  1656.             $arraySpv[$factureFinance->getSpv()->getId()] = [
  1657.                 'responsive_id' => '',
  1658.                 'spv' => $factureFinance->getSpv()->getName(),
  1659.                 'fluxBancaireSpv' => $fluxBancaireSpv,
  1660.                 'dateValidation' => $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('d/m/Y') : '',
  1661.                 'action3' => $actionTelechargeBtn,
  1662.                 'action4' => $actionTelechargeBtn2,
  1663.                 'action' => $action
  1664.             ];
  1665.         }
  1666.         foreach ($arraySpv as $item) {
  1667.             $output['data'][] = [
  1668.                 'responsive_id' => $item['responsive_id'],
  1669.                 'spv' =>  $item['spv'],
  1670.                 'fluxBancaireSpv' =>  $item['fluxBancaireSpv'],
  1671.                 'dateValidation' =>  $item['dateValidation'],
  1672.                 'action3' =>  $item['action3'],
  1673.                 'action4' =>  $item['action4'],
  1674.                 'action' =>  $item['action'],
  1675.             ];
  1676.         }
  1677.         return $output;
  1678.     }
  1679.     public function paginateFacturePaiementNew($request){
  1680.         $length = $request->get('length');
  1681.         $length = $length && ($length!=-1)?$length:0;
  1682.         $start = $request->get('start');
  1683.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  1684.         $column =  $search = $request->get('columns');
  1685.         $order = $request->get('order')[0];
  1686.         $columnOrder = $order['column'];
  1687.         $dirOrder = $order['dir'];
  1688.         $columNameOrder = $column[$columnOrder]['data'];
  1689.         $searchTabDate = $request->get('searchTabDate');
  1690.         $filters = [
  1691.             'searchTabDate' => $searchTabDate,
  1692.             'statusPaiementFactureSpv' => $request->get('statusPaiementFactureSpv'),
  1693.             'searchFacturePaiementSepa' => $request->get('searchFacturePaiementSepa'),
  1694.             'spvFacturePaiementSepa' => $request->get('spvFacturePaiementSepa'),
  1695.         ];
  1696.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->searchNewPaiement($filters, $start, $length, true,$columNameOrder, $dirOrder);
  1697.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->searchNewPaiement($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  1698.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->searchNewPaiement(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  1699.         $output = array(
  1700.             'data' => array(),
  1701.             'recordsFiltered' => count($recordsFiltered),
  1702.             'recordsTotal' => count($recordsTotal),
  1703.         );
  1704.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  1705.         foreach ($factureFinances as $factureFinance) {
  1706.             $spv = $this->em->getRepository(Spv::class)->find($factureFinance['spvId']);
  1707.             $dateValidation = new \DateTime($factureFinance['FormattedDate']);
  1708.             $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDate($factureFinance['spvId'], $factureFinance['FormattedDate']);
  1709.             $montantTotal = $this->getEcheanceTtc($factureFinance['spvId'], $factureFinance['FormattedDate']);
  1710.             $status =
  1711.                 $this->twig->render(
  1712.                     'admin/facture-finance/miseEnPaiement/default/status.html.twig', array(
  1713.                     'status' => $factureFinance['statusTotal'],
  1714.                 ));
  1715.             $action =
  1716.                 $this->twig->render(
  1717.                     'admin/facture-finance/miseEnPaiement/default/bouton-eye-paiement.html.twig', array(
  1718.                     'spv' => $spv,
  1719.                     'date' => $factureFinance['FormattedDate']
  1720.                 ));
  1721.             $output['data'][] = [
  1722.                 'spv' =>  $factureFinance['name'],
  1723.                 'nbrPaiement' =>  $factureFinance['nbrPaiement'],
  1724.                 'dateValidation' =>  $dateValidation->format('d/m/Y'),
  1725.                 'montantTotal' =>   $montantTotal ? $this->espaceNumber($montantTotal).'€' : '',
  1726.                 'status' =>  $status,
  1727.                 'action' =>  $action,
  1728.             ];
  1729.         }
  1730.         return $output;
  1731.     }
  1732.     public function valideDate($request,$token)
  1733.     {
  1734.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1735.         $date = $request->get('datePaiementFacture');
  1736.         if($facture){
  1737.             $userCurrent = $this->security->getUser();
  1738.             $spvFacture = $facture->getSpv();
  1739.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  1740.             }else {
  1741.                 if (!$spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFactureSpv()) {
  1742.                     return [
  1743.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  1744.                         'success' => false,
  1745.                         'factureFinance' => $facture,
  1746.                     ];
  1747.                 }
  1748.                 if ($spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFacturePrejeance()) {
  1749.                     return [
  1750.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide  la facture</p>',
  1751.                         'success' => false,
  1752.                         'factureFinance' => $facture,
  1753.                     ];
  1754.                 }
  1755.             }
  1756.             if($date){
  1757.                 $banqueSpv = '';
  1758.                 $ibanSpv = '';
  1759.                 $bicSpv = '';
  1760.                 $fluxBancaireSpv = '';
  1761.                 if ($facture->getSpv()) {
  1762.                     if($facture->getRib()) {
  1763.                         $spvBanque = $facture->getRibSpv();
  1764.                     }else {
  1765.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  1766.                     }
  1767.                     if (!$spvBanque) {
  1768.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  1769.                     }
  1770.                     if ($spvBanque) {
  1771.                         $banqueSpv = $spvBanque->getBanque();
  1772.                         $ibanSpv = $spvBanque->getIban();
  1773.                         $bicSpv = $spvBanque->getBic();
  1774.                     }
  1775.                     $fluxBancaireSpv = $facture->getSpv()->getFluxBancaire();
  1776.                 }
  1777.                 $banqueFournisseur = '';
  1778.                 $ibanFournisseur = '';
  1779.                 $bicFournisseur = '';
  1780.                 if ($facture->getFournisseur()) {
  1781.                     if($facture->getRib()) {
  1782.                         $fournisseurBanque = $facture->getRib();
  1783.                     }else {
  1784.                         $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  1785.                     }
  1786.                     if (!$fournisseurBanque) {
  1787.                         $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  1788.                     }
  1789.                     if ($fournisseurBanque) {
  1790.                         $banqueFournisseur = $fournisseurBanque->getBanque();
  1791.                         $ibanFournisseur = $fournisseurBanque->getIban();
  1792.                         $bicFournisseur = $fournisseurBanque->getBic();
  1793.                     }
  1794.                 }
  1795.                 $facture->setIbanSpv($ibanSpv);
  1796.                 $facture->setBicSpv($bicSpv);
  1797.                 $facture->setBanqueSpv($banqueSpv);
  1798.                 $facture->setFluxBancaireSpv($fluxBancaireSpv);
  1799.                 $facture->setIbanFournisseur($ibanFournisseur);
  1800.                 $facture->setBicFournisseur($bicFournisseur);
  1801.                 $facture->setBanqueFournisseur($banqueFournisseur);
  1802.                 $facture->setDateValidation(new \DateTime());
  1803.                 $facture->setDate(new \DateTime($date));
  1804. //                $facture->setStatus(FactureFinance::STATUS_PAYER);
  1805.                 $facture->setStatus(FactureFinance::STATUS_PAYER_NEW);
  1806.                 $this->em->persist($facture);
  1807.                 $this->em->flush();
  1808.                 return [
  1809.                     'success' => true,
  1810.                     'factureFinance' => $facture,
  1811.                 ];
  1812.             }
  1813.         }
  1814.         return [
  1815.             'success' => false,
  1816.             'factureFinance' => $facture,
  1817.         ];
  1818.     }
  1819.     public function valideDateNowMontant0($token)
  1820.     {
  1821.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1822.         if($facture->getMonatantRestantTtc() == 0){
  1823.             $date = new \DateTime('now');
  1824.             if($facture){
  1825.                 $userCurrent = $this->security->getUser();
  1826.                 $spvFacture = $facture->getSpv();
  1827.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  1828.                 }else {
  1829.                     if (!$spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFactureSpv()) {
  1830.                         return [
  1831.                             'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  1832.                             'success' => false,
  1833.                             'factureFinance' => $facture,
  1834.                         ];
  1835.                     }
  1836.                     if ($spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFacturePrejeance()) {
  1837.                         return [
  1838.                             'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  1839.                             'success' => false,
  1840.                             'factureFinance' => $facture,
  1841.                         ];
  1842.                     }
  1843.                 }
  1844.                 $facture->setStatus(FactureFinance::STATUS_DATE_PAIEMENT_PAYER);
  1845.                 $this->em->persist($facture);
  1846.                 $this->em->flush();
  1847.                 if($date){
  1848.                     $banqueSpv = '';
  1849.                     $ibanSpv = '';
  1850.                     $bicSpv = '';
  1851.                     $fluxBancaireSpv = '';
  1852.                     if ($facture->getSpv()) {
  1853.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  1854.                         if (!$spvBanque) {
  1855.                             $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  1856.                         }
  1857.                         if ($spvBanque) {
  1858.                             $banqueSpv = $spvBanque->getBanque();
  1859.                             $ibanSpv = $spvBanque->getIban();
  1860.                             $bicSpv = $spvBanque->getBic();
  1861.                         }
  1862.                         $fluxBancaireSpv = $facture->getSpv()->getFluxBancaire();
  1863.                     }
  1864.                     $banqueFournisseur = '';
  1865.                     $ibanFournisseur = '';
  1866.                     $bicFournisseur = '';
  1867.                     if ($facture->getFournisseur()) {
  1868.                         if($facture->getRib()) {
  1869.                             $fournisseurBanque = $facture->getRib();
  1870.                         }else {
  1871.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  1872.                         }
  1873.                         if (!$fournisseurBanque) {
  1874.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  1875.                         }
  1876.                         if ($fournisseurBanque) {
  1877.                             $banqueFournisseur = $fournisseurBanque->getBanque();
  1878.                             $ibanFournisseur = $fournisseurBanque->getIban();
  1879.                             $bicFournisseur = $fournisseurBanque->getBic();
  1880.                         }
  1881.                     }
  1882.                     $facture->setIbanSpv($ibanSpv);
  1883.                     $facture->setBicSpv($bicSpv);
  1884.                     $facture->setBanqueSpv($banqueSpv);
  1885.                     $facture->setFluxBancaireSpv($fluxBancaireSpv);
  1886.                     $facture->setIbanFournisseur($ibanFournisseur);
  1887.                     $facture->setBicFournisseur($bicFournisseur);
  1888.                     $facture->setBanqueFournisseur($banqueFournisseur);
  1889.                     $facture->setDateValidation(new \DateTime());
  1890.                     $facture->setDate($date);
  1891. //                    $facture->setStatus(FactureFinance::STATUS_PAYER);
  1892.                     $facture->setStatus(FactureFinance::STATUS_PAYER_NEW);
  1893.                     $this->em->persist($facture);
  1894.                     $this->em->flush();
  1895.                     return [
  1896.                         'success' => true,
  1897.                         'factureFinance' => $facture,
  1898.                     ];
  1899.                 }
  1900.             }
  1901.         }
  1902.         return [
  1903.             'success' => false,
  1904.         ];
  1905.     }
  1906.     public function demandeModificationFacture($request,$token)
  1907.     {
  1908.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1909.         $textDemande = $request->get('textDemande');
  1910.         if($facture && in_array($facture->getStatus(),[FactureFinance::STATUS_EN_ATTENT_VALIDATION,FactureFinance::STATUS_REFUS])){
  1911.             $facture->setTextDemande($textDemande);
  1912.             $facture->setStatus(FactureFinance::STATUS_DEMANDE_MODIFICATION);
  1913.             $this->em->persist($facture);
  1914.             $this->em->flush();
  1915.             return [
  1916.                 'success' => true,
  1917.                 'factureFinance' => $facture
  1918.             ];
  1919.         }
  1920.         return [
  1921.             'success' => false,
  1922.         ];
  1923.     }
  1924.     public function reediteFacture($request,$token)
  1925.     {
  1926.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1927.         if($facture && $facture->getStatus() == FactureFinance::STATUS_REFUS){
  1928.             $facture->setStatus(FactureFinance::STATUS_DEMANDE_MODIFICATION);
  1929.             $this->em->persist($facture);
  1930.             $this->em->flush();
  1931.             return [
  1932.                 'success' => true,
  1933.                 'factureFinance' => $facture
  1934.             ];
  1935.         }
  1936.         return [
  1937.             'success' => false,
  1938.         ];
  1939.     }
  1940.     public function refusFactureFinance($request,$token)
  1941.     {
  1942.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1943.         $textRefus = $request->get('textRefus');
  1944.         if($facture){
  1945.             $userCurrent = $this->security->getUser();
  1946.             $spvFacture = $facture->getSpv();
  1947.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  1948.             }else {
  1949.                 if (!$spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFactureSpv()) {
  1950.                     return [
  1951.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé de refuser la facture</p>',
  1952.                         'success' => false,
  1953.                         'factureFinance' => $facture,
  1954.                     ];
  1955.                 }
  1956.                 if ($spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFacturePrejeance()) {
  1957.                     return [
  1958.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé de refuser la facture</p>',
  1959.                         'success' => false,
  1960.                         'factureFinance' => $facture,
  1961.                     ];
  1962.                 }
  1963.             }
  1964.             $facture->setDateRefus(new \DateTime());
  1965.             $facture->setTextRefus($textRefus);
  1966.             $facture->setStatus(FactureFinance::STATUS_REFUS);
  1967.             $this->em->persist($facture);
  1968.             $this->em->flush();
  1969.             return [
  1970.                 'success' => true,
  1971.                 'factureFinance' => $facture,
  1972.             ];
  1973.         }
  1974.         return [
  1975.             'success' => false,
  1976.         ];
  1977.     }
  1978.     public function valideEnattentFactureFinance($request,$token)
  1979.     {
  1980.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  1981.         if($facture){
  1982.             $userCurrent = $this->security->getUser();
  1983.             $spvFacture = $facture->getSpv();
  1984.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  1985.             }else {
  1986.                 if (!$spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFactureSpv()) {
  1987.                     return [
  1988.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  1989.                         'success' => false,
  1990.                         'factureFinance' => $facture,
  1991.                     ];
  1992.                 }
  1993.                 if ($spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFacturePrejeance()) {
  1994.                     return [
  1995.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  1996.                         'success' => false,
  1997.                         'factureFinance' => $facture,
  1998.                     ];
  1999.                 }
  2000.             }
  2001.             $facture->setStatus(FactureFinance::STATUS_EN_ATTENT_PAIEMENT);
  2002.             $this->em->persist($facture);
  2003.             $this->em->flush();
  2004.             return [
  2005.                 'success' => true,
  2006.                 'factureFinance' => $facture,
  2007.             ];
  2008.         }
  2009.         return [
  2010.             'success' => false,
  2011.         ];
  2012.     }
  2013.     public function exportCSV($request,$spvId,$date)
  2014.     {
  2015.         if($spvId) {
  2016.             $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDateOld($spvId, $date);
  2017.             $array = [];
  2018.             if ($factures) {
  2019.                 $contenu = '';
  2020.                 $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";
  2021.                 foreach ($factures as $facture) {
  2022.                     $spv = $facture->getSpv() ? $facture->getSpv()->getName() : '';
  2023.                     $fournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  2024.                     $date = $facture->getDate() ? $facture->getDate()->format('d/m/Y') : '';
  2025.                     if($facture->getIsAvoir()){
  2026.                         $montant = $facture->getMonatantRestantTtc();
  2027.                     }else {
  2028.                         $montant = $facture->getMonatantTtc();
  2029.                     }
  2030.                     $banqueSpv = '';
  2031.                     $ibanSpv = '';
  2032.                     $bicSpv = '';
  2033.                     if ($facture->getSpv()) {
  2034.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  2035.                         if (!$spvBanque) {
  2036.                             $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  2037.                         }
  2038.                         if ($spvBanque) {
  2039.                             $banqueSpv = $spvBanque->getBanque();
  2040.                             $ibanSpv = $spvBanque->getIban();
  2041.                             $bicSpv = $spvBanque->getBic();
  2042.                         }
  2043.                     }
  2044.                     $banqueFournisseur = '';
  2045.                     $ibanFournisseur = '';
  2046.                     $bicFournisseur = '';
  2047.                     $codePaysFournisseur = '';
  2048.                     if ($facture->getFournisseur()) {
  2049.                         if($facture->getRib()) {
  2050.                             $fournisseurBanque = $facture->getRib();
  2051.                         }else {
  2052.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2053.                         }
  2054.                         if (!$fournisseurBanque) {
  2055.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2056.                         }
  2057.                         if ($fournisseurBanque) {
  2058.                             $banqueFournisseur = $fournisseurBanque->getBanque();
  2059.                             $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  2060.                             $bicFournisseur = $fournisseurBanque->getBic();
  2061.                         }
  2062.                         $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  2063.                     }
  2064.                     $projects = '';
  2065.                     if(count($facture->getProjectFactureFinance())>0){
  2066.                         foreach ($facture->getProjectFactureFinance()  as $key => $item){
  2067.                             $nameProject = $item->getProject() ? $item->getProject()->getName().'  '  : ' ' ;
  2068.                             $nameCategory = $item->getCategory() ? $item->getCategory()->getName().' / '  : ' ' ;
  2069.                             $nameEtap = $item->getEtap() ? 'Etape '.$item->getEtap()->getEtapsNum().' / '  : ' ' ;
  2070.                             $porcentage = $item->getTva() ? $item->getTva().'%'  : ' ' ;
  2071.                             if($key+1 == count($facture->getProjectFactureFinance())){
  2072. //                                $projects .= $nameProject .$nameCategory.$nameEtap.$porcentage;
  2073.                                 $projects .= $nameProject ;
  2074.                             }else{
  2075.                                 $projects .= $nameProject."\n";
  2076. //                                $projects .= $nameProject .$nameCategory.$nameEtap.$porcentage."\n";
  2077.                             }
  2078.                         }
  2079.                     }
  2080. //                    $contenu .= $facture->getNumeroFacture() . ';' . $spv . ';' . $ibanSpv . ';' . $bicSpv . ';' . $banqueSpv . ';' . $fournisseur . ';' . $ibanFournisseur . ';' . $bicFournisseur . ';' . $banqueFournisseur . ';' . $date . ';' . $montant . ';' .$projects . ';' . "\r\n";
  2081.                     $pattern  = '/(^")|("$)/';// doubles quotes en début ou doubles quotes en fin de saisie
  2082.                     $array[] = [
  2083.                         $facture->getNumeroFacture30Max(),
  2084.                         str_replace ($pattern,'',$spv),
  2085.                         (string)$ibanSpv,
  2086.                         $bicSpv,
  2087.                         str_replace ($pattern,'',$banqueSpv),
  2088.                         str_replace ($pattern,'',$fournisseur),
  2089.                         (string)$ibanFournisseur,
  2090.                         $bicFournisseur,
  2091.                         str_replace ($pattern,'',$banqueFournisseur),
  2092.                         $date,
  2093.                         str_replace([','], ".", str_replace([' '], "", $montant)),
  2094.                         $codePaysFournisseur,
  2095.                         $facture->getNumeroFacture30Max(),
  2096.                         $projects
  2097.                     ];
  2098.                 }
  2099.                 $file = $this->params->get('zips_directory') . "/paiement_" . time() . ".csv";
  2100.                 return [
  2101.                     'file' => $file,
  2102.                     'contenu' => $array
  2103.                 ];
  2104.             }
  2105.         }
  2106.         return false;
  2107.     }
  2108.     public function exportXmlFlux($factureFinancePaiement)
  2109.     {
  2110.         if($factureFinancePaiement) {
  2111.             $factureFinancePaiementDetail = $this->em->getRepository(FactureFinancePaiementDetail::class)->findBy(['factureFinancePaiement'=>$factureFinancePaiement->getId()]);
  2112.             $pattern  = '/(^")|("$)/';// doubles quotes en début ou doubles quotes en fin de saisie
  2113.             if ($factureFinancePaiementDetail) {
  2114.                 $spvEntity = $factureFinancePaiement->getSpv();
  2115.                 $spv = $spvEntity ? $spvEntity->getName() : '';
  2116.                 $banqueSpv = '';
  2117.                 $ibanSpv = '';
  2118.                 $bicSpv = '';
  2119.                 if ($spvEntity) {
  2120.                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $spvEntity->getId(), 'isDefault' => true]);
  2121.                     if (!$spvBanque) {
  2122.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $spvEntity->getId()]);
  2123.                     }
  2124.                     if ($spvBanque) {
  2125.                         $banqueSpv = $spvBanque->getBanque();
  2126.                         $ibanSpv = $spvBanque->getIban();
  2127.                         $bicSpv = $spvBanque->getBic();
  2128.                     }
  2129.                 }
  2130.                 $sampleUniqueMsgId = "pt" . substr($spv, 0, 12).'-'.$factureFinancePaiement->getDatePaiementPrevu()->format('Ymd').'-'.time() ;
  2131.                 $SampleInitiatingPartyName =  $spv ;
  2132.                 $customerCredit = TransferFileFacadeFactory::createCustomerCredit($sampleUniqueMsgId, $SampleInitiatingPartyName, 'pain.001.001.03');
  2133.                 $dateTimeFactureValidePayement = $factureFinancePaiement->getDatePrevu() ? $factureFinancePaiement->getDatePrevu(): null;
  2134.                 $dateTimeFacturePayementPrevu = $factureFinancePaiement->getDatePaiementPrevu()? $factureFinancePaiement->getDatePaiementPrevu(): null;
  2135.                 if($dateTimeFacturePayementPrevu){
  2136.                     $id = 'Paiement-'.$spvEntity->getId().'-'.$dateTimeFacturePayementPrevu->getTimestamp().'-'.time();
  2137.                 }else{
  2138.                     $id = 'Paiement-'.$spvEntity->getId().'-'.$dateTimeFactureValidePayement->getTimestamp().'-'.time();
  2139.                 }
  2140.                 $customerCredit->addPaymentInfo($id, array(
  2141.                     'id' => $id,
  2142.                     'debtorName'              => str_replace ($pattern,'',$spv),
  2143.                     'debtorAccountIBAN'       => (string)$ibanSpv,
  2144.                     'debtorAgentBIC'          => (string)$bicSpv,
  2145.                     'batchBooking'            => true,
  2146.                     'dueDate'            => $dateTimeFacturePayementPrevu,
  2147.                 ));
  2148.                 foreach ($factureFinancePaiementDetail as $item) {
  2149.                     $facture = $item->getFactureFinance();
  2150.                     $fournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  2151.                     $dateFacture = $facture->getDate();
  2152.                     if($facture->getIsAvoir()){
  2153.                         $montant = $facture->getMonatantRestantTtc();
  2154.                     }else {
  2155.                         $montant = $facture->getMonatantTtc();
  2156.                     }
  2157.                     $banqueFournisseur = '';
  2158.                     $ibanFournisseur = '';
  2159.                     $bicFournisseur = '';
  2160.                     $codePaysFournisseur = '';
  2161.                     if ($facture->getFournisseur()) {
  2162.                         if($facture->getRib()) {
  2163.                             $fournisseurBanque = $facture->getRib();
  2164.                         }else {
  2165.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2166.                         }
  2167.                         if (!$fournisseurBanque) {
  2168.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2169.                         }
  2170.                         if ($fournisseurBanque) {
  2171.                             $banqueFournisseur = $fournisseurBanque->getBanque();
  2172.                             $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  2173.                             $bicFournisseur = $fournisseurBanque->getBic();
  2174.                         }
  2175.                         $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  2176.                     }
  2177.                     $projects = '';
  2178.                     if(count($facture->getProjectFactureFinance())>0){
  2179.                         foreach ($facture->getProjectFactureFinance()  as $key => $item){
  2180.                             $nameProject = $item->getProject() ? $item->getProject()->getName().'  '  : ' ' ;
  2181.                             $nameCategory = $item->getCategory() ? $item->getCategory()->getName().' / '  : ' ' ;
  2182.                             $nameEtap = $item->getEtap() ? 'Etape '.$item->getEtap()->getEtapsNum().' / '  : ' ' ;
  2183.                             $porcentage = $item->getTva() ? $item->getTva().'%'  : ' ' ;
  2184.                             if($key+1 == count($facture->getProjectFactureFinance())){
  2185. //                                $projects .= $nameProject .$nameCategory.$nameEtap.$porcentage;
  2186.                                 $projects .= $nameProject ;
  2187.                             }else{
  2188.                                 $projects .= $nameProject."\n";
  2189. //                                $projects .= $nameProject .$nameCategory.$nameEtap.$porcentage."\n";
  2190.                             }
  2191.                         }
  2192.                     }
  2193.                     $numeroSansCaractaireSpeciaux = preg_replace('/[^a-zA-Z0-9_ -]/s', '', $facture->getNumeroFacture());
  2194.                     $numeroFactureDiaposon = substr(str_replace(' ','',$numeroSansCaractaireSpeciaux), 0, 35);
  2195.                     $facture->setNumeroFactureDiaposon($numeroFactureDiaposon);
  2196.                     $this->em->persist($facture);
  2197.                     $this->em->flush();
  2198.                     $customerCredit->addTransfer($id, array(
  2199.                         'amount'                => str_replace([','], ".", str_replace([' '], "", $montant)) * 100, // `amount` should be in cents
  2200.                         'creditorIban'            => (string)$ibanFournisseur ,
  2201.                         'creditorBic'             => (string)$bicFournisseur ,
  2202.                         'creditorName'            => str_replace ($pattern,'',(string)$fournisseur),
  2203.                         'creditorReference'         => $facture->getNumeroFacture30Max(),
  2204.                         'endToEndId'         => $numeroFactureDiaposon,
  2205.                         'remittanceInformation' => ''
  2206.                     ));
  2207.                 }
  2208. //                $file = $customerCredit->asXML();
  2209.                 // modifier le dom
  2210.                 $xml = $customerCredit->asXML();
  2211.                 $dom = new \DOMDocument();
  2212.                 $dom->preserveWhiteSpace = false;
  2213.                 $dom->formatOutput = true;
  2214.                 $dom->loadXML($xml);
  2215.                 $xpath = new \DOMXPath($dom);
  2216.                 $xpath->registerNamespace(
  2217.                     'sepa',
  2218.                     'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03'
  2219.                 );
  2220.                 $nodes = $xpath->query('//sepa:CdtTrfTxInf/sepa:PmtTpInf');
  2221.                 foreach ($nodes as $node) {
  2222.                     $node->parentNode->removeChild($node);
  2223.                 }
  2224.                 // end modifier le dom
  2225.                 $file = $dom->saveXML();
  2226.                 return [
  2227.                     'file' => $file,
  2228.                 ];
  2229.             }
  2230.         }
  2231.         return false;
  2232.     }
  2233.     public function exportFactureFinanceParDateXml(){
  2234.         $factureFinancePaiements = $this->em->getRepository(FactureFinancePaiement::class)->findAllNotFichierBySpvAndDate();
  2235.         if($factureFinancePaiements){
  2236.             foreach ($factureFinancePaiements as $factureFinancePaiement){
  2237.                 $data = $this->exportXmlFlux($factureFinancePaiement);
  2238.                 if($data){
  2239.                     $fileExport = $data['file'];
  2240.                     $fileName = "pt" .substr($factureFinancePaiement->getSpv()->getName(), 0, 12).'_'.$factureFinancePaiement->getDatePaiementPrevu()->format('Ymd').'_'.time() . ".xml";
  2241.                     $factureFinancePaiement->setIsFichierCreated(true);
  2242.                     $factureFinancePaiement->setFichier($fileName);
  2243.                     $this->em->persist($factureFinancePaiement);
  2244.                     $this->em->flush();
  2245.                     $factureFinancePaiementDetails = $this->em->getRepository(FactureFinancePaiementDetail::class)->findBy(['factureFinancePaiement'=>$factureFinancePaiement->getId()]);
  2246.                     $faturesData = [];
  2247.                     foreach ($factureFinancePaiementDetails as $item) {
  2248.                         $item->getFactureFinance()->setIsPaiement(FactureFinance::STATUS_TERMINE_PAYE_SEPA);
  2249.                         $item->getFactureFinance()->setDatePaiementGenerateFichier(new \DateTime());
  2250.                         $this->em->persist($item->getFactureFinance());
  2251.                         $this->em->flush();
  2252.                         $this->notification->setCompteurErpiPieceRegelement($item->getFactureFinance());
  2253.                         $faturesData[] = $item->getFactureFinance();
  2254.                     }
  2255.                     $file = $this->params->get('paiements_altarea_directory') . "/".$fileName;
  2256.                     $fp = fopen($file,"wb");
  2257.                     fwrite($fp,$fileExport);
  2258.                     fclose($fp);
  2259.                     $this->sendToServeur($fileName ,'/altarea/paiements',$this->params->get('paiements_altarea_directory'));
  2260.                     $this->insertLogFichier($factureFinancePaiement->getSpv(),$faturesData,$fileName);
  2261.                 }
  2262.             }
  2263.         }
  2264.     }
  2265.     public function exportFactureFinanceParDateXmlBySpvAndDateValidation($spv,$date){
  2266.         $dataFacture = [];
  2267.         $factureFinancePaiements = $this->em->getRepository(FactureFinancePaiement::class)->findAllNotFichierBySpvAndDateValidation($spv,$date);
  2268.         if($factureFinancePaiements){
  2269.             foreach ($factureFinancePaiements as $factureFinancePaiement){
  2270.                 $data = $this->exportXmlFlux($factureFinancePaiement);
  2271.                 if($data){
  2272.                     $fileExport = $data['file'];
  2273.                     $fileName = "pt" .substr($factureFinancePaiement->getSpv()->getName(), 0, 12).'_'.$factureFinancePaiement->getDatePaiementPrevu()->format('Ymd').'_'.time() . ".xml";
  2274.                     $factureFinancePaiement->setIsFichierCreated(true);
  2275.                     $factureFinancePaiement->setFichier($fileName);
  2276.                     $this->em->persist($factureFinancePaiement);
  2277.                     $this->em->flush();
  2278.                     $factureFinancePaiementDetails = $this->em->getRepository(FactureFinancePaiementDetail::class)->findBy(['factureFinancePaiement'=>$factureFinancePaiement->getId()]);
  2279.                     foreach ($factureFinancePaiementDetails as $item) {
  2280.                         $item->getFactureFinance()->setIsPaiement(FactureFinance::STATUS_TERMINE_PAYE_SEPA);
  2281.                         $item->getFactureFinance()->setDatePaiementGenerateFichier(new \DateTime());
  2282.                         $this->em->persist($item->getFactureFinance());
  2283.                         $this->em->flush();
  2284.                         $this->notification->setCompteurErpiPieceRegelement($item->getFactureFinance());
  2285.                         $dataFacture[] = $item->getFactureFinance();
  2286.                     }
  2287.                     $file = $this->params->get('paiements_altarea_directory') . "/".$fileName;
  2288.                     $fp = fopen($file,"wb");
  2289.                     fwrite($fp,$fileExport);
  2290.                     fclose($fp);
  2291. //                    $this->sendToServeur($fileName ,'/altarea/paiements',$this->params->get('paiements_altarea_directory'));
  2292.                 }
  2293.             }
  2294.         }
  2295.         return $dataFacture;
  2296.     }
  2297.     public function exportFactureFinanceParDate($datetime){
  2298.         if($datetime) {
  2299.             $spvs = $this->em->getRepository(Spv::class)->getSpvEnabled();
  2300.             if($spvs){
  2301.                 foreach ($spvs as $spvObj){
  2302.                     $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDateOld($spvObj->getId(), $datetime->format('Y-m-d'));
  2303.                     $array = [];
  2304.                     if ($factures) {
  2305.                         foreach ($factures as $facture) {
  2306.                             $spv = $facture->getSpv() ? $facture->getSpv()->getName() : '';
  2307.                             $fournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  2308.                             $date = $facture->getDate() ? $facture->getDate()->format('d/m/Y') : '';
  2309.                             if($facture->getIsAvoir()){
  2310.                                 $montant = $facture->getMonatantRestantTtc();
  2311.                             }else {
  2312.                                 $montant = $facture->getMonatantTtc();
  2313.                             }
  2314.                             $banqueSpv = '';
  2315.                             $ibanSpv = '';
  2316.                             $bicSpv = '';
  2317.                             if ($facture->getSpv()) {
  2318.                                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  2319.                                 if (!$spvBanque) {
  2320.                                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  2321.                                 }
  2322.                                 if ($spvBanque) {
  2323.                                     $banqueSpv = $spvBanque->getBanque();
  2324.                                     $ibanSpv = $spvBanque->getIban();
  2325.                                     $bicSpv = $spvBanque->getBic();
  2326.                                 }
  2327.                             }
  2328.                             $banqueFournisseur = '';
  2329.                             $ibanFournisseur = '';
  2330.                             $bicFournisseur = '';
  2331.                             $codePaysFournisseur = '';
  2332.                             if ($facture->getFournisseur()) {
  2333.                                 if($facture->getRib()) {
  2334.                                     $fournisseurBanque = $facture->getRib();
  2335.                                 }else {
  2336.                                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2337.                                 }
  2338.                                 if (!$fournisseurBanque) {
  2339.                                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2340.                                 }
  2341.                                 if ($fournisseurBanque) {
  2342.                                     $banqueFournisseur = $fournisseurBanque->getBanque();
  2343.                                     $ibanFournisseur = $fournisseurBanque->getIban();
  2344.                                     $bicFournisseur = $fournisseurBanque->getBic();
  2345.                                 }
  2346.                                 $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  2347.                             }
  2348.                             $projects = '';
  2349.                             if(count($facture->getProjectFactureFinance())>0){
  2350.                                 foreach ($facture->getProjectFactureFinance()  as $key => $item){
  2351.                                     $nameProject = $item->getProject() ? $item->getProject()->getName().'  '  : ' ' ;
  2352.                                     $nameCategory = $item->getCategory() ? $item->getCategory()->getName().' / '  : ' ' ;
  2353.                                     $nameEtap = $item->getEtap() ? 'Etape '.$item->getEtap()->getEtapsNum().' / '  : ' ' ;
  2354.                                     $porcentage = $item->getTva() ? $item->getTva().'%'  : ' ' ;
  2355.                                     if($key+1 == count($facture->getProjectFactureFinance())){
  2356.                                         $projects .= $nameProject ;
  2357.                                     }else{
  2358.                                         $projects .= $nameProject."\n";
  2359.                                     }
  2360.                                 }
  2361.                             }
  2362.                             $pattern  = '/(^")|("$)/';// doubles quotes en début ou doubles quotes en fin de saisie
  2363.                             $array[] = [
  2364.                                 $facture->getNumeroFacture30Max(),
  2365.                                 str_replace ($pattern,'',$spv),
  2366.                                 (string)$ibanSpv,
  2367.                                 $bicSpv,
  2368.                                 str_replace ($pattern,'',$banqueSpv),
  2369.                                 str_replace ($pattern,'',$fournisseur),
  2370.                                 (string)$ibanFournisseur,
  2371.                                 $bicFournisseur,
  2372.                                 str_replace ($pattern,'',$banqueFournisseur),
  2373.                                 $date,
  2374.                                 str_replace([','], ".", str_replace([' '], "", $montant)),
  2375.                                 $codePaysFournisseur,
  2376.                                 $facture->getNumeroFacture30Max(),
  2377.                                 $projects
  2378.                             ];
  2379.                         }
  2380.                         $file = $this->params->get('facture_finance_directory') . "/paiements/paiement_" . $spvObj->getName().'_'.$datetime->format('Y-m-d') . ".csv";
  2381.                         $contenu = $array;
  2382.                         $fp=fopen($file,"w" ); // ouverture du fichier
  2383. //                       fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
  2384.                         foreach ($contenu as $item){
  2385.                             fputcsv($fp,$item,';'," ");
  2386.                         }
  2387.                     }
  2388.                 }
  2389.             }
  2390.         }
  2391.     }
  2392.     public function exportCSV2($request,$spvId,$date)
  2393.     {
  2394.         if($spvId && $date) {
  2395.             $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDateOld($spvId, $date);
  2396.             $array = [];
  2397.             if ($factures) {
  2398.                 foreach ($factures as $facture) {
  2399.                     $spv = $facture->getSpv() ? $facture->getSpv()->getName() : '';
  2400.                     $fournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  2401.                     $date = $facture->getDate() ? $facture->getDate()->format('d/m/Y') : '';
  2402.                     if($facture->getIsAvoir()){
  2403.                         $montant = $facture->getMonatantRestantTtc();
  2404.                     }else {
  2405.                         $montant = $facture->getMonatantTtc();
  2406.                     }
  2407.                     $banqueSpv = '';
  2408.                     $ibanSpv = '';
  2409.                     $bicSpv = '';
  2410.                     if ($facture->getSpv()) {
  2411.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  2412.                         if (!$spvBanque) {
  2413.                             $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  2414.                         }
  2415.                         if ($spvBanque) {
  2416.                             $banqueSpv = $spvBanque->getBanque();
  2417.                             $ibanSpv = $spvBanque->getIban();
  2418.                             $bicSpv = $spvBanque->getBic();
  2419.                         }
  2420.                     }
  2421.                     $banqueFournisseur = '';
  2422.                     $ibanFournisseur = '';
  2423.                     $bicFournisseur = '';
  2424.                     $codePaysFournisseur = '';
  2425.                     if ($facture->getFournisseur()) {
  2426.                         if($facture->getRib()) {
  2427.                             $fournisseurBanque = $facture->getRib();
  2428.                         }else {
  2429.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2430.                         }
  2431.                         if (!$fournisseurBanque) {
  2432.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2433.                         }
  2434.                         if ($fournisseurBanque) {
  2435.                             $banqueFournisseur = $fournisseurBanque->getBanque();
  2436.                             $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  2437.                             $bicFournisseur = $fournisseurBanque->getBic();
  2438.                         }
  2439.                         $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  2440.                     }
  2441.                     if($spvBanque && $spvBanque->getIsANETOSG()){
  2442.                         $array[] = [
  2443.                             '',
  2444.                             str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$fournisseur),
  2445.                             (string)$ibanFournisseur,
  2446.                             str_replace(['€'],'',str_replace([','], ".", str_replace([' '], "", $montant))),
  2447.                             $date,
  2448.                             (string)$ibanSpv,
  2449.                             str_replace (' ','',str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$facture->getNumeroFacture30Max())),
  2450.                             'NOTPROVIDED',
  2451.                             $banqueFournisseur,
  2452.                             str_replace (' ','',str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$facture->getNumeroFacture30Max())),
  2453.                             $codePaysFournisseur,
  2454.                             'SEPA',
  2455.                             'ANETO'
  2456.                         ];
  2457.                     }else{
  2458.                         $array[] = [
  2459.                             '',
  2460.                             str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$fournisseur),
  2461.                             (string)$ibanFournisseur,
  2462.                             str_replace(['€'],'',str_replace([','], ".", str_replace([' '], "", $montant))),
  2463.                             $date,
  2464.                             (string)$ibanSpv,
  2465.                             str_replace (' ','',str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$facture->getNumeroFacture30Max())),
  2466.                             'NOTPROVIDED',
  2467.                             $banqueFournisseur,
  2468.                             str_replace (' ','',str_replace (FactureFinance::SPECIALE_CARACTAIRE,'',$facture->getNumeroFacture30Max())),
  2469.                             $codePaysFournisseur,
  2470.                             'SEPA'
  2471.                         ];
  2472.                     }
  2473.                 }
  2474.                 $file = $this->params->get('zips_directory') . "/paiement_" . time() . ".csv";
  2475.                 return [
  2476.                     'file' => $file,
  2477.                     'contenu' => $array
  2478.                 ];
  2479.             }
  2480.         }
  2481.         return false;
  2482.     }
  2483.     public function exportFactureFinanceParDate2($datetime){
  2484.         if($datetime) {
  2485.             $spvs = $this->em->getRepository(Spv::class)->getSpvEnabled();
  2486.             if($spvs){
  2487.                 foreach ($spvs as $spvObj){
  2488.                     $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDateOld($spvObj->getId(), $datetime->format('Y-m-d'));
  2489.                     $array = [];
  2490.                     if ($factures) {
  2491.                         foreach ($factures as $facture) {
  2492.                             $spv = $facture->getSpv() ? $facture->getSpv()->getName() : '';
  2493.                             $fournisseur = $facture->getFournisseur() ? $facture->getFournisseur()->getName() : '';
  2494.                             $date = $facture->getDate() ? $facture->getDate()->format('d/m/Y') : '';
  2495.                             if($facture->getIsAvoir()){
  2496.                                 $montant = $facture->getMonatantRestantTtc();
  2497.                             }else {
  2498.                                 $montant = $facture->getMonatantTtc();
  2499.                             }
  2500.                             $banqueSpv = '';
  2501.                             $ibanSpv = '';
  2502.                             $bicSpv = '';
  2503.                             if ($facture->getSpv()) {
  2504.                                 $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  2505.                                 if (!$spvBanque) {
  2506.                                     $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  2507.                                 }
  2508.                                 if ($spvBanque) {
  2509.                                     $banqueSpv = $spvBanque->getBanque();
  2510.                                     $ibanSpv = $spvBanque->getIban();
  2511.                                     $bicSpv = $spvBanque->getBic();
  2512.                                 }
  2513.                             }
  2514.                             $banqueFournisseur = '';
  2515.                             $ibanFournisseur = '';
  2516.                             $bicFournisseur = '';
  2517.                             $codePaysFournisseur = '';
  2518.                             if ($facture->getFournisseur()) {
  2519.                                 if($facture->getRib()) {
  2520.                                     $fournisseurBanque = $facture->getRib();
  2521.                                 }else {
  2522.                                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2523.                                 }
  2524.                                 if (!$fournisseurBanque) {
  2525.                                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2526.                                 }
  2527.                                 if ($fournisseurBanque) {
  2528.                                     $banqueFournisseur = $fournisseurBanque->getBanque();
  2529.                                     $ibanFournisseur = $fournisseurBanque->getIban();
  2530.                                     $bicFournisseur = $fournisseurBanque->getBic();
  2531.                                 }
  2532.                                 $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  2533.                             }
  2534.                             if($spvBanque && $spvBanque->getIsANETOSG()){
  2535.                                 $array[] = [
  2536.                                     '',
  2537.                                     str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $fournisseur),
  2538.                                     (string)$ibanFournisseur,
  2539.                                     str_replace(['€'], '', str_replace([','], ".", str_replace([' '], "", $montant))),
  2540.                                     $date,
  2541.                                     (string)$ibanSpv,
  2542.                                     str_replace(' ', '', str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $facture->getNumeroFacture30Max())),
  2543.                                     'NOTPROVIDED',
  2544.                                     $banqueFournisseur,
  2545.                                     str_replace(' ', '', str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $facture->getNumeroFacture30Max())),
  2546.                                     $codePaysFournisseur,
  2547.                                     'SEPA',
  2548.                                     'ANETO',
  2549.                                 ];
  2550.                             }else {
  2551.                                 $array[] = [
  2552.                                     '',
  2553.                                     str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $fournisseur),
  2554.                                     (string)$ibanFournisseur,
  2555.                                     str_replace(['€'], '', str_replace([','], ".", str_replace([' '], "", $montant))),
  2556.                                     $date,
  2557.                                     (string)$ibanSpv,
  2558.                                     str_replace(' ', '', str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $facture->getNumeroFacture30Max())),
  2559.                                     'NOTPROVIDED',
  2560.                                     $banqueFournisseur,
  2561.                                     str_replace(' ', '', str_replace(FactureFinance::SPECIALE_CARACTAIRE, '', $facture->getNumeroFacture30Max())),
  2562.                                     $codePaysFournisseur,
  2563.                                     'SEPA'
  2564.                                 ];
  2565.                             }
  2566.                         }
  2567.                         $file = $this->params->get('facture_finance_directory') . "/flux_paiements/paiement_" . $spvObj->getName().'_'.$datetime->format('Y-m-d') . ".csv";
  2568.                         $contenu = $array;
  2569.                         $fp=fopen($file,"w" ); // ouverture du fichier
  2570. //                        fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
  2571.                         $spvBanqueObj = null;
  2572.                         if ($spvObj->getId()) {
  2573.                             $spvBanqueObj = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $spvObj->getId(), 'isDefault' => true]);
  2574.                             if (!$spvBanqueObj) {
  2575.                                 $spvBanqueObj = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $spvObj->getId()]);
  2576.                             }
  2577.                         }
  2578.                         if($spvBanqueObj && $spvBanqueObj->getIsANETOSG()){
  2579.                             $array1 = ['#CSV2ISO#','109','143','43','17','21','42','58','62','8','37','14','35'];
  2580.                         }else{
  2581.                             $array1 = ['#CSV2ISO#','109','143','43','17','21','42','58','62','8','37','14'];
  2582.                         }
  2583.                         fputcsv($fp,$array1,';'," ");
  2584.                         foreach ($contenu as $item){
  2585.                             fputcsv($fp,$item,';'," ");
  2586.                         }
  2587.                     }
  2588.                 }
  2589.             }
  2590.         }
  2591.     }
  2592.     public function exportXml($request,$spvId,$date)
  2593.     {
  2594.         if($spvId && $date) {
  2595.             $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDateOld($spvId, $date);
  2596.             if ($factures) {
  2597.                 foreach ($factures as $facture) {
  2598.                     if($facture->getIsAvoir()){
  2599.                         $montant = $facture->getMonatantRestantTtc().'€';
  2600.                     }else {
  2601.                         $montant = $facture->getMonatantTtc().'€';
  2602.                     }
  2603.                     $banqueSpv = '';
  2604.                     $ibanSpv = '';
  2605.                     $bicSpv = '';
  2606.                     if ($facture->getSpv()) {
  2607.                         $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId(), 'isDefault' => true]);
  2608.                         if (!$spvBanque) {
  2609.                             $spvBanque = $this->em->getRepository(Rib::class)->findOneBy(['spv' => $facture->getSpv()->getId()]);
  2610.                         }
  2611.                         if ($spvBanque) {
  2612.                             $banqueSpv = $spvBanque->getBanque();
  2613.                             $ibanSpv = $spvBanque->getIban();
  2614.                             $bicSpv = $spvBanque->getBic();
  2615.                         }
  2616.                     }
  2617.                     $banqueFournisseur = '';
  2618.                     $ibanFournisseur = '';
  2619.                     $bicFournisseur = '';
  2620.                     if ($facture->getFournisseur()) {
  2621.                         if($facture->getRib()) {
  2622.                             $fournisseurBanque = $facture->getRib();
  2623.                         }else {
  2624.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  2625.                         }
  2626.                         if (!$fournisseurBanque) {
  2627.                             $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  2628.                         }
  2629.                         if ($fournisseurBanque) {
  2630.                             $banqueFournisseur = $fournisseurBanque->getBanque();
  2631.                             $ibanFournisseur = $fournisseurBanque->getIban();
  2632.                             $bicFournisseur = $fournisseurBanque->getBic();
  2633.                         }
  2634.                     }
  2635.                     $spv = $facture->getSpv()?$facture->getSpv()->getName():'';
  2636.                     $fournisseur = $facture->getFournisseur()?$facture->getFournisseur()->getName():'';
  2637.                     $date = $facture->getDate()?$facture->getDate()->format('d/m/Y'):'';
  2638.                     $dom = new \DOMDocument('1.0', 'UTF-8');
  2639.                     $xmlRoot = $dom->createElement("xml");
  2640.                     $xmlRoot = $dom->appendChild($xmlRoot);
  2641.                     $currentItem1 = $dom->createElement("Reference_facture",$facture->getNumeroFacture30Max());
  2642.                     $xmlRoot->appendChild($currentItem1);
  2643.                     $currentItem2 = $dom->createElement("SPV");
  2644.                     $currentItem2 = $xmlRoot->appendChild($currentItem2);
  2645.                     $currentItem2->appendChild($dom->createElement('Name',$spv));
  2646.                     $currentItem2->appendChild($dom->createElement('IBAN',$ibanSpv));
  2647.                     $currentItem2->appendChild($dom->createElement('BIC',$bicSpv));
  2648.                     $currentItem2->appendChild($dom->createElement('Banque',$banqueSpv));
  2649.                     $currentItem3 = $dom->createElement("Fournisseur");
  2650.                     $currentItem3 = $xmlRoot->appendChild($currentItem3);
  2651.                     $currentItem3->appendChild($dom->createElement('name',$fournisseur));
  2652.                     $currentItem3->appendChild($dom->createElement('IBAN',$banqueFournisseur));
  2653.                     $currentItem3->appendChild($dom->createElement('BIC', $bicFournisseur));
  2654.                     $currentItem3->appendChild($dom->createElement('Banque',$ibanFournisseur));
  2655.                     $currentItem4 = $dom->createElement("Date_paiement",$date);
  2656.                     $xmlRoot->appendChild($currentItem4);
  2657.                     $currentItem5 = $dom->createElement("Montant_facture",$montant);
  2658.                     $xmlRoot->appendChild($currentItem5);
  2659.                     $file = $this->params->get('zips_directory') . "/paiement_".$facture->getToken().".xml";
  2660.                     $dom->save($file);
  2661.                     $dom->formatOutput = TRUE;
  2662.                     $contenu = $dom->saveXml();
  2663.                     $zip = new \ZipArchive();
  2664.                     $zipfile = $this->params->get('zips_directory') . '/paiement_-' . time() .'.zip';
  2665.                     if (file_exists($zipfile)) unlink($zipfile);
  2666.                     if ($zip->open($zipfile, \ZipArchive::CREATE) === TRUE) {
  2667.                         $zip->addFile($file,'paiement_-' . $facture->getToken());
  2668.                         $zip->close();
  2669.                         return $zipfile;
  2670.                     }
  2671.                 }
  2672.             }
  2673.         }
  2674.         return false;
  2675.     }
  2676.     public function sendFacturesEnAttenteNotSend(){
  2677.         $factures = $this->em->getRepository(FactureFinance::class)->getFacturesEnAttenteNotSend();
  2678.         $date = new \DateTime();
  2679.         $this->notification->sendFacturesEnAttenteNotSend('Factures en attents de validation',$factures,$date);
  2680.     }
  2681.     public function sendFacturesEnAttenteNotSendRappel(){
  2682.         $factures7j = $this->em->getRepository(FactureFinance::class)->getFacturesEnAttenteNotSend7j();
  2683.         $this->notification->sendFacturesEnAttenteNotSend7jRappel('Factures en attente de paiement',$factures7j);
  2684.         $usersTo = $this->em->getRepository(User::class)->getUserByRole('ROLE_ADMINISTRATEUR_FINANCIER');
  2685.         if($factures7j){
  2686.             foreach ($factures7j as $facture){
  2687.                 foreach ($usersTo as $userTo){
  2688.                     $this->notification->addNotificationFactureNotification($userTo,$facture->getUserCreated(),$facture);
  2689.                 }
  2690.             }
  2691.         }
  2692.         $factures3j = $this->em->getRepository(FactureFinance::class)->getFacturesEnAttenteNotSend3j();
  2693.         $this->notification->sendFacturesEnAttenteNotSend3jRappel('Factures en attente de paiement',$factures3j);
  2694.         if($factures3j){
  2695.             foreach ($factures3j as $facture){
  2696.                 foreach ($usersTo as $userTo){
  2697.                     $this->notification->addNotificationFactureNotification($userTo,$facture->getUserCreated(),$facture);
  2698.                 }
  2699.             }
  2700.         }
  2701.     }
  2702.     public function kpiSpvProject($request){
  2703.         $spvTabKpi = $request->get('spvTabKpi');
  2704.         $spvTabProject = $request->get('spvTabProject');
  2705.         $dateKpi1 = $request->get('searchTabDateKpi1');
  2706.         $dateKpi2 = $request->get('searchTabDateKpi2');
  2707.         $arrySpv = [];
  2708.         $arryProject = [];
  2709.         $tabGlobal = [];
  2710.         $tabGlobalTotal = [];
  2711.         if($spvTabKpi) {
  2712.             foreach ($spvTabKpi as $item) {
  2713.                 $spv = $this->em->getRepository(Spv::class)->find($item);
  2714.                 $arrySpv[] = $spv;
  2715.             }
  2716.         }
  2717.         if($spvTabProject) {
  2718.             foreach ($spvTabProject as $item) {
  2719.                 $project = $this->em->getRepository(Project::class)->find($item);
  2720.                 $arryProject[] = $project;
  2721.             }
  2722.         }
  2723.         if($arrySpv) {
  2724.             foreach ($arrySpv as $value) {
  2725.                 if($value){
  2726.                     $tabGlobal[$value->getId()]['name'] = $value->getName();
  2727.                     $totalSpv = 0;
  2728.                     foreach ($arryProject as $item) {
  2729.                         $facturesProject = $this->em->getRepository(ProjectFactureFinance::class)->getFacturesSpv($value->getId(), $item->getId(), $dateKpi1, $dateKpi2);
  2730.                         $totalSpvProject = 0;
  2731.                         if ($facturesProject) {
  2732.                             foreach ($facturesProject as $factureProject) {
  2733.                                 $totalSpvProject += $factureProject->getMontantTtc();
  2734.                             }
  2735.                         }
  2736.                         $tabGlobal[$value->getId()]['projectMontant'][] = $totalSpvProject;
  2737.                         $totalSpv += $totalSpvProject;
  2738.                     }
  2739.                     $tabGlobal[$value->getId()]['montantTotal'] = $totalSpv;
  2740.                 }
  2741.             }
  2742.         }
  2743.         if($tabGlobal) {
  2744.             foreach ($tabGlobal as $tabGlobalItem) {
  2745.                 if(isset($tabGlobalItem['projectMontant'])) {
  2746.                     foreach ($tabGlobalItem['projectMontant'] as $key => $tabGlobalItemProjectMontant) {
  2747.                         if (!isset($tabGlobalTotal[$key])) {
  2748.                             $tabGlobalTotal[$key] = 0;
  2749.                         }
  2750.                         $tabGlobalTotal[$key] += $tabGlobalItemProjectMontant;
  2751.                     }
  2752.                 }
  2753.             }
  2754.         }
  2755.         return [
  2756.             'arryProject'=>$arryProject ,
  2757.             'tabGlobal'=>$tabGlobal ,
  2758.             'tabGlobalTotal'=>$tabGlobalTotal
  2759.         ];
  2760.     }
  2761.     public function kpiFournisseurProject($request){
  2762.         $fournisseurTabKpi = $request->get('fournisseurTabKpi');
  2763.         $fournisseurTabProject = $request->get('fournisseurTabProject');
  2764.         $dateKpi1 = $request->get('searchTabDateKpi1');
  2765.         $dateKpi2 = $request->get('searchTabDateKpi2');
  2766.         $arryFournisseur = [];
  2767.         $arryProject = [];
  2768.         $tabGlobal = [];
  2769.         $tabGlobalTotal = [];
  2770.         if($fournisseurTabKpi) {
  2771.             foreach ($fournisseurTabKpi as $item) {
  2772.                 $fournisseur = $this->em->getRepository(Fournisseur::class)->find($item);
  2773.                 $arryFournisseur[] = $fournisseur;
  2774.             }
  2775.         }
  2776.         if($fournisseurTabProject) {
  2777.             foreach ($fournisseurTabProject as $item) {
  2778.                 $project = $this->em->getRepository(Project::class)->find($item);
  2779.                 $arryProject[] = $project;
  2780.             }
  2781.         }
  2782.         if($arryFournisseur) {
  2783.             foreach ($arryFournisseur as $value) {
  2784.                 if($value) {
  2785.                     $tabGlobal[$value->getId()]['name'] = $value->getName();
  2786.                     $totalFournisseur = 0;
  2787.                     foreach ($arryProject as $item) {
  2788.                         $facturesProject = $this->em->getRepository(ProjectFactureFinance::class)->getFacturesFournisseur($value->getId(), $item->getId(), $dateKpi1, $dateKpi2);
  2789.                         $totalFournisseurProject = 0;
  2790.                         if ($facturesProject) {
  2791.                             foreach ($facturesProject as $factureProject) {
  2792.                                 $totalFournisseurProject += $factureProject->getMontantTtc();
  2793.                             }
  2794.                         }
  2795.                         $tabGlobal[$value->getId()]['projectMontant'][] = $totalFournisseurProject;
  2796.                         $totalFournisseur += $totalFournisseurProject;
  2797.                     }
  2798.                     $tabGlobal[$value->getId()]['montantTotal'] = $totalFournisseur;
  2799.                 }
  2800.             }
  2801.         }
  2802.         foreach ($tabGlobal as $tabGlobalItem){
  2803.             if(isset($tabGlobalItem['projectMontant'])) {
  2804.                 foreach ($tabGlobalItem['projectMontant'] as $key => $tabGlobalItemProjectMontant) {
  2805.                     if (!isset($tabGlobalTotal[$key])) {
  2806.                         $tabGlobalTotal[$key] = 0;
  2807.                     }
  2808.                     $tabGlobalTotal[$key] += $tabGlobalItemProjectMontant;
  2809.                 }
  2810.             }
  2811.         }
  2812.         return [
  2813.             'arryProject'=>$arryProject ,
  2814.             'tabGlobal'=>$tabGlobal ,
  2815.             'tabGlobalTotal'=>$tabGlobalTotal
  2816.         ];
  2817.     }
  2818.     public function kpiClassificationProject($request){
  2819.         $classificationTabKpi = $request->get('classificationTabKpi');
  2820.         $classificationTabProject = $request->get('classificationTabProject');
  2821.         $dateKpi1 = $request->get('searchTabDateKpi1');
  2822.         $dateKpi2 = $request->get('searchTabDateKpi2');
  2823.         $SPVNotMultipleTabProject = $request->get('SPVNotMultipleTabProject');
  2824.         $arryClassification = [];
  2825.         $arryProject = [];
  2826.         $tabGlobal = [];
  2827.         $tabGlobalTotal = [];
  2828.         if(!$classificationTabKpi){
  2829.             $classificationTabKpi = FactureFinance::DEPENSE_NEW2;
  2830.             foreach ($classificationTabKpi as $item){
  2831.                 $arryClassification[]['name'] =  $item;
  2832.             }
  2833.         }else{
  2834.             foreach ($classificationTabKpi as $item){
  2835.                 $arryClassification[]['name'] =  $item;
  2836.             }
  2837.         }
  2838.         if($SPVNotMultipleTabProject &&  !$classificationTabProject){
  2839.             $projects = $this->em->getRepository(Project::class)->getProjectsBySpvs($SPVNotMultipleTabProject);
  2840.             foreach ($projects as $item){
  2841.                 $arryProject[] =  $item;
  2842.             }
  2843.         }else{
  2844.             foreach ($classificationTabProject as $item){
  2845.                 $project = $this->em->getRepository(Project::class)->find($item);
  2846.                 $arryProject[] =  $project;
  2847.             }
  2848.         }
  2849.         foreach ($arryClassification as $i => $value){
  2850.             $tabGlobal[$i]['name'] = $value['name'];
  2851.             $totalClassification = 0;
  2852.             foreach ($arryProject as $item){
  2853.                 $facturesProject = $this->em->getRepository(ProjectFactureFinance::class)->getFacturesClassification($value['name'],$item->getId(),$dateKpi1,$dateKpi2);
  2854.                 $totalClassificationProject = 0;
  2855.                 if($facturesProject){
  2856.                     foreach ($facturesProject as $factureProject){
  2857.                         $totalClassificationProject += $factureProject->getMontantTtc();
  2858.                     }
  2859.                 }
  2860.                 $tabGlobal[$i]['projectMontant'][] = $totalClassificationProject;
  2861.                 $totalClassification += $totalClassificationProject;
  2862.             }
  2863.             $tabGlobal[$i]['montantTotal'] = $totalClassification;
  2864.         }
  2865.         foreach ($tabGlobal as $tabGlobalItem){
  2866.             if(isset($tabGlobalItem['projectMontant'])) {
  2867.                 foreach ($tabGlobalItem['projectMontant'] as $key => $tabGlobalItemProjectMontant) {
  2868.                     if (!isset($tabGlobalTotal[$key])) {
  2869.                         $tabGlobalTotal[$key] = 0;
  2870.                     }
  2871.                     $tabGlobalTotal[$key] += $tabGlobalItemProjectMontant;
  2872.                 }
  2873.             }
  2874.         }
  2875.         return [
  2876.             'arryProject'=>$arryProject ,
  2877.             'tabGlobal'=>$tabGlobal ,
  2878.             'tabGlobalTotal'=>$tabGlobalTotal
  2879.         ];
  2880.     }
  2881.     public function getPorjectBySpv($request)
  2882.     {
  2883.         $spvProjects = $request->get('spvProjects');
  2884.         $projects = $this->em->getRepository(Project::class)->getProjectsBySpvs($spvProjects);
  2885.         return $projects;
  2886.     }
  2887.     public function getFacturesToken($token){
  2888.         $facture = $this->em->getRepository(FactureFinance::class)->findBy(['token'=>$token]);
  2889.         return $facture;
  2890.     }
  2891.     public function addStyleToCellDate($cell,$row,$string,$spreadsheet){
  2892.         if($string && is_object($string)){
  2893.             $spreadsheet->getActiveSheet()->setCellValue($cell.$row,Date::PHPToExcel($string->format('d/m/Y')) );
  2894.             $spreadsheet->getActiveSheet()->getStyle($cell.$row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);
  2895.         }else{
  2896.             $spreadsheet->getActiveSheet()->setCellValue($cell.$row,'-' );
  2897.         }
  2898.         return $spreadsheet;
  2899.     }
  2900.     public function extractFactures($factures,$request){
  2901.         $file= $this->params->get('zips_directory')."/extraire_factures.xlsx";
  2902.         $spreadsheet = new Spreadsheet();
  2903.         $sheet = $spreadsheet->getActiveSheet();
  2904.         // Head 2
  2905.         $tableHead2 = [
  2906.             'font'=>[
  2907.                 'color'=>[
  2908.                     'rgb'=>'0071c1'
  2909.                 ],
  2910.                 'bold'=>true,
  2911.                 'size'=>12
  2912.             ],
  2913.             'fill'=>[
  2914.                 'fillType' => Fill::FILL_SOLID,
  2915.                 'startColor' => [
  2916.                     'rgb' => 'dcebf4'
  2917.                 ]
  2918.             ],
  2919.         ];
  2920.         $sheet->setCellValue('A1',"N° de facture")
  2921.             ->setCellValue('B1',"Date de création de facture")
  2922.             ->setCellValue('C1',"Fournisseur")
  2923.             ->setCellValue('D1',"SPV")
  2924.             ->setCellValue('E1',"Développeur")
  2925.             ->setCellValue('F1',"Classification dépense")
  2926.             ->setCellValue('G1',"Taux de TVA")
  2927.             ->setCellValue('H1',"Montant TVA")
  2928.             ->setCellValue('I1',"Montant HT")
  2929.             ->setCellValue('J1',"Montant TTC")
  2930.             ->setCellValue('K1',"Délai de paiement")
  2931.             ->setCellValue('L1',"Facture url")
  2932.             ->setCellValue('M1',"Statut")
  2933.             ->setCellValue('N1',"Projet")
  2934.             ->setCellValue('O1',"Date d'émission de la facture")
  2935.             ->setCellValue('P1',"Date de paiement banque")
  2936.             ->setCellValue('Q1',"Date de validation")
  2937.             ->setCellValue('R1',"Date de demande de paiement")
  2938.             ->setCellValue('S1',"Commentaires")
  2939.             ->setCellValue('T1',"COMPTEUR ERPI PIECE");
  2940.         // Borders a2 z2
  2941.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2942.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2943.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2944.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2945.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2946.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2947.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2948.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2949.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2950.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2951.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2952.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2953.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2954.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2955.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2956.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2957.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2958.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2959.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2960.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  2961.         //width
  2962.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(17);
  2963.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  2964.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  2965.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  2966.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  2967.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  2968.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(30);
  2969.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(16);
  2970.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(20);
  2971.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  2972.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(30);
  2973.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(30);
  2974.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(50);
  2975.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(50);
  2976.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(50);
  2977.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(30);
  2978.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(30);
  2979.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(35);
  2980.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(30);
  2981.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(30);
  2982.         $spreadsheet->getActiveSheet()->getStyle('A1:T1')->applyFromArray($tableHead2);
  2983.         //loop through the data
  2984.         //current row
  2985.         $row=2;
  2986.         foreach($factures as $facture){
  2987.             $urlFacture = $facture->getFileFacture()?$facture->getFileFacture()->getPath() : null;
  2988.             $nameFacture = $facture->getFileFacture()?$facture->getFileFacture()->getNomenclature()?$facture->getFileFacture()->getNomenclature():$facture->getFileFacture()->getName():null;
  2989.             $spreadsheet->getActiveSheet()
  2990.                 ->setCellValue('A'.$row , (string)$facture->getNumeroFacture30Max())
  2991.                 ->setCellValue('C'.$row , $facture->getFournisseur()?$facture->getFournisseur()->getName():'')
  2992.                 ->setCellValue('D'.$row , $facture->getSpv()?$facture->getSpv()->getName():'')
  2993.                 ->setCellValue('E'.$row , $facture->getDeveloppeur()?$facture->getDeveloppeur()->getFirstname().' '.$facture->getDeveloppeur()->getLastname():'')
  2994.                 ->setCellValue('F'.$row , $facture->getEpc()?$facture->getEpc()->getFirstname().' '.$facture->getEpc()->getLastname():'')
  2995.                 ->setCellValue('F'.$row , $facture->getClassification())
  2996.                 ->setCellValue('G'.$row , $facture->getTauxTva()?$facture->getTauxTva().'%' : '')
  2997.                 ->setCellValue('H'.$row , $facture->getTva())
  2998.                 ->setCellValue('I'.$row , $facture->getMonatantHt())
  2999.                 ->setCellValue('J'.$row , $facture->getMonatantTtc())
  3000.             ;
  3001.             $spreadsheet = $this->addStyleToCellDate('B',$row,$facture->getCreatedAt(),$spreadsheet);
  3002.             $spreadsheet = $this->addStyleToCellDate('K',$row,$facture->getDelaiPaiementDate(),$spreadsheet);
  3003.             if($urlFacture){
  3004.                 $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  3005.                 $spreadsheet->getActiveSheet()->setCellValue('L'.$row ,$nameFacture);
  3006.                 $spreadsheet->getActiveSheet()->getCell('L'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  3007.             }
  3008.             $strStatusAvoir = '';
  3009.             if($facture->getIsAvoir()){
  3010.                 $strStatusAvoir .= ' ( compensée par ';
  3011.                 if(count($facture->getAvoirFactureFinance()) == 1){
  3012.                     $strStatusAvoir .=  'un avoir ';
  3013.                 }else{
  3014.                     $strStatusAvoir .=  'plusieurs avoirs ';
  3015.                 }
  3016.                 if($facture->getMonatantRestantTtc() == 0){
  3017.                 }else{
  3018.                     $strStatusAvoir .=  'partiellement ';
  3019.                 }
  3020.                 $strStatusAvoir .= ' ) ';
  3021.             }
  3022.             $spreadsheet->getActiveSheet()->setCellValue('M'.$row , $facture->getStatusString().$strStatusAvoir);
  3023.             $projectName = '';
  3024.             if(count($facture->getProjectFactureFinance())>0){
  3025.                 $a = count($facture->getProjectFactureFinance());
  3026.                 $i = 1;
  3027.                 foreach ($facture->getProjectFactureFinance() as $item){
  3028.                     if($i == $a){
  3029.                         $projectName .= $item->getProject()->getName();
  3030.                     }else{
  3031.                         $projectName .= $item->getProject()->getName()."\n";
  3032.                     }
  3033.                     $i++;
  3034.                 }
  3035.                 $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getAlignment()->setWrapText(true);
  3036.             }
  3037.             $spreadsheet->getActiveSheet()->setCellValue('N'.$row , $projectName);
  3038.             $spreadsheet = $this->addStyleToCellDate('O',$row,$facture->getDateFacture(),$spreadsheet);
  3039.             $spreadsheet = $this->addStyleToCellDate('P',$row,$facture->getDatePaiement(),$spreadsheet);
  3040.             $spreadsheet = $this->addStyleToCellDate('Q',$row,$facture->getDateValidation(),$spreadsheet);
  3041.             $spreadsheet = $this->addStyleToCellDate('R',$row,$facture->getDate(),$spreadsheet);
  3042.             $commantaires = '';
  3043.             if(count($facture->getComment())>0){
  3044.                 $a = count($facture->getComment());
  3045.                 $i = 1;
  3046.                 foreach ($facture->getComment() as $item){
  3047.                     if($i == $a){
  3048.                         $commantaires .= $item->getComment();
  3049.                     }else{
  3050.                         $commantaires .= $item->getComment()."\n";
  3051.                     }
  3052.                     $i++;
  3053.                 }
  3054.                 $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getAlignment()->setWrapText(true);
  3055.             }
  3056.             $spreadsheet->getActiveSheet()->setCellValue('S'.$row , $commantaires);
  3057.             $spreadsheet->getActiveSheet()->setCellValue('T'.$row , $facture->getCompteurErpiPiece());
  3058.             //increment row
  3059.             $row++;
  3060.         }
  3061.         $firstRow=1;
  3062.         $lastRow=$row-1;
  3063.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":T".$lastRow);
  3064.         $writer = new Xlsx($spreadsheet);
  3065.         $writer->save($file);
  3066.         return $file;
  3067.     }
  3068.     public function extractFacturesAvoir($factures,$request){
  3069.         $file= $this->params->get('zips_directory')."/extraire_factures.xlsx";
  3070.         $spreadsheet = new Spreadsheet();
  3071.         $sheet = $spreadsheet->getActiveSheet();
  3072.         // Head 2
  3073.         $tableHead2 = [
  3074.             'font'=>[
  3075.                 'color'=>[
  3076.                     'rgb'=>'0071c1'
  3077.                 ],
  3078.                 'bold'=>true,
  3079.                 'size'=>12
  3080.             ],
  3081.             'fill'=>[
  3082.                 'fillType' => Fill::FILL_SOLID,
  3083.                 'startColor' => [
  3084.                     'rgb' => 'dcebf4'
  3085.                 ]
  3086.             ],
  3087.         ];
  3088.         $sheet->setCellValue('A1',"N° de facture")
  3089.             ->setCellValue('B1',"Date de création de facture")
  3090.             ->setCellValue('C1',"Fournisseur")
  3091.             ->setCellValue('D1',"SPV")
  3092.             ->setCellValue('E1',"Développeur")
  3093.             ->setCellValue('F1',"EPC")
  3094.             ->setCellValue('G1',"Classification dépense")
  3095.             ->setCellValue('H1',"Montant déduit de l’avoir")
  3096.             ->setCellValue('I1',"Montant restant à régler")
  3097.             ->setCellValue('J1',"Montant TTC")
  3098.             ->setCellValue('K1',"Délai de paiement")
  3099.             ->setCellValue('L1',"Facture url")
  3100.             ->setCellValue('M1',"Statut")
  3101.             ->setCellValue('N1',"Projet")
  3102.             ->setCellValue('O1',"Avoir(s)");
  3103.         // Borders a2 z2
  3104.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3105.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3106.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3107.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3108.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3109.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3110.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3111.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3112.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3113.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3114.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3115.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3116.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3117.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3118.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3119.         //width
  3120.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(17);
  3121.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  3122.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  3123.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  3124.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  3125.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  3126.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(30);
  3127.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(35);
  3128.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(35);
  3129.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  3130.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(20);
  3131.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(30);
  3132.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(50);
  3133.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(30);
  3134.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(60);
  3135.         $spreadsheet->getActiveSheet()->getStyle('A1:O1')->applyFromArray($tableHead2);
  3136.         //loop through the data
  3137.         //current row
  3138.         $row=2;
  3139.         foreach($factures as $facture){
  3140.             $urlFacture = $facture->getFileFacture()?$facture->getFileFacture()->getPath() : null;
  3141.             $nameFacture = $facture->getFileFacture()?$facture->getFileFacture()->getNomenclature()?$facture->getFileFacture()->getNomenclature():$facture->getFileFacture()->getName():null;
  3142.             $spreadsheet->getActiveSheet()
  3143.                 ->setCellValue('A'.$row , (string)$facture->getNumeroFacture30Max())
  3144.                 ->setCellValue('C'.$row , $facture->getFournisseur()?$facture->getFournisseur()->getName():'')
  3145.                 ->setCellValue('D'.$row , $facture->getSpv()?$facture->getSpv()->getName():'')
  3146.                 ->setCellValue('E'.$row , $facture->getDeveloppeur()?$facture->getDeveloppeur()->getFirstname().' '.$facture->getDeveloppeur()->getLastname():'')
  3147.                 ->setCellValue('F'.$row , $facture->getEpc()?$facture->getEpc()->getFirstname().' '.$facture->getEpc()->getLastname():'')
  3148.                 ->setCellValue('G'.$row , $facture->getClassification())
  3149.                 ->setCellValue('H'.$row , $facture->getMonatantAvoirTtc())
  3150.                 ->setCellValue('I'.$row , $facture->getMonatantRestantTtc())
  3151.                 ->setCellValue('J'.$row , $facture->getMonatantTtc())
  3152.             ;
  3153.             $spreadsheet = $this->addStyleToCellDate('B',$row,$facture->getCreatedAt(),$spreadsheet);
  3154.             $spreadsheet = $this->addStyleToCellDate('K',$row,$facture->getDelaiPaiementDate(),$spreadsheet);
  3155.             if($urlFacture){
  3156.                 $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  3157.                 $spreadsheet->getActiveSheet()->setCellValue('L'.$row ,$nameFacture);
  3158.                 $spreadsheet->getActiveSheet()->getCell('L'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  3159.             }
  3160.             $spreadsheet->getActiveSheet()->setCellValue('M'.$row , $facture->getStatusString());
  3161.             $projectName = '';
  3162.             if(count($facture->getProjectFactureFinance())>0){
  3163.                 $a = count($facture->getProjectFactureFinance());
  3164.                 $i = 1;
  3165.                 foreach ($facture->getProjectFactureFinance() as $item){
  3166.                     if($i == $a){
  3167.                         $projectName .= $item->getProject()->getName();
  3168.                     }else{
  3169.                         $projectName .= $item->getProject()->getName()."\n";
  3170.                     }
  3171.                     $i++;
  3172.                 }
  3173.                 $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getAlignment()->setWrapText(true);
  3174.             }
  3175.             $spreadsheet->getActiveSheet()->setCellValue('N'.$row , $projectName);
  3176.             $avoirNum = '';
  3177.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  3178.             if($avoirs){
  3179.                 $a = count($avoirs);
  3180.                 $i = 1;
  3181.                 foreach ($avoirs as $item){
  3182.                     if($i == $a){
  3183.                         $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  3184.                     }else{
  3185.                         $avoirNum .= $item->getAvoir()->getNumeroAvoir()."\n";
  3186.                     }
  3187.                     $i++;
  3188.                 }
  3189.                 $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getAlignment()->setWrapText(true);
  3190.             }
  3191.             $spreadsheet->getActiveSheet()->setCellValue('O'.$row , $avoirNum);
  3192.             //increment row
  3193.             $row++;
  3194.         }
  3195.         $firstRow=1;
  3196.         $lastRow=$row-1;
  3197.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":O".$lastRow);
  3198.         $writer = new Xlsx($spreadsheet);
  3199.         $writer->save($file);
  3200.         return $file;
  3201.     }
  3202.     public function getAvoirDispoFacture($request,$token)
  3203.     {
  3204.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  3205.         $avoirs = [];
  3206.         if($facture){
  3207.             $oldAvoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  3208.             if($oldAvoirs){
  3209.                 foreach ($oldAvoirs as $obj){
  3210.                     $avoir = $obj->getAvoir();
  3211.                     $avoir->setStatus(Avoir::STATUS_VALIDE);
  3212.                     $htAndTtc = $this->hTAndTTC($obj->getMonatantAvoirTtc(),$avoir->getTauxTva());
  3213.                     $avoir->setMonatantRestantTtc($obj->getMonatantAvoirTtc());
  3214.                     $avoir->setMonatantHt($htAndTtc['ht']);
  3215.                     $avoir->setMonatantTtc($obj->getMonatantAvoirTtc());
  3216.                     $this->em->persist($avoir);
  3217.                     $this->em->remove($obj);
  3218.                     $this->em->flush();
  3219.                 }
  3220.             }
  3221.             $fourniseur = $facture->getFournisseur();
  3222.             $spv = $facture->getSpv();
  3223.             if($fourniseur && $spv){
  3224.                 $avoirs = $this->em->getRepository(Avoir::class)->findAvoirDispo($fourniseur,$spv);
  3225.             }
  3226.         }
  3227.         return $avoirs;
  3228.     }
  3229.     public function getMontantAvoirDispoFacture($request,$token,$tokens)
  3230.     {
  3231.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  3232.         $mantantFacture = 0;
  3233.         $mantantTotalAvoir = 0;
  3234.         $mantantTotalAvoirRestant = 0;
  3235.         $mantantTotalFactureRestant = 0;
  3236.         if($facture){
  3237.             $mantantFacture = (float)(str_replace(',','.',$facture->getMonatantTtc()));
  3238.             $avoirs = $this->em->getRepository(Avoir::class)->findByTokensAndActive($tokens);
  3239.             if($avoirs){
  3240.                 foreach ($avoirs as $avoir){
  3241.                     if($avoir->getStatus() == Avoir::STATUS_AVOIR_REGULARISE_PARTIELLEMENT){
  3242.                         $mantantTotalAvoir += (float)(str_replace(',','.',$avoir->getMonatantRestantTtc()));
  3243.                     }else{
  3244.                         $mantantTotalAvoir += (float)(str_replace(',','.',$avoir->getMonatantTtc()));
  3245.                     }
  3246.                 }
  3247.             }
  3248.             if($mantantFacture >= $mantantTotalAvoir){
  3249.                 $mantantTotalAvoirRestant = 0;
  3250.                 $mantantTotalFactureRestant = $mantantFacture - $mantantTotalAvoir;
  3251.             }else{
  3252.                 $mantantTotalAvoirRestant = $mantantTotalAvoir - $mantantFacture;
  3253.                 $mantantTotalFactureRestant = 0;
  3254.             }
  3255.         }
  3256.         return [
  3257.             'mantantFacture'=> $mantantFacture,
  3258.             'mantantTotalAvoir'=> $mantantTotalAvoir,
  3259.             'mantantTotalAvoirRestant'=> $mantantTotalAvoirRestant,
  3260.             'mantantTotalFactureRestant'=> $mantantTotalFactureRestant,
  3261.         ];
  3262.     }
  3263.     public function espaceNumber($str,$chiffreApresVergule = 2){
  3264.         $formattedNumber = str_replace(',','.',$str);
  3265.         if($formattedNumber and is_numeric($formattedNumber)){
  3266.             if(strpos($formattedNumber,'.') or strpos($formattedNumber,',')){
  3267.                 if(strpos($formattedNumber,'.')){
  3268.                     $formattedNumber = number_format($formattedNumber, $chiffreApresVergule, '.', ' ');
  3269.                 }else{
  3270.                     $formattedNumber = number_format($formattedNumber, $chiffreApresVergule, ',', ' ');
  3271.                 }
  3272.             }else{
  3273.                 $formattedNumber = number_format($formattedNumber, 0, '0', ' ');
  3274.             }
  3275.         }
  3276.         return $formattedNumber;
  3277.     }
  3278.     public function addAvoirInFacture($request,$token,$tokens)
  3279.     {
  3280.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  3281.         if($facture) {
  3282.             $userCurrent = $this->security->getUser();
  3283.             $spvFacture = $facture->getSpv();
  3284.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  3285.             }else {
  3286.                 if (!$spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFactureSpv()) {
  3287.                     return [
  3288.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide la facture</p>',
  3289.                         'success' => false,
  3290.                     ];
  3291.                 }
  3292.                 if ($spvFacture->getIsPrejeance() && !$userCurrent->getIsAccesValidationFacturePrejeance()) {
  3293.                     return [
  3294.                         'messageErreur' => '<p>Vous n\'êtes pas autorisé à valide  la facture</p>',
  3295.                         'success' => false,
  3296.                     ];
  3297.                 }
  3298.             }
  3299.             $mantantData = $this->getMontantAvoirDispoFacture($request,$token,$tokens);
  3300.             $mantantTotalAvoir = $mantantData['mantantTotalAvoir'];
  3301.             $avoirs = $this->em->getRepository(Avoir::class)->findByTokensAndActive($tokens);
  3302.             $this->addAvoirs($facture ,$avoirs);
  3303.             return ['success' => false];
  3304.         }
  3305.     }
  3306.     private function addAvoirs($financeFacture ,$avoirs){
  3307.         $oldAvoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$financeFacture->getId()]);
  3308.         if($oldAvoirs){
  3309.             foreach ($oldAvoirs as $obj){
  3310.                 $avoir = $obj->getAvoir();
  3311.                 $avoir->setStatus(Avoir::STATUS_VALIDE);
  3312.                 $htAndTtc = $this->hTAndTTC($obj->getMonatantAvoirTtc(),$avoir->getTauxTva());
  3313.                 $avoir->setMonatantRestantTtc($obj->getMonatantAvoirTtc());
  3314.                 $avoir->setMonatantHt($htAndTtc['ht']);
  3315.                 $avoir->setMonatantTtc($obj->getMonatantAvoirTtc());
  3316.                 $this->em->persist($avoir);
  3317.                 $this->em->remove($obj);
  3318.                 $this->em->flush();
  3319.             }
  3320.             $financeFacture->setIsAvoir(false);
  3321.             $financeFacture->setMonatantAvoirTtc('0');
  3322.             $financeFacture->setMonatantRestantTtc('0');
  3323.             $this->em->persist($financeFacture);
  3324.             $this->em->flush();
  3325.         }
  3326.         if($avoirs && $financeFacture){
  3327.             $mantantFacture = (float)(str_replace(',','.',$financeFacture->getMonatantTtc()));
  3328.             $mantantTotalAvoir = 0;
  3329.             foreach ($avoirs as $avoir){
  3330.                 if($mantantFacture > 0){
  3331.                     if($avoir->getStatus() == Avoir::STATUS_AVOIR_REGULARISE_PARTIELLEMENT){
  3332.                         $mantantAvoirTtc = (float)(str_replace(',','.',$avoir->getMonatantRestantTtc()));
  3333.                     }else{
  3334.                         $mantantAvoirTtc = (float)(str_replace(',','.',$avoir->getMonatantTtc()));
  3335.                     }
  3336.                     $mantantTotalAvoir = $mantantTotalAvoir + $mantantAvoirTtc;
  3337.                     if($mantantFacture >= $mantantAvoirTtc){
  3338.                         $mantantFacture = $mantantFacture - $mantantAvoirTtc;
  3339.                         $factureAvoir = new AvoirFactureFinance();
  3340.                         $factureAvoir->setAvoir($avoir);
  3341.                         $factureAvoir->setFinanceFacture($financeFacture);
  3342.                         if($avoir->getStatus() == Avoir::STATUS_AVOIR_REGULARISE_PARTIELLEMENT){
  3343.                             $factureAvoir->setMonatantHt('');
  3344.                             $factureAvoir->setMonatantTtc($mantantAvoirTtc);
  3345.                             $factureAvoir->setMonatantAvoirTtc($mantantAvoirTtc);
  3346.                             $factureAvoir->setTauxTva('');
  3347.                             $factureAvoir->setTva(null);
  3348.                         }else{
  3349.                             $factureAvoir->setMonatantHt((str_replace(',','.',$avoir->getMonatantHt())));
  3350.                             $factureAvoir->setMonatantTtc((str_replace(',','.',$avoir->getMonatantTtc())));
  3351.                             $factureAvoir->setMonatantAvoirTtc((str_replace(',','.',$avoir->getMonatantTtc())));
  3352.                             $factureAvoir->setTauxTva($avoir->getTauxTva());
  3353.                             $factureAvoir->setTva($avoir->getTva());
  3354.                         }
  3355.                         $this->em->persist($factureAvoir);
  3356.                         $avoir->setStatus(Avoir::STATUS_AVOIR_EN_ATTENT_REGULARISE);
  3357.                         $avoir->setMonatantRestantTtc('0');
  3358.                         $this->em->persist($avoir);
  3359.                         $this->em->flush();
  3360.                     }else{
  3361.                         $montantRestantTtc = $mantantAvoirTtc - $mantantFacture;
  3362.                         $factureAvoir = new AvoirFactureFinance();
  3363.                         $factureAvoir->setAvoir($avoir);
  3364.                         $factureAvoir->setFinanceFacture($financeFacture);
  3365.                         $factureAvoir->setMonatantTtc($mantantFacture);
  3366.                         $factureAvoir->setMonatantAvoirTtc($mantantAvoirTtc);
  3367.                         $this->em->persist($factureAvoir);
  3368.                         $avoir->setStatus(Avoir::STATUS_AVOIR_EN_ATTENT_REGULARISE);
  3369.                         $avoir->setMonatantRestantTtc($montantRestantTtc);
  3370.                         if($montantRestantTtc && $avoir->getTauxTva()){
  3371.                             $htAndTtc = $this->hTAndTTC($montantRestantTtc,$avoir->getTauxTva());
  3372.                             $avoir->setMonatantRestantTtc($montantRestantTtc);
  3373.                             $avoir->setMonatantHt($htAndTtc['ht']);
  3374.                             $avoir->setMonatantTtc($montantRestantTtc);
  3375.                             $avoir->setTva($htAndTtc['tva']);
  3376.                         }
  3377.                         $this->em->persist($avoir);
  3378.                         $this->em->flush();
  3379.                         $mantantFacture = 0;
  3380.                     }
  3381.                 }
  3382.                 $financeFacture->setIsAvoir(true);
  3383.                 $financeFacture->setMonatantAvoirTtc($mantantTotalAvoir);
  3384.                 $financeFacture->setMonatantRestantTtc($mantantFacture);
  3385.                 $this->em->persist($financeFacture);
  3386.                 $this->em->flush();
  3387.             }
  3388.         }
  3389.     }
  3390.     public function hTAndTTC($ttc,$TauxTva){
  3391.         $ht = 0;
  3392.         $tva = 0;
  3393.         if($ttc && $TauxTva){
  3394.             $ttc = (float) (str_replace(',','.',$ttc));
  3395.             $TauxTva = (float) (str_replace(',','.',$TauxTva));
  3396.             $ht = $ttc / (($TauxTva/100) + 1);
  3397.             $tva = $ttc - $ht;
  3398.         }
  3399.         return ['ht'=>$ht,'tva'=>$tva];
  3400.     }
  3401.     public function valideAvoirPaiement($financeFacture){
  3402.         $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$financeFacture->getId()]);
  3403.         if($avoirs){
  3404.             foreach ($avoirs as $avoirFacture){
  3405.                 $avoir = $avoirFacture->getAvoir();
  3406.                 if((float)$avoir->getMonatantRestantTtc() == 0){
  3407.                     $avoir->setStatus(Avoir::STATUS_AVOIR_REGULARISE);
  3408.                     $this->em->persist($avoir);
  3409.                     $this->em->flush();
  3410.                 }else{
  3411.                     $avoir->setStatus(Avoir::STATUS_AVOIR_REGULARISE_PARTIELLEMENT);
  3412.                     $this->em->persist($avoir);
  3413.                     $this->em->flush();
  3414.                 }
  3415.             }
  3416.             $nameFile = $this->createJustificatifAvoir($financeFacture);
  3417.             if($nameFile){
  3418.                 $financeFacture->setJustification($nameFile);
  3419.                 $this->em->persist($financeFacture);
  3420.                 $this->em->flush();
  3421.             }
  3422.         }
  3423.     }
  3424.     public function createJustificatifAvoir($financeFacture){
  3425.         if($financeFacture && $financeFacture->getIsAvoir()){
  3426.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$financeFacture->getId()]);
  3427.             $html = $this->twig->render('admin/facture-finance/pdf-justificatif-avoir.html.twig',['avoirs'=>$avoirs,'factureFinance'=>$financeFacture]);
  3428.             $html2pdf = new Html2Pdf('P', 'A4', 'fr', true, 'UTF-8', array('5','5','5','5'));
  3429.             $html2pdf->getSecurityService()->disableCheckAllowedHosts();
  3430.             $html2pdf->pdf->SetAuthor('Prejeace-Industrial');
  3431.             $html2pdf->pdf->SetTitle('Justificatif Avoir');
  3432.             $html2pdf->pdf->SetSubject('Justificatif Avoir');
  3433.             $html2pdf->pdf->SetKeywords('Justificatif Avoir');
  3434.             $html2pdf->pdf->SetDisplayMode('real');
  3435.             $html2pdf->WriteHTML($html);
  3436.             $nameFichier = 'Justificatif-'.time().'-'.$financeFacture->getId().'.pdf';
  3437.             $path_pdf = $this->params->get('justificatif_finance_directory').'/'.$nameFichier;
  3438.             $html2pdf->Output($path_pdf,'F');
  3439.             return $nameFichier;
  3440.         }
  3441.         return false;
  3442.     }
  3443.     public function paginateFactureCompensationPaiement($request){
  3444.         $length = $request->get('length');
  3445.         $length = $length && ($length!=-1)?$length:0;
  3446.         $start = $request->get('start');
  3447.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  3448.         $column =  $search = $request->get('columns');
  3449.         $order = $request->get('order')[0];
  3450.         $columnOrder = $order['column'];
  3451.         $dirOrder = $order['dir'];
  3452.         $columNameOrder = $column[$columnOrder]['data'];
  3453.         $search = $request->get('search');
  3454.         $spv = $request->get('spv');
  3455.         $fournisseur = $request->get('fournisseur');
  3456.         $searchTabDate = $request->get('searchTabDate');
  3457.         $filters = [
  3458.             'query' => trim(@$search['value']),
  3459.             'spv' => $spv,
  3460.             'isAvoir' => 1,
  3461.             'fournisseur' => $fournisseur,
  3462.             'searchTabDate' => $searchTabDate,
  3463.         ];
  3464.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  3465.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  3466.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters, null, null, true,$columNameOrder, $dirOrder,true);
  3467.         $output = array(
  3468.             'data' => array(),
  3469.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  3470.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  3471.         );
  3472.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  3473.         foreach ($factureFinances as $factureFinance) {
  3474.             $action =
  3475.                 $this->twig->render(
  3476.                     'admin/facture-finance/default/bouton-compensation.html.twig', array(
  3477.                     'factureFinance' => $factureFinance
  3478.                 ));
  3479.             $action2 =
  3480.                 $this->twig->render(
  3481.                     'admin/facture-finance/default/select-compensation.html.twig', array(
  3482.                     'factureFinance' => $factureFinance
  3483.                 ));
  3484.             $avoirsList =
  3485.                 $this->twig->render(
  3486.                     'admin/facture-finance/default/avoirStrByFacture.html.twig', array(
  3487.                     'avoirs' => $this->getAvoirsFacture($factureFinance)
  3488.                 ));
  3489.             $monatantAvoirTtc = 0;
  3490.             if((!is_null($factureFinance->getMonatantAvoirTtc()) && !is_null($factureFinance->getMonatantTtc())) ){
  3491.                 if($factureFinance->getMonatantAvoirTtc() > $factureFinance->getMonatantTtc() ){
  3492.                     $monatantAvoirTtc = $factureFinance->getMonatantTtc();
  3493.                 }else{
  3494.                     $monatantAvoirTtc = $factureFinance->getMonatantAvoirTtc();
  3495.                 }
  3496.             }
  3497.             $output['data'][] = [
  3498.                 'responsive_id' => '',
  3499.                 'id' => $factureFinance->getId(),
  3500.                 'numeroFacture' => $factureFinance->getNumeroFacture30Max(),
  3501.                 'monatantTtc' => $factureFinance->getMonatantTtc() ? $this->espaceNumber($factureFinance->getMonatantTtc()).'€' : '0€',
  3502.                 'date' => $factureFinance->getDate() ? $factureFinance->getDate()->format('d/m/Y') : '',
  3503.                 'monatantAvoirTtc' => $this->espaceNumber($monatantAvoirTtc).'€',
  3504.                 'monatantRestantTtc' => $factureFinance->getMonatantRestantTtc() ? $this->espaceNumber($factureFinance->getMonatantRestantTtc()).'€' : '0€',
  3505.                 'avoirsList' => $avoirsList,
  3506.                 'action' => $action,
  3507.                 'action2' => $action2
  3508.             ];
  3509.         }
  3510.         return $output;
  3511.     }
  3512.     private function getAvoirsFacture($facture){
  3513.         $avoirs = null;
  3514.         if($facture && $facture->getIsAvoir()){
  3515.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  3516.         }
  3517.         return $avoirs;
  3518.     }
  3519.     public function supprimeFacture($request,$token)
  3520.     {
  3521.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  3522.         if($facture){
  3523.             $facture->setIsArchived(true);
  3524.             $facture->setNumeroFacture( $facture->getNumeroFacture().'----');
  3525.             $this->em->persist($facture);
  3526.             $this->em->flush();
  3527.             return [
  3528.                 'success' => true,
  3529.                 'factureFinance' => $facture
  3530.             ];
  3531.         }
  3532.         return [
  3533.             'success' => false,
  3534.         ];
  3535.     }
  3536.     public function getFilesPaiement(){
  3537.         $ftp_server = "ftpbank8.exalog.net";
  3538.         $ftp_username = "6e545e1b-01";
  3539.         $ftp_userpass = "]dQQxbkC99ENFi{N]$]E";
  3540.         $path ="/success_recept";
  3541.         $ftp_conn = ftp_ssl_connect($ftp_server,7021) or die("Could not connect to $ftp_server");
  3542.         $login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
  3543.         ftp_pasv($ftp_conn, true) or die("Cannot switch to passive mode");
  3544.         $contents = ftp_mlsd($ftp_conn, $path);
  3545.         $results = array();
  3546.         foreach ($contents as $content) {
  3547.             $results[] = array('name' => $content['name'], 'timestamp' => $content['modify']);
  3548.         }
  3549.         usort($results, function($a, $b) { return $b['timestamp'] - $a['timestamp']; });
  3550.         if($results){
  3551.             foreach ($results as $result){
  3552.                 $name = $result['name'];
  3553.                 $timestamp = $result['timestamp'];
  3554.                 $datetimeModify = new \DateTime($timestamp);
  3555.                 $dateNow = new \DateTime();
  3556.                 $dateNow->modify('-15 days');
  3557.                 $namePos = strpos($name, '.txt');
  3558.                 if($datetimeModify > $dateNow && $namePos !== false){
  3559.                     $local_file = $this->params->get('facture_finance_directory') . "/releve/".$name;
  3560.                     $server_file = 'success_recept/'.$name;
  3561.                     if (ftp_get($ftp_conn, $local_file, $server_file, FTP_BINARY)) {
  3562.                         $factures = $this->em->getRepository(FactureFinance::class)->getFacturesValide();
  3563.                         foreach ($factures as $facture){
  3564.                             $totalEcheaceTtc = $this->getEcheanceTtc($facture->getSpv()?$facture->getSpv()->getId():null,$facture->getDateValidation()->format('Y-m-d'));
  3565.                             $totalEcheaceTtc = trim((float)$totalEcheaceTtc);
  3566.                             $totalPosPoint = strpos($totalEcheaceTtc,'.');
  3567.                             if($totalPosPoint){
  3568.                                 $totalTtc = substr($totalEcheaceTtc,0,$totalPosPoint +2);
  3569.                                 $totalTtc = str_replace('.','',$totalTtc);
  3570.                             }else{
  3571.                                 $totalTtc = $totalEcheaceTtc;
  3572.                             }
  3573.                             if($totalTtc > 0){
  3574.                                 $lines = file($local_file);
  3575.                                 foreach ($lines as $line)
  3576.                                 {
  3577.                                     $findStringPos = strpos($line, $totalTtc);
  3578.                                     $findStringPos2 = strpos($line, 'REM VIR SEPA DU');
  3579.                                     if ($findStringPos !== false && $findStringPos2 !== false) {
  3580.                                         $explodeLine = explode(' ',rtrim(substr($line, 0, -2)));
  3581.                                         $lineTotalPrix = $explodeLine[count($explodeLine)-1];
  3582.                                         $lineTotalPrixPos = strpos($lineTotalPrix, $totalTtc);
  3583.                                         if($lineTotalPrixPos !== false){
  3584.                                             $findStringTab = substr($line, $findStringPos2 + 16,8);
  3585.                                             if($findStringTab){
  3586.                                                 $tabString = explode('/',trim($findStringTab));
  3587.                                                 $d = isset($tabString[0])?$tabString[0]:null;
  3588.                                                 $m = isset($tabString[1])?$tabString[1]:null;
  3589.                                                 $y = isset($tabString[2])?$tabString[2]:null;
  3590.                                                 if($y && $m && $d && (strlen($d) == 2) && (strlen($m) == 2) && (strlen($y) == 2)){
  3591.                                                     $date = \DateTime::createFromFormat('d/m/Y', $d.'/'.$m.'/'.'20'.$y );
  3592.                                                     if($date){
  3593.                                                         $dateMoin12J = new \DateTime($date->format('Y-m-d'));
  3594.                                                         $dateMoin12J->modify('-11 days');
  3595.                                                         if(($date > $facture->getDateValidation()) && ($facture->getDateValidation() > $dateMoin12J)){
  3596.                                                             if($facture->getDatePaiement()){
  3597.                                                             }else{
  3598.                                                                 $facture->setDatePaiement($date);
  3599.                                                                 $this->em->persist($facture);
  3600.                                                                 $this->em->flush();
  3601.                                                                 echo "Successfully date to facture numero ".$facture->getNumeroFacture30Max()." \n";
  3602.                                                                 break ;
  3603.                                                             }
  3604.                                                         }
  3605.                                                     }
  3606.                                                 }
  3607.                                             }
  3608.                                         }
  3609.                                     }
  3610.                                 }
  3611.                             }
  3612.                         }
  3613.                         echo "Successfully written to $local_file\n";
  3614.                     } else {
  3615.                         echo "There was a problem\n";
  3616.                     }
  3617.                 }
  3618.             }
  3619.         }
  3620.         ftp_close($ftp_conn);
  3621.     }
  3622.     public function extractFacturesAvoirsProject($arrays,$request=null){
  3623.         $file= $this->params->get('zips_directory')."/extraire_factures.xlsx";
  3624.         $spreadsheet = new Spreadsheet();
  3625.         $sheet = $spreadsheet->getActiveSheet();
  3626.         // Head 2
  3627.         $tableHead2 = [
  3628.             'font'=>[
  3629.                 'color'=>[
  3630.                     'rgb'=>'ffffff'
  3631.                 ],
  3632.                 'bold'=>true,
  3633.                 'size'=>12
  3634.             ],
  3635.             'fill'=>[
  3636.                 'fillType' => Fill::FILL_SOLID,
  3637.                 'startColor' => [
  3638.                     'rgb' => '002060'
  3639.                 ]
  3640.             ],
  3641.         ];
  3642.         $tableRand = [
  3643.             'fill'=>[
  3644.                 'fillType' => Fill::FILL_SOLID,
  3645.                 'startColor' => [
  3646.                     'rgb' => 'C8D6EE'
  3647.                 ]
  3648.             ],
  3649.         ];
  3650.         $sheet->setCellValue('A1',"Element")
  3651.             ->setCellValue('B1',"Mois")
  3652.             ->setCellValue('C1',"Date Facture")
  3653.             ->setCellValue('D1',"Libellé - Référence")
  3654.             ->setCellValue('E1',"Société facturée")
  3655.             ->setCellValue('F1',"Emetteur de la Facture")
  3656.             ->setCellValue('G1',"Projet homogénéisé")
  3657.             ->setCellValue('H1',"Motif homogénéisé")
  3658.             ->setCellValue('I1',"Type dépense / revenu")
  3659.             ->setCellValue('J1',"Total Facture")
  3660.             ->setCellValue('K1',"Montant TTC")
  3661.             ->setCellValue('L1',"Montant HT")
  3662.             ->setCellValue('M1',"TVA")
  3663.             ->setCellValue('N1',"Échéance TTC")
  3664.             ->setCellValue('O1',"Lettrage")
  3665.             ->setCellValue('P1',"Date paiement")
  3666.             ->setCellValue('Q1',"Payé par")
  3667.             ->setCellValue('R1',"Mode paiement")
  3668.             ->setCellValue('S1',"Facture url");
  3669.         // Borders a2 z2
  3670.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3671.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3672.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3673.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3674.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3675.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3676.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3677.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3678.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3679.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3680.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3681.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3682.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3683.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3684.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3685.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3686.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3687.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3688.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  3689.         //width
  3690.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(15);
  3691.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(15);
  3692.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(15);
  3693.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(17);
  3694.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(15);
  3695.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(24);
  3696.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(35);
  3697.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(30);
  3698.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(40);
  3699.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(16);
  3700.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(16);
  3701.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(16);
  3702.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(16);
  3703.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(16);
  3704.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(15);
  3705.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  3706.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  3707.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(20);
  3708.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(40);
  3709.         $spreadsheet->getActiveSheet()->getStyle('A1:S1')->applyFromArray($tableHead2);
  3710.         //loop through the data
  3711.         //current row
  3712.         $row=2;
  3713.         foreach($arrays as $array){
  3714.             $spreadsheet->getActiveSheet()
  3715.                 ->setCellValue('A'.$row , $array['element'])
  3716.                 ->setCellValue('B'.$row , $array['mois'])
  3717.                 ->setCellValue('D'.$row , $array['reference'])
  3718.                 ->setCellValue('E'.$row , $array['societeFacture'])
  3719.                 ->setCellValue('F'.$row , $array['fourniseur'])
  3720.                 ->setCellValue('G'.$row , $array['projetHomogeneise'])
  3721.                 ->setCellValue('H'.$row , $array['motifHomogeneise'])
  3722.                 ->setCellValue('I'.$row , $array['typeDepense'])
  3723.                 ->setCellValue('J'.$row , $array['totalFactureTtc'])
  3724.                 ->setCellValue('K'.$row , $array['projetMontantTtc'])
  3725.                 ->setCellValue('L'.$row , $array['projetMontantHt'])
  3726.                 ->setCellValue('M'.$row , $array['projetMontantTva'])
  3727.                 ->setCellValue('N'.$row , $array['totalEcheaceTtc'])
  3728.                 ->setCellValue('O'.$row , $array['lettrage'])
  3729.                 ->setCellValue('Q'.$row , $array['payPar'])
  3730.                 ->setCellValue('R'.$row , $array['moyenPayement'])
  3731.             ;
  3732.             $urlFacture = $array['facture_url']?$array['facture_url']->getPath() : null;
  3733.             $nameFacture = $array['facture_url']?$array['facture_url']->getNomenclature()?$array['facture_url']->getNomenclature():$array['facture_url']->getName():null;
  3734.             if($urlFacture && $request){
  3735.                 $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  3736.                 $spreadsheet->getActiveSheet()->setCellValue('S'.$row ,$nameFacture);
  3737.                 $spreadsheet->getActiveSheet()->getCell('S'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  3738.             }
  3739.             $spreadsheet = $this->addStyleToCellDate('C',$row,$array['dateFacture'],$spreadsheet);
  3740.             $spreadsheet = $this->addStyleToCellDate('P',$row,$array['datePayementDate'],$spreadsheet);
  3741.             if($row % 2 == 0){
  3742.                 $spreadsheet->getActiveSheet()->getStyle('A'.$row.':S'.$row)->applyFromArray($tableRand);
  3743.             }
  3744.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3745.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3746.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3747.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3748.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3749.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3750.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3751.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3752.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3753.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3754.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3755.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3756.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3757.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3758.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3759.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3760.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3761.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  3762.             $row++;
  3763.         }
  3764.         $firstRow=1;
  3765.         $lastRow=$row-1;
  3766.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":S".$lastRow);
  3767.         $writer = new Xlsx($spreadsheet);
  3768.         $writer->save($file);
  3769.         return $file;
  3770.     }
  3771.     public function getEcheanceTtc($spv,$date){
  3772.         if($spv && $date) {
  3773.             $factures = $this->em->getRepository(FactureFinance::class)->getFacturesPayerParDate($spv, $date);
  3774.             $prix = 0;
  3775.             if($factures){
  3776.                 foreach ($factures as $facture){
  3777.                     if( $facture->getIsAvoir() and ($facture->getMonatantRestantTtc() > 0) ){
  3778.                         $prix += (float)str_replace(',','.',$facture->getMonatantRestantTtc());
  3779.                     }elseif ($facture->getIsAvoir() and ($facture->getMonatantRestantTtc() == 0)){
  3780.                     }
  3781.                     else{
  3782.                         $prix += (float)str_replace(',','.',$facture->getMonatantTtc());
  3783.                     }
  3784.                 }
  3785.             }
  3786.             return  $prix;
  3787.         }
  3788.         return 0 ;
  3789.     }
  3790.     public function getFacturesAvoirsProject($spvFactureAvoir=null,$date1=null,$date2=null){
  3791.         $factures = $this->em->getRepository(FactureFinance::class)->searchFacturePaiementAndValide($spvFactureAvoir,$date1,$date2);
  3792.         $arrayFactureAvoir = [];
  3793.         $h = 0;
  3794.         foreach($factures as $facture){
  3795.             $element  = 'Facture';
  3796.             $datePayementDate = null;
  3797.             $dateFacture  = $facture->getDateFacture() ? $facture->getDateFacture() : null;
  3798.             $mois  = $facture->getDateFacture() ? $facture->getDateFacture()->format("M-y") : '';
  3799.             $reference = (string)$facture->getNumeroFacture30Max();
  3800.             $societeFacture = $facture->getSpv()?$facture->getSpv()->getName():'';
  3801.             $fourniseur = $facture->getFournisseur()?$facture->getFournisseur()->getName():'';
  3802.             $motifHomogeneise = '';
  3803.             $typeDepense = $facture->getClassification();
  3804.             if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  3805.                 $totalEcheaceTtc = '/';
  3806.                 $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  3807.                 $strAvoir = '';
  3808.                 if($avoirs) {
  3809.                     foreach ($avoirs as $avoir) {
  3810.                         $strAvoir = $strAvoir.'n°'.$avoir->getAvoir()->getNumeroAvoir().' ';
  3811.                     }
  3812.                 }
  3813.                 $datePayement = 'Annulée par l\'avoir '.$strAvoir;
  3814.             }else{
  3815.                 $totalEcheaceTtc = $this->getEcheanceTtc($facture->getSpv()?$facture->getSpv()->getId():null,$facture->getDateValidation()?$facture->getDateValidation()->format('Y-m-d') : null);
  3816.                 $datePayement = null;
  3817.                if($facture->getDatePaiement()){
  3818.                    $datePayement = $facture->getDatePaiement()->format('d/m/Y')  ;
  3819.                    $datePayementDate = $facture->getDatePaiement();
  3820.                }else{
  3821.                    if($facture->getDateValidation()){
  3822.                        $datePayement = $facture->getDateValidation()->format('d/m/Y')  ;
  3823.                        $datePayementDate = $facture->getDateValidation() ;
  3824.                    }
  3825.                }
  3826.             }
  3827.             $totalFactureTtc = str_replace(',','.',$facture->getMonatantTtc());
  3828.             $lettrage = '';
  3829.             $payPar = $facture->getSpv()?$facture->getSpv()->getName():'';
  3830.             $moyenPayement = 'VIREMENT';
  3831.             if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  3832.                 $moyenPayement = 'AVOIR';
  3833.             }
  3834.             $arrayProject = [];
  3835.             $i = 0;
  3836.             if(count($facture->getProjectFactureFinance())>0){
  3837.                 foreach ($facture->getProjectFactureFinance() as $item){
  3838.                     $arrayProject[$i]['projetHomogeneise'] =  $item->getProject() ? $item->getProject()->getName() : '';
  3839.                     $arrayProject[$i]['projetMontantTtc'] = str_replace(',','.',$item->getMontantTtc());
  3840.                     $arrayProject[$i]['projetMontantHt'] = str_replace(',','.',$item->getMontantHt());
  3841.                     $arrayProject[$i]['projetMontantTva'] = str_replace(',','.','');
  3842.                     $i++;
  3843.                 }
  3844.             }else{
  3845.                 $arrayProject[$i]['projetHomogeneise'] = '';
  3846.                 $arrayProject[$i]['projetMontantTtc'] = '';
  3847.                 $arrayProject[$i]['projetMontantHt'] =  '';
  3848.                 $arrayProject[$i]['projetMontantTva'] =  '';
  3849.             }
  3850.             foreach ($arrayProject as $projectFactureAvoir){
  3851.                 $arrayFactureAvoir[$h]['element'] = $element;
  3852.                 $arrayFactureAvoir[$h]['mois'] = $mois;
  3853.                 $arrayFactureAvoir[$h]['dateFacture'] = $dateFacture;
  3854.                 $arrayFactureAvoir[$h]['reference'] = $reference;
  3855.                 $arrayFactureAvoir[$h]['societeFacture'] = $societeFacture;
  3856.                 $arrayFactureAvoir[$h]['fourniseur'] = $fourniseur;
  3857.                 $arrayFactureAvoir[$h]['projetHomogeneise'] = $projectFactureAvoir['projetHomogeneise'];
  3858.                 $arrayFactureAvoir[$h]['motifHomogeneise'] = $motifHomogeneise;
  3859.                 $arrayFactureAvoir[$h]['typeDepense'] = $typeDepense;
  3860.                 $arrayFactureAvoir[$h]['totalFactureTtc'] = $totalFactureTtc;
  3861.                 $arrayFactureAvoir[$h]['projetMontantTtc'] = $projectFactureAvoir['projetMontantTtc'] ;
  3862.                 $arrayFactureAvoir[$h]['projetMontantHt'] = $projectFactureAvoir['projetMontantHt'] ;
  3863.                 $arrayFactureAvoir[$h]['projetMontantTva'] = $projectFactureAvoir['projetMontantTva'] ;
  3864.                 $arrayFactureAvoir[$h]['totalEcheaceTtc'] = $totalEcheaceTtc;
  3865.                 $arrayFactureAvoir[$h]['lettrage'] = $lettrage;
  3866.                 $arrayFactureAvoir[$h]['datePayement'] = $datePayement;
  3867.                 $arrayFactureAvoir[$h]['datePayementDate'] = $datePayementDate;
  3868.                 $arrayFactureAvoir[$h]['payPar'] = $payPar;
  3869.                 $arrayFactureAvoir[$h]['moyenPayement'] = $moyenPayement;
  3870.                 $arrayFactureAvoir[$h]['dateValidation'] = $facture->getDateValidation() ? $facture->getDateValidation()->format('d/m/Y'):null;
  3871.                 $arrayFactureAvoir[$h]['facture_url'] = $facture->getFileFacture();
  3872.                 $h++;
  3873.             }
  3874.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  3875.             if($avoirs){
  3876.                 foreach ($avoirs as $avoir){
  3877.                     $fileAvoir = $avoir->getAvoir()->getFileAvoir();
  3878.                     $element  = 'Avoir';
  3879.                     $dateAvoir  = $avoir->getAvoir()->getDateAvoir() ? $avoir->getAvoir()->getDateAvoir() : null;
  3880.                     $mois  = $avoir->getAvoir()->getDateAvoir() ? $avoir->getAvoir()->getDateAvoir()->format("M-y") : '';
  3881.                     $reference = (string)$avoir->getAvoir()->getNumeroAvoir();
  3882.                     $fourniseur = $avoir->getAvoir()->getFournisseur()?$avoir->getAvoir()->getFournisseur()->getName():'';
  3883.                     $motifHomogeneise = '';
  3884.                     $typeDepense = $avoir->getAvoir()->getClassification();
  3885. //                    $avoirsFacture = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  3886. //                    if($avoirsFacture){
  3887. //                        $totalFactureTtc = str_replace(',','.',$avoirsFacture[0]->getMonatantAvoirTtc());
  3888. //                    }else{
  3889.                         $totalFactureTtc = str_replace(',','.',$avoir->getMonatantTtc());
  3890. //                    }
  3891.                     $datePayementDate = null;
  3892.                     $lettrage = '';
  3893.                     $payPar = $avoir->getAvoir()->getSpv()?$avoir->getAvoir()->getSpv()->getName():'';
  3894.                     $arrayProject = [];
  3895.                     if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  3896.                         $totalEcheaceTtc = '/';
  3897.                         $datePayement = 'Avoir sur la facture '.$facture->getNumeroFacture();
  3898.                     }else{
  3899.                         $totalEcheaceTtc = $this->getEcheanceTtc($facture->getSpv()?$facture->getSpv()->getId():null,$facture->getDateValidation()?$facture->getDateValidation()->format('Y-m-d') : null);
  3900.                         $datePayement = null;
  3901.                         if($facture->getDatePaiement()){
  3902.                             $datePayement = $facture->getDatePaiement()->format('d/m/Y')  ;
  3903.                             $datePayementDate = $facture->getDatePaiement() ;
  3904.                         }else{
  3905.                             if($facture->getDateValidation()){
  3906.                                 $datePayement = $facture->getDateValidation()->format('d/m/Y')  ;
  3907.                                 $datePayementDate = $facture->getDateValidation();
  3908.                             }
  3909.                         }
  3910.                     }
  3911.                     $i = 0;
  3912.                     if(count($avoir->getAvoir()->getProjectAvoir())>0){
  3913.                         foreach ($avoir->getAvoir()->getProjectAvoir() as $item){
  3914.                             $arrayProject[$i]['projetHomogeneise'] = $item->getProject() ? $item->getProject()->getName() : '';
  3915.                             $arrayProject[$i]['projetMontantTtc'] = str_replace(',','.',$item->getMontantTtc());
  3916.                             $arrayProject[$i]['projetMontantHt'] = str_replace(',','.',$item->getMontantHt());
  3917.                             $arrayProject[$i]['projetMontantTva'] = str_replace(',','.','');
  3918.                             $i++;
  3919.                         }
  3920.                     }else{
  3921.                         $arrayProject[$i]['projetHomogeneise'] = '';
  3922.                         $arrayProject[$i]['projetMontantTtc'] = '';
  3923.                         $arrayProject[$i]['projetMontantHt'] =  '';
  3924.                         $arrayProject[$i]['projetMontantTva'] =  '';
  3925.                     }
  3926.                     foreach ($arrayProject as $projectFactureAvoir){
  3927.                         $arrayFactureAvoir[$h]['element'] = $element;
  3928.                         $arrayFactureAvoir[$h]['mois'] = $mois;
  3929.                         $arrayFactureAvoir[$h]['dateFacture'] = $dateAvoir;
  3930.                         $arrayFactureAvoir[$h]['reference'] = $reference;
  3931.                         $arrayFactureAvoir[$h]['societeFacture'] = $societeFacture;
  3932.                         $arrayFactureAvoir[$h]['fourniseur'] = $fourniseur;
  3933.                         $arrayFactureAvoir[$h]['projetHomogeneise'] = $projectFactureAvoir['projetHomogeneise'];
  3934.                         $arrayFactureAvoir[$h]['motifHomogeneise'] = $motifHomogeneise;
  3935.                         $arrayFactureAvoir[$h]['typeDepense'] = $typeDepense;
  3936.                         $arrayFactureAvoir[$h]['totalFactureTtc'] = '-'.$totalFactureTtc;
  3937.                         $arrayFactureAvoir[$h]['projetMontantTtc'] = $projectFactureAvoir['projetMontantTtc'] ? '-'.$projectFactureAvoir['projetMontantTtc']: '' ;
  3938.                         $arrayFactureAvoir[$h]['projetMontantHt'] = $projectFactureAvoir['projetMontantHt'] ? '-'.$projectFactureAvoir['projetMontantHt']: '' ;
  3939.                         $arrayFactureAvoir[$h]['projetMontantTva'] = $projectFactureAvoir['projetMontantTva'] ? '-'.$projectFactureAvoir['projetMontantTva']: '' ;
  3940.                         $arrayFactureAvoir[$h]['totalEcheaceTtc'] = $totalEcheaceTtc;
  3941.                         $arrayFactureAvoir[$h]['lettrage'] = $lettrage;
  3942.                         $arrayFactureAvoir[$h]['datePayement'] = $datePayement;
  3943.                         $arrayFactureAvoir[$h]['datePayementDate'] = $datePayementDate;
  3944.                         $arrayFactureAvoir[$h]['payPar'] = $payPar;
  3945.                         $arrayFactureAvoir[$h]['moyenPayement'] = $moyenPayement;
  3946.                         $arrayFactureAvoir[$h]['dateValidation'] = $facture->getDateValidation() ? $facture->getDateValidation()->format('d/m/Y') : null;
  3947.                         $arrayFactureAvoir[$h]['facture_url'] = $fileAvoir;
  3948.                         $h++;
  3949.                     }
  3950.                 }
  3951.             }
  3952.         }
  3953.         return $arrayFactureAvoir;
  3954.     }
  3955.     /**
  3956.      * Pagination DataTable (serverSide) de la liste factures/avoirs par projet.
  3957.      * La source est le tableau construit par getFacturesAvoirsProject : la recherche,
  3958.      * le tri et la pagination sont appliqués en PHP sur ce tableau.
  3959.      * La valeur de sélection de chaque ligne est son index dans le tableau de base
  3960.      * (mêmes filtres SPV/dates), réutilisé par getFacturesAvoirsByRequestSelectAll.
  3961.      */
  3962.     public function paginateFactureAvoir($request){
  3963.         $length = $request->get('length');
  3964.         $length = ($length && $length != -1) ? (int) $length : 0;
  3965.         $start = (int) $request->get('start');
  3966.         $columns = $request->get('columns');
  3967.         $order = $request->get('order');
  3968.         $order = isset($order[0]) ? $order[0] : null;
  3969.         $search = $request->get('search');
  3970.         $query = trim((string) (isset($search['value']) ? $search['value'] : ''));
  3971.         $spvFactureAvoir = $request->get('spvFactureAvoir');
  3972.         $date1 = $request->get('date1FactureAvoir') ? \DateTime::createFromFormat('Y-m-d', $request->get('date1FactureAvoir')) : null;
  3973.         $date2 = $request->get('date2FactureAvoir') ? \DateTime::createFromFormat('Y-m-d', $request->get('date2FactureAvoir')) : null;
  3974.         $arrays = $this->getFacturesAvoirsProject($spvFactureAvoir, $date1, $date2);
  3975.         foreach ($arrays as $k => &$rowRef) {
  3976.             $rowRef['rowIndex'] = $k;
  3977.         }
  3978.         unset($rowRef);
  3979.         $recordsTotal = count($arrays);
  3980.         if ($query !== '') {
  3981.             $self = $this;
  3982.             $arrays = array_values(array_filter($arrays, function ($item) use ($self, $query) {
  3983.                 return $self->matchFactureAvoirQuery($item, $query);
  3984.             }));
  3985.         }
  3986.         $recordsFiltered = count($arrays);
  3987.         $columnName = null;
  3988.         $dirOrder = 'asc';
  3989.         if ($order && isset($columns[$order['column']]['data'])) {
  3990.             $columnName = $columns[$order['column']]['data'];
  3991.             $dirOrder = $order['dir'];
  3992.         }
  3993.         if ($columnName && !in_array($columnName, ['btnSelect', 'action'], true)) {
  3994.             $numericCols = ['totalFactureTtc', 'projetMontantTtc', 'projetMontantHt', 'projetMontantTva', 'totalEcheaceTtc'];
  3995.             usort($arrays, function ($a, $b) use ($columnName, $dirOrder, $numericCols) {
  3996.                 if ($columnName === 'dateFacture') {
  3997.                     $va = !empty($a['dateFacture']) ? $a['dateFacture']->getTimestamp() : 0;
  3998.                     $vb = !empty($b['dateFacture']) ? $b['dateFacture']->getTimestamp() : 0;
  3999.                     $cmp = $va <=> $vb;
  4000.                 } elseif ($columnName === 'datePayement') {
  4001.                     $va = !empty($a['datePayementDate']) ? $a['datePayementDate']->getTimestamp() : 0;
  4002.                     $vb = !empty($b['datePayementDate']) ? $b['datePayementDate']->getTimestamp() : 0;
  4003.                     $cmp = $va <=> $vb;
  4004.                 } elseif (in_array($columnName, $numericCols, true)) {
  4005.                     $cmp = (float) (isset($a[$columnName]) ? $a[$columnName] : 0) <=> (float) (isset($b[$columnName]) ? $b[$columnName] : 0);
  4006.                 } else {
  4007.                     $cmp = strcasecmp((string) (isset($a[$columnName]) ? $a[$columnName] : ''), (string) (isset($b[$columnName]) ? $b[$columnName] : ''));
  4008.                 }
  4009.                 return $dirOrder === 'desc' ? -$cmp : $cmp;
  4010.             });
  4011.         }
  4012.         $page = $length ? array_slice($arrays, $start, $length) : $arrays;
  4013.         $output = [
  4014.             'data' => [],
  4015.             'recordsFiltered' => $recordsFiltered,
  4016.             'recordsTotal' => $recordsTotal,
  4017.         ];
  4018.         foreach ($page as $item) {
  4019.             $output['data'][] = [
  4020.                 'responsive_id' => '',
  4021.                 'btnSelect' => '<input type="checkbox" class="selectFactureAvoirExtracted ml-1" value="' . $item['rowIndex'] . '" name="selectFactureAvoirExtracted[]">',
  4022.                 'element' => htmlspecialchars((string) $item['element']),
  4023.                 'mois' => htmlspecialchars((string) $item['mois']),
  4024.                 'dateFacture' => !empty($item['dateFacture']) ? $item['dateFacture']->format('d-m-Y') : '-',
  4025.                 'reference' => htmlspecialchars((string) $item['reference']),
  4026.                 'projetHomogeneise' => htmlspecialchars((string) $item['projetHomogeneise']),
  4027.                 'totalFactureTtc' => htmlspecialchars((string) $item['totalFactureTtc']),
  4028.                 'projetMontantTtc' => htmlspecialchars((string) $item['projetMontantTtc']),
  4029.                 'projetMontantHt' => htmlspecialchars((string) $item['projetMontantHt']),
  4030.                 'projetMontantTva' => htmlspecialchars((string) $item['projetMontantTva']),
  4031.                 'totalEcheaceTtc' => htmlspecialchars((string) $item['totalEcheaceTtc']),
  4032.                 'datePayement' => htmlspecialchars((string) $item['datePayement']),
  4033.                 'payPar' => htmlspecialchars((string) $item['payPar']),
  4034.                 'moyenPayement' => htmlspecialchars((string) $item['moyenPayement']),
  4035.                 'action' => '',
  4036.             ];
  4037.         }
  4038.         return $output;
  4039.     }
  4040.     /** Une ligne facture/avoir correspond-elle à la recherche libre du DataTable ? */
  4041.     public function matchFactureAvoirQuery(array $item, $query)
  4042.     {
  4043.         $cols = ['element', 'mois', 'reference', 'societeFacture', 'fourniseur', 'projetHomogeneise', 'typeDepense',
  4044.             'totalFactureTtc', 'projetMontantTtc', 'projetMontantHt', 'projetMontantTva', 'totalEcheaceTtc',
  4045.             'datePayement', 'payPar', 'moyenPayement'];
  4046.         foreach ($cols as $col) {
  4047.             if (isset($item[$col]) && $item[$col] !== null && stripos((string) $item[$col], $query) !== false) {
  4048.                 return true;
  4049.             }
  4050.         }
  4051.         if (!empty($item['dateFacture']) && $item['dateFacture'] instanceof \DateTimeInterface
  4052.             && strpos($item['dateFacture']->format('d-m-Y'), $query) !== false) {
  4053.             return true;
  4054.         }
  4055.         return false;
  4056.     }
  4057.     /**
  4058.      * Lignes factures/avoirs à extraire selon la requête :
  4059.      *  - selectedRows[] (indexes du tableau de base) -> uniquement ces lignes ;
  4060.      *  - sinon tout le tableau filtré (SPV/dates + recherche libre éventuelle).
  4061.      */
  4062.     public function getFacturesAvoirsByRequestSelectAll($request)
  4063.     {
  4064.         $spvFactureAvoir = $request->get('spvFactureAvoir');
  4065.         $date1 = $request->get('date1FactureAvoir') ? \DateTime::createFromFormat('Y-m-d', $request->get('date1FactureAvoir')) : null;
  4066.         $date2 = $request->get('date2FactureAvoir') ? \DateTime::createFromFormat('Y-m-d', $request->get('date2FactureAvoir')) : null;
  4067.         $arrays = $this->getFacturesAvoirsProject($spvFactureAvoir, $date1, $date2);
  4068.         $selectedRows = $request->get('selectedRows');
  4069.         if (is_array($selectedRows) && count($selectedRows) > 0) {
  4070.             $selected = [];
  4071.             foreach ($selectedRows as $idx) {
  4072.                 if (isset($arrays[(int) $idx])) {
  4073.                     $selected[] = $arrays[(int) $idx];
  4074.                 }
  4075.             }
  4076.             return $selected;
  4077.         }
  4078.         $search = $request->get('search');
  4079.         $query = trim((string) (isset($search['value']) ? $search['value'] : ''));
  4080.         if ($query !== '') {
  4081.             $self = $this;
  4082.             $arrays = array_values(array_filter($arrays, function ($item) use ($self, $query) {
  4083.                 return $self->matchFactureAvoirQuery($item, $query);
  4084.             }));
  4085.         }
  4086.         return $arrays;
  4087.     }
  4088.     public function importDatePaiement($filename)
  4089.     {
  4090.         $file = $this->params->get('uploads_directory')."/".$filename;
  4091.         $array = [];
  4092.         $f = fopen($file, "r");
  4093.         $flag = true;
  4094.         $i = 0;
  4095.         $header = [];
  4096.         while (($line = fgetcsv($f,0,";")) !== false) {
  4097.             if($flag) {
  4098.                 $header = [];
  4099.                 foreach ($line as $cell) {
  4100.                     $header[] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  4101.                 }
  4102.                 $flag = false;
  4103.                 continue;
  4104.             }
  4105.             foreach ($line as $key => $cell) {
  4106.                 $array[$i][$header[$key]] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  4107.             }
  4108.             $i++ ;
  4109.         }
  4110.         fclose($f);
  4111.         foreach ($array as &$item){
  4112.             if(isset($item['NUM DE FACTURE'])){
  4113.                 $numFacture = trim($item['NUM DE FACTURE']);
  4114.                 $nameFournisseur = trim($item['FOURNISSEUR']);
  4115.                 $fournisseur = $this->em->getRepository(Fournisseur::class)->findOneBy(['name'=>$nameFournisseur]);
  4116.                 if($fournisseur) {
  4117.                     $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['numeroFacture' => $numFacture, 'fournisseur' => $fournisseur->getId()]);
  4118.                     if ($facture) {
  4119.                         if (isset($item['DATE DE PAIEMENT']) && !empty($item['DATE DE PAIEMENT'])) {
  4120.                             $dateStr = trim($item['DATE DE PAIEMENT']);
  4121.                             $dateStrTab = explode("/", $dateStr);
  4122.                             if (isset($dateStrTab[2]) && strlen($dateStrTab[2]) == 2) {
  4123.                                 $date = \DateTime::createFromFormat('d/m/y', $item['DATE DE PAIEMENT']);
  4124.                             } else {
  4125.                                 $date = \DateTime::createFromFormat('d/m/Y', $item['DATE DE PAIEMENT']);
  4126.                             }
  4127.                             if ($date) {
  4128.                                 $facture->setDatePaiement($date);
  4129.                             }
  4130.                         }
  4131.                         $this->em->persist($facture);
  4132.                         $this->em->flush();
  4133.                         $item['action'] = 1;
  4134.                     }
  4135.                 }else{
  4136.                     $item['action'] = 0;
  4137.                 }
  4138.             }else{
  4139.                 $item['action'] = 0;
  4140.             }
  4141.         }
  4142.         return ['headerTab' => $header,'bodyTab'=>$array];
  4143.     }
  4144.     public function addComment($request,$user)
  4145.     {
  4146.         $comment = $request->get('comment');
  4147.         $token = $request->get('token');
  4148.         if($comment and $token){
  4149.             $factureFinance = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  4150.             if($factureFinance && $user){
  4151.                 $commentEntity = new CommentFactureFinance();
  4152.                 $commentEntity->setFactureFinance($factureFinance);
  4153.                 $commentEntity->setUser($user);
  4154.                 $commentEntity->setComment($comment);
  4155.                 $this->em->persist($commentEntity);
  4156.                 $this->em->flush();
  4157.                 return [
  4158.                     'commentEntity' => $commentEntity,
  4159.                     'success' => true
  4160.                 ];
  4161.             }
  4162.         }
  4163.         return [
  4164.             'success' => false
  4165.         ];
  4166.     }
  4167.     public function extractFacturesPdf($factures,$request){
  4168.         if($factures){
  4169.             $zip = new \ZipArchive();
  4170.             $zipfile = $this->params->get('zips_directory') . '/factures-pdf.zip';
  4171.             if (file_exists($zipfile)) unlink($zipfile);
  4172.             if ($zip->open($zipfile, \ZipArchive::CREATE) === TRUE) {
  4173.                 foreach ($factures as $facture) {
  4174.                     if ($facture->getFileFacture()) {
  4175.                         $token = $facture->getFileFacture()->getToken();
  4176.                         $file = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $token]);
  4177.                         $filePath = $this->params->get('uploads_directory') . "/" . $file->getPath();
  4178.                         $name = $file->getNomenclature() ? str_replace('/','-',$file->getNomenclature()) : $file->getName();
  4179.                         $zip->addFile($filePath, $name);
  4180.                     }
  4181.                 }
  4182.                 $zip->close();
  4183.                 return $zipfile;
  4184.             }
  4185.         }
  4186.         return false;
  4187.     }
  4188.     public function updateStatusValidePaye()
  4189.     {
  4190.         $factures = $this->em->getRepository(FactureFinance::class)->getFacturesValide();
  4191.         if($factures) {
  4192.             foreach ($factures as $facture){
  4193.                 if($facture->getDatePaiement()){
  4194.                     $facture->setStatus(FactureFinance::STATUS_DATE_PAIEMENT_PAYER);
  4195.                     $this->em->persist($facture);
  4196.                     $this->em->flush();
  4197.                 }
  4198.             }
  4199.         }
  4200.     }
  4201.     public function addFactureBrouillon($array){
  4202.         $tab = [];
  4203.         if($array){
  4204.             foreach ($array as $item){
  4205.                 $tokenFile = $item['tokenFile'];
  4206.                 $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  4207.                 if($docUpload){
  4208.                     $factureBrouillon = new FactureFinanceBrouillon();
  4209.                     $factureBrouillon->setFileFacture($docUpload);
  4210.                     $this->em->persist($factureBrouillon);
  4211.                     $this->em->flush();
  4212.                     $this->factureImportApi($factureBrouillon);
  4213.                     $tab[] = $factureBrouillon->getToken();
  4214.                 }
  4215.             }
  4216.         }
  4217.         return $tab;
  4218.     }
  4219.     public function addFactureBrouillonCsv($array){
  4220.         $tab = [];
  4221.         if($array){
  4222.             foreach ($array as $item){
  4223.                 $tokenFile = $item['tokenFile'];
  4224.                 $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  4225.                 if($docUpload){
  4226.                     $array = $this->getCsvRowsFromDocUpload($docUpload);
  4227.                      foreach ($array as $item){
  4228.                          $numFacture = isset($item["Numéro facture"]) ? $item["Numéro facture"] : null;
  4229.                          $spvName = isset($item['Société']) ? $item['Société'] : null;
  4230.                          $fournisseurName = isset($item['Nom fournisseur']) ? $item['Nom fournisseur'] : null;
  4231.                          $dateCreationFacture = isset($item['Date réception']) ? $item['Date réception'] : null;
  4232.                          $montantHt = isset($item['Montant HT']) ? $item['Montant HT'] : 0;
  4233.                          $montantTtc = isset($item['Montant TTC']) ? $item['Montant TTC'] : 0;
  4234.                          $montantTva = isset($item['Montant TVA']) ? $item['Montant TVA'] : null;
  4235.                          $tauxTva = isset($item['Taux TVA']) ? $item['Taux TVA'] : null;
  4236.                          $dateEcheance = isset($item['Date échéance']) ? $item['Date échéance'] : null;
  4237.                          $dateEmissionFacture = isset($item['Date facture']) ? $item['Date facture'] : null;
  4238.                          $commantaire = isset($item['Commentaires']) ? $item['Commentaires'] : null;
  4239.                          if($numFacture){
  4240.                              $factureBrouillon = new FactureFinanceBrouillon();
  4241.                              $factureBrouillon->setNumeroFacture($numFacture);
  4242.                              if($dateCreationFacture){
  4243.                                  $dateCreationFactureObject = \DateTime::createFromFormat('d/m/Y', $dateCreationFacture );
  4244.                                  $factureBrouillon->setCreatedAt($dateCreationFactureObject);
  4245.                              }
  4246.                              if($dateEcheance){
  4247.                                  $dateEcheanceObject = \DateTime::createFromFormat('d/m/Y', $dateEcheance );
  4248.                                  $factureBrouillon->setDelaiPaiementDate($dateEcheanceObject);
  4249.                                  if($dateCreationFacture){
  4250.                                      $dateCreationFactureObject = \DateTime::createFromFormat('d/m/Y', $dateCreationFacture );
  4251.                                      $interval = $dateCreationFactureObject->diff($dateEcheanceObject);
  4252.                                      $factureBrouillon->setDelaiPaiement((int)$interval->format("%a"));
  4253.                                  }
  4254.                              }
  4255.                              if($dateEmissionFacture){
  4256.                                  $dateEmissionFactureObject = \DateTime::createFromFormat('d/m/Y', $dateEmissionFacture );
  4257.                                  $factureBrouillon->setDateFacture($dateEmissionFactureObject);
  4258.                              }
  4259.                              $factureBrouillon->setTauxTva(($tauxTva !== null && $tauxTva !== '') ? $tauxTva : 20);
  4260.                              $factureBrouillon->setMonatantHt($montantHt);
  4261.                              $factureBrouillon->setMonatantTtc($montantTtc);
  4262.                              if($montantTva !== null && $montantTva !== ''){
  4263.                                  $factureBrouillon->setTva((float)str_replace(',', '.', $montantTva));
  4264.                              }else{
  4265.                                  $factureBrouillon->setTva((float)str_replace(',', '.', $montantTtc) - (float)str_replace(',', '.', $montantHt));
  4266.                              }
  4267.                              if($spvName){
  4268.                                  $spv = $this->em->getRepository(Spv::class)->findOneBy(['name' => $spvName]);
  4269.                                  if($spv){
  4270.                                      $factureBrouillon->setSpv($spv);
  4271.                                  }
  4272.                              }
  4273.                              if ($fournisseurName) {
  4274.                                  $fournisseur = $this->em->getRepository(Fournisseur::class)->findOneBy(['name' => $fournisseurName]);
  4275.                                  if($fournisseur){
  4276.                                      $factureBrouillon->setFournisseur($fournisseur);
  4277.                                  }
  4278.                              }
  4279.                              if($commantaire){
  4280.                                  $factureBrouillon->setCommentaire($commantaire);
  4281.                              }
  4282.                              $this->em->persist($factureBrouillon);
  4283.                              $this->em->flush();
  4284.                              $tab[] = $factureBrouillon->getToken();
  4285.                          }
  4286.                      }
  4287.                 }
  4288.             }
  4289.         }
  4290.         return $tab;
  4291.     }
  4292.     public function getCsvRowsFromDocUpload(DocUpload $docUpload): array
  4293.     {
  4294.         $file = $this->params->get('uploads_directory')."/".$docUpload->getPath();
  4295.         if(strpos($docUpload->getPath(), '.xlsx')){
  4296.             $spreadsheet = IOFactory::load($file);
  4297.             $writer = new Csv($spreadsheet);
  4298.             $writer->setDelimiter(';');
  4299.             $writer->setEnclosure('"');
  4300.             $writer->setSheetIndex(0);
  4301.             $fileCsv = str_replace('.xlsx','.csv',$file);
  4302.             $writer->save($fileCsv);
  4303.             $file = $fileCsv;
  4304.         }
  4305.         $array = [];
  4306.         $f = fopen($file, "r");
  4307.         $flag = true;
  4308.         $i = 0;
  4309.         $header = [];
  4310.         while (($line = fgetcsv($f,0,";")) !== false) {
  4311.             if($flag) {
  4312.                 $header = [];
  4313.                 foreach ($line as $key1 => $cell) {
  4314.                     $cell = str_replace("\xEF\xBB\xBF", '', $cell);
  4315.                     $header[] =  str_replace('"','',$this->convertCellUtf8(trim($cell)));
  4316.                 }
  4317.                 $flag = false;
  4318.                 continue;
  4319.             }
  4320.             foreach ($line as $key => $cell) {
  4321.                 $array[$i][$header[$key]]=  $this->convertCellUtf8(trim($cell));
  4322.             }
  4323.             $i++ ;
  4324.         }
  4325.         fclose($f);
  4326.         return $array;
  4327.     }
  4328.     public function parseCsvFactureFinanceRows(DocUpload $docUpload): array
  4329.     {
  4330.         $rows = [];
  4331.         $seen = [];
  4332.         foreach ($this->getCsvRowsFromDocUpload($docUpload) as $index => $item){
  4333.             if(!array_filter($item, function($v){ return $v !== null && $v !== ''; })){
  4334.                 continue;
  4335.             }
  4336.             $numFacture = isset($item["Numéro facture"]) ? $item["Numéro facture"] : null;
  4337.             $spvName = isset($item['Société']) ? $item['Société'] : null;
  4338.             $fournisseurName = isset($item['Nom fournisseur']) ? $item['Nom fournisseur'] : null;
  4339.             $dateReception = isset($item['Date réception']) ? $item['Date réception'] : null;
  4340.             $montantHt = isset($item['Montant HT']) ? $item['Montant HT'] : 0;
  4341.             $montantTtc = isset($item['Montant TTC']) ? $item['Montant TTC'] : 0;
  4342.             $montantTva = isset($item['Montant TVA']) ? $item['Montant TVA'] : null;
  4343.             $tauxTva = isset($item['Taux TVA']) ? $item['Taux TVA'] : null;
  4344.             $dateEcheance = isset($item['Date échéance']) ? $item['Date échéance'] : null;
  4345.             $dateEmissionFacture = isset($item['Date facture']) ? $item['Date facture'] : null;
  4346.             $commantaire = isset($item['Commentaires']) ? $item['Commentaires'] : null;
  4347.             $errors = [];
  4348.             $spv = null;
  4349.             $fournisseur = null;
  4350.             if(!$numFacture){
  4351.                 $errors[] = 'Numéro de facture manquant';
  4352.             }
  4353.             if($spvName){
  4354.                 $spv = $this->em->getRepository(Spv::class)->findOneBy(['name' => $spvName]);
  4355.             }
  4356.             if(!$spv){
  4357.                 $errors[] = $spvName ? 'Société "'.$spvName.'" introuvable' : 'Société manquante';
  4358.             }
  4359.             if($fournisseurName){
  4360.                 $fournisseur = $this->em->getRepository(Fournisseur::class)->findOneBy(['name' => $fournisseurName]);
  4361.             }
  4362.             if(!$fournisseur){
  4363.                 $errors[] = $fournisseurName ? 'Fournisseur "'.$fournisseurName.'" introuvable' : 'Fournisseur manquant';
  4364.             }
  4365.             $dateReceptionObject = null;
  4366.             if($dateReception){
  4367.                 $dateReceptionObject = \DateTime::createFromFormat('d/m/Y', $dateReception);
  4368.                 if(!$dateReceptionObject){
  4369.                     $errors[] = 'Date réception invalide "'.$dateReception.'"';
  4370.                 }
  4371.             }
  4372.             $dateEcheanceObject = null;
  4373.             if($dateEcheance){
  4374.                 $dateEcheanceObject = \DateTime::createFromFormat('d/m/Y', $dateEcheance);
  4375.                 if(!$dateEcheanceObject){
  4376.                     $errors[] = 'Date échéance invalide "'.$dateEcheance.'"';
  4377.                 }
  4378.             }
  4379.             $dateEmissionFactureObject = null;
  4380.             if($dateEmissionFacture){
  4381.                 $dateEmissionFactureObject = \DateTime::createFromFormat('d/m/Y', $dateEmissionFacture);
  4382.                 if(!$dateEmissionFactureObject){
  4383.                     $errors[] = 'Date facture invalide "'.$dateEmissionFacture.'"';
  4384.                 }
  4385.             }
  4386.             if($numFacture && $fournisseur){
  4387.                 $factureFinanceOld = $this->em->getRepository(FactureFinance::class)->findOneBy(['numeroFacture' => $numFacture, 'fournisseur' => $fournisseur]);
  4388.                 if($factureFinanceOld){
  4389.                     $errors[] = 'Une facture avec ce numéro existe déjà pour ce fournisseur';
  4390.                 }
  4391.                 $keySeen = $numFacture.'|'.$fournisseur->getId();
  4392.                 if(isset($seen[$keySeen])){
  4393.                     $errors[] = 'Doublon dans le fichier (ligne '.$seen[$keySeen].')';
  4394.                 }else{
  4395.                     $seen[$keySeen] = $index + 2;
  4396.                 }
  4397.             }
  4398.             $rows[] = [
  4399.                 'index' => $index,
  4400.                 'line' => $index + 2,
  4401.                 'numeroFacture' => $numFacture,
  4402.                 'spvName' => $spvName,
  4403.                 'spv' => $spv,
  4404.                 'fournisseurName' => $fournisseurName,
  4405.                 'fournisseur' => $fournisseur,
  4406.                 'dateReception' => $dateReceptionObject ?: null,
  4407.                 'dateEcheance' => $dateEcheanceObject ?: null,
  4408.                 'dateFacture' => $dateEmissionFactureObject ?: null,
  4409.                 'montantHt' => $montantHt,
  4410.                 'montantTtc' => $montantTtc,
  4411.                 'montantTva' => $montantTva,
  4412.                 'tauxTva' => $tauxTva,
  4413.                 'commentaire' => $commantaire,
  4414.                 'errors' => $errors,
  4415.             ];
  4416.         }
  4417.         return $rows;
  4418.     }
  4419.     public function importFacturesFinanceCsv($tokenCsv, $pdfTokens, $user): array
  4420.     {
  4421.         $result = ['imported' => 0, 'skipped' => []];
  4422.         $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenCsv]);
  4423.         if(!$docUpload){
  4424.             $result['error'] = 'Fichier à importer introuvable';
  4425.             return $result;
  4426.         }
  4427.         $rows = $this->parseCsvFactureFinanceRows($docUpload);
  4428.         $usedPdfTokens = [];
  4429.         foreach ($rows as $row){
  4430.             if(count($row['errors']) > 0){
  4431.                 $result['skipped'][] = ['line' => $row['line'], 'numeroFacture' => $row['numeroFacture'], 'reason' => implode(' / ', $row['errors'])];
  4432.                 continue;
  4433.             }
  4434.             $pdfToken = isset($pdfTokens[$row['index']]) ? $pdfTokens[$row['index']] : null;
  4435.             $fileFacture = null;
  4436.             if($pdfToken && !in_array($pdfToken, $usedPdfTokens)){
  4437.                 $fileFacture = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $pdfToken]);
  4438.             }
  4439.             if(!$fileFacture){
  4440.                 $result['skipped'][] = ['line' => $row['line'], 'numeroFacture' => $row['numeroFacture'], 'reason' => 'PDF de la facture manquant'];
  4441.                 continue;
  4442.             }
  4443.             $usedPdfTokens[] = $pdfToken;
  4444.             $facture = new FactureFinance();
  4445.             $facture->setNumeroFacture($row['numeroFacture']);
  4446.             if($row['dateReception']){
  4447.                 $facture->setCreatedAt($row['dateReception']);
  4448.             }
  4449.             if($row['dateEcheance']){
  4450.                 $facture->setDelaiPaiementDate($row['dateEcheance']);
  4451.                 if($row['dateReception']){
  4452.                     $interval = $row['dateReception']->diff($row['dateEcheance']);
  4453.                     $facture->setDelaiPaiement((int)$interval->format("%a"));
  4454.                 }
  4455.             }
  4456.             if($row['dateFacture']){
  4457.                 $facture->setDateFacture($row['dateFacture']);
  4458.             }
  4459.             $facture->setTauxTva(($row['tauxTva'] !== null && $row['tauxTva'] !== '') ? $row['tauxTva'] : 20);
  4460.             $facture->setMonatantHt($row['montantHt']);
  4461.             $facture->setMonatantTtc($row['montantTtc']);
  4462.             if($row['montantTva'] !== null && $row['montantTva'] !== ''){
  4463.                 $facture->setTva((float)str_replace(',', '.', $row['montantTva']));
  4464.             }else{
  4465.                 $facture->setTva((float)str_replace(',', '.', $row['montantTtc']) - (float)str_replace(',', '.', $row['montantHt']));
  4466.             }
  4467.             $facture->setSpv($row['spv']);
  4468.             $facture->setFournisseur($row['fournisseur']);
  4469.             $facture->setCategory('Facture');
  4470.             $facture->setUserCreated($user);
  4471.             $facture->setStatus(FactureFinance::STATUS_EN_ATTENT_VALIDATION);
  4472.             $this->getNomenclature($facture, $fileFacture);
  4473.             $facture->setFileFacture($fileFacture);
  4474.             $this->em->persist($facture);
  4475.             $this->em->flush();
  4476.             $this->notification->setCompteurErpiPiece($facture);
  4477.             $this->notification->setCompteurErpiEcriture($facture);
  4478.             if($row['commentaire']){
  4479.                 $commentFactureFinance = new CommentFactureFinance();
  4480.                 $commentFactureFinance->setFactureFinance($facture);
  4481.                 $commentFactureFinance->setComment($row['commentaire']);
  4482.                 $commentFactureFinance->setUser($user);
  4483.                 $this->em->persist($commentFactureFinance);
  4484.                 $this->em->flush();
  4485.             }
  4486.             $this->historyService->addHistoryFactureAvoir($user, 'Création de la facture', null, $facture);
  4487.             $result['imported']++;
  4488.         }
  4489.         return $result;
  4490.     }
  4491.     /**
  4492.      * Convertit une cellule CSV en UTF-8. Les fichiers enregistrés par Excel en
  4493.      * « CSV (séparateur : point-virgule) » sont en Windows-1252 et non en UTF-8 :
  4494.      * mb_convert_encoding avec 'auto' ne détecte pas cet encodage (accents perdus).
  4495.      */
  4496.     private function convertCellUtf8($cell)
  4497.     {
  4498.         if (mb_check_encoding($cell, 'UTF-8')) {
  4499.             return $cell;
  4500.         }
  4501.         return mb_convert_encoding($cell, 'UTF-8', 'Windows-1252');
  4502.     }
  4503.     public function getFactureBrouillonByToken($array){
  4504.         $facturesBrouillon = [];
  4505.         if($array){
  4506.             $facturesBrouillon = $this->em->getRepository(FactureFinanceBrouillon::class)->findByTokens($array);
  4507.         }
  4508.         return $facturesBrouillon;
  4509.     }
  4510.     public function factureImportApi($factureFinanceBrouillon){
  4511.         $facturePdf = $factureFinanceBrouillon->getFileFacture();
  4512.         if($facturePdf){
  4513.             $mindeeClient = new Client(self::API_KEY_MINDEE);
  4514.             $inputSource = $mindeeClient->sourceFromPath($this->params->get('uploads_directory').'/'.$facturePdf->getPath());
  4515.             $apiResponse = $mindeeClient->parse(InvoiceV4::class, $inputSource);
  4516.             if($apiResponse->document && $apiResponse->document->inference && $apiResponse->document->inference->prediction){
  4517.                 try {
  4518.                     $spvName = $apiResponse->document->inference->prediction->customerName->value;
  4519.                     $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;
  4520.                     $factureNumber = $apiResponse->document->inference->prediction->invoiceNumber->value;
  4521.                     $fournisseurName = $apiResponse->document->inference->prediction->supplierName->value;
  4522.                     $prixTtc = $apiResponse->document->inference->prediction->totalAmount->value;
  4523.                     $prixHt = $apiResponse->document->inference->prediction->totalNet->value;
  4524.                     $prixTva = $apiResponse->document->inference->prediction->totalTax->value;
  4525.                     $tva =
  4526.                     $siretFournisseur = null;
  4527.                     $sirenFournisseur = null;
  4528.                     if ($apiResponse->document->inference->prediction->supplierCompanyRegistrations) {
  4529.                         foreach ($apiResponse->document->inference->prediction->supplierCompanyRegistrations as $item) {
  4530.                             if ($item->type == 'SIREN') {
  4531.                                 $sirenFournisseur = $item->value;
  4532.                             }
  4533.                             if ($item->type == 'SIRET') {
  4534.                                 $siretFournisseur = $item->value;
  4535.                             }
  4536.                         }
  4537.                     }
  4538.                     $spv = null;
  4539.                     if ($spvName) {
  4540.                         $spv = $this->em->getRepository(Spv::class)->findOneBy(['name' => str_replace('SOCIÉTÉ ', '', $spvName)]);
  4541.                     }
  4542.                     $fourniseur = null;
  4543.                     if ($fournisseurName || $sirenFournisseur || $siretFournisseur) {
  4544.                         $fournisseurByName = null;
  4545.                         $fournisseurBySiren = null;
  4546.                         $fournisseurBySiret = null;
  4547.                         if ($fournisseurName) {
  4548.                             $fournisseurByName = $this->em->getRepository(Fournisseur::class)->findOneBy(['name' => $fournisseurName]);
  4549.                         }
  4550.                         if ($sirenFournisseur) {
  4551.                             $fournisseurBySiren = $this->em->getRepository(Fournisseur::class)->findOneBy(['siren' => number_format($sirenFournisseur, 0, ' ', ' ')]);
  4552.                         }
  4553.                         if ($siretFournisseur) {
  4554.                             $fournisseurBySiret = $this->em->getRepository(Fournisseur::class)->findOneBy(['siret' => number_format($siretFournisseur, 0, ' ', ' ')]);
  4555.                         }
  4556.                         if ($fournisseurByName) {
  4557.                             $fourniseur = $fournisseurByName;
  4558.                         } elseif ($fournisseurBySiren) {
  4559.                             $fourniseur = $fournisseurBySiren;
  4560.                         } elseif ($fournisseurBySiret) {
  4561.                             $fourniseur = $fournisseurBySiret;
  4562.                         }
  4563.                     }
  4564.                     $factureFinanceBrouillon->setNumeroFacture($factureNumber);
  4565.                     if ($spv) {
  4566.                         $factureFinanceBrouillon->setSpv($spv);
  4567.                     }
  4568.                     if ($fourniseur) {
  4569.                         $factureFinanceBrouillon->setFournisseur($fourniseur);
  4570.                     }
  4571.                     if ($factureDate) {
  4572.                         $factureFinanceBrouillon->setDateFacture($factureDate);
  4573.                     }
  4574.                     $factureFinanceBrouillon->setMonatantHt($prixHt);
  4575.                     $factureFinanceBrouillon->setTva((float)$prixTtc - (float)$prixHt);
  4576.                     $factureFinanceBrouillon->setMonatantTtc($prixTtc);
  4577.                     $factureFinanceBrouillon->setTauxTva(20);
  4578.                     $this->em->persist($factureFinanceBrouillon);
  4579.                     $this->em->flush();
  4580.                     if($factureFinanceBrouillon->getFileFacture()){
  4581.                         $this->getNomenclature($factureFinanceBrouillon,$factureFinanceBrouillon->getFileFacture());
  4582.                     }
  4583.                 }catch (\Exception $e){
  4584.                     return false;
  4585.                 }
  4586.             }
  4587.         }
  4588.     }
  4589.     public function getFacturesAvoirsProjectCommande(){
  4590.         $factures = $this->em->getRepository(FactureFinance::class)->searchFacturePaiementCommande();
  4591.         $arrayFactureAvoir = [];
  4592.         $h = 0;
  4593.         foreach($factures as $facture){
  4594.             $element  = 'Facture';
  4595.             $dateFacture  = $facture->getDateFacture() ? $facture->getDateFacture() : null;
  4596.             $mois  = $facture->getDateFacture() ? $facture->getDateFacture()->format("M-y") : '';
  4597.             $reference = (string)$facture->getNumeroFacture30Max();
  4598.             $societeFacture = $facture->getSpv()?$facture->getSpv()->getName():'';
  4599.             $fourniseur = $facture->getFournisseur()?$facture->getFournisseur()->getName():'';
  4600.             $motifHomogeneise = '';
  4601.             $typeDepense = $facture->getClassification();
  4602.             if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  4603.                 $totalEcheaceTtc = '/';
  4604.                 $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  4605.                 $strAvoir = '';
  4606.                 if($avoirs) {
  4607.                     foreach ($avoirs as $avoir) {
  4608.                         $strAvoir = $strAvoir.'n°'.$avoir->getAvoir()->getNumeroAvoir().' ';
  4609.                     }
  4610.                 }
  4611.                 $datePayement = 'Annulée par l\'avoir '.$strAvoir;
  4612.             }else{
  4613.                 $totalEcheaceTtc = $this->getEcheanceTtc($facture->getSpv()?$facture->getSpv()->getId():null,$facture->getDateValidation()?$facture->getDateValidation()->format('Y-m-d') : null);
  4614.                 $datePayement = null;
  4615.                 if($facture->getDatePaiement()){
  4616.                     $datePayement = $facture->getDatePaiement()->format('d/m/Y')  ;
  4617.                 }else{
  4618.                     if($facture->getDateValidation()){
  4619.                         $datePayement = $facture->getDateValidation()->format('d/m/Y')  ;
  4620.                     }
  4621.                 }
  4622.             }
  4623.             $totalFactureTtc = str_replace(',','.',$facture->getMonatantTtc());
  4624.             $lettrage = '';
  4625.             $payPar = $facture->getSpv()?$facture->getSpv()->getName():'';
  4626.             $moyenPayement = 'VIREMENT';
  4627.             if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  4628.                 $moyenPayement = 'AVOIR';
  4629.             }
  4630.             $arrayProject = [];
  4631.             $i = 0;
  4632.             if(count($facture->getProjectFactureFinance())>0){
  4633.                 foreach ($facture->getProjectFactureFinance() as $item){
  4634.                     $arrayProject[$i]['projetHomogeneise'] =  $item->getProject() ? $item->getProject()->getName() : '';
  4635.                     $arrayProject[$i]['projetMontantTtc'] = str_replace(',','.',$item->getMontantTtc());
  4636.                     $arrayProject[$i]['projetMontantHt'] = str_replace(',','.',$item->getMontantHt());
  4637.                     $arrayProject[$i]['projetMontantTva'] = str_replace(',','.','');
  4638.                     $i++;
  4639.                 }
  4640.             }else{
  4641.                 $arrayProject[$i]['projetHomogeneise'] = '';
  4642.                 $arrayProject[$i]['projetMontantTtc'] = '';
  4643.                 $arrayProject[$i]['projetMontantHt'] =  '';
  4644.                 $arrayProject[$i]['projetMontantTva'] =  '';
  4645.             }
  4646.             foreach ($arrayProject as $projectFactureAvoir){
  4647.                 $arrayFactureAvoir[$h]['element'] = $element;
  4648.                 $arrayFactureAvoir[$h]['mois'] = $mois;
  4649.                 $arrayFactureAvoir[$h]['dateFacture'] = $dateFacture;
  4650.                 $arrayFactureAvoir[$h]['reference'] = $reference;
  4651.                 $arrayFactureAvoir[$h]['societeFacture'] = $societeFacture;
  4652.                 $arrayFactureAvoir[$h]['fourniseur'] = $fourniseur;
  4653.                 $arrayFactureAvoir[$h]['projetHomogeneise'] = $projectFactureAvoir['projetHomogeneise'];
  4654.                 $arrayFactureAvoir[$h]['motifHomogeneise'] = $motifHomogeneise;
  4655.                 $arrayFactureAvoir[$h]['typeDepense'] = $typeDepense;
  4656.                 $arrayFactureAvoir[$h]['totalFactureTtc'] = $totalFactureTtc;
  4657.                 $arrayFactureAvoir[$h]['projetMontantTtc'] = $projectFactureAvoir['projetMontantTtc'] ;
  4658.                 $arrayFactureAvoir[$h]['projetMontantHt'] = $projectFactureAvoir['projetMontantHt'] ;
  4659.                 $arrayFactureAvoir[$h]['projetMontantTva'] = $projectFactureAvoir['projetMontantTva'] ;
  4660.                 $arrayFactureAvoir[$h]['totalEcheaceTtc'] = $totalEcheaceTtc;
  4661.                 $arrayFactureAvoir[$h]['lettrage'] = $lettrage;
  4662.                 $arrayFactureAvoir[$h]['datePayement'] = $datePayement;
  4663.                 $arrayFactureAvoir[$h]['payPar'] = $payPar;
  4664.                 $arrayFactureAvoir[$h]['moyenPayement'] = $moyenPayement;
  4665.                 $arrayFactureAvoir[$h]['dateValidation'] = $facture->getDateValidation() ? $facture->getDateValidation()->format('d/m/Y'):null;
  4666.                 $arrayFactureAvoir[$h]['facture_url'] = $facture->getFileFacture();
  4667.                 $h++;
  4668.             }
  4669.             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  4670.             if($avoirs){
  4671.                 foreach ($avoirs as $avoir){
  4672.                     $fileAvoir = $avoir->getAvoir()->getFileAvoir();
  4673.                     $element  = 'Avoir';
  4674.                     $dateAvoir  = $avoir->getAvoir()->getDateAvoir() ? $avoir->getAvoir()->getDateAvoir() : null;
  4675.                     $mois  = $avoir->getAvoir()->getDateAvoir() ? $avoir->getAvoir()->getDateAvoir()->format("M-y") : '';
  4676.                     $reference = (string)$avoir->getAvoir()->getNumeroAvoir();
  4677.                     $fourniseur = $avoir->getAvoir()->getFournisseur()?$avoir->getAvoir()->getFournisseur()->getName():'';
  4678.                     $motifHomogeneise = '';
  4679.                     $typeDepense = '';
  4680. //                    $avoirsFacture = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  4681. //                    if($avoirsFacture){
  4682. //                        $totalFactureTtc = str_replace(',','.',$avoirsFacture[0]->getMonatantAvoirTtc());
  4683. //                    }else{
  4684.                         $totalFactureTtc = str_replace(',','.',$avoir->getMonatantTtc());
  4685. //                    }
  4686.                     $lettrage = '';
  4687.                     $payPar = $avoir->getAvoir()->getSpv()?$avoir->getAvoir()->getSpv()->getName():'';
  4688.                     $arrayProject = [];
  4689.                     if(($facture->getMonatantRestantTtc() == 0) and $facture->getIsAvoir() ){
  4690.                         $totalEcheaceTtc = '/';
  4691.                         $datePayement = 'Avoir sur la facture '.$facture->getNumeroFacture();
  4692.                     }else{
  4693.                         $totalEcheaceTtc = $this->getEcheanceTtc($facture->getSpv()?$facture->getSpv()->getId():null,$facture->getDateValidation()?$facture->getDateValidation()->format('Y-m-d') : null);
  4694.                         $datePayement = null;
  4695.                         if($facture->getDatePaiement()){
  4696.                             $datePayement = $facture->getDatePaiement()->format('d/m/Y')  ;
  4697.                         }else{
  4698.                             if($facture->getDateValidation()){
  4699.                                 $datePayement = $facture->getDateValidation()->format('d/m/Y')  ;
  4700.                             }
  4701.                         }
  4702.                     }
  4703.                     $i = 0;
  4704.                     if(count($avoir->getAvoir()->getProjectAvoir())>0){
  4705.                         foreach ($avoir->getAvoir()->getProjectAvoir() as $item){
  4706.                             $arrayProject[$i]['projetHomogeneise'] = $item->getProject() ? $item->getProject()->getName() : '';
  4707.                             $arrayProject[$i]['projetMontantTtc'] = str_replace(',','.',$item->getMontantTtc());
  4708.                             $arrayProject[$i]['projetMontantHt'] = str_replace(',','.',$item->getMontantHt());
  4709.                             $arrayProject[$i]['projetMontantTva'] = str_replace(',','.','');
  4710.                             $i++;
  4711.                         }
  4712.                     }else{
  4713.                         $arrayProject[$i]['projetHomogeneise'] = '';
  4714.                         $arrayProject[$i]['projetMontantTtc'] = '';
  4715.                         $arrayProject[$i]['projetMontantHt'] =  '';
  4716.                         $arrayProject[$i]['projetMontantTva'] =  '';
  4717.                     }
  4718.                     foreach ($arrayProject as $projectFactureAvoir){
  4719.                         $arrayFactureAvoir[$h]['element'] = $element;
  4720.                         $arrayFactureAvoir[$h]['mois'] = $mois;
  4721.                         $arrayFactureAvoir[$h]['dateFacture'] = $dateAvoir;
  4722.                         $arrayFactureAvoir[$h]['reference'] = $reference;
  4723.                         $arrayFactureAvoir[$h]['societeFacture'] = $societeFacture;
  4724.                         $arrayFactureAvoir[$h]['fourniseur'] = $fourniseur;
  4725.                         $arrayFactureAvoir[$h]['projetHomogeneise'] = $projectFactureAvoir['projetHomogeneise'];
  4726.                         $arrayFactureAvoir[$h]['motifHomogeneise'] = $motifHomogeneise;
  4727.                         $arrayFactureAvoir[$h]['typeDepense'] = $typeDepense;
  4728.                         $arrayFactureAvoir[$h]['totalFactureTtc'] = '-'.$totalFactureTtc;
  4729.                         $arrayFactureAvoir[$h]['projetMontantTtc'] = $projectFactureAvoir['projetMontantTtc'] ? '-'.$projectFactureAvoir['projetMontantTtc']: '' ;
  4730.                         $arrayFactureAvoir[$h]['projetMontantHt'] = $projectFactureAvoir['projetMontantHt'] ? '-'.$projectFactureAvoir['projetMontantHt']: '' ;
  4731.                         $arrayFactureAvoir[$h]['projetMontantTva'] = $projectFactureAvoir['projetMontantTva'] ? '-'.$projectFactureAvoir['projetMontantTva']: '' ;
  4732.                         $arrayFactureAvoir[$h]['totalEcheaceTtc'] = $totalEcheaceTtc;
  4733.                         $arrayFactureAvoir[$h]['lettrage'] = $lettrage;
  4734.                         $arrayFactureAvoir[$h]['datePayement'] = $datePayement;
  4735.                         $arrayFactureAvoir[$h]['payPar'] = $payPar;
  4736.                         $arrayFactureAvoir[$h]['moyenPayement'] = $moyenPayement;
  4737.                         $arrayFactureAvoir[$h]['dateValidation'] = $facture->getDateValidation() ? $facture->getDateValidation()->format('d/m/Y') : null;
  4738.                         $arrayFactureAvoir[$h]['facture_url'] = $fileAvoir;
  4739.                         $h++;
  4740.                     }
  4741.                 }
  4742.             }
  4743.         }
  4744.         return $arrayFactureAvoir;
  4745.     }
  4746.     public function extractFacturesProjectCommande(){
  4747.         $arrays = $this->getFacturesAvoirsProjectCommande();
  4748.         $file1 = $this->extractFile1($arrays);
  4749.         $arrays2 = $projects= $this->em->getRepository(\App\Entity\Project::class)->findAll();
  4750.         $file2 = $this->extractFile2($arrays2);
  4751.         $arrays3 = $projects= $this->em->getRepository(\App\Entity\FactureFinance::class)->searchFacturePaiementIsAvoir();
  4752.         $file3 = $this->extractFile3($arrays3);
  4753.         $arrays4 = $projects= $this->em->getRepository(\App\Entity\FactureFinance::class)->searchAllFacturePaiement();
  4754.         $file3 = $this->extractFile4($arrays4);
  4755.         return $file1;
  4756.     }
  4757.     public function extractFile1($arrays){
  4758.         $file= $this->params->get('facture_finance_export_directory')."/immobilisations.xlsx";
  4759.         if(file_exists($file)){
  4760.             $filesystem = new Filesystem();
  4761.             $filesystem->remove($file);
  4762.         }
  4763.         $spreadsheet = new Spreadsheet();
  4764.         $sheet = $spreadsheet->getActiveSheet();
  4765.         // Head 2
  4766.         $tableHead2 = [
  4767.             'font'=>[
  4768.                 'color'=>[
  4769.                     'rgb'=>'ffffff'
  4770.                 ],
  4771.                 'bold'=>true,
  4772.                 'size'=>12
  4773.             ],
  4774.             'fill'=>[
  4775.                 'fillType' => Fill::FILL_SOLID,
  4776.                 'startColor' => [
  4777.                     'rgb' => '002060'
  4778.                 ]
  4779.             ],
  4780.         ];
  4781.         $tableRand = [
  4782.             'fill'=>[
  4783.                 'fillType' => Fill::FILL_SOLID,
  4784.                 'startColor' => [
  4785.                     'rgb' => 'C8D6EE'
  4786.                 ]
  4787.             ],
  4788.         ];
  4789.         $sheet->setCellValue('A1',"Element")
  4790.             ->setCellValue('B1',"Mois")
  4791.             ->setCellValue('C1',"Date Facture")
  4792.             ->setCellValue('D1',"Libellé - Référence")
  4793.             ->setCellValue('E1',"Société facturée")
  4794.             ->setCellValue('F1',"Emetteur de la Facture")
  4795.             ->setCellValue('G1',"Projet homogénéisé")
  4796.             ->setCellValue('H1',"Motif homogénéisé")
  4797.             ->setCellValue('I1',"Type dépense / revenu")
  4798.             ->setCellValue('J1',"Total Facture")
  4799.             ->setCellValue('K1',"Montant TTC")
  4800.             ->setCellValue('L1',"Montant HT")
  4801.             ->setCellValue('M1',"TVA")
  4802.             ->setCellValue('N1',"Échéance TTC")
  4803.             ->setCellValue('O1',"Lettrage")
  4804.             ->setCellValue('P1',"Date paiement")
  4805.             ->setCellValue('Q1',"Payé par")
  4806.             ->setCellValue('R1',"Mode paiement")
  4807.             ->setCellValue('S1',"Facture url");
  4808.         // Borders a2 z2
  4809.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4810.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4811.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4812.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4813.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4814.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4815.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4816.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4817.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4818.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4819.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4820.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4821.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4822.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4823.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4824.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4825.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4826.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4827.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4828.         //width
  4829.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(15);
  4830.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(15);
  4831.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(15);
  4832.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(17);
  4833.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(15);
  4834.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(24);
  4835.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(35);
  4836.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(30);
  4837.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(40);
  4838.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(16);
  4839.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(16);
  4840.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(16);
  4841.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(16);
  4842.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(16);
  4843.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(15);
  4844.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  4845.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  4846.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(20);
  4847.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(40);
  4848.         $spreadsheet->getActiveSheet()->getStyle('A1:S1')->applyFromArray($tableHead2);
  4849.         //loop through the data
  4850.         //current row
  4851.         $row=2;
  4852.         foreach($arrays as $array){
  4853.             $spreadsheet->getActiveSheet()
  4854.                 ->setCellValue('A'.$row , $array['element'])
  4855.                 ->setCellValue('B'.$row , $array['mois'])
  4856.                 ->setCellValue('D'.$row , $array['reference'])
  4857.                 ->setCellValue('E'.$row , $array['societeFacture'])
  4858.                 ->setCellValue('F'.$row , $array['fourniseur'])
  4859.                 ->setCellValue('G'.$row , $array['projetHomogeneise'])
  4860.                 ->setCellValue('H'.$row , $array['motifHomogeneise'])
  4861.                 ->setCellValue('I'.$row , $array['typeDepense'])
  4862.                 ->setCellValue('J'.$row , $array['totalFactureTtc'])
  4863.                 ->setCellValue('K'.$row , $array['projetMontantTtc'])
  4864.                 ->setCellValue('L'.$row , $array['projetMontantHt'])
  4865.                 ->setCellValue('M'.$row , $array['projetMontantTva'])
  4866.                 ->setCellValue('N'.$row , $array['totalEcheaceTtc'])
  4867.                 ->setCellValue('O'.$row , $array['lettrage'])
  4868.                 ->setCellValue('P'.$row , $array['datePayement'])
  4869.                 ->setCellValue('Q'.$row , $array['payPar'])
  4870.                 ->setCellValue('R'.$row , $array['moyenPayement'])
  4871.             ;
  4872.             $urlFacture = $array['facture_url']?$array['facture_url']->getPath() : null;
  4873.             $nameFacture = $array['facture_url']?$array['facture_url']->getNomenclature()?$array['facture_url']->getNomenclature():$array['facture_url']->getName():null;
  4874.             $context = $this->router->getContext();
  4875.             $host = $context->getHost();
  4876.             $scheme = $context->getScheme();
  4877.             $basePath = $context->getBaseUrl();
  4878.             if($urlFacture){
  4879.                 $baseurl = $scheme . '://' . $host . $basePath;
  4880.                 $spreadsheet->getActiveSheet()->setCellValue('S'.$row ,$nameFacture);
  4881.                 $spreadsheet->getActiveSheet()->getCell('S'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  4882.             }
  4883.             $spreadsheet = $this->addStyleToCellDate('C',$row,$array['dateFacture'],$spreadsheet);
  4884.             if($row % 2 == 0){
  4885.                 $spreadsheet->getActiveSheet()->getStyle('A'.$row.':S'.$row)->applyFromArray($tableRand);
  4886.             }
  4887.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4888.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4889.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4890.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4891.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4892.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4893.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4894.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4895.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4896.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4897.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4898.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4899.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4900.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4901.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4902.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4903.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4904.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4905.             $row++;
  4906.         }
  4907.         $firstRow=1;
  4908.         $lastRow=$row-1;
  4909.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":S".$lastRow);
  4910.         $writer = new Xlsx($spreadsheet);
  4911.         $writer->save($file);
  4912.         return $file;
  4913.     }
  4914.     public function extractFile2($projects){
  4915.         $file= $this->params->get('facture_finance_export_directory')."/noms_projets.xlsx";
  4916.         if(file_exists($file)){
  4917.             $filesystem = new Filesystem();
  4918.             $filesystem->remove($file);
  4919.         }
  4920.         $spreadsheet = new Spreadsheet();
  4921.         $sheet = $spreadsheet->getActiveSheet();
  4922.         // Head 2
  4923.         $tableHead2 = [
  4924.             'font'=>[
  4925.                 'color'=>[
  4926.                     'rgb'=>'ffffff'
  4927.                 ],
  4928.                 'bold'=>true,
  4929.                 'size'=>12
  4930.             ],
  4931.             'fill'=>[
  4932.                 'fillType' => Fill::FILL_SOLID,
  4933.                 'startColor' => [
  4934.                     'rgb' => '002060'
  4935.                 ]
  4936.             ],
  4937.         ];
  4938.         $tableRand = [
  4939.             'fill'=>[
  4940.                 'fillType' => Fill::FILL_SOLID,
  4941.                 'startColor' => [
  4942.                     'rgb' => 'C8D6EE'
  4943.                 ]
  4944.             ],
  4945.         ];
  4946.         $sheet->setCellValue('A1',"Projet")
  4947.             ->setCellValue('B1',"SPV")
  4948.             ->setCellValue('C1',"Statut tracker")
  4949.             ->setCellValue('D1',"Développeur")
  4950.             ->setCellValue('E1',"Capacité")
  4951.             ->setCellValue('F1',"Adresse")
  4952.             ->setCellValue('G1',"Code Postal")
  4953.             ->setCellValue('H1',"Ville")
  4954.             ->setCellValue('I1',"Nom du bailleur")
  4955.             ->setCellValue('J1',"Prénom du bailleur");
  4956.         // Borders a2 z2
  4957.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4958.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4959.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4960.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4961.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4962.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4963.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4964.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4965.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4966.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  4967.         //width
  4968.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(20);
  4969.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(20);
  4970.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(20);
  4971.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(20);
  4972.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(20);
  4973.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  4974.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  4975.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  4976.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(20);
  4977.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  4978.         $spreadsheet->getActiveSheet()->getStyle('A1:j1')->applyFromArray($tableHead2);
  4979.         //loop through the data
  4980.         //current row
  4981.         $row=2;
  4982.         foreach ($projects as $project) {
  4983.             $etap14 = $this->em->getRepository(Etap14::class)->findOneBy(['project' => $project->getId()]);
  4984.             $spreadsheet->getActiveSheet()
  4985.                 ->setCellValue('A'.$row , $project->getName())
  4986.                 ->setCellValue('B'.$row , $project->getSpv() ? $project->getSpv()->getName() : '')
  4987.                 ->setCellValue('C'.$row , $project->getStatusTrackerStr())
  4988.                 ->setCellValue('D'.$row , $project->getDeveloppeur() ? $project->getDeveloppeur()->getFirstname().' '.$project->getDeveloppeur()->getLastname() : '')
  4989.                 ->setCellValue('E'.$row , $project->getCapacite())
  4990.                 ->setCellValue('F'.$row , $etap14->getAdresseMiseEnService() ? $etap14->getAdresseMiseEnService() : $project->getAdresse())
  4991.                 ->setCellValue('G'.$row , $etap14->getCodePostalMiseEnService() ? $etap14->getCodePostalMiseEnService() : $project->getCodePostal())
  4992.                 ->setCellValue('H'.$row , $etap14->getCityMiseEnService() ? $etap14->getCityMiseEnService() : $project->getCity())
  4993.                 ->setCellValue('I'.$row , $etap14->getFirstnameProprietaire())
  4994.                 ->setCellValue('J'.$row , $etap14->getLastnameProprietaire())
  4995.             ;
  4996.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4997.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4998.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  4999.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  5000.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  5001.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  5002.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  5003.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  5004.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  5005.             $row++;
  5006.         }
  5007.         $firstRow=1;
  5008.         $lastRow=$row-1;
  5009.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":J".$lastRow);
  5010.         $writer = new Xlsx($spreadsheet);
  5011.         $writer->save($file);
  5012.         return $file;
  5013.     }
  5014.     public function extractFile3($arrays){
  5015.         $file= $this->params->get('facture_finance_export_directory')."/au_compensation.xlsx";
  5016.         if(file_exists($file)){
  5017.             $filesystem = new Filesystem();
  5018.             $filesystem->remove($file);
  5019.         }
  5020.         $spreadsheet = new Spreadsheet();
  5021.         $sheet = $spreadsheet->getActiveSheet();
  5022.         // Head 2
  5023.         $tableHead2 = [
  5024.             'font'=>[
  5025.                 'color'=>[
  5026.                     'rgb'=>'ffffff'
  5027.                 ],
  5028.                 'bold'=>true,
  5029.                 'size'=>12
  5030.             ],
  5031.             'fill'=>[
  5032.                 'fillType' => Fill::FILL_SOLID,
  5033.                 'startColor' => [
  5034.                     'rgb' => '002060'
  5035.                 ]
  5036.             ],
  5037.         ];
  5038.         $sheet->setCellValue('A1',"N° de facture")
  5039.             ->setCellValue('B1',"Avoir(s)")
  5040.             ->setCellValue('C1',"Date de création de facture")
  5041.             ->setCellValue('D1',"Fournisseur")
  5042.             ->setCellValue('E1',"SPV")
  5043.             ->setCellValue('F1',"Montant déduit de l’avoir")
  5044.             ->setCellValue('G1',"Montant restant à régler")
  5045.             ->setCellValue('H1',"Montant TTC")
  5046.             ->setCellValue('I1',"Statut")
  5047.             ->setCellValue('J1',"Projet")
  5048.             ->setCellValue('K1',"Développeur")
  5049.             ->setCellValue('L1',"Classification dépense")
  5050.             ->setCellValue('M1',"Facture url");
  5051.         // Borders a2 z2
  5052.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5053.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5054.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5055.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5056.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5057.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5058.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5059.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5060.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5061.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5062.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5063.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5064.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5065.         //width
  5066.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(20);
  5067.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(20);
  5068.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  5069.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(20);
  5070.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(20);
  5071.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  5072.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(30);
  5073.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  5074.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(20);
  5075.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(30);
  5076.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(25);
  5077.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(30);
  5078.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(50);
  5079.         $spreadsheet->getActiveSheet()->getStyle('A1:M1')->applyFromArray($tableHead2);
  5080.         //loop through the data
  5081.         //current row
  5082.         $row=2;
  5083.         foreach($arrays as $factureFinance){
  5084.             $avoirs = '';
  5085.             $avoirsTab = $this->getAvoirsFacture($factureFinance);
  5086.             if($avoirsTab){
  5087.                 $i = 1;
  5088.                 foreach ($avoirsTab as $item){
  5089.                     if($i == count($avoirsTab)){
  5090.                         $avoirs .= $item->getAvoir()->getNumeroAvoir();
  5091.                     }else{
  5092.                         $avoirs .= $item->getAvoir()->getNumeroAvoir()."\n";
  5093.                     }
  5094.                     $i++;
  5095.                 }
  5096.             }
  5097.             $monatantAvoirTtc = 0;
  5098.             if((!is_null($factureFinance->getMonatantAvoirTtc()) && !is_null($factureFinance->getMonatantTtc())) ){
  5099.                 if($factureFinance->getMonatantAvoirTtc() > $factureFinance->getMonatantTtc() ){
  5100.                     $monatantAvoirTtc = $factureFinance->getMonatantTtc();
  5101.                 }else{
  5102.                     $monatantAvoirTtc = $factureFinance->getMonatantAvoirTtc();
  5103.                 }
  5104.             }
  5105.             $projects = '';
  5106.             if(count($factureFinance->getProjectFactureFinance())>0){
  5107.                 $i = 1 ;
  5108.                 foreach ($factureFinance->getProjectFactureFinance() as $item){
  5109.                     if($i == count($factureFinance->getProjectFactureFinance())){
  5110.                         $projects .= $item->getProject() ? $item->getProject()->getName() : '';
  5111.                     }else {
  5112.                         $projects .= $item->getProject() ? $item->getProject()->getName()."\n" : '';
  5113.                     }
  5114.                     $i++;
  5115.                 }
  5116.             }
  5117.             $spreadsheet->getActiveSheet()
  5118.                 ->setCellValue('A'.$row , $factureFinance->getNumeroFacture30Max())
  5119.                 ->setCellValue('B'.$row , $avoirs)
  5120.                 ->setCellValue('D'.$row , $factureFinance->getFournisseur()?$factureFinance->getFournisseur()->getName():'')
  5121.                 ->setCellValue('E'.$row , $factureFinance->getSpv()?$factureFinance->getSpv()->getName():'')
  5122.                 ->setCellValue('F'.$row , $monatantAvoirTtc)
  5123.                 ->setCellValue('G'.$row , $factureFinance->getMonatantRestantTtc() ? $factureFinance->getMonatantRestantTtc() : '0')
  5124.                 ->setCellValue('H'.$row , $factureFinance->getMonatantTtc() ? $factureFinance->getMonatantTtc() : '0')
  5125.                 ->setCellValue('I'.$row , $factureFinance->getStatusString())
  5126.                 ->setCellValue('J'.$row , $projects)
  5127.                 ->setCellValue('K'.$row , $factureFinance->getDeveloppeur()  ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '')
  5128.                 ->setCellValue('L'.$row , $factureFinance->getClassification())
  5129.             ;
  5130.             $urlFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getPath() : null;
  5131.             $nameFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getNomenclature()?$factureFinance->getFileFacture()->getNomenclature():$factureFinance->getFileFacture()->getName():null;
  5132.             $context = $this->router->getContext();
  5133.             $host = $context->getHost();
  5134.             $scheme = $context->getScheme();
  5135.             $basePath = $context->getBaseUrl();
  5136.             if($urlFacture){
  5137.                 $baseurl = $scheme . '://' . $host . $basePath;
  5138.                 $spreadsheet->getActiveSheet()->setCellValue('M'.$row ,$nameFacture);
  5139.                 $spreadsheet->getActiveSheet()->getCell('M'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  5140.             }
  5141.             $spreadsheet = $this->addStyleToCellDate('C',$row,$factureFinance->getCreatedAt(),$spreadsheet);
  5142.             $row++;
  5143.         }
  5144.         $firstRow=1;
  5145.         $lastRow=$row-1;
  5146.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":L".$lastRow);
  5147.         $writer = new Xlsx($spreadsheet);
  5148.         $writer->save($file);
  5149.         return $file;
  5150.     }
  5151.     public function extractFile4($arrays){
  5152.         $file= $this->params->get('facture_finance_export_directory')."/template_4eme_fichier.xlsx";
  5153.         if(file_exists($file)){
  5154.             $filesystem = new Filesystem();
  5155.             $filesystem->remove($file);
  5156.         }
  5157.         $spreadsheet = new Spreadsheet();
  5158.         $sheet = $spreadsheet->getActiveSheet();
  5159.         // Head 2
  5160.         $tableHead2 = [
  5161.             'font'=>[
  5162.                 'color'=>[
  5163.                     'rgb'=>'ffffff'
  5164.                 ],
  5165.                 'bold'=>true,
  5166.                 'size'=>12
  5167.             ],
  5168.             'fill'=>[
  5169.                 'fillType' => Fill::FILL_SOLID,
  5170.                 'startColor' => [
  5171.                     'rgb' => '002060'
  5172.                 ]
  5173.             ],
  5174.         ];
  5175.         $sheet->setCellValue('A1',"N° de facture")
  5176.             ->setCellValue('B1',"Date de création de facture")
  5177.             ->setCellValue('C1',"Fournisseur")
  5178.             ->setCellValue('D1',"SPV")
  5179.             ->setCellValue('E1',"Montant TTC")
  5180.             ->setCellValue('F1',"Délai de paiement")
  5181.             ->setCellValue('G1',"Facture url")
  5182.             ->setCellValue('H1',"Statut")
  5183.             ->setCellValue('I1',"Projet")
  5184.             ->setCellValue('J1',"Date d'émission")
  5185.             ->setCellValue('K1',"Date de paiement");
  5186.         // Borders a2 z2
  5187.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5188.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5189.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5190.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5191.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5192.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5193.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5194.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5195.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5196.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5197.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  5198.         //width
  5199.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(20);
  5200.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(20);
  5201.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  5202.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(35);
  5203.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(35);
  5204.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  5205.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(40);
  5206.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(30);
  5207.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(50);
  5208.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  5209.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(20);
  5210.         $spreadsheet->getActiveSheet()->getStyle('A1:K1')->applyFromArray($tableHead2);
  5211.         //loop through the data
  5212.         //current row
  5213.         $row=2;
  5214.         foreach($arrays as $factureFinance){
  5215.             $projects = '';
  5216.             if(count($factureFinance->getProjectFactureFinance())>0){
  5217.                 $i = 1 ;
  5218.                 foreach ($factureFinance->getProjectFactureFinance() as $item){
  5219.                     if($i == count($factureFinance->getProjectFactureFinance())){
  5220.                         $projects .= $item->getProject() ? $item->getProject()->getName() : '';
  5221.                     }else {
  5222.                         $projects .= $item->getProject() ? $item->getProject()->getName()."\n" : '';
  5223.                     }
  5224.                     $i++;
  5225.                 }
  5226.             }
  5227.             $spreadsheet->getActiveSheet()
  5228.                 ->setCellValue('A'.$row , $factureFinance->getNumeroFacture30Max())
  5229.                 ->setCellValue('C'.$row , $factureFinance->getFournisseur()?$factureFinance->getFournisseur()->getName():'')
  5230.                 ->setCellValue('D'.$row , $factureFinance->getSpv()?$factureFinance->getSpv()->getName():'')
  5231.                 ->setCellValue('E'.$row , $factureFinance->getMonatantTtc() ? $factureFinance->getMonatantTtc() : '0')
  5232.                 ->setCellValue('F'.$row , $factureFinance->getDelaiPaiement())
  5233.                 ->setCellValue('H'.$row , $factureFinance->getStatusString())
  5234.                 ->setCellValue('I'.$row , $projects)
  5235.             ;
  5236.             $urlFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getPath() : null;
  5237.             $nameFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getNomenclature()?$factureFinance->getFileFacture()->getNomenclature():$factureFinance->getFileFacture()->getName():null;
  5238.             $context = $this->router->getContext();
  5239.             $host = $context->getHost();
  5240.             $scheme = $context->getScheme();
  5241.             $basePath = $context->getBaseUrl();
  5242.             if($urlFacture){
  5243.                 $baseurl = $scheme . '://' . $host . $basePath;
  5244.                 $spreadsheet->getActiveSheet()->setCellValue('G'.$row ,$nameFacture);
  5245.                 $spreadsheet->getActiveSheet()->getCell('G'.$row )->getHyperlink()->setUrl($baseurl.'/uploads/'.$urlFacture);
  5246.             }
  5247.             $spreadsheet = $this->addStyleToCellDate('B',$row,$factureFinance->getCreatedAt(),$spreadsheet);
  5248.             $spreadsheet = $this->addStyleToCellDate('J',$row,$factureFinance->getDateFacture(),$spreadsheet);
  5249.             $spreadsheet = $this->addStyleToCellDate('K',$row,$factureFinance->getDatePaiement(),$spreadsheet);
  5250.             $row++;
  5251.         }
  5252.         $firstRow=1;
  5253.         $lastRow=$row-1;
  5254.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":L".$lastRow);
  5255.         $writer = new Xlsx($spreadsheet);
  5256.         $writer->save($file);
  5257.         return $file;
  5258.     }
  5259.     public function formatTab3($arrays){
  5260.         $array = [];
  5261.             $row=0;
  5262.             foreach($arrays as $factureFinance){
  5263.                 $avoirs = '';
  5264.                 $avoirsTab = $this->getAvoirsFacture($factureFinance);
  5265.                 if($avoirsTab){
  5266.                     $i = 1;
  5267.                     foreach ($avoirsTab as $item){
  5268.                         if($i == count($avoirsTab)){
  5269.                             $avoirs .= $item->getAvoir()->getNumeroAvoir();
  5270.                         }else{
  5271.                             $avoirs .= $item->getAvoir()->getNumeroAvoir()."\n";
  5272.                         }
  5273.                         $i++;
  5274.                     }
  5275.                 }
  5276.                 $monatantAvoirTtc = 0;
  5277.                 if((!is_null($factureFinance->getMonatantAvoirTtc()) && !is_null($factureFinance->getMonatantTtc())) ){
  5278.                     if($factureFinance->getMonatantAvoirTtc() > $factureFinance->getMonatantTtc() ){
  5279.                         $monatantAvoirTtc = $factureFinance->getMonatantTtc();
  5280.                     }else{
  5281.                         $monatantAvoirTtc = $factureFinance->getMonatantAvoirTtc();
  5282.                     }
  5283.                 }
  5284.                 $projects = '';
  5285.                 if(count($factureFinance->getProjectFactureFinance())>0){
  5286.                     $i = 1 ;
  5287.                     foreach ($factureFinance->getProjectFactureFinance() as $item){
  5288.                         if($i == count($factureFinance->getProjectFactureFinance())){
  5289.                             $projects .= $item->getProject() ? $item->getProject()->getName() : '';
  5290.                         }else {
  5291.                             $projects .= $item->getProject() ? $item->getProject()->getName()."\n" : '';
  5292.                         }
  5293.                         $i++;
  5294.                     }
  5295.                 }
  5296.                 $array[$row]['facture'] = $factureFinance->getNumeroFacture30Max() ;
  5297.                 $array[$row]['avoirs'] = $avoirs;
  5298.                 $array[$row]['dateCreated'] = $factureFinance->getCreatedAt() ? $factureFinance->getCreatedAt()->format('d/m/Y') : '-' ;
  5299.                 $array[$row]['Fournisseur'] = $factureFinance->getFournisseur()?$factureFinance->getFournisseur()->getName():'' ;
  5300.                 $array[$row]['SPV'] = $factureFinance->getSpv()?$factureFinance->getSpv()->getName():'';
  5301.                 $array[$row]['montantDetuitAvoir'] = $monatantAvoirTtc ;
  5302.                 $array[$row]['montantRestantRegler'] = $factureFinance->getMonatantRestantTtc() ? $factureFinance->getMonatantRestantTtc() : '0';
  5303.                 $array[$row]['montantTtc'] =  $factureFinance->getMonatantTtc() ? $factureFinance->getMonatantTtc() : '0';
  5304.                 $array[$row]['statut'] = $factureFinance->getStatusString();
  5305.                 $array[$row]['project'] = $projects ;
  5306.                 $array[$row]['developpeur'] = $factureFinance->getDeveloppeur()  ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '' ;
  5307.                 $array[$row]['classification'] = $factureFinance->getClassification();
  5308.                 $urlFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getPath() : null;
  5309.                 $nameFacture = $factureFinance->getFileFacture()?$factureFinance->getFileFacture()->getNomenclature()?$factureFinance->getFileFacture()->getNomenclature():$factureFinance->getFileFacture()->getName():null;
  5310.                 $context = $this->router->getContext();
  5311.                 $host = $context->getHost();
  5312.                 $scheme = $context->getScheme();
  5313.                 $basePath = $context->getBaseUrl();
  5314.                 $baseurl = $scheme . '://' . $host . $basePath;
  5315.                 $array[$row]['FactureUrl'] = $urlFacture ? $baseurl.'/uploads/'.$urlFacture :'' ;
  5316.                 $array[$row]['FactureName'] = $nameFacture ;
  5317.                 $array[$row]['delaiPaiement'] = $factureFinance->getDelaiPaiement() ;
  5318.                 $array[$row]['dateEmission'] = $factureFinance->getDateFacture() ? $factureFinance->getDateFacture()->format('d/m/Y') : '-' ;
  5319.                 $array[$row]['datePaiement'] = $factureFinance->getDatePaiement() ? $factureFinance->getDatePaiement()->format('d/m/Y') : '-' ;
  5320.                 $array[$row]['montantHt'] =  $factureFinance->getMonatantHt() ? $factureFinance->getMonatantHt() : '0';
  5321.                 $array[$row]['montantTva'] =  $factureFinance->getTva() ? $factureFinance->getTva() : '0';
  5322.                 $row++;
  5323.         }
  5324.         return $array ;
  5325.     }
  5326.     public function fixedBugFactureHt(){
  5327.         $factures = $this->em->getRepository(FactureFinance::class)->findAll();
  5328.         foreach ($factures as $facture){
  5329.             if(count($facture->getProjectFactureFinance()) == 1){
  5330.                 $prixHt = $facture->getMonatantHt();
  5331.                 $prixTtc = $facture->getMonatantTtc();
  5332.                 $projectFacture = $facture->getProjectFactureFinance()[0];
  5333.                 $projectFacture->setMontantHt($prixHt);
  5334.                 $projectFacture->setMontantTtc($prixTtc);
  5335.                 $this->em->persist($projectFacture);
  5336.                 $this->em->flush();
  5337.             }
  5338.         }
  5339.     }
  5340.     public function updateSoulteAndLoyerProject(){
  5341.         $projects = $this->em->getRepository(Project::class)->findAll();
  5342.         foreach ($projects as $project){
  5343.             $etap5 = $this->em->getRepository(Etap5::class)->findOneBy(['project'=>$project->getId()]);
  5344.             if($etap5){
  5345.                 $soulteEtap5 = $etap5->getSoulteConfirme();
  5346.                 $loyerEtap5 = $etap5->getLoyerConfirme();
  5347.                 if($soulteEtap5){
  5348.                     $project->setSoulteVise($soulteEtap5) ;
  5349.                 }
  5350.                 if($loyerEtap5){
  5351.                     $project->setLoyerVise($loyerEtap5) ;
  5352.                 }
  5353.                 $this->em->persist($project);
  5354.                 $this->em->flush();
  5355.             }
  5356.         }
  5357.     }
  5358.     public function importProjectsTab($filename)
  5359.     {
  5360.         $file = $this->params->get('uploads_directory') . "/" . $filename;
  5361.         $array = [];
  5362.         $f = fopen($file, "r");
  5363.         $flag = true;
  5364.         $i = 0;
  5365.         $header = [];
  5366.         while (($line = fgetcsv($f, 0, ";")) !== false) {
  5367.             if ($flag) {
  5368.                 $header = [];
  5369.                 foreach ($line as $cell) {
  5370.                     $header[] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  5371.                 }
  5372.                 $flag = false;
  5373.                 continue;
  5374.             }
  5375.             foreach ($line as $key => $cell) {
  5376.                 $array[$i][$header[$key]] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  5377.             }
  5378.             $i++;
  5379.         }
  5380.         fclose($f);
  5381.         $arrayProject = [];
  5382.         $i = 0;
  5383.         foreach ($array as $item) {
  5384.             if (isset($item['Nom du projet'])) {
  5385.                 $nameProject = trim($item['Nom du projet']);
  5386.                 $project = $this->em->getRepository(Project::class)->findOneBy(['name' => $nameProject]);
  5387.                 if ($project) {
  5388.                     $arrayProject[$i]['project'] = $project->getName();
  5389.                     $arrayProject[$i]['projectId'] = $project->getId();
  5390.                     $arrayProject[$i]['montantHt'] = isset($item['Montant HT']) ? $item['Montant HT'] : 0;
  5391.                     $arrayProject[$i]['action'] = 1;
  5392.                 } else {
  5393.                     $arrayProject[$i]['action'] = 0;
  5394.                     $arrayProject[$i]['project'] = isset($item['Nom du projet']) ? $item['Nom du projet'] : 0;
  5395.                     $arrayProject[$i]['montantHt'] = isset($item['Montant HT']) ? $item['Montant HT'] : 0;
  5396.                 }
  5397.                 $i++;
  5398.             } else {
  5399.             }
  5400.         }
  5401.         return ['bodyTab' => $arrayProject];
  5402.     }
  5403.     public function getNomenclatureAvoir($avoir,$file){
  5404.         if(is_object($avoir) && is_object($file)){
  5405.             $numAvoir = $avoir->getNumeroAvoir()?$avoir->getNumeroAvoir():'' ;
  5406.             $nameSpv = $avoir->getSpv() ? $avoir->getSpv()->getName() : '';
  5407.             $nameFournisseur = $avoir->getFournisseur() ? $avoir->getFournisseur()->getName() : '';
  5408.             $date = $avoir->getCreatedAt() ? $avoir->getCreatedAt()->format('d/m/Y') : '';
  5409.             $montant = $avoir->getMonatantTtc() ? $avoir->getMonatantTtc().'€' : '';
  5410.             $extension = substr($file->getPath(), strrpos($file->getPath(), ".",-1) + 1);
  5411.             $nomenclature = $nameFournisseur.' - '.$nameSpv.' - '.$numAvoir.' - '.$date.' - '.$montant.'.'.$extension;
  5412.             $file->setNomenclature($nomenclature);
  5413.             $this->em->persist($file);
  5414.             $this->em->flush();
  5415.             return $nomenclature;
  5416.         }
  5417.         return false;
  5418.     }
  5419.     public function getMontantFinalTtcFacture($facture){
  5420.         $prix = 0;
  5421.         if ($facture){
  5422.             if( $facture->getIsAvoir() and ($facture->getMonatantRestantTtc() > 0) ){
  5423.                 $prix = (float)str_replace(',','.',$facture->getMonatantRestantTtc());
  5424.             }
  5425.             elseif ($facture->getIsAvoir() and ($facture->getMonatantRestantTtc() == 0)){
  5426.             }
  5427.             else{
  5428.                 $prix = (float)str_replace(',','.',$facture->getMonatantTtc());
  5429.             }
  5430.         }
  5431.         return number_format($prix,2,'.','');
  5432.     }
  5433.     public function getDataPaiementSepaDetail($request){
  5434.         $dataIds = $request->get('arrayIds');
  5435.         $prix = 0;
  5436.         $select = 0;
  5437.         if($dataIds){
  5438.             $factures = $this->em->getRepository(FactureFinance::class)->findBy(['token'=>$dataIds]);
  5439.             if($factures){
  5440.                 foreach ($factures as $facture){
  5441.                     if( $facture->getIsAvoir() and ($facture->getMonatantRestantTtc() > 0) ){
  5442.                         $prix += (float)str_replace(',','.',$facture->getMonatantRestantTtc());
  5443.                     }elseif ($facture->getIsAvoir() and ($facture->getMonatantRestantTtc() == 0)){
  5444.                     }
  5445.                     else{
  5446.                         $prix += (float)str_replace(',','.',$facture->getMonatantTtc());
  5447.                     }
  5448.                 }
  5449.                 $select = count($factures);
  5450.             }
  5451.         }
  5452.         return [
  5453.           'montant' => $this->espaceNumber($prix).'€' ,
  5454.           'select' => $select,
  5455.         ];
  5456.     }
  5457.     public function addPaiementSelect($request){
  5458.         $data = $request->get('arrayData');
  5459.         $date = $request->get('date');
  5460.         $spvId = $request->get('spvId');
  5461.         if($data && $date && $spvId){
  5462.             $spv = $this->em->getRepository(Spv::class)->find($spvId);
  5463.             $userCurrent = $this->security->getUser();
  5464.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  5465.             }else {
  5466.                 if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  5467.                     return [
  5468.                         'messageErreur' => '<p>vous n\'êtes pas autorisé à payer la facture</p>',
  5469.                     ];
  5470.                 }
  5471.             }
  5472. //            $dateNow = new \DateTime();
  5473. //            $dateNow->modify('+1 day');
  5474. //            $array = [];
  5475. //            foreach($data as $datum){
  5476. //                $datePrevuStrInit = $datum['date'];
  5477. //                $datePaiementPrevuInit = new \DateTime($datePrevuStrInit.' 23:59:59');
  5478. //                if($datePaiementPrevuInit >= $dateNow){
  5479. //                    $array[$datePrevuStrInit] = $datum;
  5480. //                }else{
  5481. //                    $array[$dateNow->format('Y-m-d')]['date'] = $dateNow->format('Y-m-d');
  5482. //                    foreach ($datum['ids'] as $id){
  5483. //                        $array[$dateNow->format('Y-m-d')]['ids'][] = $id;
  5484. //                    }
  5485. //                }
  5486. //            }
  5487.             foreach ($data as $datePrevuTab){
  5488.                 $datePrevuStr = $datePrevuTab['date'];
  5489.                 $datePaiementPrevu = new \DateTime($datePrevuStr);
  5490. //                if($datePaiementPrevu >= $dateNow){
  5491. //
  5492. //                }else{
  5493. //                    $datePaiementPrevu = $dateNow;
  5494. //                }
  5495.                 $tokensFactures = $datePrevuTab['ids'];
  5496.                 $dateValidation = new \DateTime($date);
  5497.                 $factures = $this->em->getRepository(FactureFinance::class)->findBy(['token'=>$tokensFactures]);
  5498.                 $factureFinancePaiement = $this->em->getRepository(FactureFinancePaiement::class)->findNotFichierBySpvAndDate($spv,$dateValidation,$datePaiementPrevu);
  5499.                $factureExistInDetail = [];
  5500.                 if($factureFinancePaiement){
  5501.                     $factureFinancePaiementDetails = $this->em->getRepository(FactureFinancePaiementDetail::class)->findBy(['factureFinancePaiement'=>$factureFinancePaiement->getId()]);
  5502.                     if($factureFinancePaiementDetails){
  5503.                         foreach ($factureFinancePaiementDetails as $item){
  5504.                             $factureExistInDetail[$item->getFactureFinance()->getId()] = $item->getFactureFinance()->getId();
  5505.                             $item->getFactureFinance()->setIsPaiement(0);
  5506.                             $this->em->persist($item->getFactureFinance());
  5507.                             $this->em->remove($item);
  5508.                         }
  5509.                         $this->em->flush();
  5510.                     }
  5511.                 }
  5512.                 else{
  5513.                     $factureFinancePaiement = new FactureFinancePaiement();
  5514.                     $factureFinancePaiement->setSpv($spv);
  5515.                     $factureFinancePaiement->setDatePrevu($dateValidation);
  5516.                     $factureFinancePaiement->setDatePaiementPrevu($datePaiementPrevu);
  5517.                     $this->em->persist($factureFinancePaiement);
  5518.                     $this->em->flush();
  5519.                 }
  5520.                 $this->em->refresh($factureFinancePaiement);
  5521.                 foreach ($factures as $facture){
  5522.                     if($this->checkAltareaFacture($facture)){
  5523.                     }else{
  5524.                         if($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)) {
  5525.                             $facture->setIsPaiement(FactureFinance::STATUS_PAYE_SEPA);
  5526.                             $this->em->persist($facture);
  5527.                             $factureFinancePaiementDetailNew = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance'=>$facture->getId()]);
  5528.                             $factureDetailNotExist = isset($factureExistInDetail[$facture->getId()]);
  5529.                             if(!$factureFinancePaiementDetailNew){
  5530.                                 $factureFinancePaiementDetailNew = new FactureFinancePaiementDetail();
  5531.                             }
  5532.                             $factureFinancePaiementDetailNew->setFactureFinance($facture);
  5533.                             $factureFinancePaiementDetailNew->setDatePrevu($dateValidation);
  5534.                             $factureFinancePaiementDetailNew->setFactureFinancePaiement($factureFinancePaiement);
  5535.                             $this->em->persist($factureFinancePaiementDetailNew);
  5536.                             $this->em->flush();
  5537.                             if(!$factureDetailNotExist) {
  5538.                                 $str = $this->security->getUser()->getFirstname() . ' ' . $this->security->getUser()->getLastname() . ' a validé la mise en paiement : ' . $facture->getFournisseur()->getName() . ' (' . $facture->getNumeroFacture() . ')';
  5539.                                 $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(), $str, $facture);
  5540.                             }
  5541.                         }
  5542.                     }
  5543.                 }
  5544.             }
  5545.         }
  5546.         return 1;
  5547.     }
  5548.     public function addPaiementFacture($request){
  5549.         $datePrevuStr = $request->get('datePrevuPaiement');
  5550.         $dataId = $request->get('factureId');
  5551.         $date = $request->get('date');
  5552.         $spvId = $request->get('spvId');
  5553.         if($datePrevuStr && $dataId && $date && $spvId){
  5554.             $spv = $this->em->getRepository(Spv::class)->find($spvId);
  5555.             $dateValidation = new \DateTime($date);
  5556.             $datePrevuPaiement = new \DateTime($datePrevuStr.' 23:59:59');
  5557.             $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$dataId]);
  5558.             $userCurrent = $this->security->getUser();
  5559.             if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  5560.             }else {
  5561.                 if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  5562.                     return [
  5563.                         'messageErreur' => '<p>vous n\'êtes pas autorisé à payer la facture</p>',
  5564.                     ];
  5565.                 }
  5566.             }
  5567. //            $dateNow = new \DateTime();
  5568. //            $dateNow->modify('+1 day');
  5569. //            if($datePrevuPaiement >= $dateNow){
  5570. //            }else{
  5571. //                $datePrevuPaiement = $dateNow;
  5572. //            }
  5573.             $factureFinancePaiement = $this->em->getRepository(FactureFinancePaiement::class)->findNotFichierBySpvAndDate($spv,$dateValidation,$datePrevuPaiement);
  5574.             if(!$factureFinancePaiement){
  5575.                 $factureFinancePaiement = new FactureFinancePaiement();
  5576.                 $factureFinancePaiement->setSpv($spv);
  5577.                 $factureFinancePaiement->setDatePrevu($dateValidation);
  5578.                 $factureFinancePaiement->setDatePaiementPrevu($datePrevuPaiement);
  5579.                 $this->em->persist($factureFinancePaiement);
  5580.                 $this->em->flush();
  5581.             }
  5582.             if($facture){
  5583.                 if($this->checkAltareaFacture($facture)){
  5584.                 }else {
  5585.                     if ($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)) {
  5586.                         $facture->setIsPaiement(FactureFinance::STATUS_PAYE_SEPA);
  5587.                         $this->em->persist($facture);
  5588.                         $factureFinancePaiementDetailNew = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance' => $facture->getId()]);
  5589.                         $factureDetailNotExist = false;
  5590.                         if (!$factureFinancePaiementDetailNew) {
  5591.                             $factureFinancePaiementDetailNew = new FactureFinancePaiementDetail();
  5592.                             $factureDetailNotExist = true;
  5593.                         }
  5594.                         $factureFinancePaiementDetailNew->setFactureFinance($facture);
  5595.                         $factureFinancePaiementDetailNew->setDatePrevu($dateValidation);
  5596.                         $factureFinancePaiementDetailNew->setFactureFinancePaiement($factureFinancePaiement);
  5597.                         $this->em->persist($factureFinancePaiementDetailNew);
  5598.                         $this->em->flush();
  5599.                         if ($factureDetailNotExist) {
  5600.                             $str = $this->security->getUser()->getFirstname() . ' ' . $this->security->getUser()->getLastname() . ' a validé la mise en paiement : ' . $facture->getFournisseur()->getName() . ' (' . $facture->getNumeroFacture() . ')';
  5601.                             $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(), $str, $facture);
  5602.                         }
  5603.                     }
  5604.                 }
  5605.             }
  5606.         }
  5607.         return 1;
  5608.     }
  5609.     public function checkPaiemantFactureDetailAndUpdate($facture,$datePaiment){
  5610.         $detailPaiement = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance'=>$facture->getId()]);
  5611.         if($detailPaiement){
  5612.             $datePaeiementOld = $detailPaiement->getFactureFinancePaiement()->getDatePaiementPrevu();
  5613.             if($datePaeiementOld && ($datePaeiementOld->format('d-m-Y') == $datePaiment->format('d-m-Y'))){
  5614.             }else{
  5615.                 $facture->setIsPaiement(0);
  5616.                 $this->em->persist($facture);
  5617.                 $this->em->remove($detailPaiement);
  5618.                 $this->em->flush();
  5619.                 $spv = $facture->getSpv();
  5620.                 $dateValidation = $facture->getVateValidation();
  5621.                 $datePrevuPaiement = $datePaiment;
  5622.                 $userCurrent = $this->security->getUser();
  5623.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  5624.                 }else {
  5625.                     if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  5626.                         return 0;
  5627.                     }
  5628.                 }
  5629.                 $factureFinancePaiement = $this->em->getRepository(FactureFinancePaiement::class)->findNotFichierBySpvAndDate($spv,$dateValidation,$datePrevuPaiement);
  5630.                 if(!$factureFinancePaiement){
  5631.                     $factureFinancePaiement = new FactureFinancePaiement();
  5632.                     $factureFinancePaiement->setSpv($spv);
  5633.                     $factureFinancePaiement->setDatePrevu($dateValidation);
  5634.                     $factureFinancePaiement->setDatePaiementPrevu($datePrevuPaiement);
  5635.                     $this->em->persist($factureFinancePaiement);
  5636.                     $this->em->flush();
  5637.                 }
  5638.                 if($facture){
  5639.                     if($this->checkAltareaFacture($facture)){
  5640.                     }else {
  5641.                         if ($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)) {
  5642.                             $facture->setIsPaiement(FactureFinance::STATUS_PAYE_SEPA);
  5643.                             $this->em->persist($facture);
  5644.                             $factureFinancePaiementDetailNew = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance' => $facture->getId()]);
  5645.                             $factureDetailNotExist = false;
  5646.                             if (!$factureFinancePaiementDetailNew) {
  5647.                                 $factureFinancePaiementDetailNew = new FactureFinancePaiementDetail();
  5648.                                 $factureDetailNotExist = true;
  5649.                             }
  5650.                             $factureFinancePaiementDetailNew->setFactureFinance($facture);
  5651.                             $factureFinancePaiementDetailNew->setDatePrevu($dateValidation);
  5652.                             $factureFinancePaiementDetailNew->setFactureFinancePaiement($factureFinancePaiement);
  5653.                             $this->em->persist($factureFinancePaiementDetailNew);
  5654.                             $this->em->flush();
  5655.                             if ($factureDetailNotExist) {
  5656.                                 $str = $this->security->getUser()->getFirstname() . ' ' . $this->security->getUser()->getLastname() . ' a validé la mise en paiement : ' . $facture->getFournisseur()->getName() . ' (' . $facture->getNumeroFacture() . ')';
  5657.                                 $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(), $str, $facture);
  5658.                             }
  5659.                         }
  5660.                     }
  5661.                 }
  5662.             }
  5663.         }
  5664.     }
  5665.     public function refusePaiementFacture($request){
  5666.         $dataId = $request->get('factureId');
  5667.         $comment = $request->get('comment');
  5668.         if($dataId && $comment){
  5669.             $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$dataId]);
  5670.             if($facture){
  5671.                 $userCurrent = $this->security->getUser();
  5672.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  5673.                 }else {
  5674.                     if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  5675.                         return [
  5676.                             'messageErreur' => '<p>Vous n\'êtes pas autorisé</p>',
  5677.                             'facture' => $facture,
  5678.                             'spvId' => $facture->getSpv()->getId(),
  5679.                             'date' => $facture->getDateValidation()->format('Y-m-d'),
  5680.                         ];
  5681.                     }
  5682.                 }
  5683.                 if($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)){
  5684.                     $facture->setIsPaiement(FactureFinance::STATUS_NOT_PAYE_SEPA);
  5685.                     $this->em->persist($facture);
  5686.                     $this->em->flush();
  5687.                     $str = $this->security->getUser()->getFirstname().' '.$this->security->getUser()->getLastname().' a refusé la mise en paiement : '.$facture->getFournisseur()->getName().' ('.$facture->getNumeroFacture().')';
  5688.                     $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(),$str,$facture,$comment);
  5689.                     $factureFinancePaiementDetail = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance'=>$facture->getId()]);
  5690.                     if($factureFinancePaiementDetail){
  5691.                         $this->em->remove($factureFinancePaiementDetail);
  5692.                         $this->em->flush();
  5693.                     }
  5694.                 }
  5695.                 return [
  5696.                     'facture' => $facture,
  5697.                     'spvId' => $facture->getSpv()->getId(),
  5698.                     'date' => $facture->getDateValidation()->format('Y-m-d'),
  5699.                 ];
  5700.             }
  5701.         }
  5702.         return false ;
  5703.     }
  5704.     public function deletePaiementFacture($request,$token){
  5705.         $dataId = $token;
  5706.         if($dataId){
  5707.             $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$dataId]);
  5708.             if($facture){
  5709.                 $userCurrent = $this->security->getUser();
  5710.                 if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  5711.                 }else {
  5712.                     if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  5713.                         return [
  5714.                             'messageErreur' => '<p>Vous n\'êtes pas autorisé</p>',
  5715.                             'facture' => $facture,
  5716.                             'spvId' => $facture->getSpv()->getId(),
  5717.                             'date' => $facture->getDateValidation()->format('Y-m-d'),
  5718.                         ];
  5719.                     }
  5720.                 }
  5721. //                if((!$this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) or !$this->checkFactureFinanceCodeProject($facture)) or $facture->getIsPaiement() == FactureFinance::STATUS_NOT_PAYE_SEPA){
  5722.                     $facture->setIsPaiement(FactureFinance::STATUS_DELETE_PAYE_SEPA);
  5723.                     $this->em->persist($facture);
  5724.                     $this->em->flush();
  5725.                     $str = $this->security->getUser()->getFirstname().' '.$this->security->getUser()->getLastname().' a supprimé la mise en paiement : '.$facture->getFournisseur()->getName().' ('.$facture->getNumeroFacture().')';
  5726.                     $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(),$str,$facture,"");
  5727.                     $factureFinancePaiementDetail = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance'=>$facture->getId()]);
  5728.                     if($factureFinancePaiementDetail){
  5729.                         $this->em->remove($factureFinancePaiementDetail);
  5730.                         $this->em->flush();
  5731.                     }
  5732. //                }
  5733.                 return [
  5734.                     'facture' => $facture,
  5735.                     'spvId' => $facture->getSpv()->getId(),
  5736.                     'date' => $facture->getDateValidation()->format('Y-m-d'),
  5737.                 ];
  5738.             }
  5739.         }
  5740.         return false ;
  5741.     }
  5742.     public function importTvaTab($filename)
  5743.     {
  5744.         $file = $this->params->get('uploads_directory') . "/" . $filename;
  5745.         $array = [];
  5746.         $f = fopen($file, "r");
  5747.         $flag = true;
  5748.         $i = 0;
  5749.         $header = [];
  5750.         while (($line = fgetcsv($f, 0, ";")) !== false) {
  5751.             if ($flag) {
  5752.                 $header = [];
  5753.                 foreach ($line as $cell) {
  5754.                     $header[] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  5755.                 }
  5756.                 $flag = false;
  5757.                 continue;
  5758.             }
  5759.             foreach ($line as $key => $cell) {
  5760.                 $array[$i][$header[$key]] = trim(iconv("ISO-8859-1", "UTF-8", $cell));
  5761.             }
  5762.             $i++;
  5763.         }
  5764.         fclose($f);
  5765.         $arrayProject = [];
  5766.         $i = 0;
  5767.         foreach ($array as $item) {
  5768.             $arrayProject[$i]['tauxTva'] = isset($item['Taux de TVA']) ? $item['Taux de TVA'] : 0;
  5769.             $arrayProject[$i]['tva'] = isset($item['Montant TVA']) ? $item['Montant TVA'] : 0;
  5770.             $arrayProject[$i]['montantHt'] = isset($item['Montant HT']) ? $item['Montant HT'] : 0;
  5771.             $arrayProject[$i]['montantTtc'] = isset($item['Montant TTC']) ? $item['Montant TTC'] : 0;
  5772.             $i++;
  5773.         }
  5774.         return ['bodyTab' => $arrayProject];
  5775.     }
  5776.     public function exportComptable($date){
  5777.         $arrays1 = $this->getC1FacturesExport($date);
  5778.             $this->c1FacturesExportXls($arrays1);
  5779.         $arrays2 = $this->getC2AvoirExport($date);
  5780.             $this->c2AvoirExportXls($arrays2);
  5781.         $arrays3 = $this->getC3AcomptesExport($date);
  5782.             $this->c3AcomptesExportXls($arrays3);
  5783.         $arrays4 = $this->getC4ReglementsExport($date);
  5784.             $this->c4ReglementsExportXls($arrays4);
  5785.     }
  5786.     public function exportComptableNotSend($date){
  5787.         $arrays1 = $this->getC1FacturesExport($date);
  5788.         $this->c1FacturesExportXls($arrays1,true,$date);
  5789.         $arrays2 = $this->getC2AvoirExport($date);
  5790.         $this->c2AvoirExportXls($arrays2,true,$date);
  5791.         $arrays3 = $this->getC3AcomptesExport($date);
  5792.         $this->c3AcomptesExportXls($arrays3,true,$date);
  5793.         $arrays4 = $this->getC4ReglementsExport($date);
  5794.         $this->c4ReglementsExportXls($arrays4,true,$date);
  5795.     }
  5796.     public function getC1FacturesExport($date){
  5797.         $factures = $this->em->getRepository(FactureFinance::class)->searchFactureValide($date);
  5798.         $arrays = [];
  5799.         $i = 0;
  5800.         foreach ($factures as $facture){
  5801.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  5802.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  5803.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  5804.             $classification = $facture->getClassification();
  5805.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  5806.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  5807.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  5808.             $numeroFacture = $facture->getNumeroFacture();
  5809.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  5810.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  5811.                     $arrays[$i]['Type de ligne'] = 'Facture';
  5812.                     $arrays[$i]['Code Société'] = $spvName;
  5813.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  5814.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  5815.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  5816.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  5817.                     $arrays[$i]['Date comptable'] = $dateComptable;
  5818.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  5819.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  5820.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  5821.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  5822.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  5823. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  5824.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  5825.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  5826.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  5827.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  5828.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  5829. //                    if($facture->getIsAvoir()){
  5830. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  5831. //                        $a = count($avoirs);
  5832. //                        $b = 1;
  5833. //                        $avoirNum = '';
  5834. //                        foreach ($avoirs as $item){
  5835. //                            if($b == $a){
  5836. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  5837. //                            }else{
  5838. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  5839. //                            }
  5840. //                            $b++;
  5841. //                        }
  5842. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  5843. //                    }else{
  5844.                         $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127)) ;
  5845. //                    }
  5846.                     $arrays[$i]['Code projet'] = '';
  5847.                     $arrays[$i]['libellé projet'] = '';
  5848.                     $arrays[$i]['Compteur facture associée'] = '';
  5849.                     $arrays[$i]['Autoliquidation'] = 0;
  5850.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  5851.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  5852.                     $i++;
  5853.                     if(count($facture->getProjectFactureFinance())>0){
  5854.                         foreach ($facture->getProjectFactureFinance() as $project){
  5855.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  5856.                             $arrays[$i]['Code Société'] = '';
  5857.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  5858.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  5859.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  5860.                             $arrays[$i]['Facture de charge'] = '';
  5861.                             $arrays[$i]['Date comptable'] = '';
  5862.                             $arrays[$i]['Date d’échéance'] = '';
  5863.                             $arrays[$i]['Date de création dans ERPI'] = '';
  5864.                             $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$tvaMultiple->getMontantHt()),2,'.','');
  5865.                             $arrays[$i]['Montant TTC'] = '';
  5866.                             $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$tvaMultiple->getTauxTva()),2,'.','');
  5867.                             $arrays[$i]['Montant à régler'] = '';
  5868.                             $arrays[$i]['Référence facture fournisseur'] = '';
  5869.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  5870.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  5871.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  5872.                             $arrays[$i]['Commentaire comptable'] = '';
  5873.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  5874.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  5875.                             $arrays[$i]['Compteur facture associée'] = '';
  5876.                             $arrays[$i]['Autoliquidation'] = 0;
  5877.                             $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  5878.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  5879.                             $i++;
  5880.                         }
  5881.                     }
  5882.                 }
  5883.             }
  5884.             else{
  5885.                 $arrays[$i]['Type de ligne'] = 'Facture';
  5886.                 $arrays[$i]['Code Société'] = $spvName;
  5887.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  5888.                 $arrays[$i]['Code budgétaire'] = $classification;
  5889.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  5890.                 $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  5891.                 $arrays[$i]['Date comptable'] = $dateComptable;
  5892.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  5893.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  5894.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  5895.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  5896.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  5897.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  5898.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  5899.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  5900.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  5901.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  5902. //                if($facture->getIsAvoir()){
  5903. //                    $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  5904. //                    $a = count($avoirs);
  5905. //                    $b = 1;
  5906. //                    $avoirNum = '';
  5907. //                    foreach ($avoirs as $item){
  5908. //                        if($b == $a){
  5909. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  5910. //                        }else{
  5911. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  5912. //                        }
  5913. //                        $b++;
  5914. //                    }
  5915. //                    $arrays[$i]['Commentaire comptable'] = $avoirNum;
  5916. //                }else{
  5917.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  5918. //                }
  5919.                 $arrays[$i]['Code projet'] = '';
  5920.                 $arrays[$i]['libellé projet'] = '';
  5921.                 $arrays[$i]['Compteur facture associée'] = '';
  5922.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  5923.                 if($facture->getAutoliquidation() == 1){
  5924.                     $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  5925.                 }else{
  5926.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  5927.                 }
  5928.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  5929.                 $i++;
  5930.                 if(count($facture->getProjectFactureFinance())>0){
  5931.                     foreach ($facture->getProjectFactureFinance() as $project){
  5932.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  5933.                         $arrays[$i]['Code Société'] = '';
  5934.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  5935.                         $arrays[$i]['Code budgétaire'] = $classification;
  5936.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  5937.                         $arrays[$i]['Facture de charge'] = '';
  5938.                         $arrays[$i]['Date comptable'] = '';
  5939.                         $arrays[$i]['Date d’échéance'] = '';
  5940.                         $arrays[$i]['Date de création dans ERPI'] = '';
  5941.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  5942.                         $arrays[$i]['Montant TTC'] = '';
  5943.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  5944.                         $arrays[$i]['Montant à régler'] = '';
  5945.                         $arrays[$i]['Référence facture fournisseur'] = '';
  5946.                         $arrays[$i]['Compteur ERPI pièce'] =  $facture->getCompteurErpiPiece();
  5947.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  5948.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  5949.                         $arrays[$i]['Commentaire comptable'] = '';
  5950.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  5951.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  5952.                         $arrays[$i]['Compteur facture associée'] = '';
  5953.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  5954.                         if($facture->getAutoliquidation() == 1){
  5955.                             $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  5956.                         }else{
  5957.                             $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  5958.                         }
  5959.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  5960.                         $i++;
  5961.                     }
  5962.                 }
  5963.             }
  5964.         }
  5965.         return $arrays;
  5966.     }
  5967.     public function c1FacturesExportXls($arrays,$isNotSend = false,$date = false){
  5968.         if($date){
  5969.             $dateNow = $date;
  5970.         }else{
  5971.             $dateNow = new \DateTime();
  5972.         }
  5973.         $dateNowStr = '_'.$dateNow->format('Ymd').'_'.$dateNow->format('H').'h'.$dateNow->format('i');
  5974.         $fileName = "C1_factures".$dateNowStr.".csv";
  5975.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  5976.         if(file_exists($file)){
  5977.             $filesystem = new Filesystem();
  5978.             $filesystem->remove($file);
  5979.         }
  5980.         $spreadsheet = new Spreadsheet();
  5981.         $sheet = $spreadsheet->getActiveSheet();
  5982.         // Head 2
  5983.         $tableHead2 = [
  5984.             'font'=>[
  5985.                 'color'=>[
  5986.                     'rgb'=>'ffffff'
  5987.                 ],
  5988.                 'bold'=>true,
  5989.                 'size'=>12
  5990.             ],
  5991.             'fill'=>[
  5992.                 'fillType' => Fill::FILL_SOLID,
  5993.                 'startColor' => [
  5994.                     'rgb' => '002060'
  5995.                 ]
  5996.             ],
  5997.         ];
  5998.         $tableRand = [
  5999.             'fill'=>[
  6000.                 'fillType' => Fill::FILL_SOLID,
  6001.                 'startColor' => [
  6002.                     'rgb' => 'C8D6EE'
  6003.                 ]
  6004.             ],
  6005.         ];
  6006.         $sheet->setCellValue('A1',"Type de ligne")
  6007.             ->setCellValue('B1',"Code Sage")
  6008.             ->setCellValue('C1',"Code budgétaire")
  6009.             ->setCellValue('D1',"Code fournisseur Evalua")
  6010.             ->setCellValue('E1',"Valeur de charge ou investissement")
  6011.             ->setCellValue('F1',"Date comptable")
  6012.             ->setCellValue('G1',"Date d’échéance")
  6013.             ->setCellValue('H1',"Date de création dans ERPI")
  6014.             ->setCellValue('I1',"Montant HT")
  6015.             ->setCellValue('J1',"Montant TTC")
  6016.             ->setCellValue('K1',"taux de TVA")
  6017.             ->setCellValue('L1',"Montant à régler")
  6018.             ->setCellValue('M1',"Référence facture fournisseur")
  6019.             ->setCellValue('N1',"Compteur ERPI pièce")
  6020.             ->setCellValue('O1',"Compteur ERPI écritures")
  6021.             ->setCellValue('P1',"Commentaire comptable")
  6022.             ->setCellValue('Q1',"Code projet")
  6023.             ->setCellValue('R1',"libellé projet")
  6024.             ->setCellValue('S1',"Compteur facture associée")
  6025.             ->setCellValue('T1',"Autoliquidation")
  6026.             ->setCellValue('U1',"Montant TVA");
  6027.         // Borders a2 z2
  6028.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6029.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6030.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6031.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6032.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6033.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6034.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6035.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6036.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6037.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6038.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6039.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6040.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6041.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6042.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6043.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6044.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6045.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6046.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6047.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6048.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6049.         //width
  6050.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  6051.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  6052.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  6053.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  6054.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  6055.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  6056.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  6057.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  6058.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  6059.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  6060.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  6061.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  6062.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  6063.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  6064.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  6065.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  6066.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  6067.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  6068.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  6069.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(15);
  6070.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(15);
  6071.         $spreadsheet->getActiveSheet()->getStyle('A1:T1')->applyFromArray($tableHead2);
  6072.         //loop through the data
  6073.         //current row
  6074.         $row=2;
  6075.         foreach($arrays as $array){
  6076.             $spreadsheet->getActiveSheet()
  6077.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  6078.                 ->setCellValue('B'.$row , $array['Code Sage'])
  6079.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  6080.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  6081.                 ->setCellValue('E'.$row , $array['Facture de charge'])
  6082.                 ->setCellValue('F'.$row , $array['Date comptable'])
  6083.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  6084.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  6085.                 ->setCellValue('I'.$row , $array['Montant HT'])
  6086.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  6087.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  6088.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  6089.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  6090.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  6091.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  6092.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  6093.                 ->setCellValue('Q'.$row , $array['Code projet'])
  6094.                 ->setCellValue('R'.$row , $array['libellé projet'])
  6095.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  6096.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  6097.                 ->setCellValue('U'.$row , $array['Montant TVA'])
  6098.             ;
  6099.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6100.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6101.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6102.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6103.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6104.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6105.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6106.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6107.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6108.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6109.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6110.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6111.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6112.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6113.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6114.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6115.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6116.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6117.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6118.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6119.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6120.             $row++;
  6121.         }
  6122.         $firstRow=1;
  6123.         $lastRow=$row-1;
  6124.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  6125.         $writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
  6126.         $writer->setDelimiter('|');
  6127.         $writer->setEnclosure('');
  6128.         $writer->setUseBOM(false);
  6129. //        $writer->setOutputEncoding('UTF-8');
  6130.         $writer->save($file);
  6131.         if($isNotSend){
  6132.         }else{
  6133.             $this->sendToServeur($fileName ,'/altarea/comptable',$this->params->get('comptable_altarea_directory'));
  6134.         }
  6135.         return $file;
  6136.     }
  6137.     public function getC2AvoirExport($date){
  6138.         $avoirs = $this->em->getRepository(Avoir::class)->searchAvoirValide($date);
  6139.         $arrays = [];
  6140.         $i = 0;
  6141.         foreach ($avoirs as $avoir){
  6142.             $spvName = $avoir->getSpv()?$avoir->getSpv()->getName():'';
  6143.             $spvCodeSage = $avoir->getSpv()?$avoir->getSpv()->getCodeSage():'';
  6144.             $fournisseurCode = $avoir->getFournisseur()?$avoir->getFournisseur()->getCodeFournisseur():'';
  6145.             $classification = $avoir->getClassification();
  6146.             $dateComptable = $avoir->getDateAvoir()?$avoir->getDateAvoir()->format('d/m/Y'):'';
  6147.             $dateEcheance = '';
  6148.             $dateCreation = $avoir->getCreatedAt()?$avoir->getCreatedAt()->format('d/m/Y'):'';
  6149.             $numeroFacture = $avoir->getNumeroAvoir();
  6150.             if(count($avoir->getTvaAvoir())>0 && $avoir->getTauxTva() == 0){
  6151.                 foreach ($avoir->getTvaAvoir() as $tvaMultiple){
  6152.                     $arrays[$i]['Type de ligne'] = 'Avoir';
  6153.                     $arrays[$i]['Code Société'] = $spvName;
  6154.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  6155.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  6156.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6157.                     $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  6158.                     $arrays[$i]['Date comptable'] = $dateComptable;
  6159.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  6160.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6161.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  6162.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  6163.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  6164.                     $arrays[$i]['Montant à régler'] = '';
  6165.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6166.                     $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  6167.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTva($avoir,$tvaMultiple);
  6168.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6169.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($avoir->getNote(), 0, 127));
  6170.                     $arrays[$i]['Code projet'] = '';
  6171.                     $arrays[$i]['libellé projet'] = '';
  6172.                     $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  6173.                     $factureAssocie = '';
  6174.                     if ($avoirFactures) {
  6175.                         $h = 1;
  6176.                         $total = count($avoirFactures);
  6177.                         foreach ($avoirFactures as $avoirFacture) {
  6178.                             if ($total == $h) {
  6179.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  6180.                             } else {
  6181.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  6182.                             }
  6183.                             $h++;
  6184.                         }
  6185.                     }
  6186.                     $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  6187.                     $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  6188.                     if($avoir->getAutoliquidation() == 1){
  6189.                         $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  6190.                     }else{
  6191.                         $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  6192.                     }
  6193.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  6194.                     $i++;
  6195.                     if(count($avoir->getProjectAvoir())>0){
  6196.                         foreach ($avoir->getProjectAvoir() as $project){
  6197.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  6198.                             $arrays[$i]['Code Société'] = '';
  6199.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  6200.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  6201.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  6202.                             $arrays[$i]['Avoir de charge'] = '';
  6203.                             $arrays[$i]['Date comptable'] = '';
  6204.                             $arrays[$i]['Date d’échéance'] = '';
  6205.                             $arrays[$i]['Date de création dans ERPI'] = '';
  6206. //                            if (count($avoir->getProjectAvoir()) == 1) {
  6207. //                                $arrays[$i]['Montant HT'] = (float)$avoir->getMonatantHt();
  6208. //                            } else {
  6209. //                                $arrays[$i]['Montant HT'] = (float)$project->getMontantHt();
  6210. //                            }
  6211. //                            $arrays[$i]['Montant TTC'] = '';
  6212. //                            $arrays[$i]['taux de TVA'] = '';
  6213.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  6214.                             $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  6215.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  6216.                             $arrays[$i]['Montant à régler'] = '';
  6217.                             $arrays[$i]['Référence facture fournisseur'] = '';
  6218.                             $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  6219.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTvaProject($avoir,$tvaMultiple,$project->getProject());
  6220.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  6221.                             $arrays[$i]['Commentaire comptable'] = '';
  6222.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  6223.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  6224.                             $arrays[$i]['Compteur facture associée'] = '';
  6225.                             $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  6226.                             if($avoir->getAutoliquidation() == 1){
  6227.                                 $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  6228.                             }else{
  6229.                                 $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  6230.                             }
  6231.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  6232.                             $i++;
  6233.                         }
  6234.                     }
  6235.                 }
  6236.             }
  6237.             else {
  6238.                 $arrays[$i]['Type de ligne'] = 'Avoir';
  6239.                 $arrays[$i]['Code Société'] = $spvName;
  6240.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  6241.                 $arrays[$i]['Code budgétaire'] = $classification;
  6242.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6243.                 $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]) ? self::CHARGE_INVESTISSEMENT_DEPENSE[$classification] : '';
  6244.                 $arrays[$i]['Date comptable'] = $dateComptable;
  6245.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  6246.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6247.                 $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  6248.                 if($avoirs){
  6249.                     $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  6250.                     $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  6251.                     if($avoir->getAutoliquidation()){
  6252.                         $montantHt = $montantTtc;
  6253.                     }else{
  6254.                         $montantHt = $montantTtc / (1 + ($tauxTva/100));
  6255.                     }
  6256.                     $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  6257.                     $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  6258.                     $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  6259.                     $tvaMontant = $tauxTva * $montantHt / 100;
  6260.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  6261.                 }else{
  6262.                     $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$avoir->getMonatantHt()),2,'.','');
  6263.                     $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$avoir->getMonatantTtc()),2,'.','');
  6264.                     $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$avoir->getTauxTva()),2,'.','');
  6265.                     if($avoir->getAutoliquidation() == 1){
  6266.                         $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $avoir->getTauxTva())['tva'];
  6267.                     }else{
  6268.                         $tvaMontant = (float)str_replace(',','.',$avoir->getTauxTva()) * (float)str_replace(',','.',$avoir->getMonatantHt()) / 100;
  6269.                     }
  6270.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  6271.                 }
  6272.                 $arrays[$i]['Montant à régler'] = '';
  6273.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6274.                 $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  6275.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTva($avoir);
  6276.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6277.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($avoir->getNote(), 0, 127));
  6278.                 $arrays[$i]['Code projet'] = '';
  6279.                 $arrays[$i]['libellé projet'] = '';
  6280.                 $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  6281.                 $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  6282.                 $factureAssocie = '';
  6283.                 if ($avoirFactures) {
  6284.                     $h = 1;
  6285.                     $total = count($avoirFactures);
  6286.                     foreach ($avoirFactures as $avoirFacture) {
  6287.                         if ($total == $h) {
  6288.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  6289.                         } else {
  6290.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  6291.                         }
  6292.                         $h++;
  6293.                     }
  6294.                 }
  6295.                 $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  6296.                 $i++;
  6297.                 if (count($avoir->getProjectAvoir()) > 0) {
  6298.                     foreach ($avoir->getProjectAvoir() as $project) {
  6299.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  6300.                         $arrays[$i]['Code Société'] = '';
  6301.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  6302.                         $arrays[$i]['Code budgétaire'] = $classification;
  6303.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  6304.                         $arrays[$i]['Avoir de charge'] = '';
  6305.                         $arrays[$i]['Date comptable'] = '';
  6306.                         $arrays[$i]['Date d’échéance'] = '';
  6307.                         $arrays[$i]['Date de création dans ERPI'] = '';
  6308.                         if (count($avoir->getProjectAvoir()) == 1) {
  6309.                             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir->getId()]);
  6310.                             if ($avoirs) {
  6311.                                 $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  6312.                                 $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  6313.                                 if($avoir->getAutoliquidation()){
  6314.                                     $montantHt = $montantTtc;
  6315.                                 }else{
  6316.                                     $montantHt = $montantTtc / (1 + ($tauxTva/100));
  6317.                                 }
  6318.                                 $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  6319.                                 $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  6320.                                 $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  6321.                                 $tvaMontant = $tauxTva * $montantHt / 100;
  6322.                                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  6323.                             } else {
  6324.                                 $arrays[$i]['Montant HT'] = number_format((float)$avoir->getMonatantHt(),2,'.','');
  6325.                                 $arrays[$i]['Montant TTC'] = number_format((float)$avoir->getMonatantTtc(),2,'.','');
  6326.                                 $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  6327.                                 if($avoir->getAutoliquidation() == 1){
  6328.                                     $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $avoir->getTauxTva())['tva'];
  6329.                                 }else{
  6330.                                     $tvaMontant = (float)str_replace(',','.',$avoir->getTauxTva()) * (float)str_replace(',','.',$avoir->getMonatantHt()) / 100;
  6331.                                 }
  6332.                                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  6333.                             }
  6334.                         }else{
  6335.                             $montantHt = (float)str_replace(',','.',$avoir->getMonatantHt());
  6336.                             $tauxTva = $avoir->getTauxTva() && (float)$avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  6337.                             $arrays[$i]['Montant HT'] = number_format($montantHt,2,'.','');
  6338.                             $arrays[$i]['Montant TTC'] = number_format($montantHt + (1 *( $tauxTva/100)),2,'.','');
  6339.                             $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  6340.                             if($avoir->getAutoliquidation() == 1){
  6341.                                 $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $tauxTva)['tva'];
  6342.                             }else{
  6343.                                 $tvaMontant = $tauxTva * $montantHt / 100;
  6344.                             }
  6345.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  6346.                         }
  6347.                         $arrays[$i]['Montant à régler'] = '';
  6348.                         $arrays[$i]['Référence facture fournisseur'] = '';
  6349.                         $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  6350.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTvaProject($avoir, $project->getProject());
  6351.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  6352.                         $arrays[$i]['Commentaire comptable'] = '';
  6353.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  6354.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  6355.                         $arrays[$i]['Compteur facture associée'] = '';
  6356.                         $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  6357.                         $i++;
  6358.                     }
  6359.                 }
  6360.             }
  6361.         }
  6362.         return $arrays;
  6363.     }
  6364.     public function c2AvoirExportXls($arrays,$isNotSend = false,$date = false){
  6365.         if($date){
  6366.             $dateNow = $date;
  6367.         }else{
  6368.             $dateNow = new \DateTime();
  6369.         }
  6370.         $dateNowStr = '_'.$dateNow->format('Ymd').'_'.$dateNow->format('H').'h'.$dateNow->format('i');
  6371.         $fileName = "C2_avoirs".$dateNowStr.".csv";
  6372.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  6373.         if(file_exists($file)){
  6374.             $filesystem = new Filesystem();
  6375.             $filesystem->remove($file);
  6376.         }
  6377.         $spreadsheet = new Spreadsheet();
  6378.         $sheet = $spreadsheet->getActiveSheet();
  6379.         // Head 2
  6380.         $tableHead2 = [
  6381.             'font'=>[
  6382.                 'color'=>[
  6383.                     'rgb'=>'ffffff'
  6384.                 ],
  6385.                 'bold'=>true,
  6386.                 'size'=>12
  6387.             ],
  6388.             'fill'=>[
  6389.                 'fillType' => Fill::FILL_SOLID,
  6390.                 'startColor' => [
  6391.                     'rgb' => '002060'
  6392.                 ]
  6393.             ],
  6394.         ];
  6395.         $tableRand = [
  6396.             'fill'=>[
  6397.                 'fillType' => Fill::FILL_SOLID,
  6398.                 'startColor' => [
  6399.                     'rgb' => 'C8D6EE'
  6400.                 ]
  6401.             ],
  6402.         ];
  6403.         $sheet->setCellValue('A1',"Type de ligne")
  6404.             ->setCellValue('B1',"Code Sage")
  6405.             ->setCellValue('C1',"Code budgétaire")
  6406.             ->setCellValue('D1',"Code fournisseur Evalua")
  6407.             ->setCellValue('E1',"Valeur de charge ou investissement")
  6408.             ->setCellValue('F1',"Date comptable")
  6409.             ->setCellValue('G1',"Date d’échéance")
  6410.             ->setCellValue('H1',"Date de création dans ERPI")
  6411.             ->setCellValue('I1',"Montant HT")
  6412.             ->setCellValue('J1',"Montant TTC")
  6413.             ->setCellValue('K1',"taux de TVA")
  6414.             ->setCellValue('L1',"Montant à régler")
  6415.             ->setCellValue('M1',"Référence facture fournisseur")
  6416.             ->setCellValue('N1',"Compteur ERPI pièce")
  6417.             ->setCellValue('O1',"Compteur ERPI écritures")
  6418.             ->setCellValue('P1',"Commentaire comptable")
  6419.             ->setCellValue('Q1',"Code projet")
  6420.             ->setCellValue('R1',"libellé projet")
  6421.             ->setCellValue('S1',"Compteur facture associée")
  6422.             ->setCellValue('T1',"Autoliquidation")
  6423.             ->setCellValue('U1',"Montant TVA");
  6424.         // Borders a2 z2
  6425.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6426.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6427.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6428.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6429.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6430.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6431.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6432.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6433.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6434.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6435.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6436.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6437.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6438.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6439.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6440.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6441.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6442.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6443.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6444.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6445.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6446.         //width
  6447.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  6448.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  6449.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  6450.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  6451.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  6452.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  6453.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  6454.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  6455.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  6456.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  6457.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  6458.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  6459.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  6460.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  6461.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  6462.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  6463.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  6464.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  6465.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  6466.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  6467.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(25);
  6468.         $spreadsheet->getActiveSheet()->getStyle('A1:U1')->applyFromArray($tableHead2);
  6469.         //loop through the data
  6470.         //current row
  6471.         $row=2;
  6472.         foreach($arrays as $array){
  6473.             $spreadsheet->getActiveSheet()
  6474.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  6475.                 ->setCellValue('B'.$row , $array['Code Sage'])
  6476.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  6477.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  6478.                 ->setCellValue('E'.$row , $array['Avoir de charge'])
  6479.                 ->setCellValue('F'.$row , $array['Date comptable'])
  6480.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  6481.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  6482.                 ->setCellValue('I'.$row , $array['Montant HT'])
  6483.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  6484.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  6485.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  6486.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  6487.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  6488.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  6489.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  6490.                 ->setCellValue('Q'.$row , $array['Code projet'])
  6491.                 ->setCellValue('R'.$row , $array['libellé projet'])
  6492.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  6493.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  6494.                 ->setCellValue('U'.$row , $array['Montant TVA']);
  6495.             ;
  6496.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6497.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6498.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6499.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6500.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6501.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6502.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6503.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6504.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6505.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6506.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6507.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6508.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6509.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6510.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6511.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6512.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6513.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6514.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6515.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6516.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6517.             $row++;
  6518.         }
  6519.         $firstRow=1;
  6520.         $lastRow=$row-1;
  6521.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  6522.         $writer = new Csv($spreadsheet);
  6523.         $writer->setDelimiter('|');
  6524.         $writer->setEnclosure('');
  6525.         $writer->setUseBOM(false);
  6526. //        $writer->setOutputEncoding('UTF-8');
  6527.         $writer->save($file);
  6528.         if($isNotSend){
  6529.         }else{
  6530.             $this->sendToServeur($fileName ,'/altarea/comptable',$this->params->get('comptable_altarea_directory'));
  6531.         }
  6532.         return $file;
  6533.     }
  6534.     public function getC3AcomptesExport($date){
  6535.         $factures = $this->em->getRepository(FactureFinance::class)->searchAcompteValide($date);
  6536.         $arrays = [];
  6537.         $i = 0;
  6538.         foreach ($factures as $facture){
  6539.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  6540.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  6541.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  6542.             $classification = $facture->getClassification();
  6543.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  6544.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  6545.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  6546.             $numeroFacture = $facture->getNumeroFacture();
  6547.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  6548.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  6549.                     $arrays[$i]['Type de ligne'] = 'Acompte';
  6550.                     $arrays[$i]['Code Société'] = $spvName;
  6551.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  6552.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  6553.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6554.                     $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  6555.                     $arrays[$i]['Date comptable'] = $dateComptable;
  6556.                     $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  6557.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6558.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  6559.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  6560.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  6561. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  6562.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  6563.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6564.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  6565.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  6566.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6567.                     $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  6568. //                    if($facture->getIsAvoir()){
  6569. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  6570. //                        $a = count($avoirs);
  6571. //                        $b = 1;
  6572. //                        $avoirNum = '';
  6573. //                        foreach ($avoirs as $item){
  6574. //                            if($b == $a){
  6575. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  6576. //                            }else{
  6577. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  6578. //                            }
  6579. //                            $b++;
  6580. //                        }
  6581. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  6582. //                    }else{
  6583.                         $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  6584. //                    }
  6585.                     $arrays[$i]['Code projet'] = '';
  6586.                     $arrays[$i]['libellé projet'] = '';
  6587.                     $arrays[$i]['Compteur facture associée'] = '';
  6588.                     $arrays[$i]['Autoliquidation'] = 0;
  6589.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  6590.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  6591.                     $i++;
  6592.                     if(count($facture->getProjectFactureFinance())>0){
  6593.                         foreach ($facture->getProjectFactureFinance() as $project){
  6594.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  6595.                             $arrays[$i]['Code Société'] = '';
  6596.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  6597.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  6598.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  6599.                             $arrays[$i]['Acompte pour une charge'] = '';
  6600.                             $arrays[$i]['Date comptable'] = '';
  6601.                             $arrays[$i]['Date d’échéance'] = '';
  6602.                             $arrays[$i]['Date de création dans ERPI'] = '';
  6603.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  6604.                             $arrays[$i]['Montant TTC'] = '';
  6605.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  6606.                             $arrays[$i]['Montant à régler'] = '';
  6607.                             $arrays[$i]['Référence facture fournisseur'] = '';
  6608.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  6609.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  6610.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  6611.                             $arrays[$i]['Commentaire comptable'] = '';
  6612.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  6613.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  6614.                             $arrays[$i]['Compteur facture associée'] = '';
  6615.                             $arrays[$i]['Autoliquidation'] = 0;
  6616.                             $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  6617.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  6618.                             $i++;
  6619.                         }
  6620.                     }
  6621.                 }
  6622.             }
  6623.             else{
  6624.                 $arrays[$i]['Type de ligne'] = 'Acompte';
  6625.                 $arrays[$i]['Code Société'] = $spvName;
  6626.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  6627.                 $arrays[$i]['Code budgétaire'] = $classification;
  6628.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6629.                 $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  6630.                 $arrays[$i]['Date comptable'] = $dateComptable;
  6631.                 $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  6632.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6633.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  6634.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  6635.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  6636.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  6637.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6638.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  6639.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  6640.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6641. //                if($facture->getIsAvoir()){
  6642. //                    $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  6643. //                    $a = count($avoirs);
  6644. //                    $b = 1;
  6645. //                    $avoirNum = '';
  6646. //                    foreach ($avoirs as $item){
  6647. //                        if($b == $a){
  6648. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  6649. //                        }else{
  6650. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  6651. //                        }
  6652. //                        $b++;
  6653. //                    }
  6654. //                    $arrays[$i]['Commentaire comptable'] = $avoirNum;
  6655. //                }else{
  6656.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  6657. //                }
  6658.                 $arrays[$i]['Code projet'] = '';
  6659.                 $arrays[$i]['libellé projet'] = '';
  6660.                 $arrays[$i]['Compteur facture associée'] = '';
  6661.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  6662.                 if($facture->getAutoliquidation() == 1){
  6663.                     $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  6664.                 }else{
  6665.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  6666.                 }
  6667.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  6668.                 $i++;
  6669.                 if(count($facture->getProjectFactureFinance())>0){
  6670.                     foreach ($facture->getProjectFactureFinance() as $project){
  6671.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  6672.                         $arrays[$i]['Code Société'] = '';
  6673.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  6674.                         $arrays[$i]['Code budgétaire'] = $classification;
  6675.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  6676.                         $arrays[$i]['Acompte pour une charge'] = '';
  6677.                         $arrays[$i]['Date comptable'] = '';
  6678.                         $arrays[$i]['Date d’échéance'] = '';
  6679.                         $arrays[$i]['Date de création dans ERPI'] = '';
  6680.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  6681.                         $arrays[$i]['Montant TTC'] = '';
  6682.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  6683.                         $arrays[$i]['Montant à régler'] = '';
  6684.                         $arrays[$i]['Référence facture fournisseur'] = '';
  6685.                         $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  6686.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  6687.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  6688.                         $arrays[$i]['Commentaire comptable'] = '';
  6689.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  6690.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  6691.                         $arrays[$i]['Compteur facture associée'] = '';
  6692.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  6693.                         if($facture->getAutoliquidation() == 1){
  6694.                             $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  6695.                         }else{
  6696.                             $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  6697.                         }
  6698.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  6699.                         $i++;
  6700.                     }
  6701.                 }
  6702.             }
  6703.         }
  6704.         return $arrays;
  6705.     }
  6706.     public function c3AcomptesExportXls($arrays,$isNotSend = false,$date = false){
  6707.         if($date){
  6708.             $dateNow = $date;
  6709.         }else{
  6710.             $dateNow = new \DateTime();
  6711.         }
  6712.         $dateNowStr = '_'.$dateNow->format('Ymd').'_'.$dateNow->format('H').'h'.$dateNow->format('i');
  6713.         $fileName = "C3_acomptes".$dateNowStr.".csv";
  6714.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  6715.         if(file_exists($file)){
  6716.             $filesystem = new Filesystem();
  6717.             $filesystem->remove($file);
  6718.         }
  6719.         $spreadsheet = new Spreadsheet();
  6720.         $sheet = $spreadsheet->getActiveSheet();
  6721.         // Head 2
  6722.         $tableHead2 = [
  6723.             'font'=>[
  6724.                 'color'=>[
  6725.                     'rgb'=>'ffffff'
  6726.                 ],
  6727.                 'bold'=>true,
  6728.                 'size'=>12
  6729.             ],
  6730.             'fill'=>[
  6731.                 'fillType' => Fill::FILL_SOLID,
  6732.                 'startColor' => [
  6733.                     'rgb' => '002060'
  6734.                 ]
  6735.             ],
  6736.         ];
  6737.         $tableRand = [
  6738.             'fill'=>[
  6739.                 'fillType' => Fill::FILL_SOLID,
  6740.                 'startColor' => [
  6741.                     'rgb' => 'C8D6EE'
  6742.                 ]
  6743.             ],
  6744.         ];
  6745.         $sheet->setCellValue('A1',"Type de ligne")
  6746.             ->setCellValue('B1',"Code Sage")
  6747.             ->setCellValue('C1',"Code budgétaire")
  6748.             ->setCellValue('D1',"Code fournisseur Evalua")
  6749.             ->setCellValue('E1',"Valeur de charge ou investissement")
  6750.             ->setCellValue('F1',"Date comptable")
  6751.             ->setCellValue('G1',"Date d’échéance")
  6752.             ->setCellValue('H1',"Date de création dans ERPI")
  6753.             ->setCellValue('I1',"Montant HT")
  6754.             ->setCellValue('J1',"Montant TTC")
  6755.             ->setCellValue('K1',"taux de TVA")
  6756.             ->setCellValue('L1',"Montant à régler")
  6757.             ->setCellValue('M1',"Référence facture fournisseur")
  6758.             ->setCellValue('N1',"Compteur ERPI pièce")
  6759.             ->setCellValue('O1',"Compteur ERPI écritures")
  6760.             ->setCellValue('P1',"Commentaire comptable")
  6761.             ->setCellValue('Q1',"Code projet")
  6762.             ->setCellValue('R1',"libellé projet")
  6763.             ->setCellValue('S1',"Compteur facture associée")
  6764.             ->setCellValue('T1',"Autoliquidation")
  6765.             ->setCellValue('U1',"Montant TVA");
  6766.         // Borders a2 z2
  6767.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6768.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6769.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6770.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6771.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6772.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6773.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6774.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6775.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6776.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6777.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6778.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6779.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6780.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6781.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6782.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6783.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6784.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6785.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6786.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6787.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  6788.         //width
  6789.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  6790.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  6791.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  6792.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  6793.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  6794.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  6795.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  6796.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  6797.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  6798.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  6799.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  6800.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  6801.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  6802.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  6803.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  6804.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  6805.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  6806.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  6807.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  6808.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  6809.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(25);
  6810.         $spreadsheet->getActiveSheet()->getStyle('A1:U1')->applyFromArray($tableHead2);
  6811.         //loop through the data
  6812.         //current row
  6813.         $row=2;
  6814.         foreach($arrays as $array){
  6815.             $spreadsheet->getActiveSheet()
  6816.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  6817.                 ->setCellValue('B'.$row , $array['Code Sage'])
  6818.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  6819.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  6820.                 ->setCellValue('E'.$row , $array['Acompte pour une charge'])
  6821.                 ->setCellValue('F'.$row , $array['Date comptable'])
  6822.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  6823.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  6824.                 ->setCellValue('I'.$row , $array['Montant HT'])
  6825.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  6826.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  6827.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  6828.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  6829.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  6830.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  6831.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  6832.                 ->setCellValue('Q'.$row , $array['Code projet'])
  6833.                 ->setCellValue('R'.$row , $array['libellé projet'])
  6834.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  6835.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  6836.                 ->setCellValue('U'.$row , $array['Montant TVA'])
  6837.             ;
  6838.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6839.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6840.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6841.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6842.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6843.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6844.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6845.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6846.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6847.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6848.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6849.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6850.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6851.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6852.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6853.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6854.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6855.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6856.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6857.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6858.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  6859.             $row++;
  6860.         }
  6861.         $firstRow=1;
  6862.         $lastRow=$row-1;
  6863.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  6864.         $writer = new Csv($spreadsheet);
  6865.         $writer->setDelimiter('|');
  6866.         $writer->setEnclosure('');
  6867.         $writer->setUseBOM(false);
  6868. //        $writer->setOutputEncoding('UTF-8');
  6869.         $writer->save($file);
  6870.         if($isNotSend){
  6871.         }else{
  6872.             $this->sendToServeur($fileName ,'/altarea/comptable',$this->params->get('comptable_altarea_directory'));
  6873.         }
  6874.         return $file;
  6875.     }
  6876.     public function getC4ReglementsExport($date){
  6877.         $factures = $this->em->getRepository(FactureFinance::class)->searchFacturePayee($date);
  6878.         $arrays = [];
  6879.         $i = 0;
  6880.         foreach ($factures as $facture){
  6881.             $banqueFournisseur = '';
  6882.             $ibanFournisseur = '';
  6883.             $bicFournisseur = '';
  6884.             $codePaysFournisseur = '';
  6885.             if ($facture->getFournisseur()) {
  6886.                 if($facture->getRib()) {
  6887.                     $fournisseurBanque = $facture->getRib();
  6888.                 }else {
  6889.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  6890.                 }
  6891.                 if (!$fournisseurBanque) {
  6892.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  6893.                 }
  6894.                 if ($fournisseurBanque) {
  6895.                     $banqueFournisseur = $fournisseurBanque->getBanque();
  6896.                     $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  6897.                     $bicFournisseur = $fournisseurBanque->getBic();
  6898.                 }
  6899.                 $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  6900.             }
  6901. //            $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  6902.             $spvName = '';
  6903.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  6904.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  6905.             $classification = $facture->getClassification();
  6906.             $dateComptable = $facture->getDate()?$facture->getDate()->format('d/m/Y'):'';
  6907.             $dateEcheance = '';
  6908.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  6909.             $numeroFacture = $facture->getNumeroFacture();
  6910. //            if(count($facture->getProjectFactureFinance())>1){
  6911. //                foreach ($facture->getProjectFactureFinance() as $projectFinance){
  6912. //                    $arrays[$i]['Type de ligne'] = 'Reglement';
  6913. //                    $arrays[$i]['Code Société'] = $spvName;
  6914. //                    $arrays[$i]['Code Sage'] = $spvCodeSage;
  6915. //                    $arrays[$i]['Code budgétaire'] = $facture->getClassification();
  6916. //                    $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6917. //                    $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()]:'';
  6918. //                    $arrays[$i]['Date comptable'] = $dateComptable;
  6919. //                    $arrays[$i]['Date d’échéance'] = $dateEcheance;
  6920. //                    $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6921. //                    $arrays[$i]['Montant HT'] = (float)$projectFinance->getMontantHt();
  6922. //                    if($facture->getTauxTva()){
  6923. //                        $tva = (float)$facture->getTauxTva();
  6924. //                    }else{
  6925. //                        $tva = 20;
  6926. //                    }
  6927. //                    $arrays[$i]['Montant TTC'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  6928. //                    $arrays[$i]['taux de TVA'] = $tva;
  6929. //                    $arrays[$i]['Montant à régler'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  6930. //                    $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6931. //                    $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  6932. ////                    $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  6933. ////                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6934. //
  6935. //                    $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$projectFinance->getProject());
  6936. //                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  6937. //
  6938. //                    if($facture->getIsAvoir()){
  6939. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  6940. //                        $a = count($avoirs);
  6941. //                        $b = 1;
  6942. //                        $avoirNum = '';
  6943. //                        foreach ($avoirs as $item){
  6944. //                            if($b == $a){
  6945. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  6946. //                            }else{
  6947. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  6948. //                            }
  6949. //                            $b++;
  6950. //                        }
  6951. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  6952. //                    }else{
  6953. //                        $arrays[$i]['Commentaire comptable'] = $facture->getCommentComptable();
  6954. //                    }
  6955. //                    $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  6956. //                    $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  6957. //                    $arrays[$i]['Compteur facture associée'] = $numeroFacture;
  6958. //                    $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  6959. //                    $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  6960. //                    $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  6961. //                    $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  6962. //                    $i++;
  6963. //                }
  6964. //            }else{
  6965.                 if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  6966.                     foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  6967.                         $arrays[$i]['Type de ligne'] = 'Reglement';
  6968.                         $arrays[$i]['Code Société'] = $spvName;
  6969.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  6970.                         $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  6971.                         $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  6972.                         $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  6973.                         $arrays[$i]['Date comptable'] = $dateComptable;
  6974.                         $arrays[$i]['Date d’échéance'] = $dateEcheance;
  6975.                         $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  6976.                         $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  6977.                         $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  6978.                         $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  6979.                         $arrays[$i]['Montant à régler'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  6980. //                    $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  6981.                         $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  6982.                         $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  6983.                         $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  6984.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  6985.                         if($facture->getIsAvoir()){
  6986.                             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  6987.                             $a = count($avoirs);
  6988.                             $b = 1;
  6989.                             $avoirNum = '';
  6990.                             foreach ($avoirs as $item){
  6991.                                 if($b == $a){
  6992.                                     $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  6993.                                 }else{
  6994.                                     $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  6995.                                 }
  6996.                                 $b++;
  6997.                             }
  6998.                             $arrays[$i]['Commentaire comptable'] = substr($avoirNum, 0, 127) ;
  6999.                         }else{
  7000.                             $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  7001.                         }
  7002.                         $arrays[$i]['Code projet'] = '';
  7003.                         $arrays[$i]['libellé projet'] = '';
  7004.                         $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  7005.                         $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  7006.                         $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  7007.                         $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  7008.                         $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  7009.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  7010.                         $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  7011.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  7012.                         $i++;
  7013.                     }
  7014.                 }
  7015.                 else{
  7016.                     $arrays[$i]['Type de ligne'] = 'Reglement';
  7017.                     $arrays[$i]['Code Société'] = $spvName;
  7018.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  7019.                     $arrays[$i]['Code budgétaire'] = $classification;
  7020.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  7021.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  7022.                     $arrays[$i]['Date comptable'] = $dateComptable;
  7023.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  7024.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  7025.                     $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  7026.                     $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  7027.                     $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  7028.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  7029.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  7030.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  7031.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndNotTva($facture);
  7032.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  7033.                     if($facture->getIsAvoir()){
  7034.                         $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  7035.                         $a = count($avoirs);
  7036.                         $b = 1;
  7037.                         $avoirNum = '';
  7038.                         foreach ($avoirs as $item){
  7039.                             if($b == $a){
  7040.                                 $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir();
  7041.                             }else{
  7042.                                 $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir()." / ";
  7043.                             }
  7044.                             $b++;
  7045.                         }
  7046.                         $arrays[$i]['Commentaire comptable'] = substr($avoirNum, 0, 127);
  7047.                     }else{
  7048.                         $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  7049.                     }
  7050. //                    foreach ($facture->getProjectFactureFinance() as $projectFinance){
  7051. //                        $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  7052. //                        $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  7053. //                    }
  7054.                     $arrays[$i]['Code projet'] = '';
  7055.                     $arrays[$i]['libellé projet'] =  '';
  7056.                     $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  7057.                     $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  7058.                     $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  7059.                     $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  7060.                     $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  7061.                     $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  7062.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  7063.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  7064.                     $i++;
  7065.                 }
  7066. //            }
  7067.         }
  7068.         return $arrays;
  7069.     }
  7070.     public function c4ReglementsExportXls($arrays,$isNotSend = false,$date = false){
  7071.         if($date){
  7072.             $dateNow = $date;
  7073.         }else{
  7074.             $dateNow = new \DateTime();
  7075.         }
  7076.         $dateNowStr = '_'.$dateNow->format('Ymd').'_'.$dateNow->format('H').'h'.$dateNow->format('i');
  7077.         $fileName = "C4_reglements".$dateNowStr.".csv";
  7078.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  7079.         if(file_exists($file)){
  7080.             $filesystem = new Filesystem();
  7081.             $filesystem->remove($file);
  7082.         }
  7083.         $spreadsheet = new Spreadsheet();
  7084.         $sheet = $spreadsheet->getActiveSheet();
  7085.         // Head 2
  7086.         $tableHead2 = [
  7087.             'font'=>[
  7088.                 'color'=>[
  7089.                     'rgb'=>'ffffff'
  7090.                 ],
  7091.                 'bold'=>true,
  7092.                 'size'=>12
  7093.             ],
  7094.             'fill'=>[
  7095.                 'fillType' => Fill::FILL_SOLID,
  7096.                 'startColor' => [
  7097.                     'rgb' => '002060'
  7098.                 ]
  7099.             ],
  7100.         ];
  7101.         $tableRand = [
  7102.             'fill'=>[
  7103.                 'fillType' => Fill::FILL_SOLID,
  7104.                 'startColor' => [
  7105.                     'rgb' => 'C8D6EE'
  7106.                 ]
  7107.             ],
  7108.         ];
  7109.         $sheet->setCellValue('A1',"Type de ligne")
  7110.             ->setCellValue('B1',"Code Sage")
  7111.             ->setCellValue('C1',"Code budgétaire")
  7112.             ->setCellValue('D1',"Code fournisseur Evalua")
  7113.             ->setCellValue('E1',"Valeur de charge ou investissement")
  7114.             ->setCellValue('F1',"Date comptable")
  7115.             ->setCellValue('G1',"Date d’échéance")
  7116.             ->setCellValue('H1',"Date de création dans ERPI")
  7117.             ->setCellValue('I1',"Montant HT")
  7118.             ->setCellValue('J1',"Montant TTC")
  7119.             ->setCellValue('K1',"taux de TVA")
  7120.             ->setCellValue('L1',"Montant à régler")
  7121.             ->setCellValue('M1',"Référence facture fournisseur")
  7122.             ->setCellValue('N1',"Compteur ERPI pièce")
  7123.             ->setCellValue('O1',"Compteur ERPI écritures")
  7124.             ->setCellValue('P1',"Commentaire comptable")
  7125.             ->setCellValue('Q1',"Code projet")
  7126.             ->setCellValue('R1',"libellé projet")
  7127.             ->setCellValue('S1',"Compteur facture associée")
  7128.             ->setCellValue('T1',"IBAN fournisseur");
  7129.         // Borders a2 z2
  7130.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7131.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7132.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7133.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7134.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7135.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7136.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7137.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7138.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7139.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7140.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7141.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7142.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7143.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7144.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7145.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7146.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7147.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7148.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7149.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7150.         //width
  7151.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  7152.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  7153.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  7154.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  7155.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  7156.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  7157.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  7158.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  7159.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  7160.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  7161.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  7162.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  7163.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  7164.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  7165.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  7166.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  7167.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  7168.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  7169.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  7170.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  7171.         $spreadsheet->getActiveSheet()->getStyle('A1:V1')->applyFromArray($tableHead2);
  7172.         //loop through the data
  7173.         //current row
  7174.         $row=2;
  7175.         foreach($arrays as $array){
  7176.             $spreadsheet->getActiveSheet()
  7177.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  7178.                 ->setCellValue('B'.$row , $array['Code Sage'])
  7179.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  7180.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  7181.                 ->setCellValue('E'.$row , $array['Facture de charge'])
  7182.                 ->setCellValue('F'.$row , $array['Date comptable'])
  7183.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  7184.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  7185.                 ->setCellValue('I'.$row , $array['Montant HT'])
  7186.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  7187.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  7188.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  7189.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  7190.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  7191.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  7192.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  7193.                 ->setCellValue('Q'.$row , $array['Code projet'])
  7194.                 ->setCellValue('R'.$row , $array['libellé projet'])
  7195.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  7196.                 ->setCellValue('T'.$row , $array['ibanFournisseur'])
  7197.             ;
  7198.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7199.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7200.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7201.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7202.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7203.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7204.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7205.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7206.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7207.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7208.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7209.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7210.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7211.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7212.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7213.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7214.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7215.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7216.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7217.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7218.             $row++;
  7219.         }
  7220.         $firstRow=1;
  7221.         $lastRow=$row-1;
  7222.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":V".$lastRow);
  7223.         $writer = new Csv($spreadsheet);
  7224.         $writer->setDelimiter('|');
  7225.         $writer->setEnclosure('');
  7226.         $writer->setUseBOM(false);
  7227. //        $writer->setOutputEncoding('UTF-8');
  7228.         $writer->save($file);
  7229.         if($isNotSend){
  7230.         }else{
  7231.             $this->sendToServeur($fileName ,'/altarea/comptable',$this->params->get('comptable_altarea_directory'));
  7232.         }
  7233.         return $file;
  7234.     }
  7235.     public function getFacturesByRequestSelectAll($request){
  7236.         $search = $request->get('search');
  7237.         $spv = $request->get('spv');
  7238.         $fournisseur = $request->get('fournisseur');
  7239.         $status = $request->get('statusFactureFinance');
  7240.         $btnTypeTab = $request->get('btnTypeTab');
  7241.         $responsableProject = $request->get('responsableProject');
  7242.         $responsableDevProject = $request->get('responsableDevProject');
  7243.         $paiementFactureDate = $request->get('paiementFactureDate');
  7244.         $paiementFactureDate1 = $request->get('paiementFactureDate1') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate1')) : null ;
  7245.         $paiementFactureDate2 = $request->get('paiementFactureDate2') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate2')) : null;
  7246.         $filters = [
  7247.             'query' => trim(@$search['value']),
  7248.             'spv' => $spv,
  7249.             'fournisseur' => $fournisseur,
  7250.             'status' => $status,
  7251.             'paiementFactureDate' => $paiementFactureDate,
  7252.             'btnTypeTab' => $btnTypeTab,
  7253.             'paiementFactureDate1' => $paiementFactureDate1,
  7254.             'paiementFactureDate2' => $paiementFactureDate2,
  7255.             'responsableProject' => $responsableProject,
  7256.             'responsableDevProject' => $responsableDevProject
  7257.         ];
  7258.         $factureFinances = $this->em->getRepository(\App\Entity\FactureFinance::class)->search($filters);
  7259.         return $factureFinances ;
  7260.     }
  7261.     public function sendToServeur($nameFile ,$pathServeur,$pathLocal){
  7262.         $ftp_server="162.19.120.192";
  7263.         $ftp_user_name="altarea-prod";
  7264.         $ftp_user_pass="E_AeX_red2xi2vf1";
  7265.         $conn_id = ftp_ssl_connect($ftp_server);
  7266.         $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
  7267.         ftp_pasv($conn_id, true) or die("Cannot switch to passive mode");
  7268.         if (ftp_put($conn_id, $pathServeur.'/'.$nameFile , $pathLocal.'/'.$nameFile, FTP_BINARY)) {
  7269.             return true;
  7270.         } else {
  7271.             return false;
  7272.         }
  7273.     }
  7274.     public function addPdFactureAssocieBrouillon($array){
  7275.         $tab = [];
  7276.         if($array){
  7277.             foreach ($array as $item){
  7278.                 $tokenFile = $item['tokenFile'];
  7279.                 $tokenFacture= $item['tokenFacture'];
  7280.                 $docUpload = $this->em->getRepository(DocUpload::class)->findOneBy(['token' => $tokenFile]);
  7281.                 $factureBrouillon = $this->em->getRepository(FactureFinanceBrouillon::class)->findOneBy(['token' => $tokenFacture]);
  7282.                 if($docUpload && $factureBrouillon){
  7283.                     $factureBrouillon->setFileFacture($docUpload);
  7284.                     $this->em->persist($factureBrouillon);
  7285.                     $this->em->flush();
  7286.                     $tab[] = $factureBrouillon->getToken();
  7287.                 }
  7288.             }
  7289.         }
  7290.         return $tab;
  7291.     }
  7292.     public function supprimeFactureBrouillon($request,$token)
  7293.     {
  7294.         $facture = $this->em->getRepository(FactureFinanceBrouillon::class)->findOneBy(['token'=>$token]);
  7295.         if($facture){
  7296.             $facture->setStatus(FactureFinance::STATUS_Brouillon_delete);
  7297.             $this->em->persist($facture);
  7298.             $this->em->flush();
  7299.         }
  7300.         return [
  7301.             'success' => true,
  7302.         ];
  7303.     }
  7304.     public function getFacturesBrouillonByRequestSelectAll($request){
  7305.         $search = $request->get('search');
  7306.         $spv = $request->get('spv');
  7307.         $fournisseur = $request->get('fournisseur');
  7308.         $status = $request->get('statusFactureFinance');
  7309.         $btnTypeTab = $request->get('btnTypeTab');
  7310.         $responsableProject = $request->get('responsableProject');
  7311.         $responsableDevProject = $request->get('responsableDevProject');
  7312.         $paiementFactureDate = $request->get('paiementFactureDate');
  7313.         $paiementFactureDate1 = $request->get('paiementFactureDate1') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate1')) : null ;
  7314.         $paiementFactureDate2 = $request->get('paiementFactureDate2') ?  \DateTime::createFromFormat('Y-m-d', $request->get('paiementFactureDate2')) : null;
  7315.         $filters = [
  7316.             'query' => trim(@$search['value']),
  7317.             'spv' => $spv,
  7318.             'fournisseur' => $fournisseur,
  7319.             'status' => $status,
  7320.             'paiementFactureDate' => $paiementFactureDate,
  7321.             'btnTypeTab' => $btnTypeTab,
  7322.             'paiementFactureDate1' => $paiementFactureDate1,
  7323.             'paiementFactureDate2' => $paiementFactureDate2,
  7324.             'responsableProject' => $responsableProject,
  7325.             'responsableDevProject' => $responsableDevProject
  7326.         ];
  7327.         $factureFinances = $this->em->getRepository(\App\Entity\FactureFinanceBrouillon::class)->search($filters);
  7328.         return $factureFinances ;
  7329.     }
  7330.     public function getC1FacturesExportDateRange($dateStart,$dateEnd){
  7331.         $factures = $this->em->getRepository(FactureFinance::class)->searchFactureValideDateRange($dateStart,$dateEnd);
  7332.         $arrays = [];
  7333.         $i = 0;
  7334.         foreach ($factures as $facture){
  7335.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  7336.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  7337.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  7338.             $classification = $facture->getClassification();
  7339.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  7340.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  7341.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  7342.             $numeroFacture = $facture->getNumeroFacture();
  7343.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  7344.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  7345.                     $arrays[$i]['Type de ligne'] = 'Facture';
  7346.                     $arrays[$i]['Code Société'] = $spvName;
  7347.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  7348.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  7349.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  7350.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  7351.                     $arrays[$i]['Date comptable'] = $dateComptable;
  7352.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  7353.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  7354.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  7355.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  7356.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  7357. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  7358.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  7359.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  7360.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  7361.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  7362.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  7363.                     $arrays[$i]['Commentaire comptable'] = $facture->getCommentComptable();
  7364.                     $arrays[$i]['Code projet'] = '';
  7365.                     $arrays[$i]['libellé projet'] = '';
  7366.                     $arrays[$i]['Compteur facture associée'] = '';
  7367.                     $arrays[$i]['Autoliquidation'] = 0;
  7368.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  7369.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  7370.                     $i++;
  7371.                     if(count($facture->getProjectFactureFinance())>0){
  7372.                         foreach ($facture->getProjectFactureFinance() as $project){
  7373.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  7374.                             $arrays[$i]['Code Société'] = '';
  7375.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  7376.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  7377.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  7378.                             $arrays[$i]['Facture de charge'] = '';
  7379.                             $arrays[$i]['Date comptable'] = '';
  7380.                             $arrays[$i]['Date d’échéance'] = '';
  7381.                             $arrays[$i]['Date de création dans ERPI'] = '';
  7382.                             $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$tvaMultiple->getMontantHt()),2,'.','');
  7383.                             $arrays[$i]['Montant TTC'] = '';
  7384.                             $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$tvaMultiple->getTauxTva()),2,'.','');
  7385.                             $arrays[$i]['Montant à régler'] = '';
  7386.                             $arrays[$i]['Référence facture fournisseur'] = '';
  7387.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  7388.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  7389.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  7390.                             $arrays[$i]['Commentaire comptable'] = '';
  7391.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  7392.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  7393.                             $arrays[$i]['Compteur facture associée'] = '';
  7394.                             $arrays[$i]['Autoliquidation'] = 0;
  7395.                             $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  7396.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  7397.                             $i++;
  7398.                         }
  7399.                     }
  7400.                 }
  7401.             }
  7402.             else{
  7403.                 $arrays[$i]['Type de ligne'] = 'Facture';
  7404.                 $arrays[$i]['Code Société'] = $spvName;
  7405.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  7406.                 $arrays[$i]['Code budgétaire'] = $classification;
  7407.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  7408.                 $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  7409.                 $arrays[$i]['Date comptable'] = $dateComptable;
  7410.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  7411.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  7412.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  7413.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  7414.                 $arrays[$i]['taux de TVA'] =  number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  7415.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  7416.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  7417.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  7418.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  7419.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  7420.                 $arrays[$i]['Commentaire comptable'] = $facture->getCommentComptable();
  7421.                 $arrays[$i]['Code projet'] = '';
  7422.                 $arrays[$i]['libellé projet'] = '';
  7423.                 $arrays[$i]['Compteur facture associée'] = '';
  7424.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  7425.                 if($facture->getAutoliquidation() == 1){
  7426.                     $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  7427.                 }else{
  7428.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  7429.                 }
  7430.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  7431.                 $i++;
  7432.                 if(count($facture->getProjectFactureFinance())>0){
  7433.                     foreach ($facture->getProjectFactureFinance() as $project){
  7434.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  7435.                         $arrays[$i]['Code Société'] = '';
  7436.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  7437.                         $arrays[$i]['Code budgétaire'] = $classification;
  7438.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  7439.                         $arrays[$i]['Facture de charge'] = '';
  7440.                         $arrays[$i]['Date comptable'] = '';
  7441.                         $arrays[$i]['Date d’échéance'] = '';
  7442.                         $arrays[$i]['Date de création dans ERPI'] = '';
  7443.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  7444.                         $arrays[$i]['Montant TTC'] = '';
  7445.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  7446.                         $arrays[$i]['Montant à régler'] = '';
  7447.                         $arrays[$i]['Référence facture fournisseur'] = '';
  7448.                         $arrays[$i]['Compteur ERPI pièce'] =  $facture->getCompteurErpiPiece();
  7449.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  7450.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  7451.                         $arrays[$i]['Commentaire comptable'] = '';
  7452.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  7453.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  7454.                         $arrays[$i]['Compteur facture associée'] = '';
  7455.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  7456.                         if($facture->getAutoliquidation() == 1){
  7457.                             $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  7458.                         }else{
  7459.                             $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  7460.                         }
  7461.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  7462.                         $i++;
  7463.                     }
  7464.                 }
  7465.             }
  7466.         }
  7467.         return $arrays;
  7468.     }
  7469.     public function c1FacturesExportXlsDateRange($arrays,$dateStart,$dateEnd){
  7470.         $dateNow = new \DateTime();
  7471.         $dateNowStr = '_'.$dateStart->format('Ymd').'_'.$dateStart->format('H').'h'.$dateStart->format('i').'___'.$dateEnd->format('Ymd').'_'.$dateEnd->format('H').'h'.$dateEnd->format('i');
  7472.         $fileName = "C1_factures".$dateNowStr.".csv";
  7473.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  7474.         if(file_exists($file)){
  7475.             $filesystem = new Filesystem();
  7476.             $filesystem->remove($file);
  7477.         }
  7478.         $spreadsheet = new Spreadsheet();
  7479.         $sheet = $spreadsheet->getActiveSheet();
  7480.         // Head 2
  7481.         $tableHead2 = [
  7482.             'font'=>[
  7483.                 'color'=>[
  7484.                     'rgb'=>'ffffff'
  7485.                 ],
  7486.                 'bold'=>true,
  7487.                 'size'=>12
  7488.             ],
  7489.             'fill'=>[
  7490.                 'fillType' => Fill::FILL_SOLID,
  7491.                 'startColor' => [
  7492.                     'rgb' => '002060'
  7493.                 ]
  7494.             ],
  7495.         ];
  7496.         $tableRand = [
  7497.             'fill'=>[
  7498.                 'fillType' => Fill::FILL_SOLID,
  7499.                 'startColor' => [
  7500.                     'rgb' => 'C8D6EE'
  7501.                 ]
  7502.             ],
  7503.         ];
  7504.         $sheet->setCellValue('A1',"Type de ligne")
  7505.             ->setCellValue('B1',"Code Sage")
  7506.             ->setCellValue('C1',"Code budgétaire")
  7507.             ->setCellValue('D1',"Code fournisseur Evalua")
  7508.             ->setCellValue('E1',"Valeur de charge ou investissement")
  7509.             ->setCellValue('F1',"Date comptable")
  7510.             ->setCellValue('G1',"Date d’échéance")
  7511.             ->setCellValue('H1',"Date de création dans ERPI")
  7512.             ->setCellValue('I1',"Montant HT")
  7513.             ->setCellValue('J1',"Montant TTC")
  7514.             ->setCellValue('K1',"taux de TVA")
  7515.             ->setCellValue('L1',"Montant à régler")
  7516.             ->setCellValue('M1',"Référence facture fournisseur")
  7517.             ->setCellValue('N1',"Compteur ERPI pièce")
  7518.             ->setCellValue('O1',"Compteur ERPI écritures")
  7519.             ->setCellValue('P1',"Commentaire comptable")
  7520.             ->setCellValue('Q1',"Code projet")
  7521.             ->setCellValue('R1',"libellé projet")
  7522.             ->setCellValue('S1',"Compteur facture associée")
  7523.             ->setCellValue('T1',"Autoliquidation")
  7524.             ->setCellValue('U1',"Montant TVA");
  7525.         // Borders a2 z2
  7526.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7527.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7528.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7529.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7530.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7531.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7532.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7533.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7534.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7535.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7536.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7537.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7538.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7539.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7540.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7541.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7542.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7543.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7544.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7545.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7546.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7547.         //width
  7548.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  7549.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  7550.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  7551.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  7552.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  7553.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  7554.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  7555.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  7556.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  7557.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  7558.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  7559.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  7560.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  7561.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  7562.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  7563.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  7564.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  7565.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  7566.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  7567.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  7568.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(25);
  7569.         $spreadsheet->getActiveSheet()->getStyle('A1:U1')->applyFromArray($tableHead2);
  7570.         //loop through the data
  7571.         //current row
  7572.         $row=2;
  7573.         foreach($arrays as $array){
  7574.             $spreadsheet->getActiveSheet()
  7575.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  7576.                 ->setCellValue('B'.$row , $array['Code Sage'])
  7577.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  7578.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  7579.                 ->setCellValue('E'.$row , $array['Facture de charge'])
  7580.                 ->setCellValue('F'.$row , $array['Date comptable'])
  7581.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  7582.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  7583.                 ->setCellValue('I'.$row , $array['Montant HT'])
  7584.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  7585.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  7586.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  7587.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  7588.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  7589.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  7590.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  7591.                 ->setCellValue('Q'.$row , $array['Code projet'])
  7592.                 ->setCellValue('R'.$row , $array['libellé projet'])
  7593.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  7594.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  7595.                 ->setCellValue('U'.$row , $array['Montant TVA'])
  7596.             ;
  7597.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7598.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7599.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7600.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7601.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7602.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7603.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7604.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7605.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7606.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7607.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7608.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7609.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7610.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7611.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7612.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7613.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7614.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7615.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7616.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7617.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7618.             $row++;
  7619.         }
  7620.         $firstRow=1;
  7621.         $lastRow=$row-1;
  7622.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  7623.         $writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
  7624.         $writer->setDelimiter('|');
  7625.         $writer->setEnclosure('');
  7626.         $writer->setUseBOM(false);
  7627.         $writer->save($file);
  7628.         return $file;
  7629.     }
  7630.     public function getC2AvoirExportDateRange($dateStart,$dateEnd){
  7631.         $avoirs = $this->em->getRepository(Avoir::class)->searchAvoirValideDateRange($dateStart,$dateEnd);
  7632.         $arrays = [];
  7633.         $i = 0;
  7634.         foreach ($avoirs as $avoir){
  7635.             $spvName = $avoir->getSpv()?$avoir->getSpv()->getName():'';
  7636.             $spvCodeSage = $avoir->getSpv()?$avoir->getSpv()->getCodeSage():'';
  7637.             $fournisseurCode = $avoir->getFournisseur()?$avoir->getFournisseur()->getCodeFournisseur():'';
  7638.             $classification = $avoir->getClassification();
  7639.             $dateComptable = $avoir->getDateAvoir()?$avoir->getDateAvoir()->format('d/m/Y'):'';
  7640.             $dateEcheance = '';
  7641.             $dateCreation = $avoir->getCreatedAt()?$avoir->getCreatedAt()->format('d/m/Y'):'';
  7642.             $numeroFacture = $avoir->getNumeroAvoir();
  7643.             if(count($avoir->getTvaAvoir())>0 && $avoir->getTauxTva() == 0){
  7644.                 foreach ($avoir->getTvaAvoir() as $tvaMultiple){
  7645.                     $arrays[$i]['Type de ligne'] = 'Avoir';
  7646.                     $arrays[$i]['Code Société'] = $spvName;
  7647.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  7648.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  7649.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  7650.                     $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  7651.                     $arrays[$i]['Date comptable'] = $dateComptable;
  7652.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  7653.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  7654.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  7655.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  7656.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  7657.                     $arrays[$i]['Montant à régler'] = '';
  7658.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  7659.                     $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  7660.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTva($avoir,$tvaMultiple);
  7661.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  7662.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($avoir->getNote(), 0, 127));
  7663.                     $arrays[$i]['Code projet'] = '';
  7664.                     $arrays[$i]['libellé projet'] = '';
  7665.                     $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  7666.                     $factureAssocie = '';
  7667.                     if ($avoirFactures) {
  7668.                         $h = 1;
  7669.                         $total = count($avoirFactures);
  7670.                         foreach ($avoirFactures as $avoirFacture) {
  7671.                             if ($total == $h) {
  7672.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  7673.                             } else {
  7674.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  7675.                             }
  7676.                             $h++;
  7677.                         }
  7678.                     }
  7679.                     $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  7680.                     $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  7681.                     if($avoir->getAutoliquidation() == 1){
  7682.                         $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  7683.                     }else{
  7684.                         $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  7685.                     }
  7686.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  7687.                     $i++;
  7688.                     if(count($avoir->getProjectAvoir())>0){
  7689.                         foreach ($avoir->getProjectAvoir() as $project){
  7690.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  7691.                             $arrays[$i]['Code Société'] = '';
  7692.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  7693.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  7694.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  7695.                             $arrays[$i]['Avoir de charge'] = '';
  7696.                             $arrays[$i]['Date comptable'] = '';
  7697.                             $arrays[$i]['Date d’échéance'] = '';
  7698.                             $arrays[$i]['Date de création dans ERPI'] = '';
  7699. //                            if (count($avoir->getProjectAvoir()) == 1) {
  7700. //                                $arrays[$i]['Montant HT'] = (float)$avoir->getMonatantHt();
  7701. //                            } else {
  7702. //                                $arrays[$i]['Montant HT'] = (float)$project->getMontantHt();
  7703. //                            }
  7704. //                            $arrays[$i]['Montant TTC'] = '';
  7705. //                            $arrays[$i]['taux de TVA'] = '';
  7706.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  7707.                             $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  7708.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  7709.                             $arrays[$i]['Montant à régler'] = '';
  7710.                             $arrays[$i]['Référence facture fournisseur'] = '';
  7711.                             $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  7712.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTvaProject($avoir,$tvaMultiple,$project->getProject());
  7713.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  7714.                             $arrays[$i]['Commentaire comptable'] = '';
  7715.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  7716.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  7717.                             $arrays[$i]['Compteur facture associée'] = '';
  7718.                             $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  7719.                             if($avoir->getAutoliquidation() == 1){
  7720.                                 $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  7721.                             }else{
  7722.                                 $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  7723.                             }
  7724.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  7725.                             $i++;
  7726.                         }
  7727.                     }
  7728.                 }
  7729.             }
  7730.             else {
  7731.                 $arrays[$i]['Type de ligne'] = 'Avoir';
  7732.                 $arrays[$i]['Code Société'] = $spvName;
  7733.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  7734.                 $arrays[$i]['Code budgétaire'] = $classification;
  7735.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  7736.                 $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]) ? self::CHARGE_INVESTISSEMENT_DEPENSE[$classification] : '';
  7737.                 $arrays[$i]['Date comptable'] = $dateComptable;
  7738.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  7739.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  7740.                 $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  7741.                 if($avoirs){
  7742.                     $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  7743.                     $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  7744.                     if($avoir->getAutoliquidation()){
  7745.                         $montantHt = $montantTtc;
  7746.                     }else{
  7747.                         $montantHt = $montantTtc / (1 + ($tauxTva/100));
  7748.                     }
  7749.                     $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  7750.                     $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  7751.                     $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  7752.                     $tvaMontant = $tauxTva * $montantHt / 100;
  7753.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  7754.                 }else{
  7755.                     $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$avoir->getMonatantHt()),2,'.','');
  7756.                     $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$avoir->getMonatantTtc()),2,'.','');
  7757.                     $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$avoir->getTauxTva()),2,'.','');
  7758.                     if($avoir->getAutoliquidation() == 1){
  7759.                         $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $avoir->getTauxTva())['tva'];
  7760.                     }else{
  7761.                         $tvaMontant = (float)str_replace(',','.',$avoir->getTauxTva()) * (float)str_replace(',','.',$avoir->getMonatantHt()) / 100;
  7762.                     }
  7763.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  7764.                 }
  7765.                 $arrays[$i]['Montant à régler'] = '';
  7766.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  7767.                 $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  7768.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTva($avoir);
  7769.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  7770.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($avoir->getNote(), 0, 127));
  7771.                 $arrays[$i]['Code projet'] = '';
  7772.                 $arrays[$i]['libellé projet'] = '';
  7773.                 $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  7774.                 $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  7775.                 $factureAssocie = '';
  7776.                 if ($avoirFactures) {
  7777.                     $h = 1;
  7778.                     $total = count($avoirFactures);
  7779.                     foreach ($avoirFactures as $avoirFacture) {
  7780.                         if ($total == $h) {
  7781.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  7782.                         } else {
  7783.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  7784.                         }
  7785.                         $h++;
  7786.                     }
  7787.                 }
  7788.                 $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  7789.                 $i++;
  7790.                 if (count($avoir->getProjectAvoir()) > 0) {
  7791.                     foreach ($avoir->getProjectAvoir() as $project) {
  7792.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  7793.                         $arrays[$i]['Code Société'] = '';
  7794.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  7795.                         $arrays[$i]['Code budgétaire'] = $classification;
  7796.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  7797.                         $arrays[$i]['Avoir de charge'] = '';
  7798.                         $arrays[$i]['Date comptable'] = '';
  7799.                         $arrays[$i]['Date d’échéance'] = '';
  7800.                         $arrays[$i]['Date de création dans ERPI'] = '';
  7801.                         if (count($avoir->getProjectAvoir()) == 1) {
  7802.                             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir->getId()]);
  7803.                             if ($avoirs) {
  7804.                                 $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  7805.                                 $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  7806.                                 if($avoir->getAutoliquidation()){
  7807.                                     $montantHt = $montantTtc;
  7808.                                 }else{
  7809.                                     $montantHt = $montantTtc / (1 + ($tauxTva/100));
  7810.                                 }
  7811.                                 $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  7812.                                 $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  7813.                                 $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  7814.                                 $tvaMontant = $tauxTva * $montantHt / 100;
  7815.                                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  7816.                             } else {
  7817.                                 $arrays[$i]['Montant HT'] = number_format((float)$avoir->getMonatantHt(),2,'.','');
  7818.                                 $arrays[$i]['Montant TTC'] = number_format((float)$avoir->getMonatantTtc(),2,'.','');
  7819.                                 $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  7820.                                 if($avoir->getAutoliquidation() == 1){
  7821.                                     $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $avoir->getTauxTva())['tva'];
  7822.                                 }else{
  7823.                                     $tvaMontant = (float)str_replace(',','.',$avoir->getTauxTva()) * (float)str_replace(',','.',$avoir->getMonatantHt()) / 100;
  7824.                                 }
  7825.                                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  7826.                             }
  7827.                         }else{
  7828.                             $montantHt = (float)str_replace(',','.',$avoir->getMonatantHt());
  7829.                             $tauxTva = $avoir->getTauxTva() && (float)$avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  7830.                             $arrays[$i]['Montant HT'] = number_format($montantHt,2,'.','');
  7831.                             $arrays[$i]['Montant TTC'] = number_format($montantHt + (1 *( $tauxTva/100)),2,'.','');
  7832.                             $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  7833.                             if($avoir->getAutoliquidation() == 1){
  7834.                                 $tvaMontant = $this->hTAndTTC($avoir->getMonatantTtc(), $tauxTva)['tva'];
  7835.                             }else{
  7836.                                 $tvaMontant = $tauxTva * $montantHt / 100;
  7837.                             }
  7838.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  7839.                         }
  7840.                         $arrays[$i]['Montant à régler'] = '';
  7841.                         $arrays[$i]['Référence facture fournisseur'] = '';
  7842.                         $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  7843.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTvaProject($avoir, $project->getProject());
  7844.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  7845.                         $arrays[$i]['Commentaire comptable'] = '';
  7846.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  7847.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  7848.                         $arrays[$i]['Compteur facture associée'] = '';
  7849.                         $arrays[$i]['Autoliquidation'] = $avoir->getAutoliquidation() ? 1 : 0;
  7850.                         $i++;
  7851.                     }
  7852.                 }
  7853.             }
  7854.         }
  7855.         return $arrays;
  7856.     }
  7857.     public function c2AvoirExportXlsDateRange($arrays,$dateStart,$dateEnd){
  7858.         $dateNow = new \DateTime();
  7859.         $dateNowStr = '_'.$dateStart->format('Ymd').'_'.$dateStart->format('H').'h'.$dateStart->format('i').'___'.$dateEnd->format('Ymd').'_'.$dateEnd->format('H').'h'.$dateEnd->format('i');
  7860.         $fileName = "C2_avoirs".$dateNowStr.".csv";
  7861.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  7862.         if(file_exists($file)){
  7863.             $filesystem = new Filesystem();
  7864.             $filesystem->remove($file);
  7865.         }
  7866.         $spreadsheet = new Spreadsheet();
  7867.         $sheet = $spreadsheet->getActiveSheet();
  7868.         // Head 2
  7869.         $tableHead2 = [
  7870.             'font'=>[
  7871.                 'color'=>[
  7872.                     'rgb'=>'ffffff'
  7873.                 ],
  7874.                 'bold'=>true,
  7875.                 'size'=>12
  7876.             ],
  7877.             'fill'=>[
  7878.                 'fillType' => Fill::FILL_SOLID,
  7879.                 'startColor' => [
  7880.                     'rgb' => '002060'
  7881.                 ]
  7882.             ],
  7883.         ];
  7884.         $tableRand = [
  7885.             'fill'=>[
  7886.                 'fillType' => Fill::FILL_SOLID,
  7887.                 'startColor' => [
  7888.                     'rgb' => 'C8D6EE'
  7889.                 ]
  7890.             ],
  7891.         ];
  7892.         $sheet->setCellValue('A1',"Type de ligne")
  7893.             ->setCellValue('B1',"Code Sage")
  7894.             ->setCellValue('C1',"Code budgétaire")
  7895.             ->setCellValue('D1',"Code fournisseur Evalua")
  7896.             ->setCellValue('E1',"Valeur de charge ou investissement")
  7897.             ->setCellValue('F1',"Date comptable")
  7898.             ->setCellValue('G1',"Date d’échéance")
  7899.             ->setCellValue('H1',"Date de création dans ERPI")
  7900.             ->setCellValue('I1',"Montant HT")
  7901.             ->setCellValue('J1',"Montant TTC")
  7902.             ->setCellValue('K1',"taux de TVA")
  7903.             ->setCellValue('L1',"Montant à régler")
  7904.             ->setCellValue('M1',"Référence facture fournisseur")
  7905.             ->setCellValue('N1',"Compteur ERPI pièce")
  7906.             ->setCellValue('O1',"Compteur ERPI écritures")
  7907.             ->setCellValue('P1',"Commentaire comptable")
  7908.             ->setCellValue('Q1',"Code projet")
  7909.             ->setCellValue('R1',"libellé projet")
  7910.             ->setCellValue('S1',"Compteur facture associée")
  7911.             ->setCellValue('T1',"Autoliquidation")
  7912.             ->setCellValue('U1',"Montant TVA");
  7913.         // Borders a2 z2
  7914.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7915.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7916.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7917.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7918.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7919.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7920.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7921.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7922.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7923.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7924.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7925.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7926.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7927.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7928.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7929.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7930.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7931.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7932.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7933.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7934.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  7935.         //width
  7936.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  7937.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  7938.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  7939.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  7940.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  7941.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  7942.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  7943.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  7944.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  7945.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  7946.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  7947.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  7948.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  7949.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  7950.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  7951.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  7952.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  7953.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  7954.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  7955.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  7956.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(25);
  7957.         $spreadsheet->getActiveSheet()->getStyle('A1:U1')->applyFromArray($tableHead2);
  7958.         //loop through the data
  7959.         //current row
  7960.         $row=2;
  7961.         foreach($arrays as $array){
  7962.             $spreadsheet->getActiveSheet()
  7963.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  7964.                 ->setCellValue('B'.$row , $array['Code Sage'])
  7965.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  7966.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  7967.                 ->setCellValue('E'.$row , $array['Avoir de charge'])
  7968.                 ->setCellValue('F'.$row , $array['Date comptable'])
  7969.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  7970.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  7971.                 ->setCellValue('I'.$row , $array['Montant HT'])
  7972.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  7973.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  7974.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  7975.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  7976.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  7977.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  7978.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  7979.                 ->setCellValue('Q'.$row , $array['Code projet'])
  7980.                 ->setCellValue('R'.$row , $array['libellé projet'])
  7981.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  7982.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  7983.                 ->setCellValue('U'.$row , $array['Montant TVA']);
  7984.             ;
  7985.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7986.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7987.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7988.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7989.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7990.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7991.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7992.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7993.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7994.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7995.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7996.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7997.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7998.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  7999.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8000.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8001.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8002.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8003.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8004.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8005.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8006.             $row++;
  8007.         }
  8008.         $firstRow=1;
  8009.         $lastRow=$row-1;
  8010.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  8011.         $writer = new Csv($spreadsheet);
  8012.         $writer->setDelimiter('|');
  8013.         $writer->setEnclosure('');
  8014.         $writer->setUseBOM(false);
  8015. //        $writer->setOutputEncoding('UTF-8');
  8016.         $writer->save($file);
  8017.         return $file;
  8018.     }
  8019.     public function getC3AcomptesExportDateRange($dateStart,$dateEnd){
  8020.         $factures = $this->em->getRepository(FactureFinance::class)->searchAcompteValideDateRange($dateStart,$dateEnd);
  8021.         $arrays = [];
  8022.         $i = 0;
  8023.         foreach ($factures as $facture){
  8024.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  8025.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  8026.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  8027.             $classification = $facture->getClassification();
  8028.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  8029.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  8030.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  8031.             $numeroFacture = $facture->getNumeroFacture();
  8032.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  8033.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  8034.                     $arrays[$i]['Type de ligne'] = 'Acompte';
  8035.                     $arrays[$i]['Code Société'] = $spvName;
  8036.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  8037.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  8038.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  8039.                     $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  8040.                     $arrays[$i]['Date comptable'] = $dateComptable;
  8041.                     $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  8042.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  8043.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  8044.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  8045.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  8046. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  8047.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  8048.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  8049.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  8050.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  8051.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  8052.                     $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  8053. //                    if($facture->getIsAvoir()){
  8054. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  8055. //                        $a = count($avoirs);
  8056. //                        $b = 1;
  8057. //                        $avoirNum = '';
  8058. //                        foreach ($avoirs as $item){
  8059. //                            if($b == $a){
  8060. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  8061. //                            }else{
  8062. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  8063. //                            }
  8064. //                            $b++;
  8065. //                        }
  8066. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  8067. //                    }else{
  8068.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  8069. //                    }
  8070.                     $arrays[$i]['Code projet'] = '';
  8071.                     $arrays[$i]['libellé projet'] = '';
  8072.                     $arrays[$i]['Compteur facture associée'] = '';
  8073.                     if($facture->getAutoliquidation() == 1){
  8074.                         $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  8075.                     }else{
  8076.                         $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  8077.                     }
  8078.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  8079.                     $i++;
  8080.                     if(count($facture->getProjectFactureFinance())>0){
  8081.                         foreach ($facture->getProjectFactureFinance() as $project){
  8082.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  8083.                             $arrays[$i]['Code Société'] = '';
  8084.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  8085.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  8086.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  8087.                             $arrays[$i]['Acompte pour une charge'] = '';
  8088.                             $arrays[$i]['Date comptable'] = '';
  8089.                             $arrays[$i]['Date d’échéance'] = '';
  8090.                             $arrays[$i]['Date de création dans ERPI'] = '';
  8091.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  8092.                             $arrays[$i]['Montant TTC'] = '';
  8093.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  8094.                             $arrays[$i]['Montant à régler'] = '';
  8095.                             $arrays[$i]['Référence facture fournisseur'] = '';
  8096.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  8097.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  8098.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  8099.                             $arrays[$i]['Commentaire comptable'] = '';
  8100.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  8101.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  8102.                             $arrays[$i]['Compteur facture associée'] = '';
  8103.                             $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  8104.                             if($facture->getAutoliquidation() == 1){
  8105.                                 $tvaMontant = $this->hTAndTTC($tvaMultiple->getMontantTtc(), $tvaMultiple->getTauxTva())['tva'];
  8106.                             }else{
  8107.                                 $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  8108.                             }
  8109.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  8110.                             $i++;
  8111.                         }
  8112.                     }
  8113.                 }
  8114.             }
  8115.             else{
  8116.                 $arrays[$i]['Type de ligne'] = 'Acompte';
  8117.                 $arrays[$i]['Code Société'] = $spvName;
  8118.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  8119.                 $arrays[$i]['Code budgétaire'] = $classification;
  8120.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  8121.                 $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  8122.                 $arrays[$i]['Date comptable'] = $dateComptable;
  8123.                 $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  8124.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  8125.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  8126.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  8127.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  8128.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  8129.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  8130.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  8131.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  8132.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  8133. //                if($facture->getIsAvoir()){
  8134. //                    $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  8135. //                    $a = count($avoirs);
  8136. //                    $b = 1;
  8137. //                    $avoirNum = '';
  8138. //                    foreach ($avoirs as $item){
  8139. //                        if($b == $a){
  8140. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  8141. //                        }else{
  8142. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  8143. //                        }
  8144. //                        $b++;
  8145. //                    }
  8146. //                    $arrays[$i]['Commentaire comptable'] = $avoirNum;
  8147. //                }else{
  8148.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  8149. //                }
  8150.                 $arrays[$i]['Code projet'] = '';
  8151.                 $arrays[$i]['libellé projet'] = '';
  8152.                 $arrays[$i]['Compteur facture associée'] = '';
  8153.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  8154.                 if($facture->getAutoliquidation() == 1){
  8155.                     $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  8156.                 }else{
  8157.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  8158.                 }
  8159.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  8160.                 $i++;
  8161.                 if(count($facture->getProjectFactureFinance())>0){
  8162.                     foreach ($facture->getProjectFactureFinance() as $project){
  8163.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  8164.                         $arrays[$i]['Code Société'] = '';
  8165.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  8166.                         $arrays[$i]['Code budgétaire'] = $classification;
  8167.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  8168.                         $arrays[$i]['Acompte pour une charge'] = '';
  8169.                         $arrays[$i]['Date comptable'] = '';
  8170.                         $arrays[$i]['Date d’échéance'] = '';
  8171.                         $arrays[$i]['Date de création dans ERPI'] = '';
  8172.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  8173.                         $arrays[$i]['Montant TTC'] = '';
  8174.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  8175.                         $arrays[$i]['Montant à régler'] = '';
  8176.                         $arrays[$i]['Référence facture fournisseur'] = '';
  8177.                         $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  8178.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  8179.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  8180.                         $arrays[$i]['Commentaire comptable'] = '';
  8181.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  8182.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  8183.                         $arrays[$i]['Compteur facture associée'] = '';
  8184.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  8185.                         if($facture->getAutoliquidation() == 1){
  8186.                             $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  8187.                         }else{
  8188.                             $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  8189.                         }
  8190.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  8191.                         $i++;
  8192.                     }
  8193.                 }
  8194.             }
  8195.         }
  8196.         return $arrays;
  8197.     }
  8198.     public function c3AcomptesExportXlsDateRange($arrays,$dateStart,$dateEnd){
  8199.         $dateNow = new \DateTime();
  8200.         $dateNowStr = '_'.$dateStart->format('Ymd').'_'.$dateStart->format('H').'h'.$dateStart->format('i').'___'.$dateEnd->format('Ymd').'_'.$dateEnd->format('H').'h'.$dateEnd->format('i');
  8201.         $fileName = "C3_acomptes".$dateNowStr.".csv";
  8202.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  8203.         if(file_exists($file)){
  8204.             $filesystem = new Filesystem();
  8205.             $filesystem->remove($file);
  8206.         }
  8207.         $spreadsheet = new Spreadsheet();
  8208.         $sheet = $spreadsheet->getActiveSheet();
  8209.         // Head 2
  8210.         $tableHead2 = [
  8211.             'font'=>[
  8212.                 'color'=>[
  8213.                     'rgb'=>'ffffff'
  8214.                 ],
  8215.                 'bold'=>true,
  8216.                 'size'=>12
  8217.             ],
  8218.             'fill'=>[
  8219.                 'fillType' => Fill::FILL_SOLID,
  8220.                 'startColor' => [
  8221.                     'rgb' => '002060'
  8222.                 ]
  8223.             ],
  8224.         ];
  8225.         $tableRand = [
  8226.             'fill'=>[
  8227.                 'fillType' => Fill::FILL_SOLID,
  8228.                 'startColor' => [
  8229.                     'rgb' => 'C8D6EE'
  8230.                 ]
  8231.             ],
  8232.         ];
  8233.         $sheet->setCellValue('A1',"Type de ligne")
  8234.             ->setCellValue('B1',"Code Sage")
  8235.             ->setCellValue('C1',"Code budgétaire")
  8236.             ->setCellValue('D1',"Code fournisseur Evalua")
  8237.             ->setCellValue('E1',"Valeur de charge ou investissement")
  8238.             ->setCellValue('F1',"Date comptable")
  8239.             ->setCellValue('G1',"Date d’échéance")
  8240.             ->setCellValue('H1',"Date de création dans ERPI")
  8241.             ->setCellValue('I1',"Montant HT")
  8242.             ->setCellValue('J1',"Montant TTC")
  8243.             ->setCellValue('K1',"taux de TVA")
  8244.             ->setCellValue('L1',"Montant à régler")
  8245.             ->setCellValue('M1',"Référence facture fournisseur")
  8246.             ->setCellValue('N1',"Compteur ERPI pièce")
  8247.             ->setCellValue('O1',"Compteur ERPI écritures")
  8248.             ->setCellValue('P1',"Commentaire comptable")
  8249.             ->setCellValue('Q1',"Code projet")
  8250.             ->setCellValue('R1',"libellé projet")
  8251.             ->setCellValue('S1',"Compteur facture associée")
  8252.             ->setCellValue('T1',"Autoliquidation")
  8253.             ->setCellValue('U1',"Montant TVA");
  8254.         // Borders a2 z2
  8255.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8256.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8257.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8258.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8259.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8260.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8261.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8262.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8263.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8264.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8265.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8266.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8267.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8268.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8269.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8270.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8271.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8272.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8273.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8274.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8275.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8276.         //width
  8277.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  8278.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  8279.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  8280.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  8281.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  8282.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  8283.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  8284.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  8285.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  8286.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  8287.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  8288.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  8289.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  8290.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  8291.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  8292.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  8293.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  8294.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  8295.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  8296.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(25);
  8297.         $spreadsheet->getActiveSheet()->getStyle('A1:U1')->applyFromArray($tableHead2);
  8298.         //loop through the data
  8299.         //current row
  8300.         $row=2;
  8301.         foreach($arrays as $array){
  8302.             $spreadsheet->getActiveSheet()
  8303.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  8304.                 ->setCellValue('B'.$row , $array['Code Sage'])
  8305.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  8306.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  8307.                 ->setCellValue('E'.$row , $array['Acompte pour une charge'])
  8308.                 ->setCellValue('F'.$row , $array['Date comptable'])
  8309.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  8310.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  8311.                 ->setCellValue('I'.$row , $array['Montant HT'])
  8312.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  8313.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  8314.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  8315.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  8316.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  8317.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  8318.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  8319.                 ->setCellValue('Q'.$row , $array['Code projet'])
  8320.                 ->setCellValue('R'.$row , $array['libellé projet'])
  8321.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  8322.                 ->setCellValue('T'.$row , $array['Autoliquidation'])
  8323.                 ->setCellValue('U'.$row , $array['Montant TVA'])
  8324.             ;
  8325.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8326.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8327.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8328.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8329.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8330.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8331.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8332.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8333.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8334.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8335.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8336.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8337.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8338.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8339.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8340.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8341.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8342.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8343.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8344.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8345.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8346.             $row++;
  8347.         }
  8348.         $firstRow=1;
  8349.         $lastRow=$row-1;
  8350.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":U".$lastRow);
  8351.         $writer = new Csv($spreadsheet);
  8352.         $writer->setDelimiter('|');
  8353.         $writer->setEnclosure('');
  8354.         $writer->setUseBOM(false);
  8355. //        $writer->setOutputEncoding('UTF-8');
  8356.         $writer->save($file);
  8357.         return $file;
  8358.     }
  8359.     public function getC4ReglementsExportDateRange($dateStart,$dateEnd){
  8360.         $factures = $this->em->getRepository(FactureFinance::class)->searchFacturePayeeDateRange($dateStart,$dateEnd);
  8361.         $arrays = [];
  8362.         $i = 0;
  8363.         foreach ($factures as $facture){
  8364.             $banqueFournisseur = '';
  8365.             $ibanFournisseur = '';
  8366.             $bicFournisseur = '';
  8367.             $codePaysFournisseur = '';
  8368.             if ($facture->getFournisseur()) {
  8369.                 if($facture->getRib()) {
  8370.                     $fournisseurBanque = $facture->getRib();
  8371.                 }else {
  8372.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  8373.                 }
  8374.                 if (!$fournisseurBanque) {
  8375.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  8376.                 }
  8377.                 if ($fournisseurBanque) {
  8378.                     $banqueFournisseur = $fournisseurBanque->getBanque();
  8379.                     $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  8380.                     $bicFournisseur = $fournisseurBanque->getBic();
  8381.                 }
  8382.                 $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  8383.             }
  8384. //            $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  8385.             $spvName = '';
  8386.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  8387.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  8388.             $classification = $facture->getClassification();
  8389.             $dateComptable = $facture->getDate()?$facture->getDate()->format('d/m/Y'):'';
  8390.             $dateEcheance = '';
  8391.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  8392.             $numeroFacture = $facture->getNumeroFacture();
  8393. //            if(count($facture->getProjectFactureFinance())>1){
  8394. //                foreach ($facture->getProjectFactureFinance() as $projectFinance){
  8395. //                    $arrays[$i]['Type de ligne'] = 'Reglement';
  8396. //                    $arrays[$i]['Code Société'] = $spvName;
  8397. //                    $arrays[$i]['Code Sage'] = $spvCodeSage;
  8398. //                    $arrays[$i]['Code budgétaire'] = $facture->getClassification();
  8399. //                    $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  8400. //                    $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()]:'';
  8401. //                    $arrays[$i]['Date comptable'] = $dateComptable;
  8402. //                    $arrays[$i]['Date d’échéance'] = $dateEcheance;
  8403. //                    $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  8404. //                    $arrays[$i]['Montant HT'] = (float)$projectFinance->getMontantHt();
  8405. //                    if($facture->getTauxTva()){
  8406. //                        $tva = (float)$facture->getTauxTva();
  8407. //                    }else{
  8408. //                        $tva = 20;
  8409. //                    }
  8410. //                    $arrays[$i]['Montant TTC'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  8411. //                    $arrays[$i]['taux de TVA'] = $tva;
  8412. //                    $arrays[$i]['Montant à régler'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  8413. //                    $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  8414. //                    $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  8415. ////                    $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  8416. ////                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  8417. //
  8418. //                    $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$projectFinance->getProject());
  8419. //                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  8420. //
  8421. //                    if($facture->getIsAvoir()){
  8422. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  8423. //                        $a = count($avoirs);
  8424. //                        $b = 1;
  8425. //                        $avoirNum = '';
  8426. //                        foreach ($avoirs as $item){
  8427. //                            if($b == $a){
  8428. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  8429. //                            }else{
  8430. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  8431. //                            }
  8432. //                            $b++;
  8433. //                        }
  8434. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  8435. //                    }else{
  8436. //                        $arrays[$i]['Commentaire comptable'] = $facture->getCommentComptable();
  8437. //                    }
  8438. //                    $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  8439. //                    $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  8440. //                    $arrays[$i]['Compteur facture associée'] = $numeroFacture;
  8441. //                    $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  8442. //                    $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  8443. //                    $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  8444. //                    $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  8445. //                    $i++;
  8446. //                }
  8447. //            }else{
  8448.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  8449.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  8450.                     $arrays[$i]['Type de ligne'] = 'Reglement';
  8451.                     $arrays[$i]['Code Société'] = $spvName;
  8452.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  8453.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  8454.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  8455.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  8456.                     $arrays[$i]['Date comptable'] = $dateComptable;
  8457.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  8458.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  8459.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  8460.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  8461.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  8462.                     $arrays[$i]['Montant à régler'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  8463. //                    $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  8464.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  8465.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  8466.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  8467.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  8468.                     if($facture->getIsAvoir()){
  8469.                         $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  8470.                         $a = count($avoirs);
  8471.                         $b = 1;
  8472.                         $avoirNum = '';
  8473.                         foreach ($avoirs as $item){
  8474.                             if($b == $a){
  8475.                                 $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  8476.                             }else{
  8477.                                 $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  8478.                             }
  8479.                             $b++;
  8480.                         }
  8481.                         $arrays[$i]['Commentaire comptable'] = $avoirNum;
  8482.                     }else{
  8483.                         $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', $facture->getNote());
  8484.                     }
  8485.                     $arrays[$i]['Code projet'] = '';
  8486.                     $arrays[$i]['libellé projet'] = '';
  8487.                     $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  8488.                     $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  8489.                     $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  8490.                     $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  8491.                     $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  8492.                     $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  8493.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  8494.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  8495.                     $i++;
  8496.                 }
  8497.             }
  8498.             else{
  8499.                 $arrays[$i]['Type de ligne'] = 'Reglement';
  8500.                 $arrays[$i]['Code Société'] = $spvName;
  8501.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  8502.                 $arrays[$i]['Code budgétaire'] = $classification;
  8503.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  8504.                 $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  8505.                 $arrays[$i]['Date comptable'] = $dateComptable;
  8506.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  8507.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  8508.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  8509.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  8510.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  8511.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  8512.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  8513.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  8514.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndNotTva($facture);
  8515.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  8516.                 if($facture->getIsAvoir()){
  8517.                     $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  8518.                     $a = count($avoirs);
  8519.                     $b = 1;
  8520.                     $avoirNum = '';
  8521.                     foreach ($avoirs as $item){
  8522.                         if($b == $a){
  8523.                             $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir();
  8524.                         }else{
  8525.                             $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir()." / ";
  8526.                         }
  8527.                         $b++;
  8528.                     }
  8529.                     $arrays[$i]['Commentaire comptable'] = $avoirNum;
  8530.                 }else{
  8531.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', $facture->getNote());
  8532.                 }
  8533. //                    foreach ($facture->getProjectFactureFinance() as $projectFinance){
  8534. //                        $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  8535. //                        $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  8536. //                    }
  8537.                 $arrays[$i]['Code projet'] = '';
  8538.                 $arrays[$i]['libellé projet'] =  '';
  8539.                 $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  8540.                 $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  8541.                 $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  8542.                 $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  8543.                 $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  8544.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  8545.                 $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  8546.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  8547.                 $i++;
  8548.             }
  8549. //            }
  8550.         }
  8551.         return $arrays;
  8552.     }
  8553.     public function c4ReglementsExportXlsDateRange($arrays,$dateStart,$dateEnd){
  8554.         $dateNow = new \DateTime();
  8555.         $dateNowStr = '_'.$dateStart->format('Ymd').'_'.$dateStart->format('H').'h'.$dateStart->format('i').'___'.$dateEnd->format('Ymd').'_'.$dateEnd->format('H').'h'.$dateEnd->format('i');
  8556.         $fileName = "C4_reglements".$dateNowStr.".csv";
  8557.         $file= $this->params->get('comptable_altarea_directory')."/".$fileName;
  8558.         if(file_exists($file)){
  8559.             $filesystem = new Filesystem();
  8560.             $filesystem->remove($file);
  8561.         }
  8562.         $spreadsheet = new Spreadsheet();
  8563.         $sheet = $spreadsheet->getActiveSheet();
  8564.         // Head 2
  8565.         $tableHead2 = [
  8566.             'font'=>[
  8567.                 'color'=>[
  8568.                     'rgb'=>'ffffff'
  8569.                 ],
  8570.                 'bold'=>true,
  8571.                 'size'=>12
  8572.             ],
  8573.             'fill'=>[
  8574.                 'fillType' => Fill::FILL_SOLID,
  8575.                 'startColor' => [
  8576.                     'rgb' => '002060'
  8577.                 ]
  8578.             ],
  8579.         ];
  8580.         $tableRand = [
  8581.             'fill'=>[
  8582.                 'fillType' => Fill::FILL_SOLID,
  8583.                 'startColor' => [
  8584.                     'rgb' => 'C8D6EE'
  8585.                 ]
  8586.             ],
  8587.         ];
  8588.         $sheet->setCellValue('A1',"Type de ligne")
  8589.             ->setCellValue('B1',"Code Sage")
  8590.             ->setCellValue('C1',"Code budgétaire")
  8591.             ->setCellValue('D1',"Code fournisseur Evalua")
  8592.             ->setCellValue('E1',"Valeur de charge ou investissement")
  8593.             ->setCellValue('F1',"Date comptable")
  8594.             ->setCellValue('G1',"Date d’échéance")
  8595.             ->setCellValue('H1',"Date de création dans ERPI")
  8596.             ->setCellValue('I1',"Montant HT")
  8597.             ->setCellValue('J1',"Montant TTC")
  8598.             ->setCellValue('K1',"taux de TVA")
  8599.             ->setCellValue('L1',"Montant à régler")
  8600.             ->setCellValue('M1',"Référence facture fournisseur")
  8601.             ->setCellValue('N1',"Compteur ERPI pièce")
  8602.             ->setCellValue('O1',"Compteur ERPI écritures")
  8603.             ->setCellValue('P1',"Commentaire comptable")
  8604.             ->setCellValue('Q1',"Code projet")
  8605.             ->setCellValue('R1',"libellé projet")
  8606.             ->setCellValue('S1',"Compteur facture associée")
  8607.             ->setCellValue('T1',"IBAN fournisseur")
  8608.             ->setCellValue('U1',"Montant TVA")
  8609.             ->setCellValue('V1',"Autoliquidation");
  8610.         // Borders a2 z2
  8611.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8612.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8613.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8614.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8615.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8616.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8617.         $spreadsheet->getActiveSheet()->getStyle('G1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8618.         $spreadsheet->getActiveSheet()->getStyle('H1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8619.         $spreadsheet->getActiveSheet()->getStyle('I1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8620.         $spreadsheet->getActiveSheet()->getStyle('J1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8621.         $spreadsheet->getActiveSheet()->getStyle('K1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8622.         $spreadsheet->getActiveSheet()->getStyle('L1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8623.         $spreadsheet->getActiveSheet()->getStyle('M1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8624.         $spreadsheet->getActiveSheet()->getStyle('N1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8625.         $spreadsheet->getActiveSheet()->getStyle('O1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8626.         $spreadsheet->getActiveSheet()->getStyle('P1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8627.         $spreadsheet->getActiveSheet()->getStyle('Q1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8628.         $spreadsheet->getActiveSheet()->getStyle('R1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8629.         $spreadsheet->getActiveSheet()->getStyle('S1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8630.         $spreadsheet->getActiveSheet()->getStyle('T1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8631.         $spreadsheet->getActiveSheet()->getStyle('U1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8632.         $spreadsheet->getActiveSheet()->getStyle('V1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  8633.         //width
  8634.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25);
  8635.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  8636.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  8637.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  8638.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  8639.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(20);
  8640.         $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  8641.         $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(20);
  8642.         $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  8643.         $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
  8644.         $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
  8645.         $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(18);
  8646.         $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(25);
  8647.         $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(25);
  8648.         $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(25);
  8649.         $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(40);
  8650.         $spreadsheet->getActiveSheet()->getColumnDimension('Q')->setWidth(25);
  8651.         $spreadsheet->getActiveSheet()->getColumnDimension('R')->setWidth(25);
  8652.         $spreadsheet->getActiveSheet()->getColumnDimension('S')->setWidth(25);
  8653.         $spreadsheet->getActiveSheet()->getColumnDimension('T')->setWidth(25);
  8654.         $spreadsheet->getActiveSheet()->getColumnDimension('U')->setWidth(15);
  8655.         $spreadsheet->getActiveSheet()->getColumnDimension('V')->setWidth(15);
  8656.         $spreadsheet->getActiveSheet()->getStyle('A1:V1')->applyFromArray($tableHead2);
  8657.         //loop through the data
  8658.         //current row
  8659.         $row=2;
  8660.         foreach($arrays as $array){
  8661.             $spreadsheet->getActiveSheet()
  8662.                 ->setCellValue('A'.$row , $array['Type de ligne'])
  8663.                 ->setCellValue('B'.$row , $array['Code Sage'])
  8664.                 ->setCellValue('C'.$row , $array['Code budgétaire'])
  8665.                 ->setCellValue('D'.$row , $array['Code fournisseur Evalua'])
  8666.                 ->setCellValue('E'.$row , $array['Facture de charge'])
  8667.                 ->setCellValue('F'.$row , $array['Date comptable'])
  8668.                 ->setCellValue('G'.$row , $array['Date d’échéance'])
  8669.                 ->setCellValue('H'.$row , $array['Date de création dans ERPI'])
  8670.                 ->setCellValue('I'.$row , $array['Montant HT'])
  8671.                 ->setCellValue('J'.$row , $array['Montant TTC'])
  8672.                 ->setCellValue('K'.$row , $array['taux de TVA'])
  8673.                 ->setCellValue('L'.$row , $array['Montant à régler'])
  8674.                 ->setCellValue('M'.$row , $array['Référence facture fournisseur'])
  8675.                 ->setCellValue('N'.$row , $array['Compteur ERPI pièce'])
  8676.                 ->setCellValue('O'.$row , $array['Compteur ERPI écritures'])
  8677.                 ->setCellValue('P'.$row , $array['Commentaire comptable'])
  8678.                 ->setCellValue('Q'.$row , $array['Code projet'])
  8679.                 ->setCellValue('R'.$row , $array['libellé projet'])
  8680.                 ->setCellValue('S'.$row , $array['Compteur facture associée'])
  8681.                 ->setCellValue('T'.$row , $array['ibanFournisseur'])
  8682.                 ->setCellValue('U'.$row , $array['Montant TVA'])
  8683.                 ->setCellValue('V'.$row , $array['Autoliquidation'])
  8684.             ;
  8685.             $spreadsheet->getActiveSheet()->getStyle('A'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8686.             $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8687.             $spreadsheet->getActiveSheet()->getStyle('C'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8688.             $spreadsheet->getActiveSheet()->getStyle('D'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8689.             $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8690.             $spreadsheet->getActiveSheet()->getStyle('F'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8691.             $spreadsheet->getActiveSheet()->getStyle('G'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8692.             $spreadsheet->getActiveSheet()->getStyle('H'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8693.             $spreadsheet->getActiveSheet()->getStyle('I'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8694.             $spreadsheet->getActiveSheet()->getStyle('J'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8695.             $spreadsheet->getActiveSheet()->getStyle('K'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8696.             $spreadsheet->getActiveSheet()->getStyle('L'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8697.             $spreadsheet->getActiveSheet()->getStyle('M'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8698.             $spreadsheet->getActiveSheet()->getStyle('N'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8699.             $spreadsheet->getActiveSheet()->getStyle('O'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8700.             $spreadsheet->getActiveSheet()->getStyle('P'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8701.             $spreadsheet->getActiveSheet()->getStyle('Q'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8702.             $spreadsheet->getActiveSheet()->getStyle('R'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8703.             $spreadsheet->getActiveSheet()->getStyle('S'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8704.             $spreadsheet->getActiveSheet()->getStyle('T'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8705.             $spreadsheet->getActiveSheet()->getStyle('U'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8706.             $spreadsheet->getActiveSheet()->getStyle('V'.$row)->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('E1E1E1'));
  8707.             $row++;
  8708.         }
  8709.         $firstRow=1;
  8710.         $lastRow=$row-1;
  8711.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":V".$lastRow);
  8712.         $writer = new Csv($spreadsheet);
  8713.         $writer->setDelimiter('|');
  8714.         $writer->setEnclosure('');
  8715.         $writer->setUseBOM(false);
  8716. //        $writer->setOutputEncoding('UTF-8');
  8717.         $writer->save($file);
  8718.         return $file;
  8719.     }
  8720.     public function paginateFacturePaiementNewMiseEnpaiement($request){
  8721.         $length = $request->get('length');
  8722.         $length = $length && ($length!=-1)?$length:0;
  8723.         $start = $request->get('start');
  8724.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  8725.         $column =  $search = $request->get('columns');
  8726.         $order = $request->get('order')[0];
  8727.         $columnOrder = $order['column'];
  8728.         $dirOrder = $order['dir'];
  8729.         $columNameOrder = $column[$columnOrder]['data'];
  8730.         $searchTabDate = $request->get('searchTabDate');
  8731.         $search = $request->get('search');
  8732.         $filters = [
  8733.             'searchTabDate' => $searchTabDate,
  8734.             'fournisseur' => $request->get('fournisseur'),
  8735.             'spv' => $request->get('spv'),
  8736.             'statusMiseEnPaiement' => $request->get('statusMiseEnPaiement'),
  8737.             'query' => trim(@$search['value']),
  8738.         ];
  8739.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->getFacturesValideMiseEnPaiement($filters, $start, $length, true,$columNameOrder, $dirOrder);
  8740.         $recordsFiltered= $this->em->getRepository(\App\Entity\FactureFinance::class)->getFacturesValideMiseEnPaiement($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  8741.         $recordsTotal= $this->em->getRepository(\App\Entity\FactureFinance::class)->getFacturesValideMiseEnPaiement(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  8742.         $output = array(
  8743.             'data' => array(),
  8744.             'recordsFiltered' => count($recordsFiltered),
  8745.             'recordsTotal' => count($recordsTotal),
  8746.         );
  8747.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  8748.         foreach ($factureFinances as $factureFinance) {
  8749.             $status =
  8750.                 $this->twig->render(
  8751.                     'admin/facture-finance/miseEnPaiement/default/statusMiseEnPaiementV2.html.twig', array(
  8752.                     'factureFinance' => $factureFinance,
  8753.                 ));
  8754.             $action = $this->twig->render(
  8755.                 'admin/facture-finance/miseEnPaiement/default/miseEnpaiementBtnV2.html.twig', array(
  8756.                 'factureFinance' => $factureFinance
  8757.             ));
  8758.             $btnSelect =
  8759.                 $this->twig->render(
  8760.                     'admin/facture-finance/miseEnPaiement/default/btnSelectMiseEnPaiement.html.twig', array(
  8761.                     'factureFinance' => $factureFinance
  8762.                 ));
  8763.             if($factureFinance->getIsAvoir()){
  8764.                 $montantTtc = (float)str_replace([','], ".", str_replace([' '], "", $factureFinance->getMonatantRestantTtc())) ;
  8765.             }else {
  8766.                 $montantTtc = (float)str_replace([','], ".", str_replace([' '], "", $factureFinance->getMonatantTtc())) ;
  8767.             }
  8768.             $output['data'][] = [
  8769.                 'responsive_id' => '',
  8770.                 'id' => $factureFinance->getId(),
  8771.                 'numeroFacture' => $factureFinance->getNumeroFacture(),
  8772.                 'monatantTtc' => $this->espaceNumber($montantTtc).'€',
  8773.                 'monatantHt' => $factureFinance->getMonatantHt() ? $this->espaceNumber($factureFinance->getMonatantHt()).'€' : '',
  8774.                 'tva' => $factureFinance->getTva() ? $factureFinance->getTva().'€' : '',
  8775.                 'category' => $factureFinance->getCategory() ? $factureFinance->getCategory() : '',
  8776.                 'fournisseur' => $factureFinance->getFournisseur() ? $factureFinance->getFournisseur()->getName() : '',
  8777.                 'developpeur' => $factureFinance->getDeveloppeur() ? $factureFinance->getDeveloppeur()->getFirstname().' '.$factureFinance->getDeveloppeur()->getLastname() : '',
  8778.                 'spv' => $factureFinance->getSpv() ? $factureFinance->getSpv()->getName() : '',
  8779.                 'dateValidation' => $factureFinance->getDateValidation() ? $factureFinance->getDateValidation()->format('d/m/Y') : '',
  8780.                 'createdAt' => $factureFinance->getCreatedAt() ? $factureFinance->getCreatedAt()->format('d/m/Y') : '',
  8781.                 'status' => $status,
  8782.                 'btnSelect' => $btnSelect,
  8783.                 'action' => $action
  8784.             ];
  8785.         }
  8786.         return $output;
  8787.     }
  8788.     public function getTabMiseEnPaiementDefault(){
  8789.         $factures = $this->session->get('factureAcomfirme');
  8790.         if($factures){
  8791.             $array = $factures;
  8792.         }else{
  8793.             $array = [];
  8794.         }
  8795.         foreach ($array as $facture){
  8796.             if($facture){
  8797.                 if($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and (is_null($facture->getIsPaiement()) or $facture->getIsPaiement() == 0)  and $this->checkFactureFinanceCodeProject($facture)) {
  8798.                 }else{
  8799.                     unset($array[$facture->getToken()]);
  8800.                     $this->session->set('factureAcomfirme',$array);
  8801.                 }
  8802.             }
  8803.         }
  8804.         $tab =  $this->twig->render(
  8805.             'admin/facture-finance/miseEnPaiement/default/trMiseEnPaiementAconfirme.html.twig', array(
  8806.             'factures' => $array
  8807.         ));
  8808.         $arraySpv = [];
  8809.         $montant = 0;
  8810.         foreach ($array as $value){
  8811.             if($value->getSpv()){
  8812.                 $arraySpv[$value->getSpv()->getId()] =  $value->getSpv();
  8813.             }
  8814.             if($value->getIsAvoir()){
  8815.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantRestantTtc())) ;
  8816.             }else {
  8817.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantTtc())) ;
  8818.             }
  8819.         }
  8820.         $block =  $this->twig->render(
  8821.             'admin/facture-finance/miseEnPaiement/default/blockMiseEnPaiementAconfirme.html.twig', array(
  8822.             'factures' => $array,
  8823.             'spvs' => $arraySpv,
  8824.             'montant' => $montant
  8825.         ));
  8826.         if($array){
  8827.             return [
  8828.                 'tab'=> $tab,
  8829.                 'block'=> $block,
  8830.             ];
  8831.         }else{
  8832.             return 0;
  8833.         }
  8834.     }
  8835.     public function getTabMiseEnPaiement($token){
  8836.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  8837.         $factures = $this->session->get('factureAcomfirme');
  8838.         if($factures){
  8839.             $array = $factures;
  8840.         }else{
  8841.             $array = [];
  8842.         }
  8843.         if($facture){
  8844.             if($this->fournisseurService->checkFournisseurRibActive($facture->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)) {
  8845.                 $array[$token] = $facture;
  8846.             }
  8847.             if($this->checkAltareaFacture($facture)){
  8848.             }else{
  8849.                 if($facture->getIsPaiement() == FactureFinance::STATUS_NOT_PAYE_SEPA){
  8850.                     $userCurrent = $this->security->getUser();
  8851.                     if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  8852.                     }else {
  8853.                         if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  8854.                             return 0;
  8855.                         }
  8856.                     }
  8857.                     $facture->setIsPaiement(null);
  8858.                     $this->em->persist($facture);
  8859.                     $this->em->flush();
  8860.                     $str = $this->security->getUser()->getFirstname().' '.$this->security->getUser()->getLastname().' a remis la facture '.' ('.$facture->getNumeroFacture().')'.' en mise en paiement';
  8861.                     $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(),$str,$facture);
  8862.                 }
  8863.             }
  8864.             $this->session->set('factureAcomfirme',$array);
  8865.         }
  8866.         $tab =  $this->twig->render(
  8867.             'admin/facture-finance/miseEnPaiement/default/trMiseEnPaiementAconfirme.html.twig', array(
  8868.             'factures' => $array
  8869.         ));
  8870.         $arraySpv = [];
  8871.         $montant = 0;
  8872.         foreach ($array as $value){
  8873.             if($value->getSpv()){
  8874.                 $arraySpv[$value->getSpv()->getId()] =  $value->getSpv();
  8875.             }
  8876.             if($value->getIsAvoir()){
  8877.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantRestantTtc())) ;
  8878.             }else {
  8879.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantTtc())) ;
  8880.             }
  8881.         }
  8882.         $block =  $this->twig->render(
  8883.             'admin/facture-finance/miseEnPaiement/default/blockMiseEnPaiementAconfirme.html.twig', array(
  8884.             'factures' => $array,
  8885.             'spvs' => $arraySpv,
  8886.             'montant' => $montant
  8887.         ));
  8888.         if($array){
  8889.             return [
  8890.                 'tab'=> $tab,
  8891.                 'block'=> $block,
  8892.             ];
  8893.         }else{
  8894.             return 0;
  8895.         }
  8896.     }
  8897.     public function getTabMiseEnPaiementDeselection($token){
  8898.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  8899.         $factures = $this->session->get('factureAcomfirme');
  8900.         if($factures){
  8901.             $array = $factures;
  8902.         }else{
  8903.             $array = [];
  8904.         }
  8905.         if($facture){
  8906.             if(isset($array[$token])){
  8907.                 unset($array[$token]);
  8908.                 $this->session->set('factureAcomfirme',$array);
  8909.             }
  8910.         }
  8911.         $tab =  $this->twig->render(
  8912.             'admin/facture-finance/miseEnPaiement/default/trMiseEnPaiementAconfirme.html.twig', array(
  8913.             'factures' => $array
  8914.         ));
  8915.         $arraySpv = [];
  8916.         $montant = 0;
  8917.         foreach ($array as $value){
  8918.             if($value->getSpv()){
  8919.                 $arraySpv[$value->getSpv()->getId()] =  $value->getSpv();
  8920.             }
  8921.             if($value->getIsAvoir()){
  8922.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantRestantTtc())) ;
  8923.             }else {
  8924.                 $montant += (float)str_replace([','], ".", str_replace([' '], "", $value->getMonatantTtc())) ;
  8925.             }
  8926.         }
  8927.         $block =  $this->twig->render(
  8928.             'admin/facture-finance/miseEnPaiement/default/blockMiseEnPaiementAconfirme.html.twig', array(
  8929.             'factures' => $array,
  8930.             'spvs' => $arraySpv,
  8931.             'montant' => $montant
  8932.         ));
  8933.         if($array){
  8934.             return [
  8935.                 'tab'=> $tab,
  8936.                 'block'=> $block,
  8937.             ];
  8938.         }else{
  8939.             return 0;
  8940.         }
  8941.     }
  8942.     public function addPaiementFactureV2(){
  8943.         $userCurrent = $this->security->getUser();
  8944.         if (in_array("ROLE_SUPER_ADMINISTRATOR", $userCurrent->getRoles())) {
  8945.         }else {
  8946.             if (!$userCurrent->getIsAccesValidationFactureMiseEnpaiement()) {
  8947.                 return [
  8948.                     'messageErreur' => '<p>vous n\'êtes pas autorisé à comfirmer la mise en paiement</p>',
  8949.                 ];
  8950.             }
  8951.         }
  8952.         $facturesTab = $this->session->get('factureAcomfirme');
  8953.         $tab = [];
  8954.         foreach ($facturesTab as $value){
  8955.             $facture = $this->em->getRepository(FactureFinance::class)->find($value->getId());
  8956.             $tab[]= $facture;
  8957.         }
  8958.         $arrayFactures = [];
  8959.         $array = [];
  8960.         if($tab){
  8961.             // update date Paiement si < date du jour
  8962.             foreach ($tab as $facture){
  8963.                 if($facture->getIsPaiement() == 0 or  is_null($facture->getIsPaiement())) {
  8964.                     $datePrevuPaiement = new \DateTime($facture->getDate()->format('Y-m-d') . ' 23:59:59');
  8965.                     $dateNow = new \DateTime();
  8966.                     $dateNow->modify('+1 day');
  8967.                     if ($datePrevuPaiement >= $dateNow) {
  8968.                     } else {
  8969.                         $datePrevuPaiement = $dateNow;
  8970.                     }
  8971.                     $facture->setDate($datePrevuPaiement);
  8972.                     $this->em->persist($facture);
  8973.                     $this->em->flush();
  8974.                     $arrayFactures[] = $facture;
  8975.                 }
  8976.             }
  8977.             // formate tableau mise en paiement
  8978.             foreach ($arrayFactures as $itemFacture){
  8979.                 if($itemFacture->getSpv()){
  8980.                     $array[$itemFacture->getSpv()->getId().$itemFacture->getDateValidation()->format('Y-m-d').$itemFacture->getDate()->format('Y-m-d')]['factures'][] = $itemFacture;
  8981.                     $array[$itemFacture->getSpv()->getId().$itemFacture->getDateValidation()->format('Y-m-d').$itemFacture->getDate()->format('Y-m-d')]['spv'] = $itemFacture->getSpv();
  8982.                     $array[$itemFacture->getSpv()->getId().$itemFacture->getDateValidation()->format('Y-m-d').$itemFacture->getDate()->format('Y-m-d')]['dateValidation'] = $itemFacture->getDateValidation();
  8983.                     $array[$itemFacture->getSpv()->getId().$itemFacture->getDateValidation()->format('Y-m-d').$itemFacture->getDate()->format('Y-m-d')]['datePrevuPaiement'] = $itemFacture->getDate();
  8984.                 }
  8985.             }
  8986.             foreach ($array as $value){
  8987.                 $spv = $value['spv'];
  8988.                 $datePaiementPrevu = $value['datePrevuPaiement'];
  8989.                 $dateValidation = $value['dateValidation'];
  8990.                 $facturesValide = $value['factures'];
  8991.                 $factureFinancePaiement = $this->em->getRepository(FactureFinancePaiement::class)->findNotFichierBySpvAndDate($spv,$dateValidation,$datePaiementPrevu);
  8992.                 if($factureFinancePaiement){
  8993.                 }
  8994.                 else{
  8995.                     $factureFinancePaiement = new FactureFinancePaiement();
  8996.                     $factureFinancePaiement->setSpv($spv);
  8997.                     $factureFinancePaiement->setDatePrevu($dateValidation);
  8998.                     $factureFinancePaiement->setDatePaiementPrevu($datePaiementPrevu);
  8999.                     $this->em->persist($factureFinancePaiement);
  9000.                     $this->em->flush();
  9001.                 }
  9002.                 foreach ($facturesValide as $factureValide){
  9003.                     if($this->checkAltareaFacture($facture)){
  9004.                     }else{
  9005.                         if($this->fournisseurService->checkFournisseurRibActive($factureValide->getFournisseur()) and $this->checkFactureFinanceCodeProject($facture)) {
  9006.                             $factureValide->setIsPaiement(FactureFinance::STATUS_PAYE_SEPA);
  9007.                             $this->em->persist($factureValide);
  9008.                             $factureFinancePaiementDetailNew = $this->em->getRepository(FactureFinancePaiementDetail::class)->findOneBy(['factureFinance'=>$factureValide->getId()]);
  9009.                             $factureDetailNotExist = false;
  9010.                             if(!$factureFinancePaiementDetailNew){
  9011.                                 $factureFinancePaiementDetailNew = new FactureFinancePaiementDetail();
  9012.                                 $factureDetailNotExist = true;
  9013.                             }
  9014.                             $factureFinancePaiementDetailNew->setFactureFinance($factureValide);
  9015.                             $factureFinancePaiementDetailNew->setDatePrevu($dateValidation);
  9016.                             $factureFinancePaiementDetailNew->setFactureFinancePaiement($factureFinancePaiement);
  9017.                             $this->em->persist($factureFinancePaiementDetailNew);
  9018.                             $this->em->flush();
  9019.                             if($factureDetailNotExist) {
  9020.                                 $str = $this->security->getUser()->getFirstname() . ' ' . $this->security->getUser()->getLastname() . ' a validé la mise en paiement : ' . $factureValide->getFournisseur()->getName() . ' (' . $factureValide->getNumeroFacture() . ')';
  9021.                                 $this->historyService->addHistoryFactureFinancePaiement($this->security->getUser(), $str, $factureValide);
  9022.                             }
  9023.                         }
  9024.                     }
  9025.                 }
  9026.             }
  9027.             $this->session->remove('factureAcomfirme');
  9028.         }
  9029.         return $array;
  9030.     }
  9031.     public function getFacturePaiementNewMiseEnpaiement($request){
  9032.         $length = $request->get('length');
  9033.         $length = $length && ($length!=-1)?$length:0;
  9034.         $start = $request->get('start');
  9035.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  9036.         $column =  $search = $request->get('columns');
  9037.         $order = $request->get('order')[0];
  9038.         $columnOrder = $order['column'];
  9039.         $dirOrder = $order['dir'];
  9040.         $columNameOrder = $column[$columnOrder]['data'];
  9041.         $searchTabDate = $request->get('searchTabDate');
  9042.         $filters = [
  9043.             'searchTabDate' => $searchTabDate,
  9044.             'fournisseur' => $request->get('fournisseur'),
  9045.             'spv' => $request->get('spv'),
  9046.             'statusMiseEnPaiement' => $request->get('statusMiseEnPaiement'),
  9047.             'query' => trim(@$search['value']),
  9048.         ];
  9049.         $factureFinances= $this->em->getRepository(\App\Entity\FactureFinance::class)->getFacturesValideMiseEnPaiementFilter($filters);
  9050.         return $factureFinances;
  9051.     }
  9052.     public function insertLogFichier($spv,$factures,$nameFichier){
  9053.         $text = '';
  9054.         foreach ($factures as $facture){
  9055.             $text .= '  '.$facture->getNumeroFacture();
  9056.         }
  9057.         $log = new LogSendFichier();
  9058.         $log->setLogText($text);
  9059.         $log->setNameFichier($nameFichier);
  9060.         $log->setSpvId($spv->getId());
  9061.         $this->em->persist($log);
  9062.         $this->em->flush();
  9063.     }
  9064.     public function checkFactureFinanceCodeProject($facture){
  9065.         if($facture){
  9066.             $projects = $facture->getProjectFactureFinance();
  9067.             if(count($projects)>0){
  9068.                 foreach ($projects as $projectFacture){
  9069.                     $project = $projectFacture->getProject();
  9070.                     if($project && $project->getCodeProject()){
  9071.                         return true;
  9072.                     }else{
  9073.                         return false;
  9074.                     }
  9075.                 }
  9076.             }
  9077.         }
  9078.         return true;
  9079.     }
  9080.     public function checkAltareaFacture($facture){
  9081. //        if($facture){
  9082. //            $projects = $facture->getProjectFactureFinance();
  9083. //            if(count($projects)>0){
  9084. //                foreach ($projects as $projectFacture){
  9085. //                    $project = $projectFacture->getProject();
  9086. //                    if($project && $project->getEntreprise() && $project->getEntreprise()->getIsAlteria()){
  9087. //                        return true;
  9088. //                    }else{
  9089. //                        return false;
  9090. //                    }
  9091. //                }
  9092. //            }
  9093. //        }
  9094.         return false;
  9095.     }
  9096.     public function extractFacturesPayer($factures,$request){
  9097.         $file= $this->params->get('zips_directory')."/extraire_factures.xlsx";
  9098.         $spreadsheet = new Spreadsheet();
  9099.         $sheet = $spreadsheet->getActiveSheet();
  9100.         // Head 2
  9101.         $tableHead2 = [
  9102.             'font'=>[
  9103.                 'color'=>[
  9104.                     'rgb'=>'0071c1'
  9105.                 ],
  9106.                 'bold'=>true,
  9107.                 'size'=>12
  9108.             ],
  9109.             'fill'=>[
  9110.                 'fillType' => Fill::FILL_SOLID,
  9111.                 'startColor' => [
  9112.                     'rgb' => 'dcebf4'
  9113.                 ]
  9114.             ],
  9115.         ];
  9116.         $sheet->setCellValue('A1',"Numéro de facture")
  9117.             ->setCellValue('B1',"Date de facture")
  9118.             ->setCellValue('C1',"Date de réception")
  9119.             ->setCellValue('D1',"Date de paiement")
  9120.             ->setCellValue('E1',"Montant")
  9121.             ->setCellValue('F1',"Code Société");
  9122.         // Borders a2 z2
  9123.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9124.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9125.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9126.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9127.         $spreadsheet->getActiveSheet()->getStyle('E1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9128.         $spreadsheet->getActiveSheet()->getStyle('F1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  9129.         //width
  9130.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(17);
  9131.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  9132.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  9133.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  9134.         $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(30);
  9135.         $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(30);
  9136.         $spreadsheet->getActiveSheet()->getStyle('A1:F1')->applyFromArray($tableHead2);
  9137.         //loop through the data
  9138.         //current row
  9139.         $row=2;
  9140.         foreach($factures as $facture){
  9141.             $spreadsheet->getActiveSheet()
  9142.                 ->setCellValue('A'.$row , (string)$facture->getNumeroFacture30Max())
  9143.                 ->setCellValue('E'.$row , $facture->getMonatantTtc())
  9144.                 ->setCellValue('F'.$row , $facture->getSpv()?$facture->getSpv()->getName():'')
  9145.             ;
  9146.             $spreadsheet = $this->addStyleToCellDate('B',$row,$facture->getDateFacture(),$spreadsheet);
  9147.             $spreadsheet = $this->addStyleToCellDate('C',$row,$facture->getCreatedAt(),$spreadsheet);
  9148.             $spreadsheet = $this->addStyleToCellDate('D',$row,$facture->getDatePaiement(),$spreadsheet);
  9149.             //increment row
  9150.             $row++;
  9151.         }
  9152.         $firstRow=1;
  9153.         $lastRow=$row-1;
  9154.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":F".$lastRow);
  9155.         $writer = new Xlsx($spreadsheet);
  9156.         $writer->save($file);
  9157.         return $file;
  9158.     }
  9159.     public function editClassification($request,$token)
  9160.     {
  9161.         $facture = $this->em->getRepository(FactureFinance::class)->findOneBy(['token'=>$token]);
  9162.         if($facture){
  9163.             $form = $this->form->create(FactureFinanceClassificationType::class, $facture);
  9164.             $form->handleRequest($request);
  9165.             if ($form->isSubmitted()) {
  9166.                 $this->em->persist($facture);
  9167.                 $this->em->flush();
  9168.                 return [
  9169.                     'form' => $form->createView(),
  9170.                     'factureFinance' => $facture,
  9171.                     'success' => true
  9172.                 ];
  9173.             }
  9174.         }
  9175.         return [
  9176.             'form' => $form->createView(),
  9177.             'factureFinance' => $facture,
  9178.             'success' => false,
  9179.         ];
  9180.     }
  9181.     public function exportComptableNotSendByCompteur($arrayCompteur,$strType){
  9182.         if($strType == 'facture'){
  9183.             $arrays1 = $this->getC1FacturesExportByCompteur($arrayCompteur);
  9184.             $this->c1FacturesExportXls($arrays1,true,false);
  9185.         }
  9186.         if($strType == 'avoir'){
  9187.             $arrays2 = $this->getC2AvoirExportByCompteur($arrayCompteur);
  9188.             $this->c2AvoirExportXls($arrays2,true,false);
  9189.         }
  9190.         if($strType == 'acompte'){
  9191.             $arrays3 = $this->getC3AcomptesExportByCompteur($arrayCompteur);
  9192.             $this->c3AcomptesExportXls($arrays3,true,false);
  9193.         }
  9194.         if($strType == 'reglement'){
  9195.             $arrays4 = $this->getC4ReglementsExportByCompteur($arrayCompteur);
  9196.             $this->c4ReglementsExportXls($arrays4,true,false);
  9197.         }
  9198.     }
  9199.     public function getC1FacturesExportByCompteur($arrayCompteur){
  9200.         $factures = $this->em->getRepository(FactureFinance::class)->searchFactureByCompteur($arrayCompteur);
  9201.         $arrays = [];
  9202.         $i = 0;
  9203.         foreach ($factures as $facture){
  9204.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  9205.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  9206.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  9207.             $classification = $facture->getClassification();
  9208.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  9209.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  9210.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  9211.             $numeroFacture = $facture->getNumeroFacture();
  9212.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  9213.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  9214.                     $arrays[$i]['Type de ligne'] = 'Facture';
  9215.                     $arrays[$i]['Code Société'] = $spvName;
  9216.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  9217.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9218.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9219.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  9220.                     $arrays[$i]['Date comptable'] = $dateComptable;
  9221.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9222.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9223.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9224.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9225.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9226. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  9227.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9228.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9229.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9230.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  9231.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9232. //                    if($facture->getIsAvoir()){
  9233. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9234. //                        $a = count($avoirs);
  9235. //                        $b = 1;
  9236. //                        $avoirNum = '';
  9237. //                        foreach ($avoirs as $item){
  9238. //                            if($b == $a){
  9239. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  9240. //                            }else{
  9241. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  9242. //                            }
  9243. //                            $b++;
  9244. //                        }
  9245. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  9246. //                    }else{
  9247.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127)) ;
  9248. //                    }
  9249.                     $arrays[$i]['Code projet'] = '';
  9250.                     $arrays[$i]['libellé projet'] = '';
  9251.                     $arrays[$i]['Compteur facture associée'] = '';
  9252.                     $arrays[$i]['Autoliquidation'] = 0;
  9253.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  9254.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  9255.                     $i++;
  9256.                     if(count($facture->getProjectFactureFinance())>0){
  9257.                         foreach ($facture->getProjectFactureFinance() as $project){
  9258.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9259.                             $arrays[$i]['Code Société'] = '';
  9260.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  9261.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9262.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  9263.                             $arrays[$i]['Facture de charge'] = '';
  9264.                             $arrays[$i]['Date comptable'] = '';
  9265.                             $arrays[$i]['Date d’échéance'] = '';
  9266.                             $arrays[$i]['Date de création dans ERPI'] = '';
  9267.                             $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$tvaMultiple->getMontantHt()),2,'.','');
  9268.                             $arrays[$i]['Montant TTC'] = '';
  9269.                             $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$tvaMultiple->getTauxTva()),2,'.','');
  9270.                             $arrays[$i]['Montant à régler'] = '';
  9271.                             $arrays[$i]['Référence facture fournisseur'] = '';
  9272.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9273.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  9274.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9275.                             $arrays[$i]['Commentaire comptable'] = '';
  9276.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9277.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9278.                             $arrays[$i]['Compteur facture associée'] = '';
  9279.                             $arrays[$i]['Autoliquidation'] = 0;
  9280.                             $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  9281.                             $arrays[$i]['Montant TVA'] = $tvaMontant;
  9282.                             $i++;
  9283.                         }
  9284.                     }
  9285.                 }
  9286.             }
  9287.             else{
  9288.                 $arrays[$i]['Type de ligne'] = 'Facture';
  9289.                 $arrays[$i]['Code Société'] = $spvName;
  9290.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  9291.                 $arrays[$i]['Code budgétaire'] = $classification;
  9292.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9293.                 $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  9294.                 $arrays[$i]['Date comptable'] = $dateComptable;
  9295.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9296.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9297.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  9298.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  9299.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  9300.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9301.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9302.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9303.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  9304.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9305. //                if($facture->getIsAvoir()){
  9306. //                    $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9307. //                    $a = count($avoirs);
  9308. //                    $b = 1;
  9309. //                    $avoirNum = '';
  9310. //                    foreach ($avoirs as $item){
  9311. //                        if($b == $a){
  9312. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  9313. //                        }else{
  9314. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  9315. //                        }
  9316. //                        $b++;
  9317. //                    }
  9318. //                    $arrays[$i]['Commentaire comptable'] = $avoirNum;
  9319. //                }else{
  9320.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  9321. //                }
  9322.                 $arrays[$i]['Code projet'] = '';
  9323.                 $arrays[$i]['libellé projet'] = '';
  9324.                 $arrays[$i]['Compteur facture associée'] = '';
  9325.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  9326.                 if($facture->getAutoliquidation() == 1){
  9327.                     $tvaMontant = $this->hTAndTTC($facture->getMonatantTtc(), $facture->getTauxTva())['tva'];
  9328.                 }else{
  9329.                     $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  9330.                 }
  9331.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  9332.                 $i++;
  9333.                 if(count($facture->getProjectFactureFinance())>0){
  9334.                     foreach ($facture->getProjectFactureFinance() as $project){
  9335.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9336.                         $arrays[$i]['Code Société'] = '';
  9337.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  9338.                         $arrays[$i]['Code budgétaire'] = $classification;
  9339.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  9340.                         $arrays[$i]['Facture de charge'] = '';
  9341.                         $arrays[$i]['Date comptable'] = '';
  9342.                         $arrays[$i]['Date d’échéance'] = '';
  9343.                         $arrays[$i]['Date de création dans ERPI'] = '';
  9344.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$project->getMontantHt()),2,'.','');
  9345.                         $arrays[$i]['Montant TTC'] = '';
  9346.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  9347.                         $arrays[$i]['Montant à régler'] = '';
  9348.                         $arrays[$i]['Référence facture fournisseur'] = '';
  9349.                         $arrays[$i]['Compteur ERPI pièce'] =  $facture->getCompteurErpiPiece();
  9350.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  9351.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9352.                         $arrays[$i]['Commentaire comptable'] = '';
  9353.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9354.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9355.                         $arrays[$i]['Compteur facture associée'] = '';
  9356.                         $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  9357.                         if($facture->getAutoliquidation() == 1){
  9358.                             $tvaMontant = $this->hTAndTTC($project->getMontantTtc(), $facture->getTauxTva())['tva'];
  9359.                         }else{
  9360.                             $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$project->getMontantHt()) / 100;
  9361.                         }
  9362.                         $arrays[$i]['Montant TVA'] = $tvaMontant;
  9363.                         $i++;
  9364.                     }
  9365.                 }
  9366.             }
  9367.         }
  9368.         return $arrays;
  9369.     }
  9370.     public function getC2AvoirExportByCompteur($arrayCompteur){
  9371.         $avoirs = $this->em->getRepository(Avoir::class)->searchAvoirByCompteur($arrayCompteur);
  9372.         $arrays = [];
  9373.         $i = 0;
  9374.         foreach ($avoirs as $avoir){
  9375.             $spvName = $avoir->getSpv()?$avoir->getSpv()->getName():'';
  9376.             $spvCodeSage = $avoir->getSpv()?$avoir->getSpv()->getCodeSage():'';
  9377.             $fournisseurCode = $avoir->getFournisseur()?$avoir->getFournisseur()->getCodeFournisseur():'';
  9378.             $classification = $avoir->getClassification();
  9379.             $dateComptable = $avoir->getDateAvoir()?$avoir->getDateAvoir()->format('d/m/Y'):'';
  9380.             $dateEcheance = '';
  9381.             $dateCreation = $avoir->getCreatedAt()?$avoir->getCreatedAt()->format('d/m/Y'):'';
  9382.             $numeroFacture = $avoir->getNumeroAvoir();
  9383.             if(count($avoir->getTvaAvoir())>0 && $avoir->getTauxTva() == 0){
  9384.                 foreach ($avoir->getTvaAvoir() as $tvaMultiple){
  9385.                     $arrays[$i]['Type de ligne'] = 'Avoir';
  9386.                     $arrays[$i]['Code Société'] = $spvName;
  9387.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  9388.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9389.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9390.                     $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  9391.                     $arrays[$i]['Date comptable'] = $dateComptable;
  9392.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9393.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9394.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9395.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9396.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9397.                     $arrays[$i]['Montant à régler'] = '';
  9398.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9399.                     $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  9400.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTva($avoir,$tvaMultiple);
  9401.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9402.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($avoir->getNote(), 0, 127));
  9403.                     $arrays[$i]['Code projet'] = '';
  9404.                     $arrays[$i]['libellé projet'] = '';
  9405.                     $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  9406.                     $factureAssocie = '';
  9407.                     if ($avoirFactures) {
  9408.                         $h = 1;
  9409.                         $total = count($avoirFactures);
  9410.                         foreach ($avoirFactures as $avoirFacture) {
  9411.                             if ($total == $h) {
  9412.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  9413.                             } else {
  9414.                                 $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  9415.                             }
  9416.                             $h++;
  9417.                         }
  9418.                     }
  9419.                     $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  9420.                     $i++;
  9421.                     if(count($avoir->getProjectAvoir())>0){
  9422.                         foreach ($avoir->getProjectAvoir() as $project){
  9423.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9424.                             $arrays[$i]['Code Société'] = '';
  9425.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  9426.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9427.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  9428.                             $arrays[$i]['Avoir de charge'] = '';
  9429.                             $arrays[$i]['Date comptable'] = '';
  9430.                             $arrays[$i]['Date d’échéance'] = '';
  9431.                             $arrays[$i]['Date de création dans ERPI'] = '';
  9432. //                            if (count($avoir->getProjectAvoir()) == 1) {
  9433. //                                $arrays[$i]['Montant HT'] = (float)$avoir->getMonatantHt();
  9434. //                            } else {
  9435. //                                $arrays[$i]['Montant HT'] = (float)$project->getMontantHt();
  9436. //                            }
  9437. //                            $arrays[$i]['Montant TTC'] = '';
  9438. //                            $arrays[$i]['taux de TVA'] = '';
  9439.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9440.                             $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9441.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9442.                             $arrays[$i]['Montant à régler'] = '';
  9443.                             $arrays[$i]['Référence facture fournisseur'] = '';
  9444.                             $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  9445.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndTvaProject($avoir,$tvaMultiple,$project->getProject());
  9446.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9447.                             $arrays[$i]['Commentaire comptable'] = '';
  9448.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9449.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9450.                             $arrays[$i]['Compteur facture associée'] = '';
  9451.                             $i++;
  9452.                         }
  9453.                     }
  9454.                 }
  9455.             }
  9456.             else {
  9457.                 $arrays[$i]['Type de ligne'] = 'Avoir';
  9458.                 $arrays[$i]['Code Société'] = $spvName;
  9459.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  9460.                 $arrays[$i]['Code budgétaire'] = $classification;
  9461.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9462.                 $arrays[$i]['Avoir de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]) ? self::CHARGE_INVESTISSEMENT_DEPENSE[$classification] : '';
  9463.                 $arrays[$i]['Date comptable'] = $dateComptable;
  9464.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9465.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9466.                 $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir'=>$avoir->getId()]);
  9467.                 if($avoirs){
  9468.                     $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  9469.                     $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  9470.                     if($avoir->getAutoliquidation()){
  9471.                         $montantHt = $montantTtc;
  9472.                     }else{
  9473.                         $montantHt = $montantTtc / (1 + ($tauxTva/100));
  9474.                     }
  9475.                     $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  9476.                     $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  9477.                     $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  9478.                 }else{
  9479.                     $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$avoir->getMonatantHt()),2,'.','');
  9480.                     $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$avoir->getMonatantTtc()),2,'.','');
  9481.                     $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$avoir->getTauxTva()),2,'.','');
  9482.                 }
  9483.                 $arrays[$i]['Montant à régler'] = '';
  9484.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9485.                 $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  9486.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTva($avoir);
  9487.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9488.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($avoir->getNote(), 0, 127));
  9489.                 $arrays[$i]['Code projet'] = '';
  9490.                 $arrays[$i]['libellé projet'] = '';
  9491.                 $avoirFactures = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir]);
  9492.                 $factureAssocie = '';
  9493.                 if ($avoirFactures) {
  9494.                     $h = 1;
  9495.                     $total = count($avoirFactures);
  9496.                     foreach ($avoirFactures as $avoirFacture) {
  9497.                         if ($total == $h) {
  9498.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece();
  9499.                         } else {
  9500.                             $factureAssocie .= $avoirFacture->getFinanceFacture()->getCompteurErpiPiece() . " / ";
  9501.                         }
  9502.                         $h++;
  9503.                     }
  9504.                 }
  9505.                 $arrays[$i]['Compteur facture associée'] = $factureAssocie;
  9506.                 $i++;
  9507.                 if (count($avoir->getProjectAvoir()) > 0) {
  9508.                     foreach ($avoir->getProjectAvoir() as $project) {
  9509.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9510.                         $arrays[$i]['Code Société'] = '';
  9511.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  9512.                         $arrays[$i]['Code budgétaire'] = $classification;
  9513.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  9514.                         $arrays[$i]['Avoir de charge'] = '';
  9515.                         $arrays[$i]['Date comptable'] = '';
  9516.                         $arrays[$i]['Date d’échéance'] = '';
  9517.                         $arrays[$i]['Date de création dans ERPI'] = '';
  9518.                         if (count($avoir->getProjectAvoir()) == 1) {
  9519.                             $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['avoir' => $avoir->getId()]);
  9520.                             if ($avoirs) {
  9521.                                 $montantTtc = (float)str_replace(',','.',$avoirs[0]->getMonatantAvoirTtc());
  9522.                                 $tauxTva = $avoir->getTauxTva() && $avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  9523.                                 if($avoir->getAutoliquidation()){
  9524.                                     $montantHt = $montantTtc;
  9525.                                 }else{
  9526.                                     $montantHt = $montantTtc / (1 + ($tauxTva/100));
  9527.                                 }
  9528.                                 $arrays[$i]['Montant HT'] = number_format((float)$montantHt,2,'.','');
  9529.                                 $arrays[$i]['Montant TTC'] = number_format((float)$montantTtc,2,'.','');
  9530.                                 $arrays[$i]['taux de TVA'] = number_format((float)$tauxTva,2,'.','');
  9531.                             } else {
  9532.                                 $arrays[$i]['Montant HT'] = number_format((float)$avoir->getMonatantHt(),2,'.','');
  9533.                                 $arrays[$i]['Montant TTC'] = number_format((float)$avoir->getMonatantTtc(),2,'.','');
  9534.                                 $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  9535.                             }
  9536.                         }else{
  9537.                             $montantHt = (float)str_replace(',','.',$project->getMontantHt());
  9538.                             $tauxTva = $avoir->getTauxTva() && (float)$avoir->getTauxTva() != 0 ? (float)$avoir->getTauxTva() : 20;
  9539.                             $arrays[$i]['Montant HT'] = number_format($montantHt,2,'.','');
  9540.                             $arrays[$i]['Montant TTC'] = number_format($montantHt + (1 *( $tauxTva/100)),2,'.','');
  9541.                             $arrays[$i]['taux de TVA'] = number_format((float)$avoir->getTauxTva(),2,'.','');
  9542.                         }
  9543.                         $arrays[$i]['Montant à régler'] = '';
  9544.                         $arrays[$i]['Référence facture fournisseur'] = '';
  9545.                         $arrays[$i]['Compteur ERPI pièce'] = $avoir->getCompteurErpiPiece();
  9546.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByAvoirAndNotTvaProject($avoir, $project->getProject());
  9547.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9548.                         $arrays[$i]['Commentaire comptable'] = '';
  9549.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9550.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9551.                         $arrays[$i]['Compteur facture associée'] = '';
  9552.                         $i++;
  9553.                     }
  9554.                 }
  9555.             }
  9556.         }
  9557.         return $arrays;
  9558.     }
  9559.     public function getC3AcomptesExportByCompteur($arrayCompteur){
  9560.         $factures = $this->em->getRepository(FactureFinance::class)->searchFactureByCompteur($arrayCompteur);
  9561.         $arrays = [];
  9562.         $i = 0;
  9563.         foreach ($factures as $facture){
  9564.             $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  9565.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  9566.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  9567.             $classification = $facture->getClassification();
  9568.             $dateComptable = $facture->getDateFacture()?$facture->getDateFacture()->format('d/m/Y'):'';
  9569.             $dateEcheance = $facture->getDelaiPaiementDate()?$facture->getDelaiPaiementDate()->format('d/m/Y'):'';
  9570.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  9571.             $numeroFacture = $facture->getNumeroFacture();
  9572.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  9573.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  9574.                     $arrays[$i]['Type de ligne'] = 'Acompte';
  9575.                     $arrays[$i]['Code Société'] = $spvName;
  9576.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  9577.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9578.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9579.                     $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  9580.                     $arrays[$i]['Date comptable'] = $dateComptable;
  9581.                     $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  9582.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9583.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9584.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9585.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9586. //                    $arrays[$i]['Montant à régler'] = (float)$tvaMultiple->getMontantTtc();
  9587.                     $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9588.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9589.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9590.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTva($facture,$tvaMultiple);
  9591.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9592. //                    if($facture->getIsAvoir()){
  9593. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9594. //                        $a = count($avoirs);
  9595. //                        $b = 1;
  9596. //                        $avoirNum = '';
  9597. //                        foreach ($avoirs as $item){
  9598. //                            if($b == $a){
  9599. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  9600. //                            }else{
  9601. //                                $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  9602. //                            }
  9603. //                            $b++;
  9604. //                        }
  9605. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  9606. //                    }else{
  9607.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  9608. //                    }
  9609.                     $arrays[$i]['Code projet'] = '';
  9610.                     $arrays[$i]['libellé projet'] = '';
  9611.                     $arrays[$i]['Compteur facture associée'] = '';
  9612.                     $i++;
  9613.                     if(count($facture->getProjectFactureFinance())>0){
  9614.                         foreach ($facture->getProjectFactureFinance() as $project){
  9615.                             $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9616.                             $arrays[$i]['Code Société'] = '';
  9617.                             $arrays[$i]['Code Sage'] = $spvCodeSage;
  9618.                             $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9619.                             $arrays[$i]['Code fournisseur Evalua'] = '';
  9620.                             $arrays[$i]['Acompte pour une charge'] = '';
  9621.                             $arrays[$i]['Date comptable'] = '';
  9622.                             $arrays[$i]['Date d’échéance'] = '';
  9623.                             $arrays[$i]['Date de création dans ERPI'] = '';
  9624.                             $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9625.                             $arrays[$i]['Montant TTC'] = '';
  9626.                             $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9627.                             $arrays[$i]['Montant à régler'] = '';
  9628.                             $arrays[$i]['Référence facture fournisseur'] = '';
  9629.                             $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9630.                             $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndTvaProject($facture,$tvaMultiple,$project->getProject());
  9631.                             $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9632.                             $arrays[$i]['Commentaire comptable'] = '';
  9633.                             $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9634.                             $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9635.                             $arrays[$i]['Compteur facture associée'] = '';
  9636.                             $i++;
  9637.                         }
  9638.                     }
  9639.                 }
  9640.             }
  9641.             else{
  9642.                 $arrays[$i]['Type de ligne'] = 'Acompte';
  9643.                 $arrays[$i]['Code Société'] = $spvName;
  9644.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  9645.                 $arrays[$i]['Code budgétaire'] = $classification;
  9646.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9647.                 $arrays[$i]['Acompte pour une charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  9648.                 $arrays[$i]['Date comptable'] = $dateComptable;
  9649.                 $arrays[$i]['Date d’échéance'] = $dateEcheance ? $dateEcheance : $dateComptable;
  9650.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9651.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  9652.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  9653.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  9654.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9655.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9656.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPiece();
  9657.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTva($facture);
  9658.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9659. //                if($facture->getIsAvoir()){
  9660. //                    $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9661. //                    $a = count($avoirs);
  9662. //                    $b = 1;
  9663. //                    $avoirNum = '';
  9664. //                    foreach ($avoirs as $item){
  9665. //                        if($b == $a){
  9666. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir();
  9667. //                        }else{
  9668. //                            $avoirNum .= $item->getAvoir()->getNumeroAvoir()." / ";
  9669. //                        }
  9670. //                        $b++;
  9671. //                    }
  9672. //                    $arrays[$i]['Commentaire comptable'] = $avoirNum;
  9673. //                }else{
  9674.                 $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  9675. //                }
  9676.                 $arrays[$i]['Code projet'] = '';
  9677.                 $arrays[$i]['libellé projet'] = '';
  9678.                 $arrays[$i]['Compteur facture associée'] = '';
  9679.                 $i++;
  9680.                 if(count($facture->getProjectFactureFinance())>0){
  9681.                     foreach ($facture->getProjectFactureFinance() as $project){
  9682.                         $arrays[$i]['Type de ligne'] = 'Affectation projet';
  9683.                         $arrays[$i]['Code Société'] = '';
  9684.                         $arrays[$i]['Code Sage'] = $spvCodeSage;
  9685.                         $arrays[$i]['Code budgétaire'] = $classification;
  9686.                         $arrays[$i]['Code fournisseur Evalua'] = '';
  9687.                         $arrays[$i]['Acompte pour une charge'] = '';
  9688.                         $arrays[$i]['Date comptable'] = '';
  9689.                         $arrays[$i]['Date d’échéance'] = '';
  9690.                         $arrays[$i]['Date de création dans ERPI'] = '';
  9691.                         $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$project->getMontantHt()),2,'.','');
  9692.                         $arrays[$i]['Montant TTC'] = '';
  9693.                         $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  9694.                         $arrays[$i]['Montant à régler'] = '';
  9695.                         $arrays[$i]['Référence facture fournisseur'] = '';
  9696.                         $arrays[$i]['Compteur ERPI pièce'] = '';
  9697.                         $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$project->getProject());
  9698.                         $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9699.                         $arrays[$i]['Commentaire comptable'] = '';
  9700.                         $arrays[$i]['Code projet'] = $project->getProject()->getCodeProject();
  9701.                         $arrays[$i]['libellé projet'] = $project->getProject()->getName();
  9702.                         $arrays[$i]['Compteur facture associée'] = '';
  9703.                         $i++;
  9704.                     }
  9705.                 }
  9706.             }
  9707.         }
  9708.         return $arrays;
  9709.     }
  9710.     public function getC4ReglementsExportByCompteur($arrayCompteur){
  9711.         $factures = $this->em->getRepository(FactureFinance::class)->searchreglementByCompteur($arrayCompteur);
  9712.         $arrays = [];
  9713.         $i = 0;
  9714.         foreach ($factures as $facture){
  9715.             $banqueFournisseur = '';
  9716.             $ibanFournisseur = '';
  9717.             $bicFournisseur = '';
  9718.             $codePaysFournisseur = '';
  9719.             if ($facture->getFournisseur()) {
  9720.                 if($facture->getRib()) {
  9721.                     $fournisseurBanque = $facture->getRib();
  9722.                 }else {
  9723.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId(), 'isDefault' => true]);
  9724.                 }
  9725.                 if (!$fournisseurBanque) {
  9726.                     $fournisseurBanque = $this->em->getRepository(Rib::class)->findOneBy(['fournisseur' => $facture->getFournisseur()->getId()]);
  9727.                 }
  9728.                 if ($fournisseurBanque) {
  9729.                     $banqueFournisseur = $fournisseurBanque->getBanque();
  9730.                     $ibanFournisseur = str_replace(" ","",$fournisseurBanque->getIban());
  9731.                     $bicFournisseur = $fournisseurBanque->getBic();
  9732.                 }
  9733.                 $codePaysFournisseur = $facture->getFournisseur()->getCountryCode();
  9734.             }
  9735. //            $spvName = $facture->getSpv()?$facture->getSpv()->getName():'';
  9736.             $spvName = '';
  9737.             $spvCodeSage = $facture->getSpv()?$facture->getSpv()->getCodeSage():'';
  9738.             $fournisseurCode = $facture->getFournisseur()?$facture->getFournisseur()->getCodeFournisseur():'';
  9739.             $classification = $facture->getClassification();
  9740.             $dateComptable = $facture->getDate()?$facture->getDate()->format('d/m/Y'):'';
  9741.             $dateEcheance = '';
  9742.             $dateCreation = $facture->getCreatedAt()?$facture->getCreatedAt()->format('d/m/Y'):'';
  9743.             $numeroFacture = $facture->getNumeroFacture();
  9744. //            if(count($facture->getProjectFactureFinance())>1){
  9745. //                foreach ($facture->getProjectFactureFinance() as $projectFinance){
  9746. //                    $arrays[$i]['Type de ligne'] = 'Reglement';
  9747. //                    $arrays[$i]['Code Société'] = $spvName;
  9748. //                    $arrays[$i]['Code Sage'] = $spvCodeSage;
  9749. //                    $arrays[$i]['Code budgétaire'] = $facture->getClassification();
  9750. //                    $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9751. //                    $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$facture->getClassification()]:'';
  9752. //                    $arrays[$i]['Date comptable'] = $dateComptable;
  9753. //                    $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9754. //                    $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9755. //                    $arrays[$i]['Montant HT'] = (float)$projectFinance->getMontantHt();
  9756. //                    if($facture->getTauxTva()){
  9757. //                        $tva = (float)$facture->getTauxTva();
  9758. //                    }else{
  9759. //                        $tva = 20;
  9760. //                    }
  9761. //                    $arrays[$i]['Montant TTC'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  9762. //                    $arrays[$i]['taux de TVA'] = $tva;
  9763. //                    $arrays[$i]['Montant à régler'] = (float)$projectFinance->getMontantHt() * (1 + ($tva/100) );
  9764. //                    $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9765. //                    $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  9766. ////                    $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  9767. ////                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9768. //
  9769. //                    $compteurErpiPieceFactureProject = $this->em->getRepository(CompteurErpiEcriture::class)->findByFactureAndNotTvaProject($facture,$projectFinance->getProject());
  9770. //                    $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFactureProject ? $compteurErpiPieceFactureProject->getCompteurErpiEcriture() : '';
  9771. //
  9772. //                    if($facture->getIsAvoir()){
  9773. //                        $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9774. //                        $a = count($avoirs);
  9775. //                        $b = 1;
  9776. //                        $avoirNum = '';
  9777. //                        foreach ($avoirs as $item){
  9778. //                            if($b == $a){
  9779. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  9780. //                            }else{
  9781. //                                $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  9782. //                            }
  9783. //                            $b++;
  9784. //                        }
  9785. //                        $arrays[$i]['Commentaire comptable'] = $avoirNum;
  9786. //                    }else{
  9787. //                        $arrays[$i]['Commentaire comptable'] = $facture->getCommentComptable();
  9788. //                    }
  9789. //                    $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  9790. //                    $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  9791. //                    $arrays[$i]['Compteur facture associée'] = $numeroFacture;
  9792. //                    $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  9793. //                    $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  9794. //                    $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  9795. //                    $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  9796. //                    $i++;
  9797. //                }
  9798. //            }else{
  9799.             if(count($facture->getTvaFactureFinance())>0 && $facture->getTauxTva() == 0){
  9800.                 foreach ($facture->getTvaFactureFinance() as $tvaMultiple){
  9801.                     $arrays[$i]['Type de ligne'] = 'Reglement';
  9802.                     $arrays[$i]['Code Société'] = $spvName;
  9803.                     $arrays[$i]['Code Sage'] = $spvCodeSage;
  9804.                     $arrays[$i]['Code budgétaire'] = $tvaMultiple->getClassification();
  9805.                     $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9806.                     $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()])?self::CHARGE_INVESTISSEMENT_DEPENSE[$tvaMultiple->getClassification()]:'';
  9807.                     $arrays[$i]['Date comptable'] = $dateComptable;
  9808.                     $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9809.                     $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9810.                     $arrays[$i]['Montant HT'] = number_format((float)$tvaMultiple->getMontantHt(),2,'.','');
  9811.                     $arrays[$i]['Montant TTC'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9812.                     $arrays[$i]['taux de TVA'] = number_format((float)$tvaMultiple->getTauxTva(),2,'.','');
  9813.                     $arrays[$i]['Montant à régler'] = number_format((float)$tvaMultiple->getMontantTtc(),2,'.','');
  9814. //                    $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9815.                     $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9816.                     $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  9817.                     $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndTva($facture,$tvaMultiple);
  9818.                     $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9819.                     if($facture->getIsAvoir()){
  9820.                         $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9821.                         $a = count($avoirs);
  9822.                         $b = 1;
  9823.                         $avoirNum = '';
  9824.                         foreach ($avoirs as $item){
  9825.                             if($b == $a){
  9826.                                 $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir();
  9827.                             }else{
  9828.                                 $avoirNum .= 'Avoir: ' .$item->getAvoir()->getNumeroAvoir()." / ";
  9829.                             }
  9830.                             $b++;
  9831.                         }
  9832.                         $arrays[$i]['Commentaire comptable'] = substr($avoirNum, 0, 127) ;
  9833.                     }else{
  9834.                         $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  9835.                     }
  9836.                     $arrays[$i]['Code projet'] = '';
  9837.                     $arrays[$i]['libellé projet'] = '';
  9838.                     $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  9839.                     $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  9840.                     $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  9841.                     $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  9842.                     $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  9843.                     $arrays[$i]['Autoliquidation'] = 0;
  9844.                     $tvaMontant = (float)str_replace(',','.',$tvaMultiple->getTauxTva()) * (float)str_replace(',','.',$tvaMultiple->getMontantHt()) / 100;
  9845.                     $arrays[$i]['Montant TVA'] = $tvaMontant;
  9846.                     $i++;
  9847.                 }
  9848.             }
  9849.             else{
  9850.                 $arrays[$i]['Type de ligne'] = 'Reglement';
  9851.                 $arrays[$i]['Code Société'] = $spvName;
  9852.                 $arrays[$i]['Code Sage'] = $spvCodeSage;
  9853.                 $arrays[$i]['Code budgétaire'] = $classification;
  9854.                 $arrays[$i]['Code fournisseur Evalua'] = $fournisseurCode;
  9855.                 $arrays[$i]['Facture de charge'] = isset(self::CHARGE_INVESTISSEMENT_DEPENSE[$classification])?self::CHARGE_INVESTISSEMENT_DEPENSE[$classification]:'';
  9856.                 $arrays[$i]['Date comptable'] = $dateComptable;
  9857.                 $arrays[$i]['Date d’échéance'] = $dateEcheance;
  9858.                 $arrays[$i]['Date de création dans ERPI'] = $dateCreation;
  9859.                 $arrays[$i]['Montant HT'] = number_format((float)str_replace(',','.',$facture->getMonatantHt()),2,'.','');
  9860.                 $arrays[$i]['Montant TTC'] = number_format((float)str_replace(',','.',$facture->getMonatantTtc()),2,'.','');
  9861.                 $arrays[$i]['taux de TVA'] = number_format((float)str_replace(',','.',$facture->getTauxTva()),2,'.','');
  9862.                 $arrays[$i]['Montant à régler'] = $this->getMontantFinalTtcFacture($facture);
  9863.                 $arrays[$i]['Référence facture fournisseur'] = $numeroFacture;
  9864.                 $arrays[$i]['Compteur ERPI pièce'] = $facture->getCompteurErpiPieceReglement();
  9865.                 $compteurErpiPieceFacture = $this->em->getRepository(CompteurErpiEcritureReglement::class)->findByFactureAndNotTva($facture);
  9866.                 $arrays[$i]['Compteur ERPI écritures'] = $compteurErpiPieceFacture ? $compteurErpiPieceFacture->getCompteurErpiEcriture() : '';
  9867.                 if($facture->getIsAvoir()){
  9868.                     $avoirs = $this->em->getRepository(AvoirFactureFinance::class)->findBy(['financeFacture'=>$facture->getId()]);
  9869.                     $a = count($avoirs);
  9870.                     $b = 1;
  9871.                     $avoirNum = '';
  9872.                     foreach ($avoirs as $item){
  9873.                         if($b == $a){
  9874.                             $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir();
  9875.                         }else{
  9876.                             $avoirNum .='Avoir: ' . $item->getAvoir()->getNumeroAvoir()." / ";
  9877.                         }
  9878.                         $b++;
  9879.                     }
  9880.                     $arrays[$i]['Commentaire comptable'] = substr($avoirNum, 0, 127);
  9881.                 }else{
  9882.                     $arrays[$i]['Commentaire comptable'] = preg_replace("/\r\n|\r|\n/", ' ', substr($facture->getNote(), 0, 127));
  9883.                 }
  9884. //                    foreach ($facture->getProjectFactureFinance() as $projectFinance){
  9885. //                        $arrays[$i]['Code projet'] = $projectFinance->getProject()->getCodeProject();
  9886. //                        $arrays[$i]['libellé projet'] = $projectFinance->getProject()->getName();
  9887. //                    }
  9888.                 $arrays[$i]['Code projet'] = '';
  9889.                 $arrays[$i]['libellé projet'] =  '';
  9890.                 $arrays[$i]['Compteur facture associée'] = $facture->getCompteurErpiPiece();
  9891.                 $arrays[$i]['banqueFournisseur'] = $banqueFournisseur;
  9892.                 $arrays[$i]['ibanFournisseur'] = $ibanFournisseur;
  9893.                 $arrays[$i]['bicFournisseur'] = $bicFournisseur;
  9894.                 $arrays[$i]['codePaysFournisseur'] = $codePaysFournisseur;
  9895.                 $arrays[$i]['Autoliquidation'] = $facture->getAutoliquidation() ? 1 : 0;
  9896.                 $tvaMontant = (float)str_replace(',','.',$facture->getTauxTva()) * (float)str_replace(',','.',$facture->getMonatantHt()) / 100;
  9897.                 $arrays[$i]['Montant TVA'] = $tvaMontant;
  9898.                 $i++;
  9899.             }
  9900. //            }
  9901.         }
  9902.         return $arrays;
  9903.     }
  9904.     public function paginateLogAPI($request){
  9905.         $length = $request->get('length');
  9906.         $length = $length && ($length!=-1)?$length:0;
  9907.         $start = $request->get('start');
  9908.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  9909.         $column =  $search = $request->get('columns');
  9910.         $order = $request->get('order')[0];
  9911.         $columnOrder = $order['column'];
  9912.         $dirOrder = $order['dir'];
  9913.         $columNameOrder = $column[$columnOrder]['data'];
  9914.         $search = $request->get('search');
  9915.         $btnTypeTab = $request->get('btnTypeTab');
  9916.         $filters = [
  9917.             'query' => trim(@$search['value']),
  9918.             'btnTypeTab' => $btnTypeTab,
  9919.             'isError' => $request->get('isError'),
  9920.             'numeroDocument' => $request->get('numeroDocument'),
  9921.         ];
  9922.         $results= $this->em->getRepository(\App\Entity\EfacData::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  9923.         $recordsFiltered= $this->em->getRepository(\App\Entity\EfacData::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  9924.         $recordsTotal= $this->em->getRepository(\App\Entity\EfacData::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  9925.         $output = array(
  9926.             'data' => array(),
  9927.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  9928.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  9929.         );
  9930.         $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  9931.         foreach ($results as $result) {
  9932.             // N° de Facture | Avoir : extrait depuis le contenu JSON du log
  9933.             $numFacture = '';
  9934.             $dataEfac = $result->getDataEfac();
  9935.             if ($dataEfac) {
  9936.                 $decoded = json_decode($dataEfac, true);
  9937.                 if (is_array($decoded) && isset($decoded['documentList']) && is_array($decoded['documentList'])) {
  9938.                     $numeros = [];
  9939.                     foreach ($decoded['documentList'] as $document) {
  9940.                         if (isset($document['invoice_number_fournisseur']) && $document['invoice_number_fournisseur']) {
  9941.                             $numeros[] = $document['invoice_number_fournisseur'];
  9942.                         }
  9943.                     }
  9944.                     $numFacture = implode(', ', $numeros);
  9945.                 }
  9946.             }
  9947.             // Bouton "Voir" pour afficher le contenu du log (data-efac) dans une modal
  9948.             $action = '';
  9949.             if ($dataEfac) {
  9950.                 $action = '<a href="#" class="btn btn-primaryCustom btn-sm showDataEfac" style="color: #fff !important;" data-data="' . htmlspecialchars($dataEfac, ENT_QUOTES) . '">Voir</a>';
  9951.             }
  9952.             // Msg : "Ok" pour le succès (200) ; sinon bouton "Voir le msg" ouvrant une modal avec le message formaté
  9953.             $rawMsg = $result->getMsg();
  9954.             if ((string)$rawMsg === '200') {
  9955.                 $msg = 'Ok';
  9956.             } elseif ($rawMsg) {
  9957.                 $msg = '<a href="#" class="btn btn-primaryCustom btn-sm showMsgEfac" style="color: #fff !important;" data-msg="' . htmlspecialchars($rawMsg, ENT_QUOTES) . '">Voir le msg</a>';
  9958.             } else {
  9959.                 $msg = '';
  9960.             }
  9961.             $output['data'][] = [
  9962.                 'responsive_id' => '',
  9963.                 'id' => $result->getId(),
  9964.                 'numFacture' => $numFacture,
  9965.                 'transactionId' => $result->getTransactionId(),
  9966.                 'msg' => $msg,
  9967.                 'createdAt' => $result->getCreatedAt() ? $result->getCreatedAt()->format('d/m/Y H:i') : '',
  9968.                 'action' => $action,
  9969.             ];
  9970.         }
  9971.         return $output;
  9972.     }
  9973.     /**
  9974.      * Rend le message d'un log Efac lisible (décodage unicode / extraction des messages JSON).
  9975.      */
  9976.     public function formatEfacMsg($rawMsg)
  9977.     {
  9978.         if ((string)$rawMsg === '200') {
  9979.             return 'Ok';
  9980.         }
  9981.         if (!$rawMsg) {
  9982.             return '';
  9983.         }
  9984.         $decoded = json_decode($rawMsg, true);
  9985.         if (is_array($decoded)) {
  9986.             $messages = [];
  9987.             if (isset($decoded['message'])) {
  9988.                 $messages[] = $decoded['message'];
  9989.             } else {
  9990.                 foreach ($decoded as $item) {
  9991.                     if (is_array($item) && isset($item['message'])) {
  9992.                         $messages[] = $item['message'];
  9993.                     } elseif (is_string($item)) {
  9994.                         $messages[] = $item;
  9995.                     }
  9996.                 }
  9997.             }
  9998.             return $messages ? implode(' | ', $messages) : json_encode($decoded, JSON_UNESCAPED_UNICODE);
  9999.         }
  10000.         $msgDecoded = json_decode('"' . str_replace('"', '\"', $rawMsg) . '"');
  10001.         return $msgDecoded !== null ? $msgDecoded : $rawMsg;
  10002.     }
  10003.     /**
  10004.      * Envoie au super administrateur l'ensemble des logs Efac du jour.
  10005.      */
  10006.     public function sendLogEfacDuJour()
  10007.     {
  10008.         $date = new \DateTime();
  10009.         $results = $this->em->getRepository(\App\Entity\EfacData::class)->findByDay($date);
  10010.         $logs = [];
  10011.         foreach ($results as $result) {
  10012.             // N° de Facture | Avoir : extrait depuis le contenu JSON du log
  10013.             $numFacture = '';
  10014.             $dataEfac = $result->getDataEfac();
  10015.             if ($dataEfac) {
  10016.                 $decoded = json_decode($dataEfac, true);
  10017.                 if (is_array($decoded) && isset($decoded['documentList']) && is_array($decoded['documentList'])) {
  10018.                     $numeros = [];
  10019.                     foreach ($decoded['documentList'] as $document) {
  10020.                         if (isset($document['invoice_number_fournisseur']) && $document['invoice_number_fournisseur']) {
  10021.                             $numeros[] = $document['invoice_number_fournisseur'];
  10022.                         }
  10023.                     }
  10024.                     $numFacture = implode(', ', $numeros);
  10025.                 }
  10026.             }
  10027.             $logs[] = [
  10028.                 'numFacture' => $numFacture,
  10029.                 'transactionId' => $result->getTransactionId(),
  10030.                 'msg' => $this->formatEfacMsg($result->getMsg()),
  10031.             ];
  10032.         }
  10033.         $this->notification->sendLogEfacDuJour('Logs API Efac du ' . $date->format('d/m/Y'), $logs, $date);
  10034.         return count($logs);
  10035.     }
  10036. }