src/Controller/AdminController.php line 158

Open in your IDE?
  1. <?php
  2. // src/Controller/EntrepriseController.php
  3. namespace App\Controller;
  4. use App\Entity\AppUser;
  5. use App\Entity\SlidePhoto;
  6. use App\Entity\ImageArticleBlog;
  7. use App\Entity\CategorieArticle;
  8. use App\Entity\FactureAcompte;
  9. use App\Entity\ProductPhoto;
  10. use App\Form\ArticleEditType;
  11. use App\Form\ArticleType;
  12. use App\Entity\Article;
  13. use App\Entity\Product;
  14. use App\Entity\ProductOrder;
  15. use App\Entity\TVA;
  16. use App\Entity\Pays;
  17. use App\Form\TVAEditType;
  18. use App\Form\TVAType;
  19. use App\Entity\PaymentMethod;
  20. use App\Form\PaymentMethodEditType;
  21. use App\Form\PaymentMethodType;
  22. use App\Form\ProduitType;
  23. use App\Form\ProduitEditType;
  24. use App\Form\SujetFAQType;
  25. use App\Form\SujetFAQEditType;
  26. use App\Entity\Entreprise;
  27. use App\Form\ProductType;
  28. use App\Form\ProductEditType;
  29. use App\Entity\Tiers;
  30. use App\Entity\Produit;
  31. use App\Entity\ProduitCommande;
  32. use App\Entity\Category;
  33. use App\Entity\SubCategory;
  34. use App\Form\CategorieProduitType;
  35. use App\Form\CategorieArticleEditType;
  36. use App\Form\CategorieArticleType;
  37. use App\Form\CategoryType;
  38. use App\Entity\ShippingMethod;
  39. use App\Form\ShippingMethodType;
  40. use App\Form\ShippingMethodEditType;
  41. use App\Form\CategoryEditType;
  42. use App\Form\SubCategoryType;
  43. use App\Form\SubCategoryEditType;
  44. use App\Form\ArticleAideType;
  45. use App\Entity\ArticleAide;
  46. use App\Entity\Boutique;
  47. use App\Form\ArticleAideEditType;
  48. use App\Entity\Coupon;
  49. use App\Entity\PrixProduit;
  50. use App\Form\CouponType;
  51. use App\Form\CouponEditType;
  52. use App\Form\BoutiqueType;
  53. use App\Form\CategorieProduitEditType;
  54. use App\Entity\Commande;
  55. use App\Entity\CategorieProduit;
  56. use App\Form\TiersType;
  57. use App\Form\TiersEditType;
  58. use App\Entity\ModeleReglement;
  59. use App\Entity\Payment;
  60. use App\Entity\ValiditeService;
  61. use App\Entity\UserBoutique;
  62. use App\Form\CategorieArticleAideType;
  63. use App\Form\CategorieArticleAideEditType;
  64. use App\Entity\Ticket;
  65. use App\Form\TicketType;
  66. use App\Entity\CommentaireTicket;
  67. use App\Form\CommentaireTicketType;
  68. use App\Services\ChiffreEnLettre;
  69. use App\Entity\RequeteAjoutBoutique;
  70. use App\Entity\EntreeDeStock;
  71. use App\Entity\ProduitEntreeDeStock;
  72. use App\Entity\Expensive;
  73. use App\Form\ExpensiveType;
  74. use App\Form\ExpensiveEditType;
  75. use App\Entity\PresenceEmploye;
  76. use App\Entity\PresenceEmployeUser;
  77. use App\Entity\RubriqueSalaire;
  78. use App\Form\RubriqueSalaireType;
  79. use App\Form\RubriqueSalaireEditType;
  80. use App\Entity\RubriqueSalaireEmploye;
  81. use App\Entity\Conge;
  82. use App\Entity\Compte;
  83. use App\Form\CompteType;
  84. use App\Form\EcritureComptableType;
  85. use App\Form\JournalComptabiliteType;
  86. use App\Form\JournalComptabiliteEditType;
  87. use App\Entity\JournalComptabilite;
  88. use App\Entity\EcritureComptable;
  89. use App\Entity\RubriqueSalairePaiement;
  90. use App\Entity\PaiementSalaire;
  91. use App\Entity\GroupeEcritureComptable;
  92. use App\Form\CategorieDepenseType;
  93. use App\Entity\CategorieDepense;
  94. use App\Form\CategorieDepenseEditType;
  95. use App\Form\VisiteType;
  96. use App\Entity\Visite;
  97. use App\Form\VisiteEditType;
  98. use App\Entity\VisitePhoto;
  99. use App\Entity\Projet;
  100. use App\Form\ProjetType;
  101. use App\Form\ProjetEditType;
  102. use App\Entity\EtapeProjet;
  103. use App\Form\EtapeProjetType;
  104. use App\Form\EtapeProjetEditType;
  105. use App\Entity\Stock;
  106. use App\Form\EmployeType;
  107. use App\Form\EmployeEditType;
  108. use App\Entity\Photo;
  109. use App\Entity\DroitUtilisateur;
  110. use App\Entity\MouvementDeStock;
  111. use App\Entity\MouvementDeStockProduit; 
  112. use App\Entity\Magasin;
  113. use App\Form\MagasinType;
  114. use App\Form\MagasinEditType;
  115. use Symfony\Component\HttpFoundation\Response;
  116. use Symfony\Component\HttpFoundation\Request;
  117. use Symfony\Component\HttpFoundation\JsonResponse;
  118. use Symfony\Component\Routing\Annotation\Route;
  119. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  120. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  121. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  122. use Symfony\Component\Mailer\MailerInterface;
  123. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  124. use Symfony\Component\HttpKernel\KernelInterface;
  125. use Spipu\Html2Pdf\Html2Pdf;
  126. /**
  127.  * @Route("/{_locale}/dashboard")
  128.  */
  129. class AdminController extends AbstractController
  130. {    
  131.     private $kernel;
  132.     
  133.     public function  __construct(KernelInterface $kernel)
  134.     {
  135.         $this->kernel = $kernel;
  136.         
  137.     }
  138.     
  139.     /**
  140.      * @Route("/shop/{slug}", name="admin.show_shop")
  141.      * @return \Symfony\Component\HttpFoundation\Response
  142.      */
  143.     public function afficherBoutiqueAction(Request $request, Boutique $boutique)
  144.     {
  145.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  146.            return $this->redirectToRoute('security_login');
  147.         }
  148.         
  149.         
  150.         $em = $this->getDoctrine()
  151.                     ->getManager();
  152.         $user = $this->getUser();
  153.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  154.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  155.         $dateDebut->setTime(0, 0);
  156.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  157.         $dateFin->setTime(23, 59);
  158.         
  159.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  160.         $startMonth = $intervalleMois['debut'];
  161.         $endMonth = $intervalleMois['fin'];
  162.         
  163.         $invoices  = $em->getRepository(Commande::class)
  164.                         ->commandeParDateEtType($boutique->getId(), 'invoice', $dateDebut, $dateFin);
  165.         
  166.         $startYear = date('Y-01-01');
  167.         $endYear = date('Y-12-31');
  168.         $userBoutique = $em->getRepository(UserBoutique::class)
  169.                         ->findOneBy(
  170.                             array(
  171.                             'user' => $user->getId(),
  172.                             'boutique' => $boutique->getId()
  173.                             )
  174.                         );
  175.                         
  176.         return $this->render('admin/afficher_boutique.html.twig', [
  177.             'boutique' => $boutique,
  178.             'userBoutique' => $userBoutique,
  179.             'dateDebut' => $dateDebut,
  180.            'dateFin' => $dateFin,
  181.            'startMonth' => $startMonth,
  182.            'endMonth' => $endMonth,
  183.            'startYear' => $startYear,
  184.            'endYear' => $endYear,
  185.         ]);
  186.     }
  187.     
  188.     /**
  189.      * @Route("/shop/{slug}/mini-statistic", name="admin.mini_statistic")
  190.      * @return \Symfony\Component\HttpFoundation\Response
  191.      */
  192.     public function miniStatisticAction(Request $request, Boutique $boutique)
  193.     {
  194.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  195.            return $this->redirectToRoute('security_login');
  196.         }
  197.         
  198.         $em = $this->getDoctrine()
  199.                     ->getManager();
  200.         
  201.         $user = $this->getUser();
  202.               
  203.         
  204.         $mois = date('mY');
  205.         $annee = date('Y');
  206.         $chiffrDAffaireMois = $em->getRepository(Commande::class)
  207.                         ->chiffrDAffairePeriodique($mois, $boutique->getId());
  208.         
  209.         $chiffrDAffaireAnnee = $em->getRepository(Commande::class)
  210.                         ->chiffrDAffairePeriodique($annee, $boutique->getId());
  211.                         
  212.         $depenseMois = $em->getRepository(Expensive::class)
  213.                         ->depensePeriodique($mois, $boutique->getId());
  214.         $depenseAnnee = $em->getRepository(Expensive::class)
  215.                         ->depensePeriodique($annee, $boutique->getId());
  216.         $nombreTiers = 0;
  217.         
  218.         $nombreTiers = $em->getRepository(Tiers::class)
  219.                         ->nombreTiers($boutique->getId());
  220.         
  221.         $nombreProduit = $em->getRepository(Produit::class)
  222.                         ->nombreProduit($boutique->getId());
  223.         
  224.         $commandParMois = $em->getRepository(Commande::class)
  225.                         ->chiffrDAffaireParMois($annee, $boutique->getId());
  226.         
  227.         $chiffreDAffaireSurPlsAnnees = $em->getRepository(Commande::class)
  228.                         ->chiffrDAffaireSurPluisieursAnnees($boutique->getId());
  229.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  230.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  231.         $dateDebut->setTime(0, 0);
  232.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  233.         $dateFin->setTime(23, 59);
  234.         if($request->getMethod() == 'POST'){
  235.             $dateDebut = $request->request->get('dateDebut');
  236.             $dateDebut = new \DateTime($dateDebut);
  237.             $dateDebut->setTime(0, 0);
  238.             $dateFin = $request->request->get('dateFin');
  239.             $dateFin = new \DateTime($dateFin);
  240.             $dateFin->setTime(23, 59);
  241.         }
  242.         $chiffreDAffaireDUnePeriode = $em->getRepository(Commande::class)
  243.                                         ->chiffreDAffaireDUnePeriode('invoice', $boutique->getId(), $dateDebut, $dateFin);
  244.         
  245.         $devisPeriodique  = $em->getRepository(Commande::class)
  246.                                         ->chiffreDAffaireDUnePeriode('proposal', $boutique->getId(), $dateDebut, $dateFin);
  247.         
  248.         if(!empty($devisPeriodique)){
  249.             $devisPeriodique = $devisPeriodique[0]['totalVente'];
  250.         }else{
  251.             $devisPeriodique = 0;
  252.         }
  253.         if(!empty($chiffreDAffaireDUnePeriode)){
  254.             
  255.             $chiffreDAffaireDUnePeriode = $chiffreDAffaireDUnePeriode[0]['totalVente'];
  256.         }else{
  257.             $chiffreDAffaireDUnePeriode = 0;
  258.         }
  259.         $paiementDUnePeriode = $em->getRepository(Payment::class)
  260.                                 ->paiementDUnePeriode($boutique, $dateDebut, $dateFin);
  261.         
  262.         if(!empty($paiementDUnePeriode)){
  263.             $paiementDUnePeriode = $paiementDUnePeriode[0]['montantTotal'];
  264.         }else{
  265.             $paiementDUnePeriode = 0;
  266.         }
  267.         $totalDepenseParDate = $em->getRepository(Expensive::class)
  268.                                 ->totalDepenseParDate($boutique->getId(), $dateDebut, $dateFin);
  269.         if(!empty($totalDepenseParDate)){
  270.             $totalDepenseParDate = $totalDepenseParDate[0]['totalDepense'];
  271.         } else{
  272.             $totalDepenseParDate = 0;
  273.         }
  274.         $soldeTimbreFNE = $boutique->getSoldeTimbreFNE();
  275.         $userBoutique = $em->getRepository(UserBoutique::class)
  276.                         ->findOneBy(
  277.                             array(
  278.                             'user' => $user->getId(),
  279.                             'boutique' => $boutique->getId()
  280.                             )
  281.                         );
  282.         return $this->render('admin/mini_statistic.html.twig', [
  283.            'boutique' => $boutique,
  284.            'chiffrDAffaireAnnee' => $chiffrDAffaireAnnee,
  285.            'chiffrDAffaireMois' => $chiffrDAffaireMois,
  286.            'nombreTiers' => $nombreTiers,
  287.            'nombreProduit' => $nombreProduit,
  288.            'commandParMois' => $commandParMois, 
  289.            'chiffreDAffaireSurPlsAnnees' => $chiffreDAffaireSurPlsAnnees,
  290.            'userBoutique' => $userBoutique,
  291.            'depenseMois' => $depenseMois,
  292.            'depenseAnnee' => $depenseAnnee,
  293.            'chiffreDAffaireDUnePeriode' => $chiffreDAffaireDUnePeriode,
  294.            'totalDepenseParDate' => $totalDepenseParDate,
  295.            'soldeTimbreFNE' => $soldeTimbreFNE,
  296.            'paiementDUnePeriode' => $paiementDUnePeriode,
  297.            'devisPeriodique' => $devisPeriodique
  298.         ]);
  299.     }
  300.     
  301.     
  302.     /**
  303.      * @Route("/sales-total/{slug}", name="admin.sales_total")
  304.      * @return \Symfony\Component\HttpFoundation\Response
  305.      */
  306.     public function salesTotal(Request $request, Boutique $boutique)
  307.     {
  308.         $em = $this->getDoctrine()
  309.                     ->getManager();
  310.         
  311.         $user = $this->getUser();
  312.               
  313.             
  314.         $mois = date('mY');
  315.         $annee = date('Y');
  316.         $chiffrDAffaireMois = $em->getRepository(Commande::class)
  317.                         ->chiffrDAffairePeriodique($mois, $boutique->getId());
  318.         
  319.         $chiffrDAffaireAnnee = $em->getRepository(Commande::class)
  320.                         ->chiffrDAffairePeriodique($annee, $boutique->getId());
  321.         $nombreTiers = 0;
  322.         
  323.         $nombreTiers = $em->getRepository(Tiers::class)
  324.                         ->nombreTiers($boutique->getId());
  325.         
  326.         $nombreProduit = $em->getRepository(Produit::class)
  327.                         ->nombreProduit($boutique->getId());
  328.         
  329.         $commandParMois = $em->getRepository(Commande::class)
  330.                         ->chiffrDAffaireParMois($annee, $boutique->getId());
  331.         
  332.         $chiffreDAffaireSurPlsAnnees = $em->getRepository(Commande::class)
  333.                         ->chiffrDAffaireSurPluisieursAnnees($boutique->getId());
  334.         $userBoutique = $em->getRepository(UserBoutique::class)
  335.                         ->findOneBy(
  336.                             array(
  337.                             'user' => $user->getId(),
  338.                             'boutique' => $boutique->getId()
  339.                             )
  340.                         );
  341.         return $this->render('admin/sales_total.html.twig', [
  342.            'boutique' => $boutique,
  343.            'chiffrDAffaireAnnee' => $chiffrDAffaireAnnee,
  344.            'chiffrDAffaireMois' => $chiffrDAffaireMois,
  345.            'nombreTiers' => $nombreTiers,
  346.            'nombreProduit' => $nombreProduit,
  347.            'commandParMois' => $commandParMois,
  348.            'chiffreDAffaireSurPlsAnnees' => $chiffreDAffaireSurPlsAnnees,
  349.            'userBoutique' => $userBoutique
  350.         ]);
  351.     }
  352.     
  353.     
  354.     /**
  355.      * @Route("/{slug}/verifier-abonnement", name="admin.verifier_abonnement")
  356.      * @return \Symfony\Component\HttpFoundation\Response
  357.      */
  358.     public function verifierAbonnementAction(Request $request, Boutique $boutique)
  359.     {
  360.             
  361.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  362.            return $this->redirectToRoute('security_login');
  363.         }
  364.         
  365.         $em = $this->getDoctrine()
  366.                     ->getManager();
  367.                     
  368.         $derniereValiditeService =  $em->getRepository(ValiditeService::class)
  369.                         ->derniereValiditeService($boutique->getId());
  370.             
  371.         $user = $this->getUser();
  372.         
  373.         $nombreDeJour = 0;
  374.         $aujourdhui = new \DateTime();
  375.         $interV = '';
  376.         if(null !== $derniereValiditeService){
  377.                 
  378.             $interV = $aujourdhui->diff($derniereValiditeService->getValableJusquAu());
  379.             
  380.             $nombreDeJour = $interV->days;
  381.         }
  382.         
  383.         if($nombreDeJour <= 0){
  384.             
  385.             //return $this->redirectToRoute('choose_paied_plan');
  386.         }
  387.         $userBoutique = $em->getRepository(UserBoutique::class)
  388.                         ->findOneBy(
  389.                             array(
  390.                             'user' => $user->getId(),
  391.                             'boutique' => $boutique->getId()
  392.                             )
  393.                         );
  394.         return $this->render('admin/verifier_abonnement.html.twig', [
  395.            'boutique' => $boutique,
  396.            'derniereValiditeService' => $derniereValiditeService,
  397.            'nombreDeJour' => $nombreDeJour,
  398.            'userBoutique' => $userBoutique
  399.         ]);
  400.     }
  401.     
  402.     
  403.     //Proposals
  404.     /**
  405.      * @Route("/{slug}/proposals", name="admin.proposals")
  406.      * @return \Symfony\Component\HttpFoundation\Response
  407.      */
  408.     public function proposalsAction( Request $request, Boutique $boutique)
  409.     {
  410.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  411.            return $this->redirectToRoute('security_login');
  412.         }
  413.         
  414.         $em = $this->getDoctrine()
  415.                     ->getManager();
  416.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  417.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  418.         $dateDebut->setTime(0, 0);
  419.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  420.         $dateFin->setTime(23, 59);
  421.         
  422.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  423.         $startMonth = $intervalleMois['debut'];
  424.         $endMonth = $intervalleMois['fin'];
  425.         
  426.         $proposals  = $em->getRepository(Commande::class)
  427.                         ->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
  428.         $user = $this->getUser();
  429.         $userBoutique = $em->getRepository(UserBoutique::class)
  430.                         ->findOneBy(
  431.                             array(
  432.                             'user' => $user->getId(),
  433.                             'boutique' => $boutique->getId()
  434.                             )
  435.                         );
  436.         $startYear = date('Y-01-01');
  437.         $endYear = date('Y-12-31');
  438.         $clients = $em->getRepository(Tiers::class)
  439.                     ->findBy(
  440.                         array(
  441.                             'boutique' => $boutique->getId(),
  442.                             'estSupprime' => false
  443.                             
  444.                         ),
  445.                         array(
  446.                             'nom' => 'ASC'
  447.                         )
  448.                     );
  449.         if('POST' == $request->getMethod()){
  450.             $dateDebut = $_POST['dateDebut'];
  451.             $dateFin = $_POST['dateFin'];
  452.             
  453.             $dateDebut = new \DateTime($dateDebut);
  454.             $dateDebut->setTime(0, 0);
  455.             $dateFin = new \DateTime($dateFin);
  456.             $dateFin->setTime(23, 59);
  457.             
  458.             $proposals  = $em->getRepository(Commande::class)
  459.                         ->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
  460.             
  461.             
  462.             return $this->render('admin/proposals_table_content.html.twig', [
  463.                'boutique' => $boutique,
  464.                'proposals' => $proposals,
  465.                'userBoutique' => $userBoutique
  466.             ]);
  467.             
  468.         }
  469.         
  470.         return $this->render('admin/proposals.html.twig', [
  471.            'boutique' => $boutique,
  472.            'proposals' => $proposals,
  473.            'dateDebut' => $dateDebut,
  474.            'dateFin' => $dateFin,
  475.            'startMonth' => $startMonth,
  476.            'endMonth' => $endMonth,
  477.            'startYear' => $startYear,
  478.            'endYear' => $endYear,
  479.            'userBoutique' => $userBoutique,
  480.            'clients' => $clients
  481.         ]);
  482.     }
  483.     
  484.     //Proposals
  485.     /**
  486.      * @Route("/{slug}/deposits", name="admin.deposits")
  487.      * @return \Symfony\Component\HttpFoundation\Response
  488.      */
  489.     public function depositsAction( Request $request, Boutique $boutique)
  490.     {
  491.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  492.            return $this->redirectToRoute('security_login');
  493.         }
  494.         
  495.         $em = $this->getDoctrine()
  496.                     ->getManager();
  497.         
  498.             
  499.         $user = $this->getUser();
  500.         $userBoutique = $em->getRepository(UserBoutique::class)
  501.                         ->findOneBy(
  502.                             array(
  503.                             'user' => $user->getId(),
  504.                             'boutique' => $boutique->getId()
  505.                             )
  506.                         );
  507.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  508.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  509.         $dateDebut->setTime(0, 0);
  510.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  511.         $dateFin->setTime(23, 59);
  512.         
  513.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  514.         $startMonth = $intervalleMois['debut'];
  515.         $endMonth = $intervalleMois['fin'];
  516.         
  517.         $deposits  = $em->getRepository(FactureAcompte::class)
  518.                         ->factureParDate($boutique->getId(), $dateDebut, $dateFin);
  519.         
  520.         
  521.         $startYear = date('Y-01-01');
  522.         $endYear = date('Y-12-31');
  523.         if('POST' == $request->getMethod()){
  524.             $dateDebut = $_POST['dateDebut'];
  525.             $dateFin = $_POST['dateFin'];
  526.             
  527.             $dateDebut = new \DateTime($dateDebut);
  528.             $dateDebut->setTime(0, 0);
  529.             $dateFin = new \DateTime($dateFin);
  530.             $dateFin->setTime(23, 59);
  531.             
  532.             $deposits  = $em->getRepository(FactureAcompte::class)
  533.                         ->factureParDate($boutique->getId(), $dateDebut, $dateFin);
  534.         
  535.             return $this->render('admin/deposits_table_content.html.twig', [
  536.                'boutique' => $boutique,
  537.                'deposits' => $deposits,
  538.                 'userBoutique' => $userBoutique
  539.             ]);
  540.             
  541.         }
  542.         
  543.         
  544.     
  545.         return $this->render('admin/deposits.html.twig', [
  546.            'boutique' => $boutique,
  547.            'deposits' => $deposits,
  548.            'dateDebut' => $dateDebut,
  549.            'dateFin' => $dateFin,
  550.            'startMonth' => $startMonth,
  551.            'endMonth' => $endMonth,
  552.            'startYear' => $startYear,
  553.            'endYear' => $endYear,
  554.            'userBoutique' => $userBoutique
  555.         ]);
  556.     }
  557.     
  558.     //Proposals
  559.     /**
  560.      * @Route("/{slug}/new-deposit", name="admin.new_deposit")
  561.      * @return \Symfony\Component\HttpFoundation\Response
  562.      */
  563.     public function newDepositAction( Request $request, Boutique $boutique)
  564.     {
  565.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  566.            return $this->redirectToRoute('security_login');
  567.         }
  568.         
  569.         $responseFNE = '';
  570.         $vehicules = array(1, 22, 23, 28);
  571.         $em = $this->getDoctrine()
  572.                     ->getManager();
  573.         $tvas  = $em->getRepository(TVA::class)
  574.                         ->findBy(
  575.                             array(
  576.                                 'boutique' => $boutique->getId()
  577.                             )
  578.                         );
  579.         $factures  = $em->getRepository(Commande::class)
  580.                         ->facturesPourVersement( $boutique->getId());
  581.                         
  582.         $editMode = 'new';
  583.         $user = $this->getUser();
  584.         $userBoutique = $em->getRepository(UserBoutique::class)
  585.                         ->findOneBy(
  586.                             array(
  587.                             'user' => $user->getId(),
  588.                             'boutique' => $boutique->getId()
  589.                             )
  590.                         );
  591.         if($request->getMethod() == 'POST'){
  592.             $facture = $_POST['facture'];
  593.             $facture = $em->getRepository(Commande::class)
  594.                             ->findOneBy(
  595.                                 array(
  596.                                 'boutique' => $boutique->getId(),
  597.                                 'id' => $facture
  598.                                 )
  599.                             );
  600.         
  601.             $montant = $_POST['montant'];
  602.             $valableJusquAu = '';
  603.             if(isset($_POST['valableJusquAu'])){
  604.                 $valableJusquAu = $_POST['valableJusquAu'];
  605.             }
  606.             
  607.             $pourcentage = $_POST['pourcentage'];
  608.             $appliquerTVA = false;
  609.             if(isset($_POST['appliquerTVA'])){
  610.                 $appliquerTVA = (bool) $_POST['appliquerTVA'];
  611.             }
  612.             
  613.             $tva = 0;
  614.             if(isset($_POST['tva'])){
  615.                 $tva = $_POST['tva'];
  616.             }
  617.             $laDate = '';
  618.             if(isset($_POST['laDate'])){
  619.                 $laDate = $_POST['laDate'];
  620.             }
  621.             
  622.             $deposit = new FactureAcompte;
  623.             $deposit->setTotalHT($montant);
  624.             $deposit->setPourcentage($pourcentage);
  625.             $deposit->setBoutique($boutique);
  626.             $deposit->setTiers($facture->getTiers());
  627.             $deposit->setFacture($facture);
  628.             $deposit->setLaDate(new \DateTime($laDate));
  629.             $deposit->setValableJusquAu(new \DateTime($valableJusquAu));
  630.             $deposit->setNumero($this->getNumero('deposit', $boutique));
  631.             if($appliquerTVA){
  632.                 $deposit->setTotalTVA(($montant * $tva)/100);
  633.                 $ttc = $montant * (1 + $tva/100);
  634.                 $deposit->setTotalTTC($ttc);
  635.                 $deposit->setValeurTVA($tva);
  636.             } else{
  637.                 $deposit->setTotalTTC($montant);
  638.                 $deposit->setValeurTVA(0);
  639.             }
  640.             $em->persist($deposit);
  641.             $em->flush();
  642.             
  643.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  644.                     
  645.             $content = $this->renderView('pdf/facture_acompte.html.twig', [
  646.                 'boutique' => $boutique,
  647.                 'facture' => $deposit,
  648.             ]);
  649.             $pdf->writeHTML($content);
  650.             $name = 'deposit'.$deposit->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
  651.             $lienPhysique = $deposit->getUploadRootDir().$name;
  652.             
  653.             $deposit->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  654.             $pdf->output($lienPhysique, 'F');
  655.             
  656.             $em->flush();
  657.             
  658.             return $this->render('admin/response_new_deposit.html.twig', [
  659.                    'boutique' => $boutique,
  660.                    'commande' => $deposit,
  661.                    'responseFNE' => $responseFNE,
  662.                     'vehicules' => $vehicules
  663.                 ]);
  664.         }
  665.         return $this->render('admin/new_deposit.html.twig', [
  666.            'boutique' => $boutique,
  667.            'factures' => $factures,
  668.            'editMode' => $editMode,
  669.            'tvas' => $tvas,
  670.            'userBoutique' => $userBoutique
  671.         ]);
  672.     }
  673.     
  674.     //Proposals
  675.     /**
  676.      * @Route("/{slug}/edit-deposit/{id}", name="admin.edit_deposit")
  677.      * @return \Symfony\Component\HttpFoundation\Response
  678.      */
  679.     public function editDepositAction( Request $request,  $slug, $id)
  680.     {
  681.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  682.            return $this->redirectToRoute('security_login');
  683.         }
  684.         
  685.         $em = $this->getDoctrine()
  686.                     ->getManager();
  687.         
  688.         $boutique  = $em->getRepository(Boutique::class)
  689.                         ->findOneBySlug($slug);
  690.         $user = $this->getUser();
  691.         $userBoutique = $em->getRepository(UserBoutique::class)
  692.                         ->findOneBy(
  693.                             array(
  694.                             'user' => $user->getId(),
  695.                             'boutique' => $boutique->getId()
  696.                             )
  697.                         );
  698.                         
  699.         $factures  = $em->getRepository(Commande::class)
  700.                         ->findBy(
  701.                             array(
  702.                                 'boutique' => $boutique->getId(),
  703.                                 'typeFacture' => 'invoice'
  704.                             )
  705.                         );
  706.         
  707.         $tvas  = $em->getRepository(TVA::class)
  708.                         ->findBy(
  709.                             array(
  710.                                 'boutique' => $boutique->getId()
  711.                             )
  712.                         );
  713.         
  714.         $deposit  = $em->getRepository(FactureAcompte::class)
  715.                         ->findOneBy(
  716.                             array(
  717.                                 'boutique' => $boutique->getId(),
  718.                                 'id' => $id
  719.                             )
  720.                         );
  721.         
  722.         $editMode = 'edit';
  723.         if($request->getMethod() == 'POST'){
  724.         $facture = $_POST['facture'];
  725.             $facture = $em->getRepository(Commande::class)
  726.                             ->findOneBy(
  727.                                 array(
  728.                                 'boutique' => $boutique->getId(),
  729.                                 'id' => $facture
  730.                                 )
  731.                             );
  732.         
  733.             $montant = $_POST['montant'];
  734.             $pourcentage = $_POST['pourcentage'];
  735.             $appliquerTVA = false;
  736.             if(isset($_POST['appliquerTVA'])){
  737.                 $appliquerTVA = (bool) $_POST['appliquerTVA'];
  738.             }
  739.             
  740.             $tva = 0;
  741.             if(isset($_POST['tva'])){
  742.                 $tva = $_POST['tva'];
  743.             }
  744.             
  745.             $laDate = '';
  746.             if(isset($_POST['laDate'])){
  747.                 $laDate = $_POST['laDate'];
  748.             }
  749.             
  750.             $deposit->setTotalHT($montant);
  751.             $deposit->setPourcentage($pourcentage);
  752.             $deposit->setBoutique($boutique);
  753.             $deposit->setTiers($facture->getTiers());
  754.             $deposit->setLaDate(new \DateTime($laDate));
  755.             if($appliquerTVA){
  756.                 $deposit->setTotalTVA(($montant * $tva)/100);
  757.                 $ttc = $montant * (1 + $tva)/100;
  758.                 $deposit->setTotalTVA(($montant * $tva)/100);
  759.                 $deposit->setTotalTTC($ttc);
  760.                 $deposit->setValeurTVA($tva);
  761.             } else{
  762.                 $deposit->setTotalTTC($montant);
  763.                 $deposit->setValeurTVA(0);
  764.                 $deposit->setTotalTVA(0);
  765.             }
  766.             
  767.             $em->flush();
  768.         }
  769.         return $this->render('admin/edit_deposit.html.twig', [
  770.            'boutique' => $boutique,
  771.            'factures' => $factures,
  772.            'editMode' => $editMode,
  773.            'tvas' => $tvas,
  774.            'deposit' => $deposit,
  775.            'userBoutique' => $userBoutique
  776.         ]);
  777.     }
  778.     
  779.     /**
  780.      * @Route("/{slug}/delete-deposit/{id}", name="admin.delete_deposit")
  781.      * @return \Symfony\Component\HttpFoundation\Response
  782.      */
  783.     public function deleteDepositAction( Request $request,  $slug, $id)
  784.     {
  785.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  786.            return $this->redirectToRoute('security_login');
  787.         }
  788.         
  789.         $em = $this->getDoctrine()
  790.                     ->getManager();
  791.         
  792.         $boutique  = $em->getRepository(Boutique::class)
  793.                         ->findOneBySlug($slug);
  794.         
  795.         $user = $this->getUser();
  796.         $userBoutique = $em->getRepository(UserBoutique::class)
  797.                         ->findOneBy(
  798.                             array(
  799.                             'user' => $user->getId(),
  800.                             'boutique' => $boutique->getId()
  801.                             )
  802.                         );
  803.         $deposit  = $em->getRepository(FactureAcompte::class)
  804.                         ->findOneBy(
  805.                             array(
  806.                                 'boutique' => $boutique->getId(),
  807.                                 'id' => $id
  808.                             )
  809.                         );
  810.         if(null != $deposit){
  811.             $em->remove($deposit);
  812.             $em->flush();
  813.         }
  814.         return $this->redirectToRoute('admin.deposits', array('slug' => $boutique->getSlug()));
  815.     }
  816.     
  817.     
  818.     /**
  819.      * @Route("/{slug}/invoices", name="admin.invoices")
  820.      * @return \Symfony\Component\HttpFoundation\Response
  821.      */
  822.     public function invoicesAction( Request $request, Boutique $boutique)
  823.     {
  824.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  825.            return $this->redirectToRoute('security_login');
  826.         }
  827.         
  828.         $em = $this->getDoctrine()
  829.                     ->getManager();
  830.                     
  831.         $paymentMethods = $em->getRepository(PaymentMethod::class)
  832.                     ->findBy(
  833.                         array(
  834.                             'boutique' => $boutique->getId()
  835.                         )
  836.                     );
  837.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  838.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  839.         $dateDebut->setTime(0, 0);
  840.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  841.         $dateFin->setTime(23, 59);
  842.         
  843.         
  844.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  845.         $startMonth = $intervalleMois['debut'];
  846.         $endMonth = $intervalleMois['fin'];
  847.         
  848.         $invoices  = $em->getRepository(Commande::class)
  849.                         ->commandeParDate($boutique->getId(), $dateDebut, $dateFin, $boutique->getSettings()->getFactureAAfficher());
  850.         
  851.         $startYear = date('Y-01-01');
  852.         $endYear = date('Y-12-31');
  853.         $user = $this->getUser();
  854.         
  855.         $userBoutique = $em->getRepository(UserBoutique::class)
  856.                         ->findOneBy(
  857.                             array(
  858.                             'user' => $user->getId(),
  859.                             'boutique' => $boutique->getId()
  860.                             )
  861.                         );
  862.         $clients = $em->getRepository(Tiers::class)
  863.                     ->findBy(
  864.                         array(
  865.                             'boutique' => $boutique->getId(),
  866.                             'estSupprime' => false
  867.                             
  868.                         ),
  869.                         array(
  870.                             'nom' => 'ASC'
  871.                         )
  872.                     );
  873.         if('POST' == $request->getMethod()){
  874.             $dateDebut = $_POST['dateDebut'];
  875.             $dateFin = $_POST['dateFin'];
  876.             
  877.             $dateDebut = new \DateTime($dateDebut);
  878.             $dateDebut->setTime(0, 0);
  879.             $dateFin = new \DateTime($dateFin);
  880.             $dateFin->setTime(23, 59);
  881.             
  882.             $invoices  = $em->getRepository(Commande::class)
  883.                         ->commandeParDate($boutique->getId(), $dateDebut, $dateFin, $boutique->getSettings()->getFactureAAfficher());
  884.             
  885.             
  886.             return $this->render('admin/invoices_table_content.html.twig', [
  887.                'boutique' => $boutique,
  888.                'invoices' => $invoices,
  889.                'userBoutique' => $userBoutique
  890.             ]);
  891.         }
  892.         
  893.         return $this->render('admin/invoices.html.twig', [
  894.            'boutique' => $boutique,
  895.            'paymentMethods' => $paymentMethods,
  896.            'invoices' => $invoices,
  897.            'dateDebut' => $dateDebut,
  898.            'dateFin' => $dateFin,
  899.            'startMonth' => $startMonth,
  900.            'endMonth' => $endMonth,
  901.            'startYear' => $startYear,
  902.            'endYear' => $endYear,
  903.            'userBoutique' => $userBoutique,
  904.            'clients' => $clients
  905.         ]);
  906.     }
  907.     /**
  908.      * @Route("/{slug}/reglement-par-client/{id}/{dateDebut}/{dateFin}", name="admin_reglement_par_client")
  909.      * @return \Symfony\Component\HttpFoundation\Response
  910.      */
  911.     public function reglementParClientAction( Request $request, $slug, $id = 0, $dateDebut = '', $dateFin = '')
  912.     {
  913.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  914.            return $this->redirectToRoute('security_login');
  915.         }
  916.         
  917.         $em = $this->getDoctrine()
  918.                     ->getManager();
  919.                         
  920.         $boutique = $em->getRepository(Boutique::class)
  921.                         ->findOneBySlug($slug);
  922.         
  923.         
  924.         $user = $this->getUser();
  925.         $userBoutique = $em->getRepository(UserBoutique::class)
  926.                         ->findOneBy(
  927.                             array(
  928.                             'user' => $user->getId(),
  929.                             'boutique' => $boutique->getId()
  930.                             )
  931.                         );
  932.         $client = $em->getRepository(Tiers::class)
  933.                     ->findOneById($id);
  934.         $dateDebut = new \DateTime($dateDebut);
  935.         $dateDebut->setTime(0, 0);
  936.         $dateFin = new \DateTime($dateFin);
  937.         $dateFin->setTime(23, 59);
  938.         $paiements  = $em->getRepository(Payment::class)
  939.                         ->paiementParClientDateEtType($boutique->getId(), $id, $dateDebut, $dateFin);
  940.     
  941.         if($id == 0){
  942.             return $this->render('admin/reglement_par_client.html.twig', [
  943.                 'boutique' => $boutique,
  944.                 
  945.                 'paiements' => $paiements,
  946.                 'dateDebut' => $dateDebut,
  947.                 'dateFin' => $dateFin,
  948.                 'userBoutique' => $userBoutique,
  949.                 ]);
  950.         }
  951.        
  952.         return $this->render('admin/reglement_par_client.html.twig', [
  953.            'boutique' => $boutique,
  954.            
  955.            'paiements' => $paiements,
  956.            'dateDebut' => $dateDebut,
  957.            'dateFin' => $dateFin,
  958.            'userBoutique' => $userBoutique,
  959.         ]);
  960.     }
  961.     /**
  962.      * @Route("/{slug}/imprimer-reglement-par-client/{id}/{dateDebut}/{dateFin}", name="admin_imprimer_reglement_par_client")
  963.      * @return \Symfony\Component\HttpFoundation\Response
  964.      */
  965.     public function imprimerReglementParClientAction( Request $request, $slug, $id = 0,  $dateDebut = '', $dateFin = '')
  966.     {
  967.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  968.            return $this->redirectToRoute('security_login');
  969.         }
  970.         
  971.         $em = $this->getDoctrine()
  972.                     ->getManager();
  973.                         
  974.         $boutique = $em->getRepository(Boutique::class)
  975.                         ->findOneBySlug($slug);
  976.         
  977.         
  978.         $user = $this->getUser();
  979.         $userBoutique = $em->getRepository(UserBoutique::class)
  980.                         ->findOneBy(
  981.                             array(
  982.                             'user' => $user->getId(),
  983.                             'boutique' => $boutique->getId()
  984.                             )
  985.                         );
  986.         $client = $em->getRepository(Tiers::class)
  987.                     ->findOneById($id);
  988.         $dateDebut = new \DateTime($dateDebut);
  989.         $dateDebut->setTime(0, 0);
  990.         $dateFin = new \DateTime($dateFin);
  991.         $dateFin->setTime(23, 59);
  992.         $paiements  = $em->getRepository(Payment::class)
  993.                         ->paiementParClientDateEtType($boutique->getId(), $id, $dateDebut, $dateFin);
  994.         $pdf = new Html2Pdf('P', 'A4', 'fr');
  995.         if($id == 0){
  996.             $content = $this->renderView('pdf/paiement_pour_tous_les_clients.html.twig', [
  997.                         'boutique' => $boutique,
  998.                         'paiements' => $paiements,
  999.                         'dateDebut' => $dateDebut,
  1000.                         'dateFin' => $dateFin,
  1001.                         'userBoutique' => $userBoutique,
  1002.                     ]);
  1003.         }else{
  1004.             $content = $this->renderView('pdf/paiement_par_client.html.twig', [
  1005.                         'boutique' => $boutique,
  1006.                         'client' => $client,
  1007.                         'paiements' => $paiements,
  1008.                         'dateDebut' => $dateDebut,
  1009.                         'dateFin' => $dateFin,
  1010.                         'userBoutique' => $userBoutique,
  1011.                     ]);
  1012.         }
  1013.         
  1014.         $pdf->writeHTML($content);
  1015.         $name = time().$boutique->getId().rand(1, 10000).'.pdf';
  1016.         $photo = new Photo;
  1017.         $lienPhysique = $photo->getUploadRootDir().$name;
  1018.                 
  1019.         $pdf->output($lienPhysique, 'I');
  1020.         return $this->render('pdf/reglement_par_client.html.twig', [
  1021.            'boutique' => $boutique,
  1022.            'client' => $client,
  1023.            'invoices' => $invoices,
  1024.            'dateDebut' => $dateDebut,
  1025.            'dateFin' => $dateFin,
  1026.            'userBoutique' => $userBoutique,
  1027.         ]);
  1028.     }
  1029.     /**
  1030.      * @Route("/{slug}/point-par-client/{id}/{type}/{dateDebut}/{dateFin}", name="admin_point_par_client")
  1031.      * @return \Symfony\Component\HttpFoundation\Response
  1032.      */
  1033.     public function pointParClientAction( Request $request, $slug, $id = 0, $type = 'invoice', $dateDebut = '', $dateFin = '')
  1034.     {
  1035.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1036.            return $this->redirectToRoute('security_login');
  1037.         }
  1038.         
  1039.         $em = $this->getDoctrine()
  1040.                     ->getManager();
  1041.                         
  1042.         $boutique = $em->getRepository(Boutique::class)
  1043.                         ->findOneBySlug($slug);
  1044.         
  1045.         
  1046.         $user = $this->getUser();
  1047.         $userBoutique = $em->getRepository(UserBoutique::class)
  1048.                         ->findOneBy(
  1049.                             array(
  1050.                             'user' => $user->getId(),
  1051.                             'boutique' => $boutique->getId()
  1052.                             )
  1053.                         );
  1054.         $client = $em->getRepository(Tiers::class)
  1055.                     ->findOneById($id);
  1056.         $dateDebut = new \DateTime($dateDebut);
  1057.         $dateDebut->setTime(0, 0);
  1058.         $dateFin = new \DateTime($dateFin);
  1059.         $dateFin->setTime(23, 59);
  1060.         $invoices  = $em->getRepository(Commande::class)
  1061.                         ->commandeParClientDateEtType($boutique->getId(), $type, $id, $dateDebut, $dateFin);
  1062.     
  1063.         if($id == 0){
  1064.             return $this->render('admin/point_par_client.html.twig', [
  1065.                 'boutique' => $boutique,
  1066.                 
  1067.                 'invoices' => $invoices,
  1068.                 'dateDebut' => $dateDebut,
  1069.                 'dateFin' => $dateFin,
  1070.                 'userBoutique' => $userBoutique,
  1071.                 ]);
  1072.         }
  1073.        
  1074.         return $this->render('admin/point_par_client.html.twig', [
  1075.            'boutique' => $boutique,
  1076.            
  1077.            'invoices' => $invoices,
  1078.            'dateDebut' => $dateDebut,
  1079.            'dateFin' => $dateFin,
  1080.            'userBoutique' => $userBoutique,
  1081.         ]);
  1082.     }
  1083.     /**
  1084.      * @Route("/{slug}/imprimer-point-par-client/{id}/{type}/{dateDebut}/{dateFin}", name="admin_imprimer_point_par_client")
  1085.      * @return \Symfony\Component\HttpFoundation\Response
  1086.      */
  1087.     public function imprimerPointParClientAction( Request $request, $slug, $id = 0, $type = 'invoice', $dateDebut = '', $dateFin = '')
  1088.     {
  1089.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1090.            return $this->redirectToRoute('security_login');
  1091.         }
  1092.         
  1093.         $em = $this->getDoctrine()
  1094.                     ->getManager();
  1095.                         
  1096.         $boutique = $em->getRepository(Boutique::class)
  1097.                         ->findOneBySlug($slug);
  1098.         
  1099.         
  1100.         $user = $this->getUser();
  1101.         $userBoutique = $em->getRepository(UserBoutique::class)
  1102.                         ->findOneBy(
  1103.                             array(
  1104.                             'user' => $user->getId(),
  1105.                             'boutique' => $boutique->getId()
  1106.                             )
  1107.                         );
  1108.         $client = $em->getRepository(Tiers::class)
  1109.                     ->findOneById($id);
  1110.         $dateDebut = new \DateTime($dateDebut);
  1111.         $dateDebut->setTime(0, 0);
  1112.         $dateFin = new \DateTime($dateFin);
  1113.         $dateFin->setTime(23, 59);
  1114.         $invoices  = $em->getRepository(Commande::class)
  1115.                         ->commandeParClientDateEtType($boutique->getId(), $type, $id, $dateDebut, $dateFin);
  1116.         $pdf = new Html2Pdf('P', 'A4', 'fr');
  1117.         if($id == 0){
  1118.             $content = $this->renderView('pdf/point_pour_tous_les_clients.html.twig', [
  1119.                         'boutique' => $boutique,
  1120.                         'invoices' => $invoices,
  1121.                         'dateDebut' => $dateDebut,
  1122.                         'dateFin' => $dateFin,
  1123.                         'userBoutique' => $userBoutique,
  1124.                     ]);
  1125.         }else{
  1126.             $content = $this->renderView('pdf/point_par_client.html.twig', [
  1127.                         'boutique' => $boutique,
  1128.                         'client' => $client,
  1129.                         'invoices' => $invoices,
  1130.                         'dateDebut' => $dateDebut,
  1131.                         'dateFin' => $dateFin,
  1132.                         'userBoutique' => $userBoutique,
  1133.                     ]);
  1134.         }
  1135.         
  1136.         $pdf->writeHTML($content);
  1137.         $name = time().$boutique->getId().rand(1, 10000).'.pdf';
  1138.         $photo = new Photo;
  1139.         $lienPhysique = $photo->getUploadRootDir().$name;
  1140.                 
  1141.         $pdf->output($lienPhysique, 'I');
  1142.         return $this->render('pdf/point_par_client.html.twig', [
  1143.            'boutique' => $boutique,
  1144.            'client' => $client,
  1145.            'invoices' => $invoices,
  1146.            'dateDebut' => $dateDebut,
  1147.            'dateFin' => $dateFin,
  1148.            'userBoutique' => $userBoutique,
  1149.         ]);
  1150.     }
  1151.     //Proposals
  1152.     /**
  1153.      * @Route("/{slug}/detail-commande/{id}", name="admin_detail_commande")
  1154.      * @return \Symfony\Component\HttpFoundation\Response
  1155.      */
  1156.     public function detailCommandeAction( Request $request, $slug, $id=0)
  1157.     {
  1158.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1159.            return $this->redirectToRoute('security_login');
  1160.         }
  1161.         $em = $this->getDoctrine()
  1162.                     ->getManager();
  1163.         $boutique = $em->getRepository(Boutique::class)
  1164.                         ->findOneBySlug($slug);
  1165.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  1166.                                 ->findBy(
  1167.                                     array(
  1168.                                         'commande' => $id
  1169.                                     )
  1170.                                 );
  1171.         return $this->render('admin/detail_commande.html.twig', [
  1172.            'produitCommandes' => $produitCommandes,
  1173.         ]);
  1174.     }
  1175.     /**
  1176.      * @Route("/{slug}/rh/tableau-de-bord", name="admin_rh_tableau_de_bord")
  1177.      * @return \Symfony\Component\HttpFoundation\Response
  1178.      */
  1179.     public function rhTableauDeBordAction( Request $request, Boutique $boutique)
  1180.     {
  1181.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1182.            return $this->redirectToRoute('security_login');
  1183.         }  
  1184.         $em = $this->getDoctrine()
  1185.                     ->getManager();
  1186.         
  1187.         $user = $this->getUser();
  1188.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  1189.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1190.         $dateDebut->setTime(0, 0);
  1191.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1192.         $dateFin->setTime(23, 59);
  1193.         
  1194.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  1195.         $startMonth = $intervalleMois['debut'];
  1196.         $endMonth = $intervalleMois['fin'];
  1197.         
  1198.         $startYear = date('Y-01-01');
  1199.         $endYear = date('Y-12-31');
  1200.         
  1201.         $estParti = false;
  1202.         $nombreDEmployeActuel = $em->getRepository(UserBoutique::class)
  1203.                     ->nombreDEmployeActuel($boutique->getId(), 'ROLE_EMPLOYE', $estParti);
  1204.         $nombreDEmployeActuel = $nombreDEmployeActuel[0]['nombreEmploye'];
  1205.         $estParti = true;
  1206.         $nombreDEmployeParti = $em->getRepository(UserBoutique::class)
  1207.                     ->nombreDEmployeActuel($boutique->getId(), 'ROLE_EMPLOYE', $estParti);
  1208.         $nombreDEmployeParti = $nombreDEmployeParti[0]['nombreEmploye'];
  1209.         $heureDeTravails = $em->getRepository(PresenceEmployeUser::class)
  1210.                     ->heureDeTravail($boutique->getId(), $dateDebut, $dateFin);
  1211.         
  1212.         $tempsDeTravail = 0;
  1213.         $heureSupplementaires = 0;
  1214.         
  1215.         if(!empty($heureDeTravails)){
  1216.             $tempsDeTravail = $heureDeTravails[0]['tempsDeTravail'];
  1217.             $heureSupplementaires = $heureDeTravails[0]['heureSupplementaire'];
  1218.         }
  1219.         
  1220.         
  1221.         $userBoutique = $em->getRepository(UserBoutique::class)
  1222.                         ->findOneBy(
  1223.                             array(
  1224.                             'user' => $user->getId(),
  1225.                             'boutique' => $boutique->getId()
  1226.                             )
  1227.                         );
  1228.         
  1229.         
  1230.         return $this->render('admin/rh_tableau_de_bord.html.twig', [
  1231.            'boutique' => $boutique,
  1232.             'nombreDEmployeParti' => $nombreDEmployeParti,
  1233.            'userBoutique' => $userBoutique,
  1234.            'nombreDEmployeActuel' => $nombreDEmployeActuel,
  1235.            'tempsDeTravail' => $tempsDeTravail,
  1236.             'heureSupplementaires' => $heureSupplementaires,
  1237.             'dateDebut' => $dateDebut,
  1238.            'dateFin' => $dateFin,
  1239.            'startMonth' => $startMonth,
  1240.            'endMonth' => $endMonth,
  1241.            'startYear' => $startYear,
  1242.            'endYear' => $endYear,
  1243.         ]);
  1244.     }
  1245.     /**
  1246.      * @Route("/{slug}/rh/employees", name="admin_rh_employees")
  1247.      * @return \Symfony\Component\HttpFoundation\Response
  1248.      */
  1249.     public function employeesAction( Request $request, Boutique $boutique)
  1250.     {
  1251.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1252.            return $this->redirectToRoute('security_login');
  1253.         }      
  1254.         $em = $this->getDoctrine()
  1255.                     ->getManager();
  1256.         
  1257.         $user = $this->getUser();
  1258.         
  1259.         
  1260.         $employes = $em->getRepository(UserBoutique::class)
  1261.                     ->findBy(
  1262.                         array(
  1263.                             'boutique' => $boutique->getId(),
  1264.                             'estParti' => false
  1265.                         )
  1266.                     );
  1267.         
  1268.         
  1269.         $userBoutique = $em->getRepository(UserBoutique::class)
  1270.                         ->findOneBy(
  1271.                             array(
  1272.                             'user' => $user->getId(),
  1273.                             'boutique' => $boutique->getId(),
  1274.                             
  1275.                             )
  1276.                         );
  1277.         
  1278.         
  1279.         return $this->render('admin/employes.html.twig', [
  1280.            'boutique' => $boutique,
  1281.             'employes' => $employes,
  1282.            'userBoutique' => $userBoutique
  1283.         ]);
  1284.     }
  1285.     /**
  1286.      * @Route("/{slug}/rh/pointage-journalier", name="admin_pointage_journalier")
  1287.      * @return \Symfony\Component\HttpFoundation\Response
  1288.      */
  1289.     public function pointageJournalierAction( Request $request, Boutique $boutique)
  1290.     {
  1291.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1292.            return $this->redirectToRoute('security_login');
  1293.         }      
  1294.         $em = $this->getDoctrine()
  1295.                     ->getManager();
  1296.         
  1297.         $user = $this->getUser();
  1298.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  1299.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1300.         
  1301.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1302.         
  1303.         
  1304.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  1305.         $startMonth = $intervalleMois['debut'];
  1306.         $endMonth = $intervalleMois['fin'];
  1307.         
  1308.         $presenceEmployeParDates  = $em->getRepository(PresenceEmploye::class)
  1309.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut, $dateFin);
  1310.         
  1311.         $startYear = date('Y-01-01');
  1312.         $endYear = date('Y-12-31');
  1313.         if($request->getMethod() == 'POST'){
  1314.             $dateDebut = $request->request->get('dateDebut');
  1315.             $dateDebut = new \DateTime($dateDebut);
  1316.             $dateFin = $request->request->get('dateFin');
  1317.             $dateFin = new \DateTime($dateFin);
  1318.             $presenceEmployeParDates  = $em->getRepository(PresenceEmploye::class)
  1319.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut, $dateFin);
  1320.              return $this->render('admin/contenu_table_pointage_journalier.html.twig', [
  1321.                 
  1322.                 'presenceEmployeParDates' => $presenceEmployeParDates
  1323.                 
  1324.                 ]);
  1325.                     
  1326.         }
  1327.         $userBoutique = $em->getRepository(UserBoutique::class)
  1328.                         ->findOneBy(
  1329.                             array(
  1330.                             'user' => $user->getId(),
  1331.                             'boutique' => $boutique->getId()
  1332.                             )
  1333.                         );
  1334.         
  1335.         
  1336.         return $this->render('admin/pointage_journalier.html.twig', [
  1337.            'boutique' => $boutique,
  1338.            'userBoutique' => $userBoutique,
  1339.            'presenceEmployeParDates' => $presenceEmployeParDates,
  1340.             'dateDebut' => $dateDebut,
  1341.            'dateFin' => $dateFin,
  1342.            'startMonth' => $startMonth,
  1343.            'endMonth' => $endMonth,
  1344.            'startYear' => $startYear,
  1345.            'endYear' => $endYear,
  1346.         ]);
  1347.     }
  1348.     /**
  1349.      * @Route("/{slug}/rh/element-pointage-journalier/{idPresence}", name="admin_element_pointage_journalier")
  1350.      * @return \Symfony\Component\HttpFoundation\Response
  1351.      */
  1352.     public function elementPointageJournalierAction( Request $request, Boutique $boutique, $idPresence = '')
  1353.     {
  1354.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1355.            return $this->redirectToRoute('security_login');
  1356.         }      
  1357.         $em = $this->getDoctrine()
  1358.                     ->getManager();
  1359.         
  1360.         $user = $this->getUser();
  1361.         $presenceEmploye  = $em->getRepository(PresenceEmploye::class)
  1362.                         ->findOneById($idPresence);
  1363.         
  1364.         $presenceEmployeUsers  = $em->getRepository(PresenceEmployeUser::class)
  1365.                         ->findByPresenceEmploye($presenceEmploye);
  1366.         
  1367.         
  1368.         
  1369.         $userBoutique = $em->getRepository(UserBoutique::class)
  1370.                         ->findOneBy(
  1371.                             array(
  1372.                             'user' => $user->getId(),
  1373.                             'boutique' => $boutique->getId()
  1374.                             )
  1375.                         );
  1376.         
  1377.         
  1378.         return $this->render('admin/element_pointage_journalier.html.twig', [
  1379.            'boutique' => $boutique,
  1380.            'userBoutique' => $userBoutique,
  1381.            'presenceEmployeUsers' => $presenceEmployeUsers,
  1382.         ]);
  1383.     }
  1384.     /**
  1385.      * @Route("/{slug}/rh/nouveau-pointage-journalier", name="admin_nouveau_pointage_journalier")
  1386.      * @return \Symfony\Component\HttpFoundation\Response
  1387.      */
  1388.     public function nouveauPointageJournalierAction( Request $request, Boutique $boutique)
  1389.     {
  1390.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1391.            return $this->redirectToRoute('security_login');
  1392.         }      
  1393.         $em = $this->getDoctrine()
  1394.                     ->getManager();
  1395.         
  1396.         $user = $this->getUser();
  1397.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  1398.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1399.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1400.         
  1401.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  1402.         $startMonth = $intervalleMois['debut'];
  1403.         $endMonth = $intervalleMois['fin'];
  1404.         
  1405.         $presenceEmployeParDates  = $em->getRepository(PresenceEmploye::class)
  1406.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut, $dateFin);
  1407.         
  1408.         $startYear = date('Y-01-01');
  1409.         $endYear = date('Y-12-31');
  1410.         
  1411.         $employes = $em->getRepository(UserBoutique::class)
  1412.                         ->findBy(
  1413.                             array(
  1414.                                 'boutique' => $boutique,
  1415.                                 'estParti' => false
  1416.                             )
  1417.                         );
  1418.         if($request->getMethod() == 'POST'){
  1419.             $laDate = $request->request->get('la_date');
  1420.             $laDate = new \DateTime($laDate);
  1421.             $presenceEmploye = new PresenceEmploye;
  1422.             $presenceEmploye->setBoutique($boutique);
  1423.             $presenceEmploye->setLaDate($laDate);
  1424.             $em->persist($presenceEmploye);
  1425.             $em->flush();
  1426.             foreach($employes as $employe){
  1427.                 $estPresent =  (bool)$request->request->get('est_present'.$employe->getUser()->getId());
  1428.                 $heureDebut =  $request->request->get('heure_debut'.$employe->getUser()->getId());
  1429.                 $heureDebut = new \DateTime($heureDebut);
  1430.                 $heureFin =  $request->request->get('heure_fin'.$employe->getUser()->getId());
  1431.                 $heureFin = new \DateTime($heureFin);
  1432.                 $tempsDeTravail =  (float)$request->request->get('temps_de_travail'.$employe->getUser()->getId());
  1433.                 $heureSupplementaire =  $request->request->get('heure_supplementaire'.$employe->getUser()->getId());
  1434.                 
  1435.                 if($estPresent){
  1436.                     $presenceEmployeUser = new PresenceEmployeUser;
  1437.                     $presenceEmployeUser->setUser($employe->getUser());
  1438.                     $presenceEmployeUser->setBoutique($boutique);
  1439.                     $presenceEmployeUser->setPresenceEmploye($presenceEmploye);
  1440.                     $presenceEmployeUser->setEstPresent($estPresent);
  1441.                     $presenceEmployeUser->setDatePresence($laDate);
  1442.                     $presenceEmployeUser->setHeureArrivee($heureDebut);
  1443.                     $presenceEmployeUser->setHeureDepart($heureFin);
  1444.                     $presenceEmployeUser->setHeurePassee($tempsDeTravail);
  1445.                     $presenceEmployeUser->setHeureSupplementaire($heureSupplementaire);
  1446.                     $em->persist($presenceEmployeUser);
  1447.                     $em->flush();
  1448.                     
  1449.                 }
  1450.             }
  1451.         }
  1452.         $userBoutique = $em->getRepository(UserBoutique::class)
  1453.                         ->findOneBy(
  1454.                             array(
  1455.                             'user' => $user->getId(),
  1456.                             'boutique' => $boutique->getId()
  1457.                             )
  1458.                         );
  1459.         
  1460.         
  1461.         return $this->render('admin/nouveau_pointage_journalier.html.twig', [
  1462.            'boutique' => $boutique,
  1463.            'userBoutique' => $userBoutique,
  1464.            'employes' => $employes,
  1465.            'presenceEmployeParDates' => $presenceEmployeParDates,
  1466.             'dateDebut' => $dateDebut,
  1467.            'dateFin' => $dateFin,
  1468.            'startMonth' => $startMonth,
  1469.            'endMonth' => $endMonth,
  1470.            'startYear' => $startYear,
  1471.            'endYear' => $endYear,
  1472.         ]);
  1473.     }
  1474.     
  1475.     
  1476.     //Salaire
  1477.     /**
  1478.      * @Route("/{slug}/rh/salaire", name="admin_rh_salaires")
  1479.      * @return \Symfony\Component\HttpFoundation\Response
  1480.      */
  1481.     public function salairesAction( Request $request, Boutique $boutique)
  1482.     {
  1483.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1484.            return $this->redirectToRoute('security_login');
  1485.         }      
  1486.         $em = $this->getDoctrine()
  1487.                     ->getManager();
  1488.         
  1489.         $user = $this->getUser();
  1490.         
  1491.         
  1492.         $employes = $em->getRepository(UserBoutique::class)
  1493.                     ->findBy(
  1494.                         array(
  1495.                             'boutique' => $boutique->getId(),
  1496.                             'estParti' => false,
  1497.                             'estEmploye' => true
  1498.                         )
  1499.                     );
  1500.         
  1501.         
  1502.         $userBoutique = $em->getRepository(UserBoutique::class)
  1503.                         ->findOneBy(
  1504.                             array(
  1505.                             'user' => $user->getId(),
  1506.                             'boutique' => $boutique->getId()
  1507.                             )
  1508.                         );
  1509.         
  1510.         $mois = $this->getMois();
  1511.         $annees = $this->getAnnee();
  1512.         $moyenDePaiements = array(
  1513.             'VIREMENT BANCAIRE', 'CHEQUE', 'ESPECE', 'WAVE', 'ORANGE MONEY', 'MTN MONEY', 'MOOV MONEY'
  1514.         );
  1515.         return $this->render('admin/salaries.html.twig', [
  1516.            'boutique' => $boutique,
  1517.             'employes' => $employes,
  1518.            'userBoutique' => $userBoutique,
  1519.            'mois' => $mois,
  1520.            'annees' => $annees,
  1521.            'moyenDePaiements' => $moyenDePaiements
  1522.         ]);
  1523.     }
  1524.     /**
  1525.      * @Route("/{slug}/rh/calculer-salaire", name="admin_rh_calcuer_salaire")
  1526.      * @return \Symfony\Component\HttpFoundation\Response
  1527.      */
  1528.     public function calculerSalaireAction( Request $request, Boutique $boutique)
  1529.     {
  1530.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1531.            return $this->redirectToRoute('security_login');
  1532.         }      
  1533.         $em = $this->getDoctrine()
  1534.                     ->getManager();
  1535.         
  1536.         $user = $this->getUser();
  1537.         
  1538.         
  1539.         $rubriques = array();
  1540.         if($request->getMethod() == 'POST'){
  1541.             $idEmploye = $request->request->get('idEmploye');
  1542.             $mois = (int)$request->request->get('mois');
  1543.             $annee = $request->request->get('annee');
  1544.             $moyenDePaiement = $request->request->get('moyenDePaiement');
  1545.             $employe = $em->getRepository(UserBoutique::class)
  1546.                     ->findOneBy(
  1547.                         array(
  1548.                             'user' => $idEmploye,
  1549.                             'boutique' => $boutique->getId()
  1550.                         )    
  1551.                     );
  1552.             if($mois < 10){
  1553.                 $mois = '0'.$mois;
  1554.             }
  1555.             $dateDebutPaiementSalaire = $annee.'-'.$mois.'-01';
  1556.             $dateDebutPaiementSalaire = new \DateTime($dateDebutPaiementSalaire);
  1557.             $laDatePaiement = $annee.'-'.$mois.'-01';
  1558.             
  1559.             $datePaiementSalaire = new \DateTime($laDatePaiement);
  1560.             $datePaiementSalaire = $datePaiementSalaire->modify('last day of this month');
  1561.             $anncienete = $employe->getDateDePriseDeFonction()->diff($datePaiementSalaire);
  1562.             $nNombreDeJourDeTravail = 30;
  1563.             $nNombreDeJourDeConge = 0;
  1564.             
  1565.             //Salaire de base
  1566.             $salaireDeBase = $em->getRepository(RubriqueSalaireEmploye::class)
  1567.                                         ->findOneBy(
  1568.                                             array(
  1569.                                                 'boutique' => $boutique->getId(),
  1570.                                                 'user' => $employe->getUser()->getId(),
  1571.                                                 'designation' => 'SALAIRE DE BASE'
  1572.                                             )
  1573.                                         );
  1574.             
  1575.             
  1576.             $rSalaireDeBase = $salaireDeBase->getLaBase();
  1577.             
  1578.             //Congé
  1579.             $totaux = array();
  1580.             $conge = $em->getRepository(Conge::class)
  1581.                         ->dernierConge($boutique->getId(), $employe->getUser()->getId());
  1582.             $bFautAjouterCongePaye = false;
  1583.             if(!empty($conge)){
  1584.                 $dateDebut = $conge[0]->getDateDebut();
  1585.                 $dateDiff = $dateDebut->diff($datePaiementSalaire);
  1586.                 $nombreDeJour = $dateDiff->format("%a");
  1587.                 if($nombreDeJour > 0 && $nombreDeJour <= 30 ){
  1588.                     $totaux['dateDebutConge'] = $conge[0]->getDateDebut();
  1589.                     $totaux['dateFinConge'] = $conge[0]->getDateFin();
  1590.                     $nNombreDeJourDeConge =  $conge[0]->getNombreDeJour();
  1591.                     $bFautAjouterCongePaye = true;
  1592.                     if($datePaiementSalaire > $conge[0]->getDateDebut()){
  1593.                         $nNombreDeJourDeTravail -= $nNombreDeJourDeConge;
  1594.                     }
  1595.                     $rSalaireDeBase = ($salaireDeBase->getLaBase() * $nNombreDeJourDeTravail)/30;
  1596.                 }
  1597.             }
  1598.             $rubrique = array(
  1599.                     'code' => $salaireDeBase->getCode(),
  1600.                     'designation' => $salaireDeBase->getDesignation(),
  1601.                     'nombre' => $nNombreDeJourDeTravail,
  1602.                     'base' => $rSalaireDeBase,
  1603.                     'tauxSalarial' => 0,
  1604.                     'gainSalarial' => $rSalaireDeBase,
  1605.                     'retenueSalarial' => 0,
  1606.                     'tauxPatronal' => 0,
  1607.                     'gainPatronal' => 0,
  1608.                     'retenuePatronal' => 0
  1609.                 
  1610.                 );    
  1611.                 array_push($rubriques, $rubrique);
  1612.             
  1613.             
  1614.             $rIndemniteCongePaye = 0;
  1615.             if($bFautAjouterCongePaye){
  1616.                 $rIndemniteCongePaye = ($salaireDeBase->getLaBase() * 12 * $nNombreDeJourDeConge)/(10 * 30);
  1617.                 $rubrique = array(
  1618.                     'code' => '100',
  1619.                     'designation' => 'INDEMNITE CONGE PAYE',
  1620.                     'nombre' => $nNombreDeJourDeConge,
  1621.                     'base' => $rIndemniteCongePaye,
  1622.                     'tauxSalarial' => '',
  1623.                     'gainSalarial' => $rIndemniteCongePaye,
  1624.                     'retenueSalarial' => '',
  1625.                     'tauxPatronal' => '',
  1626.                     'gainPatronal' => '',
  1627.                     'retenuePatronal' => ''
  1628.                 
  1629.                 );
  1630.                 array_push($rubriques, $rubrique);
  1631.                 
  1632.             }
  1633.             //Sursalaire
  1634.             $surSalaire = $em->getRepository(RubriqueSalaireEmploye::class)
  1635.                                         ->findOneBy(
  1636.                                             array(
  1637.                                                 'boutique' => $boutique->getId(),
  1638.                                                 'user' => $employe->getUser()->getId(),
  1639.                                                 'designation' => 'SURSALAIRE'
  1640.                                             )
  1641.                                         );
  1642.             $rubrique = array(
  1643.                     'code' => $surSalaire->getCode(),
  1644.                     'designation' => $surSalaire->getDesignation(),
  1645.                     'nombre' => $nNombreDeJourDeTravail,
  1646.                     'base' => $surSalaire->getLaBase(),
  1647.                     'tauxSalarial' => '',
  1648.                     'gainSalarial' => $surSalaire->getLaBase(),
  1649.                     'retenueSalarial' => '',
  1650.                     'tauxPatronal' => '',
  1651.                     'gainPatronal' => '',
  1652.                     'retenuePatronal' => ''
  1653.                 
  1654.                 );    
  1655.                 array_push($rubriques, $rubrique);
  1656.         
  1657.             //
  1658.             // Ancienneté
  1659.             $anciennte = 0;
  1660.             $dateAnciennete = $datePaiementSalaire->diff($employe->getDateDePriseDeFonction());
  1661.             $anneeAnciennete = $dateAnciennete->format('%y');
  1662.             $moisAnciennete = $dateAnciennete->format('%m');
  1663.             if(($anneeAnciennete >= 2 && $moisAnciennete >= 1) || $anneeAnciennete > 2){
  1664.                 $anciennte = $anneeAnciennete;
  1665.             }
  1666.             $rMontantAnciennete = ($anciennte * $salaireDeBase->getLaBase())/100;
  1667.             $rubrique = array(
  1668.                         'code' => $salaireDeBase->getCode(),
  1669.                         'designation' => 'ANCIENNETE',
  1670.                         'nombre' => '',
  1671.                         'base' => $salaireDeBase->getLaBase(),
  1672.                         'tauxSalarial' => $anciennte,
  1673.                         'gainSalarial' => $rMontantAnciennete,
  1674.                         'retenueSalarial' => '',
  1675.                         'tauxPatronal' => '',
  1676.                         'gainPatronal' => '',
  1677.                         'retenuePatronal' => ''
  1678.                     
  1679.                     );    
  1680.             array_push($rubriques, $rubrique);
  1681.             $userBoutique = $em->getRepository(UserBoutique::class)
  1682.                             ->findOneBy(
  1683.                                 array(
  1684.                                 'user' => $user->getId(),
  1685.                                 'boutique' => $boutique->getId()
  1686.                                 )
  1687.                             );
  1688.             $rTotalBrut = $rSalaireDeBase +  $surSalaire->getLaBase() + $rMontantAnciennete + $rIndemniteCongePaye;
  1689.             $rubrique = array(
  1690.                         'code' => '',
  1691.                         'designation' => 'TOTAL BRUT',
  1692.                         'nombre' => '',
  1693.                         'base' => '',
  1694.                         'tauxSalarial' => '',
  1695.                         'gainSalarial' => $rTotalBrut,
  1696.                         'retenueSalarial' => '',
  1697.                         'tauxPatronal' => '',
  1698.                         'gainPatronal' => '',
  1699.                         'retenuePatronal' => ''
  1700.                     
  1701.                     );    
  1702.             array_push($rubriques, $rubrique);
  1703.             $rImpotNet = 0;
  1704.             $rTranche1 = 0;
  1705.             $rTranche2 = 0;
  1706.             if($rTotalBrut > 75000 && $rTotalBrut <= 240000){
  1707.                 $rTranche2 = (($rTotalBrut - 75000)*16)/100;
  1708.             }else{
  1709.                 if($rTotalBrut > 240000){
  1710.                     $rTranche2 = ((240000 - 75000)*16)/100;
  1711.                 }
  1712.             }
  1713.             $rTranche3 = 0;
  1714.             if ($rTotalBrut > 240000 && $rTotalBrut <= 800000){
  1715.                 $rTranche3 = (($rTotalBrut - 240000)*21)/100;
  1716.             }else{
  1717.                 if($rTotalBrut > 800000){
  1718.                     $rTranche3 = ((800000 - 240000)*21)/100;
  1719.                 }
  1720.             }
  1721.             $rTranche4  = 0;
  1722.             if($rTotalBrut > 800000 && $rTotalBrut <= 2400000){
  1723.                 $rTranche4 = (($rTotalBrut - 800000)*24)/100;
  1724.             } else{
  1725.                 if($rTotalBrut > 2400000){
  1726.                     $rTranche4 = ((2400000 - 800000)*24)/100;
  1727.                 }
  1728.             }
  1729.             $rTranche5 = 0;
  1730.             if($rTotalBrut > 2400000 && $rTotalBrut <= 8000000){
  1731.                 $rTranche5 = ((rTotalBrut - 2400000)*28)/100;
  1732.             } else{
  1733.                 if($rTotalBrut > 8000000){
  1734.                     $rTranche5 = ((8000000 - 2400000)*28)/100;
  1735.                 }
  1736.             }
  1737.             $rTranche6 = 0;
  1738.             if($rTotalBrut > 8000000){
  1739.                 $rTranche6 = ((rTotalBrut - 8000000)*32)/100;
  1740.             }
  1741.             $rImpotBrut = $rTranche1 + $rTranche2 + $rTranche3 + $rTranche4 + $rTranche5 + $rTranche6;
  1742.             
  1743.             $rPartIGR  = $employe->getIgr();
  1744.             $rReductionImpt1  = 0;
  1745.             $rReductionImpt2 = 0;
  1746.             if ($rPartIGR == 1.5){
  1747.                 $rReductionImpt2 = 5500;
  1748.             }
  1749.             $rReductionImpt3 = 0;
  1750.             if($rPartIGR == 2){
  1751.                 $rReductionImpt3 = 11000;
  1752.             }
  1753.             $rReductionImpt4 = 0;
  1754.             if($rPartIGR == 2.5){
  1755.                 $rReductionImpt4 = 16500;
  1756.             }
  1757.             $rReductionImpt5  = 0;
  1758.             if($rPartIGR == 3){
  1759.                 $rReductionImpt5 = 22000;
  1760.             }
  1761.             $rReductionImpt6 = 0;
  1762.             if($rPartIGR == 3.5){
  1763.                 $rReductionImpt6 = 27500;
  1764.             }
  1765.             $rReductionImpt7 = 0;
  1766.             if($rPartIGR == 4){
  1767.                 $rReductionImpt7 = 33000;
  1768.             }
  1769.             $rReductionImpt8 = 0;
  1770.             if($rPartIGR == 4.5){
  1771.                 $rReductionImpt8 = 38500;
  1772.             }
  1773.             $rReductionImpt9 = 0;
  1774.             if($rPartIGR == 5){
  1775.                 $rReductionImpt9 = 44000;
  1776.             }
  1777.             $rReduction = $rReductionImpt1 + $rReductionImpt2 + $rReductionImpt3 + $rReductionImpt4 + $rReductionImpt5 + $rReductionImpt6 + $rReductionImpt7 + $rReductionImpt8 + $rReductionImpt9;
  1778.             $rImpotNet = $rImpotBrut - $rReduction;
  1779.             if($rImpotNet <= 0){
  1780.                 $rImpotNet = 0;
  1781.             }
  1782.             $rubrique = array(
  1783.                         'code' => '04',
  1784.                         'designation' => 'IMPOT NET',
  1785.                         'nombre' => '',
  1786.                         'base' => '',
  1787.                         'tauxSalarial' => '',
  1788.                         'gainSalarial' => '',
  1789.                         'retenueSalarial' => $rImpotNet,
  1790.                         'tauxPatronal' => '',
  1791.                         'gainPatronal' => '',
  1792.                         'retenuePatronal' => ''
  1793.                     
  1794.                     );    
  1795.             array_push($rubriques, $rubrique);
  1796.             
  1797.             $rCNPSSalarie = 0;
  1798.             $rCNPSEmployeur = 0;
  1799.             $cnps = $em->getRepository(RubriqueSalaireEmploye::class)
  1800.                                             ->findOneBy(
  1801.                                                 array(
  1802.                                                     'boutique' => $boutique->getId(),
  1803.                                                     'user' => $employe->getUser()->getId(),
  1804.                                                     'designation' => 'CNPS'
  1805.                                                 )
  1806.                                             );
  1807.         $rCNPSSalarie = ($rTotalBrut * 6.3)/100;
  1808.         $rCNPSEmployeur = ($rTotalBrut * 7.7)/100;
  1809.         
  1810.         $rubrique = array(
  1811.                         'code' => $cnps->getCode(),
  1812.                         'designation' => $cnps->getDesignation(),
  1813.                         'nombre' => '',
  1814.                         'base' => $rTotalBrut,
  1815.                         'tauxSalarial' => 6.3,
  1816.                         'gainSalarial' => '',
  1817.                         'retenueSalarial' => $rCNPSSalarie,
  1818.                         'tauxPatronal' => 7.7,
  1819.                         'gainPatronal' => '',
  1820.                         'retenuePatronal' => $rCNPSEmployeur
  1821.                     
  1822.                     );    
  1823.         array_push($rubriques, $rubrique);
  1824.         $rCMU = 1000 + 1000 * $employe->getNombreDEnfant();
  1825.         $rCMUSalarie = $rCMU/2;
  1826.         $rCMUEmployeur = $rCMU/2;
  1827.         $cmu = $em->getRepository(RubriqueSalaireEmploye::class)
  1828.                                             ->findOneBy(
  1829.                                                 array(
  1830.                                                     'boutique' => $boutique->getId(),
  1831.                                                     'user' => $employe->getUser()->getId(),
  1832.                                                     'designation' => 'CMU'
  1833.                                                 )
  1834.                                             );
  1835.         
  1836.         $rubrique = array(
  1837.                         'code' => $cmu->getCode(),
  1838.                         'designation' => $cmu->getDesignation(),
  1839.                         'nombre' => '',
  1840.                         'base' => '',
  1841.                         'tauxSalarial' => '',
  1842.                         'gainSalarial' => '',
  1843.                         'retenueSalarial' => $rCMUSalarie,
  1844.                         'tauxPatronal' => '',
  1845.                         'gainPatronal' => '',
  1846.                         'retenuePatronal' => $rCMUEmployeur
  1847.                     
  1848.                     );
  1849.         
  1850.         array_push($rubriques, $rubrique);
  1851.         $rPrestationFamiliale = 0;
  1852.         $prestation = $em->getRepository(RubriqueSalaireEmploye::class)
  1853.                                             ->findOneBy(
  1854.                                                 array(
  1855.                                                     'boutique' => $boutique->getId(),
  1856.                                                     'user' => $employe->getUser()->getId(),
  1857.                                                     'designation' => 'PRESTATION FAMILIALE'
  1858.                                                 )
  1859.                                             );
  1860.         $rPrestationFamiliale = ($prestation->getLaBase() * $prestation->getTaux())/100;
  1861.         $rubrique = array(
  1862.                         'code' => $prestation->getCode(),
  1863.                         'designation' => $prestation->getDesignation(),
  1864.                         'nombre' => '',
  1865.                         'base' => $prestation->getLaBase(),
  1866.                         'tauxSalarial' => '',
  1867.                         'gainSalarial' => '',
  1868.                         'retenueSalarial' => '',
  1869.                         'tauxPatronal' => $prestation->getTaux(),
  1870.                         'gainPatronal' => '',
  1871.                         'retenuePatronal' => $rPrestationFamiliale
  1872.                     
  1873.                     );
  1874.         
  1875.         array_push($rubriques, $rubrique);
  1876.         $rAccidentDeTravail = 0;
  1877.         $accident = $em->getRepository(RubriqueSalaireEmploye::class)
  1878.                                             ->findOneBy(
  1879.                                                 array(
  1880.                                                     'boutique' => $boutique->getId(),
  1881.                                                     'user' => $employe->getUser()->getId(),
  1882.                                                     'designation' => 'ACCIDENT DE TRAVAIL'
  1883.                                                 )
  1884.                                             );
  1885.     $rAccidentDeTravail = ($accident->getLaBase() * $accident->getTaux())/100;
  1886.     $rubrique = array(
  1887.                         'code' => $accident->getCode(),
  1888.                         'designation' => $accident->getDesignation(),
  1889.                         'nombre' => '',
  1890.                         'base' => $accident->getLaBase(),
  1891.                         'tauxSalarial' => '',
  1892.                         'gainSalarial' => '',
  1893.                         'retenueSalarial' => '',
  1894.                         'tauxPatronal' => $accident->getTaux(),
  1895.                         'gainPatronal' => '',
  1896.                         'retenuePatronal' => $rAccidentDeTravail
  1897.                     
  1898.                     );
  1899.         
  1900.         array_push($rubriques, $rubrique);
  1901.         $rTaxeDApprentissage = 0;
  1902.         $taxeAppr = $em->getRepository(RubriqueSalaireEmploye::class)
  1903.                                             ->findOneBy(
  1904.                                                 array(
  1905.                                                     'boutique' => $boutique->getId(),
  1906.                                                     'user' => $employe->getUser()->getId(),
  1907.                                                     'designation' => 'TAXE D\'APPRENTISSAGE'
  1908.                                                 )
  1909.                                             );
  1910.     $rTaxeDApprentissage = ($rTotalBrut * $taxeAppr->getTaux())/100;
  1911.     $rubrique = array(
  1912.                         'code' => $taxeAppr->getCode(),
  1913.                         'designation' => $taxeAppr->getDesignation(),
  1914.                         'nombre' => '',
  1915.                         'base' => $rTotalBrut,
  1916.                         'tauxSalarial' => '',
  1917.                         'gainSalarial' => '',
  1918.                         'retenueSalarial' => '',
  1919.                         'tauxPatronal' => $taxeAppr->getTaux(),
  1920.                         'gainPatronal' => '',
  1921.                         'retenuePatronal' => $rTaxeDApprentissage
  1922.                     
  1923.                     );
  1924.         
  1925.         array_push($rubriques, $rubrique);
  1926.         $rFormationContinue = 0;
  1927.         $formationC = $em->getRepository(RubriqueSalaireEmploye::class)
  1928.                                             ->findOneBy(
  1929.                                                 array(
  1930.                                                     'boutique' => $boutique->getId(),
  1931.                                                     'user' => $employe->getUser()->getId(),
  1932.                                                     'designation' => 'FORMATION CONTINUE'
  1933.                                                 )
  1934.                                             );
  1935.     $rFormationContinue = ($rTotalBrut * $formationC->getTaux())/100;
  1936.     $rubrique = array(
  1937.                         'code' => $formationC->getCode(),
  1938.                         'designation' => $formationC->getDesignation(),
  1939.                         'nombre' => '',
  1940.                         'base' => $rTotalBrut,
  1941.                         'tauxSalarial' => '',
  1942.                         'gainSalarial' => '',
  1943.                         'retenueSalarial' => '',
  1944.                         'tauxPatronal' => $formationC->getTaux(),
  1945.                         'gainPatronal' => '',
  1946.                         'retenuePatronal' => $rFormationContinue
  1947.                     
  1948.                     );
  1949.         
  1950.         array_push($rubriques, $rubrique);
  1951.         $rCE = 0;
  1952.         $ce = $em->getRepository(RubriqueSalaireEmploye::class)
  1953.                                             ->findOneBy(
  1954.                                                 array(
  1955.                                                     'boutique' => $boutique->getId(),
  1956.                                                     'user' => $employe->getUser()->getId(),
  1957.                                                     'designation' => 'CE'
  1958.                                                 )
  1959.                                             );
  1960.     $rCE = ($rTotalBrut *2.8 )/100;
  1961.     $rubrique = array(
  1962.                         'code' => $ce->getCode(),
  1963.                         'designation' => $ce->getDesignation(),
  1964.                         'nombre' => '',
  1965.                         'base' => '',
  1966.                         'tauxSalarial' => '',
  1967.                         'gainSalarial' => '',
  1968.                         'retenueSalarial' => '',
  1969.                         'tauxPatronal' => 2.8,
  1970.                         'gainPatronal' => '',
  1971.                         'retenuePatronal' => $rCE
  1972.                     
  1973.                     );
  1974.         
  1975.         array_push($rubriques, $rubrique);
  1976.         $rChargeSalariales = $rImpotNet + $rCNPSSalarie + $rCMUSalarie;
  1977.         $rChargeEmployeur = $rCNPSEmployeur + $rCE + $rCMUEmployeur + $rPrestationFamiliale + $rAccidentDeTravail + $rTaxeDApprentissage + $rFormationContinue;
  1978.         
  1979.         $rubrique = array(
  1980.                         'code' => '',
  1981.                         'designation' => 'TOTAL COTISATION',
  1982.                         'nombre' => '',
  1983.                         'base' => '',
  1984.                         'tauxSalarial' => '',
  1985.                         'gainSalarial' => '',
  1986.                         'retenueSalarial' => $rChargeSalariales,
  1987.                         'tauxPatronal' => '',
  1988.                         'gainPatronal' => '',
  1989.                         'retenuePatronal' => $rChargeEmployeur
  1990.                     
  1991.                     );
  1992.         
  1993.         array_push($rubriques, $rubrique);
  1994.         $primeDeTransport = $em->getRepository(RubriqueSalaireEmploye::class)
  1995.                                             ->findOneBy(
  1996.                                                 array(
  1997.                                                     'boutique' => $boutique->getId(),
  1998.                                                     'user' => $employe->getUser()->getId(),
  1999.                                                     'designation' => 'PRIME DE TRANSPORT'
  2000.                                                 )
  2001.                                             );
  2002.     $rubrique = array(
  2003.                         'code' => $primeDeTransport->getCode(),
  2004.                         'designation' => $primeDeTransport->getDesignation(),
  2005.                         'nombre' => '',
  2006.                         'base' => $primeDeTransport->getLaBase(),
  2007.                         'tauxSalarial' => '',
  2008.                         'gainSalarial' => $primeDeTransport->getLaBase(),
  2009.                         'retenueSalarial' => '',
  2010.                         'tauxPatronal' => '',
  2011.                         'gainPatronal' => '',
  2012.                         'retenuePatronal' => ''
  2013.                     
  2014.                     );
  2015.         
  2016.         array_push($rubriques, $rubrique);
  2017.     $rPrimeDeSalissure = 0;
  2018.     $salissure = $em->getRepository(RubriqueSalaireEmploye::class)
  2019.                                             ->findOneBy(
  2020.                                                 array(
  2021.                                                     'boutique' => $boutique->getId(),
  2022.                                                     'user' => $employe->getUser()->getId(),
  2023.                                                     'designation' => 'PRIME DE SALISSURE'
  2024.                                                 )
  2025.                                             );
  2026.     if($salissure != null){
  2027.         $rPrimeDeSalissure = $salissure->getLaBase() * 7;
  2028.         if($rPrimeDeSalissure > 0){ 
  2029.             
  2030.         $rubrique = array(
  2031.                             'code' => $salissure->getCode(),
  2032.                             'designation' => $salissure->getDesignation(),
  2033.                             'nombre' => 7,
  2034.                             'base' => $salissure->getLaBase(),
  2035.                             'tauxSalarial' => '',
  2036.                             'gainSalarial' => $rPrimeDeSalissure,
  2037.                             'retenueSalarial' => '',
  2038.                             'tauxPatronal' => '',
  2039.                             'gainPatronal' => '',
  2040.                             'retenuePatronal' => ''
  2041.                         
  2042.                         );
  2043.             
  2044.             array_push($rubriques, $rubrique);
  2045.         }
  2046.     }
  2047.         $rPrimeDeTenue = 0;
  2048.         $tenue = $em->getRepository(RubriqueSalaireEmploye::class)
  2049.                                             ->findOneBy(
  2050.                                                 array(
  2051.                                                     'boutique' => $boutique->getId(),
  2052.                                                     'user' => $employe->getUser()->getId(),
  2053.                                                     'designation' => 'PRIME DE TENUE'
  2054.                                                 )
  2055.                                             );
  2056.         if($tenue != null){
  2057.             $rPrimeDeTenue = $tenue->getLaBase() * 3;
  2058.             if($rPrimeDeTenue > 0){
  2059.                 
  2060.                 $rubrique = array(
  2061.                                 'code' => $tenue->getCode(),
  2062.                                 'designation' => $tenue->getDesignation(),
  2063.                                 'nombre' => 3,
  2064.                                 'base' => $tenue->getLaBase(),
  2065.                                 'tauxSalarial' => '',
  2066.                                 'gainSalarial' => $rPrimeDeTenue,
  2067.                                 'retenueSalarial' => '',
  2068.                                 'tauxPatronal' => '',
  2069.                                 'gainPatronal' => '',
  2070.                                 'retenuePatronal' => ''
  2071.                             
  2072.                             );
  2073.                 
  2074.                 array_push($rubriques, $rubrique);
  2075.             }
  2076.         }
  2077.     //Heures supplementaires
  2078.     $heureDeTravail = $em->getRepository(PresenceEmployeUser::class)
  2079.                             ->heureDeTravail($boutique, $dateDebutPaiementSalaire, $datePaiementSalaire);
  2080.     $heuresSupplementaires = 0;
  2081.     $heuresTravaillees = 0;
  2082.         $rTauxHoraire = 470;
  2083.         $rValeureuresSupplementaires = 0;
  2084.         if(!empty($heureDeTravail)){
  2085.             $lesHeurs = (float)$heureDeTravail[0]['heureSupplementaire'];
  2086.             $heuresTravaillees = $heureDeTravail[0]['tempsDeTravail'];
  2087.             $heuresSupplementaires =  $heureDeTravail[0]['heureSupplementaire'];
  2088.             if( $lesHeurs> 0){
  2089.                     $rValeureuresSupplementaires = $lesHeurs *  $rTauxHoraire * (1.25);
  2090.             
  2091.                     $rubrique = array(
  2092.                                 'code' => '00',
  2093.                                 'designation' => 'HEURES SUPPLEMENTAIRES',
  2094.                                 'nombre' => $lesHeurs,
  2095.                                 'base' => $rTauxHoraire,
  2096.                                 'tauxSalarial' => '',
  2097.                                 'gainSalarial' => $rValeureuresSupplementaires,
  2098.                                 'retenueSalarial' => '',
  2099.                                 'tauxPatronal' => '',
  2100.                                 'gainPatronal' => '',
  2101.                                 'retenuePatronal' => ''
  2102.                             
  2103.                             );
  2104.                 
  2105.                 array_push($rubriques, $rubrique);
  2106.             }
  2107.         }
  2108.         $supprimerPaiementSalaireDUnMoisDunEmploye = $em->getRepository(RubriqueSalairePaiement::class)
  2109.                                                     ->findBy(
  2110.                                                         array(
  2111.                                                             'boutique' => $boutique->getId(),
  2112.                                                             'user' => $employe->getUser()->getId(),
  2113.                                                             'moisPaiementSalaire' =>$mois,
  2114.                                                             'anneePaiementSalaire' => $annee
  2115.                                                         )
  2116.                                                     );
  2117.         foreach($supprimerPaiementSalaireDUnMoisDunEmploye as $rb){
  2118.             $em->remove($rb);
  2119.         }
  2120.         $em->flush();
  2121.         foreach($rubriques as $rub){
  2122.             $rubriqueSalairePaiement = new RubriqueSalairePaiement;
  2123.             $rubriqueSalairePaiement->setBoutique($boutique);
  2124.             $rubriqueSalairePaiement->setUser($employe->getUser());
  2125.             $rubriqueSalairePaiement->setCode($rub['code']);
  2126.             $rubriqueSalairePaiement->setDesignation($rub['designation']);
  2127.             $rubriqueSalairePaiement->setNombre((float)$rub['nombre']);
  2128.             $rubriqueSalairePaiement->setLaBase((float)$rub['base']);
  2129.             $rubriqueSalairePaiement->setTauxSalarial((float)$rub['tauxSalarial']);
  2130.             $rubriqueSalairePaiement->setGainSalarial((float)$rub['gainSalarial']);
  2131.             $rubriqueSalairePaiement->setRetenueSalarial((float)$rub['retenueSalarial']);
  2132.             $rubriqueSalairePaiement->setTauxPatronal((float)$rub['tauxPatronal']);
  2133.             $rubriqueSalairePaiement->setGainPatronal((float)$rub['gainPatronal']);
  2134.             $rubriqueSalairePaiement->setRetenuePatronal((float)$rub['retenuePatronal']);
  2135.             $rubriqueSalairePaiement->setMoisPaiementSalaire($mois);
  2136.             $rubriqueSalairePaiement->setAnneePaiementSalaire($annee);
  2137.             $rubriqueSalairePaiement->setDatePaiementSalaire(new \DateTime());
  2138.             $em->persist($rubriqueSalairePaiement);
  2139.         }
  2140.         $em->flush();
  2141.         $paiementSalaireASupprimer = $em->getRepository(PaiementSalaire::class)
  2142.                                         ->findOneBy(
  2143.                                             array(
  2144.                                                 'boutique' => $boutique->getId(),
  2145.                                                 'user' =>$employe->getUser()->getId(),
  2146.                                                 'moisSalaire' =>$mois,
  2147.                                                 'anneeSalaire' => $annee
  2148.                                             )
  2149.                                         );
  2150.         if($paiementSalaireASupprimer != null){
  2151.             $em->remove($paiementSalaireASupprimer);
  2152.             $em->flush();
  2153.         }
  2154.         $salaireNetAPayer = $rTotalBrut - $rChargeSalariales + $primeDeTransport->getLaBase();
  2155.         $paiementSalaire = new PaiementSalaire;
  2156.         $paiementSalaire->setBoutique($boutique);
  2157.         $paiementSalaire->setUser($employe->getUser());
  2158.         $paiementSalaire->setSalaireBrut($rTotalBrut);
  2159.         $paiementSalaire->setChargesSalariales($rChargeSalariales);
  2160.         $paiementSalaire->setChargesPatronales($rChargeEmployeur);
  2161.         $paiementSalaire->setHeuresTravaillees($heuresTravaillees);
  2162.         $paiementSalaire->setHeuresSupplementaires($heuresSupplementaires);
  2163.         $paiementSalaire->setSalaireNetAPayer($salaireNetAPayer);
  2164.         $paiementSalaire->setDatePaiementFinDuMois($datePaiementSalaire);
  2165.         $paiementSalaire->setMoisSalaire($mois);
  2166.         $paiementSalaire->setAnneeSalaire($annee);
  2167.         $cumulElementPaiementSalaire = $em->getRepository(PaiementSalaire::class)
  2168.                                         ->cumulElementPaiementSalaire($boutique->getId(), $employe->getUser()->getId(), new \DateTime());
  2169.         
  2170.         $cumulSalaireBrut = $rTotalBrut + (float)$cumulElementPaiementSalaire['0']['cumulSalaireBrut'];
  2171.         $paiementSalaire->setCumulSalaireBrut($cumulSalaireBrut);
  2172.         
  2173.         $cumulChargesSalariales = $rChargeSalariales + (float)$cumulElementPaiementSalaire['0']['cumulChargesSalariales'];
  2174.         $paiementSalaire->setCumulChargesSalariales($cumulChargesSalariales);
  2175.         $cumulChargesPatronales = $rChargeEmployeur + (float)$cumulElementPaiementSalaire['0']['cumulChargesPatronales'];
  2176.         $paiementSalaire->setCumulChargesPatronales($cumulChargesPatronales);
  2177.         $cumulHeuresTravaillees =  $heuresTravaillees + (float)$cumulElementPaiementSalaire['0']['cumulHeuresTravaillees'];
  2178.         $paiementSalaire->setCumulHeuresTravaillees($cumulHeuresTravaillees);
  2179.         $cumulHeuresSupplementaires = $heuresSupplementaires + (float)$cumulElementPaiementSalaire['0']['cumulHeuresSupplementaires'];
  2180.         $paiementSalaire->setCumulHeuresSupplementaires($cumulHeuresSupplementaires);
  2181.         $cumulSalaireNetAPayer = $salaireNetAPayer + (float)$cumulElementPaiementSalaire['0']['cumulSalaireNetAPayer'];
  2182.         $paiementSalaire->setCumulSalaireNetAPayer($cumulSalaireNetAPayer);
  2183.         $em->persist($paiementSalaire);
  2184.         $em->flush();
  2185. }
  2186.         return $this->render('admin/calculer_salaire.html.twig', [
  2187.            'boutique' => $boutique,
  2188.            'userBoutique' => $userBoutique
  2189.         ]);
  2190.     }
  2191.     /**
  2192.      * @Route("/{slug}/rh/imprimer-bulletin-salaire/{employe}/{dateDebut}/{dateFin}/{moyenDePaiement}", name="admin_imprimer_bulletin_salaire")
  2193.      * @return \Symfony\Component\HttpFoundation\Response
  2194.      */
  2195.     public function imprimerBulletinSalaireAction( Request $request, Boutique $boutique, $employe = 0, $dateDebut = '', $dateFin = '', $moyenDePaiement = '')
  2196.     {
  2197.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2198.            return $this->redirectToRoute('security_login');
  2199.         }  
  2200.         $em = $this->getDoctrine()
  2201.                     ->getManager();
  2202.         
  2203.         $user = $this->getUser();
  2204.         $employe = $em->getRepository(UserBoutique::class)
  2205.                     ->findOneBy(
  2206.                         array(
  2207.                             'boutique' => $boutique,
  2208.                             'user' => $employe
  2209.                         )
  2210.                     );
  2211.         $dateDebut = new \DateTime($dateDebut);
  2212.         $dateFin = new \DateTime($dateFin);
  2213.         $userBoutique = $em->getRepository(UserBoutique::class)
  2214.                         ->findOneBy(
  2215.                             array(
  2216.                             'user' => $user->getId(),
  2217.                             'boutique' => $boutique->getId()
  2218.                             )
  2219.                         );
  2220.         
  2221.         $rubriques = $em->getRepository(RubriqueSalairePaiement::class)
  2222.                                         ->findBy(
  2223.                                             array(
  2224.                                                 'boutique' => $boutique->getId(),
  2225.                                                 'user' => $employe->getUser()->getId(),
  2226.                                                 'moisPaiementSalaire' => $dateDebut->format('m'),
  2227.                                                 'anneePaiementSalaire' => $dateDebut->format('Y')
  2228.                                             )
  2229.                                         );
  2230.         $paiementSalaire = $em->getRepository(PaiementSalaire::class)
  2231.                                         ->findOneBy(
  2232.                                             array(
  2233.                                                 'boutique' => $boutique->getId(),
  2234.                                                 'user' =>$employe->getUser()->getId(),
  2235.                                                 'moisSalaire' =>$dateDebut->format('m'),
  2236.                                                 'anneeSalaire' => $dateDebut->format('Y')
  2237.                                             )
  2238.                                         );
  2239.         
  2240.         $pdf = new Html2Pdf('P', 'A4', 'fr');
  2241.         $content = $this->renderView('pdf/bulletin_de_salaire.html.twig', [
  2242.                         'boutique' => $boutique,
  2243.                         'dateDebut' => $dateDebut,
  2244.                         'dateFin' => $dateFin,
  2245.                         'moyenDePaiement' => $moyenDePaiement,
  2246.                         'rubriques' => $rubriques,
  2247.                         'employe' => $employe,
  2248.                         'paiementSalaire' => $paiementSalaire
  2249.                     ]);
  2250.         $pdf->writeHTML($content);
  2251.         $name = $employe->getUser()->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
  2252.         $photo = new Photo;
  2253.         $lienPhysique = $photo->getUploadRootDir().$name;
  2254.                 
  2255.         $pdf->output($lienPhysique, 'I');
  2256.         
  2257.         return $this->render('pdf/bulletin_de_salaire.html.twig', [
  2258.            'boutique' => $boutique,
  2259.             'rubriques' => $rubriques,
  2260.            'userBoutique' => $userBoutique
  2261.         ]);
  2262.     }
  2263.     /**
  2264.      * @Route("/{slug}/rh/rubriques-salaires", name="admin_rubriques_slaires")
  2265.      * @return \Symfony\Component\HttpFoundation\Response
  2266.      */
  2267.     public function rubriquesSalairesAction( Request $request, Boutique $boutique)
  2268.     {
  2269.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2270.            return $this->redirectToRoute('security_login');
  2271.         }  
  2272.         $em = $this->getDoctrine()
  2273.                     ->getManager();
  2274.         
  2275.         $user = $this->getUser();
  2276.         
  2277.         
  2278.         $rubriquesSalaires = $em->getRepository(RubriqueSalaire::class)
  2279.                     ->findBy(
  2280.                         array(
  2281.                             'boutique' => $boutique->getId(),
  2282.                             
  2283.                         )
  2284.                     );
  2285.         
  2286.         
  2287.         $userBoutique = $em->getRepository(UserBoutique::class)
  2288.                         ->findOneBy(
  2289.                             array(
  2290.                             'user' => $user->getId(),
  2291.                             'boutique' => $boutique->getId()
  2292.                             )
  2293.                         );
  2294.         
  2295.         
  2296.         return $this->render('admin/rubriques_slaires.html.twig', [
  2297.            'boutique' => $boutique,
  2298.             'rubriquesSalaires' => $rubriquesSalaires,
  2299.            'userBoutique' => $userBoutique
  2300.         ]);
  2301.     }
  2302.     
  2303.     
  2304.     /**
  2305.      * @Route("/{slug}/rh/editer-rubriques-salaires-employer/{id}", name="admin_editer_rubriques_slaires_employe")
  2306.      * @return \Symfony\Component\HttpFoundation\Response
  2307.      */
  2308.     public function editerRubriquesSalairesEmployeAction( Request $request,  $slug, $id)
  2309.     {
  2310.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2311.            return $this->redirectToRoute('security_login');
  2312.         }      
  2313.         $em = $this->getDoctrine()
  2314.                     ->getManager();
  2315.         
  2316.         $user = $this->getUser();
  2317.         $boutique = $em->getRepository(Boutique::class)
  2318.                     ->findOneBySlug($slug);
  2319.         
  2320.         
  2321.         $rubriquesSalaires = $em->getRepository(RubriqueSalaire::class)
  2322.                     ->findBy(
  2323.                         array(
  2324.                             'boutique' => $boutique->getId(),    
  2325.                         )
  2326.                     );
  2327.         
  2328.         $employe = $em->getRepository(AppUser::class)
  2329.                     ->findOneById($id);
  2330.         $rubriqueSalaireEmployes = $em->getRepository(RubriqueSalaireEmploye::class)
  2331.                                 ->findBy(
  2332.                                     array(
  2333.                                         'boutique' => $boutique,
  2334.                                         'user' => $employe
  2335.                                     )
  2336.                                 );
  2337.         $lesRubriques = array();
  2338.         
  2339.         foreach($rubriquesSalaires as $rubriquesSalaire){
  2340.             $estDeDans = false;
  2341.             if(empty($rubriqueSalaireEmployes))
  2342.             {
  2343.                 $r = array(
  2344.                             'code' => $rubriquesSalaire->getCode(),
  2345.                             'designation' =>  $rubriquesSalaire->getDesignation(),
  2346.                             'laBase' => '',
  2347.                             'taux' =>  '',
  2348.                             'part' => $rubriquesSalaire->getPart(),
  2349.                             'gainOuRetenu' => $rubriquesSalaire->getGainOuRetenu(),
  2350.                             'existeDeja' => false
  2351.                         );
  2352.                     array_push($lesRubriques, $r);
  2353.             }else{
  2354.                 $taux = 0;
  2355.             $laBase = 0;
  2356.             $existeDeja = false;
  2357.             foreach($rubriqueSalaireEmployes as $rubriqueSalaireEmploye){
  2358.                     
  2359.                 if($rubriqueSalaireEmploye->getCode() == $rubriquesSalaire->getCode()){
  2360.                     //existe_deja permet de savoir si le
  2361.                     $taux = $rubriqueSalaireEmploye->getTaux();
  2362.                     $laBase = $rubriqueSalaireEmploye->getLaBase();
  2363.                     $existeDeja = true;
  2364.                 }else{
  2365.                     $existeDeja = false;
  2366.                 }
  2367.             }
  2368.             $r = array(
  2369.                     'code' => $rubriquesSalaire->getCode(),
  2370.                     'designation' => $rubriquesSalaire->getDesignation(),
  2371.                     'laBase' => $laBase,
  2372.                     'taux'  => $taux,
  2373.                     'part' =>$rubriquesSalaire->getPart(),
  2374.                     'gainOuRetenu' => $rubriquesSalaire->getGainOuRetenu(),
  2375.                     'existeDeja' => $existeDeja
  2376.                 );
  2377.             array_push($lesRubriques, $r);
  2378.             }
  2379.             
  2380.         }
  2381.         if($request->getMethod() == 'POST'){
  2382.             $i = 0;
  2383.             foreach($rubriquesSalaires as $rubriquesSalaire){
  2384.                 $i++;
  2385.                 $laBase = (float)$request->request->get('la_base'.$i);
  2386.                 $taux =  (float)$request->request->get('taux'.$i);
  2387.                 $existeDeja = (bool)$request->request->get('existe_deja'.$i);
  2388.                 $rubrique = $em->getRepository(RubriqueSalaireEmploye::class)
  2389.                                 ->findOneBy(
  2390.                                     array(
  2391.                                         'boutique' => $boutique,
  2392.                                         'user' => $employe,
  2393.                                         'code' =>$rubriquesSalaire->getCode()
  2394.                                     )
  2395.                                 );
  2396.                 if($rubrique == null){
  2397.                     $rubrique = new RubriqueSalaireEmploye;
  2398.                     $rubrique->setUser($employe);
  2399.                     $rubrique->setBoutique($boutique);
  2400.                     $rubrique->setCode($rubriquesSalaire->getCode());
  2401.                     $rubrique->setDesignation($rubriquesSalaire->getDesignation());
  2402.                     $rubrique->setPart($rubriquesSalaire->getPart());
  2403.                     $rubrique->setGainOuRetenu($rubriquesSalaire->getGainOuRetenu());
  2404.                 }
  2405.                 
  2406.                 $rubrique->setLaBase($laBase);
  2407.                 $rubrique->setTaux($taux);
  2408.                 $em->persist($rubrique);
  2409.                 $em->flush();
  2410.                 
  2411.                 
  2412.                 
  2413.             }
  2414.             return $this->redirectToRoute('admin_rh_salaires', array('slug' => $boutique->getSlug()));
  2415.         }
  2416.         $userBoutique = $em->getRepository(UserBoutique::class)
  2417.                         ->findOneBy(
  2418.                             array(
  2419.                             'user' => $user->getId(),
  2420.                             'boutique' => $boutique->getId()
  2421.                             )
  2422.                         );
  2423.         
  2424.         
  2425.         return $this->render('admin/editer_rubriques_slaires_employe.html.twig', [
  2426.            'boutique' => $boutique,
  2427.             'rubriquesSalaires' => $rubriquesSalaires,
  2428.            'userBoutique' => $userBoutique,
  2429.            'employe' => $employe,
  2430.            'rubriqueSalaireEmployes' => $rubriqueSalaireEmployes,
  2431.            'lesRubriques' => $lesRubriques
  2432.         ]);
  2433.     }
  2434.     /**
  2435.      * @Route("/{slug}/rh/rubriques-salaires/nouveau", name="admin_nouvelle_rubrique_slaire")
  2436.      * @return \Symfony\Component\HttpFoundation\Response
  2437.      */
  2438.     public function nouvelleRubriqueSalaireAction( Request $request, Boutique $boutique)
  2439.     {
  2440.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2441.            return $this->redirectToRoute('security_login');
  2442.         }      
  2443.         $em = $this->getDoctrine()
  2444.                     ->getManager();
  2445.         
  2446.         $user = $this->getUser();
  2447.         
  2448.         $rubriquesSalaire = new RubriqueSalaire;
  2449.         $form = $this->createForm(RubriqueSalaireType::class, $rubriquesSalaire);
  2450.         
  2451.         if($request->getMethod() == 'POST'){
  2452.             $form->handleRequest($request);
  2453.             if($form->isValid()){
  2454.                    
  2455.                 $rubriquesSalaire->setBoutique($boutique);
  2456.                    
  2457.                 $em->persist($rubriquesSalaire);
  2458.                 $em->flush();
  2459.                 
  2460.                 $ok_soumission =" Votre message a été pris en compte";
  2461.                     
  2462.                 
  2463.                 $rubriquesSalaire = new RubriqueSalaire;
  2464.                 $form = $this->createForm(RubriqueSalaireType::class, $rubriquesSalaire);
  2465.                     
  2466.                 } else {
  2467.                     $error =" Veillez corrigez vos erreurs";
  2468.                 }
  2469.                 
  2470.         
  2471.         }
  2472.         $userBoutique = $em->getRepository(UserBoutique::class)
  2473.                         ->findOneBy(
  2474.                             array(
  2475.                             'user' => $user->getId(),
  2476.                             'boutique' => $boutique->getId()
  2477.                             )
  2478.                         );
  2479.         
  2480.         
  2481.         return $this->render('admin/nouvelle_rubrique_salaire.html.twig', [
  2482.            'boutique' => $boutique,
  2483.             
  2484.            'userBoutique' => $userBoutique,
  2485.            'form' =>$form->createView()
  2486.         ]);
  2487.     }
  2488.     
  2489.     /**
  2490.      * @Route("/{slug}/rh/rubriques-salaires/modifier/{id}", name="admin_modifier_rubrique_salaire")
  2491.      * @return \Symfony\Component\HttpFoundation\Response
  2492.      */
  2493.     public function modifierRubriqueSalaireAction( Request $request, $slug, $id)
  2494.     {
  2495.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2496.            return $this->redirectToRoute('security_login');
  2497.         }      
  2498.         $em = $this->getDoctrine()
  2499.                     ->getManager();
  2500.         
  2501.         $user = $this->getUser();
  2502.         $boutique = $em->getRepository(Boutique::class)
  2503.                                 ->findOneBySlug($slug);
  2504.         
  2505.         $rubriqueSalaire = $em->getRepository(RubriqueSalaire::class)
  2506.                                 ->findOneById($id);
  2507.         $form = $this->createForm(RubriqueSalaireEditType::class, $rubriqueSalaire);
  2508.         
  2509.         if($request->getMethod() == 'POST'){
  2510.             $form->handleRequest($request);
  2511.             if($form->isValid()){
  2512.     
  2513.                 $em->flush();
  2514.                 
  2515.                 $ok_soumission =" Votre message a été pris en compte";
  2516.                     
  2517.                 } else {
  2518.                     $error =" Veillez corrigez vos erreurs";
  2519.                 }
  2520.                 
  2521.         
  2522.         }
  2523.         $userBoutique = $em->getRepository(UserBoutique::class)
  2524.                         ->findOneBy(
  2525.                             array(
  2526.                             'user' => $user->getId(),
  2527.                             'boutique' => $boutique->getId()
  2528.                             )
  2529.                         );
  2530.         
  2531.         
  2532.         return $this->render('admin/modifier_rubrique_salaire.html.twig', [
  2533.            'boutique' => $boutique,
  2534.            'userBoutique' => $userBoutique,
  2535.            'form' =>$form->createView()
  2536.         ]);
  2537.     }
  2538.     /**
  2539.      * @Route("/{slug}/rh/rubriques-salaires/supprimer/{id}", name="admin_supprimer_rubrique_salaire")
  2540.      * @return \Symfony\Component\HttpFoundation\Response
  2541.      */
  2542.     public function supprimerRubriqueSalaireAction( Request $request,  $slug, $id)
  2543.     {
  2544.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2545.            return $this->redirectToRoute('security_login');
  2546.         }      
  2547.         $em = $this->getDoctrine()
  2548.                     ->getManager();
  2549.         
  2550.         $user = $this->getUser();
  2551.         $boutique = $em->getRepository(Boutique::class)
  2552.                                 ->findOneBySlug($slug);
  2553.         
  2554.         $rubriquesSalaire = $em->getRepository(RubriqueSalaire::class)
  2555.                                 ->findOneById($id);
  2556.     
  2557.         if(null !== $rubriquesSalaire){
  2558.             $em->remove($rubriquesSalaire);
  2559.             $em->flush();
  2560.         }
  2561.         
  2562.         return $this->redirectToRoute('admin_rubriques_slaires', array('slug'=>$boutique->getSlug()));
  2563.     }
  2564.     /**
  2565.      * @Route("/{slug}/rh/conges", name="admin_conges")
  2566.      * @return \Symfony\Component\HttpFoundation\Response
  2567.      */
  2568.     public function congesAction( Request $request, Boutique $boutique)
  2569.     {
  2570.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2571.            return $this->redirectToRoute('security_login');
  2572.         }  
  2573.         $em = $this->getDoctrine()
  2574.                     ->getManager();
  2575.         
  2576.         $user = $this->getUser();
  2577.     
  2578.         $userBoutiques = $em->getRepository(UserBoutique::class)
  2579.                             ->findBy(
  2580.                                 array(
  2581.                                     'boutique' => $boutique->getId(),
  2582.                                     'estParti' => false
  2583.                                 )
  2584.                             );
  2585.         
  2586.         $userBoutique = $em->getRepository(UserBoutique::class)
  2587.                         ->findOneBy(
  2588.                             array(
  2589.                             'user' => $user->getId(),
  2590.                             'boutique' => $boutique->getId()
  2591.                             )
  2592.                         );
  2593.         
  2594.         $employes = array();
  2595.         foreach($userBoutiques as $ub){
  2596.             $e = array(
  2597.                 'id' =>$ub->getUser()->getId(),
  2598.                 'name' =>$ub->getUser()->getNom().' '.$ub->getUser()->getPrenom(),
  2599.                 'department' => $ub->getDepartementEmploi()
  2600.             );
  2601.             array_push($employes, $e);
  2602.         }
  2603.         $employes = json_encode($employes);
  2604.         $conges = $em->getRepository(Conge::class)
  2605.                     ->findBy(
  2606.                         array(
  2607.                         'boutique' => $boutique->getId()
  2608.                         )
  2609.                     );
  2610.         $cgs = array();
  2611.         foreach($conges as $conge){
  2612.             $cg = array(
  2613.                 'id' => $conge->getId(),
  2614.                 'employeeId' =>$conge->getUser()->getId(),
  2615.                 'employeeName' => $conge->getUser()->getNom(). ' '.$conge->getUser()->getPrenom(),
  2616.                 'type' => $conge->getTypeConge(),
  2617.                 'startDate' => $conge->getDateDebut()->format('Y-m-d'),
  2618.                 'endDate' => $conge->getDateFin()->format('Y-m-d'),
  2619.                 'notes' => $conge->getNotes()
  2620.             );
  2621.             array_push($cgs, $cg);
  2622.         }
  2623.         return $this->render('admin/conges.html.twig', [
  2624.            'boutique' => $boutique,
  2625.            'userBoutiques' => $userBoutiques,
  2626.            'userBoutique' => $userBoutique,
  2627.            'employes' => $employes,
  2628.            'conges' => json_encode($cgs)
  2629.         ]);
  2630.         
  2631.     }    
  2632.     /**
  2633.      * @Route("/{slug}/rh/nouveau-conge", name="admin_rh_nouveau_conge")
  2634.      * @return \Symfony\Component\HttpFoundation\Response
  2635.      */
  2636.     public function nouveauCongeAction( Request $request,  $slug)
  2637.     {
  2638.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2639.            return $this->redirectToRoute('security_login');
  2640.         }
  2641.         $em = $this->getDoctrine()
  2642.                     ->getManager();
  2643.         $boutique = $em->getRepository(Boutique::class)
  2644.                         ->findOneBySlug($slug);
  2645.         $user = $this->getUser();
  2646.         
  2647.         if($request->getMethod() == 'POST'){
  2648.             $employe = $request->request->get('employe');
  2649.             $employe = $em->getRepository(UserBoutique::class)
  2650.                     ->findOneBy(
  2651.                         array(
  2652.                             'boutique' => $boutique->getId(),
  2653.                             'user'=>$employe
  2654.                         )
  2655.                     );
  2656.             $typeConge = $request->request->get('typeConge');
  2657.             $notes = $request->request->get('notes');
  2658.             $dateDebut = $request->request->get('dateDebut');
  2659.             $dateDebut = new \DateTime($dateDebut);
  2660.         
  2661.             $dateFin = $request->request->get('dateFin');
  2662.                 
  2663.             $dateFin = new \DateTime($dateFin);
  2664.             $conge = new Conge;
  2665.             $conge->setDateDebut($dateDebut);
  2666.             $conge->setDateFin($dateFin);
  2667.             $conge->setTypeConge($typeConge);
  2668.             $conge->setNotes($notes);
  2669.             $conge->setUser($employe->getUser());
  2670.             $conge->setBoutique($boutique);
  2671.             
  2672.             $conge->setAnnee($dateDebut->format('Y'));
  2673.             $conge->setMois($dateDebut->format('m'));
  2674.             $nombreDeJour = $dateFin->diff($dateDebut)->format("%a");
  2675.             $conge->setNombreDeJour($nombreDeJour);
  2676.             $em->persist($conge);
  2677.             $em->flush();
  2678.             return $this->redirectToRoute('admin_conges', array('slug'=>$boutique->getSlug()));
  2679.         }
  2680.         $userBoutique = $em->getRepository(UserBoutique::class)
  2681.                         ->findOneBy(
  2682.                             array(
  2683.                             'user' => $user->getId(),
  2684.                             'boutique' => $boutique->getId()
  2685.                             )
  2686.                         );
  2687.         
  2688.         
  2689.         return $this->render('admin/nouveau_conge.html.twig', [
  2690.            'boutique' => $boutique,
  2691.            'userBoutique' => $userBoutique,
  2692.         ]);
  2693.     }
  2694.     /**
  2695.      * @Route("/{slug}/rh/nouvel-employe", name="admin.nouvel_employe")
  2696.      * @return \Symfony\Component\HttpFoundation\Response
  2697.     */
  2698.     public function nouvelEmployeAction(Request $request, UserPasswordHasherInterface $passwordHasher, Boutique $boutique)
  2699.     {
  2700.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2701.            return $this->redirectToRoute('security_login');
  2702.         }
  2703.         $em = $this->getDoctrine()
  2704.                     ->getManager();
  2705.         $employe = new AppUser;
  2706.         $form = $this->createForm(EmployeType::class, $employe);
  2707.         $error = '';
  2708.         $droits = DroitUtilisateur::getDroits();
  2709.         $ok_submission = '';
  2710.         if('POST' == $request->getMethod()){
  2711.             $form->handleRequest($request);
  2712.             if($form->isValid()){
  2713.                 $employe->setUsername($form->getData()->getNom().$form->getData()->getPrenom().time());
  2714.                 $roles = $employe->getRoles();
  2715.                 $roles[] = 'ROLE_EMPLOYE';
  2716.                 $employe->setRoles($roles);
  2717.                 $employe->setEnabled(true);
  2718.                 $employe->setBoutique($boutique);
  2719.                 $email = $form->getData()->getEmail();
  2720.                 if($email == ''){
  2721.                     $employe->setEmail($form->getData()->getNom().$form->getData()->getPrenom().time());
  2722.                 }
  2723.                 $motDePasse = $request->request->get('mot_de_passe');
  2724.                 $motDePasse = $request->request->get('mot_de_passe');
  2725.                 
  2726.                 $sexe = $request->request->get('sexe');
  2727.                 
  2728.                 $hashedPassword = $passwordHasher->hashPassword($employe, $motDePasse);
  2729.                 $employe->setPassword($hashedPassword);
  2730.                 $employe->setSexe($sexe);
  2731.                 $em->persist($employe);
  2732.                 $em->flush();
  2733.                 
  2734.                 $matricule = $request->request->get('matricule');
  2735.                 $salaire = (float)$request->request->get('salaire');
  2736.                 $laFonction = $request->request->get('la_fonction');
  2737.                 $laQualification = $request->request->get('la_qualification');
  2738.                 $categorie = $request->request->get('categorie');
  2739.                 $departement = $request->request->get('departement');
  2740.                 $dateDePriseDeFonction = $request->request->get('date_de_prise_de_fonction');
  2741.                 $dateDePriseDeFonction = new \DateTime($dateDePriseDeFonction);
  2742.                 $nombreDEnfant =  (float)$request->request->get('nombre_d_enfant');
  2743.                 $igr =  (float)$request->request->get('igr');
  2744.                 
  2745.                 $employeBoutique = new UserBoutique;
  2746.                 $employeBoutique->setUser($employe);
  2747.                 $employeBoutique->setBoutique($boutique);
  2748.                 $employeBoutique->setMatricule($matricule);
  2749.                 $employeBoutique->setSalaire($salaire);
  2750.                 $employeBoutique->setLaFonction($laFonction);
  2751.                 $employeBoutique->setLaQualification($laQualification);
  2752.                 
  2753.                 $employeBoutique->setCategorieEmploi($categorie);
  2754.                 $employeBoutique->setDepartementEmploi($departement);
  2755.                 $employeBoutique->setDateDePriseDeFonction($dateDePriseDeFonction);
  2756.                 $employeBoutique->setNombreDEnfant($nombreDEnfant);
  2757.                 $employeBoutique->setIgr($igr);
  2758.                 $employeBoutique->setRole('ROLE_EMPLOYE');
  2759.                 $estEmploye =  $request->request->get('est_employe');
  2760.                 $employeBoutique->setEstEmploye($estEmploye);
  2761.                 //Droits 
  2762.                 
  2763.                 $lesDroits = array();
  2764.                 foreach($droits as $droit){
  2765.                     
  2766.                     $voir =  (boolean)$request->request->get($droit['nomVariable'].'voir');
  2767.                     $ajouter =  (boolean)$request->request->get($droit['nomVariable'].'ajouter');
  2768.                     $modifier = (boolean)$request->request->get($droit['nomVariable'].'modifier');
  2769.                     $supprimer = (boolean)$request->request->get($droit['nomVariable'].'supprimer');
  2770.                     $leDroit =  array(
  2771.                                             'nom' => $droit['nom'],
  2772.                                             'nomVariable' => $droit['nomVariable'],
  2773.                                             'valeurDroit' => array(
  2774.                                                     'lecture' => $voir,
  2775.                                                     'ajout' => $ajouter,
  2776.                                                     'modification' => $modifier,
  2777.                                                     'suppression' => $supprimer
  2778.                                                 )
  2779.                                             
  2780.                                 );
  2781.                     
  2782.                     array_push($lesDroits, $leDroit);
  2783.                 }
  2784.                 $employeBoutique->setDroits($lesDroits);
  2785.                 $em->persist($employeBoutique);
  2786.                 $em->flush();
  2787.                 $employe = new AppUser;
  2788.                 $form = $this->createForm(EmployeType::class, $employe);
  2789.                 $ok_submission = 'Enregistrement effectué';
  2790.             } else{
  2791.                 $error = 'error';
  2792.             }
  2793.         }
  2794.         
  2795.         $userBoutique = $em->getRepository(UserBoutique::class)
  2796.                             ->findOneBy(
  2797.                                 array(
  2798.                                     'user' => $this->getUser(),
  2799.                                     'boutique' => $boutique
  2800.                                 )
  2801.                             );
  2802.         
  2803.         
  2804.         return $this->render('admin/nouvel_employe.html.twig', [ 
  2805.             'boutique' => $boutique,
  2806.             'form' => $form->createView(),
  2807.             'ok_submission' => $ok_submission,
  2808.             'error' => $error,
  2809.             'userBoutique' => $userBoutique,
  2810.             'droits' => $droits
  2811.         ]);    
  2812.     } 
  2813.     
  2814.     /**
  2815.      * @Route("/{slug}/rh/modifier-employe/{id}", name="admin_modifier_employe")
  2816.      * @return \Symfony\Component\HttpFoundation\Response
  2817.     */
  2818.     public function modifierEmployeAction(Request $request,  $slug, $id)
  2819.     {
  2820.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2821.            return $this->redirectToRoute('security_login');
  2822.         }
  2823.         $em = $this->getDoctrine()
  2824.                     ->getManager();
  2825.         
  2826.         $boutique = $em->getRepository(Boutique::class)
  2827.                         ->findOneBySlug($slug);
  2828.         $employe = $em->getRepository(AppUser::class)
  2829.                     ->findOneById($id);
  2830.         
  2831.         $employeBoutique = $em->getRepository(UserBoutique::class)
  2832.                         ->findOneBy(
  2833.                                 array(
  2834.                                 'boutique' => $boutique->getId(),
  2835.                                 'user' => $employe->getId()
  2836.                                 )
  2837.                         );
  2838.         $droits = $employeBoutique->getDroits();
  2839.         $form = $this->createForm(EmployeEditType::class, $employe);
  2840.         $error = '';
  2841.         
  2842.         $ok_submission = '';
  2843.         if('POST' == $request->getMethod()){
  2844.             $form->handleRequest($request);
  2845.             if($form->isValid()){
  2846.                 $sexe = $request->request->get('sexe');
  2847.                 $employe->setSexe($sexe);
  2848.                 $em->flush();
  2849.                 $ok_submission = 'Enregistrement effectué';
  2850.                 $matricule = $request->request->get('matricule');
  2851.                 $salaire = (float)$request->request->get('salaire');
  2852.                 $laFonction = $request->request->get('la_fonction');
  2853.                 $laQualification = $request->request->get('la_qualification');
  2854.                 $categorie = $request->request->get('categorie');
  2855.                 $departement = $request->request->get('departement');
  2856.                 $dateDePriseDeFonction = $request->request->get('date_de_prise_de_fonction');
  2857.                 $dateDePriseDeFonction = new \DateTime($dateDePriseDeFonction);
  2858.                 $nombreDEnfant =  (float)$request->request->get('nombre_d_enfant');
  2859.                 $igr =  (float)$request->request->get('igr');
  2860.             
  2861.                 $employeBoutique->setMatricule($matricule);
  2862.                 $employeBoutique->setSalaire($salaire);
  2863.                 $employeBoutique->setLaFonction($laFonction);
  2864.                 $employeBoutique->setLaQualification($laQualification);
  2865.                 $employeBoutique->setCategorieEmploi($categorie);
  2866.                 $employeBoutique->setDepartementEmploi($departement);
  2867.                 $employeBoutique->setDateDePriseDeFonction($dateDePriseDeFonction);
  2868.                 $employeBoutique->setNombreDEnfant($nombreDEnfant);
  2869.                 $employeBoutique->setIgr($igr);
  2870.                 $estEmploye =  $request->request->get('est_employe');
  2871.                 $employeBoutique->setEstEmploye($estEmploye);
  2872.                 //Droits 
  2873.                 
  2874.                 $lesDroits = array();
  2875.                 foreach($droits as $droit){
  2876.                     
  2877.                     $voir =  (boolean)$request->request->get($droit['nomVariable'].'voir');
  2878.                     $ajouter =  (boolean)$request->request->get($droit['nomVariable'].'ajouter');
  2879.                     $modifier = (boolean)$request->request->get($droit['nomVariable'].'modifier');
  2880.                     $supprimer = (boolean)$request->request->get($droit['nomVariable'].'supprimer');
  2881.                     $leDroit =  array(
  2882.                                             'nom' => $droit['nom'],
  2883.                                             'nomVariable' => $droit['nomVariable'],
  2884.                                             'valeurDroit' => array(
  2885.                                                     'lecture' => $voir,
  2886.                                                     'ajout' => $ajouter,
  2887.                                                     'modification' => $modifier,
  2888.                                                     'suppression' => $supprimer
  2889.                                                 )
  2890.                                             
  2891.                                 );
  2892.                     
  2893.                     array_push($lesDroits, $leDroit);
  2894.                 }
  2895.                 $employeBoutique->setDroits($lesDroits);
  2896.                 $em->flush();
  2897.             } else{
  2898.                 $error = 'error';
  2899.             }
  2900.         }
  2901.         
  2902.         $userBoutique = $em->getRepository(UserBoutique::class)
  2903.                             ->findOneBy(
  2904.                                 array(
  2905.                                     'user' => $this->getUser(),
  2906.                                     'boutique' => $boutique
  2907.                                 )
  2908.                             );
  2909.         
  2910.         
  2911.         return $this->render('admin/modifier_employe.html.twig', [ 
  2912.             'boutique' => $boutique,
  2913.             'form' => $form->createView(),
  2914.             'ok_submission' => $ok_submission,
  2915.             'error' => $error,
  2916.             'userBoutique' => $userBoutique,
  2917.             'employe' => $employe,
  2918.             'droits' => $droits,
  2919.             'employeBoutique' => $employeBoutique
  2920.         ]);    
  2921.     } 
  2922.     
  2923.     
  2924.     /**
  2925.      * @Route("/{slug}/comptes", name="admin_comptabilite_comptes")
  2926.      * @return \Symfony\Component\HttpFoundation\Response
  2927.      */
  2928.     public function comptesAction(Request $request,  $slug)
  2929.     {
  2930.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2931.            return $this->redirectToRoute('security_login');
  2932.         }      
  2933.         $em = $this->getDoctrine()
  2934.                     ->getManager();
  2935.         $user = $this->getUser();
  2936.         $boutique = $em->getRepository(Boutique::class)
  2937.                     ->findOneBySlug($slug);
  2938.         $userBoutique = $em->getRepository(UserBoutique::class)
  2939.                             ->findOneBy(
  2940.                                 array(
  2941.                                     'user' => $this->getUser(),
  2942.                                     'boutique' => $boutique
  2943.                                 )
  2944.                             );
  2945.         $comptes = $em->getRepository(Compte::class)
  2946.                     ->findBy(
  2947.                         array(
  2948.                         'boutique' => $boutique->getId()
  2949.                         ),
  2950.                         array(
  2951.                             'numero' => 'ASC'
  2952.                         )
  2953.                         
  2954.                     );
  2955.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  2956.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  2957.         $dateDebut->setTime(0, 0);
  2958.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  2959.         $dateFin->setTime(23, 59);
  2960.         
  2961.         
  2962.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  2963.         $startMonth = $intervalleMois['debut'];
  2964.         $endMonth = $intervalleMois['fin'];
  2965.         
  2966.         $invoices  = $em->getRepository(Commande::class)
  2967.                         ->commandeParDateEtType($boutique->getId(), 'invoice', $dateDebut, $dateFin);
  2968.         
  2969.         $startYear = date('Y-01-01');
  2970.         $endYear = date('Y-12-31');
  2971.         $user = $this->getUser();
  2972.         return $this->render('admin/comptes.html.twig', [ 
  2973.             'boutique' => $boutique,
  2974.             'userBoutique' => $userBoutique,
  2975.             'comptes' => $comptes,
  2976.            'dateDebut' => $dateDebut,
  2977.            'dateFin' => $dateFin,
  2978.            'startMonth' => $startMonth,
  2979.            'endMonth' => $endMonth,
  2980.            'startYear' => $startYear,
  2981.            'endYear' => $endYear,
  2982.         ]);    
  2983.     }
  2984.     /**
  2985.      * @Route("/{slug}/ecritures-comptable-d-un-compte", name="admin_ecritures_comptale_d_un_compte")
  2986.      * @return \Symfony\Component\HttpFoundation\Response
  2987.      */
  2988.     public function ecrituresComptableDUnCompteAction(Request $request,  $slug)
  2989.     {
  2990.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2991.            return $this->redirectToRoute('security_login');
  2992.         }      
  2993.         $em = $this->getDoctrine()
  2994.                     ->getManager();
  2995.         $user = $this->getUser();
  2996.         $boutique = $em->getRepository(Boutique::class)
  2997.                     ->findOneBySlug($slug);
  2998.         $userBoutique = $em->getRepository(UserBoutique::class)
  2999.                             ->findOneBy(
  3000.                                 array(
  3001.                                     'user' => $this->getUser(),
  3002.                                     'boutique' => $boutique
  3003.                                 )
  3004.                             );
  3005.         if($request->getMethod() == 'POST'){
  3006.             $compte = $request->request->get('compte');
  3007.             $dateDebut = $request->request->get('dateDebut');
  3008.             $dateDebut = new \DateTime($dateDebut);
  3009.             $dateFin = $request->request->get('dateFin');
  3010.             $dateFin = new \DateTime($dateFin);
  3011.             $ecrituresComptables = $em->getRepository(EcritureComptable::class)
  3012.                     ->ecrituresComptableParDate($boutique, $dateDebut, $dateFin, $compte);
  3013.         }
  3014.         return $this->render('admin/ecritures_comptale_d_un_compte.html.twig', [ 
  3015.             'boutique' => $boutique,
  3016.             'userBoutique' => $userBoutique,
  3017.             'ecrituresComptables' => $ecrituresComptables
  3018.         ]);    
  3019.     }
  3020.     /**
  3021.      * @Route("/{slug}/nouveau-compte", name="admin_nouveau_compte")
  3022.      * @return \Symfony\Component\HttpFoundation\Response
  3023.      */
  3024.     public function nouveauCompteAction(Request $request, Boutique $boutique)
  3025.     {
  3026.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3027.            return $this->redirectToRoute('security_login');
  3028.         }
  3029.         $em = $this->getDoctrine()
  3030.                     ->getManager();
  3031.         
  3032.         $compte = new Compte;
  3033.         
  3034.         $user = $this->getUser();
  3035.         $userBoutique = $em->getRepository(UserBoutique::class)
  3036.                         ->findOneBy(
  3037.                             array(
  3038.                             'user' => $user->getId(),
  3039.                             'boutique' => $boutique->getId()
  3040.                             )
  3041.                         );
  3042.         $form = $this->createForm(CompteType::class, $compte, array('boutique' => $boutique->getId()));
  3043.         
  3044.         $ok_soumission = '';
  3045.         $error = '';
  3046.         
  3047.         if($request->getMethod() == 'POST'){
  3048.             
  3049.                $form->handleRequest($request);
  3050.                if($form->isValid()){
  3051.                    $compte->setBoutique($boutique);
  3052.                   $em->persist($compte);
  3053.                   $em->flush();
  3054.         
  3055.                 $ok_soumission =" Votre message a été pris en compte";
  3056.                     
  3057.                 unset($compte);
  3058.                 unset($form);
  3059.                 $compte = new Compte;
  3060.                 
  3061.                 $form = $this->createForm(CompteType::class, $compte, array('boutique' => $boutique->getId()));
  3062.                     
  3063.                 } else {
  3064.                     $error =" Veillez corrigez vos erreurs";
  3065.                 }
  3066.         }
  3067.     
  3068.         return $this->render('admin/nouveau_compte.html.twig', [
  3069.            'boutique' => $boutique,
  3070.            'form' => $form->createView(),
  3071.            'userBoutique' => $userBoutique
  3072.         ]);
  3073.     }
  3074.     /**
  3075.      * @Route("/{slug}/journaux", name="admin_comptabilite_journaux")
  3076.      * @return \Symfony\Component\HttpFoundation\Response
  3077.      */
  3078.     public function journauxAction(Request $request, Boutique $boutique)
  3079.     {
  3080.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3081.            return $this->redirectToRoute('security_login');
  3082.         }
  3083.         $em = $this->getDoctrine()
  3084.                     ->getManager();
  3085.         
  3086.         $compte = new Compte;
  3087.         
  3088.         $user = $this->getUser();
  3089.         $userBoutique = $em->getRepository(UserBoutique::class)
  3090.                         ->findOneBy(
  3091.                             array(
  3092.                             'user' => $user->getId(),
  3093.                             'boutique' => $boutique->getId()
  3094.                             )
  3095.                         );
  3096.         
  3097.         $journaux = $em->getRepository(JournalComptabilite::class)
  3098.                         ->findBy(
  3099.                             array(
  3100.                                 'boutique' => $boutique->getId(),
  3101.                                 'estSupprime' => false
  3102.                             ),
  3103.                             array(
  3104.                                 'nom' => 'ASC'
  3105.                             )
  3106.                         );
  3107.     
  3108.         return $this->render('admin/journaux.html.twig', [
  3109.            'boutique' => $boutique,
  3110.            'journaux' => $journaux,
  3111.            'userBoutique' => $userBoutique
  3112.         ]);
  3113.     }
  3114.     /**
  3115.      * @Route("/{slug}/nouveau-journal", name="admin_comptabilite_nouveau_journal")
  3116.      * @return \Symfony\Component\HttpFoundation\Response
  3117.      */
  3118.     public function nouveauJournalAction(Request $request, Boutique $boutique)
  3119.     {
  3120.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3121.            return $this->redirectToRoute('security_login');
  3122.         }
  3123.         $em = $this->getDoctrine()
  3124.                     ->getManager();
  3125.         
  3126.         $journal = new JournalComptabilite;
  3127.         
  3128.         $user = $this->getUser();
  3129.         $userBoutique = $em->getRepository(UserBoutique::class)
  3130.                         ->findOneBy(
  3131.                             array(
  3132.                             'user' => $user->getId(),
  3133.                             'boutique' => $boutique->getId()
  3134.                             )
  3135.                         );
  3136.         $form = $this->createForm(JournalComptabiliteType::class, $journal);
  3137.         
  3138.         $ok_soumission = '';
  3139.         $error = '';
  3140.         
  3141.         if($request->getMethod() == 'POST'){
  3142.             
  3143.                $form->handleRequest($request);
  3144.                if($form->isValid()){
  3145.                    $journal->setBoutique($boutique);
  3146.                   $em->persist($journal);
  3147.                   $em->flush();
  3148.         
  3149.                 $ok_soumission =" Votre message a été pris en compte";
  3150.                     
  3151.                 unset($journal);
  3152.                 unset($form);
  3153.                 $journal = new JournalComptabilite;
  3154.                 
  3155.                 $form = $this->createForm(JournalComptabiliteType::class, $journal);
  3156.                     
  3157.                 } else {
  3158.                     $error =" Veillez corrigez vos erreurs";
  3159.                 }
  3160.         }
  3161.     
  3162.         return $this->render('admin/nouveau_journal.html.twig', [
  3163.            'boutique' => $boutique,
  3164.            'form' => $form->createView(),
  3165.            'userBoutique' => $userBoutique
  3166.         ]);
  3167.     }
  3168.     /**
  3169.      * @Route("/{slug}/modifier-journal/{id}", name="admin_comptabilite_modifier_journal")
  3170.      * @return \Symfony\Component\HttpFoundation\Response
  3171.      */
  3172.     public function modifierJournalAction(Request $request,  $slug, $id)
  3173.     {
  3174.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3175.            return $this->redirectToRoute('security_login');
  3176.         }
  3177.         $em = $this->getDoctrine()
  3178.                     ->getManager();
  3179.         
  3180.         $journal = $em->getRepository(JournalComptabilite::class)
  3181.                     ->findOneById($id);
  3182.         $boutique = $em->getRepository(Boutique::class)
  3183.                     ->findOneBySlug($slug);
  3184.         
  3185.         $user = $this->getUser();
  3186.         $userBoutique = $em->getRepository(UserBoutique::class)
  3187.                         ->findOneBy(
  3188.                             array(
  3189.                             'user' => $user->getId(),
  3190.                             'boutique' => $boutique->getId()
  3191.                             )
  3192.                         );
  3193.         $form = $this->createForm(JournalComptabiliteEditType::class, $journal);
  3194.         
  3195.         $ok_soumission = '';
  3196.         $error = '';
  3197.         
  3198.         if($request->getMethod() == 'POST'){
  3199.             
  3200.                $form->handleRequest($request);
  3201.                if($form->isValid()){
  3202.                   $em->flush();
  3203.         
  3204.                 $ok_soumission =" Votre message a été pris en compte";
  3205.                     
  3206.                     
  3207.                 } else {
  3208.                     $error =" Veillez corrigez vos erreurs";
  3209.                 }
  3210.         }
  3211.     
  3212.         return $this->render('admin/modifier_journal.html.twig', [
  3213.            'boutique' => $boutique,
  3214.            'form' => $form->createView(),
  3215.            'userBoutique' => $userBoutique,
  3216.            'journal' => $journal
  3217.         ]);
  3218.     }
  3219.     /**
  3220.      * @Route("/{slug}/supprimer-journal/{id}", name="admin_comptabilite_supprimer_journal")
  3221.      * @return \Symfony\Component\HttpFoundation\Response
  3222.      */
  3223.     public function supprimerJournalAction(Request $request,  $slug, $id)
  3224.     {
  3225.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3226.            return $this->redirectToRoute('security_login');
  3227.         }
  3228.         $em = $this->getDoctrine()
  3229.                     ->getManager();
  3230.         
  3231.         $journal = $em->getRepository(JournalComptabilite::class)
  3232.                     ->findOneById($id);
  3233.         $boutique = $em->getRepository(Boutique::class)
  3234.                     ->findOneBySlug($slug);
  3235.         
  3236.         $user = $this->getUser();
  3237.         $userBoutique = $em->getRepository(UserBoutique::class)
  3238.                         ->findOneBy(
  3239.                             array(
  3240.                             'user' => $user->getId(),
  3241.                             'boutique' => $boutique->getId()
  3242.                             )
  3243.                         );
  3244.     
  3245.         
  3246.         if(null !== $journal){
  3247.             $journal->setEstSupprime(true);
  3248.             $em->flush();
  3249.         }
  3250.         return $this->redirectToRoute('admin_comptabilite_journaux', array('slug' => $boutique->getSlug()));
  3251.     
  3252.        
  3253.     }
  3254.     /**
  3255.      * @Route("/{slug}/etats-financiers", name="admin_comptabilite_etats_financiers")
  3256.      * @return \Symfony\Component\HttpFoundation\Response
  3257.      */
  3258.     public function etatsFinanciersAction(Request $request, Boutique $boutique)
  3259.     {
  3260.         
  3261.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3262.            return $this->redirectToRoute('security_login');
  3263.         }
  3264.         
  3265.         $em = $this->getDoctrine()
  3266.                     ->getManager();
  3267.     
  3268.         
  3269.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  3270.         $dateDebut = date('Y-01-01');
  3271.         $dateDebut = new \DateTime($dateDebut);
  3272.         $dateDebut->setTime(0, 0);
  3273.         $dateFin = date('Y-12-31');
  3274.         $dateFin = new \DateTime($dateFin);
  3275.         $dateFin->setTime(23, 59);
  3276.         
  3277.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  3278.         $startMonth = $intervalleMois['debut'];
  3279.         $endMonth = $intervalleMois['fin'];
  3280.         $chargeDExploitations  = $em->getRepository(Expensive::class)
  3281.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Charges d\'exploitation');
  3282.         
  3283.         $chargeFinancieres  = $em->getRepository(Expensive::class)
  3284.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Charges financières');
  3285.         
  3286.         $chargeExceptionnelles  = $em->getRepository(Expensive::class)
  3287.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Charges exceptionnelles');
  3288.         
  3289.         $impotSurLeBenefice  = $em->getRepository(Expensive::class)
  3290.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Impôts sur les bénéficices');
  3291.         
  3292.         
  3293.         $venteDeMarchandise = $em->getRepository(Commande::class)
  3294.                                         ->chiffreDAffaireDUnePeriode('invoice', $boutique->getId(), $dateDebut, $dateFin);
  3295.         if(!empty($venteDeMarchandise)){
  3296.             $venteDeMarchandise = $venteDeMarchandise['0'];
  3297.         }else{
  3298.             $venteDeMarchandise = array(
  3299.                                         'totalVente' => 0
  3300.                                     );
  3301.         }
  3302.         
  3303.         
  3304.         $startYear = date('Y-01-01');
  3305.         $endYear = date('Y-12-31');
  3306.         $user = $this->getUser();
  3307.     
  3308.         $actifs = array();
  3309.         
  3310.         $immobilisationsIncorporelles = $em->getRepository(EcritureComptable::class)
  3311.                                 ->bilanComptable($boutique, 'Immobilisations incorporelles', $dateDebut, $dateFin);
  3312.         $immobilisationsCorporelles = $em->getRepository(EcritureComptable::class)
  3313.                                 ->bilanComptable($boutique, 'Immobilisations corporelles', $dateDebut, $dateFin);
  3314.         $immobilisationsFinancieres = $em->getRepository(EcritureComptable::class)
  3315.                                 ->bilanComptable($boutique, 'Immobilisations financières', $dateDebut, $dateFin);
  3316.         $stocks = $em->getRepository(EcritureComptable::class)
  3317.                                 ->bilanComptable($boutique, 'Stocks', $dateDebut, $dateFin);
  3318.         $creances = $em->getRepository(EcritureComptable::class)
  3319.                                 ->bilanComptable($boutique, 'Créance', $dateDebut, $dateFin);
  3320.         /*
  3321.         $disponibilites = $em->getRepository(EcritureComptable::class)
  3322.                                 ->bilanComptable($boutique, 'Disponibilité', $dateDebut, $dateFin);
  3323.         */
  3324.         
  3325.         $disponibilites = $em->getRepository(EcritureComptable::class)
  3326.                                 ->bilanComptable($boutique, 'Disponibilités', $dateDebut, $dateFin);
  3327.         
  3328.         $capitauxPropres = $em->getRepository(EcritureComptable::class)
  3329.                                 ->bilanComptable($boutique, 'Capitaux propres', $dateDebut, $dateFin);
  3330.         $dettesFinancieres = $em->getRepository(EcritureComptable::class)
  3331.                                 ->bilanComptable($boutique, 'Dettes financières', $dateDebut, $dateFin);
  3332.         $dettesDExploitations = $em->getRepository(EcritureComptable::class)
  3333.                                 ->bilanComptable($boutique, 'Dettes d\'exploitation', $dateDebut, $dateFin);
  3334.         $dettesFiscales = $em->getRepository(EcritureComptable::class)
  3335.                                 ->bilanComptable($boutique, 'Dettes fiscales et sociales', $dateDebut, $dateFin);
  3336.         $dettesSurImmobilisations = $em->getRepository(EcritureComptable::class)
  3337.                                 ->bilanComptable($boutique, 'Dettes sur immobilisations', $dateDebut, $dateFin);
  3338.         if($request->getMethod() == 'POST'){
  3339.             
  3340.             
  3341.         }
  3342.             $userBoutique = $em->getRepository(UserBoutique::class)
  3343.                         ->findOneBy(
  3344.                             array(
  3345.                             'user' => $user->getId(),
  3346.                             'boutique' => $boutique->getId()
  3347.                             )
  3348.                         );
  3349.                         
  3350.         return $this->render('admin/etats_financiers.html.twig', [
  3351.            'boutique' => $boutique,
  3352.            'userBoutique' => $userBoutique,
  3353.            'intervalleDeDate' => $intervalleDeDate,
  3354.            'dateDebut' => $dateDebut,
  3355.            'dateFin' => $dateFin,
  3356.            'startMonth' => $startMonth,
  3357.            'intervalleMois' => $intervalleMois,
  3358.            'endMonth' => $endMonth,
  3359.            'startYear' => $startYear,
  3360.            'endYear' => $endYear,
  3361.            
  3362.            'chargeDExploitations' => $chargeDExploitations,
  3363.            'chargeFinancieres' => $chargeFinancieres,
  3364.            'chargeExceptionnelles' => $chargeExceptionnelles,
  3365.            'impotSurLeBenefice' => $impotSurLeBenefice,
  3366.            'venteDeMarchandise' => $venteDeMarchandise,
  3367.            
  3368.            'immobilisationsIncorporelles' => $immobilisationsIncorporelles,
  3369.            'immobilisationsCorporelles' => $immobilisationsCorporelles,
  3370.            'immobilisationsFinancieres' => $immobilisationsFinancieres,
  3371.            'stocks' => $stocks,
  3372.            'creances' => $creances,
  3373.            'disponibilites' => $disponibilites,
  3374.            'capitauxPropres' => $capitauxPropres,
  3375.            'dettesFinancieres' => $dettesFinancieres,
  3376.            'dettesDExploitations' => $dettesDExploitations,
  3377.            'dettesFiscales' => $dettesFiscales,
  3378.            'dettesSurImmobilisations' => $dettesSurImmobilisations
  3379.            
  3380.         ]);
  3381.     }
  3382.     
  3383.     
  3384.     /**
  3385.      * @Route("/{slug}/ecritures-comptable", name="admin_comptabilite_ecritures_comptable")
  3386.      * @return \Symfony\Component\HttpFoundation\Response
  3387.      */
  3388.     public function ecrituresEomptableAction(Request $request, Boutique $boutique)
  3389.     {
  3390.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3391.            return $this->redirectToRoute('security_login');
  3392.         }
  3393.         $em = $this->getDoctrine()
  3394.                     ->getManager();
  3395.         
  3396.         $compte = new Compte;
  3397.         
  3398.         $user = $this->getUser();
  3399.         $userBoutique = $em->getRepository(UserBoutique::class)
  3400.                         ->findOneBy(
  3401.                             array(
  3402.                             'user' => $user->getId(),
  3403.                             'boutique' => $boutique->getId()
  3404.                             )
  3405.                         );
  3406.         $ecritureComptables = $em->getRepository(EcritureComptable::class)
  3407.                                 ->findBy(
  3408.                                     array(
  3409.                                         'boutique' => $boutique->getId()
  3410.                                     ),
  3411.                                     array(
  3412.                                         'laDate' => 'DESC'
  3413.                                     )
  3414.                                 );
  3415.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  3416.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  3417.         $dateDebut->setTime(0, 0);
  3418.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  3419.         $dateFin->setTime(23, 59);
  3420.         
  3421.         
  3422.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  3423.         $startMonth = $intervalleMois['debut'];
  3424.         $endMonth = $intervalleMois['fin'];
  3425.         
  3426.         $ecritureComptables  = $em->getRepository(EcritureComptable::class)
  3427.                         ->ecritureComptablesParDateGlobale($boutique->getId(), $dateDebut, $dateFin);
  3428.         
  3429.         $startYear = date('Y-01-01');
  3430.         $endYear = date('Y-12-31');
  3431.         
  3432.         if($request->getMethod() == 'POST'){
  3433.             $dateDebut = $_POST['dateDebut'];
  3434.             $dateFin = $_POST['dateFin'];
  3435.             
  3436.             $dateDebut = new \DateTime($dateDebut);
  3437.             $dateDebut->setTime(0, 0);
  3438.             
  3439.             $dateFin = new \DateTime($dateFin);
  3440.             $dateFin->setTime(23, 59);
  3441.             
  3442.             $ecritureComptables  = $em->getRepository(EcritureComptable::class)
  3443.                         ->ecritureComptablesParDateGlobale($boutique->getId(), $dateDebut, $dateFin);
  3444.             
  3445.             
  3446.             return $this->render('admin/ecriture_comptable_table_content.html.twig', [
  3447.                'boutique' => $boutique,
  3448.                'ecritureComptables' => $ecritureComptables,
  3449.                'userBoutique' => $userBoutique
  3450.             ]);
  3451.             
  3452.             
  3453.         }
  3454.     
  3455.         return $this->render('admin/ecriture_comptables.html.twig', [
  3456.            'boutique' => $boutique,
  3457.            'ecritureComptables' => $ecritureComptables,
  3458.            'userBoutique' => $userBoutique,
  3459.             'dateDebut' => $dateDebut,
  3460.            'dateFin' => $dateFin,
  3461.            'startMonth' => $startMonth,
  3462.            'endMonth' => $endMonth,
  3463.            'startYear' => $startYear,
  3464.            'endYear' => $endYear,
  3465.         ]);
  3466.     }
  3467.     /**
  3468.      * @Route("/{slug}/balance", name="admin_comptabilite_balance")
  3469.      * @return \Symfony\Component\HttpFoundation\Response
  3470.      */
  3471.     public function balanceAction(Request $request, Boutique $boutique)
  3472.     {
  3473.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3474.            return $this->redirectToRoute('security_login');
  3475.         }
  3476.         $em = $this->getDoctrine()
  3477.                     ->getManager();
  3478.         
  3479.         $compte = new Compte;
  3480.         
  3481.         $user = $this->getUser();
  3482.         $userBoutique = $em->getRepository(UserBoutique::class)
  3483.                         ->findOneBy(
  3484.                             array(
  3485.                             'user' => $user->getId(),
  3486.                             'boutique' => $boutique->getId()
  3487.                             )
  3488.                         );
  3489.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  3490.         $dateDebut = date('Y-01-01');
  3491.         $dateDebut = new \DateTime($dateDebut);
  3492.         $dateDebut->setTime(0, 0);
  3493.         $dateFin = date('Y-12-31');
  3494.         $dateFin = new \DateTime($dateFin);
  3495.         $dateFin->setTime(23, 59);
  3496.         
  3497.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  3498.         $startMonth = $intervalleMois['debut'];
  3499.         $endMonth = $intervalleMois['fin'];
  3500.         $startYear = date('Y-01-01');
  3501.         $endYear = date('Y-12-31');
  3502.         $balances = $em->getRepository(EcritureComptable::class)
  3503.                                 ->balance($boutique->getId(), $dateDebut, $dateFin);
  3504.         
  3505.         if($request->getMethod() == 'POST'){
  3506.             $dateDebut = $_POST['dateDebut'];
  3507.             $dateFin = $_POST['dateFin'];
  3508.             
  3509.             $dateDebut = new \DateTime($dateDebut);
  3510.             $dateDebut->setTime(0, 0);
  3511.             
  3512.             $dateFin = new \DateTime($dateFin);
  3513.             $dateFin->setTime(23, 59);
  3514.             
  3515.             $balances = $em->getRepository(EcritureComptable::class)
  3516.                                 ->balance($boutique->getId(), $dateDebut, $dateFin);
  3517.             
  3518.             return $this->render('admin/balance_table_content.html.twig', [
  3519.                'boutique' => $boutique,
  3520.                'balances' => $balances,
  3521.                'userBoutique' => $userBoutique
  3522.             ]);
  3523.             
  3524.             
  3525.         }
  3526.     
  3527.         return $this->render('admin/balance.html.twig', [
  3528.            'boutique' => $boutique,
  3529.            'balances' => $balances,
  3530.            'userBoutique' => $userBoutique,
  3531.            'dateDebut' => $dateDebut,
  3532.            'dateFin' => $dateFin,
  3533.            'startMonth' => $startMonth,
  3534.            'endMonth' => $endMonth,
  3535.            'startYear' => $startYear,
  3536.            'endYear' => $endYear,
  3537.         ]);
  3538.     }
  3539.     
  3540.     /**
  3541.      * @Route("/{slug}/grand-livre", name="admin_comptabilite_grand_livre")
  3542.      * @return \Symfony\Component\HttpFoundation\Response
  3543.      */
  3544.     public function grandLivreAction(Request $request, Boutique $boutique)
  3545.     {
  3546.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3547.            return $this->redirectToRoute('security_login');
  3548.         }
  3549.         $em = $this->getDoctrine()
  3550.                     ->getManager();
  3551.         
  3552.         $compte = new Compte;
  3553.         
  3554.         $user = $this->getUser();
  3555.         $userBoutique = $em->getRepository(UserBoutique::class)
  3556.                         ->findOneBy(
  3557.                             array(
  3558.                             'user' => $user->getId(),
  3559.                             'boutique' => $boutique->getId()
  3560.                             )
  3561.                         );
  3562.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  3563.         $dateDebut = date('Y-01-01');
  3564.         $dateDebut = new \DateTime($dateDebut);
  3565.         $dateDebut->setTime(0, 0);
  3566.         $dateFin = date('Y-12-31');
  3567.         $dateFin = new \DateTime($dateFin);
  3568.         $dateFin->setTime(23, 59);
  3569.         
  3570.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  3571.         $startMonth = $intervalleMois['debut'];
  3572.         $endMonth = $intervalleMois['fin'];
  3573.         $ecritureComptables = $em->getRepository(EcritureComptable::class)
  3574.                                 ->grandLivre($boutique->getId(), $dateDebut, $dateFin);
  3575.         
  3576.         if($request->getMethod() == 'POST'){
  3577.             $ecritureComptables = array();
  3578.             
  3579.         }
  3580.     
  3581.         return $this->render('admin/grand_livre.html.twig', [
  3582.            'boutique' => $boutique,
  3583.            'ecritureComptables' => $ecritureComptables,
  3584.            'userBoutique' => $userBoutique
  3585.         ]);
  3586.     }
  3587.     
  3588.     /**
  3589.      * @Route("/{slug}/nouvelle-ecriture-comptable", name="admin_comptabilite_nouvelle_ecriture_comptable")
  3590.      * @return \Symfony\Component\HttpFoundation\Response
  3591.      */
  3592.     public function nouvelleEcritureEomptableAction(Request $request, Boutique $boutique)
  3593.     {
  3594.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3595.            return $this->redirectToRoute('security_login');
  3596.         }
  3597.         $em = $this->getDoctrine()
  3598.                     ->getManager();
  3599.         
  3600.         $user = $this->getUser();
  3601.         $userBoutique = $em->getRepository(UserBoutique::class)
  3602.                         ->findOneBy(
  3603.                             array(
  3604.                             'user' => $user->getId(),
  3605.                             'boutique' => $boutique->getId()
  3606.                             )
  3607.                         );
  3608.         
  3609.         $ok_soumission = '';
  3610.         $error = '';
  3611.         $comptes = $em->getRepository(Compte::class)
  3612.                         ->findBy(
  3613.                             array(
  3614.                                 'boutique' => $boutique->getId(),
  3615.                                 ),
  3616.                                 array(
  3617.                                     'numero' => 'ASC'
  3618.                                 )
  3619.                         );
  3620.         $journaux = $em->getRepository(JournalComptabilite::class)
  3621.                         ->findBy(
  3622.                             array(
  3623.                                 'boutique' => $boutique->getId(),
  3624.                                 ),
  3625.                                 array(
  3626.                                     'nom' => 'ASC'
  3627.                                 )
  3628.                         );
  3629.         if($request->getMethod() == 'POST'){
  3630.             $journal = $_POST['journal'];
  3631.             $journal = $em->getRepository(JournalComptabilite::class)
  3632.                         ->findOneById($journal);
  3633.             $pieceJustificative = $_POST['pieceJustificative'];
  3634.             $libelle = $_POST['libelle'];
  3635.             $laDate = $_POST['laDate'];
  3636.             $laDate = new \DateTime($laDate);
  3637.             $listeComptes = json_decode($_POST['listeComptes']);
  3638.             $totalDebit = (float)$_POST['totalDebit'];
  3639.             $totalCredit = (float)$_POST['totalCredit'];
  3640.             
  3641.             $groupeEcritureComptable = new GroupeEcritureComptable;
  3642.             $groupeEcritureComptable->setBoutique($boutique);
  3643.                     
  3644.             $groupeEcritureComptable->setLibelleEcriture($libelle);
  3645.             $groupeEcritureComptable->setDebit($totalDebit);
  3646.             $groupeEcritureComptable->setCredit($totalCredit);
  3647.             $groupeEcritureComptable->setLaDate($laDate);
  3648.             $groupeEcritureComptable->setNumeroPiece($pieceJustificative);
  3649.             $groupeEcritureComptable->setAnnee($laDate->format('Y'));
  3650.             $groupeEcritureComptable->setMois($laDate->format('m'));
  3651.             $groupeEcritureComptable->setLeJournal($journal);
  3652.             $em->persist($groupeEcritureComptable);
  3653.             $em->flush();
  3654.             foreach($listeComptes as $cp){
  3655.                 $cp = (array)$cp;
  3656.                 $idCompte = $cp['idCompte'];
  3657.                 $debit = $cp['debit'];
  3658.                 $credit = $cp['credit'];
  3659.                 $ecritureComptable = new EcritureComptable;
  3660.                 $ecritureComptable->setBoutique($boutique);
  3661.                 $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3662.                 $ecritureComptable->setLeJournal($journal);
  3663.                 $compte = $em->getRepository(Compte::class)
  3664.                                 ->findOneById($idCompte);
  3665.                 $compte->setSolde($compte->getSolde() + $debit - $credit);
  3666.                 $ecritureComptable->setCompte($compte);
  3667.                 $ecritureComptable->setLibelleEcriture($libelle);
  3668.                 $ecritureComptable->setDebit($debit);
  3669.                 $ecritureComptable->setCredit($credit);
  3670.                 $ecritureComptable->setSolde($compte->getSolde());
  3671.                 $ecritureComptable->setLaDate($laDate);
  3672.                 $ecritureComptable->setNumeroPiece($pieceJustificative);
  3673.                 $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3674.                 $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3675.                 $em->persist($ecritureComptable);
  3676.             }
  3677.             $em->flush();
  3678.             
  3679.         }
  3680.     
  3681.         return $this->render('admin/nouvelle_ecriture_comptable.html.twig', [
  3682.            'boutique' => $boutique,
  3683.            
  3684.            'userBoutique' => $userBoutique,
  3685.            'comptes' => $comptes,
  3686.            'journaux' => $journaux
  3687.         ]);
  3688.     }
  3689.     /**
  3690.      * @Route("/{slug}/visites", name="admin_visites")
  3691.      * @return \Symfony\Component\HttpFoundation\Response
  3692.      */
  3693.     public function visitesAction(Request $request, Boutique $boutique)
  3694.     {
  3695.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3696.            return $this->redirectToRoute('security_login');
  3697.         }
  3698.         $em = $this->getDoctrine()
  3699.                     ->getManager();
  3700.         $user = $this->getUser();
  3701.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  3702.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  3703.         $dateDebut->setTime(0, 0);
  3704.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  3705.         $dateFin->setTime(23, 59);
  3706.         
  3707.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  3708.         $startMonth = $intervalleMois['debut'];
  3709.         $endMonth = $intervalleMois['fin'];
  3710.         
  3711.         $visites  = $em->getRepository(Visite::class)
  3712.                         ->visiteParDate($boutique->getId(), $dateDebut, $dateFin);
  3713.         
  3714.         $startYear = date('Y-01-01');
  3715.         $endYear = date('Y-12-31');
  3716.         $userBoutique = $em->getRepository(UserBoutique::class)
  3717.                         ->findOneBy(
  3718.                             array(
  3719.                             'user' => $user->getId(),
  3720.                             'boutique' => $boutique->getId()
  3721.                             )
  3722.                         );
  3723.          return $this->render('admin/visites.html.twig', [
  3724.             'boutique' => $boutique,
  3725.             'userBoutique' => $userBoutique,
  3726.             'dateDebut' => $dateDebut,
  3727.            'dateFin' => $dateFin,
  3728.            'startMonth' => $startMonth,
  3729.            'endMonth' => $endMonth,
  3730.            'startYear' => $startYear,
  3731.            'endYear' => $endYear,
  3732.            'visites' => $visites
  3733.         ]);
  3734.     }
  3735.     /**
  3736.      * @Route("/{slug}/nouvelle-visite", name="admin_nouvelle_visite")
  3737.      * @return \Symfony\Component\HttpFoundation\Response
  3738.      */
  3739.     public function nouvelleVisiteAction(Request $request, Boutique $boutique)
  3740.     {
  3741.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3742.            return $this->redirectToRoute('security_login');
  3743.         }
  3744.         $em = $this->getDoctrine()
  3745.                     ->getManager();
  3746.         
  3747.         $visite = new Visite;
  3748.         $form = $this->createForm(VisiteType::class, $visite);
  3749.         
  3750.         $user = $this->getUser();
  3751.         $userBoutique = $em->getRepository(UserBoutique::class)
  3752.                         ->findOneBy(
  3753.                             array(
  3754.                             'user' => $user->getId(),
  3755.                             'boutique' => $boutique->getId()
  3756.                             )
  3757.                         );
  3758.         
  3759.         $ok_soumission = '';
  3760.         $error = '';
  3761.         
  3762.         if($request->getMethod() == 'POST'){
  3763.             
  3764.                $form->handleRequest($request);
  3765.                if($form->isSubmitted() && $form->isValid()){
  3766.                    $visite->setBoutique($boutique);
  3767.                    $visite->setCreePar($user);
  3768.                     $em->persist($visite);
  3769.                   $em->flush();
  3770.                 
  3771.                   if(isset($_FILES['photos']) && $_FILES['photos']['name'][0] != ''){
  3772.                         
  3773.                         $this->gererFichierMultiple($visite, $_FILES['photos']);
  3774.                     }
  3775.         
  3776.                 $ok_soumission ="Enregistrement effectué";
  3777.                 $visite = new Visite;
  3778.                 
  3779.                 $form = $this->createForm(VisiteType::class, $visite);
  3780.                     
  3781.                 } else {
  3782.                     $error =" Veillez corrigez vos erreurs";
  3783.                 }
  3784.         }
  3785.         return $this->render('admin/nouvelle_visite.html.twig', [
  3786.            'boutique' => $boutique,
  3787.            'form' => $form->createView(),
  3788.            'userBoutique' => $userBoutique,
  3789.            'ok_soumission' => $ok_soumission,
  3790.            'error' => $error
  3791.         ]);
  3792.     }
  3793.     /**
  3794.      * @Route("/{slug}/modifier-visite/{visite}", name="admin_modifier_visite")
  3795.      * @return \Symfony\Component\HttpFoundation\Response
  3796.      */
  3797.     public function modifierVisiteAction(Request $request, Boutique $boutique, $visite)
  3798.     {
  3799.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3800.            return $this->redirectToRoute('security_login');
  3801.         }
  3802.         $em = $this->getDoctrine()
  3803.                     ->getManager();
  3804.                     
  3805.         $user = $this->getUser();
  3806.         $userBoutique = $em->getRepository(UserBoutique::class)
  3807.                         ->findOneBy(
  3808.                             array(
  3809.                             'user' => $user->getId(),
  3810.                             'boutique' => $boutique->getId()
  3811.                             )
  3812.                         );
  3813.         $visite = $em->getRepository(Visite::class)
  3814.                     ->findOneById($visite);
  3815.         $form = $this->createForm(VisiteEditType::class, $visite);
  3816.         
  3817.         $ok_soumission = '';
  3818.         $error = '';
  3819.         
  3820.         if($request->getMethod() == 'POST'){
  3821.             
  3822.                $form->handleRequest($request);
  3823.                if($form->isValid()){
  3824.                     $visite->setModifiePar($user);
  3825.                     $em->flush();
  3826.         
  3827.                 $ok_soumission =" Votre message a été pris en compte";
  3828.                     
  3829.                 } else {
  3830.                     $error =" Veillez corrigez vos erreurs";
  3831.                 }
  3832.         }
  3833.         return $this->render('admin/modifier_visite.html.twig', [
  3834.            'boutique' => $boutique,
  3835.            'form' => $form->createView(),
  3836.            'userBoutique' => $userBoutique,
  3837.            'visite' => $visite
  3838.         ]);
  3839.     }
  3840.     /**
  3841.      * @Route("/{slug}/depart-visiteur/{visite}", name="admin_depart_visiteur")
  3842.      * @return \Symfony\Component\HttpFoundation\Response
  3843.      */
  3844.     public function departVisiteurAction(Request $request, Boutique $boutique, $visite)
  3845.     {
  3846.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3847.            return $this->redirectToRoute('security_login');
  3848.         }
  3849.         $em = $this->getDoctrine()
  3850.                     ->getManager();
  3851.         $user = $this->getUser();
  3852.         $visite = $em->getRepository(Visite::class)
  3853.                     ->findOneById($visite);
  3854.                     
  3855.         if(null != $visite){
  3856.             $visite->setDateDeDepart(new \DateTime());
  3857.             $em->flush();
  3858.         }
  3859.         
  3860.         return $this->redirectToRoute('admin_visites', array('slug' => $boutique->getSlug()));
  3861.     }
  3862.     /**
  3863.      * @Route("/{slug}/supprimer-visite/{visite}", name="admin_supprimer_visite")
  3864.      * @return \Symfony\Component\HttpFoundation\Response
  3865.      */
  3866.     public function supprimerVisiteAction(Request $request, Boutique $boutique, $visite)
  3867.     {
  3868.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3869.            return $this->redirectToRoute('security_login');
  3870.         }
  3871.         $em = $this->getDoctrine()
  3872.                     ->getManager();
  3873.         $user = $this->getUser();
  3874.         $visite = $em->getRepository(Visite::class)
  3875.                     ->findOneById($visite);
  3876.                     
  3877.         if(null != $visite){
  3878.             $visite->setEstSupprime(true);
  3879.             $visite->setSupprimePar($user);
  3880.             $em->flush();
  3881.         }
  3882.         
  3883.         return $this->redirectToRoute('admin_visites', array('slug' => $boutique->getSlug()));
  3884.     }
  3885.     /**
  3886.      * @Route("/{slug}/etape-projets", name="admin_etape_projets")
  3887.      * @return \Symfony\Component\HttpFoundation\Response
  3888.      */
  3889.     public function etapeProjetsAction(Request $request, Boutique $boutique)
  3890.     {
  3891.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3892.            return $this->redirectToRoute('security_login');
  3893.         }
  3894.         $em = $this->getDoctrine()
  3895.                     ->getManager();
  3896.         $user = $this->getUser();
  3897.         $etapeProjets  = $em->getRepository(EtapeProjet::class)
  3898.                         ->findBy(
  3899.                             array(
  3900.                                 'boutique' => $boutique->getId(),
  3901.                                 'estSupprime' => false
  3902.                             ),
  3903.                             array(
  3904.                                 'ordre' => 'DESC'
  3905.                             )
  3906.                         );
  3907.         $userBoutique = $em->getRepository(UserBoutique::class)
  3908.                         ->findOneBy(
  3909.                             array(
  3910.                             'user' => $user->getId(),
  3911.                             'boutique' => $boutique->getId()
  3912.                             )
  3913.                         );
  3914.         return $this->render('admin/etapes_projets.html.twig', [
  3915.             'boutique' => $boutique,
  3916.             'userBoutique' => $userBoutique,
  3917.            'etapeProjets' => $etapeProjets
  3918.         ]);
  3919.     }
  3920.         /**
  3921.      * @Route("/{slug}/nouvelle-etape-projet", name="admin_nouvelle_etape_projet")
  3922.      * @return \Symfony\Component\HttpFoundation\Response
  3923.      */
  3924.     public function nouvelleEtapeProjetAction(Request $request, Boutique $boutique)
  3925.     {
  3926.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3927.            return $this->redirectToRoute('security_login');
  3928.         }
  3929.         $em = $this->getDoctrine()
  3930.                     ->getManager();
  3931.         
  3932.         $etapeProjet = new EtapeProjet;
  3933.         $form = $this->createForm(EtapeProjetType::class, $etapeProjet);
  3934.         
  3935.         $user = $this->getUser();
  3936.         $userBoutique = $em->getRepository(UserBoutique::class)
  3937.                         ->findOneBy(
  3938.                             array(
  3939.                             'user' => $user->getId(),
  3940.                             'boutique' => $boutique->getId()
  3941.                             )
  3942.                         );
  3943.         
  3944.         $ok_soumission = '';
  3945.         $error = '';
  3946.         
  3947.         if($request->getMethod() == 'POST'){
  3948.             
  3949.                $form->handleRequest($request);
  3950.                if($form->isSubmitted() && $form->isValid()){
  3951.                    $etapeProjet->setBoutique($boutique);
  3952.                    $etapeProjet->setCreePar($user);
  3953.                     $em->persist($etapeProjet);
  3954.                   $em->flush();
  3955.                 
  3956.                 $ok_soumission ="Enregistrement effectué";
  3957.                 $etapeProjet = new EtapeProjet;
  3958.                 
  3959.                 $form = $this->createForm(EtapeProjetType::class, $etapeProjet);
  3960.                     
  3961.                 } else {
  3962.                     $error =" Veillez corrigez vos erreurs";
  3963.                 }
  3964.         }
  3965.         return $this->render('admin/nouvelle_etape_projet.html.twig', [
  3966.            'boutique' => $boutique,
  3967.            'form' => $form->createView(),
  3968.            'userBoutique' => $userBoutique,
  3969.            'ok_soumission' => $ok_soumission,
  3970.            'error' => $error
  3971.         ]);
  3972.     }
  3973.     /**
  3974.      * @Route("/{slug}/modifier-etape-projet/{etapeProjet}", name="admin_modifier_etape_projet")
  3975.      * @return \Symfony\Component\HttpFoundation\Response
  3976.      */
  3977.     public function modifierEtapeProjetAction(Request $request, Boutique $boutique, $etapeProjet)
  3978.     {
  3979.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3980.            return $this->redirectToRoute('security_login');
  3981.         }
  3982.         $em = $this->getDoctrine()
  3983.                     ->getManager();
  3984.                     
  3985.         $user = $this->getUser();
  3986.         $userBoutique = $em->getRepository(UserBoutique::class)
  3987.                         ->findOneBy(
  3988.                             array(
  3989.                             'user' => $user->getId(),
  3990.                             'boutique' => $boutique->getId()
  3991.                             )
  3992.                         );
  3993.         $etapeProjet = $em->getRepository(EtapeProjet::class)
  3994.                     ->findOneById($etapeProjet);
  3995.         $form = $this->createForm(EtapeProjetEditType::class, $etapeProjet);
  3996.         
  3997.         $ok_soumission = '';
  3998.         $error = '';
  3999.         
  4000.         if($request->getMethod() == 'POST'){
  4001.             
  4002.                $form->handleRequest($request);
  4003.                if($form->isValid()){
  4004.                     $etapeProjet->setModifiePar($user);
  4005.                     $em->flush();
  4006.         
  4007.                 $ok_soumission =" Votre message a été pris en compte";
  4008.                     
  4009.                 } else {
  4010.                     $error =" Veillez corrigez vos erreurs";
  4011.                 }
  4012.         }
  4013.         return $this->render('admin/modifier_etape_projet.html.twig', [
  4014.            'boutique' => $boutique,
  4015.            'form' => $form->createView(),
  4016.            'userBoutique' => $userBoutique,
  4017.            'etapeProjet' => $etapeProjet
  4018.         ]);
  4019.     }
  4020.     
  4021.     /**
  4022.      * @Route("/{slug}/supprimer-etape-projet/{etapeProjet}", name="admin_supprimer_etape_projet")
  4023.      * @return \Symfony\Component\HttpFoundation\Response
  4024.      */
  4025.     public function supprimerEtapeProjetAction(Request $request, Boutique $boutique, $etapeProjet)
  4026.     {
  4027.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4028.            return $this->redirectToRoute('security_login');
  4029.         }
  4030.         $em = $this->getDoctrine()
  4031.                     ->getManager();
  4032.         $user = $this->getUser();
  4033.         $etapeProjet = $em->getRepository(EtapeProjet::class)
  4034.                     ->findOneById($etapeProjet);
  4035.                     
  4036.         if(null != $etapeProjet){
  4037.             $etapeProjet->setEstSupprime(true);
  4038.             $etapeProjet->setSupprimePar($user);
  4039.             $em->flush();
  4040.         }
  4041.         
  4042.         return $this->redirectToRoute('admin_etape_projets', array('slug' => $boutique->getSlug()));
  4043.     }
  4044.     /**
  4045.      * @Route("/{slug}/projets", name="admin_projets")
  4046.      * @return \Symfony\Component\HttpFoundation\Response
  4047.      */
  4048.     public function projetsAction(Request $request, Boutique $boutique)
  4049.     {
  4050.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4051.            return $this->redirectToRoute('security_login');
  4052.         }
  4053.         $em = $this->getDoctrine()
  4054.                     ->getManager();
  4055.         $user = $this->getUser();
  4056.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  4057.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  4058.         $dateDebut->setTime(0, 0);
  4059.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  4060.         $dateFin->setTime(23, 59);
  4061.         
  4062.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  4063.         $startMonth = $intervalleMois['debut'];
  4064.         $endMonth = $intervalleMois['fin'];
  4065.         
  4066.         $projets  = $em->getRepository(Projet::class)
  4067.                         ->projetParDate($boutique->getId(), $dateDebut, $dateFin);
  4068.         
  4069.          $userBoutique = $em->getRepository(UserBoutique::class)
  4070.                         ->findOneBy(
  4071.                             array(
  4072.                             'user' => $user->getId(),
  4073.                             'boutique' => $boutique->getId()
  4074.                             )
  4075.                         );
  4076.         if('POST' == $request->getMethod()){
  4077.             $dateDebut = $_POST['dateDebut'];
  4078.             $dateFin = $_POST['dateFin'];
  4079.             
  4080.             $dateDebut = new \DateTime($dateDebut);
  4081.             $dateDebut->setTime(0, 0);
  4082.             $dateFin = new \DateTime($dateFin);
  4083.             $dateFin->setTime(23, 59);
  4084.             
  4085.             $projets  = $em->getRepository(Projet::class)
  4086.                         ->projetParDate($boutique->getId(), $dateDebut, $dateFin);
  4087.             
  4088.             return $this->render('admin/projet_table_content.html.twig', [
  4089.                'boutique' => $boutique,
  4090.                'projets' => $projets,
  4091.                'userBoutique' => $userBoutique
  4092.             ]);
  4093.         }
  4094.         
  4095.         $startYear = date('Y-01-01');
  4096.         $endYear = date('Y-12-31');
  4097.          return $this->render('admin/projets.html.twig', [
  4098.             'boutique' => $boutique,
  4099.             'userBoutique' => $userBoutique,
  4100.             'dateDebut' => $dateDebut,
  4101.            'dateFin' => $dateFin,
  4102.            'startMonth' => $startMonth,
  4103.            'endMonth' => $endMonth,
  4104.            'startYear' => $startYear,
  4105.            'endYear' => $endYear,
  4106.            'projets' => $projets
  4107.         ]);
  4108.     }
  4109.     /**
  4110.      * @Route("/{slug}/detail-document-projet/{id}", name="admin_detail_document_projet")
  4111.      * @return \Symfony\Component\HttpFoundation\Response
  4112.      */
  4113.     public function detailDocumentProjetAction(Request $request, $slug, $id)
  4114.     {
  4115.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4116.            return $this->redirectToRoute('security_login');
  4117.         }
  4118.         $em = $this->getDoctrine()
  4119.                     ->getManager();
  4120.         $boutique = $em->getRepository(Boutique::class)
  4121.                         ->findOneBySlug($slug);
  4122.         $user = $this->getUser();
  4123.         
  4124.         $invoices = $em->getRepository(Commande::class)
  4125.                         ->findBy(
  4126.                             array(
  4127.                                 'boutique' => $boutique->getId(),
  4128.                                 'projet' => $id
  4129.                             )
  4130.                         );
  4131.         $expensives = $em->getRepository(Expensive::class)
  4132.                         ->findBy(
  4133.                             array(
  4134.                                 'boutique' => $boutique->getId(),
  4135.                                 'projet' => $id
  4136.                             )
  4137.                         );
  4138.         $userBoutique = $em->getRepository(UserBoutique::class)
  4139.                         ->findOneBy(
  4140.                             array(
  4141.                             'user' => $user->getId(),
  4142.                             'boutique' => $boutique->getId()
  4143.                             )
  4144.                         );
  4145.          return $this->render('admin/detail_document_projet.html.twig', [
  4146.             'boutique' => $boutique,
  4147.            'invoices' => $invoices,
  4148.            'expensives' => $expensives,
  4149.            'userBoutique' => $userBoutique
  4150.         ]);
  4151.     }
  4152.     /**
  4153.      * @Route("/{slug}/nouveau-projet", name="admin_nouveau_projet")
  4154.      * @return \Symfony\Component\HttpFoundation\Response
  4155.      */
  4156.     public function nouveauProjetAction(Request $request, Boutique $boutique)
  4157.     {
  4158.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4159.            return $this->redirectToRoute('security_login');
  4160.         }
  4161.         $em = $this->getDoctrine()
  4162.                     ->getManager();
  4163.         
  4164.         $projet = new Projet;
  4165.         $form = $this->createForm(ProjetType::class, $projet, array('boutique' => $boutique->getId()));
  4166.         
  4167.         $user = $this->getUser();
  4168.         $userBoutique = $em->getRepository(UserBoutique::class)
  4169.                         ->findOneBy(
  4170.                             array(
  4171.                             'user' => $user->getId(),
  4172.                             'boutique' => $boutique->getId()
  4173.                             )
  4174.                         );
  4175.         
  4176.         $ok_soumission = '';
  4177.         $error = '';
  4178.         
  4179.         if($request->getMethod() == 'POST'){
  4180.             
  4181.                $form->handleRequest($request);
  4182.                if($form->isSubmitted() && $form->isValid()){
  4183.                    $projet->setBoutique($boutique);
  4184.                    $projet->setCreePar($user);
  4185.                     $em->persist($projet);
  4186.                   $em->flush();
  4187.                 
  4188.                 $ok_soumission ="Enregistrement effectué";
  4189.                 $projet = new Projet;
  4190.                 
  4191.                 $form = $this->createForm(ProjetType::class, $projet, array('boutique' => $boutique->getId()));
  4192.                     
  4193.                 } else {
  4194.                     $error =" Veillez corrigez vos erreurs";
  4195.                 }
  4196.         }
  4197.         return $this->render('admin/nouveau_projet.html.twig', [
  4198.            'boutique' => $boutique,
  4199.            'form' => $form->createView(),
  4200.            'userBoutique' => $userBoutique,
  4201.            'ok_soumission' => $ok_soumission,
  4202.            'error' => $error
  4203.         ]);
  4204.     }
  4205.     /**
  4206.      * @Route("/{slug}/modifier-projet/{projet}", name="admin_modifier_projet")
  4207.      * @return \Symfony\Component\HttpFoundation\Response
  4208.      */
  4209.     public function modifierProjetAction(Request $request, Boutique $boutique, $projet)
  4210.     {
  4211.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4212.            return $this->redirectToRoute('security_login');
  4213.         }
  4214.         $em = $this->getDoctrine()
  4215.                     ->getManager();
  4216.                     
  4217.         $user = $this->getUser();
  4218.         $userBoutique = $em->getRepository(UserBoutique::class)
  4219.                         ->findOneBy(
  4220.                             array(
  4221.                             'user' => $user->getId(),
  4222.                             'boutique' => $boutique->getId()
  4223.                             )
  4224.                         );
  4225.         $projet = $em->getRepository(Projet::class)
  4226.                     ->findOneById($projet);
  4227.         $form = $this->createForm(ProjetEditType::class, $projet, array('boutique' => $boutique->getId()));
  4228.         
  4229.         $ok_soumission = '';
  4230.         $error = '';
  4231.         
  4232.         if($request->getMethod() == 'POST'){
  4233.             
  4234.                $form->handleRequest($request);
  4235.                if($form->isValid()){
  4236.                     $projet->setModifiePar($user);
  4237.                     $em->flush();
  4238.         
  4239.                 $ok_soumission =" Votre message a été pris en compte";
  4240.                     
  4241.                 } else {
  4242.                     $error =" Veillez corrigez vos erreurs";
  4243.                 }
  4244.         }
  4245.         return $this->render('admin/modifier_projet.html.twig', [
  4246.            'boutique' => $boutique,
  4247.            'form' => $form->createView(),
  4248.            'userBoutique' => $userBoutique,
  4249.            'projet' => $projet
  4250.         ]);
  4251.     }
  4252.     
  4253.     /**
  4254.      * @Route("/{slug}/supprimer-projet/{projet}", name="admin_supprimer_projet")
  4255.      * @return \Symfony\Component\HttpFoundation\Response
  4256.      */
  4257.     public function supprimerProjetAction(Request $request, Boutique $boutique, $projet)
  4258.     {
  4259.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4260.            return $this->redirectToRoute('security_login');
  4261.         }
  4262.         $em = $this->getDoctrine()
  4263.                     ->getManager();
  4264.         $user = $this->getUser();
  4265.         $projet = $em->getRepository(Projet::class)
  4266.                     ->findOneById($projet);
  4267.                     
  4268.         if(null != $projet){
  4269.             $projet->setEstSupprime(true);
  4270.             $projet->setSupprimePar($user);
  4271.             $em->flush();
  4272.         }
  4273.         
  4274.         return $this->redirectToRoute('admin_projets', array('slug' => $boutique->getSlug()));
  4275.     }
  4276.     
  4277.     /**
  4278.      * @Route("/{slug}/new-payment/{id}", name="admin.new_payment")
  4279.      * @return \Symfony\Component\HttpFoundation\Response
  4280.      */
  4281.     public function newPaymentAction(Request $request,  $slug, $id)
  4282.     {
  4283.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4284.            return $this->redirectToRoute('security_login');
  4285.         }      
  4286.         $em = $this->getDoctrine()
  4287.                     ->getManager();
  4288.         
  4289.         $boutique = $em->getRepository(Boutique::class)
  4290.                     ->findOneBySlug($slug);
  4291.             
  4292.         $commande = $em->getRepository(Commande::class)
  4293.                     ->findOneBy(
  4294.                         array(
  4295.                             'boutique' => $boutique->getId(),
  4296.                             'id' => $id
  4297.                         )
  4298.                     );
  4299.         $factures = $em->getRepository(Commande::class)
  4300.                     ->facturesPourVersement($boutique->getId());
  4301.         
  4302.         $user = $this->getUser();        
  4303.         $userBoutique = $em->getRepository(UserBoutique::class)
  4304.                         ->findOneBy(
  4305.                             array(
  4306.                             'user' => $user->getId(),
  4307.                             'boutique' => $boutique->getId()
  4308.                             )
  4309.                         );
  4310.         $paymentMethods = $em->getRepository(PaymentMethod::class)
  4311.                     ->findBy(
  4312.                         array(
  4313.                             'boutique' => $boutique->getId()
  4314.                         )
  4315.                     );
  4316.                     
  4317.         $ok_soumission = '';
  4318.         $error = '';
  4319.             
  4320.             
  4321.        return $this->render('admin/new_payment.html.twig', [
  4322.            'boutique' => $boutique,
  4323.            'commande' => $commande,
  4324.            'paymentMethods' => $paymentMethods,
  4325.            'factures' => $factures,
  4326.            'userBoutique' => $userBoutique
  4327.         ]);
  4328.     
  4329.    }
  4330.    /**
  4331.      * @Route("/{slug}/make-payment/{id}", name="admin_make_payment")
  4332.      * @return \Symfony\Component\HttpFoundation\Response
  4333.      */
  4334.     public function makePaymentAction(Request $request,  $slug, $id = 0)
  4335.     {
  4336.         /*
  4337.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4338.            return $this->redirectToRoute('security_login');
  4339.         }      
  4340.         */
  4341.         $em = $this->getDoctrine()
  4342.                     ->getManager();
  4343.         
  4344.         $boutique = $em->getRepository(Boutique::class)
  4345.                     ->findOneBySlug($slug);
  4346.         
  4347.         $commande = $em->getRepository(Commande::class)
  4348.                     ->findOneBy(
  4349.                         array(
  4350.                             'boutique' => $boutique->getId(),
  4351.                             'id' => $id
  4352.                         )
  4353.                     );
  4354.         $factures = $em->getRepository(Commande::class)
  4355.                     ->facturesPourVersement($boutique->getId());
  4356.         
  4357.         $user = $this->getUser();
  4358.         
  4359.         
  4360.         $userBoutique = $em->getRepository(UserBoutique::class)
  4361.                         ->findOneBy(
  4362.                             array(
  4363.                             'user' => $user->getId(),
  4364.                             'boutique' => $boutique->getId()
  4365.                             )
  4366.                         );
  4367.         $paymentMethods = $em->getRepository(PaymentMethod::class)
  4368.                     ->findBy(
  4369.                         array(
  4370.                             'boutique' => $boutique->getId()
  4371.                         )
  4372.                     );
  4373.                     
  4374.         $ok_soumission = '';
  4375.         $error = '';
  4376.         
  4377.         
  4378.             $laDate = $request->request->get('laDate'); 
  4379.             $frais = (float)$request->request->get('frais');
  4380.             $paymentMethod = $request->request->get('paymentMethod');
  4381.             $montant = (float)$request->request->get('montant');
  4382.             $referencePaiement = $request->request->get('referencePaiement');
  4383.             $commande = $request->request->get('facture');
  4384.             
  4385.             $commande = $em->getRepository(Commande::class)
  4386.                             ->findOneBy(
  4387.                                 array(
  4388.                                 'boutique' =>$boutique->getId(),
  4389.                                 'id' => $commande
  4390.                                 )
  4391.                             );
  4392.             
  4393.             if((float)$commande->getResteAPayer() < $montant || $montant == 0){
  4394.                 $this->addFlash(
  4395.                     'danger',
  4396.                     'Montant invalide '. $montant
  4397.                 );
  4398.             } else{
  4399.                 $laDate = new \DateTime($laDate);
  4400.                 $payment = new Payment;
  4401.                 $payment->setLaDate($laDate);
  4402.                 $payment->setCommande($commande);
  4403.                 $payment->setBoutique($boutique);
  4404.                 $payment->setMontant($montant);
  4405.                 $payment->setReferencePaiement($referencePaiement);
  4406.                 $payment->setMoyenDePaiement($paymentMethod);
  4407.                 
  4408.                 $em->persist($payment);
  4409.                 
  4410.                 $commande->setMontantPaye($commande->getMontantPaye() + $montant);
  4411.                 $commande->setResteAPayer($commande->getResteAPayer() - $montant);
  4412.                 $em->flush();
  4413.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  4414.                     $groupeEcritureComptable = new GroupeEcritureComptable;
  4415.                     $groupeEcritureComptable->setBoutique($boutique);
  4416.                     
  4417.                     $groupeEcritureComptable->setLibelleEcriture('Règlement client');
  4418.                     $groupeEcritureComptable->setDebit($montant);
  4419.                     $groupeEcritureComptable->setCredit($montant);
  4420.                     $groupeEcritureComptable->setLaDate($payment->getLaDate());
  4421.                     $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  4422.                     $groupeEcritureComptable->setAnnee($payment->getLaDate()->format('Y'));
  4423.                     $groupeEcritureComptable->setMois($payment->getLaDate()->format('m'));
  4424.                     $em->persist($groupeEcritureComptable);
  4425.                     $em->flush();
  4426.                 if($paymentMethod == 'check' || $paymentMethod == 'transfer'){
  4427.                     //Debit
  4428.                     
  4429.                     $ecritureComptable = new EcritureComptable;
  4430.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeBanque());
  4431.                     $ecritureComptable->setBoutique($boutique);
  4432.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4433.                     
  4434.                     $ecritureComptable->setLeJournal($leJournal);
  4435.                     $compte = $em->getRepository(Compte::class)
  4436.                                 ->findOneBy(
  4437.                                     array(
  4438.                                         'numero' => '521',
  4439.                                         'boutique' => $boutique->getId()
  4440.                                     )
  4441.                                 ); //Banque
  4442.                                 
  4443.                     $compte->setSolde($compte->getSolde() + $montant);
  4444.                     $ecritureComptable->setCompte($compte);
  4445.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4446.                     $ecritureComptable->setDebit($montant);
  4447.                     $ecritureComptable->setSolde($compte->getSolde());
  4448.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4449.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4450.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4451.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4452.                     $em->persist($ecritureComptable);
  4453.                     //Credit
  4454.                     $ecritureComptable = new EcritureComptable;
  4455.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4456.                     $ecritureComptable->setBoutique($boutique);
  4457.                     
  4458.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeBanque());
  4459.                     $compte = $em->getRepository(Compte::class)
  4460.                                 ->findOneBy(
  4461.                                     array(
  4462.                                         'numero' => '411',
  4463.                                         'boutique' => $boutique->getId()
  4464.                                     )
  4465.                                 ); //Client
  4466.                                 
  4467.                     $compte->setSolde($compte->getSolde() - $montant);
  4468.                     $ecritureComptable->setCompte($compte);
  4469.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4470.                     $ecritureComptable->setCredit($montant);
  4471.                     $ecritureComptable->setSolde($compte->getSolde());
  4472.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4473.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4474.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4475.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4476.                     $em->persist($ecritureComptable);
  4477.                 }
  4478.                 if($paymentMethod == 'cash'){
  4479.                     //Débit
  4480.                     $ecritureComptable = new EcritureComptable;
  4481.                     $ecritureComptable->setBoutique($boutique);
  4482.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4483.                     $leJournal = $em->getRepository(JournalComptabilite::class)
  4484.                                     ->findOneBy(
  4485.                                         array(
  4486.                                         'boutique' => $boutique->getId(),
  4487.                                         'reference' => 'CA',
  4488.                                         'nom' => 'Caisse'
  4489.                                         )
  4490.                                     );
  4491.                     $groupeEcritureComptable->setLeJournal($leJournal);
  4492.                     $ecritureComptable->setLeJournal($leJournal);
  4493.                     $compte = $em->getRepository(Compte::class)
  4494.                                 ->findOneBy(
  4495.                                     array(
  4496.                                         'numero' => '5711',
  4497.                                         'boutique' => $boutique->getId()
  4498.                                     )
  4499.                                 ); //caisse
  4500.                                 
  4501.                     $compte->setSolde($compte->getSolde() + $montant);
  4502.                     $ecritureComptable->setCompte($compte);
  4503.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4504.                     $ecritureComptable->setDebit($montant);
  4505.                     $ecritureComptable->setSolde($compte->getSolde());
  4506.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4507.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4508.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4509.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4510.                     $em->persist($ecritureComptable);
  4511.                     //Credit
  4512.                     $ecritureComptable = new EcritureComptable;
  4513.                     $ecritureComptable->setBoutique($boutique);
  4514.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4515.                     
  4516.                     $ecritureComptable->setLeJournal($leJournal);
  4517.                     $compte = $em->getRepository(Compte::class)
  4518.                                 ->findOneBy(
  4519.                                     array(
  4520.                                         'numero' => '411',
  4521.                                         'boutique' => $boutique->getId()
  4522.                                     )
  4523.                                 ); //Client
  4524.                                 
  4525.                     $compte->setSolde($compte->getSolde() - $montant);
  4526.                     $ecritureComptable->setCompte($compte);
  4527.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4528.                     $ecritureComptable->setCredit($montant);
  4529.                     $ecritureComptable->setSolde($compte->getSolde());
  4530.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4531.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4532.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4533.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4534.                     $em->persist($ecritureComptable);
  4535.                 }
  4536.                 if($paymentMethod == 'card'){
  4537.                     $ecritureComptable = new EcritureComptable;
  4538.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4539.                     $ecritureComptable->setBoutique($boutique);
  4540.                     $leJournal = $em->getRepository(JournalComptabilite::class)
  4541.                                     ->findOneBy(
  4542.                                         array(
  4543.                                         'boutique' => $boutique->getId(),
  4544.                                         'reference' => 'BQ',
  4545.                                         'nom' => 'Banque'
  4546.                                         )
  4547.                                     );
  4548.                     $ecritureComptable->setLeJournal($leJournal);
  4549.                     $groupeEcritureComptable->setLeJournal($leJournal);
  4550.                     $compte = $em->getRepository(Compte::class)
  4551.                                 ->findOneBy(
  4552.                                     array(
  4553.                                         'numero' => '521',
  4554.                                         'boutique' => $boutique->getId()
  4555.                                     )
  4556.                                 ); //Banque 
  4557.                                 
  4558.                     $compte->setSolde($compte->getSolde() + $montant - $frais);
  4559.                     $ecritureComptable->setCompte($compte);
  4560.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4561.                     $ecritureComptable->setDebit($montant - $frais);
  4562.                     $ecritureComptable->setSolde($compte->getSolde());
  4563.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4564.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4565.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4566.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4567.                     $em->persist($ecritureComptable);
  4568.                     if($frais > 0){
  4569.                         $ecritureComptable = new EcritureComptable;
  4570.                         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4571.                         $ecritureComptable->setBoutique($boutique);
  4572.                         
  4573.                         $ecritureComptable->setLeJournal($leJournal);
  4574.                         $compte = $em->getRepository(Compte::class)
  4575.                                     ->findOneBy(
  4576.                                         array(
  4577.                                             'numero' => '6315',
  4578.                                             'boutique' => $boutique->getId()
  4579.                                         )
  4580.                                     ) //Commissions sur cartes de crédit
  4581.                                     -
  4582.                         $compte->setSolde($compte->getSolde() + $frais);
  4583.                         $ecritureComptable->setCompte($compte);
  4584.                         $ecritureComptable->setLibelleEcriture('Règlement client');
  4585.                         $ecritureComptable->setDebit($frais);
  4586.                         $ecritureComptable->setSolde($compte->getSolde());
  4587.                         $ecritureComptable->setLaDate($payment->getLaDate());
  4588.                         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4589.                         $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4590.                         $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4591.                         $em->persist($ecritureComptable);
  4592.                     }
  4593.                     //Credit
  4594.                     $ecritureComptable = new EcritureComptable;
  4595.                     $ecritureComptable->setBoutique($boutique);
  4596.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4597.                     
  4598.                     $ecritureComptable->setLeJournal($leJournal);
  4599.                     $compte = $em->getRepository(Compte::class)
  4600.                                 ->findOneBy(
  4601.                                     array(
  4602.                                         'numero' => '515',
  4603.                                         'boutique' => $boutique->getId()
  4604.                                     )
  4605.                                 ); //CARTES DE CREDIT A ENCAISSER
  4606.                             
  4607.                     $compte->setSolde($compte->getSolde() - $montant );
  4608.                     $ecritureComptable->setCompte($compte);
  4609.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4610.                     $ecritureComptable->setCredit($montant);
  4611.                     $ecritureComptable->setSolde($compte->getSolde());
  4612.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4613.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4614.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4615.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4616.                     $em->persist($ecritureComptable);
  4617.                 }
  4618.                 if($paymentMethod == 'mobile-money'){
  4619.                     $ecritureComptable = new EcritureComptable;
  4620.                     $ecritureComptable->setBoutique($boutique);
  4621.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4622.                     $leJournal = $em->getRepository(JournalComptabilite::class)
  4623.                                     ->findOneBy(
  4624.                                         array(
  4625.                                             'boutique' => $boutique->getId(),
  4626.                                         'reference' => 'CA',
  4627.                                         'nom' => 'Caisse'
  4628.                                         )
  4629.                                     );
  4630.                     $ecritureComptable->setLeJournal($leJournal);
  4631.                     $groupeEcritureComptable->setLeJournal($leJournal);
  4632.                     $compte = $em->getRepository(Compte::class)
  4633.                                 ->findOneBy(
  4634.                                     array(
  4635.                                         'numero' => '5711',
  4636.                                         'boutique' => $boutique->getId()
  4637.                                     )
  4638.                                 ); //Caisse en monnaie nationale
  4639.                                 
  4640.                     $compte->setSolde($compte->getSolde() + $montant - $frais);
  4641.                     $ecritureComptable->setCompte($compte);
  4642.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4643.                     $ecritureComptable->setDebit($montant - $frais);
  4644.                     $ecritureComptable->setSolde($compte->getSolde());
  4645.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4646.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4647.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4648.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4649.                     $em->persist($ecritureComptable);
  4650.                     if($frais > 0){
  4651.                         $ecritureComptable = new EcritureComptable;
  4652.                         $ecritureComptable->setBoutique($boutique);
  4653.                         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4654.                         
  4655.                         $ecritureComptable->setLeJournal($leJournal);
  4656.                         $compte = $em->getRepository(Compte::class)
  4657.                                     ->findOneBy(
  4658.                                         array(
  4659.                                             'numero' => '6317',
  4660.                                             'boutique' => $boutique->getId()
  4661.                                         )
  4662.                                     ); //Frais sur instruments monnaie électronique
  4663.                                     
  4664.                         $compte->setSolde($compte->getSolde() + $frais);
  4665.                         $ecritureComptable->setCompte($compte);
  4666.                         $ecritureComptable->setLibelleEcriture('Règlement client');
  4667.                         $ecritureComptable->setDebit($frais);
  4668.                         $ecritureComptable->setSolde($compte->getSolde());
  4669.                         $ecritureComptable->setLaDate($payment->getLaDate());
  4670.                         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4671.                         $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4672.                         $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4673.                         $em->persist($ecritureComptable);
  4674.                     }
  4675.                     //Credit
  4676.                     $ecritureComptable = new EcritureComptable;
  4677.                     $ecritureComptable->setBoutique($boutique);
  4678.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4679.                     
  4680.                     $ecritureComptable->setLeJournal($leJournal);
  4681.                     $compte = $em->getRepository(Compte::class)
  4682.                                 ->findOneBy(
  4683.                                     array(
  4684.                                         'numero' => '554',
  4685.                                         'boutique' => $boutique->getId()
  4686.                                     )
  4687.                                 ); //PORTE-MONNAIE ELECTRONIQUE
  4688.                                 
  4689.                     $compte->setSolde($compte->getSolde() - $montant);
  4690.                     $ecritureComptable->setCompte($compte);
  4691.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4692.                     $ecritureComptable->setCredit($montant);
  4693.                     $ecritureComptable->setSolde($compte->getSolde());
  4694.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4695.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4696.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4697.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4698.                     $em->persist($ecritureComptable);
  4699.                 }
  4700.                 } //Fin condition ecriture comptable automatique
  4701.                 $em->flush();
  4702.                  $this->addFlash(
  4703.                         'success',
  4704.                         'Enregistrement effectué'
  4705.                     );
  4706.             }
  4707.         
  4708.         
  4709.        return $this->render('admin/new_payment.html.twig', [
  4710.            'boutique' => $boutique,
  4711.            'commande' => $commande,
  4712.            'paymentMethods' => $paymentMethods,
  4713.            'factures' => $factures,
  4714.            'userBoutique' => $userBoutique
  4715.         ]);
  4716.     
  4717.    }
  4718.     
  4719.     
  4720.     
  4721.     //bill_credit
  4722.     /**
  4723.      * @Route("/{slug}/bill-credits", name="admin.bill_credits")
  4724.      * @return \Symfony\Component\HttpFoundation\Response
  4725.      */
  4726.     public function billCreditsAction( Request $request, Boutique $boutique)
  4727.     {
  4728.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4729.            return $this->redirectToRoute('security_login');
  4730.         }      
  4731.         $em = $this->getDoctrine()
  4732.                     ->getManager();
  4733.     
  4734.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  4735.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  4736.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  4737.         
  4738.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  4739.         $startMonth = $intervalleMois['debut'];
  4740.         $endMonth = $intervalleMois['fin'];
  4741.         
  4742.         $billCredits  = $em->getRepository(Commande::class)
  4743.                         ->commandeParDateEtType($boutique->getId(), 'bill_credit', $dateDebut, $dateFin);
  4744.         
  4745.         $startYear = date('Y-01-01');
  4746.         $endYear = date('Y-12-31');
  4747.         $user = $this->getUser();
  4748.         $userBoutique = $em->getRepository(UserBoutique::class)
  4749.                         ->findOneBy(
  4750.                             array(
  4751.                             'user' => $user->getId(),
  4752.                             'boutique' => $boutique->getId()
  4753.                             )
  4754.                         );
  4755.         if('POST' == $request->getMethod()){
  4756.             $dateDebut = $_POST['dateDebut'];
  4757.             $dateFin = $_POST['dateFin'];
  4758.             
  4759.             $dateDebut = new \DateTime($dateDebut);
  4760.             $dateFin = new \DateTime($dateFin);
  4761.             
  4762.             $billCredits  = $em->getRepository(Commande::class)
  4763.                         ->commandeParDateEtType($boutique->getId(), 'bill_credit', $dateDebut, $dateFin);
  4764.             
  4765.             
  4766.             return $this->render('admin/bill_credits_table_content.html.twig', [
  4767.                'boutique' => $boutique,
  4768.                'billCredits' => $billCredits,
  4769.                'userBoutique' => $userBoutique
  4770.             ]);
  4771.             
  4772.         }
  4773.     
  4774.     
  4775.         return $this->render('admin/bill_credits.html.twig', [
  4776.            'boutique' => $boutique,
  4777.            'billCredits' => $billCredits,
  4778.            'dateDebut' => $dateDebut,
  4779.            'dateFin' => $dateFin,
  4780.            'startMonth' => $startMonth,
  4781.            'endMonth' => $endMonth,
  4782.            'startYear' => $startYear,
  4783.            'endYear' => $endYear,
  4784.            'userBoutique' => $userBoutique
  4785.         ]);
  4786.     }
  4787.     
  4788.     //Sales
  4789.     /**
  4790.      * @Route("/{slug}/proposals/new", name="admin.new_proposal")
  4791.      * @return \Symfony\Component\HttpFoundation\Response
  4792.      */
  4793.     public function newProposalsAction( Request $request, Boutique $boutique)
  4794.     {
  4795.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4796.            return $this->redirectToRoute('security_login');
  4797.         }  
  4798.         $em = $this->getDoctrine()
  4799.                     ->getManager();
  4800.         
  4801.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  4802.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  4803.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  4804.         
  4805.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  4806.         $startMonth = $intervalleMois['debut'];
  4807.         $endMonth = $intervalleMois['fin'];
  4808.         
  4809.         $proposals  = $em->getRepository(Commande::class)
  4810.                         ->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
  4811.         
  4812.         $startYear = date('Y-01-01');
  4813.         $endYear = date('Y-12-31');
  4814.         $user = $this->getUser();
  4815.         $userBoutique = $em->getRepository(UserBoutique::class)
  4816.                         ->findOneBy(
  4817.                             array(
  4818.                             'user' => $user->getId(),
  4819.                             'boutique' => $boutique->getId()
  4820.                             )
  4821.                         );
  4822.         if('POST' == $request->getMethod()){
  4823.             $dateDebut = $_POST['dateDebut'];
  4824.             $dateFin = $_POST['dateFin'];
  4825.             
  4826.             $dateDebut = new \DateTime($dateDebut);
  4827.             $dateFin = new \DateTime($dateFin);
  4828.             
  4829.             $proposals  = $em->getRepository(Commande::class)
  4830.                         ->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
  4831.             
  4832.             
  4833.             return $this->render('admin/proposals_table_content.html.twig', [
  4834.                'boutique' => $boutique,
  4835.                'proposals' => $proposals
  4836.             ]);
  4837.             
  4838.         }
  4839.     
  4840.         return $this->render('admin/nouvelle_commande.html.twig', [
  4841.            'boutique' => $boutique,
  4842.            'proposals' => $proposals,
  4843.            'dateDebut' => $dateDebut,
  4844.            'dateFin' => $dateFin,
  4845.            'startMonth' => $startMonth,
  4846.            'endMonth' => $endMonth,
  4847.            'startYear' => $startYear,
  4848.            'endYear' => $endYear,
  4849.            'userBoutique' => $userBoutique
  4850.         ]);
  4851.     }
  4852.     
  4853.     //Sales
  4854.     /**
  4855.      * @Route("/{slug}/sales", name="admin.sales")
  4856.      * @return \Symfony\Component\HttpFoundation\Response
  4857.      */
  4858.     public function salesAction( Request $request, ChiffreEnLettre $chiffreEnLettre, Boutique $boutique, $type = 'Invoice')
  4859.     {
  4860.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4861.            return $this->redirectToRoute('security_login');
  4862.         }      
  4863.         $em = $this->getDoctrine()
  4864.                     ->getManager();
  4865.         $produits  = $em->getRepository(Produit::class)
  4866.                         ->findByBoutique($boutique);
  4867.         $modeleReglements = $em->getRepository(ModeleReglement::class)
  4868.                                 ->findByBoutique($boutique);        
  4869.         $tiers = $em->getRepository(Tiers::class)
  4870.                                 ->findByBoutique($boutique);        
  4871.         
  4872.         $user = $this->getUser();
  4873.     
  4874.         $ok_soumission = '';
  4875.         $error = '';
  4876.         
  4877.         
  4878.         if($request->getMethod() == 'POST'){
  4879.             $typeFacture = $_POST['typeFacture'];
  4880.             $modeleReglement = $_POST['modeleReglement'];
  4881.             $client = $_POST['client'];
  4882.             $dateCommande = $_POST['dateCommande'];
  4883.             $montantHT = $_POST['montantHT'];
  4884.             $montantTVA = $_POST['montantTVA'];
  4885.             $montantTTC = $_POST['montantTTC'];
  4886.             $listeProduits = json_decode($_POST['listeProduits']);
  4887.             
  4888.             $commande = new Commande;
  4889.             $commande->setBoutique($boutique);
  4890.             $client = $em->getRepository(Tiers::class)
  4891.                         ->findOneById($client);
  4892.             if(null !== $client){
  4893.                 
  4894.                 $commande->setTiers($client);
  4895.             }
  4896.             
  4897.             $laDate = new \DateTime($dateCommande);
  4898.             $commande->setLaDate($laDate);
  4899.             $commande->setTotalHT($montantHT);
  4900.             $commande->setTotalTVA($montantTVA);
  4901.             $commande->setTotalTTC($montantTTC);
  4902.             $montantlettre = strtoupper($chiffreEnLettre->Conversion($montantTTC));
  4903.             $commande->setMontantEnLettre($montantlettre);
  4904.             $commande->setTypeFacture($typeFacture);
  4905.             $em->persist($commande);
  4906.             $em->flush();
  4907.             $produitCommandes = array();
  4908.             foreach($listeProduits as $listeProduit){
  4909.                 $listeProduit = (array)$listeProduit;
  4910.                 $leProduit = $em->getRepository(Produit::class)->findOneById($listeProduit['idProduit']);
  4911.                 
  4912.                 $produitCommande = new ProduitCommande;
  4913.                 $produitCommande->setProduit($leProduit);
  4914.                 $produitCommande->setCommande($commande);
  4915.                 $produitCommande->setQuantite($listeProduit['quantite']);
  4916.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  4917.                 $produitCommande->setRemise($listeProduit['reduction']);
  4918.                 $produitCommande->setTotalHT($listeProduit['totalHT']);
  4919.                 $produitCommande->setTotalTVA($listeProduit['totalTVA']);
  4920.                 $produitCommande->setTotalTTC($listeProduit['totalTTC']);
  4921.                 $em->persist($produitCommande);
  4922.                 array_push($produitCommandes, $produitCommande);
  4923.                 
  4924.             }
  4925.             $em->flush();
  4926.             return $this->render('admin/facture.html.twig', [
  4927.                    'boutique' => $boutique,
  4928.                    'commande' => $commande,
  4929.                    'typeFacture' => $typeFacture,
  4930.                    'client' => $client,
  4931.                    'produitCommandes' => $produitCommandes,
  4932.                    'listeProduit' => $listeProduit,
  4933.                    'montantHT' => $montantHT,
  4934.                    'montantTVA' => $montantTVA,
  4935.                    'montantTTC' => $montantTTC,
  4936.                    'userBoutique' => $userBoutique
  4937.                 ]);
  4938.             
  4939.             
  4940.         }
  4941.     
  4942.         return $this->render('admin/nouvelle_commande.html.twig', [
  4943.            'boutique' => $boutique,
  4944.            'produits' => $produits,
  4945.            'modeleReglements' => $modeleReglements,
  4946.            'tiers' => $tiers,
  4947.            'userBoutique' => $userBoutique
  4948.         ]);
  4949.     }
  4950.     
  4951.     //Vente
  4952.     /**
  4953.      * @Route("/{slug}/new-sale/{type}", name="admin.new_sale")
  4954.      * @return \Symfony\Component\HttpFoundation\Response
  4955.      */
  4956.     public function newSaleAction( Request $request, ChiffreEnLettre $chiffreEnLettre, Boutique $boutique, $type = 'invoice')
  4957.     {
  4958.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4959.            return $this->redirectToRoute('security_login');
  4960.         }      
  4961.         $em = $this->getDoctrine()
  4962.                     ->getManager();
  4963.         $magasins = $em->getRepository(Magasin::class)
  4964.                 ->findBy(
  4965.                     array(
  4966.                         'boutique' => $boutique,
  4967.                         'estSupprime' => false
  4968.                     )
  4969.                 );
  4970.         $projets = $em->getRepository(Projet::class)
  4971.                 ->findBy(
  4972.                     array(
  4973.                         'boutique' => $boutique,
  4974.                         'estSupprime' => false,
  4975.                         'boucle' => false
  4976.                     )
  4977.                 );
  4978.         $produits  = $em->getRepository(Produit::class)
  4979.                         ->findByBoutique($boutique);
  4980.         $modeleReglements = $em->getRepository(ModeleReglement::class)
  4981.                                 ->findByBoutique($boutique);        
  4982.         $tiers = $em->getRepository(Tiers::class)
  4983.                                 ->findByBoutique($boutique);        
  4984.         
  4985.         $user = $this->getUser();
  4986.         $vehicules = array( 22, 23, 28);
  4987.         
  4988.         $userBoutique = $em->getRepository(UserBoutique::class)
  4989.                         ->findOneBy(
  4990.                             array(
  4991.                             'user' => $user->getId(),
  4992.                             'boutique' => $boutique->getId()
  4993.                             )
  4994.                         );
  4995.     
  4996.         $ok_soumission = '';
  4997.         $error = '';
  4998.         
  4999.         $editMode = 'new';
  5000.         $responseFNE = '';
  5001.         $natureFacture = '';
  5002.         if($request->getMethod() == 'POST'){
  5003.             $magasin =  $_POST['magasin'];
  5004.             $magasin = $em->getRepository(Magasin::class)
  5005.                         ->findOneById($magasin);
  5006.             $projet =  $_POST['projet'];
  5007.             $typeFacture = $_POST['typeFacture'];
  5008.             $modeleReglement = $_POST['modeleReglement'];
  5009.             $client = $_POST['client'];
  5010.             $moyenDePaiement = $_POST['moyenDePaiement'];
  5011.             $clientFinalNom = $_POST['clientFinalNom'];
  5012.             $clientFinalNumero = $_POST['clientFinalNumero'];
  5013.             $dateCommande = $_POST['dateCommande'];
  5014.             $montantHT = (float)$_POST['montantHT'];
  5015.             $remise =   (float)$_POST['remise'];
  5016.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  5017.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  5018.             $montantTVA = (float)$_POST['montantTVA'];
  5019.             $montantTTC = (float)$_POST['montantTTC'];
  5020.             $titreDocument = $_POST['titreDocument'];
  5021.             $valableJusquAu = $_POST['valableJusquAu'];
  5022.             $observation = $_POST['observation'];
  5023.             $matriculeVehicule = $_POST['matriculeVehicule'];
  5024.             $marqueVehicule = $_POST['marqueVehicule'];
  5025.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  5026.             $listeProduits = json_decode($_POST['listeProduits']);
  5027.             $natureFacture = $_POST['natureFacture'];
  5028.             
  5029.             $commande = new Commande;
  5030.             $projet = $em->getRepository(Projet::class)
  5031.                         ->findOneById($projet);
  5032.             
  5033.             $commande->setProjet($projet);
  5034.             $commande->setNatureFacture($natureFacture);
  5035.             $commande->setClientFinalNom($clientFinalNom);
  5036.             $commande->setClientFinalNumero($clientFinalNumero);
  5037.             $commande->setCreePar($user);
  5038.             $commande->setBoutique($boutique);
  5039.             $client = $em->getRepository(Tiers::class)
  5040.                         ->findOneById($client);
  5041.             if(null !== $client){
  5042.                 
  5043.                 $commande->setTiers($client);
  5044.             }
  5045.             
  5046.             $laDate = new \DateTime($dateCommande);
  5047.             $commande->setLaDate($laDate);
  5048.             $commande->setMoyenDePaiement($moyenDePaiement);
  5049.             $commande->setMatriculeVehicule($matriculeVehicule);
  5050.             $commande->setMarqueVehicule($marqueVehicule);
  5051.             $commande->setKilometrageVehicule($kilometrageVehicule);
  5052.             
  5053.             $commande->setTotalHT($montantHT);
  5054.             $commande->setRemise($remise);
  5055.             $commande->setRemisePourcentage($remisePourcentage);
  5056.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  5057.             if($commande->getNatureFacture() == 'purchase'){
  5058.                 $commande->setTotalTVA(0);
  5059.                 $commande->setTotalTTC($totalHTApresRemise);
  5060.                 $commande->setResteAPayer($totalHTApresRemise);
  5061.             }else{
  5062.                 $commande->setTotalTVA($montantTVA);
  5063.                 $commande->setTotalTTC($montantTTC);
  5064.                 $commande->setResteAPayer($montantTTC);
  5065.             }
  5066.             $commande->setTitreDocument($titreDocument);
  5067.             $commande->setObservation($observation);
  5068.             if($valableJusquAu != ''){
  5069.                 $commande->setValableJusquAu(new \DateTime($valableJusquAu));
  5070.             }
  5071.             $montantlettre = strtoupper($chiffreEnLettre->Conversion($commande->getTotalTTC()));
  5072.             $commande->setMontantEnLettre($montantlettre);
  5073.             $commande->setTypeFacture($type);
  5074.             
  5075.             if($commande->getNumero() == ''){
  5076.                 $commande->setNumero($this->getNumero($type, $boutique));
  5077.             }
  5078.             
  5079.             $em->persist($commande);
  5080.             $em->flush();
  5081.             
  5082.             $produitCommandes = array();
  5083.             $produitsPourFactures = array();
  5084.             $coutDeRevientCommande = 0;
  5085.             $tourSurLaGestionDuStock = 0;
  5086.             
  5087.             $mouvementDeStock = new MouvementDeStock;
  5088.             $mouvementDeStock->setTypeMouvement(MouvementDeStock::TYPE_MOUVEMENT_SORTIE);
  5089.             $mouvementDeStock->setBoutique($boutique);
  5090.             $mouvementDeStock->setCommande($commande);
  5091.             $mouvementDeStock->setMagasin($magasin);
  5092.             $em->persist($mouvementDeStock);
  5093.                         
  5094.             foreach($listeProduits as $listeProduit){
  5095.                 $tourSurLaGestionDuStock++;
  5096.                 $listeProduit = (array)$listeProduit;
  5097.                 $idDuProduit = $listeProduit['idProduit'];
  5098.                 
  5099.                 if($idDuProduit == ''){
  5100.                     //Produit inexistant, il faut le créer
  5101.                     $leProduit = new Produit;
  5102.                     $leProduit->setNom($listeProduit['nomProduit']);
  5103.                     $em->persist($leProduit);
  5104.                     $em->flush();
  5105.                     $stock = new Stock;
  5106.                     $stock->setProduit($leProduit);
  5107.                     $stock->setBoutique($boutique);
  5108.                     $stock->setMagasin($magasin);
  5109.                     $stock->setStockDisponible((float)$listeProduit['quantite']);
  5110.                     $em->persist($stock);
  5111.                     
  5112.                     //TVA
  5113.                     if($listeProduit['tva'] > 0){
  5114.                         $tva = $em->getRepository(TVA::class)
  5115.                                     ->findOneBy(
  5116.                                         array(
  5117.                                             'boutique' => $boutique->getId(),
  5118.                                             'valeur'  => $listeProduit['tva']
  5119.                                         )
  5120.                                     );
  5121.                         if($tva == null){
  5122.                             $tva = new TVA;
  5123.                             $tva->setValeur($listeProduit['tva']);
  5124.                             $em->persist($tva);
  5125.                             $em->flush();
  5126.                         }
  5127.                         
  5128.                         $leProduit->setTva($tva);
  5129.                         
  5130.                     }else{
  5131.                         $tva = $em->getRepository(TVA::class)
  5132.                                     ->findOneBy(
  5133.                                         array(
  5134.                                             'boutique' => $boutique->getId(),
  5135.                                             'estPrincipale'  => true
  5136.                                         )
  5137.                                     );
  5138.                         $leProduit->setTva($tva);
  5139.                     }
  5140.                     //Prix
  5141.                     $produitP = new PrixProduit;
  5142.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  5143.                     $leProduit->addPrix($produitP);
  5144.                     $leProduit->setPrixActuel($produitP);
  5145.                     $leProduit->setBoutique($boutique);
  5146.                     $em->persist($produitP);
  5147.                     $em->persist($leProduit);
  5148.                     $em->flush();
  5149.                     
  5150.                 } else{
  5151.                     $leProduit = $em->getRepository(Produit::class)
  5152.                         ->findOneById($idDuProduit);
  5153.                 }
  5154.                 
  5155.                 
  5156.                 $produitCommande = new ProduitCommande;
  5157.                 $produitCommande->setProduit($leProduit);
  5158.                 $produitCommande->setCommande($commande);
  5159.                 $quantite = (float)$listeProduit['quantite'];
  5160.                 $produitCommande->setQuantite($quantite);
  5161.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  5162.                 $prixDeRevient = (float)$listeProduit['prixDeRevient'];
  5163.                 $produitCommande->setCoutDeRevient($prixDeRevient);
  5164.                 $totalCoutDeRevient = $prixDeRevient * $quantite;
  5165.                 $produitCommande->setTotalCoutDeRevient($totalCoutDeRevient);
  5166.                 $coutDeRevientCommande += $totalCoutDeRevient;
  5167.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  5168.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  5169.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  5170.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  5171.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  5172.                 
  5173.                 $produitCommande->setTva((float)$listeProduit['tva']);
  5174.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  5175.                 //Gestion des mouvements de stock
  5176.                 
  5177.                 if($leProduit->isGereLeStock()){
  5178.                 
  5179.                     if($type == 'invoice'){
  5180.                         
  5181.                         if($tourSurLaGestionDuStock == 1){
  5182.                             //$em->persist($mouvementDeStock);
  5183.                             $em->flush();
  5184.                         }
  5185.                         $leProduit->setStockDisponible($leProduit->getStockDisponible() - $produitCommande->getQuantite());    
  5186.                         $mouvementDeStockProduit = new MouvementDeStockProduit;
  5187.                         $mouvementDeStockProduit->setQuantite($produitCommande->getQuantite());
  5188.                         $mouvementDeStockProduit->setPrix($produitCommande->getPrix());
  5189.                         $mouvementDeStockProduit->setBoutique($boutique);
  5190.                         $mouvementDeStockProduit->setMouvementDeStock($mouvementDeStock);
  5191.                         $mouvementDeStockProduit->setProduit($leProduit);
  5192.                         $em->persist($mouvementDeStockProduit);
  5193.                         //Magasin
  5194.                         $stock = $em->getRepository(Stock::class)
  5195.                                 ->findOneBy(
  5196.                                     array(
  5197.                                         'boutique' => $boutique->getId(),
  5198.                                         'magasin' => $magasin->getId(),
  5199.                                         'produit' => $leProduit->getId()
  5200.                                     )
  5201.                                 );
  5202.                         if($stock !== null){
  5203.                             $stock->setQuantite($stock->getQuantite() - $produitCommande->getQuantite());
  5204.                             $mouvementDeStockProduit->setSoldeQuantite($stock->getQuantite());
  5205.                         }
  5206.                     }
  5207.                 } //Fin gestion de stock
  5208.                 $em->persist($produitCommande);
  5209.                 array_push($produitCommandes, $produitCommande);
  5210.                 $nom = $produitCommande->getProduit()->getNom();
  5211.                     if(mb_strtoupper($nom, 'UTF-8') === $nom){
  5212.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 60, "<br/>", true);
  5213.                     }else{
  5214.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 90, "<br/>", true);
  5215.                     }
  5216.                 $produitsPourFacture = array(
  5217.                     'nom' => $nom,
  5218.                     'quantite' =>$produitCommande->getQuantite(),
  5219.                     'prix' => $produitCommande->getPrix(),
  5220.                     'remise' => $produitCommande->getRemise(),
  5221.                     'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  5222.                 );
  5223.                 array_push($produitsPourFactures, $produitsPourFacture);
  5224.                 
  5225.             } // Fin foreach($listeProduits as $listeProduit)
  5226.              
  5227.             $commande->setCoutDeRevient($coutDeRevientCommande);
  5228.             $em->flush();
  5229.             
  5230.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  5231.             $content = '';
  5232.             //Tous les documents sont désormais générés au même endroit
  5233.             $content = $this->renderView('pdf/facture.html.twig', [
  5234.                         'boutique' => $boutique,
  5235.                         'facture' => $commande,
  5236.                         'produits' => $produitsPourFactures,
  5237.                         'natureFacture' => $natureFacture,
  5238.                         'vehicules' => $vehicules
  5239.                     ]);
  5240.             switch($type){
  5241.                 case 'invoice':
  5242.                     //Facture FNE qui
  5243.                     
  5244.                     if($boutique->getApiKeyFNE() != ''){
  5245.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  5246.                             $responseFNE = $this->genererFactureFNE($boutique->getSlug(), $commande->getId(), $natureFacture);
  5247.                         }
  5248.                     
  5249.                     }
  5250.                     $commande->setEtat(Commande::ETAT_FACTURE_PROVISOIRE);
  5251.                         
  5252.                     if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  5253.                         $this->genererEcritureComptableDeVente($boutique, $commande);
  5254.                         //Ecriture comptable
  5255.                     }
  5256.                     $em->flush();
  5257.                     
  5258.                 break;
  5259.                 
  5260.                 case 'proposal':
  5261.                     $commande->setEtat(Commande::ETAT_DEVIS_PROVISOIRE);
  5262.                     
  5263.                 break;
  5264.                 
  5265.                 
  5266.                 case 'bill_credit':
  5267.                     
  5268.                 break;
  5269.             }
  5270.             
  5271.             
  5272.             $pdf->writeHTML($content);
  5273.             $name = $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
  5274.             $lienPhysique = $commande->getUploadRootDir().$name;
  5275.                 
  5276.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  5277.             $pdf->output($lienPhysique, 'F');
  5278.             
  5279.             $em->flush();
  5280.             
  5281.             return $this->render('admin/response_new_sale.html.twig', [
  5282.                    'boutique' => $boutique,
  5283.                    'commande' => $commande,
  5284.                    'responseFNE' => $responseFNE,
  5285.                    'vehicules' => $vehicules
  5286.                    
  5287.                 ]);
  5288.             
  5289.             
  5290.             /*
  5291.             return $this->render('admin/facture.html.twig', [
  5292.                    'boutique' => $boutique,
  5293.                    'commande' => $commande,
  5294.                    'typeFacture' => $typeFacture,
  5295.                    'client' => $client,
  5296.                    'produitCommandes' => $produitCommandes,
  5297.                    'listeProduit' => $listeProduit,
  5298.                    'montantHT' => $montantHT,
  5299.                    'montantTVA' => $montantTVA,
  5300.                    'montantTTC' => $montantTTC,
  5301.                    'userBoutique' => $userBoutique
  5302.                 ]);
  5303.             */
  5304.             
  5305.         }
  5306.     
  5307.         return $this->render('admin/nouvelle_commande.html.twig', [
  5308.            'boutique' => $boutique,
  5309.            'produits' => $produits,
  5310.            'modeleReglements' => $modeleReglements,
  5311.            'tiers' => $tiers,
  5312.            'editMode' => $editMode,
  5313.            'userBoutique' => $userBoutique,
  5314.            'responseFNE' => $responseFNE,
  5315.            'type' => $type,
  5316.            'vehicules' => $vehicules,
  5317.            'projets' => $projets,
  5318.            'magasins' => $magasins
  5319.           
  5320.         ]);
  5321.     }
  5322.     //Vente
  5323.     /**
  5324.      * @Route("/{slug}/marque-tout-paye", name="admin_marque_tout_paye")
  5325.      * @return \Symfony\Component\HttpFoundation\Response
  5326.      */
  5327.     public function marquerToutPayeAction( Request $request, Boutique $boutique)
  5328.     {
  5329.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5330.            return $this->redirectToRoute('security_login');
  5331.         }      
  5332.         
  5333.         $em = $this->getDoctrine()
  5334.                     ->getManager();
  5335.         $user = $this->getUser();
  5336.         $commandes = $em->getRepository(Commande::class)
  5337.                         ->findBy(
  5338.                             array(
  5339.                                 'typeFacture' => 'invoice',
  5340.                                 'boutique' => $boutique
  5341.                             )
  5342.                         );
  5343.         foreach($commandes as $commande){
  5344.             
  5345.                 $montant = $commande->getTotalTTC();
  5346.                 
  5347.                 $payment = new Payment;
  5348.                 $payment->setLaDate($commande->getLaDate());
  5349.                 $payment->setCommande($commande);
  5350.                 $payment->setBoutique($boutique);
  5351.                 $payment->setMontant($montant);
  5352.                 $payment->setReferencePaiement($commande->getId());
  5353.                 $payment->setMoyenDePaiement('cash');
  5354.                 
  5355.                 $em->persist($payment);
  5356.                 
  5357.                 $commande->setMontantPaye($montant);
  5358.                 $commande->setResteAPayer(0);
  5359.                 $em->flush();
  5360.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  5361.                     $groupeEcritureComptable = new GroupeEcritureComptable;
  5362.                     $groupeEcritureComptable->setBoutique($boutique);
  5363.                     
  5364.                     $groupeEcritureComptable->setLibelleEcriture('Règlement client');
  5365.                     $groupeEcritureComptable->setDebit($commande->getResteAPayer());
  5366.                     $groupeEcritureComptable->setCredit($commande->getResteAPayer());
  5367.                     $groupeEcritureComptable->setLaDate($payment->getLaDate());
  5368.                     $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  5369.                     $groupeEcritureComptable->setAnnee($payment->getLaDate()->format('Y'));
  5370.                     $groupeEcritureComptable->setMois($payment->getLaDate()->format('m'));
  5371.                     $em->persist($groupeEcritureComptable);
  5372.                     $em->flush();
  5373.                     //Débit
  5374.                     $ecritureComptable = new EcritureComptable;
  5375.                     $ecritureComptable->setBoutique($boutique);
  5376.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  5377.                     $leJournal = $em->getRepository(JournalComptabilite::class)
  5378.                                     ->findOneBy(
  5379.                                         array(
  5380.                                         'boutique' => $boutique->getId(),
  5381.                                         'reference' => 'CA',
  5382.                                         'nom' => 'Caisse'
  5383.                                         )
  5384.                                     );
  5385.                     $groupeEcritureComptable->setLeJournal($leJournal);
  5386.                     $ecritureComptable->setLeJournal($leJournal);
  5387.                     $compte = $em->getRepository(Compte::class)
  5388.                                 ->findOneBy(
  5389.                                     array(
  5390.                                         'numero' => '5711',
  5391.                                         'boutique' => $boutique->getId()
  5392.                                     )
  5393.                                 ); //caisse
  5394.                                 
  5395.                     $compte->setSolde($compte->getSolde() + $commande->getResteAPayer());
  5396.                     $ecritureComptable->setCompte($compte);
  5397.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  5398.                     $ecritureComptable->setDebit($montant);
  5399.                     $ecritureComptable->setSolde($compte->getSolde());
  5400.                     $ecritureComptable->setLaDate($payment->getLaDate());
  5401.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  5402.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  5403.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  5404.                     $em->persist($ecritureComptable);
  5405.                     //Credit
  5406.                     $ecritureComptable = new EcritureComptable;
  5407.                     $ecritureComptable->setBoutique($boutique);
  5408.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  5409.                     
  5410.                     $ecritureComptable->setLeJournal($leJournal);
  5411.                     $compte = $em->getRepository(Compte::class)
  5412.                                 ->findOneBy(
  5413.                                     array(
  5414.                                         'numero' => '411',
  5415.                                         'boutique' => $boutique->getId()
  5416.                                     )
  5417.                                 ); //Client
  5418.                                 
  5419.                     $compte->setSolde($compte->getSolde() - $montant);
  5420.                     $ecritureComptable->setCompte($compte);
  5421.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  5422.                     $ecritureComptable->setCredit($montant);
  5423.                     $ecritureComptable->setSolde($compte->getSolde());
  5424.                     $ecritureComptable->setLaDate($payment->getLaDate());
  5425.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  5426.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  5427.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  5428.                     $em->persist($ecritureComptable);
  5429.                 } //Fin condition ecriture comptable automatique
  5430.                 
  5431.         }
  5432.         $userBoutique = $em->getRepository(UserBoutique::class)
  5433.                         ->findOneBy(
  5434.                             array(
  5435.                             'user' => $user->getId(),
  5436.                             'boutique' => $boutique->getId()
  5437.                             )
  5438.                         );
  5439.     
  5440.         
  5441.         return $this->render('admin/marque_tout_paye.html.twig', [
  5442.            'boutique' => $boutique,
  5443.            'userBoutique' => $userBoutique,
  5444.           
  5445.         ]);
  5446.     }
  5447.     public function genererEcritureComptableDeVente($boutique, $commande)
  5448.     {
  5449.         $em = $this->getDoctrine()
  5450.                     ->getManager();
  5451.                     
  5452.         $groupeEcritureComptable = new GroupeEcritureComptable;
  5453.         $groupeEcritureComptable->setBoutique($boutique);
  5454.         $libelle = 'Vente client';
  5455.         if($commande->getTiers() != null){
  5456.             $libelle = 'Vente à ' . $commande->getTiers()->getNom();
  5457.         }
  5458.         $groupeEcritureComptable->setLibelleEcriture($libelle);
  5459.         $groupeEcritureComptable->setDebit($commande->getTotalTTC());
  5460.         $groupeEcritureComptable->setCredit($commande->getTotalTTC());
  5461.         $groupeEcritureComptable->setLaDate($commande->getLaDate());
  5462.         $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  5463.         $groupeEcritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  5464.         $groupeEcritureComptable->setMois($commande->getLaDate()->format('m'));
  5465.         $em->persist($groupeEcritureComptable);
  5466.         $em->flush();
  5467.         //Débit
  5468.         $ecritureComptable = new EcritureComptable;
  5469.         $ecritureComptable->setBoutique($boutique);
  5470.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  5471.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  5472.         $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  5473.         $compteClient = $em->getRepository(Compte::class)
  5474.                                     ->findOneBy(
  5475.                                         array(
  5476.                                             'numero' => '411',
  5477.                                             'boutique' =>$boutique->getId()
  5478.                                         )
  5479.                                     );
  5480.         $compteClient->setSolde($compteClient->getSolde() + $commande->getTotalTTC());
  5481.         $ecritureComptable->setCompte($compteClient);
  5482.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  5483.         $nomClient = '';
  5484.         if($commande->getTiers() != null){
  5485.             $nomClient =  ' à '.$commande->getTiers()->getNom();
  5486.         }
  5487.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  5488.         $ecritureComptable->setDebit($commande->getTotalTTC());
  5489.         $ecritureComptable->setSolde($compteClient->getSolde());
  5490.         $ecritureComptable->setLaDate($commande->getLaDate());
  5491.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  5492.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  5493.                     
  5494.         $em->persist($ecritureComptable);
  5495.         $ecritureComptable = new EcritureComptable;
  5496.         $ecritureComptable->setBoutique($boutique);
  5497.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  5498.         
  5499.         //Crédit
  5500.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  5501.         $compte = $em->getRepository(Compte::class)
  5502.                     ->findOneBy(
  5503.                         array(
  5504.                                 'numero' => '701',
  5505.                                 'boutique' => $boutique->getId()
  5506.                             )
  5507.                         );
  5508.         
  5509.         $compte->setSolde($compte->getSolde() - $commande->getTotalHTApresRemise() );
  5510.         $ecritureComptable->setCompte($compte);
  5511.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  5512.                     
  5513.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  5514.         $ecritureComptable->setCredit($commande->getTotalHTApresRemise());
  5515.         $ecritureComptable->setSolde($compte->getSolde());
  5516.         $ecritureComptable->setLaDate($commande->getLaDate());
  5517.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  5518.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  5519.                     
  5520.                     
  5521.         $em->persist($ecritureComptable);
  5522.         //TVA pour une entreprise qui facture la TVA
  5523.         if($commande->getTotalTVA() > 0){
  5524.             $ecritureComptable = new EcritureComptable;
  5525.             $ecritureComptable->setBoutique($boutique);
  5526.             $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  5527.                         
  5528.             $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  5529.             $compte = $em->getRepository(Compte::class)
  5530.                             ->findOneBy(
  5531.                                 array(
  5532.                                     'numero' => '4431',
  5533.                                     'boutique' => $boutique->getId()
  5534.                                 )
  5535.                             );
  5536.             $compte->setSolde($compte->getSolde() - $commande->getTotalTVA() );
  5537.             $ecritureComptable->setCompte($compte);
  5538.             $ecritureComptable->setNumeroPiece($commande->getNumero());
  5539.                         
  5540.             $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  5541.             $ecritureComptable->setCredit($commande->getTotalTVA());
  5542.             $ecritureComptable->setSolde($compte->getSolde());
  5543.             $ecritureComptable->setLaDate($commande->getLaDate());
  5544.             $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  5545.             $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  5546.                     
  5547.                         
  5548.             $em->persist($ecritureComptable);
  5549.         }
  5550.         $em->flush();
  5551.     }
  5552.     
  5553.     /**
  5554.       * @Route("/{slug}/generer-facture-fne/{id}", name="admin_url_generer_facture_fne")
  5555.     */
  5556.     public function urlGenererFactureFNEAction(Request $request, $slug, $id)
  5557.     {
  5558.         
  5559.         $em = $this->getDoctrine()
  5560.                     ->getManager();
  5561.         $boutique = $em->getRepository(Boutique::class)
  5562.                         ->findOneBySlug($slug);
  5563.         $commande = $em->getRepository(Commande::class)
  5564.                         ->findOneById($id);
  5565.         
  5566.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5567.                             ->findByCommande($commande);
  5568.         $reponse = '';
  5569.         $vehicules = array( 22, 23, 28);
  5570.         if($boutique->getApiKeyFNE() != ''){
  5571.             $reponse = $this->genererFactureFNE($slug, $id, $commande->getNatureFacture());
  5572.             //$reponse = json_decode($reponse);
  5573.             if(isset($reponse['invoice']['id'])){
  5574.                 $commande->setIdFactureFNE($reponse['invoice']['id']);
  5575.             }
  5576.             if(isset($reponse['token'])){
  5577.                 $commande->seTtokenFNE($reponse['token']);
  5578.             }
  5579.             if(isset($reponse['balance_sticker'])){
  5580.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  5581.             }
  5582.             if(isset($reponse['balance_sticker'])){
  5583.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  5584.             }
  5585.             if(isset($reponse['balance_funds'])){
  5586.                 $boutique->setSoldeTimbreFNE($reponse['balance_funds']);
  5587.             }
  5588.             
  5589.             
  5590.             $em->flush();
  5591.         
  5592.         }
  5593.         
  5594.         $produitsPourFactures = array();
  5595.         foreach($produitCommandes as $produitCommande){
  5596.             $produitsPourFacture = array(
  5597.                         'nom' => wordwrap($produitCommande->getProduit()->getNom(), 90, "<br/>", true),
  5598.                         'quantite' =>$produitCommande->getQuantite(),
  5599.                         'prix' => $produitCommande->getPrix(),
  5600.                         'remise' => $produitCommande->getRemise(),
  5601.                         'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  5602.                     );
  5603.             array_push($produitsPourFactures, $produitsPourFacture);
  5604.         }
  5605.         
  5606.         $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'fr');
  5607.     
  5608.         $content = $this->renderView('pdf/facture.html.twig', [
  5609.                     'boutique' => $boutique,
  5610.                     'facture' => $commande,
  5611.                     'produits' => $produitsPourFactures,
  5612.                     'natureFacture' => $commande->getNatureFacture(),
  5613.                     'vehicules' => $vehicules
  5614.                 ]);
  5615.         $pdf->writeHTML($content);
  5616.         $name = $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
  5617.         $lienPhysique = $commande->getUploadRootDir().$name;
  5618.                 
  5619.         $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  5620.         $pdf->output($lienPhysique, 'F');
  5621.         $em->flush();
  5622.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  5623.         return $this->render('admin/admin_generer_facture_fne.html.twig', [
  5624.            'boutique' => $boutique,
  5625.            'content' => $content,
  5626.            'userBoutique' => $userBoutique
  5627.         ]);
  5628.         
  5629.     }
  5630.     public function genererFactureFNE($slug, $idCommande, $invoiceType = 'sale')
  5631.     {
  5632.         
  5633.         $em = $this->getDoctrine()
  5634.                     ->getManager();
  5635.         $boutique = $em->getRepository(Boutique::class)
  5636.                         ->findOneBySlug($slug);
  5637.         $commande = $em->getRepository(Commande::class)
  5638.                         ->findOneById($idCommande);
  5639.         $user = $this->getUser();
  5640.         $userBoutique = $em->getRepository(UserBoutique::class)
  5641.                         ->findOneBy(
  5642.                             array(
  5643.                                 'user' => $user,
  5644.                                 'boutique' => $boutique
  5645.                             )
  5646.                         );
  5647.         $url = $boutique->getUrlFNEDeBase().'/external/invoices/sign';
  5648.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5649.                                 ->findByCommande($commande);
  5650.                                 
  5651.         $globalCustomTaxes = array();
  5652.         
  5653.         $items = array();
  5654.         foreach($produitCommandes as $produitCommande){
  5655.             $tvas = array();
  5656.             $customTaxes = array();
  5657.             if($invoiceType == 'sale'){
  5658.                 if($produitCommande->getProduit()->getTVA() != null){
  5659.                     array_push($tvas, $produitCommande->getProduit()->getTVA()->getLibelleInterne());
  5660.                     $nested = array(
  5661.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  5662.                         'amount' =>$produitCommande->getProduit()->getTVA()->getValeur()
  5663.                     );
  5664.                     $nested  = json_encode($nested);
  5665.                     array_push($customTaxes, $nested);
  5666.                 }
  5667.             }else{
  5668.                 array_push($tvas, 'TVAD');
  5669.                     $nested = array(
  5670.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  5671.                         'amount' =>0
  5672.                     );
  5673.                     $nested  = json_encode($nested);
  5674.                     array_push($customTaxes, $nested);
  5675.             }
  5676.             
  5677.             
  5678.             
  5679.             $item = array(
  5680.                     //'taxes' => $tvas,
  5681.                     //'customTaxes' => $customTaxes,
  5682.                     'reference' => $produitCommande->getProduit()->getReference(),
  5683.                     'description' =>  $produitCommande->getProduit()->getNom(),
  5684.                     'quantity' => $produitCommande->getQuantite(),
  5685.                     'amount' => $produitCommande->getPrix(),
  5686.                     'discount' => $produitCommande->getRemisePourcentage(),
  5687.                     'measurementUnit' => $produitCommande->getProduit()->getUniteDeMesure()
  5688.             );
  5689.             if($invoiceType == 'sale'){
  5690.                 $item['taxes'] = $tvas;
  5691.             }
  5692.             array_push($items, $item);
  5693.         }
  5694.         
  5695.         $clientNcc =  '';
  5696.         if($invoiceType == 'sale'){
  5697.             if($commande->getTiers() != null){
  5698.                 $clientNcc = str_replace(' ', '', $commande->getTiers()->getCodeTVA());
  5699.             }
  5700.             
  5701.         }
  5702.         $template = 'B2C';
  5703.         $clientCompanyName = $commande->getClientFinalNom();
  5704.         $clientPhone = str_replace(' ', '', $commande->getClientFinalNumero());
  5705.         $clientEmail = '';
  5706.         if($commande->getTiers() != null){
  5707.             $template = $commande->getTiers()->getTypeClient();
  5708.             $clientCompanyName = $commande->getTiers()->getNom();
  5709.             $clientPhone = str_replace(' ', '', $commande->getTiers()->getTelephone());
  5710.             $clientEmail = $commande->getTiers()->getEmail();
  5711.         }
  5712.         $content = array(
  5713.             
  5714.             'invoiceType' => $invoiceType ,
  5715.             'paymentMethod'=> $commande->getMoyenDePaiement(),
  5716.             'template' => $template,
  5717.             'isRne' => false,
  5718.             'clientNcc' => $clientNcc,
  5719.             'clientCompanyName' => $clientCompanyName,
  5720.             'clientPhone' => $clientPhone,
  5721.             'clientEmail' => $clientEmail,
  5722.             'clientSellerName' => $user->getNomComplet(),
  5723.             'pointOfSale' => $userBoutique->getNomPointDeVenteFNE(),
  5724.             'establishment' =>  $userBoutique->getNomEtablissementFNE(),
  5725.             'clientSellerName' =>$userBoutique->getVendeurFNE(),
  5726.             'commercialMessage' => $commande->getTitreDocument(),
  5727.             'footer' => 'Arrêtée la presente facture à la somme de '.$commande->getMontantEnLettre().' '.$boutique->getSettings()->getDevise(),
  5728.             //'foreignCurrency' => '',
  5729.             //'foreignCurrencyRate' => 0,
  5730.             'items' => $items,
  5731.             
  5732.             'discount' => $commande->getRemisePourcentage()
  5733.         );
  5734.         
  5735.         if($invoiceType == 'sale'){
  5736.             $content['customTaxes'] = $globalCustomTaxes;
  5737.         }
  5738.         
  5739.         $content = json_encode($content);
  5740.         $ch = curl_init($url);
  5741.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  5742.         curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  5743.         curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
  5744.         $serverOutput = curl_exec($ch);
  5745.         curl_close($ch);
  5746.         
  5747.         $response = new JsonResponse;
  5748.         
  5749.         
  5750.         //$response->setContent(json_encode($serverOutput));
  5751.         //return $response;
  5752.         $serverOutput = json_decode($serverOutput, true);
  5753.         if(isset($serverOutput['invoice'])){
  5754.             $commande->setIdFactureFNE($serverOutput['invoice']['id']);
  5755.             $commande->seTtokenFNE($serverOutput['token']);
  5756.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5757.             if(isset($serverOutput['balance_funds'])){
  5758.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  5759.             }
  5760.             if(isset($serverOutput['balance_sticker'])){
  5761.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5762.             }
  5763.             
  5764.             
  5765.             //Mettre aussi les produitCommande Ajour pour d'eventuel facture d'avoir
  5766.             
  5767.             $itemsRetournes = $serverOutput['invoice']['items'];
  5768.             foreach($itemsRetournes as $itemsRetourne){
  5769.                 $pro = $em->getRepository(Produit::class)
  5770.                             ->findOneBy(
  5771.                                 array(
  5772.                                     'boutique' => $boutique,
  5773.                                     'nom' => $itemsRetourne['description'],
  5774.                                     'reference' => $itemsRetourne['reference']
  5775.                                 )
  5776.                             );
  5777.                 if($pro != null){
  5778.                     $proCom = $em->getRepository(ProduitCommande::class)
  5779.                             ->findOneBy(
  5780.                                 array(
  5781.                                     'commande' => $commande->getId(),
  5782.                                     'produit' => $pro->getId()
  5783.                                 )
  5784.                             );
  5785.                     if($proCom != null){
  5786.                         $proCom->setIdProduitPourFactureDAvoirFNE($itemsRetourne['id']);
  5787.                         $em->persist($proCom);
  5788.                     }
  5789.                 
  5790.                 }
  5791.             }
  5792.             
  5793.             $em->flush();
  5794.         }
  5795.         return $serverOutput;
  5796.         
  5797.     }
  5798.     
  5799.     
  5800.     /**
  5801.       * @Route("/{slug}/url-generer-facture-d-avoir-fne/{id}", name="admin_url_generer_facture_d_avoir_fne")
  5802.     */
  5803.     public function urlGenererFactureDAvoirFNEAction(Request $request, ChiffreEnLettre $chiffreEnLettre, $slug, $id)
  5804.     {
  5805.         
  5806.         $em = $this->getDoctrine()
  5807.                     ->getManager();
  5808.         $commande = $em->getRepository(Commande::class)
  5809.                         ->findOneById($id);
  5810.         $boutique = $em->getRepository(Boutique::class)
  5811.                         ->findOneBySlug($slug);
  5812.         $user = $this->getUser();
  5813.         $userBoutique = $em->getRepository(UserBoutique::class)
  5814.                         ->findOneBy(
  5815.                             array(
  5816.                                 'user' => $user,
  5817.                                 'boutique' => $boutique
  5818.                             )
  5819.                         );
  5820.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5821.                                 ->findByCommande($commande);
  5822.         $reponse = '';
  5823.         
  5824.         if($request->getMethod() == 'POST'){
  5825.                 
  5826.             $chiffreEnLettre = new ChiffreEnLettre;
  5827.                 $commande = $em->getRepository(Commande::class)
  5828.                         ->findOneById($id);
  5829.         $user = $this->getUser();
  5830.         
  5831.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5832.                                 ->findByCommande($commande);
  5833.                                 
  5834.             $avoir =  clone $commande;
  5835.             $avoir->setBoutique($boutique);
  5836.             $avoir->setTypeFacture('bill_credit');
  5837.             $avoir->setNumero($this->getNumero('bill_credit', $boutique));
  5838.             $avoir->setTiers($commande->getTiers());
  5839.             $avoir->setIdFactureDeBase($commande->getId());
  5840.             $em->persist($avoir);
  5841.             
  5842.             $em->flush();
  5843.             $avoirProduits = array();
  5844.             $avoirProduitPourFactures = array();
  5845.             foreach($produitCommandes as $produitCommande){
  5846.                     
  5847.                     $avoirProduit = new ProduitCommande;
  5848.                     $avoirProduit->setCommande($avoir);
  5849.                     $avoirProduit->setProduit($produitCommande->getProduit());
  5850.                     $avoirProduit->setQuantite($produitCommande->getQuantite());
  5851.                     $avoirProduit->setPrix($produitCommande->getPrix());
  5852.                 
  5853.                     $avoirProduit->setTotalHT($produitCommande->getTotalHT());
  5854.                     $avoirProduit->setTva($produitCommande->getTotalTva());
  5855.                     $avoirProduit->setTotalTTC($produitCommande->getTotalTTC());
  5856.                     array_push($avoirProduits, $avoirProduit);
  5857.                     $nom = $produitCommande->getProduit()->getNom();
  5858.                     if(mb_strtoupper($nom, 'UTF-8') === $nom){
  5859.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 60, "<br/>", true);
  5860.                     }else{
  5861.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 90, "<br/>", true);
  5862.                     }
  5863.                     
  5864.                     $avoirProduitPourFacture = array(
  5865.                     'nom' => $nom,
  5866.                     'quantite' =>$produitCommande->getQuantite(),
  5867.                     'prix' => $produitCommande->getPrix(),
  5868.                     'remise' => $produitCommande->getRemise(),
  5869.                     'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  5870.                     );
  5871.                     array_push($avoirProduitPourFactures, $avoirProduitPourFacture);
  5872.                     $em->persist($avoirProduit);
  5873.             }
  5874.             $em->flush();
  5875.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  5876.                 
  5877.                     
  5878.             $pdfContent = $this->renderView('pdf/facture.html.twig', [
  5879.                         'boutique' => $boutique,
  5880.                         'facture' => $avoir,
  5881.                         'produits' => $avoirProduitPourFactures,
  5882.                         'commandeDeBasse' => $commande
  5883.                 ]);
  5884.             $pdf->writeHTML($pdfContent);
  5885.             $name = $avoir->getTypeFacture().$avoir->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
  5886.             $lienPhysique = $avoir->getUploadRootDir().$name;
  5887.                 
  5888.             $avoir->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  5889.             $pdf->output($lienPhysique, 'F');
  5890.             // Fin facture PDF
  5891.             
  5892.             $em->flush();
  5893.         
  5894.             if($boutique->getApiKeyFNE() != ''){
  5895.                 $reponse = $this->genererFactureDAvoirFNE($chiffreEnLettre, $boutique->getSlug(), $commande->getId());
  5896.             }
  5897.              return $this->render('admin/retour_url_generer_facture_d_avoir_fne.html.twig', [
  5898.                 'boutique' => $boutique,
  5899.                 'reponse' => $reponse,
  5900.                 'userBoutique' => $userBoutique,
  5901.                 'produitCommandes' => $produitCommandes,
  5902.                 'avoir' => $avoir
  5903.                 ]);
  5904.         }
  5905.         
  5906.         
  5907.          return $this->render('admin/url_generer_facture_d_avoir_fne.html.twig', [
  5908.            'boutique' => $boutique,
  5909.            'reponse' => $reponse,
  5910.            'userBoutique' => $userBoutique,
  5911.            'produitCommandes' => $produitCommandes
  5912.         ]);
  5913.     }
  5914.     
  5915.     public function genererFactureDAvoirFNE(ChiffreEnLettre $chiffreEnLettre, $slug, $id)
  5916.     {
  5917.         
  5918.         $em = $this->getDoctrine()
  5919.                     ->getManager();
  5920.         $boutique = $em->getRepository(Boutique::class)
  5921.                         ->findOneBySlug($slug);
  5922.         $commande = $em->getRepository(Commande::class)
  5923.                         ->findOneById($id);
  5924.         $user = $this->getUser();
  5925.         $userBoutique = $em->getRepository(UserBoutique::class)
  5926.                         ->findOneBy(
  5927.                             array(
  5928.                                 'user' => $user,
  5929.                                 'boutique' => $boutique
  5930.                             )
  5931.                         );
  5932.         
  5933.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5934.                                 ->findByCommande($commande);
  5935.                                 
  5936.         
  5937.         $items = array();
  5938.         $url = $boutique->getUrlFNEDeBase().'/external/invoices/'.$commande->getIdFactureFNE().'/refund';
  5939.         $avoirProduits = array();
  5940.         foreach($produitCommandes as $produitCommande){
  5941.             $item = array(
  5942.                     'id' => $produitCommande->getProduit()->getId(),
  5943.                     'quantity' => $produitCommande->getQuantite(),
  5944.                 );
  5945.             array_push($items, $item);
  5946.         }
  5947.             $content = array(
  5948.                 'id' => $commande->getIdFactureFNE(),
  5949.                 'items' => $items
  5950.             );
  5951.             
  5952.             
  5953.             $content = json_encode($content);
  5954.             
  5955.             $ch = curl_init($url);
  5956.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  5957.             curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  5958.             curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
  5959.             $serverOutput = curl_exec($ch);
  5960.             curl_close($ch);
  5961.             
  5962.             $response = new JsonResponse;
  5963.             
  5964.             
  5965.             //$response->setContent(json_encode($serverOutput));
  5966.             //return $response;
  5967.             $serverOutput = json_decode($serverOutput, true);
  5968.             //$commande->setIdFactureFNE($serverOutput['invoice']['id']);
  5969.             if(isset($serverOutput['token'])){
  5970.                 $avoir->seTtokenFNE($serverOutput['token']);
  5971.             }
  5972.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5973.             if(isset($serverOutput['balance_funds'])){
  5974.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  5975.             }
  5976.             if(isset($serverOutput['balance_sticker'])){
  5977.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5978.             }
  5979.             
  5980.             
  5981.             $em->flush();
  5982.             return $serverOutput;
  5983.         
  5984.         
  5985.     }
  5986.     
  5987.     //Vente
  5988.     /**
  5989.      * @Route("/{slug}/change-sale-state/{type}/{id}/{state}", name="admin.change_sale_state")
  5990.      * @return \Symfony\Component\HttpFoundation\Response
  5991.      */
  5992.     public function changeSaleStateAction(Request $request, $slug, $type, $id, $state)
  5993.     {
  5994.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5995.            return $this->redirectToRoute('security_login');
  5996.         }
  5997.         
  5998.         $em = $this->getDoctrine()
  5999.                     ->getManager();
  6000.                     
  6001.         $boutique  = $em->getRepository(Boutique::class)
  6002.                         ->findOneBySlug($slug);
  6003.     
  6004.         $user = $this->getUser();
  6005.         $userBoutique = $em->getRepository(UserBoutique::class)
  6006.                         ->findOneBy(
  6007.                             array(
  6008.                             'user' => $user->getId(),
  6009.                             'boutique' => $boutique->getId()
  6010.                             )
  6011.                         );
  6012.         $commande  = $em->getRepository(Commande::class)
  6013.                         ->findOneBy(
  6014.                             array(
  6015.                                 'boutique' => $boutique->getId(),
  6016.                                 'id' => $id
  6017.                         ));
  6018.         if($commande->getNumero() == ''){
  6019.             $commande->setNumero($this->getNumero($type, $boutique));
  6020.         }
  6021.         $commande->setEtat($state);
  6022.         $em->flush();
  6023.         
  6024.         //Produit commande du devis
  6025.                     
  6026.         $produitCommandesDevis = $em->getRepository(ProduitCommande::class)
  6027.                                 ->findByCommande($commande);
  6028.         //
  6029.         $produitCommandes = array();
  6030.         $produitsPourFactures = array();
  6031.         
  6032.         
  6033.         switch($type){
  6034.             case 'proposal':
  6035.                 
  6036.                     $facture = new  Commande;
  6037.                     $facture->setTypeFacture('invoice');
  6038.                     $facture->setNatureFacture('sale');
  6039.                     $facture->setEtat(Commande::ETAT_FACTURE_FINALISE);
  6040.                     $facture->setLaDate(new \DateTime());
  6041.                     $facture->setTotalHT($commande->getTotalHT());
  6042.                     $facture->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  6043.                     $facture->setTotalTVA($commande->getTotalTVA());
  6044.                     $facture->setTotalTTC($commande->getTotalTTC());
  6045.                     $facture->setResteAPayer($commande->getTotalTTC());
  6046.                     $facture->setCoutDeRevient($commande->getCoutDeRevient());
  6047.                     
  6048.                     $facture->setRemise($commande->getRemise());
  6049.                     $facture->setRemisePourcentage($commande->getRemisePourcentage());
  6050.                     $facture->setMontantEnLettre($commande->getMontantEnLettre());
  6051.                     $facture->setBoutique($commande->getBoutique());
  6052.                     $facture->setTiers($commande->getTiers());
  6053.                     $facture->setClientFinalNom($commande->getClientFinalNom());
  6054.                     $facture->setClientFinalNumero($commande->getClientFinalNumero());
  6055.                     
  6056.                     $facture->setNumero($this->getNumero('invoice', $boutique));
  6057.                     $em->persist($facture);
  6058.                     $em->flush();
  6059.                     $this->genererEcritureComptableDeVente($boutique, $facture);
  6060.                     
  6061.                     if($boutique->getApiKeyFNE() != ''){
  6062.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  6063.                             $responseFNE = $this->genererFactureFNE($boutique->getSlug(), $facture->getId(), $facture->getNatureFacture());
  6064.                         }
  6065.                     
  6066.                     }
  6067.                     foreach($produitCommandesDevis as $produitCommandeDevis){
  6068.                         $prodCom = new ProduitCommande;
  6069.                         $prodCom->setProduit($produitCommandeDevis->getProduit());
  6070.                         $prodCom->setCommande($facture);
  6071.                         $prodCom->setQuantite($produitCommandeDevis->getQuantite());
  6072.                         $prodCom->setPrix($produitCommandeDevis->getPrix());
  6073.                         $prodCom->setRemise($produitCommandeDevis->getRemise());
  6074.                         $prodCom->setTotalHT($produitCommandeDevis->getTotalHT());
  6075.                         $prodCom->setTotalHTApresRemise($produitCommandeDevis->getTotalHTApresRemise());
  6076.                         $prodCom->setCoutDeRevient($produitCommandeDevis->getCoutDeRevient());
  6077.                         $prodCom->setTotalCoutDeRevient($produitCommandeDevis->getTotalCoutDeRevient());
  6078.                         
  6079.                         
  6080.                         $prodCom->setTotalTVA($produitCommandeDevis->getTotalTVA());
  6081.                         $prodCom->setTotalTTC($produitCommandeDevis->getTotalTTC());
  6082.                         $prodCom->setTva($produitCommandeDevis->getTva());
  6083.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  6084.                             $produitCommandeDevis->getProduit()->setStockDisponible($produitCommandeDevis->getProduit()->getStockDisponible() - $produitCommandeDevis->getQuantite());
  6085.                         }
  6086.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  6087.                             if($type == 'invoice'){
  6088.                                 
  6089.                                 $produitVendu = $em->getRepository(Produit::class)
  6090.                                                 ->findOneById($idDuProduit);
  6091.                                 $produitVendu->setStockDisponible($produitVendu->getStockDisponible() - $produitCommandeDevis->getQuantite());
  6092.                             }
  6093.                         }
  6094.                         $em->persist($prodCom);
  6095.                         array_push($produitCommandes, $prodCom);
  6096.                         $produitsPourFacture = array(
  6097.                             'nom' => wordwrap($prodCom->getProduit()->getNom(), 90, "<br />", true),
  6098.                             'quantite' =>$prodCom->getQuantite(),
  6099.                             'prix' => $prodCom->getPrix(),
  6100.                             'remise' => $prodCom->getRemise(),
  6101.                             'totalHTApresRemise' => $prodCom->getTotalHTApresRemise()
  6102.                         );
  6103.                         array_push($produitsPourFactures, $produitsPourFacture);
  6104.                     }
  6105.                     
  6106.                     $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  6107.                     
  6108.                     $content = $this->renderView('pdf/facture.html.twig', [
  6109.                         'boutique' => $boutique,
  6110.                         'facture' => $facture,
  6111.                         'produits' => $produitsPourFactures
  6112.                     ]);
  6113.                     
  6114.                     $pdf->writeHTML($content);
  6115.                     $lienPhysique = $facture->getUploadRootDir().$facture->getTypeFacture().$facture->getId().'.pdf';
  6116.                 
  6117.                     $facture->setLienPDF($this->getDomain().'/pdf478njkp01/'.$facture->getTypeFacture().$facture->getId().'.pdf');
  6118.                     $pdf->output($lienPhysique, 'F');
  6119.                     
  6120.                     $commande->setEtat(Commande::ETAT_DEVIS_FINALISE);
  6121.                     $em->flush();
  6122.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  6123.             
  6124.             break;
  6125.             
  6126.             case 'invoice':
  6127.                     $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  6128.                     
  6129.                     $content = $this->renderView('pdf/facture.html.twig', [
  6130.                         'boutique' => $boutique,
  6131.                         'facture' => $commande,
  6132.                         'produits' => $produitsPourFactures
  6133.                     ]);
  6134.                     
  6135.                     $pdf->writeHTML($content);
  6136.                     $lienPhysique = $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  6137.                 
  6138.                     $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  6139.                     $commande->setEtat(Commande::ETAT_FACTURE_FINALISE);
  6140.                     $pdf->output($lienPhysique, 'F');
  6141.                     
  6142.                     $em->flush();
  6143.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  6144.             break;
  6145.         }
  6146.         
  6147.         
  6148.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  6149.         
  6150.     }
  6151.     
  6152.     
  6153.     /**
  6154.      * @Route("/{slug}/check-customer-vat-status", name="admin.check_customer_vat_status")
  6155.      * @return \Symfony\Component\HttpFoundation\Response
  6156.      */
  6157.     public function checkCustomerVATStatusAction(Request $request, $slug)
  6158.     {
  6159.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6160.            return $this->redirectToRoute('security_login');
  6161.         }
  6162.         $em = $this->getDoctrine()
  6163.                     ->getManager();
  6164.         $response = new JsonResponse;
  6165.         $response->headers->set('Access-Control-Allow-Origin', '*');
  6166.         $response->headers->set('Content-Type', 'application/json');
  6167.         
  6168.         $boutique = $em->getRepository(Boutique::class)
  6169.                                     ->findOneBySlug($slug);
  6170.                         
  6171.         $data = array();
  6172.         
  6173.         if($request->getMethod() == 'POST'){
  6174.             $id = $_POST['id'];
  6175.             $customer  = $em->getRepository(Tiers::class)
  6176.                         ->findOneBy(
  6177.                             array(
  6178.                                 'boutique' => $boutique->getId(),
  6179.                                 'id' => $id
  6180.                         ));
  6181.             
  6182.             $data = array(
  6183.                 "assujettiALaTVA" => $customer->getAssujettiALaTVA()
  6184.             );
  6185.         }
  6186.         
  6187.         $response->setContent(json_encode($data));
  6188.         return $response;
  6189.     }
  6190.     
  6191.     
  6192.     //Vente
  6193.     /**
  6194.      * @Route("/{slug}/edit-sale/{type}/{id}", name="admin.edit_sale")
  6195.      * @return \Symfony\Component\HttpFoundation\Response
  6196.      */
  6197.     public function editSaleAction(Request $request, ChiffreEnLettre $chiffreEnLettre, $slug, $type, $id)
  6198.     {
  6199.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6200.            return $this->redirectToRoute('security_login');
  6201.         }  
  6202.         $em = $this->getDoctrine()
  6203.                     ->getManager();
  6204.         $boutique  = $em->getRepository(Boutique::class)
  6205.                         ->findOneBySlug($slug);
  6206.     
  6207.         $produits  = $em->getRepository(Produit::class)
  6208.                         ->findByBoutique($boutique->getId());
  6209.         
  6210.         $magasins = $em->getRepository(Magasin::class)
  6211.                 ->findBy(
  6212.                     array(
  6213.                         'boutique' => $boutique,
  6214.                         'estSupprime' => false
  6215.                     )
  6216.                 );
  6217.         $projets = $em->getRepository(Projet::class)
  6218.                 ->findBy(
  6219.                     array(
  6220.                         'boutique' => $boutique,
  6221.                         'estSupprime' => false,
  6222.                         'boucle' => false
  6223.                     )
  6224.                 );
  6225.     
  6226.         $commande  = $em->getRepository(Commande::class)
  6227.                         ->findOneBy(
  6228.                             array(
  6229.                                 'boutique' => $boutique->getId(),
  6230.                                 'id' => $id
  6231.                         ));
  6232.         
  6233.         $ancienProduitCommandes  = $em->getRepository(ProduitCommande::class)
  6234.                         ->findBy(
  6235.                             array(
  6236.                                 'commande' => $commande->getId()
  6237.                         ));
  6238.                         
  6239.         $modeleReglements = $em->getRepository(ModeleReglement::class)
  6240.                                 ->findByBoutique($boutique);        
  6241.         $tiers = $em->getRepository(Tiers::class)
  6242.                                 ->findByBoutique($boutique);        
  6243.         
  6244.         $user = $this->getUser();
  6245.         $userBoutique = $em->getRepository(UserBoutique::class)
  6246.                         ->findOneBy(
  6247.                             array(
  6248.                             'user' => $user->getId(),
  6249.                             'boutique' => $boutique->getId()
  6250.                             )
  6251.                         );
  6252.         $vehicules = array(1, 22, 23, 28);
  6253.     
  6254.         $ok_soumission = '';
  6255.         $error = '';
  6256.         $editMode = 'edit';
  6257.         if($request->getMethod() == 'POST'){
  6258.             $projet = $_POST['projet'];
  6259.             $magasin = $_POST['magasin'];
  6260.             $typeFacture = $_POST['typeFacture'];
  6261.             $observation = $_POST['observation'];
  6262.             $titreDocument = $_POST['titreDocument'];
  6263.             $modeleReglement = $_POST['modeleReglement'];
  6264.             $moyenDePaiement = $_POST['moyenDePaiement'];
  6265.             $client = $_POST['client'];
  6266.             $clientFinalNom = $_POST['clientFinalNom'];
  6267.             $clientFinalNumero = $_POST['clientFinalNumero'];
  6268.             $dateCommande = $_POST['dateCommande'];
  6269.             
  6270.             $montantHT = (float)$_POST['montantHT'];
  6271.             $remise =   (float)$_POST['remise'];
  6272.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  6273.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  6274.             $montantTVA = (float)$_POST['montantTVA'];
  6275.             $montantTTC = (float)$_POST['montantTTC'];
  6276.             $matriculeVehicule = $_POST['matriculeVehicule'];
  6277.             $marqueVehicule = $_POST['marqueVehicule'];
  6278.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  6279.             $listeProduits = json_decode($_POST['listeProduits']);
  6280.             $client = $em->getRepository(Tiers::class)
  6281.                         ->findOneById($client);
  6282.             if(null !== $client){
  6283.                 $commande->setTiers($client);
  6284.             }
  6285.             
  6286.             $magasin = $em->getRepository(Projet::class)
  6287.                         ->findOneById($magasin);
  6288.             $projet = $em->getRepository(Projet::class)
  6289.                         ->findOneById($projet);
  6290.             $commande->setProjet($projet);
  6291.             
  6292.             $laDate = new \DateTime($dateCommande);
  6293.             $commande->setLaDate($laDate);
  6294.             $commande->setTitreDocument($titreDocument);
  6295.             $commande->setObservation($observation);
  6296.             $commande->setModifiePar($user);
  6297.             $commande->setMoyenDePaiement($moyenDePaiement);
  6298.             $commande->setClientFinalNom($clientFinalNom);
  6299.             $commande->setClientFinalNumero($clientFinalNumero);
  6300.             
  6301.             $commande->setMatriculeVehicule($matriculeVehicule);
  6302.             $commande->setMarqueVehicule($marqueVehicule);
  6303.             $commande->setKilometrageVehicule($kilometrageVehicule);
  6304.             $commande->setTotalHT($montantHT);
  6305.             $commande->setRemise($remise);
  6306.             $commande->setRemisePourcentage($remisePourcentage);
  6307.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  6308.             
  6309.             $commande->setTotalTVA($montantTVA);
  6310.             $commande->setTotalTTC($montantTTC);
  6311.             $commande->setResteAPayer($montantTTC);
  6312.             $montantlettre = strtoupper($chiffreEnLettre->Conversion($montantTTC));
  6313.             $commande->setMontantEnLettre($montantlettre);
  6314.             $commande->setTypeFacture($type);
  6315.             if($commande->getNumero() == ''){
  6316.                 $commande->setNumero($this->getNumero($type, $boutique));
  6317.             }
  6318.             $em->flush();
  6319.             $mouvementDeStock = $em->getRepository(MouvementDeStock::class)
  6320.                                     ->findOneByCommande($commande);
  6321.             
  6322.             
  6323.             //Supprimer les ancien ProduitCommande lié et les stocks
  6324.             foreach($ancienProduitCommandes as $ancienProduitCommande){
  6325.                 $em->remove($ancienProduitCommande);
  6326.                 if($ancienProduitCommande->getProduit()->isGereLeStock()){
  6327.                     if($type == 'invoice'){
  6328.                         
  6329.                         $mouvementDeStockProduits = $em->getRepository(MouvementDeStockProduit::class)
  6330.                                                     ->findByMouvementDeStock($mouvementDeStock);
  6331.                         foreach($mouvementDeStockProduits as $mouvementDeStockProduit){
  6332.                             $em->remove($mouvementDeStockProduit);
  6333.                         }
  6334.                         //Magasin
  6335.                         $stock = $em->getRepository(Stock::class)
  6336.                                 ->findOneBy(
  6337.                                     array(
  6338.                                         'boutique' => $boutique->getId(),
  6339.                                         'magasin' => $magasin->getId(),
  6340.                                         'produit' => $ancienProduitCommande->getProduit()->getId()
  6341.                                     )
  6342.                                 );
  6343.                         if($stock !== null){
  6344.                             $stock->setQuantite($stock->getQuantite() + $ancienProduitCommande->getQuantite());
  6345.                         }
  6346.                     }
  6347.                 } //Fin gestion de stock
  6348.             }
  6349.             $em->flush();
  6350.             $produitCommandes = array();
  6351.             $produitsPourFactures = array();
  6352.             $coutDeRevientCommande = 0;
  6353.             
  6354.             
  6355.             
  6356.             foreach($listeProduits as $listeProduit){
  6357.                 $listeProduit = (array)$listeProduit;
  6358.                 $idDuProduit = $listeProduit['idProduit'];
  6359.             
  6360.                 if($idDuProduit == ''){
  6361.                     //Produit inexistant, il faut le créer
  6362.                     $leProduit = new Produit;
  6363.                     $leProduit->setNom($listeProduit['nomProduit']);
  6364.                     $em->persist($leProduit);
  6365.                     
  6366.                     //TVA
  6367.                     if($listeProduit['tva'] > 0){
  6368.                         $tva = $em->getRepository(TVA::class)
  6369.                                     ->findOneBy(
  6370.                                         array(
  6371.                                             'boutique' => $boutique->getId(),
  6372.                                             'valeur'  => $listeProduit['tva']
  6373.                                         )
  6374.                                     );
  6375.                         if($tva == null){
  6376.                             $tva = new TVA;
  6377.                             $tva->setValeur($listeProduit['tva']);
  6378.                             $em->persist($tva);
  6379.                             $em->flush();
  6380.                         }
  6381.                         
  6382.                         $leProduit->setTva($tva);
  6383.                         
  6384.                     }
  6385.                     //Prix
  6386.                     $produitP = new PrixProduit;
  6387.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  6388.                     $produitP->setBoutique($boutique);
  6389.                     $leProduit->addPrix($produitP);
  6390.                     $leProduit->setPrixActuel($produitP);
  6391.                     $leProduit->setBoutique($boutique);
  6392.                     $em->persist($produitP);
  6393.                     $em->persist($leProduit);
  6394.                     $em->flush();
  6395.                     
  6396.                 } else{
  6397.                     $leProduit = $em->getRepository(Produit::class)
  6398.                         ->findOneById($idDuProduit);
  6399.                 }
  6400.                 $produitCommande = new ProduitCommande;
  6401.                 $produitCommande->setProduit($leProduit);
  6402.                 $produitCommande->setCommande($commande);
  6403.                 $quantite = (float)$listeProduit['quantite'];
  6404.                 $produitCommande->setQuantite($quantite);
  6405.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  6406.                 $prixDeRevient = (float)$listeProduit['prixDeRevient'];
  6407.                 $produitCommande->setCoutDeRevient($prixDeRevient);
  6408.                 $totalCoutDeRevient = $prixDeRevient * $quantite;
  6409.                 $produitCommande->setTotalCoutDeRevient($totalCoutDeRevient);
  6410.                 $coutDeRevientCommande += $totalCoutDeRevient;
  6411.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  6412.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  6413.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  6414.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  6415.                 
  6416.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  6417.                 $produitCommande->setTva((float)$listeProduit['tva']);
  6418.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  6419.                 $em->persist($produitCommande);
  6420.                 array_push($produitCommandes, $produitCommande);
  6421.                 
  6422.                 $nom = $produitCommande->getProduit()->getNom();
  6423.                     if(mb_strtoupper($nom, 'UTF-8') === $nom){
  6424.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 60, "<br/>", true);
  6425.                     }else{
  6426.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 90, "<br/>", true);
  6427.                     }
  6428.                 $produitsPourFacture = array(
  6429.                     'nom' => $nom,
  6430.                     'quantite' =>$produitCommande->getQuantite(),
  6431.                     'prix' => $produitCommande->getPrix(),
  6432.                     'remise' => $produitCommande->getRemise(),
  6433.                     'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  6434.                 );
  6435.                 array_push($produitsPourFactures, $produitsPourFacture);
  6436.                 
  6437.                 //Gestion des stocks
  6438.                 //Note très importante: Etant donné qu'il est difficile de retrouver les mouvements de stock lors de la modification
  6439.                 if($leProduit->isGereLeStock()){
  6440.                     if($type == 'invoice'){
  6441.                         
  6442.                         $leProduit->setStockDisponible($leProduit->getStockDisponible() - $produitCommande->getQuantite());    
  6443.                         $mouvementDeStockProduit = new MouvementDeStockProduit;
  6444.                         $mouvementDeStockProduit->setQuantite($produitCommande->getQuantite());
  6445.                         $mouvementDeStockProduit->setPrix($produitCommande->getPrix());
  6446.                         $mouvementDeStockProduit->setBoutique($boutique);
  6447.                         $mouvementDeStockProduit->setMouvementDeStock($mouvementDeStock);
  6448.                         $mouvementDeStockProduit->setProduit($leProduit);
  6449.                         $em->persist($mouvementDeStockProduit);
  6450.                         //Magasin
  6451.                         $stock = $em->getRepository(Stock::class)
  6452.                                 ->findOneBy(
  6453.                                     array(
  6454.                                         'boutique' => $boutique->getId(),
  6455.                                         'magasin' => $magasin->getId(),
  6456.                                         'produit' => $leProduit->getId()
  6457.                                     )
  6458.                                 );
  6459.                         if($stock !== null){
  6460.                             $stock->setQuantite($stock->getQuantite() - $produitCommande->getQuantite());
  6461.                             $mouvementDeStockProduit->setSoldeQuantite($stock->getQuantite());
  6462.                         }
  6463.                     }
  6464.                 } //Fin gestion de stock
  6465.                 
  6466.             } //Fin boucle sur les produit
  6467.             $em->flush();
  6468.             $commande->setCoutDeRevient($coutDeRevientCommande);
  6469.             
  6470.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  6471.             $content = '';
  6472.             $content = $this->renderView('pdf/facture.html.twig', [
  6473.                         'boutique' => $boutique,
  6474.                         'facture' => $commande,
  6475.                         'produits' => $produitsPourFactures
  6476.             ]);
  6477.             switch($type){
  6478.                 case 'invoice':    
  6479.                     
  6480.                 break;
  6481.                 
  6482.                 case 'proposal':
  6483.                     
  6484.                 break;
  6485.             }
  6486.             
  6487.             $pdf->writeHTML($content);
  6488.             $lienPhysique = $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  6489.                 
  6490.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  6491.             $pdf->output($lienPhysique, 'F');
  6492.             
  6493.             $em->flush();
  6494.             
  6495.             return $this->render('admin/response_new_sale.html.twig', [
  6496.                    'boutique' => $boutique,
  6497.                    'commande' => $commande,
  6498.                    'responseFNE' => '',
  6499.                    'vehicules' => $vehicules,
  6500.                    'typeFacture' => $typeFacture,
  6501.                    'client' => $client,
  6502.                    'produitCommandes' => $produitCommandes,
  6503.                    'listeProduit' => $listeProduit,
  6504.                    'montantHT' => $montantHT,
  6505.                    'montantTVA' => $montantTVA,
  6506.                    'montantTTC' => $montantTTC,
  6507.                    'userBoutique' => $userBoutique
  6508.                 ]);
  6509.             
  6510.         }
  6511.     
  6512.         return $this->render('admin/edit_sale.html.twig', [
  6513.            'boutique' => $boutique,
  6514.            'produits' => $produits,
  6515.            'modeleReglements' => $modeleReglements,
  6516.            'tiers' => $tiers,
  6517.            'editMode' => $editMode,
  6518.            'commande' => $commande,
  6519.            'ancienProduitCommandes' => $ancienProduitCommandes,
  6520.            'type' => $type,
  6521.            'userBoutique' => $userBoutique,
  6522.            'vehicules' => $vehicules,
  6523.            'projets' => $projets,
  6524.            'magasins' => $magasins
  6525.         ]);
  6526.     }
  6527.     /**
  6528.      * @Route("/{slug}/bon-de-livraison/{id}", name="admin.bon_de_livraison")
  6529.      * @return \Symfony\Component\HttpFoundation\Response
  6530.      */
  6531.     public function bonDeLivraisonAction(Request $request, $slug, $id)
  6532.     {
  6533.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6534.            return $this->redirectToRoute('security_login');
  6535.         }      
  6536.         $em = $this->getDoctrine()
  6537.                     ->getManager();
  6538.         $boutique  = $em->getRepository(Boutique::class)
  6539.                         ->findOneBySlug($slug);
  6540.     
  6541.         $user = $this->getUser();
  6542.         $userBoutique = $em->getRepository(UserBoutique::class)
  6543.                         ->findOneBy(
  6544.                             array(
  6545.                             'user' => $user->getId(),
  6546.                             'boutique' => $boutique->getId()
  6547.                             )
  6548.                         );
  6549.         $commande  = $em->getRepository(Commande::class)
  6550.                         ->findOneBy(
  6551.                             array(
  6552.                                 'boutique' => $boutique->getId(),
  6553.                                 'id' => $id
  6554.                         ));
  6555.         
  6556.         
  6557.             
  6558.             return $this->render('admin/bon_de_livraison.html.twig', [
  6559.                 'boutique' => $boutique,
  6560.                 'facture' => $commande,
  6561.                 'userBoutique' => $userBoutique,
  6562.                 'commande' => $commande
  6563.             ]);
  6564.     }        
  6565.     /**
  6566.      * @Route("/{slug}/bon-de-livraison-avec-date/{id}", name="admin_bon_de_livraison_avec_date")
  6567.      * @return \Symfony\Component\HttpFoundation\Response
  6568.      */
  6569.     public function bonDeLivraisonAvecDateAction(Request $request, $slug, $id)
  6570.     {
  6571.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6572.            return $this->redirectToRoute('security_login');
  6573.         }      
  6574.         $em = $this->getDoctrine()
  6575.                     ->getManager();
  6576.         $boutique  = $em->getRepository(Boutique::class)
  6577.                         ->findOneBySlug($slug);
  6578.     
  6579.         $user = $this->getUser();
  6580.         $userBoutique = $em->getRepository(UserBoutique::class)
  6581.                         ->findOneBy(
  6582.                             array(
  6583.                             'user' => $user->getId(),
  6584.                             'boutique' => $boutique->getId()
  6585.                             )
  6586.                         );
  6587.         if($request->getMethod() == 'POST'){
  6588.         $dateDImpression = $request->request->get('dateDImpression');
  6589.         $dateDImpression = new \DateTime($dateDImpression);
  6590.         $commande  = $em->getRepository(Commande::class)
  6591.                         ->findOneBy(
  6592.                             array(
  6593.                                 'boutique' => $boutique->getId(),
  6594.                                 'id' => $id
  6595.                         ));
  6596.         
  6597.         $listeProduits  = $em->getRepository(ProduitCommande::class)
  6598.                         ->findBy(
  6599.                             array(
  6600.                                 'commande' => $commande->getId()
  6601.                         ));
  6602.                 
  6603.             
  6604.             $produitCommandes = array();
  6605.             foreach($listeProduits as $listeProduit){
  6606.                 
  6607.                 array_push($produitCommandes, $listeProduit);
  6608.                 
  6609.             }
  6610.             
  6611.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  6612.             
  6613.             
  6614.             $content = $this->renderView('pdf/bon_de_livraison.html.twig', [
  6615.                 'boutique' => $boutique,
  6616.                 'facture' => $commande,
  6617.                 'produits' => $produitCommandes,
  6618.                 'dateDImpression' => $dateDImpression
  6619.             ]);
  6620.             
  6621.             
  6622.             $pdf->writeHTML($content);
  6623.             $lienPhysique = $commande->getUploadRootDir().'_bon_de_livraison_'.$commande->getId().'.pdf';
  6624.                 
  6625.             $pdf->output($lienPhysique, 'I');
  6626.             
  6627.             return $this->renderView('pdf/bon_de_livraison.html.twig', [
  6628.                 'boutique' => $boutique,
  6629.                 'facture' => $commande,
  6630.                 'produits' => $produitCommandes,
  6631.                 'dateDImpression' => $dateDImpression
  6632.             ]);
  6633.         }
  6634.     }        
  6635.     
  6636.     
  6637.     /**
  6638.      * @Route("/{slug}/duplicate-sale/{id}", name="admin.duplicate_sale")
  6639.      * @return \Symfony\Component\HttpFoundation\Response
  6640.      */
  6641.     public function duplicateSaleAction(Request $request, $slug, $id)
  6642.     {
  6643.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6644.            return $this->redirectToRoute('security_login');
  6645.         }      
  6646.         $em = $this->getDoctrine()
  6647.                     ->getManager();
  6648.         $boutique  = $em->getRepository(Boutique::class)
  6649.                         ->findOneBySlug($slug);
  6650.     
  6651.         $user = $this->getUser();
  6652.         $userBoutique = $em->getRepository(UserBoutique::class)
  6653.                         ->findOneBy(
  6654.                             array(
  6655.                             'user' => $user->getId(),
  6656.                             'boutique' => $boutique->getId()
  6657.                             )
  6658.                         );
  6659.         $commande  = $em->getRepository(Commande::class)
  6660.                         ->findOneBy(
  6661.                             array(
  6662.                                 'boutique' => $boutique->getId(),
  6663.                                 'id' => $id
  6664.                         ));
  6665.         
  6666.         $listeProduits  = $em->getRepository(ProduitCommande::class)
  6667.                         ->findBy(
  6668.                             array(
  6669.                                 'commande' => $commande->getId()
  6670.                         ));
  6671.                 
  6672.             $nouvelleCommande = new Commande;
  6673.             $nouvelleCommande->setBoutique($boutique);
  6674.             $nouvelleCommande->setTiers($commande->getTiers());
  6675.             
  6676.             $nouvelleCommande->setLaDate(new \DateTime());
  6677.             $nouvelleCommande->setTotalHT($commande->getTotalHT());
  6678.             $nouvelleCommande->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  6679.             $nouvelleCommande->setRemise($commande->getRemise());
  6680.             $nouvelleCommande->setRemisePourcentage($commande->getRemisePourcentage());
  6681.             $nouvelleCommande->setTotalTVA($commande->getTotalTVA());
  6682.             $nouvelleCommande->setTotalAutreTaxe($commande->getTotalAutreTaxe());
  6683.             $nouvelleCommande->setTotalTTC($commande->getTotalTTC());
  6684.             $nouvelleCommande->setResteAPayer($commande->getTotalTTC());
  6685.             $nouvelleCommande->setTitreDocument($commande->getTitreDocument());
  6686.             $nouvelleCommande->setObservation($commande->getObservation());
  6687.             $nouvelleCommande->setValableJusquAu($commande->getValableJusquAu());
  6688.             $nouvelleCommande->setMontantEnLettre($commande->getMontantEnLettre());
  6689.             $nouvelleCommande->setTypeFacture($commande->getTypeFacture());
  6690.             $nouvelleCommande->setNatureFacture($commande->getNatureFacture());
  6691.             
  6692.             $nouvelleCommande->setNumero($this->getNumero($nouvelleCommande->getTypeFacture(), $boutique));
  6693.             $em->persist($nouvelleCommande);
  6694.             $em->flush();
  6695.             $produitCommandes = array();
  6696.             $produitsPourFactures = array();
  6697.             foreach($listeProduits as $listeProduit){
  6698.                 $produitCommande = new ProduitCommande;
  6699.                 $produitCommande->setProduit($listeProduit->getProduit());
  6700.                 $produitCommande->setCommande($nouvelleCommande);
  6701.                 $produitCommande->setQuantite($listeProduit->getQuantite());
  6702.                 $produitCommande->setPrix($listeProduit->getPrix());
  6703.                 $produitCommande->setRemise($listeProduit->getRemise());
  6704.                 $produitCommande->setRemisePourcentage($listeProduit->getRemisePourcentage());
  6705.                 $produitCommande->setTotalHT($listeProduit->getTotalHT());
  6706.                 $produitCommande->setTotalHTApresRemise($listeProduit->getTotalHTApresRemise());
  6707.                 $produitCommande->setTotalTVA($listeProduit->getTotalTVA());
  6708.                 $produitCommande->setAutreTaxe($listeProduit->getAutreTaxe());
  6709.                 $produitCommande->setTotalTTC($listeProduit->getTotalTTC());
  6710.                 $em->persist($produitCommande);
  6711.                 
  6712.                 array_push($produitCommandes, $produitCommande);
  6713.                 
  6714.                 $produitsPourFacture = array(
  6715.                                 'nom' => wordwrap($produitCommande->getProduit()->getNom(), 90, "<br/>", true),
  6716.                                 'quantite' =>$produitCommande->getQuantite(),
  6717.                                 'prix' => $produitCommande->getPrix(),
  6718.                                 'remise' => $produitCommande->getRemise(),
  6719.                                 'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  6720.                             );
  6721.                 array_push($produitsPourFactures, $produitsPourFacture);
  6722.                 
  6723.                 
  6724.                 
  6725.             }
  6726.             $em->flush();
  6727.             
  6728.             if($nouvelleCommande->getTypeFacture() == 'invoice'){
  6729.                     
  6730.                 if($boutique->getApiKeyFNE() != ''){
  6731.                     if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  6732.                         $responseFNE = $this->genererFactureFNE($boutique->getSlug(), $nouvelleCommande->getId(), $nouvelleCommande->getNatureFacture());
  6733.                     }
  6734.                     
  6735.                 }
  6736.                 $this->genererEcritureComptableDeVente($boutique, $nouvelleCommande);
  6737.                     //Ecriture comptable
  6738.             }
  6739.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  6740.             $content = '';
  6741.             switch($commande->getTypeFacture()){
  6742.                 case 'invoice':    
  6743.                     $content = $this->renderView('pdf/facture.html.twig', [
  6744.                         'boutique' => $boutique,
  6745.                         'facture' => $nouvelleCommande,
  6746.                         'produits' => $produitsPourFactures
  6747.                     ]);
  6748.                 break;
  6749.                 
  6750.                 case 'proposal':
  6751.                     $content = $this->renderView('pdf/devis.html.twig', [
  6752.                         'boutique' => $boutique,
  6753.                         'facture' => $nouvelleCommande,
  6754.                         'produits' => $produitsPourFactures
  6755.                     ]);
  6756.                 break;
  6757.             }
  6758.             
  6759.             $pdf->writeHTML($content);
  6760.             $lienPhysique = $nouvelleCommande->getUploadRootDir().$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf';
  6761.                 
  6762.             $nouvelleCommande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf');
  6763.             $pdf->output($lienPhysique, 'F');
  6764.             
  6765.             $em->flush();
  6766.             
  6767.             switch($commande->getTypeFacture()){
  6768.                 case 'invoice':    
  6769.                     return $this->redirectToRoute('admin.invoices',  array('slug' => $boutique->getSlug()));
  6770.                 break;
  6771.                 
  6772.                 case 'proposal':
  6773.                     return $this->redirectToRoute('admin.proposals',  array('slug' => $boutique->getSlug()));
  6774.                 break;
  6775.                 
  6776.                 case 'bill_credit':
  6777.                     return $this->redirectToRoute('admin.bill_credits',  array('slug' => $boutique->getSlug()));
  6778.                 break;
  6779.                 
  6780.                 case 'deposit':
  6781.                     return $this->redirectToRoute('admin.deposits',  array('slug' => $boutique->getSlug()));
  6782.                 break;
  6783.             }
  6784.     }
  6785.     
  6786.     /**
  6787.      * @Route("/{slug}/delete-sale/{type}/{id}", name="admin.delete_sale")
  6788.      * @return \Symfony\Component\HttpFoundation\Response
  6789.   
  6790.     */
  6791.     public function deleteSaleAction(Request $request, $slug, $type, $id)
  6792.     {
  6793.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6794.            return $this->redirectToRoute('security_login');
  6795.         }
  6796.         $em = $this->getDoctrine()
  6797.                     ->getManager();
  6798.         
  6799.         $boutique = $em->getRepository(Boutique::class)
  6800.                         ->findOneBySlug($slug);
  6801.         $user = $this->getUser();
  6802.         $userBoutique = $em->getRepository(UserBoutique::class)
  6803.                         ->findOneBy(
  6804.                             array(
  6805.                             'user' => $user->getId(),
  6806.                             'boutique' => $boutique->getId()
  6807.                             )
  6808.                         );
  6809.         $commande = $em->getRepository(Commande::class)
  6810.                         ->findOneBy(
  6811.                             array(
  6812.                                 'boutique' => $boutique->getId(),
  6813.                                 'id' => $id
  6814.                             ));
  6815.         /*
  6816.         
  6817.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  6818.                         ->findByCommande($commande->getId());
  6819.                         
  6820.         foreach($produitCommandes as $produitCommande){
  6821.             $em->remove($produitCommande);
  6822.         }
  6823.         $em->flush();
  6824.         
  6825.         $em->remove($commande);
  6826.         */
  6827.         
  6828.         
  6829.         $commande->setEstSupprime(true);
  6830.         $commande->setSupprimePar($user);
  6831.         $em->flush();
  6832.         
  6833.         switch($type){
  6834.             case 'invoice':
  6835.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  6836.             break;
  6837.             
  6838.             case 'bill_credit':
  6839.                 return $this->redirectToRoute('admin.bill_credits', array('slug' => $boutique->getSlug()));
  6840.             break;
  6841.             
  6842.             case 'proposal':
  6843.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  6844.             break;
  6845.         }
  6846.         
  6847.     }
  6848.     
  6849.     /**
  6850.      * @Route("/{slug}/product/list", name="admin.list_product")
  6851.      * @return \Symfony\Component\HttpFoundation\Response
  6852.     */
  6853.     public function listProductAction(Request $request, Boutique $boutique)
  6854.     {
  6855.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6856.            return $this->redirectToRoute('security_login');
  6857.         }
  6858.         $em = $this->getDoctrine()
  6859.                     ->getManager();
  6860.         
  6861.         $produits = $em->getRepository(Produit::class)
  6862.                         ->findBy(
  6863.                             array(
  6864.                                 'boutique' => $boutique->getId(),
  6865.                                 'estSupprime' => false
  6866.                             ),    
  6867.                             array(
  6868.                                 'nom' => 'ASC'
  6869.                             )
  6870.                         );
  6871.         $user = $this->getUser();
  6872.         $userBoutique = $em->getRepository(UserBoutique::class)
  6873.                         ->findOneBy(
  6874.                             array(
  6875.                             'user' => $user->getId(),
  6876.                             'boutique' => $boutique->getId()
  6877.                             )
  6878.                         );
  6879.         return $this->render('admin/liste_produit.html.twig', [
  6880.            'boutique' => $boutique,
  6881.            'produits' => $produits,
  6882.            'userBoutique' => $userBoutique
  6883.         ]);
  6884.     }
  6885.     
  6886.     /**
  6887.      * @Route("/{slug}/new-product", name="admin.new_product")
  6888.      * @return \Symfony\Component\HttpFoundation\Response
  6889.      */
  6890.     public function newProductAction(Request $request, Boutique $boutique)
  6891.     {
  6892.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6893.            return $this->redirectToRoute('security_login');
  6894.         }
  6895.         $em = $this->getDoctrine()
  6896.                     ->getManager();
  6897.         
  6898.         $produit = new Produit;
  6899.         
  6900.         $user = $this->getUser();
  6901.         $userBoutique = $em->getRepository(UserBoutique::class)
  6902.                         ->findOneBy(
  6903.                             array(
  6904.                             'user' => $user->getId(),
  6905.                             'boutique' => $boutique->getId()
  6906.                             )
  6907.                         );
  6908.         $magasins = $em->getRepository(Magasin::class)
  6909.                         ->findBy(
  6910.                             array(
  6911.                             'estSupprime' => false,
  6912.                             'boutique' => $boutique->getId()
  6913.                             )
  6914.                         );
  6915.         $form = $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  6916.         
  6917.         $ok_soumission = '';
  6918.         $error = '';
  6919.         
  6920.         if($request->getMethod() == 'POST'){
  6921.             
  6922.                $form->handleRequest($request);
  6923.                if($form->isValid()){
  6924.                 
  6925.                 
  6926.                  $em->persist($produit);
  6927.                    $em->flush();
  6928.                  foreach($magasins as $magasin){
  6929.                     $stockDisponible = (float)$request->request->get('stockDisponible'.$magasin->getId());
  6930.                     $stockDAlerte = (float)$request->request->get('stockDAlerte'.$magasin->getId());
  6931.                     $stockDeSecurite = (float)$request->request->get('stockDeSecurite'.$magasin->getId());
  6932.                     $stockMinimum = (float)$request->request->get('stockMinimum'.$magasin->getId());
  6933.                     $stockMaximum = (float)$request->request->get('stockMaximum'.$magasin->getId());
  6934.                     $stockOutil = (float)$request->request->get('stockOutil'.$magasin->getId());
  6935.                     $coutDeStockage = (float)$request->request->get('coutDeStockage'.$magasin->getId());
  6936.                     $stock = new Stock;
  6937.                     $stock->setBoutique($boutique);
  6938.                     $stock->setProduit($produit);
  6939.                     $stock->setMagasin($magasin);
  6940.                     $stock->setStockDisponible($stockDisponible);
  6941.                     $stock->setStockDAlerte($stockDAlerte);
  6942.                     $stock->setStockDeSecurite($stockDeSecurite);
  6943.                     $stock->setStockMinimum($stockMinimum);
  6944.                     $stock->setStockMaximum($stockMaximum);
  6945.                     $stock->setStockOutil($stockOutil);
  6946.                     $stock->setCoutDeStockage($coutDeStockage);
  6947.                     
  6948.                     $em->persist($stock);
  6949.                     
  6950.                 }
  6951.                  
  6952.                    //Prix
  6953.                    $prix = (float)$_POST['prix'];
  6954.                    $produitP = new PrixProduit;
  6955.                    $produitP->setValeur($prix);
  6956.                    $produitP->setBoutique($boutique);
  6957.                    $produit->addPrix($produitP);
  6958.                    $produit->setPrixActuel($produitP);
  6959.                    $produit->setBoutique($boutique);
  6960.                   $em->persist($produitP);
  6961.                   
  6962.                   $em->flush();
  6963.                 if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0){
  6964.                     $this->gererFichierMultiple($produit, $_FILES['photo'], true);
  6965.                 }
  6966.         
  6967.                 
  6968.                 $ok_soumission =" Votre message a été pris en compte";
  6969.                     
  6970.                 unset($produit);
  6971.                 unset($form);
  6972.                 $produit = new Produit;
  6973.                 $form = $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  6974.                     
  6975.                 } else {
  6976.                     $error =" Veillez corrigez vos erreurs";
  6977.                 }
  6978.         }
  6979.     
  6980.         return $this->render('admin/nouveau_produit.html.twig', [
  6981.            'boutique' => $boutique,
  6982.            'form' => $form->createView(),
  6983.            'userBoutique' => $userBoutique,
  6984.            'magasins' => $magasins
  6985.         ]);
  6986.     }
  6987.     
  6988.     /**
  6989.      * @Route("/{slug}/product/edit/{id}", name="admin.edit_product")
  6990.      * @return \Symfony\Component\HttpFoundation\Response
  6991.     */
  6992.     public function edtProductAction(Request $request, $slug, $id)
  6993.     {
  6994.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6995.            return $this->redirectToRoute('security_login');
  6996.         }
  6997.         $em = $this->getDoctrine()
  6998.                     ->getManager();
  6999.         
  7000.         $boutique = $em->getRepository(Boutique::class)
  7001.                         ->findOneBySlug($slug);
  7002.         
  7003.         $produit = $em->getRepository(Produit::class)
  7004.                         ->findOneBy(
  7005.                             array(
  7006.                             'boutique' => $boutique->getId(),
  7007.                             'id' => $id
  7008.                             )
  7009.                         );
  7010.         
  7011.         $user = $this->getUser();
  7012.         $userBoutique = $em->getRepository(UserBoutique::class)
  7013.                         ->findOneBy(
  7014.                             array(
  7015.                             'user' => $user->getId(),
  7016.                             'boutique' => $boutique->getId()
  7017.                             )
  7018.                         );
  7019.         $form = $this->createForm(ProduitEditType::class, $produit, array('boutique' => $boutique->getId()));
  7020.         
  7021.         $ok_soumission = '';
  7022.         $error = '';
  7023.         
  7024.         if($request->getMethod() == 'POST'){
  7025.             
  7026.                $form->handleRequest($request);
  7027.                if($form->isValid()){
  7028.                    //Prix
  7029.                     $prix = (float)$_POST['prix'];
  7030.                     if($prix > 0 && $produit->getPrixActuel()->getValeur() != $prix){
  7031.                         $produit->getPrixActuel()->setValeur($prix);
  7032.                         $produitP = new PrixProduit;
  7033.                        $produitP->setValeur($prix);
  7034.                        $produit->addPrix($produitP);
  7035.                        $produit->setPrixActuel($produitP);
  7036.                        $produit->setBoutique($boutique);
  7037.                       $em->persist($produitP);
  7038.                         
  7039.                     }
  7040.                     if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0){
  7041.                         $this->gererFichierMultiple($produit, $_FILES['photo'], true);
  7042.                     }
  7043.                     $em->flush();
  7044.                     $ok_soumission =" Votre message a été pris en compte";
  7045.                 } else {
  7046.                     $error =" Veillez corrigez vos erreurs";
  7047.                 }
  7048.         }
  7049.     
  7050.         return $this->render('admin/edit_product.html.twig', [
  7051.            'boutique' => $boutique,
  7052.            'form' => $form->createView(),
  7053.            'produit' => $produit,
  7054.            'userBoutique' => $userBoutique
  7055.         ]);
  7056.     }
  7057.     
  7058.     //Produit/Service
  7059.     /**
  7060.      * @Route("/{slug}/delete-product/{id}", name="admin.delete_product")
  7061.      * @return \Symfony\Component\HttpFoundation\Response
  7062.      */
  7063.     public function deleteProductAction(Request $request,  $slug, $id)
  7064.     { 
  7065.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7066.            return $this->redirectToRoute('security_login');
  7067.         }
  7068.         $em = $this->getDoctrine()
  7069.                     ->getManager();
  7070.         $boutique = $em->getRepository(Boutique::class)
  7071.                         ->findOneBySlug($slug);
  7072.         
  7073.         $product = $em->getRepository(Produit::class)
  7074.                         ->findOneBy(
  7075.                         array(
  7076.                             'boutique' => $boutique->getId(),
  7077.                             'id' => $id
  7078.                         )
  7079.                         );
  7080.         if(null !== $product){
  7081.             
  7082.             $product->setEstSupprime(true);
  7083.             $em->flush();
  7084.         }
  7085.         return $this->redirectToRoute('admin.list_product', array('slug' => $boutique->getSlug()));
  7086.     
  7087.     }
  7088.     
  7089.     /**
  7090.      * @Route("/{slug}/product-category/list", name="admin.category_product")
  7091.      * @return \Symfony\Component\HttpFoundation\Response
  7092.     */
  7093.     public function listeCategoryProductAction(Request $request, Boutique $boutique)
  7094.     {
  7095.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7096.            return $this->redirectToRoute('security_login');
  7097.         }
  7098.         $em = $this->getDoctrine()
  7099.                     ->getManager();
  7100.         
  7101.         $categories = $em->getRepository(CategorieProduit::class)
  7102.                         ->findByBoutique($boutique);
  7103.         $user = $this->getUser();
  7104.         $userBoutique = $em->getRepository(UserBoutique::class)
  7105.                         ->findOneBy(
  7106.                             array(
  7107.                             'user' => $user->getId(),
  7108.                             'boutique' => $boutique->getId()
  7109.                             )
  7110.                         );
  7111.         return $this->render('admin/category_product.html.twig', [
  7112.            'categories' => $categories,
  7113.            'boutique' => $boutique,
  7114.            'userBoutique' => $userBoutique
  7115.         ]);
  7116.     }
  7117.     
  7118.     //Produit/Service
  7119.     /**
  7120.      * @Route("/{slug}/new-product-category", name="admin.new_product_category")
  7121.      * @return \Symfony\Component\HttpFoundation\Response
  7122.      */
  7123.     public function newProductCategoryAction(Request $request, Boutique $boutique)
  7124.     {
  7125.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7126.            return $this->redirectToRoute('security_login');
  7127.         }      
  7128.         $em = $this->getDoctrine()
  7129.                     ->getManager();
  7130.         
  7131.         $categorie = new CategorieProduit;
  7132.         $form = $this->createForm(CategorieProduitType::class, $categorie);
  7133.         
  7134.         $ok_soumission = '';
  7135.         $error = '';
  7136.         $user = $this->getUser();
  7137.         $userBoutique = $em->getRepository(UserBoutique::class)
  7138.                         ->findOneBy(
  7139.                             array(
  7140.                             'user' => $user->getId(),
  7141.                             'boutique' => $boutique->getId()
  7142.                             )
  7143.                         );
  7144.         if($request->getMethod() == 'POST'){
  7145.             
  7146.                $form->handleRequest($request);
  7147.                if($form->isValid()){
  7148.                    $categorie->setBoutique($boutique);
  7149.                   $em->persist($categorie);
  7150.                   $em->flush();
  7151.         
  7152.                 $ok_soumission =" Votre message a été pris en compte";
  7153.                     
  7154.                 unset($categorie);
  7155.                 unset($form);
  7156.                 $categorie = new CategorieProduit;
  7157.                 
  7158.                 $form = $this->createForm(CategorieProduitType::class, $categorie);
  7159.                     
  7160.                 } else {
  7161.                     $error =" Veillez corrigez vos erreurs";
  7162.                 }
  7163.         }
  7164.     
  7165.         return $this->render('admin/new_product_category.html.twig', [
  7166.            'boutique' => $boutique,
  7167.            'form' => $form->createView(),
  7168.            'userBoutique' => $userBoutique
  7169.         ]);
  7170.     }
  7171.     
  7172.     
  7173.     //Produit/Service
  7174.     /**
  7175.      * @Route("/{slug}/edit-product-category/{id}", name="admin.edit_product_category")
  7176.      * @return \Symfony\Component\HttpFoundation\Response
  7177.      */
  7178.     public function editProductCategoryAction(Request $request, $slug, $id)
  7179.     { 
  7180.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7181.            return $this->redirectToRoute('security_login');
  7182.         }
  7183.         $em = $this->getDoctrine()
  7184.                     ->getManager();
  7185.         
  7186.         $user = $this->getUser();
  7187.         
  7188.         $categorie = $em->getRepository(CategorieProduit::class)
  7189.                         ->findOneById($id);
  7190.         $boutique = $em->getRepository(Boutique::class)
  7191.                         ->findOneBySlug($slug);
  7192.         $userBoutique = $em->getRepository(UserBoutique::class)
  7193.                         ->findOneBy(
  7194.                             array(
  7195.                             'user' => $user->getId(),
  7196.                             'boutique' => $boutique->getId()
  7197.                             )
  7198.                         );
  7199.         $form = $this->createForm(CategorieProduitEditType::class, $categorie);
  7200.         
  7201.         $ok_soumission = '';
  7202.         $error = '';
  7203.         
  7204.         if($request->getMethod() == 'POST'){
  7205.             
  7206.                $form->handleRequest($request);
  7207.                if($form->isValid()){
  7208.                   $em->flush();
  7209.         
  7210.                 $ok_soumission =" Votre message a été pris en compte";    
  7211.                 } else {
  7212.                     $error =" Veillez corrigez vos erreurs";
  7213.                 }
  7214.         }
  7215.     
  7216.         return $this->render('admin/edit_product_category.html.twig', [
  7217.            'boutique' => $boutique,
  7218.            'categorie' => $categorie,
  7219.            'form' => $form->createView(),
  7220.            'userBoutique' => $userBoutique
  7221.         ]);
  7222.     }
  7223.     
  7224.     //Produit/Service
  7225.     /**
  7226.      * @Route("/{slug}/delete-product-category/{id}", name="admin.delete_product_category")
  7227.      * @return \Symfony\Component\HttpFoundation\Response
  7228.      */
  7229.     public function deleteProductCategoryAction(Request $request,  $slug, $id)
  7230.     { 
  7231.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7232.            return $this->redirectToRoute('security_login');
  7233.         }
  7234.         $em = $this->getDoctrine()
  7235.                     ->getManager();
  7236.         $boutique = $em->getRepository(Boutique::class)
  7237.                         ->findOneBySlug($slug);
  7238.                         
  7239.         $categorie = $em->getRepository(CategorieProduit::class)
  7240.                         ->findOneBy(
  7241.                         array(
  7242.                             'boutique' => $boutique->getId(),
  7243.                             'id' => $id
  7244.                         )
  7245.                         );
  7246.         if(null !== $categorie){
  7247.             $em->remove($categorie);
  7248.             $em->flush();
  7249.         }
  7250.         return $this->redirectToRoute('admin.category_product', array('slug' => $boutique->getSlug()));
  7251.         
  7252.         
  7253.     }
  7254.     /**
  7255.      * @Route("/{slug}/tax/list", name="admin.list_tax")
  7256.      * @return \Symfony\Component\HttpFoundation\Response
  7257.      */
  7258.     public function listTaxAction(Request $request, Boutique $boutique)
  7259.     {    
  7260.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7261.            return $this->redirectToRoute('security_login');
  7262.         }
  7263.         $em = $this->getDoctrine()
  7264.                     ->getManager();
  7265.         
  7266.         $taxes = $em->getRepository(TVA::class)
  7267.                         ->findByBoutique($boutique);
  7268.         $user = $this->getUser();
  7269.         $userBoutique = $em->getRepository(UserBoutique::class)
  7270.                         ->findOneBy(
  7271.                             array(
  7272.                             'user' => $user->getId(),
  7273.                             'boutique' => $boutique->getId()
  7274.                             )
  7275.                         );
  7276.         return $this->render('admin/liste_tva.html.twig', [
  7277.            'boutique' => $boutique,
  7278.            'taxes' => $taxes,
  7279.            'userBoutique' => $userBoutique
  7280.         ]);
  7281.     }
  7282.     
  7283.     /**
  7284.      * @Route("/{slug}/new-tax", name="admin.new_tax")
  7285.      * @return \Symfony\Component\HttpFoundation\Response
  7286.      */
  7287.     public function newTaxAction(Request $request, Boutique $boutique)
  7288.     {
  7289.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7290.            return $this->redirectToRoute('security_login');
  7291.         }
  7292.         $em = $this->getDoctrine()
  7293.                     ->getManager();
  7294.         
  7295.         $tva = new TVA;
  7296.         
  7297.         $user = $this->getUser();
  7298.         $userBoutique = $em->getRepository(UserBoutique::class)
  7299.                         ->findOneBy(
  7300.                             array(
  7301.                             'user' => $user->getId(),
  7302.                             'boutique' => $boutique->getId()
  7303.                             )
  7304.                         );
  7305.         $form = $this->createForm(TVAType::class, $tva);
  7306.         
  7307.         $ok_soumission = '';
  7308.         $error = '';
  7309.         
  7310.         if($request->getMethod() == 'POST'){
  7311.             
  7312.                $form->handleRequest($request);
  7313.                if($form->isValid()){
  7314.                    $tva->setBoutique($boutique);
  7315.                   $em->persist($tva);
  7316.                   $em->flush();
  7317.         
  7318.                 $ok_soumission =" Votre message a été pris en compte";
  7319.                     
  7320.                 unset($tva);
  7321.                 unset($form);
  7322.                 $tva = new TVA;
  7323.                 
  7324.                 $form = $this->createForm(TVAType::class, $tva);
  7325.                     
  7326.                 } else {
  7327.                     $error =" Veillez corrigez vos erreurs";
  7328.                 }
  7329.         }
  7330.     
  7331.         return $this->render('admin/nouvelle_tva.html.twig', [
  7332.            'boutique' => $boutique,
  7333.            'form' => $form->createView(),
  7334.            'userBoutique' => $userBoutique
  7335.         ]);
  7336.     }
  7337.     
  7338.     /**
  7339.      * @Route("/{slug}/edit-tax/{tva}", name="admin.edit_tax")
  7340.      * @return \Symfony\Component\HttpFoundation\Response
  7341.      */
  7342.     public function editTaxAction(Request $request, $slug, $tva)
  7343.     {
  7344.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7345.            return $this->redirectToRoute('security_login');
  7346.         }
  7347.         $em = $this->getDoctrine()
  7348.                     ->getManager();
  7349.         
  7350.         $boutique = $em->getRepository(Boutique::class)
  7351.                         ->findOneBySlug($slug);
  7352.                         
  7353.         $tva = $em->getRepository(TVA::class)
  7354.                         ->findOneBy(
  7355.                         array(
  7356.                             'boutique' => $boutique->getId(),
  7357.                             'id' => $tva
  7358.                         )
  7359.                         );
  7360.         
  7361.         $user = $this->getUser();
  7362.         $userBoutique = $em->getRepository(UserBoutique::class)
  7363.                         ->findOneBy(
  7364.                             array(
  7365.                             'user' => $user->getId(),
  7366.                             'boutique' => $boutique->getId()
  7367.                             )
  7368.                         );
  7369.         $userBoutique = $em->getRepository(UserBoutique::class)
  7370.                         ->findOneBy(
  7371.                             array(
  7372.                             'user' => $user->getId(),
  7373.                             'boutique' => $boutique->getId()
  7374.                             )
  7375.                         );
  7376.         $form = $this->createForm(TVAEditType::class, $tva);
  7377.         
  7378.         $ok_soumission = '';
  7379.         $error = '';
  7380.         
  7381.         if($request->getMethod() == 'POST'){
  7382.             
  7383.                $form->handleRequest($request);
  7384.                if($form->isValid()){
  7385.                   $em->flush();
  7386.         
  7387.                 $ok_soumission =" Votre message a été pris en compte";
  7388.                     
  7389.                     
  7390.                 } else {
  7391.                     $error =" Veillez corrigez vos erreurs";
  7392.                 }
  7393.         }
  7394.     
  7395.         return $this->render('admin/edit_tax.html.twig', [
  7396.            'boutique' => $boutique,
  7397.            'tva' => $tva,
  7398.            'form' => $form->createView(),
  7399.            'userBoutique' => $userBoutique
  7400.         ]);
  7401.     }
  7402.     
  7403.     /**
  7404.      * @Route("/{slug}/delete-tax/{id}", name="admin.delete_tax")
  7405.      * @return \Symfony\Component\HttpFoundation\Response
  7406.      */
  7407.     public function deleteTaxAction(Request $request, $slug, TVA $tva)
  7408.     {
  7409.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7410.            return $this->redirectToRoute('security_login');
  7411.         }
  7412.         $em = $this->getDoctrine()
  7413.                     ->getManager();
  7414.         $boutique = $em->getRepository(Boutique::class)
  7415.                         ->findOneBySlug($slug);
  7416.         
  7417.         $tva = $em->getRepository(TVA::class)
  7418.                         ->findOneBy(
  7419.                         array(
  7420.                             'boutique' => $boutique->getId(),
  7421.                             'id' => $tva
  7422.                         )
  7423.                         );
  7424.         if(null !== $tva){
  7425.             $em->remove($tva);
  7426.             $em->flush();
  7427.         }
  7428.         return $this->redirectToRoute('admin.list_tax', array('slug' => $boutique->getSlug()));
  7429.     }
  7430.     
  7431.     /**
  7432.      * @Route("/{slug}/payment-method/list", name="admin.payment_methods")
  7433.      * @return \Symfony\Component\HttpFoundation\Response
  7434.      */
  7435.     public function paymentMethodsAction(Request $request, Boutique $boutique)
  7436.     {
  7437.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7438.            return $this->redirectToRoute('security_login');
  7439.         }
  7440.         $em = $this->getDoctrine()
  7441.                     ->getManager();
  7442.         
  7443.         $paymentMethods = $em->getRepository(PaymentMethod::class)
  7444.                         ->findByBoutique($boutique);
  7445.         $user = $this->getUser();
  7446.         $userBoutique = $em->getRepository(UserBoutique::class)
  7447.                         ->findOneBy(
  7448.                             array(
  7449.                             'user' => $user->getId(),
  7450.                             'boutique' => $boutique->getId()
  7451.                             )
  7452.                         );
  7453.         return $this->render('admin/payment_methods.html.twig', [
  7454.            'boutique' => $boutique,
  7455.            'paymentMethods' => $paymentMethods,
  7456.            'userBoutique' => $userBoutique
  7457.         ]);
  7458.     }
  7459.     
  7460.     /**
  7461.      * @Route("/{slug}/payment-method/new", name="admin.new_payment_method")
  7462.      * @return \Symfony\Component\HttpFoundation\Response
  7463.      */
  7464.     public function newPaymentMethodAction(Request $request, Boutique $boutique)
  7465.     {
  7466.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7467.            return $this->redirectToRoute('security_login');
  7468.         }
  7469.         $em = $this->getDoctrine()
  7470.                     ->getManager();
  7471.         
  7472.         $paymentMethod = new PaymentMethod;
  7473.         
  7474.         $user = $this->getUser();
  7475.         $userBoutique = $em->getRepository(UserBoutique::class)
  7476.                         ->findOneBy(
  7477.                             array(
  7478.                             'user' => $user->getId(),
  7479.                             'boutique' => $boutique->getId()
  7480.                             )
  7481.                         );
  7482.         $form = $this->createForm(PaymentMethodType::class, $paymentMethod);
  7483.         
  7484.         $ok_soumission = '';
  7485.         $error = '';
  7486.         
  7487.         if($request->getMethod() == 'POST'){
  7488.             
  7489.                $form->handleRequest($request);
  7490.                if($form->isValid()){
  7491.                    $paymentMethod->setBoutique($boutique);
  7492.                   $em->persist($paymentMethod);
  7493.                   $em->flush();
  7494.         
  7495.                 $ok_soumission =" Votre message a été pris en compte";
  7496.                     
  7497.                 $paymentMethod = new PaymentMethod;
  7498.                 
  7499.                 $form = $this->createForm(PaymentMethodType::class, $paymentMethod);
  7500.                     
  7501.                 } else {
  7502.                     $error =" Veillez corrigez vos erreurs";
  7503.                 }
  7504.         }
  7505.     
  7506.         return $this->render('admin/new_payment_method.html.twig', [
  7507.            'boutique' => $boutique,
  7508.            'form' => $form->createView(),
  7509.            'userBoutique' => $userBoutique
  7510.         ]);
  7511.     }
  7512.     
  7513.     /**
  7514.      * @Route("/{slug}/payment-method/edit/{paymentMethod}", name="admin.edit_payment_method")
  7515.      * @return \Symfony\Component\HttpFoundation\Response
  7516.      */
  7517.     public function editPaymentMethodAction(Request $request,  $slug, $paymentMethod)
  7518.     {
  7519.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7520.            return $this->redirectToRoute('security_login');
  7521.         }
  7522.         $em = $this->getDoctrine()
  7523.                     ->getManager();
  7524.         
  7525.         $boutique = $em->getRepository(Boutique::class)
  7526.                     ->findOneBySlug($slug);
  7527.         $user = $this->getUser();
  7528.         $userBoutique = $em->getRepository(UserBoutique::class)
  7529.                         ->findOneBy(
  7530.                             array(
  7531.                             'user' => $user->getId(),
  7532.                             'boutique' => $boutique->getId()
  7533.                             )
  7534.                         );
  7535.         $paymentMethod = $em->getRepository(PaymentMethod::class)
  7536.                     ->findOneBy(
  7537.                         array(
  7538.                             'boutique' => $boutique->getId(),
  7539.                             'id' => $paymentMethod
  7540.                         )
  7541.                     );
  7542.         
  7543.         $form = $this->createForm(PaymentMethodEditType::class, $paymentMethod);
  7544.         
  7545.         $ok_soumission = '';
  7546.         $error = '';
  7547.         
  7548.         if($request->getMethod() == 'POST'){
  7549.             
  7550.                $form->handleRequest($request);
  7551.                if($form->isValid()){
  7552.                   $em->flush();
  7553.         
  7554.                 $ok_soumission =" Votre message a été pris en compte";
  7555.                     
  7556.                     
  7557.                 } else {
  7558.                     $error =" Veillez corrigez vos erreurs";
  7559.                 }
  7560.         }
  7561.     
  7562.         return $this->render('admin/edit_payment_method.html.twig', [
  7563.            'boutique' => $boutique,
  7564.            'paymentMethod' => $paymentMethod,
  7565.            'form' => $form->createView(),
  7566.            'userBoutique' => $userBoutique
  7567.         ]);
  7568.     }
  7569.     
  7570.     /**
  7571.      * @Route("/{slug}/payment-method/delete/{id}", name="admin.delete_payment_method")
  7572.      * @return \Symfony\Component\HttpFoundation\Response
  7573.      */
  7574.     public function deletePaymentMethodAction(Request $request, $slug, $id)
  7575.     {
  7576.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7577.            return $this->redirectToRoute('security_login');
  7578.         }
  7579.         $em = $this->getDoctrine()
  7580.                     ->getManager();
  7581.         $boutique = $em->getRepository(Boutique::class)
  7582.                         ->findOneBySlug($slug);
  7583.                         
  7584.         $paymentMethod = $em->getRepository(PaymentMethod::class)
  7585.                         ->findOneBy(
  7586.                         array(
  7587.                             'boutique' => $boutique->getId(),
  7588.                             'id' => $id
  7589.                         )
  7590.                         );
  7591.         if(null !== $paymentMethod){
  7592.             $em->remove($paymentMethod);
  7593.             $em->flush();
  7594.         }
  7595.         return $this->redirectToRoute('admin.payment_methods', array('slug' => $boutique->getSlug()));
  7596.     }
  7597.     
  7598.     /**
  7599.      * @Route("/{slug}/expensives/list", name="admin.expensives")
  7600.      * @return \Symfony\Component\HttpFoundation\Response
  7601.      */
  7602.     public function expensivesAction(Request $request, Boutique $boutique)
  7603.     {
  7604.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7605.            return $this->redirectToRoute('security_login');
  7606.         }
  7607.         $em = $this->getDoctrine()
  7608.                     ->getManager();
  7609.         
  7610.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  7611.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  7612.         $dateDebut->setTime(0, 0);
  7613.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  7614.         $dateFin->setTime(23, 59);
  7615.         
  7616.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  7617.         $startMonth = $intervalleMois['debut'];
  7618.         $endMonth = $intervalleMois['fin'];
  7619.         
  7620.         $expensives  = $em->getRepository(Expensive::class)
  7621.                         ->depenseParDate($boutique->getId(), $dateDebut, $dateFin);
  7622.         
  7623.         $startYear = date('Y-01-01');
  7624.         $endYear = date('Y-12-31');
  7625.         $user = $this->getUser();
  7626.         $userBoutique = $em->getRepository(UserBoutique::class)
  7627.                         ->findOneBy(
  7628.                             array(
  7629.                             'user' => $user->getId(),
  7630.                             'boutique' => $boutique->getId()
  7631.                             )
  7632.                         );
  7633.         if('POST' == $request->getMethod()){
  7634.             $dateDebut = $_POST['dateDebut'];
  7635.             $dateFin = $_POST['dateFin'];
  7636.             
  7637.             $dateDebut = new \DateTime($dateDebut);
  7638.             $dateFin = new \DateTime($dateFin);
  7639.             
  7640.             $expensives = $em->getRepository(Expensive::class)
  7641.                         ->depenseParDate($boutique->getId(), $dateDebut, $dateFin);
  7642.             
  7643.             
  7644.             return $this->render('admin/expensives_table_content.html.twig', [
  7645.                'boutique' => $boutique,
  7646.                'expensives' => $expensives,
  7647.                'userBoutique' => $userBoutique
  7648.             ]);
  7649.         }
  7650.         
  7651.             
  7652.         return $this->render('admin/expensives.html.twig', [
  7653.            'boutique' => $boutique,
  7654.            'expensives' => $expensives,
  7655.            'userBoutique' => $userBoutique,
  7656.            'intervalleDeDate' => $intervalleDeDate,
  7657.            'dateDebut' => $dateDebut,
  7658.            'dateFin' => $dateFin,
  7659.            'startMonth' => $startMonth,
  7660.            'intervalleMois' => $intervalleMois,
  7661.            'endMonth' => $endMonth,
  7662.            'startYear' => $startYear,
  7663.            'endYear' => $endYear
  7664.            
  7665.         ]);
  7666.     }
  7667.     
  7668.     /**
  7669.      * @Route("/{slug}/expensives/new", name="admin.new_expensive")
  7670.      * @return \Symfony\Component\HttpFoundation\Response
  7671.      */
  7672.     public function newExpensiveAction(Request $request, Boutique $boutique)
  7673.     {
  7674.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7675.            return $this->redirectToRoute('security_login');
  7676.         }
  7677.         $em = $this->getDoctrine()
  7678.                     ->getManager();
  7679.         
  7680.         $expensive = new Expensive;
  7681.         
  7682.         $user = $this->getUser();
  7683.         $userBoutique = $em->getRepository(UserBoutique::class)
  7684.                         ->findOneBy(
  7685.                             array(
  7686.                             'user' => $user->getId(),
  7687.                             'boutique' => $boutique->getId()
  7688.                             )
  7689.                         );
  7690.         $form = $this->createForm(ExpensiveType::class, $expensive, array('boutique' => $boutique->getId()));
  7691.         
  7692.         $ok_soumission = '';
  7693.         $error = '';
  7694.         $laDate = '';
  7695.         if($request->getMethod() == 'POST'){
  7696.             
  7697.                $form->handleRequest($request);
  7698.                if($form->isValid()){
  7699.                 $data = $form->getData();
  7700.                    $expensive->setBoutique($boutique);
  7701.                    $expensive->setCreePar($user);
  7702.                   $em->persist($expensive);
  7703.                   $em->flush();
  7704.         
  7705.                 $ok_soumission =" Votre message a été pris en compte";
  7706.                     
  7707.                 $moyenDePaiement = $request->request->get('moyenDePaiement');
  7708.                 $expensive->setMoyenDePaiement($moyenDePaiement);
  7709.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  7710.                 $libelle = 'Règlement fournisseur';
  7711.                 if($expensive->getTiers() != null){
  7712.                     $libelle = $libelle. ' '. $expensive->getTiers()->getNom();
  7713.                 }
  7714.                 $groupeEcritureComptable = new GroupeEcritureComptable;
  7715.                 $groupeEcritureComptable->setBoutique($boutique);
  7716.                 $groupeEcritureComptable->setLibelleEcriture($libelle);
  7717.                 $groupeEcritureComptable->setDebit($data->getMontant());
  7718.                 $groupeEcritureComptable->setCredit($data->getMontant());
  7719.                 $groupeEcritureComptable->setLaDate($data->getLaDate());
  7720.                 $groupeEcritureComptable->setNumeroPiece($data->getPiece());
  7721.                 $groupeEcritureComptable->setAnnee($data->getLaDate()->format('Y'));
  7722.                 $groupeEcritureComptable->setMois($data->getLaDate()->format('m'));
  7723.                 $em->persist($groupeEcritureComptable);
  7724.                 $em->flush();
  7725.                     
  7726.                 //Ecriture comptable
  7727.                 
  7728.                 //$ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  7729.                 if($moyenDePaiement == 'cash' || $moyenDePaiement == 'mobile-money'){
  7730.                     //Debit
  7731.                     
  7732.                     
  7733.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  7734.                     $ecritureComptable = new EcritureComptable;
  7735.                     
  7736.                     $ecritureComptable->setBoutique($boutique);
  7737.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  7738.                     
  7739.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  7740.                     $compte = $em->getRepository(Compte::class)
  7741.                                 ->findOneBy(
  7742.                                     array(
  7743.                                         'boutique' => $boutique,
  7744.                                         'numero' => '5711' //Caisse
  7745.                                     )    
  7746.                                 ); 
  7747.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  7748.                     $ecritureComptable->setCompte($compte);
  7749.                     $ecritureComptable->setLibelleEcriture($libelle);
  7750.                     $ecritureComptable->setCredit($data->getMontant());
  7751.                     $ecritureComptable->setSolde($compte->getSolde());
  7752.                     $ecritureComptable->setLaDate($data->getLaDate());
  7753.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  7754.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  7755.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  7756.                     $em->persist($ecritureComptable);
  7757.                     //Debit
  7758.                     $ecritureComptable = new EcritureComptable;
  7759.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  7760.                     $ecritureComptable->setBoutique($boutique);
  7761.                     
  7762.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  7763.                     $compte = $em->getRepository(Compte::class)
  7764.                                 ->findOneBy(
  7765.                                     array(
  7766.                                         'boutique' => $boutique,
  7767.                                         'numero' => '658'
  7768.                                     )    
  7769.                                 ); //Charge divers
  7770.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  7771.                     $ecritureComptable->setCompte($compte);
  7772.                     $ecritureComptable->setLibelleEcriture($libelle);
  7773.                     $ecritureComptable->setDebit($data->getMontant());
  7774.                     $ecritureComptable->setSolde($compte->getSolde());
  7775.                     $ecritureComptable->setLaDate($data->getLaDate());
  7776.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  7777.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  7778.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  7779.                     $em->persist($ecritureComptable);
  7780.                 }else{
  7781.                     $leJournal = $boutique->getSettings()->getJournalDeBanque();
  7782.                     
  7783.                     $groupeEcritureComptable->setLeJournal($leJournal);
  7784.                     $ecritureComptable = new EcritureComptable;
  7785.                     
  7786.                     $ecritureComptable->setBoutique($boutique);
  7787.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  7788.                     
  7789.                     $ecritureComptable->setLeJournal($leJournal);
  7790.                     $compte = $em->getRepository(Compte::class)
  7791.                                 ->findOneBy(
  7792.                                     array(
  7793.                                         'boutique' => $boutique,
  7794.                                         'numero' => '521'
  7795.                                     )    
  7796.                                 ); //Banque
  7797.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  7798.                     $ecritureComptable->setCompte($compte);
  7799.                     $ecritureComptable->setLibelleEcriture($libelle);
  7800.                     $ecritureComptable->setCredit($data->getMontant());
  7801.                     $ecritureComptable->setSolde($compte->getSolde());
  7802.                     $ecritureComptable->setLaDate($data->getLaDate());
  7803.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  7804.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  7805.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  7806.                     $em->persist($ecritureComptable);
  7807.                     //Debit
  7808.                     $ecritureComptable = new EcritureComptable;
  7809.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  7810.                     $ecritureComptable->setBoutique($boutique);
  7811.                     
  7812.                     $ecritureComptable->setLeJournal($leJournal);
  7813.                     $compte = $em->getRepository(Compte::class)
  7814.                                 ->findOneBy(
  7815.                                     array(
  7816.                                         'boutique' => $boutique,
  7817.                                         'numero' => '658'
  7818.                                     )    
  7819.                                 ); //Charge divers
  7820.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  7821.                     $ecritureComptable->setCompte($compte);
  7822.                     $ecritureComptable->setLibelleEcriture($libelle);
  7823.                     $ecritureComptable->setDebit($data->getMontant());
  7824.                     $ecritureComptable->setSolde($compte->getSolde());
  7825.                     $ecritureComptable->setLaDate($data->getLaDate());
  7826.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  7827.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  7828.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  7829.                     $em->persist($ecritureComptable);
  7830.                 }
  7831.                 }
  7832.                 $em->flush();
  7833.                 $expensive = new Expensive;
  7834.                 
  7835.                 $form = $this->createForm(ExpensiveType::class, $expensive);
  7836.                     
  7837.                 } else {
  7838.                     $error =" Veillez corrigez vos erreurs";
  7839.                 }
  7840.         }
  7841.     
  7842.         return $this->render('admin/new_expensive.html.twig', [
  7843.            'boutique' => $boutique,
  7844.            'form' => $form->createView(),
  7845.            'userBoutique' => $userBoutique
  7846.         ]);
  7847.     }
  7848.     
  7849.     /**
  7850.      * @Route("/{slug}/expensive/edit/{id}", name="admin.edit_expensive")
  7851.      * @return \Symfony\Component\HttpFoundation\Response
  7852.      */
  7853.     public function editExpensivesAction(Request $request,  $slug, $id)
  7854.     {
  7855.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7856.            return $this->redirectToRoute('security_login');
  7857.         }
  7858.         $em = $this->getDoctrine()
  7859.                     ->getManager();
  7860.         
  7861.         $boutique = $em->getRepository(Boutique::class)
  7862.                     ->findOneBySlug($slug);
  7863.         $user = $this->getUser();
  7864.         $userBoutique = $em->getRepository(UserBoutique::class)
  7865.                         ->findOneBy(
  7866.                             array(
  7867.                             'user' => $user->getId(),
  7868.                             'boutique' => $boutique->getId()
  7869.                             )
  7870.                         );
  7871.         $expensive = $em->getRepository(Expensive::class)
  7872.                     ->findOneBy(
  7873.                         array(
  7874.                             'boutique' => $boutique->getId(),
  7875.                             'id' => $id
  7876.                         )
  7877.                     );
  7878.         
  7879.         $form = $this->createForm(ExpensiveEditType::class, $expensive, array('boutique' => $boutique->getId()));
  7880.         
  7881.         $ok_soumission = '';
  7882.         $error = '';
  7883.         
  7884.         if($request->getMethod() == 'POST'){
  7885.             
  7886.                $form->handleRequest($request);
  7887.                if($form->isValid()){
  7888.                 $expensive->setModifiePar($user);
  7889.                   $em->flush();
  7890.         
  7891.                 $ok_soumission =" Votre message a été pris en compte";
  7892.                     
  7893.                     
  7894.                 } else {
  7895.                     $error =" Veillez corrigez vos erreurs";
  7896.                 }
  7897.         }
  7898.     
  7899.         return $this->render('admin/edit_expensive.html.twig', [
  7900.            'boutique' => $boutique,
  7901.            'expensive' => $expensive,
  7902.            'form' => $form->createView(),
  7903.            'userBoutique' => $userBoutique
  7904.         ]);
  7905.     }
  7906.     
  7907.     /**
  7908.      * @Route("/{slug}/expensive/delete/{id}", name="admin.delete_expensive")
  7909.      * @return \Symfony\Component\HttpFoundation\Response
  7910.      */
  7911.     public function deleteExpensiveAction(Request $request, $slug, $id)
  7912.     {
  7913.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7914.            return $this->redirectToRoute('security_login');
  7915.         }
  7916.         $em = $this->getDoctrine()
  7917.                     ->getManager();
  7918.         $boutique = $em->getRepository(Boutique::class)
  7919.                         ->findOneBySlug($slug);
  7920.         $user = $this->getUser();
  7921.                         
  7922.         $expensive = $em->getRepository(Expensive::class)
  7923.                         ->findOneBy(
  7924.                         array(
  7925.                             'boutique' => $boutique->getId(),
  7926.                             'id' => $id
  7927.                         )
  7928.                         );
  7929.         if(null !== $expensive){
  7930.             $expensive->setEstSupprime(true);
  7931.             $expensive->setSupprimePar($user);
  7932.             //$em->remove($expensive);
  7933.             $em->flush();
  7934.         }
  7935.         return $this->redirectToRoute('admin.expensives', array('slug' => $boutique->getSlug()));
  7936.     }
  7937.     /**
  7938.      * @Route("/{slug}/categorie-depense/list", name="admin_categorie_depenses")
  7939.      * @return \Symfony\Component\HttpFoundation\Response
  7940.      */
  7941.     public function categorieDepenseAction(Request $request, Boutique $boutique)
  7942.     {
  7943.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7944.            return $this->redirectToRoute('security_login');
  7945.         }
  7946.         $em = $this->getDoctrine()
  7947.                     ->getManager();
  7948.         
  7949.         $categorieDepenses  = $em->getRepository(CategorieDepense::class)
  7950.                         ->findBy(
  7951.                             array(
  7952.                                 'boutique' => $boutique->getId()
  7953.                             )    
  7954.                         );
  7955.         
  7956.         $user = $this->getUser();
  7957.         $userBoutique = $em->getRepository(UserBoutique::class)
  7958.                         ->findOneBy(
  7959.                             array(
  7960.                             'user' => $user->getId(),
  7961.                             'boutique' => $boutique->getId()
  7962.                             )
  7963.                         );
  7964.         
  7965.         
  7966.             
  7967.         return $this->render('admin/categorie_depenses.html.twig', [
  7968.            'boutique' => $boutique,
  7969.            'userBoutique' => $userBoutique,
  7970.            'categorieDepenses' => $categorieDepenses
  7971.            
  7972.         ]);
  7973.     }
  7974.     
  7975.     /**
  7976.      * @Route("/{slug}/categorie-depense/nouveau", name="admin_nouvelle_categorie_dedepense")
  7977.      * @return \Symfony\Component\HttpFoundation\Response
  7978.      */
  7979.     public function nouvelleCategorieDepenseAction(Request $request, Boutique $boutique)
  7980.     {
  7981.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7982.            return $this->redirectToRoute('security_login');
  7983.         }
  7984.         $em = $this->getDoctrine()
  7985.                     ->getManager();
  7986.         
  7987.         $categorieDepense = new CategorieDepense;
  7988.         
  7989.         $user = $this->getUser();
  7990.         $userBoutique = $em->getRepository(UserBoutique::class)
  7991.                         ->findOneBy(
  7992.                             array(
  7993.                             'user' => $user->getId(),
  7994.                             'boutique' => $boutique->getId()
  7995.                             )
  7996.                         );
  7997.         $form = $this->createForm(CategorieDepenseType::class, $categorieDepense);
  7998.         
  7999.         $ok_soumission = '';
  8000.         
  8001.         if($request->getMethod() == 'POST'){
  8002.             
  8003.                $form->handleRequest($request);
  8004.                if($form->isValid()){
  8005.                 $categorieDepense->setBoutique($boutique);
  8006.                   $em->persist($categorieDepense);
  8007.                   $em->flush();
  8008.         
  8009.                 $ok_soumission =" Votre message a été pris en compte";
  8010.                     
  8011.                 $categorieDepense = new CategorieDepense;
  8012.                 
  8013.                 $form = $this->createForm(CategorieDepenseType::class, $categorieDepense);
  8014.                     
  8015.                 } else {
  8016.                     $error =" Veillez corrigez vos erreurs";
  8017.                 }
  8018.         }
  8019.     
  8020.         return $this->render('admin/nouvelle_categorie_depense.html.twig', [
  8021.            'boutique' => $boutique,
  8022.            'form' => $form->createView(),
  8023.            'userBoutique' => $userBoutique
  8024.         ]);
  8025.     }
  8026.     
  8027.     /**
  8028.      * @Route("/{slug}/categorie-depense/modifier/{id}", name="admin_modifier_categorie_depense")
  8029.      * @return \Symfony\Component\HttpFoundation\Response
  8030.      */
  8031.     public function modifierCategorieDepenseAction(Request $request,  $slug, $id)
  8032.     {
  8033.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8034.            return $this->redirectToRoute('security_login');
  8035.         }
  8036.         $em = $this->getDoctrine()
  8037.                     ->getManager();
  8038.         
  8039.         $boutique = $em->getRepository(Boutique::class)
  8040.                     ->findOneBySlug($slug);
  8041.         $user = $this->getUser();
  8042.         $userBoutique = $em->getRepository(UserBoutique::class)
  8043.                         ->findOneBy(
  8044.                             array(
  8045.                             'user' => $user->getId(),
  8046.                             'boutique' => $boutique->getId()
  8047.                             )
  8048.                         );
  8049.         $categorieDepense = $em->getRepository(CategorieDepense::class)
  8050.                     ->findOneBy(
  8051.                         array(
  8052.                             'boutique' => $boutique->getId(),
  8053.                             'id' => $id
  8054.                         )
  8055.                     );
  8056.         
  8057.         $form = $this->createForm(CategorieDepenseEditType::class, $categorieDepense);
  8058.         
  8059.         $ok_soumission = '';
  8060.         $error = '';
  8061.         
  8062.         if($request->getMethod() == 'POST'){
  8063.             
  8064.                $form->handleRequest($request);
  8065.                if($form->isValid()){
  8066.                 
  8067.                   $em->flush();
  8068.         
  8069.                 $ok_soumission =" Votre message a été pris en compte";
  8070.                     
  8071.                     
  8072.                 } else {
  8073.                     $error =" Veillez corrigez vos erreurs";
  8074.                 }
  8075.         }
  8076.     
  8077.         return $this->render('admin/modifier_categorie_depense.html.twig', [
  8078.            'boutique' => $boutique,
  8079.            'categorieDepense' => $categorieDepense,
  8080.            'form' => $form->createView(),
  8081.            'userBoutique' => $userBoutique
  8082.         ]);
  8083.     }
  8084.     
  8085.     /**
  8086.      * @Route("/{slug}/categorie-depense/supprimer/{id}", name="admin_supprimer_categorie_depense")
  8087.      * @return \Symfony\Component\HttpFoundation\Response
  8088.      */
  8089.     public function supprimerCategorieDepenseAction(Request $request, $slug, $id)
  8090.     {
  8091.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8092.            return $this->redirectToRoute('security_login');
  8093.         }
  8094.         $em = $this->getDoctrine()
  8095.                     ->getManager();
  8096.         $boutique = $em->getRepository(Boutique::class)
  8097.                         ->findOneBySlug($slug);
  8098.         $user = $this->getUser();
  8099.                         
  8100.         $categorieDepense = $em->getRepository(CategorieDepense::class)
  8101.                         ->findOneBy(
  8102.                         array(
  8103.                             'boutique' => $boutique->getId(),
  8104.                             'id' => $id
  8105.                         )
  8106.                         );
  8107.         if(null !== $categorieDepense){
  8108.             
  8109.             $em->remove($categorieDepense);
  8110.             $em->flush();
  8111.         }
  8112.         return $this->redirectToRoute('admin_categorie_depenses', array('slug' => $boutique->getSlug()));
  8113.     }
  8114.     
  8115.     
  8116.     /**
  8117.      * @Route("/{slug}/third/list", name="admin.liste_tiers")
  8118.      * @return \Symfony\Component\HttpFoundation\Response
  8119.      */
  8120.     public function listeTiersAction(Request $request, Boutique $boutique)
  8121.     {
  8122.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8123.            return $this->redirectToRoute('security_login');
  8124.         }
  8125.         $em = $this->getDoctrine()
  8126.                     ->getManager();
  8127.         
  8128.         $tiers = $em->getRepository(Tiers::class)
  8129.                     ->findBy(
  8130.                         array(
  8131.                             'boutique' => $boutique->getId(),
  8132.                             'estSupprime' => false
  8133.                             
  8134.                         ),
  8135.                         array(
  8136.                             'nom' => 'ASC'
  8137.                         )
  8138.                         );
  8139.         $user = $this->getUser();
  8140.         $userBoutique = $em->getRepository(UserBoutique::class)
  8141.                         ->findOneBy(
  8142.                             array(
  8143.                             'user' => $user->getId(),
  8144.                             'boutique' => $boutique->getId()
  8145.                             )
  8146.                         );
  8147.         return $this->render('admin/liste_tiers.html.twig', [
  8148.            'boutique' => $boutique,
  8149.            'tiers' => $tiers,
  8150.            'userBoutique' => $userBoutique
  8151.         ]);
  8152.     }
  8153.     
  8154.     //Service
  8155.     
  8156.     /**
  8157.      * @Route("/{slug}/new-third", name="admin.new_third")
  8158.      * @return \Symfony\Component\HttpFoundation\Response
  8159.      */
  8160.     public function newThirdAction(Request $request, Boutique $boutique)
  8161.     {
  8162.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8163.            return $this->redirectToRoute('security_login');
  8164.         }
  8165.         $em = $this->getDoctrine()
  8166.                     ->getManager();
  8167.         
  8168.         $tiers = new Tiers;
  8169.         $form = $this->createForm(TiersType::class, $tiers);
  8170.         
  8171.         $user = $this->getUser();
  8172.         $userBoutique = $em->getRepository(UserBoutique::class)
  8173.                         ->findOneBy(
  8174.                             array(
  8175.                             'user' => $user->getId(),
  8176.                             'boutique' => $boutique->getId()
  8177.                             )
  8178.                         );
  8179.         
  8180.         $ok_soumission = '';
  8181.         $error = '';
  8182.         
  8183.         if($request->getMethod() == 'POST'){
  8184.             
  8185.                $form->handleRequest($request);
  8186.                if($form->isValid()){
  8187.                    $tiers->setBoutique($boutique);
  8188.                    $tiers->setCreePar($user);
  8189.                   $em->persist($tiers);
  8190.                   $em->flush();
  8191.         
  8192.                 $ok_soumission =" Votre message a été pris en compte";
  8193.                 $tiers = new Tiers;
  8194.                 
  8195.                 $form = $this->createForm(TiersType::class, $tiers);
  8196.                     
  8197.                 } else {
  8198.                     $error =" Veillez corrigez vos erreurs";
  8199.                 }
  8200.         }
  8201.         return $this->render('admin/nouveau_tiers.html.twig', [
  8202.            'boutique' => $boutique,
  8203.            'form' => $form->createView(),
  8204.            'userBoutique' => $userBoutique
  8205.         ]);
  8206.     }
  8207.     /**
  8208.      * @Route("/{slug}/edit-third/{third}", name="admin.edit_third")
  8209.      * @return \Symfony\Component\HttpFoundation\Response
  8210.      */
  8211.     public function editThirdAction(Request $request, Boutique $boutique, $third)
  8212.     {
  8213.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8214.            return $this->redirectToRoute('security_login');
  8215.         }
  8216.         $em = $this->getDoctrine()
  8217.                     ->getManager();
  8218.                     
  8219.         $user = $this->getUser();
  8220.         $userBoutique = $em->getRepository(UserBoutique::class)
  8221.                         ->findOneBy(
  8222.                             array(
  8223.                             'user' => $user->getId(),
  8224.                             'boutique' => $boutique->getId()
  8225.                             )
  8226.                         );
  8227.         $third = $em->getRepository(Tiers::class)
  8228.                     ->findOneById($third);
  8229.         $form = $this->createForm(TiersEditType::class, $third);
  8230.         
  8231.         $ok_soumission = '';
  8232.         $error = '';
  8233.         
  8234.         if($request->getMethod() == 'POST'){
  8235.             
  8236.                $form->handleRequest($request);
  8237.                if($form->isValid()){
  8238.                     $third->setModifiePar($user);
  8239.                   $em->flush();
  8240.         
  8241.                 $ok_soumission =" Votre message a été pris en compte";
  8242.                     
  8243.                 } else {
  8244.                     $error =" Veillez corrigez vos erreurs";
  8245.                 }
  8246.         }
  8247.         return $this->render('admin/edit_third.html.twig', [
  8248.            'boutique' => $boutique,
  8249.            'form' => $form->createView(),
  8250.            'third' => $third,
  8251.            'userBoutique' => $userBoutique
  8252.         ]);
  8253.     }
  8254.     /**
  8255.      * @Route("/{slug}/delete-third/{third}", name="admin.delete_third")
  8256.      * @return \Symfony\Component\HttpFoundation\Response
  8257.      */
  8258.     public function deleteThirdAction(Request $request, Boutique $boutique, $third)
  8259.     {
  8260.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8261.            return $this->redirectToRoute('security_login');
  8262.         }
  8263.         $em = $this->getDoctrine()
  8264.                     ->getManager();
  8265.         $user = $this->getUser();
  8266.         $third = $em->getRepository(Tiers::class)
  8267.                     ->findOneById($third);
  8268.                     
  8269.         if(null != $third){
  8270.             $third->setEstSupprime(true);
  8271.             $third->setSupprimePar($user);
  8272.             $em->flush();
  8273.         }
  8274.         
  8275.         return $this->redirectToRoute('admin.liste_tiers', array('slug' => $boutique->getSlug()));
  8276.     }
  8277.     /**
  8278.      * @Route("/{slug}/statistics", name="admin.statistics")
  8279.      * @return \Symfony\Component\HttpFoundation\Response
  8280.      */
  8281.     public function statisticsAction(Request $request, Boutique $boutique)
  8282.     {
  8283.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8284.            return $this->redirectToRoute('security_login');
  8285.         }
  8286.         $em = $this->getDoctrine()
  8287.                     ->getManager();
  8288.         
  8289.         $tiers = $em->getRepository(Tiers::class)
  8290.                     ->findByBoutique($boutique);
  8291.         $user = $this->getUser();
  8292.         $userBoutique = $em->getRepository(UserBoutique::class)
  8293.                         ->findOneBy(
  8294.                             array(
  8295.                             'user' => $user->getId(),
  8296.                             'boutique' => $boutique->getId()
  8297.                             )
  8298.                         );
  8299.                         
  8300.         return $this->render('admin/statistics.html.twig', [
  8301.            'boutique' => $boutique,
  8302.            'tiers' => $tiers,
  8303.            'userBoutique' => $userBoutique
  8304.         ]);
  8305.     }
  8306.     
  8307.     /**
  8308.      * @Route("/{slug}/promotions", name="admin.promotions")
  8309.      * @return \Symfony\Component\HttpFoundation\Response
  8310.      */
  8311.     public function promotionsAction(Request $request, Boutique $boutique)
  8312.     {
  8313.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8314.            return $this->redirectToRoute('security_login');
  8315.         }
  8316.         $em = $this->getDoctrine()
  8317.                     ->getManager();
  8318.         
  8319.         $tiers = $em->getRepository(Tiers::class)
  8320.                     ->findByBoutique($boutique);
  8321.         $user = $this->getUser();
  8322.         $userBoutique = $em->getRepository(UserBoutique::class)
  8323.                         ->findOneBy(
  8324.                             array(
  8325.                             'user' => $user->getId(),
  8326.                             'boutique' => $boutique->getId()
  8327.                             )
  8328.                         );
  8329.         return $this->render('admin/liste_tiers.html.twig', [
  8330.            'boutique' => $boutique,
  8331.            'tiers' => $tiers,
  8332.            'userBoutique' => $userBoutique
  8333.         ]);
  8334.     }
  8335.     
  8336.     /**
  8337.      * @Route("/{slug}/new-payment-patern", name="admin.new_payment_patern")
  8338.      * @return \Symfony\Component\HttpFoundation\Response
  8339.      */
  8340.     public function newPayementPaternMethodAction(Request $request, Boutique $boutique)
  8341.     {
  8342.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8343.            return $this->redirectToRoute('security_login');
  8344.         }
  8345.         $em = $this->getDoctrine()
  8346.                     ->getManager();
  8347.         
  8348.         $modeleReglement = new ModeleReglement;
  8349.         $form = $this->createForm(ModeleReglementType::class, $modeleReglement);
  8350.         
  8351.         $ok_soumission = '';
  8352.         $error = '';
  8353.         $user = $this->getUser();
  8354.         $userBoutique = $em->getRepository(UserBoutique::class)
  8355.                         ->findOneBy(
  8356.                             array(
  8357.                             'user' => $user->getId(),
  8358.                             'boutique' => $boutique->getId()
  8359.                             )
  8360.                         );
  8361.         if($request->getMethod() == 'POST'){
  8362.             
  8363.                $form->handleRequest($request);
  8364.                if($form->isValid()){
  8365.                    $modeleReglement->setBoutique($boutique);
  8366.                   $em->persist($modeleReglement);
  8367.                   $em->flush();
  8368.         
  8369.                 $ok_soumission =" Votre message a été pris en compte";
  8370.                     
  8371.                 unset($modeleReglement);
  8372.                 unset($form);
  8373.                 $modeleReglement = new ModeleReglement;
  8374.                 
  8375.                 $form = $this->createForm(ModeleReglementType::class, $modeleReglement);
  8376.                     
  8377.                 } else {
  8378.                     $error =" Veillez corrigez vos erreurs";
  8379.                 }
  8380.         }
  8381.         return $this->render('admin/nouveau_modele_reglement.html.twig', [
  8382.            'boutique' => $boutique, 
  8383.            'form' => $form->createView(),
  8384.            'userBoutique' => $userBoutique
  8385.         ]);
  8386.     }
  8387.     
  8388.     /**
  8389.      * @Route("/{slug}/payment-patern/list", name="admin.list_payment_patern")
  8390.      * @return \Symfony\Component\HttpFoundation\Response
  8391.      */
  8392.     public function listeModeleReglementAction(Request $request, Boutique $boutique)
  8393.     {
  8394.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8395.            return $this->redirectToRoute('security_login');
  8396.         }
  8397.         $em = $this->getDoctrine()
  8398.                     ->getManager();
  8399.         
  8400.         $modeleReglements = $em->getRepository(ModeleReglement::class)
  8401.                     ->findByBoutique($boutique);
  8402.         $user = $this->getUser();
  8403.         $userBoutique = $em->getRepository(UserBoutique::class)
  8404.                         ->findOneBy(
  8405.                             array(
  8406.                             'user' => $user->getId(),
  8407.                             'boutique' => $boutique->getId()
  8408.                             )
  8409.                         );
  8410.                         
  8411.         return $this->render('admin/liste_modele_reglement.html.twig', [
  8412.            'boutique' => $boutique,
  8413.            'modeleReglements' => $modeleReglements,
  8414.            'userBoutique' => $userBoutique
  8415.         ]);
  8416.     }
  8417.     
  8418.     /**
  8419.      * @Route("/{slug}/send-document-mail/{id}", name="admin.send_document_mail")
  8420.      * @return \Symfony\Component\HttpFoundation\Response
  8421.      */
  8422.     public function sendDocumentMailAction(Request $request, MailerInterface $mailer, $slug, $id)
  8423.     {
  8424.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8425.            return $this->redirectToRoute('security_login');
  8426.         }
  8427.         $em = $this->getDoctrine()
  8428.                     ->getManager();
  8429.         $boutique = $em->getRepository(Boutique::class)
  8430.                         ->findOneBySlug($slug);
  8431.         $user = $this->getUser();
  8432.         $userBoutique = $em->getRepository(UserBoutique::class)
  8433.                         ->findOneBy(
  8434.                             array(
  8435.                             'user' => $user->getId(),
  8436.                             'boutique' => $boutique->getId()
  8437.                             )
  8438.                         );        
  8439.         $commande = $em->getRepository(Commande::class)
  8440.                     ->findOneBy(
  8441.                         array(
  8442.                         'boutique' => $boutique->getId(),
  8443.                         'id' => $id
  8444.                         )
  8445.                     );
  8446.         
  8447.         $appName = $this->getParameter('app_name');
  8448.         if('POST'== $request->getMethod()){
  8449.             $from = $_POST['from'];
  8450.             $to = $_POST['to_mail'];
  8451.             $subject = $_POST['subject'];
  8452.             $contenu = $_POST['message'];
  8453.             $sendAttachment = (bool)$_POST['send_attachment'];
  8454.             
  8455.             /*
  8456.             $message = (new \Swift_Message($subject))
  8457.             ->setFrom([$from  => $appName])
  8458.             ->setTo([$to])
  8459.             ->setBody(
  8460.                 $this->renderView(
  8461.                 'admin/document_email.html.twig',
  8462.                 [
  8463.                 'message' => $contenu
  8464.                 ]
  8465.                 ),
  8466.             'text/html'
  8467.             );
  8468.             
  8469.             if($sendAttachment){
  8470.                 $message->attach(\Swift_Attachment::fromPath($commande->getLienPDF()));
  8471.             }
  8472.             
  8473.             $mailer->send($message);
  8474.             */
  8475.             //Nouveau mailer
  8476.         $from = $_POST['from'];
  8477.             $to = $_POST['to_mail'];
  8478.             $subject = $_POST['subject'];
  8479.             $contenu = $_POST['message'];
  8480.             $sendAttachment = (bool)$_POST['send_attachment'];
  8481.             
  8482.             
  8483.             $email = (new TemplatedEmail())
  8484.                 ->from($from)
  8485.                 ->to($to)
  8486.                 ->subject($subject)
  8487.                 ->htmlTemplate('email/document_email.html.html.twig')
  8488.                 ->context([
  8489.                     'contenu' => $contenu
  8490.                 ]);
  8491.                 //$mailer->send($email); // Dispatches the message
  8492.             
  8493.         }
  8494.         
  8495.         return $this->render('admin/send_document_mail.html.twig', [
  8496.            'boutique' => $boutique,
  8497.            'commande' => $commande,
  8498.            'userBoutique' => $userBoutique
  8499.         ]);
  8500.     }
  8501.     
  8502.     
  8503.     /**
  8504.      * @Route("/{slug}/nombre-commande-en-retard", name="admin.nombre_commande_en_retard")
  8505.      * @return \Symfony\Component\HttpFoundation\Response
  8506.      */
  8507.     public function nombreCommandeEnRetard(Request $request, Boutique $boutique)
  8508.     {
  8509.         $em = $this->getDoctrine()
  8510.                     ->getManager();
  8511.         $nombreCommandeEnRetard = $em->getRepository(Commande::class)
  8512.                         -> nombreCommandeEnRetard($boutique->getId());
  8513.                         
  8514.         $nombreCommandeEnRetard = count($nombreCommandeEnRetard);
  8515.         $user = $this->getUser();
  8516.         $userBoutique = $em->getRepository(UserBoutique::class)
  8517.                         ->findOneBy(
  8518.                             array(
  8519.                             'user' => $user->getId(),
  8520.                             'boutique' => $boutique->getId()
  8521.                             )
  8522.                         );
  8523.         return $this->render('admin/nombre_commande_en_retard.html.twig', [
  8524.            'boutique' => $boutique,
  8525.            'nombreCommandeEnRetard' => $nombreCommandeEnRetard,
  8526.            'userBoutique' => $userBoutique
  8527.         ]);
  8528.     }
  8529.     
  8530.     /**
  8531.      * @Route("/{slug}/liste-commande-en-retard", name="admin.liste_commande_en_retard")
  8532.      * @return \Symfony\Component\HttpFoundation\Response
  8533.      */
  8534.     public function listeCommandeEnRetard(Request $request, Boutique $boutique)
  8535.     {
  8536.         $em = $this->getDoctrine()
  8537.                     ->getManager();
  8538.         $nombreCommandeEnRetards = $em->getRepository(Commande::class)
  8539.                         -> nombreCommandeEnRetard($boutique->getId());
  8540.                         
  8541.         $user = $this->getUser();
  8542.         $userBoutique = $em->getRepository(UserBoutique::class)
  8543.                         ->findOneBy(
  8544.                             array(
  8545.                             'user' => $user->getId(),
  8546.                             'boutique' => $boutique->getId()
  8547.                             )
  8548.                         );
  8549.         
  8550.         return $this->render('admin/liste_commande_en_retard.html.twig', [
  8551.            'boutique' => $boutique,
  8552.            'nombreCommandeEnRetards' => $nombreCommandeEnRetards,
  8553.            'userBoutique' => $userBoutique
  8554.         ]);
  8555.     }
  8556.     
  8557.     /**
  8558.      * @Route("/{slug}/my-invoices", name="admin.my_invoices")
  8559.      * @return \Symfony\Component\HttpFoundation\Response
  8560.      */
  8561.     public function myInvoicesAction(Request $request, Boutique $boutique)
  8562.     {
  8563.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8564.            return $this->redirectToRoute('security_login');
  8565.         }
  8566.         $em = $this->getDoctrine()
  8567.                     ->getManager();
  8568.                     
  8569.         
  8570.                         
  8571.         $toutesLesValiditeServices = $em->getRepository(ValiditeService::class)
  8572.                     ->toutesLesValiditeService($boutique->getId());
  8573.                     
  8574.         
  8575.         $user = $this->getUser();
  8576.         $userBoutique = $em->getRepository(UserBoutique::class)
  8577.                         ->findOneBy(
  8578.                             array(
  8579.                             'user' => $user->getId(),
  8580.                             'boutique' => $boutique->getId()
  8581.                             )
  8582.                         );
  8583.                         
  8584.         return $this->render('admin/my_invoices.html.twig', [
  8585.            'toutesLesValiditeServices' => $toutesLesValiditeServices,
  8586.            'boutique' => $boutique,
  8587.            'userBoutique' => $userBoutique
  8588.         ]);
  8589.     }
  8590.     
  8591.     /**
  8592.      * @Route("/{slug}/my-tickets/{id}", name="admin.my_tickets")
  8593.      * @return \Symfony\Component\HttpFoundation\Response
  8594.      */
  8595.     public function myTicketsAction(Request $request, $slug, $id)
  8596.     {
  8597.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8598.            return $this->redirectToRoute('security_login');
  8599.         }
  8600.         $em = $this->getDoctrine()
  8601.                     ->getManager();
  8602.                     
  8603.         $boutique = $em->getRepository(Boutique::class)
  8604.                         ->findOneBySlug($slug);
  8605.         $user = $this->getUser();
  8606.         $userBoutique = $em->getRepository(UserBoutique::class)
  8607.                         ->findOneBy(
  8608.                             array(
  8609.                             'user' => $user->getId(),
  8610.                             'boutique' => $boutique->getId()
  8611.                             )
  8612.                         );
  8613.         
  8614.         $tickets = $em->getRepository(Ticket::class)
  8615.                         ->findBy(
  8616.                             array(
  8617.                                 'boutique'=>$boutique->getId(),
  8618.                                 'user' => $user->getId()
  8619.                             )
  8620.                         );
  8621.         
  8622.         return $this->render('admin/my_tickets.html.twig', [
  8623.            'boutique' => $boutique,
  8624.            'tickets'  => $tickets,
  8625.            'userBoutique' => $userBoutique
  8626.         ]);
  8627.     }
  8628.     
  8629.     /**
  8630.      * @Route("/{slug}/new-ticket", name="admin.new_ticket")
  8631.      * @return \Symfony\Component\HttpFoundation\Response
  8632.      */
  8633.     public function newTicketAction(Request $request, $slug)
  8634.     {
  8635.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8636.            return $this->redirectToRoute('security_login');
  8637.         }
  8638.         $em = $this->getDoctrine()
  8639.                     ->getManager();
  8640.                     
  8641.         $boutique = $em->getRepository(Boutique::class)
  8642.                         ->findOneBySlug($slug);
  8643.         $user = $this->getUser();
  8644.         
  8645.         $ticket = new Ticket;
  8646.         
  8647.         $user = $this->getUser();
  8648.         $userBoutique = $em->getRepository(UserBoutique::class)
  8649.                         ->findOneBy(
  8650.                             array(
  8651.                             'user' => $user->getId(),
  8652.                             'boutique' => $boutique->getId()
  8653.                             )
  8654.                         );
  8655.         $form = $this->createForm(TicketType::class, $ticket);
  8656.         
  8657.         $ok_soumission = '';
  8658.         $error = '';
  8659.         
  8660.         if($request->getMethod() == 'POST'){
  8661.             
  8662.                $form->handleRequest($request);
  8663.                if($form->isValid()){
  8664.                    $ticket->setBoutique($boutique);
  8665.                    $ticket->setUser($user);
  8666.                    
  8667.                   $em->persist($ticket);
  8668.                   $em->flush();
  8669.                   
  8670.                 return $this->redirectToRoute('admin.display_ticket', array('slug' => $boutique->getSlug(), 'id' => $ticket->getId()));
  8671.                 $ok_soumission =" Votre message a été pris en compte";
  8672.                     
  8673.                 $ticket = new Ticket;
  8674.                 
  8675.                 $form = $this->createForm(TicketType::class, $ticket);
  8676.                     
  8677.                 } else {
  8678.                     $error =" Veillez corrigez vos erreurs";
  8679.                 }
  8680.         }
  8681.         
  8682.         return $this->render('admin/new_ticket.html.twig', [
  8683.            'boutique' => $boutique,
  8684.            'form' => $form->createView(),
  8685.            'userBoutique' => $userBoutique
  8686.         ]);
  8687.     }
  8688.     
  8689.     /**
  8690.      * @Route("/{slug}/display-ticket/{id}", name="admin.display_ticket")
  8691.      * @return \Symfony\Component\HttpFoundation\Response
  8692.      */
  8693.     public function displayTicketAction(Request $request, $slug, $id)
  8694.     {
  8695.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8696.            return $this->redirectToRoute('security_login');
  8697.         }
  8698.         $em = $this->getDoctrine()
  8699.                     ->getManager();
  8700.                     
  8701.         $boutique = $em->getRepository(Boutique::class)
  8702.                         ->findOneBySlug($slug);
  8703.         $user = $this->getUser();
  8704.         $userBoutique = $em->getRepository(UserBoutique::class)
  8705.                         ->findOneBy(
  8706.                             array(
  8707.                             'user' => $user->getId(),
  8708.                             'boutique' => $boutique->getId()
  8709.                             )
  8710.                         );
  8711.         
  8712.         $ticket = $em->getRepository(Ticket::class)
  8713.                     ->findOneBy(
  8714.                         array(
  8715.                             'boutique' => $boutique->getId(),
  8716.                             'id' => $id
  8717.                         )
  8718.                     );
  8719.         $commentaires = $em->getRepository(CommentaireTicket::class)
  8720.                             ->findByTicket($ticket->getId());
  8721.         $commentaireTicket = new CommentaireTicket;
  8722.         
  8723.         $user = $this->getUser();
  8724.         $form = $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  8725.         
  8726.         $ok_soumission = '';
  8727.         $error = '';
  8728.         
  8729.         if($request->getMethod() == 'POST'){
  8730.             
  8731.                $form->handleRequest($request);
  8732.                if($form->isValid()){
  8733.                    
  8734.                    $commentaireTicket->setTicket($ticket);
  8735.                    $commentaireTicket->setUser($user);
  8736.                    
  8737.                   $em->persist($commentaireTicket);
  8738.                   $em->flush();
  8739.                 
  8740.                 $commentaires = $em->getRepository(CommentaireTicket::class)
  8741.                             ->findByTicket($ticket->getId());
  8742.                 $ok_soumission =" Votre message a été pris en compte";
  8743.                     
  8744.                 $commentaireTicket = new CommentaireTicket;
  8745.                 
  8746.                 $form = $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  8747.                     
  8748.                 } else {
  8749.                     $error =" Veillez corrigez vos erreurs";
  8750.                 }
  8751.         }
  8752.         
  8753.         return $this->render('admin/display_ticket.html.twig', [
  8754.            'boutique' => $boutique,
  8755.            'ticket' => $ticket,
  8756.            'form' => $form->createView(),
  8757.            'commentaires' => $commentaires,
  8758.            'userBoutique' => $userBoutique
  8759.         ]);
  8760.     }
  8761.     
  8762.     /**
  8763.      * @Route("/{slug}/close-ticket/{id}", name="admin.close_ticket")
  8764.      * @return \Symfony\Component\HttpFoundation\Response
  8765.      */
  8766.     public function closeTicketAction(Request $request, $slug, $id)
  8767.     {
  8768.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8769.            return $this->redirectToRoute('security_login');
  8770.         }
  8771.         $em = $this->getDoctrine()
  8772.                     ->getManager();
  8773.                     
  8774.         $boutique = $em->getRepository(Boutique::class)
  8775.                         ->findOneBySlug($slug);
  8776.         
  8777.         $ticket = $em->getRepository(Ticket::class)
  8778.                     ->findOneBy(
  8779.                         array(
  8780.                             'boutique' => $boutique->getId(),
  8781.                             'id' => $id
  8782.                         )
  8783.                     );
  8784.         
  8785.         if(null !== $ticket){
  8786.             $ticket->setLesCommentairesSontFermes(true);
  8787.             $em->flush();
  8788.         }
  8789.         
  8790.         return $this->redirectToRoute('admin.display_ticket',array('slug'=>$boutique->getSlug(), 'id'=>$ticket->getId()));
  8791.     }
  8792.     
  8793.     
  8794.     /**
  8795.      * @Route("/{slug}/delete-ticket/{id}", name="admin.delete_ticket")
  8796.      * @return \Symfony\Component\HttpFoundation\Response
  8797.      */
  8798.     public function deleteTicketAction(Request $request, $slug, $id)
  8799.     {
  8800.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8801.            return $this->redirectToRoute('security_login');
  8802.         }
  8803.         $em = $this->getDoctrine()
  8804.                     ->getManager();
  8805.                     
  8806.         $boutique = $em->getRepository(Boutique::class)
  8807.                         ->findOneBySlug($slug);
  8808.         $user = $this->getUser();
  8809.         
  8810.         
  8811.         $ok_soumission = '';
  8812.         $error = '';
  8813.         
  8814.         $ticket = $em->getRepository(Ticket::class)
  8815.                     ->findOneBy(
  8816.                         array(
  8817.                             'boutique' => $boutique->getId(),
  8818.                             'id' => $id
  8819.                         )
  8820.                     );
  8821.         if(null !== $ticket){
  8822.             $commentaireTickets = $em->getRepository(CommentaireTicket::class)
  8823.                                     ->findByTicket($ticket->getId());
  8824.             foreach($commentaireTickets as $commentaireTicket)
  8825.             {
  8826.                 $em->remove($commentaireTicket);
  8827.             }
  8828.             $em->remove($ticket);
  8829.             $em->flush();
  8830.         }
  8831.         
  8832.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  8833.     }
  8834.     
  8835.     
  8836.     /**
  8837.      * @Route("/{slug}/delete-commentaire-ticket/{id}", name="admin.delete_commentaire_ticket")
  8838.      * @return \Symfony\Component\HttpFoundation\Response
  8839.      */
  8840.     public function deleteCommentaireTicketAction(Request $request, $slug, $id)
  8841.     {
  8842.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8843.            return $this->redirectToRoute('security_login');
  8844.         }
  8845.         $em = $this->getDoctrine()
  8846.                     ->getManager();
  8847.                     
  8848.         $boutique = $em->getRepository(Boutique::class)
  8849.                         ->findOneBySlug($slug);
  8850.         $user = $this->getUser();
  8851.     
  8852.         $commentaireTicket = $em->getRepository(CommentaireTicket::class)
  8853.                     ->findOneById($id);
  8854.                     
  8855.         if(null !== $commentaireTicket){
  8856.             
  8857.             $em->remove($commentaireTicket);
  8858.             $em->flush();
  8859.         }
  8860.         
  8861.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  8862.     }
  8863.     
  8864.     /**
  8865.      * @Route("/{slug}/liste-produit-lors-commande", name="admin.liste_produit_lors_commande")
  8866.      * @return \Symfony\Component\HttpFoundation\Response
  8867.      */
  8868.     public function listeProduitLorsCommandeAction(Request $request, Boutique $boutique)
  8869.     {
  8870.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8871.            return $this->redirectToRoute('security_login');
  8872.         }
  8873.         
  8874.         $em = $this->getDoctrine()
  8875.                     ->getManager();
  8876.                     
  8877.         $produits = $em->getRepository(Produit::class)
  8878.                         ->findBy(
  8879.                             array(
  8880.                                 'boutique' => $boutique->getId(),
  8881.                                 'estSupprime' => false
  8882.                             )    
  8883.                         );
  8884.         $user = $this->getUser();
  8885.         $userBoutique = $em->getRepository(UserBoutique::class)
  8886.                         ->findOneBy(
  8887.                             array(
  8888.                             'user' => $user->getId(),
  8889.                             'boutique' => $boutique->getId()
  8890.                             )
  8891.                         );
  8892.         
  8893.         
  8894.         return $this->render('admin/liste_produit_lors_commande.html.twig', [
  8895.            'boutique' => $boutique,
  8896.            'produits' => $produits,
  8897.            'userBoutique' => $userBoutique
  8898.         ]);
  8899.     }
  8900.     /**
  8901.      * @Route("/{slug}/recreerStock", name="admin_recreer_stock")
  8902.      * @return \Symfony\Component\HttpFoundation\Response
  8903.      */
  8904.     public function recreerStockAction(Request $request, Boutique $boutique)
  8905.     {
  8906.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8907.            return $this->redirectToRoute('security_login');
  8908.         }
  8909.         $em = $this->getDoctrine()
  8910.                     ->getManager();
  8911.         $user = $this->getUser();
  8912.         
  8913.     
  8914.         $boutique  = $em->getRepository(Boutique::class)
  8915.                         ->findOneById(55);
  8916.         
  8917.         $produits = $em->getRepository(Produit::class)
  8918.                             ->findBy(
  8919.                                 array(
  8920.                                 'boutique' => $boutique->getId()
  8921.                                 )
  8922.                             );
  8923.             $magasins =  $em->getRepository(Magasin::class)
  8924.                             ->findBy(
  8925.                                 array(
  8926.                                 'boutique' => $boutique->getId()
  8927.                                 )
  8928.                             );
  8929.             foreach($produits as $produit){
  8930.                 foreach($magasins as $magasin){
  8931.                     $stock = new Stock;
  8932.                     $stock->setBoutique($boutique);
  8933.                     $stock->SetProduit($produit);
  8934.                     $stock->setMagasin($magasin);
  8935.                     $stock->setStockDisponible((float)$produit->getStockDisponible());
  8936.                     $stock->setStockMinimum((float)$produit->getStockMinimum());
  8937.                     $stock->setStockDeSecurite((float)$produit->getStockDeSecurite());
  8938.                     $stock->setStockDAlerte((float)$produit->getStockDAlerte());
  8939.                     $stock->setStockOutil((float)$produit->getStockOutil());
  8940.                     $stock->setStockMaximum((float)$produit->getStockMaximum());
  8941.                     $stock->setCoutDeStockage((float)$produit->getCoutDeStockage());
  8942.                     $em->persist($stock);
  8943.                     
  8944.                 }
  8945.             }
  8946.         $em->flush();
  8947.         $userBoutique = $em->getRepository(UserBoutique::class)
  8948.                         ->findOneBy(
  8949.                             array(
  8950.                             'user' => $user->getId(),
  8951.                             'boutique' => $boutique->getId()
  8952.                             )
  8953.                         );
  8954.          return $this->render('admin/admin_recreer_stock.html.twig', [
  8955.             'boutique' => $boutique,
  8956.             'userBoutique' => $userBoutique,
  8957.         ]);
  8958.     }
  8959.     /**
  8960.      * @Route("/{slug}/magasins", name="admin_magasins")
  8961.      * @return \Symfony\Component\HttpFoundation\Response
  8962.      */
  8963.     public function magasinsAction(Request $request, Boutique $boutique)
  8964.     {
  8965.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8966.            return $this->redirectToRoute('security_login');
  8967.         }
  8968.         $em = $this->getDoctrine()
  8969.                     ->getManager();
  8970.         $user = $this->getUser();
  8971.         
  8972.     
  8973.         $magasins  = $em->getRepository(Magasin::class)
  8974.                         ->findBy(
  8975.                             array(
  8976.                                 'boutique' => $boutique->getId(),
  8977.                                 'estSupprime' => false
  8978.                             )    
  8979.                         );
  8980.         $userBoutique = $em->getRepository(UserBoutique::class)
  8981.                         ->findOneBy(
  8982.                             array(
  8983.                             'user' => $user->getId(),
  8984.                             'boutique' => $boutique->getId()
  8985.                             )
  8986.                         );
  8987.          return $this->render('admin/magasins.html.twig', [
  8988.             'boutique' => $boutique,
  8989.             'userBoutique' => $userBoutique,
  8990.             'magasins' => $magasins
  8991.         ]);
  8992.     }
  8993.     /**
  8994.      * @Route("/{slug}/nouveau-magasin", name="admin_nouveau_magasin")
  8995.      * @return \Symfony\Component\HttpFoundation\Response
  8996.      */
  8997.     public function nouveauMagasinAction(Request $request, Boutique $boutique)
  8998.     {
  8999.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9000.            return $this->redirectToRoute('security_login');
  9001.         }
  9002.         $em = $this->getDoctrine()
  9003.                     ->getManager();
  9004.         
  9005.         $magasin = new Magasin;
  9006.         $form = $this->createForm(MagasinType::class, $magasin);
  9007.         
  9008.         $user = $this->getUser();
  9009.         $userBoutique = $em->getRepository(UserBoutique::class)
  9010.                         ->findOneBy(
  9011.                             array(
  9012.                             'user' => $user->getId(),
  9013.                             'boutique' => $boutique->getId()
  9014.                             )
  9015.                         );
  9016.         
  9017.         $ok_soumission = '';
  9018.         $error = '';
  9019.         
  9020.         if($request->getMethod() == 'POST'){
  9021.             
  9022.                $form->handleRequest($request);
  9023.                if($form->isSubmitted() && $form->isValid()){
  9024.                    $magasin->setBoutique($boutique);
  9025.                    $magasin->setCreePar($user);
  9026.                     $em->persist($magasin);
  9027.                   $em->flush();
  9028.                 
  9029.                 $ok_soumission ="Enregistrement effectué";
  9030.                 $magasin = new Magasin;
  9031.                 
  9032.                 $form = $this->createForm(MagasinType::class, $magasin);
  9033.                     
  9034.                 } else {
  9035.                     $error =" Veillez corrigez vos erreurs";
  9036.                 }
  9037.         }
  9038.         return $this->render('admin/nouveau_magasin.html.twig', [
  9039.            'boutique' => $boutique,
  9040.            'form' => $form->createView(),
  9041.            'userBoutique' => $userBoutique,
  9042.            'ok_soumission' => $ok_soumission,
  9043.            'error' => $error
  9044.         ]);
  9045.     }
  9046.     /**
  9047.      * @Route("/{slug}/modifier-magasin/{magasin}", name="admin_modifier_magasin")
  9048.      * @return \Symfony\Component\HttpFoundation\Response
  9049.      */
  9050.     public function modifierMagasinAction(Request $request, Boutique $boutique, $magasin)
  9051.     {
  9052.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9053.            return $this->redirectToRoute('security_login');
  9054.         }
  9055.         $em = $this->getDoctrine()
  9056.                     ->getManager();
  9057.                     
  9058.         $user = $this->getUser();
  9059.         $userBoutique = $em->getRepository(UserBoutique::class)
  9060.                         ->findOneBy(
  9061.                             array(
  9062.                             'user' => $user->getId(),
  9063.                             'boutique' => $boutique->getId()
  9064.                             )
  9065.                         );
  9066.         $magasin = $em->getRepository(Magasin::class)
  9067.                     ->findOneById($magasin);
  9068.         $form = $this->createForm(MagasinEditType::class, $magasin);
  9069.         
  9070.         $ok_soumission = '';
  9071.         $error = '';
  9072.         
  9073.         if($request->getMethod() == 'POST'){
  9074.             
  9075.                $form->handleRequest($request);
  9076.                if($form->isValid()){
  9077.                     $magasin->setModifiePar($user);
  9078.                     $em->flush();
  9079.         
  9080.                 $ok_soumission =" Votre message a été pris en compte";
  9081.                     
  9082.                 } else {
  9083.                     $error =" Veillez corrigez vos erreurs";
  9084.                 }
  9085.         }
  9086.         return $this->render('admin/modifier_magasin.html.twig', [
  9087.            'boutique' => $boutique,
  9088.            'form' => $form->createView(),
  9089.            'userBoutique' => $userBoutique,
  9090.            'magasin' => $magasin
  9091.         ]);
  9092.     }
  9093.     
  9094.     /**
  9095.      * @Route("/{slug}/supprimer-magasin/{magasin}", name="admin_supprimer_magasin")
  9096.      * @return \Symfony\Component\HttpFoundation\Response
  9097.      */
  9098.     public function supprimerMagasinAction(Request $request, Boutique $boutique, $magasin)
  9099.     {
  9100.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9101.            return $this->redirectToRoute('security_login');
  9102.         }
  9103.         $em = $this->getDoctrine()
  9104.                     ->getManager();
  9105.         $user = $this->getUser();
  9106.         $magasin = $em->getRepository(Magasin::class)
  9107.                     ->findOneById($magasin);
  9108.                     
  9109.         if(null != $magasin){
  9110.             $magasin->setEstSupprime(true);
  9111.             $magasin->setSupprimePar($user);
  9112.             $em->flush();
  9113.         }
  9114.         
  9115.         return $this->redirectToRoute('admin_magasins', array('slug' => $boutique->getSlug()));
  9116.     }
  9117.     
  9118.     /**
  9119.      * @Route("/{slug}/stock-management", name="admin.stock_management")
  9120.      * @return \Symfony\Component\HttpFoundation\Response
  9121.      */
  9122.     public function stockManagementAction(Request $request, Boutique $boutique)
  9123.     {
  9124.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9125.            return $this->redirectToRoute('security_login');
  9126.         }
  9127.         $em = $this->getDoctrine()
  9128.                     ->getManager();
  9129.                     
  9130.         $produits = $em->getRepository(Produit::class)
  9131.                         ->findByBoutique($boutique->getId());
  9132.         $magasins = $em->getRepository(Magasin::class)
  9133.                         ->findBy(
  9134.                             array(
  9135.                                 'boutique' => $boutique->getId(),
  9136.                                 'estSupprime' => false
  9137.                             )
  9138.                         );
  9139.         $magasinPrincipal = '';
  9140.         $mouvementDeStockProduits = array();
  9141.         foreach($magasins as $magasin){
  9142.             if($magasin->isPrincipal())
  9143.                 {
  9144.                     $magasinPrincipal = $magasin;
  9145.                 }
  9146.         }
  9147.         $magasinPrincipal = $em->getRepository(Magasin::class)
  9148.                         ->findOneBy(
  9149.                             array(
  9150.                                 'boutique' => $boutique->getId(),
  9151.                                 'principal' => true
  9152.                             )
  9153.                         );
  9154.         
  9155.         $stocks = $em->getRepository(Stock::class)
  9156.                     ->stockDUnMagasin($boutique->getId(), $magasinPrincipal->getId());
  9157.         
  9158.         $user = $this->getUser();
  9159.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  9160.         
  9161.         
  9162.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  9163.         $startMonth = $intervalleMois['debut'];
  9164.         $endMonth = $intervalleMois['fin'];
  9165.         
  9166.         $dateDebut = new \DateTime($startMonth);
  9167.         $dateFin = new \DateTime($endMonth);
  9168.         $startYear = date('Y-01-01');
  9169.         $endYear = date('Y-12-31');
  9170.         $user = $this->getUser();
  9171.         
  9172.         $userBoutique = $em->getRepository(UserBoutique::class)
  9173.                         ->findOneBy(
  9174.                             array(
  9175.                             'user' => $user->getId(),
  9176.                             'boutique' => $boutique->getId()
  9177.                             )
  9178.                         );
  9179.         
  9180.         $stockEntries  = $em->getRepository(EntreeDeStock::class)
  9181.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut, $dateFin);
  9182.         $mouvementDeStockProduits  = $em->getRepository(mouvementDeStockProduit::class)
  9183.                                         ->mouvementDeStockProduitsParDate($boutique->getId(), $magasinPrincipal->getId(),
  9184.                                         $dateDebut, $dateFin);
  9185.         $produitVendus  = $em->getRepository(ProduitCommande::class)
  9186.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice', $dateDebut, $dateFin);
  9187.         if('POST' == $request->getMethod()){
  9188.             $dateDebut = $_POST['dateDebut'];
  9189.             $dateFin = $_POST['dateFin'];
  9190.             
  9191.             $dateDebut = new \DateTime($dateDebut);
  9192.             $dateFin = new \DateTime($dateFin);
  9193.             
  9194.             $stockEntries  = $em->getRepository(EntreeDeStock::class)
  9195.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut, $dateFin);
  9196.             
  9197.             return $this->render('admin/entries_table_content.html.twig', [
  9198.                'boutique' => $boutique,
  9199.                'stockEntries' => $stockEntries,
  9200.                'userBoutique' => $userBoutique
  9201.             ]);
  9202.             
  9203.         }
  9204.         
  9205.         return $this->render('admin/stock_management.html.twig', [
  9206.            'boutique' => $boutique,
  9207.            'produits' => $produits,
  9208.            'userBoutique' => $userBoutique,
  9209.            'dateDebut' => $dateDebut,
  9210.            'dateFin' => $dateFin,
  9211.            'startMonth' => $startMonth,
  9212.            'endMonth' => $endMonth,
  9213.            'startYear' => $startYear,
  9214.            'endYear' => $endYear,
  9215.            'stockEntries' => $stockEntries,
  9216.            'produitVendus' => $produitVendus,
  9217.            'mouvementDeStockProduits' => $mouvementDeStockProduits,
  9218.            'magasins' => $magasins,
  9219.            'stocks' => $stocks
  9220.         ]);
  9221.     }
  9222.     /**
  9223.      * @Route("/{slug}/imprimer-mouvement-de-stock/{magasin}/{dateDebut}/{dateFin}", name="admin_imprimer_mouvement_de_stock")
  9224.      * @return \Symfony\Component\HttpFoundation\Response
  9225.      */
  9226.     public function imprimerMouvementDeStockAction( Request $request, $slug, $magasin = 0, $dateDebut = '', $dateFin = '')
  9227.     {
  9228.         
  9229.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9230.            return $this->redirectToRoute('security_login');
  9231.         }
  9232.         
  9233.         $em = $this->getDoctrine()
  9234.                     ->getManager();
  9235.                         
  9236.         $boutique = $em->getRepository(Boutique::class)
  9237.                         ->findOneBySlug($slug);
  9238.         
  9239.         
  9240.         $user = $this->getUser();
  9241.         $userBoutique = $em->getRepository(UserBoutique::class)
  9242.                         ->findOneBy(
  9243.                             array(
  9244.                             'user' => $user->getId(),
  9245.                             'boutique' => $boutique->getId()
  9246.                             )
  9247.                         );
  9248.         
  9249.         $dateDebut = new \DateTime($dateDebut);
  9250.         $dateDebut->setTime(0, 0);
  9251.         $dateFin = new \DateTime($dateFin);
  9252.         $dateFin->setTime(23, 59);
  9253.         $magasin = $em->getRepository(Magasin::class)
  9254.                         ->findOneById($magasin);
  9255.         $mouvementDeStockProduits  = $em->getRepository(mouvementDeStockProduit::class)
  9256.                                         ->mouvementDeStockProduitsParDate($boutique->getId(), $magasin->getId(),
  9257.                                         $dateDebut, $dateFin);
  9258.         $pdf = new Html2Pdf('P', 'A4', 'fr');
  9259.         
  9260.         $content = $this->renderView('pdf/mouvement_de_stock.html.twig', [
  9261.                         'boutique' => $boutique,
  9262.                         'dateDebut' => $dateDebut,
  9263.                         'dateFin' => $dateFin,
  9264.                         'userBoutique' => $userBoutique,
  9265.                         'magasin' => $magasin,
  9266.                         'mouvementDeStockProduits' => $mouvementDeStockProduits
  9267.                     ]);
  9268.         
  9269.         
  9270.         $pdf->writeHTML($content);
  9271.         $name = time().$boutique->getId().rand(1, 10000).'.pdf';
  9272.         $photo = new Photo;
  9273.         $lienPhysique = $photo->getUploadRootDir().$name;
  9274.                 
  9275.         $pdf->output($lienPhysique, 'I');
  9276.         return $this->render('pdf/mouvement_de_stock.html.twig', [
  9277.            'boutique' => $boutique,
  9278.            'dateDebut' => $dateDebut,
  9279.            'dateFin' => $dateFin,
  9280.            'userBoutique' => $userBoutique,
  9281.            'magasin' => $magasin,
  9282.            'mouvementDeStockProduits' => $mouvementDeStockProduits
  9283.         ]);
  9284.     }
  9285.     /**
  9286.      * @Route("/{slug}/imprimer-stock/{magasin}", name="admin_imprimer_stock")
  9287.      * @return \Symfony\Component\HttpFoundation\Response
  9288.      */
  9289.     public function imprimerStockAction( Request $request, $slug, $magasin = 0)
  9290.     {
  9291.         
  9292.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9293.            return $this->redirectToRoute('security_login');
  9294.         }
  9295.         
  9296.         $em = $this->getDoctrine()
  9297.                     ->getManager();
  9298.                         
  9299.         $boutique = $em->getRepository(Boutique::class)
  9300.                         ->findOneBySlug($slug);
  9301.         
  9302.         
  9303.         $user = $this->getUser();
  9304.         $userBoutique = $em->getRepository(UserBoutique::class)
  9305.                         ->findOneBy(
  9306.                             array(
  9307.                             'user' => $user->getId(),
  9308.                             'boutique' => $boutique->getId()
  9309.                             )
  9310.                         );
  9311.         $magasin = $em->getRepository(Magasin::class)
  9312.                         ->findOneById($magasin);
  9313.         $stocks = $em->getRepository(Stock::class)
  9314.                     ->stockDUnMagasin($boutique->getId(), $magasin->getId());
  9315.         $pdf = new Html2Pdf('P', 'A4', 'fr');
  9316.         
  9317.         $content = $this->renderView('pdf/stock.html.twig', [
  9318.                         'boutique' => $boutique,
  9319.                         
  9320.                         'userBoutique' => $userBoutique,
  9321.                         'magasin' => $magasin,
  9322.                         'stocks' => $stocks
  9323.                     ]);
  9324.         
  9325.         
  9326.         $pdf->writeHTML($content);
  9327.         $name = time().$boutique->getId().rand(1, 10000).'.pdf';
  9328.         $photo = new Photo;
  9329.         $lienPhysique = $photo->getUploadRootDir().$name;
  9330.                 
  9331.         $pdf->output($lienPhysique, 'I');
  9332.         return $this->render('pdf/stock.html.twig', [
  9333.            'boutique' => $boutique,
  9334.            'dateDebut' => $dateDebut,
  9335.            'dateFin' => $dateFin,
  9336.            'userBoutique' => $userBoutique,
  9337.            'magasin' => $magasin,
  9338.            'stocks' => $stocks
  9339.         ]);
  9340.     }
  9341.     
  9342.     /**
  9343.      * @Route("/{slug}/nouvel-inventaire", name="admin_nouvel_inventaire")
  9344.      * @return \Symfony\Component\HttpFoundation\Response
  9345.      */
  9346.     public function nouvelInventaireAction(Request $request, Boutique $boutique)
  9347.     {
  9348.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9349.            return $this->redirectToRoute('security_login');
  9350.         }
  9351.         $em = $this->getDoctrine()
  9352.                     ->getManager();
  9353.                     
  9354.         $produits = $em->getRepository(Produit::class)
  9355.                         ->findByBoutique($boutique->getId());
  9356.         $user = $this->getUser();
  9357.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  9358.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  9359.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  9360.         
  9361.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  9362.         $startMonth = $intervalleMois['debut'];
  9363.         $endMonth = $intervalleMois['fin'];
  9364.         
  9365.         $startYear = date('Y-01-01');
  9366.         $endYear = date('Y-12-31');
  9367.         $user = $this->getUser();
  9368.         
  9369.         $userBoutique = $em->getRepository(UserBoutique::class)
  9370.                         ->findOneBy(
  9371.                             array(
  9372.                             'user' => $user->getId(),
  9373.                             'boutique' => $boutique->getId()
  9374.                             )
  9375.                         );
  9376.         
  9377.         $stockEntries  = $em->getRepository(EntreeDeStock::class)
  9378.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut, $dateFin);
  9379.         $produits = $em->getRepository(Produit::class)
  9380.                         ->findBy(
  9381.                             array(
  9382.                                 'boutique' => $boutique->getId(),
  9383.                                 'estSupprime' => false
  9384.                             ),
  9385.                             array(
  9386.                                 'nom' => 'ASC'
  9387.                             )
  9388.                         );
  9389.         $magasin = $em->getRepository(Magasin::class)
  9390.                     ->findOneBy(
  9391.                         array(
  9392.                             'principal' => true,
  9393.                             'boutique' => $boutique
  9394.                         )
  9395.                     );
  9396.         $message = '';
  9397.         if('POST' == $request->getMethod()){
  9398.             
  9399.             foreach($produits as $produit){
  9400.                 $quantite = (float)$request->request->get('stock'.$produit->getId());
  9401.                 $stock = $em->getRepository(Stock::class)
  9402.                             ->findOneBy(
  9403.                                 array(
  9404.                                     'boutique' => $boutique,
  9405.                                     'magasin' => $magasin,
  9406.                                     'produit'=> $produit
  9407.                                 )
  9408.                             );
  9409.                 $produit->setStockDisponible($quantite);
  9410.                 if($stock === null){
  9411.                     $stock = new Stock;
  9412.                     $stock->setProduit($produit);
  9413.                     $stock->setBoutique($boutique);
  9414.                     $stock->setMagasin($magasin);
  9415.                     $stock->setStockDisponible($quantite);
  9416.                     $em->persist($stock);
  9417.                     $em->flush();
  9418.                 }else{
  9419.                     $stock->setStockDisponible($quantite);
  9420.                 }
  9421.             }
  9422.             $message = 'Enregistrement effectué';
  9423.             $em->flush();
  9424.             
  9425.         }
  9426.         
  9427.         return $this->render('admin/nouvel_inventaire.html.twig', [
  9428.            'boutique' => $boutique,
  9429.            'produits' => $produits,
  9430.            'message' => $message,
  9431.            'userBoutique' => $userBoutique,
  9432.            'dateDebut' => $dateDebut,
  9433.            'dateFin' => $dateFin,
  9434.            'startMonth' => $startMonth,
  9435.            'endMonth' => $endMonth,
  9436.            'startYear' => $startYear,
  9437.            'endYear' => $endYear,
  9438.            'stockEntries' => $stockEntries,
  9439.            'produits' => $produits
  9440.         ]);
  9441.     }
  9442.     /**
  9443.      * @Route("/{slug}/payer-entree-de-stock/{id}", name="admin_payer_entree_de_stock")
  9444.      * @return \Symfony\Component\HttpFoundation\Response
  9445.      */
  9446.     public function payerEntreeDeSTockAction(Request $request,  $slug, $id)
  9447.     {
  9448.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9449.            return $this->redirectToRoute('security_login');
  9450.         }
  9451.         $em = $this->getDoctrine()
  9452.                     ->getManager();
  9453.         $entreeDeStock = $em->getRepository(EntreeDeStock::class)
  9454.                                 ->findOneById($id);    
  9455.                                 
  9456.         $boutique = $em->getRepository(Boutique::class)
  9457.                                 ->findOneBySlug($slug);    
  9458.         
  9459.                     
  9460.         $user = $this->getUser();
  9461.         $userBoutique = $em->getRepository(UserBoutique::class)
  9462.                         ->findOneBy(
  9463.                             array(
  9464.                             'user' => $user->getId(),
  9465.                             'boutique' => $boutique->getId()
  9466.                             )
  9467.                         );
  9468.         
  9469.         if($request->getMethod() == 'POST'){
  9470.             
  9471.             $montant = (float)$_POST['montant'];
  9472.             $moyenDePaiement = $_POST['moyenDePaiement'];
  9473.             
  9474.             
  9475.             $depense = new Expensive;
  9476.             $depense->setBoutique($boutique);
  9477.             $depense->setMontant($montant);
  9478.             $categorieDepense = $em->getRepository(CategorieDepense::class)
  9479.                                 ->findOneBy(
  9480.                                     array(
  9481.                                         'boutique' => $boutique,
  9482.                                         'nom' => 'ACHAT DE MARCHANDISES'
  9483.                                     )
  9484.                                 );
  9485.             
  9486.             $depense->setCategorieDepense($categorieDepense);
  9487.         
  9488.             $em->persist($depense);
  9489.             $entreeDeStock->setResteAPayer($entreeDeStock->getResteAPayer() - $montant);
  9490.             $entreeDeStock->setMontantPaye($entreeDeStock->getMontantPaye() + $montant);
  9491.             $em->flush();
  9492.             
  9493.         }
  9494.     
  9495.         return $this->render('admin/payer_entree_de_stock.html.twig', [
  9496.            'boutique' => $boutique,
  9497.            'userBoutique' => $userBoutique,
  9498.            
  9499.            'entreeDeStock' => $entreeDeStock
  9500.         ]);
  9501.     }
  9502.     /**
  9503.      * @Route("/{slug}/new-stock-entry", name="admin.new_stock_entry")
  9504.      * @return \Symfony\Component\HttpFoundation\Response
  9505.      */
  9506.     public function newStockEntryAction(Request $request, Boutique $boutique)
  9507.     {
  9508.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9509.            return $this->redirectToRoute('security_login');
  9510.         }
  9511.         $em = $this->getDoctrine()
  9512.                     ->getManager();
  9513.         $tiers = $em->getRepository(Tiers::class)
  9514.                                 ->findByBoutique($boutique);        
  9515.         
  9516.         $magasins = $em->getRepository(Magasin::class)
  9517.                                 ->findBy(
  9518.                                     array(
  9519.                                         'boutique' => $boutique->getId(),
  9520.                                         'estSupprime' => false
  9521.                                     )    
  9522.                                 );        
  9523.         
  9524.                     
  9525.         $produits = $em->getRepository(Produit::class)
  9526.                         ->findByBoutique($boutique->getId());
  9527.         $user = $this->getUser();
  9528.         $userBoutique = $em->getRepository(UserBoutique::class)
  9529.                         ->findOneBy(
  9530.                             array(
  9531.                             'user' => $user->getId(),
  9532.                             'boutique' => $boutique->getId()
  9533.                             )
  9534.                         );
  9535.         $editMode= 'new';
  9536.         
  9537.         if($request->getMethod() == 'POST'){
  9538.             
  9539.             $dateCommande = $_POST['dateCommande'];
  9540.             $magasin = $_POST['magasin'];
  9541.             $magasin = $em->getRepository(Magasin::class)
  9542.                             ->findOneById($magasin);
  9543.             $tiers = $_POST['tiers'];
  9544.             
  9545.             $tiers = $em->getRepository(Tiers::class)
  9546.                         ->findOneById($tiers);
  9547.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  9548.             $autreFrais =  (float)$_POST['autreFrais'];
  9549.             $listeProduits = json_decode($_POST['listeProduits']);
  9550.             
  9551.             $entreeDeStock = new EntreeDeStock;
  9552.             $entreeDeStock->setBoutique($boutique);
  9553.         
  9554.             $laDate = new \DateTime($dateCommande);
  9555.             $entreeDeStock->setLaDate($laDate);
  9556.         
  9557.             $em->persist($entreeDeStock);
  9558.             $mouvementDeStock = new MouvementDeStock;
  9559.             $mouvementDeStock->setBoutique($boutique);
  9560.             $mouvementDeStock->setMagasin($magasin);
  9561.             $mouvementDeStock->setTypeMouvement(MouvementDeStock::TYPE_MOUVEMENT_ENTREE);
  9562.             $em->persist($mouvementDeStock);
  9563.             $em->flush();
  9564.             $produitCommandes = array();
  9565.             $sousTotal = 0;
  9566.             foreach($listeProduits as $listeProduit){
  9567.                 $listeProduit = (array)$listeProduit;
  9568.                 $idDuProduit = $listeProduit['idProduit'];
  9569.                 
  9570.                 $leProduit = $em->getRepository(Produit::class)
  9571.                         ->findOneById($idDuProduit);
  9572.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  9573.                 
  9574.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  9575.                 $produitEntreeDeStock->setProduit($leProduit);
  9576.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  9577.                 $produitEntreeDeStock->setQuantite((float)$listeProduit['quantite']);
  9578.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  9579.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  9580.                 
  9581.                 $sousTotal += (float)$listeProduit['sousTotal'];
  9582.                 $em->persist($produitEntreeDeStock);
  9583.                 $mouvementDeStockProduit = new MouvementDeStockProduit;
  9584.                 $mouvementDeStockProduit->setBoutique($boutique);
  9585.                 $mouvementDeStockProduit->setProduit($leProduit);
  9586.                 $mouvementDeStockProduit->setMouvementDeStock($mouvementDeStock);
  9587.                 $mouvementDeStockProduit->setPrix((float)$listeProduit['prixDAchat']);
  9588.                 $mouvementDeStockProduit->setQuantite((float)$listeProduit['quantite']);
  9589.                 $em->persist($mouvementDeStockProduit);
  9590.                 $stock = $em->getRepository(Stock::class)
  9591.                             ->findOneBy(
  9592.                                 array(
  9593.                                     'boutique' => $boutique->getId(),
  9594.                                     'magasin' => $magasin->getId(),
  9595.                                     'produit' => $leProduit->getId()
  9596.                                 )
  9597.                             );
  9598.                 if($stock !== null){
  9599.                     $stock->setStockDisponible($stock->getStockDisponible() + (float)$listeProduit['quantite']);
  9600.                 }
  9601.             }
  9602.             $mouvementDeStock->setTotalAchat($sousTotal);
  9603.             $mouvementDeStock->setFraisDeTransport($fraisDeTransport);
  9604.             $mouvementDeStock->setAutreFrais($autreFrais);
  9605.             $mouvementDeStock->setNetPaye($autreFrais + $sousTotal);
  9606.             $mouvementDeStock->setResteAPayer($sousTotal + $autreFrais);
  9607.             $mouvementDeStock->setTiers($tiers);
  9608.             
  9609.             $em->flush();
  9610.         }
  9611.     
  9612.         return $this->render('admin/new_stock_entry.html.twig', [
  9613.            'boutique' => $boutique,
  9614.            'produits' => $produits,
  9615.            'userBoutique' => $userBoutique,
  9616.            'editMode' => $editMode,
  9617.            'tiers' => $tiers,
  9618.            'magasins' => $magasins
  9619.         ]);
  9620.     }
  9621.     
  9622.     /**
  9623.      * @Route("/{slug}/edit-stock-entry/{id}", name="admin.edit_stock_entry")
  9624.      * @return \Symfony\Component\HttpFoundation\Response
  9625.      */
  9626.     public function editStockEntryAction(Request $request, $slug, $id)
  9627.     {
  9628.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9629.            return $this->redirectToRoute('security_login');
  9630.         }      
  9631.         $em = $this->getDoctrine()
  9632.                     ->getManager();
  9633.         $boutique  = $em->getRepository(Boutique::class)
  9634.                         ->findOneBySlug($slug);
  9635.         $tiers = $em->getRepository(Tiers::class)
  9636.                     ->findByBoutique($boutique);
  9637.     
  9638.         $produits  = $em->getRepository(Produit::class)
  9639.                         ->findByBoutique($boutique->getId());
  9640.     
  9641.         $entreeDeStock  = $em->getRepository(EntreeDeStock::class)
  9642.                         ->findOneBy(
  9643.                             array(
  9644.                                 'boutique' => $boutique->getId(),
  9645.                                 'id' => $id
  9646.                         ));
  9647.         
  9648.         $ancienProduitEntreeDeStocks  = $em->getRepository(ProduitEntreeDeStock::class)
  9649.                         ->findBy(
  9650.                             array(
  9651.                                 'entreeDeStock' => $entreeDeStock->getId()
  9652.                         ));
  9653.                         
  9654.         $user = $this->getUser();
  9655.         $userBoutique = $em->getRepository(UserBoutique::class)
  9656.                         ->findOneBy(
  9657.                             array(
  9658.                             'user' => $user->getId(),
  9659.                             'boutique' => $boutique->getId()
  9660.                             )
  9661.                         );
  9662.     
  9663.         $ok_soumission = '';
  9664.         $error = '';
  9665.         $editMode = 'edit';
  9666.         if($request->getMethod() == 'POST'){
  9667.             $dateCommande = $_POST['dateCommande'];
  9668.             $listeProduits = json_decode($_POST['listeProduits']);
  9669.             
  9670.             $tiers = $_POST['tiers'];
  9671.             
  9672.             $tiers = $em->getRepository(Tiers::class)
  9673.                         ->findOneById($tiers);
  9674.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  9675.             $autreFrais =  (float)$_POST['autreFrais'];
  9676.             $em->flush();
  9677.             
  9678.             //Supprimer les ancien ProduitCommande lié 
  9679.             foreach($ancienProduitEntreeDeStocks as $ancienProduitEntreeDeStock){
  9680.                 $em->remove($ancienProduitEntreeDeStock);
  9681.                 
  9682.                 $leProduit = $em->getRepository(Produit::class)
  9683.                         ->findOneById($ancienProduitEntreeDeStock->getProduit()->getId());
  9684.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() - $ancienProduitEntreeDeStock->getQuantite());
  9685.             }
  9686.             $em->flush();
  9687.             $produitEntreeDeStocks = array();
  9688.             $sousTotal = 0;
  9689.             foreach($listeProduits as $listeProduit){
  9690.                 $listeProduit = (array)$listeProduit;
  9691.                 $idDuProduit = $listeProduit['idProduit'];
  9692.                 
  9693.                 $leProduit = $em->getRepository(Produit::class)
  9694.                         ->findOneById($idDuProduit);
  9695.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  9696.         
  9697.                 
  9698.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  9699.                 $produitEntreeDeStock->setProduit($leProduit);
  9700.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  9701.                 $produitEntreeDeStock->setQuantite($listeProduit['quantite']);
  9702.                 
  9703.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  9704.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  9705.                 
  9706.                 $sousTotal += (float)$listeProduit['sousTotal'];
  9707.                 $em->persist($produitEntreeDeStock);
  9708.             }
  9709.             
  9710.             $entreeDeStock->setTotalAchat($sousTotal);
  9711.             $entreeDeStock->setFraisDeTransport($fraisDeTransport);
  9712.             $entreeDeStock->setAutreFrais($autreFrais);
  9713.             $entreeDeStock->setNetPaye($autreFrais + $sousTotal);
  9714.             $entreeDeStock->setResteAPayer($sousTotal + $autreFrais);
  9715.             $entreeDeStock->setTiers($tiers);
  9716.             $em->flush();
  9717.         }
  9718.     
  9719.         return $this->render('admin/edit_stock_entry.html.twig', [
  9720.            'boutique' => $boutique,
  9721.            'produits' => $produits,
  9722.            'editMode' => $editMode,
  9723.            'entreeDeStock' => $entreeDeStock,
  9724.            'ancienProduitEntreeDeStocks' => $ancienProduitEntreeDeStocks,
  9725.            'userBoutique' => $userBoutique,
  9726.            'tiers' => $tiers
  9727.         ]);
  9728.     }
  9729.     
  9730.     
  9731.     /**
  9732.      * @Route("/{slug}/delete-stock-entry/{id}", name="admin.delete_stock_entry")
  9733.      * @return \Symfony\Component\HttpFoundation\Response
  9734.      */
  9735.     public function deleteStockEntryAction(Request $request,  $slug, $id)
  9736.     {
  9737.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9738.            return $this->redirectToRoute('security_login');
  9739.         }  
  9740.         $em = $this->getDoctrine()
  9741.                     ->getManager();
  9742.         
  9743.         $boutique  = $em->getRepository(Boutique::class)
  9744.                         ->findOneBySlug($slug);
  9745.         
  9746.         $user = $this->getUser();
  9747.         $userBoutique = $em->getRepository(UserBoutique::class)
  9748.                         ->findOneBy(
  9749.                             array(
  9750.                             'user' => $user->getId(),
  9751.                             'boutique' => $boutique->getId()
  9752.                             )
  9753.                         );
  9754.         $entreeDeStock  = $em->getRepository(EntreeDeStock::class)
  9755.                         ->findOneBy(
  9756.                             array(
  9757.                                 'boutique' => $boutique->getId(),
  9758.                                 'id' => $id
  9759.                             )
  9760.                         );
  9761.         
  9762.         if(null != $entreeDeStock){
  9763.             $produitEntreeDeStocks = $em->getRepository(ProduitEntreeDeStock::class)
  9764.                                         ->findBy(
  9765.                                             array(
  9766.                                                 'entreeDeStock' => $entreeDeStock->getId()
  9767.                                             )
  9768.                                         );
  9769.             foreach($produitEntreeDeStocks as $produitEntreeDeStock){
  9770.                 $em->remove($produitEntreeDeStock);
  9771.                 $produit = $em->getRepository(Produit::class)
  9772.                                 ->findOneById($produitEntreeDeStock->getProduit()->getId());
  9773.                 $produit->setStockDisponible($produit->getStockDisponible() - $produitEntreeDeStock->getQuantite());
  9774.             }
  9775.             $em->flush();
  9776.             
  9777.             $em->remove($entreeDeStock);
  9778.             $em->flush();
  9779.         }
  9780.         return $this->redirectToRoute('admin.stock_management', array('slug' => $boutique->getSlug()));
  9781.     }
  9782.     /**
  9783.      * @Route("/{slug}/produits-vendus", name="admin_produits_vendus")
  9784.      * @return \Symfony\Component\HttpFoundation\Response
  9785.      */
  9786.     public function produitsVendusAction( Request $request, Boutique $boutique)
  9787.     {
  9788.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9789.            return $this->redirectToRoute('security_login');
  9790.         }
  9791.         
  9792.         $em = $this->getDoctrine()
  9793.                     ->getManager();
  9794.         
  9795.         $userBoutique = $em->getRepository(UserBoutique::class)
  9796.                         ->findOneBy(
  9797.                             array(
  9798.                             'user' => $this->getUser()->getId(),
  9799.                             'boutique' => $boutique->getId()
  9800.                             )
  9801.                         );
  9802.         
  9803.         if('POST' == $request->getMethod()){
  9804.             $dateDebut = $_POST['dateDebut'];
  9805.             $dateFin = $_POST['dateFin'];
  9806.             
  9807.             $dateDebut = new \DateTime($dateDebut);
  9808.             $dateDebut->setTime(0, 0);
  9809.             $dateFin = new \DateTime($dateFin);
  9810.             $dateFin->setTime(23, 59);
  9811.             
  9812.             $produitsVendus  = $em->getRepository(ProduitCommande::class)
  9813.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice', $dateDebut, $dateFin);
  9814.             
  9815.             
  9816.             return $this->render('admin/produits_vendus.html.twig', [
  9817.                'boutique' => $boutique,
  9818.                'produitsVendus' => $produitsVendus
  9819.             ]);
  9820.             
  9821.         }
  9822.         
  9823.         return $this->render('admin/sortie_de_stock.html.twig', [
  9824.            'boutique' => $boutique,
  9825.            'dateDebut' => $dateDebut,
  9826.            'dateFin' => $dateFin,
  9827.            'userBoutique' => $userBoutique,
  9828.            'typeFacture' => $typeFacture
  9829.         ]);
  9830.     }
  9831.     
  9832.     /**
  9833.      * @Route("/{slug}/import-products", name="admin.import_products")
  9834.      * @return \Symfony\Component\HttpFoundation\Response
  9835.      */
  9836.     public function importProductsAction(Request $request, Boutique $boutique)
  9837.     {
  9838.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9839.            return $this->redirectToRoute('security_login');
  9840.         }
  9841.         $em = $this->getDoctrine()
  9842.                     ->getManager();
  9843.                     
  9844.         $user = $this->getUser();
  9845.         
  9846.         $userBoutique = $em->getRepository(UserBoutique::class)
  9847.                         ->findOneBy(
  9848.                             array(
  9849.                             'user' => $user->getId(),
  9850.                             'boutique' => $boutique->getId()
  9851.                             )
  9852.                         );
  9853.         
  9854.         $error = '';
  9855.         $success = '';
  9856.         if('POST' == $request->getMethod()){
  9857.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  9858.             {
  9859.                 
  9860.             
  9861.                 $em->flush();
  9862.                 if ($this->gererFichierMultipleImportation($_FILES['fichier'], $boutique)){
  9863.                     $success = 'success';
  9864.                 } else{
  9865.                     $error = 'error';
  9866.                 }
  9867.                 
  9868.             }
  9869.         }
  9870.         
  9871.         return $this->render('admin/import_products.html.twig', [
  9872.            'boutique' => $boutique,
  9873.            'userBoutique' => $userBoutique,
  9874.            'error' => $error,
  9875.            'success' => $success
  9876.         ]);
  9877.     }
  9878.     
  9879.     /**
  9880.      * @Route("/{slug}/import-customers", name="admin.import_customers")
  9881.      * @return \Symfony\Component\HttpFoundation\Response
  9882.      */
  9883.     public function importCustomersAction(Request $request, Boutique $boutique)
  9884.     {
  9885.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9886.            return $this->redirectToRoute('security_login');
  9887.         }
  9888.         $em = $this->getDoctrine()
  9889.                     ->getManager();
  9890.                     
  9891.         $user = $this->getUser();
  9892.         
  9893.         $userBoutique = $em->getRepository(UserBoutique::class)
  9894.                         ->findOneBy(
  9895.                             array(
  9896.                             'user' => $user->getId(),
  9897.                             'boutique' => $boutique->getId()
  9898.                             )
  9899.                         );
  9900.         
  9901.         $error = '';
  9902.         $success = '';
  9903.         if('POST' == $request->getMethod()){
  9904.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  9905.             {
  9906.                 
  9907.             
  9908.                 $em->flush();
  9909.                 if ($this->gererFichierMultipleCustomerImportation($_FILES['fichier'], $boutique)){
  9910.                     $success = 'success';
  9911.                 } else{
  9912.                     $error = 'error';
  9913.                 }
  9914.                 
  9915.             }
  9916.         }
  9917.         
  9918.         return $this->render('admin/import_customers.html.twig', [
  9919.            'boutique' => $boutique,
  9920.            'userBoutique' => $userBoutique,
  9921.            'error' => $error,
  9922.            'success' => $success
  9923.         ]);
  9924.     }
  9925.     
  9926.     /**
  9927.      * @Route("/{slug}/ajout-utilisateur-employe", name="admin_ajout_utilisateur_employe")
  9928.      * @return \Symfony\Component\HttpFoundation\Response
  9929.      */
  9930.     public function ajoutUtilisateurEmployeAction(Request $request, Boutique $boutique)
  9931.     {
  9932.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9933.            return $this->redirectToRoute('security_login');
  9934.         }
  9935.         $em = $this->getDoctrine()
  9936.                     ->getManager();
  9937.                     
  9938.         $droits = DroitUtilisateur::getDroits();
  9939.         $userBoutiques = $em->getRepository(UserBoutique::class)
  9940.                         ->findBy(
  9941.                             array(
  9942.                                 'boutique' => $boutique->getId(),
  9943.                                 'estParti' => false
  9944.                             )    
  9945.                         );
  9946.         $user = $this->getUser();
  9947.         $userBoutique = $em->getRepository(UserBoutique::class)
  9948.                         ->findOneBy(
  9949.                             array(
  9950.                             'user' => $user->getId(),
  9951.                             'boutique' => $boutique->getId()
  9952.                             )
  9953.                         );
  9954.         
  9955.         return $this->render('admin/ajout_utilisateur_employe.html.twig', [
  9956.            'boutique' => $boutique,
  9957.            'userBoutiques' => $userBoutiques,
  9958.            'userBoutique' => $userBoutique,
  9959.            'droits' => $droits
  9960.            
  9961.         ]);
  9962.     }
  9963.     /**
  9964.      * @Route("/{slug}/users", name="admin.users")
  9965.      * @return \Symfony\Component\HttpFoundation\Response
  9966.      */
  9967.     public function usersAction(Request $request, Boutique $boutique)
  9968.     {
  9969.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9970.            return $this->redirectToRoute('security_login');
  9971.         }
  9972.         $em = $this->getDoctrine()
  9973.                     ->getManager();
  9974.                     
  9975.         $userBoutiques = $em->getRepository(UserBoutique::class)
  9976.                         ->findByBoutique($boutique->getId());
  9977.         $user = $this->getUser();
  9978.         $userBoutique = $em->getRepository(UserBoutique::class)
  9979.                         ->findOneBy(
  9980.                             array(
  9981.                             'user' => $user->getId(),
  9982.                             'boutique' => $boutique->getId()
  9983.                             )
  9984.                         );
  9985.         
  9986.         return $this->render('admin/users.html.twig', [
  9987.            'boutique' => $boutique,
  9988.            'userBoutiques' => $userBoutiques,
  9989.            'userBoutique' => $userBoutique,
  9990.            
  9991.         ]);
  9992.     }
  9993.     
  9994.     /**
  9995.      * @Route("/{slug}/add-user", name="admin.add_user")
  9996.      * @return \Symfony\Component\HttpFoundation\Response
  9997.      */
  9998.     public function addUserAction(Request $request, \Swift_Mailer $mailer, Boutique $boutique)
  9999.     {
  10000.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  10001.            return $this->redirectToRoute('security_login');
  10002.         }
  10003.         $em = $this->getDoctrine()
  10004.                     ->getManager();
  10005.                     
  10006.         $userBoutiques = $em->getRepository(UserBoutique::class)
  10007.                         ->findByBoutique($boutique->getId());
  10008.         $user = $this->getUser();
  10009.         $userBoutique = $em->getRepository(UserBoutique::class)
  10010.                         ->findOneBy(
  10011.                             array(
  10012.                             'user' => $user->getId(),
  10013.                             'boutique' => $boutique->getId()
  10014.                             )
  10015.                         );
  10016.         $appName = $this->getParameter('app_name');
  10017.         
  10018.     
  10019.         if('POST' == $request->getMethod()){
  10020.             $email = $_POST['email'];
  10021.             $role = $_POST['role'];
  10022.             
  10023.             $requeteAjoutBoutique  = new RequeteAjoutBoutique;
  10024.             
  10025.             $requeteAjoutBoutique->setRole($role);
  10026.             $requeteAjoutBoutique->setEmail($email);
  10027.             $requeteAjoutBoutique->setBoutique($boutique);
  10028.             
  10029.             $em->persist($requeteAjoutBoutique);
  10030.             $em->flush();
  10031.             
  10032.             //Envoi de mail
  10033.             $message = (new \Swift_Message('Welcome to '.$appName))
  10034.             ->setFrom(['no-reply-myinvoice@assiemail.com'  => $appName])
  10035.             ->setTo([$email])
  10036.             ->setBody(
  10037.                 $this->renderView(
  10038.                 'admin/requete_ajout_boutique_email.html.twig',
  10039.                 [
  10040.                     'appName' => $appName,
  10041.                     'role' => $role,
  10042.                     'boutique' => $boutique
  10043.                 ]
  10044.                 ),
  10045.             'text/html'
  10046.             );
  10047.             
  10048.             //$mailer->send($message);
  10049.         }
  10050.         
  10051.         return $this->render('admin/users.html.twig', [
  10052.            'boutique' => $boutique,
  10053.            'userBoutiques' => $userBoutiques,
  10054.            'userBoutique' => $userBoutique
  10055.         ]);
  10056.     }
  10057.     /**
  10058.      * @Route("/{slug}/paiement-bio", name="admin_paiement_bio")
  10059.      * @return \Symfony\Component\HttpFoundation\Response
  10060.      */
  10061.     public function refairePaiementBionAction(Request $request, Boutique $boutique)
  10062.     {
  10063.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  10064.            return $this->redirectToRoute('security_login');
  10065.         }
  10066.         $em = $this->getDoctrine()
  10067.                     ->getManager();
  10068.         $user = $this->getUser();
  10069.         $userBoutique = $em->getRepository(UserBoutique::class)
  10070.                         ->findOneBy(
  10071.                             array(
  10072.                             'user' => $user->getId(),
  10073.                             'boutique' => $boutique->getId()
  10074.                             )
  10075.                         );
  10076.         $laBoutique = $em->getRepository(Boutique::class)
  10077.                         ->findOneById(49);
  10078.         
  10079.         $versements = $em->getRepository(Payment::class)
  10080.                         ->findByBoutique($laBoutique);
  10081.         foreach($versements as $versement){
  10082.             $em->remove($versement);
  10083.         }
  10084.         $commandes = $em->getRepository(Commande::class)
  10085.                         ->findByBoutique($laBoutique);
  10086.         foreach($commandes as $commande){
  10087.             $commande->setMontantPaye(0);
  10088.             $commande->setResteAPayer($commande->getTotalTTC());
  10089.             
  10090.         }
  10091.         $em->flush();
  10092.     return $this->render('admin/refaire_versement.html.twig', [
  10093.            'boutique' => $boutique,
  10094.            'userBoutique' => $userBoutique
  10095.         ]);
  10096.     }
  10097.     /**
  10098.      * @Route("/{slug}/mon-compte", name="admin_mon_compte")
  10099.      * @return \Symfony\Component\HttpFoundation\Response
  10100.      */
  10101.     public function monCompteAction(Request $request, Boutique $boutique)
  10102.     {
  10103.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  10104.            return $this->redirectToRoute('security_login');
  10105.         }
  10106.         $em = $this->getDoctrine()
  10107.                     ->getManager();
  10108.     return $this->render('admin/mon_compte.html.twig', [
  10109.            'boutique' => $boutique,
  10110.            'userBoutiques' => $userBoutiques,
  10111.            'userBoutique' => $userBoutique
  10112.         ]);
  10113.     }
  10114.     /**
  10115.      * @Route("/{slug}/mot-de-passe", name="admin_mot_de_passe")
  10116.      * @return \Symfony\Component\HttpFoundation\Response
  10117.      */
  10118.     public function motDePasseAction(Request $request, UserPasswordHasherInterface $passwordHasher, Boutique $boutique)
  10119.     {
  10120.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  10121.            return $this->redirectToRoute('security_login');
  10122.         }
  10123.         $em = $this->getDoctrine()
  10124.                     ->getManager();
  10125.         
  10126.         $user = $this->getUser();
  10127.         $error = '';
  10128.         $ok_submission = '';
  10129.         $error_submission = '';
  10130.         $actuel = $user->getPassword();
  10131.         $hashed = '';
  10132.         if('POST' == $request->getMethod())
  10133.         {
  10134.             $motDePasseActuel = $request->request->get('motDePasseActuel');
  10135.             $nouveauMotDePasse = $request->request->get('nouveauMotDePasse');
  10136.             
  10137.             $repeterMotDePasse = $request->request->get('repeterMotDePasse'); 
  10138.             //$user->setPassword('');
  10139.             //$hashed = $passwordHasher->hashPassword($user, $motDePasseActuel);
  10140.             //if(  $hashed == $user->getPassword()){
  10141.                 $user->setPassword('');
  10142.                 $hashedPassword = $passwordHasher->hashPassword($user, $nouveauMotDePasse);
  10143.                 $user->setPassword($hashedPassword);
  10144.                 $ok_submission = 'Mot de passe changé';
  10145.             //}else{
  10146.             //    $error_submission = 'Ancien mot de passe incorrect';
  10147.             //}
  10148.             //Effacer l'ancien mot de passe
  10149.             
  10150.             
  10151.             $em->flush();
  10152.         }
  10153.         $userBoutique = $em->getRepository(UserBoutique::class)
  10154.                             ->findOneBy(
  10155.                                 array(
  10156.                                     'user' => $user,
  10157.                                     'boutique' => $boutique
  10158.                                 )
  10159.                             );
  10160.     return $this->render('admin/mot_de_passe.html.twig', [
  10161.            'boutique' => $boutique,
  10162.            'userBoutique' => $userBoutique,
  10163.            'ok_submission' => $ok_submission,
  10164.            'error_submission' => $error_submission,
  10165.            'hashed' => $hashed,
  10166.            'actuel' => $actuel
  10167.         ]);
  10168.     }
  10169.     
  10170.     
  10171.     
  10172.     public function getDomain()
  10173.     {
  10174.         $domaine = $_SERVER['HTTP_HOST'];
  10175.         $protocol = '';
  10176.         if($domaine == 'localhost' || $domaine == '127.0.0.1'){
  10177.             $domaine = $domaine.'/myinvoice-def/public';
  10178.         }
  10179.         if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  10180.             $protocol = 'https://';
  10181.         } else{
  10182.             $protocol = 'http://';
  10183.         }
  10184.         
  10185.         return $protocol.$domaine;
  10186.     }
  10187.     
  10188.     public function getNumero($type, $boutique)
  10189.     {
  10190.         $numero = '';
  10191.         $em = $this->getDoctrine()
  10192.                     ->getManager();
  10193.         $nombre = 0;
  10194.         if($type == 'deposit'){
  10195.             $nombre = $em->getRepository(FactureAcompte::class)
  10196.                     ->getNumero($type, $boutique->getId());
  10197.         } else{
  10198.             $nombre = $em->getRepository(Commande::class)
  10199.                     ->getNumero($type, $boutique->getId());
  10200.         
  10201.         }
  10202.         if(empty($nombre)){
  10203.             $nombre = 1 ;
  10204.         } else {
  10205.             $nombre = (int)$nombre[0]['nombre'];
  10206.             $nombre++;
  10207.         }
  10208.         
  10209.         
  10210.         
  10211.         switch($type){
  10212.             case 'invoice':
  10213.                 $numero .= $boutique->getSettings()->getLettreDebutFacture();
  10214.             break;
  10215.             
  10216.             case 'deposit':
  10217.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAcompte();
  10218.             break;
  10219.             case 'bill_credit':
  10220.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAvoir();
  10221.             break;
  10222.             
  10223.             case 'proposal':
  10224.                 $numero .= $boutique->getSettings()->getLettreDebutDevis();
  10225.             break;
  10226.         }
  10227.         
  10228.         if($boutique->getSettings()->getIncluAnnee()){
  10229.             $numero .= date('y');
  10230.         }
  10231.         
  10232.         $nombreDeZeroAAjouter = strlen((string)$nombre);
  10233.         
  10234.         $nombreDeZeroAAjouter =  $boutique->getSettings()->getNombreDeChiffre() - $nombreDeZeroAAjouter;
  10235.         
  10236.         for($i = 0; $i < $nombreDeZeroAAjouter; $i++){
  10237.             $numero .= '0';
  10238.         }
  10239.         
  10240.         $numero .= $nombre;
  10241.         
  10242.         return $numero;
  10243.         
  10244.     }
  10245.     
  10246.     function intervalleMois($datestr)
  10247.     {
  10248.        date_default_timezone_set (date_default_timezone_get());
  10249.         $dt = strtotime ($datestr);
  10250.        return array (
  10251.          "debut" => date ('Y-m-d', strtotime ('first day of this month', $dt)),
  10252.          "fin" => date ('Y-m-d', strtotime ('last day of this month', $dt))
  10253.        );
  10254.     }
  10255.     function intervalleSemaine($datestr) {
  10256.        date_default_timezone_set (date_default_timezone_get());
  10257.        $dt = strtotime ($datestr);
  10258.        return array (
  10259.          "debut" => date ('N', $dt) == 1 ? date ('Y-m-d', $dt) : date ('Y-m-d', strtotime ('last monday', $dt)),
  10260.          "fin" => date('N', $dt) == 7 ? date ('Y-m-d', $dt) : date ('Y-m-d', strtotime ('next sunday', $dt))
  10261.        );
  10262.     }
  10263.     
  10264.     public function gererFichierMultipleImportation($data, $boutique)
  10265.     {        
  10266.             $leRetour = false;
  10267.             $em = $this->getDoctrine()->getManager();
  10268.             
  10269.             $ex = pathinfo($data['name'])['extension'];
  10270.             $exA = array('csv');
  10271.             
  10272.             if (in_array(strtolower($ex), $exA)){
  10273.             } else{
  10274.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  10275.             }
  10276.             
  10277.             $name = time();
  10278.             $namePourRepertoire = $name;
  10279.             //hydratation des attributs de l'objet
  10280.             $domaine = $_SERVER['HTTP_HOST'];
  10281.             $protocol = '';
  10282.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  10283.                 $protocol = 'https://';
  10284.             } else{
  10285.                 $protocol = 'http://';
  10286.             }
  10287.             
  10288.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  10289.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  10290.             $url = $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  10291.             
  10292.             //deplacement (création de l'image original)
  10293.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  10294.             
  10295.             
  10296.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777, true))
  10297.             {
  10298.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  10299.             }
  10300.             
  10301.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  10302.             {
  10303.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  10304.             }
  10305.             
  10306.             $fileToHandle = fopen($url, 'r');
  10307.             $row = 1;
  10308.             while (($data = fgetcsv($fileToHandle, 10000, ",")) !== false) {
  10309.                 $num = count($data);
  10310.                 //echo "<p> $num champs à la ligne $row: <br /></p>\n";
  10311.                 $row++;
  10312.                 $categorie = $data[0];
  10313.                 $categorieProduit = $em->getRepository(CategorieProduit::class)
  10314.                                 ->findOneByNom($categorie);
  10315.                 if(null == $categorieProduit){
  10316.                     $categorieProduit = new CategorieProduit;
  10317.                     $categorieProduit->setNom($categorie);
  10318.                     $em->persist($categorieProduit);
  10319.                     $em->flush();
  10320.                 }
  10321.                 
  10322.                 $ref             = $data[1];
  10323.                 $nomProd         = $data[2];
  10324.                 $prix            = $data[3];
  10325.                 $stockDisponible = $data[4];
  10326.                 $stockDAlerte    = $data[5];
  10327.                 $stockDeSecurite = $data[6];
  10328.                 $stockMinimum    = $data[7];
  10329.                 $stockMaximum    = $data[8];
  10330.                 $stockOutil      = $data[9];
  10331.                 $coutDeStockage  = $data[10];
  10332.                 
  10333.                 $produit = $em->getRepository(Produit::class)
  10334.                                 ->findOneBy(
  10335.                                     array(
  10336.                                         'reference' => $ref,
  10337.                                         'nom' => $nomProd
  10338.                                     )
  10339.                                 );
  10340.                 if(null == $produit){
  10341.                     $produit = new Produit;
  10342.                     $produit->setCategorieProduit($categorieProduit);
  10343.                     $produit->setReference($ref);
  10344.                     $produit->setNom($nomProd);
  10345.                     
  10346.                     $prixActuel = new PrixProduit;
  10347.                     $prixActuel->setValeur($prix);
  10348.                     $produit->addPrix($prixActuel);
  10349.                     $produit->setPrixActuel($prixActuel);
  10350.                     $produit->setStockDisponible($stockDisponible);
  10351.                     $produit->setStockDAlerte($stockDAlerte);
  10352.                     $produit->setStockDeSecurite($stockDeSecurite);
  10353.                     $produit->setStockMinimum($stockMinimum);
  10354.                     $produit->setStockMaximum($stockMaximum);
  10355.                     $produit->setStockOutil($stockOutil);
  10356.                     $produit->setCoutDeStockage($coutDeStockage);
  10357.                     
  10358.                     $produit->setBoutique($boutique);
  10359.                     $em->persist($produit);
  10360.                     $em->flush();
  10361.                 }
  10362.                 
  10363.                 
  10364.             }
  10365.             $leRetour = true;
  10366.             fclose($fileToHandle);
  10367.             
  10368.             //$this->getDoctrine()->getManager()->flush();
  10369.             
  10370.         return $leRetour;
  10371.     }
  10372.     public function gererFichierMultiple($anyObject, $data, $fichierUnique = false)
  10373.     {
  10374.         $nbFichier = 0; 
  10375.         
  10376.         if($fichierUnique){
  10377.             $photo = new Photo;
  10378.                 $photo->setFile($data);
  10379.                 
  10380.                 
  10381.                 
  10382.                 $ex = pathinfo($data['name'])['extension'];
  10383.                 $exA = array('jpg', 'jpeg', 'png', 'gif');
  10384.                 
  10385.                 if (in_array(strtolower($ex), $exA)){
  10386.                 
  10387.                     $photo->setExtension($ex);
  10388.                 } else {
  10389.                     throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  10390.                 }
  10391.                 
  10392.                 $name = $anyObject->getId().time();
  10393.                 $namePourRepertoire = $name;
  10394.                 //hydratation des attributs de l'objet
  10395.                 $photo->setUrl($name.'.'.$photo->getExtension());
  10396.                 $photo->setAlt('Image de ');
  10397.                 $extension = $photo->getExtension();
  10398.                 //deplacement (création de l'image original)
  10399.                 //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  10400.                 
  10401.                 
  10402.                 if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original', 0777, true))
  10403.                 {
  10404.                     throw new \RuntimeException('Impossible de créer le dossier de destination');
  10405.                 }
  10406.                 
  10407.                 if (!move_uploaded_file($data['tmp_name'], $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension()))
  10408.                 {
  10409.                     throw new \RuntimeException('Désolé, une erreur s\'est producte.');
  10410.                 }
  10411.                 try{
  10412.                     $name = $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension();
  10413.                         $nvlleImgMenu = ( $ex =='jpg' || $ex == 'jpeg') ? imagecreatefromjpeg($name) : imagecreatefrompng($name);
  10414.                         
  10415.                         $miniatureMenu = imagecreatetruecolor(600, 600);
  10416.                         
  10417.                         $largeurNvlleImgMenu = imagesx($nvlleImgMenu);
  10418.                         $hauteurNvlleImgMenu = imagesy($nvlleImgMenu);
  10419.                         $largeurMiniatureMenu = imagesx($miniatureMenu);
  10420.                         $hauteurMiniatureMenu = imagesy($miniatureMenu);
  10421.                         
  10422.                         //fusion et generation des miniatures
  10423.                         
  10424.                         imagecopyresampled($miniatureMenu, $nvlleImgMenu, 0, 0, 0, 0, $largeurMiniatureMenu, $hauteurMiniatureMenu,
  10425.                                    $largeurNvlleImgMenu, $hauteurNvlleImgMenu);
  10426.                         
  10427.                         //deplacer les nouvelles images(miniatures) dans les repertoires correspondants
  10428.                         
  10429.                         if(!is_dir($photo->getUploadRootDir().'/featured/') && !mkdir($photo->getUploadRootDir().'/featured/', 0777, true)){
  10430.                             throw \RuntimeException('Impossible de créer le dossier de destination');
  10431.                         }
  10432.                         $name = $photo->getUploadRootDir().'/featured/'.$photo->getUrl();
  10433.                         if($extension == 'jpg' || $extension == 'jpeg'){
  10434.                             imagejpeg($miniatureMenu, $name, 95);
  10435.                         } else{
  10436.                             imagepng($miniatureMenu, $name, 9);
  10437.                         }
  10438.                         $host = $_SERVER['HTTP_HOST'];
  10439.                         if($host == '127.0.0.1'){
  10440.                             $host .= '/myinvoice-def/public';
  10441.                         }
  10442.                         $fromSecure = 'http://';
  10443.                         if( isset($_SERVER['HTTPS'] ) ){
  10444.                             $fromSecure = 'https://';
  10445.                         }
  10446.                         $photo->setUrl($fromSecure.$host.'/'.$photo->getUploadDir().'/featured/'.$photo->getUrl());
  10447.                     
  10448.                         //
  10449.                     } catch(Exception $e){
  10450.                     }
  10451.                 $this->getDoctrine()->getManager()->persist($photo);
  10452.                 $this->getDoctrine()->getManager()->flush();
  10453.                 $anyObject->setPhoto($photo);
  10454.         }else{
  10455.             $tableauFichier = $this->reArrayFiles($data);
  10456.             //var_dump($tableauFichier);
  10457.             $i = 0;
  10458.             foreach ($tableauFichier as $file)
  10459.             {
  10460.                 $i++;
  10461.             //print 'File Name: ' . $file['name'];
  10462.             //print 'File Type: ' . $file['type'];
  10463.             //print 'File Size: ' . $file['size'];
  10464.         
  10465.             
  10466.                 $photo = new VisitePhoto;
  10467.                 $photo->setFile($file);
  10468.                 
  10469.                 
  10470.                 
  10471.                 $ex = pathinfo($file['name'])['extension'];
  10472.                 $exA = array('jpg', 'jpeg', 'png', 'gif', 'webp', 'svg');
  10473.                 
  10474.                 if (in_array(strtolower($ex), $exA)){
  10475.                 
  10476.                     $photo->setExtension($ex);
  10477.                 } else {
  10478.                     throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  10479.                 }
  10480.                 
  10481.                 $name = $anyObject->getId().$i.time();
  10482.                 $namePourRepertoire = $name;
  10483.                 //hydratation des attributs de l'objet
  10484.                 $photo->setUrl($name.'.'.$photo->getExtension());
  10485.                 $photo->setAlt('Image de '.$anyObject->getNom());
  10486.                 $fromSecure = 'http://';
  10487.                         if( isset($_SERVER['HTTPS'] ) ){
  10488.                             $fromSecure = 'https://';
  10489.                         }
  10490.                 $host = $_SERVER['HTTP_HOST'];
  10491.                 
  10492.                 if($host == '127.0.0.1'){
  10493.                     $host .= '/myinvoice-def/public';
  10494.                 }
  10495.                 $photo->setUrl($fromSecure.$host.'/'.$photo->getUploadDir().'/original/'.$photo->getUrl());
  10496.                     
  10497.                 //deplacement (création de l'image original)
  10498.                 //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  10499.                 
  10500.                 $anyObject->addPhoto($photo);
  10501.                 if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original', 0777, true))
  10502.                 {
  10503.                     throw new \RuntimeException('Impossible de créer le dossier de destination');
  10504.                 }
  10505.                 
  10506.                 if (!move_uploaded_file($file['tmp_name'], $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension()))
  10507.                 {
  10508.                     throw new \RuntimeException('Désolé, une erreur s\'est producte.');
  10509.                 }
  10510.                 $this->getDoctrine()->getManager()->persist($photo);
  10511.             }
  10512.         }
  10513.         $this->getDoctrine()->getManager()->flush();
  10514.         
  10515.     }
  10516.     public function reArrayFiles($file_post)
  10517.     {
  10518.         $file_ary = array();
  10519.         $file_count = count($file_post['name']);
  10520.         $file_keys = array_keys($file_post);
  10521.         for ($i=0; $i<$file_count; $i++)
  10522.         {
  10523.             foreach ($file_keys as $key)
  10524.             {
  10525.                 $file_ary[$i][$key] = $file_post[$key][$i];
  10526.             }
  10527.         }
  10528.         return $file_ary;
  10529.     }
  10530.     
  10531.     public function gererFichierMultipleCustomerImportation($data, $boutique)
  10532.     {        
  10533.             $leRetour = false;
  10534.             $em = $this->getDoctrine()->getManager();
  10535.             
  10536.             $ex = pathinfo($data['name'])['extension'];
  10537.             $exA = array('csv');
  10538.             
  10539.             if (in_array(strtolower($ex), $exA)){
  10540.             } else{
  10541.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  10542.             }
  10543.             
  10544.             $name = time();
  10545.             $namePourRepertoire = $name;
  10546.             //hydratation des attributs de l'objet
  10547.             $domaine = $_SERVER['HTTP_HOST'];
  10548.             $protocol = '';
  10549.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  10550.                 $protocol = 'https://';
  10551.             } else{
  10552.                 $protocol = 'http://';
  10553.             }
  10554.             
  10555.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  10556.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  10557.             $url = $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  10558.             
  10559.             //deplacement (création de l'image original)
  10560.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  10561.             
  10562.             
  10563.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777, true))
  10564.             {
  10565.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  10566.             }
  10567.             
  10568.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  10569.             {
  10570.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  10571.             }
  10572.             
  10573.             $fileToHandle = fopen($url, 'r');
  10574.             $row = 1;
  10575.             while (($data = fgetcsv($fileToHandle, 10000, ",")) !== false) {
  10576.                 $num = count($data);
  10577.                 $row++;
  10578.                 
  10579.                 $nomClient    = $data[0];
  10580.                 $adresse      = $data[1];
  10581.                 $codePostal   = $data[2];
  10582.                 $nomPays      = $data[3];
  10583.                 $ville        = $data[4];
  10584.                 $email        = $data[5];
  10585.                 $telephone    = $data[6];
  10586.                 $soumisALaTVA = $data[7];
  10587.                 $codeTVA      = $data[8];
  10588.                 
  10589.                 $tier = $em->getRepository(Tiers::class)
  10590.                                 ->findOneBy(
  10591.                                     array(
  10592.                                     'boutique' => $boutique->getId(),
  10593.                                     'nom' => $nomClient
  10594.                                     )
  10595.                                 );
  10596.                 if(null == $tier){
  10597.                     $tier = new Tiers;
  10598.                     $tier->setNom($nomClient);
  10599.                     $tier->setAdresse($adresse);
  10600.                     $tier->setCodePostal($codePostal);
  10601.                     $tier->setEmail($email);
  10602.                     $tier->setTelephone($telephone);
  10603.                     $tier->setVille($ville);
  10604.                     $tier->setAssujettiALaTVA($soumisALaTVA);
  10605.                     $tier->setCodeTVA($codeTVA);
  10606.                     
  10607.                     $pays = $em->getRepository(Pays::class)
  10608.                                 ->findOneBy(
  10609.                                     array(
  10610.                                     'nom' => $nomPays
  10611.                                     )
  10612.                                 );
  10613.                     if (null == $pays){
  10614.                         $pays = $em->getRepository(Pays::class)
  10615.                                 ->findOneBy(
  10616.                                     array(
  10617.                                     'nomFr' => $nomPays
  10618.                                     )
  10619.                                 );
  10620.                         if(null == $pays){
  10621.                             $pays = new Pays;
  10622.                             $pays->setNom($nomPays);
  10623.                             $em->persist($pays);
  10624.                             $em->flush();
  10625.                         }
  10626.                     }
  10627.                     
  10628.                     $tier->setPays($pays);
  10629.                     $tier->setBoutique($boutique);
  10630.                     $em->persist($tier);
  10631.                     $em->flush();
  10632.                 }    
  10633.             }
  10634.             $leRetour = true;
  10635.             fclose($fileToHandle);
  10636.             
  10637.             //$this->getDoctrine()->getManager()->flush();
  10638.             
  10639.         return $leRetour;
  10640.     }
  10641.     public function getMois()
  10642.     {
  10643.         $mois = array(
  10644.             array(
  10645.                 'index' => 1,
  10646.                 'nom' => 'Janvier'
  10647.             ),
  10648.             array(
  10649.                 'index' => 2,
  10650.                 'nom' => 'Février'
  10651.             ),
  10652.             array(
  10653.                 'index' => 3,
  10654.                 'nom' => 'Mars'
  10655.             ),
  10656.             array(
  10657.                 'index' => 4,
  10658.                 'nom' => 'Avril'
  10659.             ),
  10660.             array(
  10661.                 'index' => 5,
  10662.                 'nom' => 'Mai'
  10663.             ),
  10664.             array(
  10665.                 'index' => 6,
  10666.                 'nom' => 'Juin'
  10667.             ),
  10668.             array(
  10669.                 'index' => 7,
  10670.                 'nom' => 'Juillet'
  10671.             ),
  10672.             array(
  10673.                 'index' => 8,
  10674.                 'nom' => 'Août'
  10675.             ),
  10676.             array(
  10677.                 'index' => 9,
  10678.                 'nom' => 'Septembre'
  10679.             ),
  10680.             array(
  10681.                 'index' => 10,
  10682.                 'nom' => 'Octobre'
  10683.             ),
  10684.             array(
  10685.                 'index' => 11,
  10686.                 'nom' => 'Novembre'
  10687.             ),
  10688.             array(
  10689.                 'index' => 12,
  10690.                 'nom' => 'Décembre'
  10691.             ),
  10692.         );
  10693.         return $mois;
  10694.     }
  10695.     public function getAnnee()
  10696.     {
  10697.         $actuel = date('Y');
  10698.         $annees = array();
  10699.         for($i = $actuel; $i >= 2020; $i--){
  10700.             array_push($annees, $i);
  10701.         }
  10702.         return $annees;
  10703.     }
  10704. }