src/Controller/AdminController.php line 8252

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\Form\EmployeType;
  100. use App\Form\EmployeEditType;
  101. use App\Entity\Photo;
  102. use App\Entity\DroitUtilisateur;
  103. use Symfony\Component\HttpFoundation\Response;
  104. use Symfony\Component\HttpFoundation\Request;
  105. use Symfony\Component\HttpFoundation\JsonResponse;
  106. use Symfony\Component\Routing\Annotation\Route;
  107. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  108. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  109. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  110. use Symfony\Component\Mailer\MailerInterface;
  111. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  112. use Symfony\Component\HttpKernel\KernelInterface;
  113. use Spipu\Html2Pdf\Html2Pdf;
  114. /**
  115.  * @Route("/{_locale}/dashboard")
  116.  */
  117. class AdminController extends AbstractController
  118. {    
  119.     private $kernel;
  120.     
  121.     public function  __construct(KernelInterface $kernel)
  122.     {
  123.         $this->kernel $kernel;
  124.         
  125.     }
  126.     
  127.     /**
  128.      * @Route("/shop/{slug}", name="admin.show_shop")
  129.      * @return \Symfony\Component\HttpFoundation\Response
  130.      */
  131.     public function afficherBoutiqueAction(Request $requestBoutique $boutique)
  132.     {
  133.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  134.            return $this->redirectToRoute('security_login');
  135.         }
  136.         
  137.         
  138.         $em $this->getDoctrine()
  139.                     ->getManager();
  140.         $user $this->getUser();
  141.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  142.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  143.         $dateDebut->setTime(00);
  144.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  145.         $dateFin->setTime(2359);
  146.         
  147.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  148.         $startMonth $intervalleMois['debut'];
  149.         $endMonth $intervalleMois['fin'];
  150.         
  151.         $invoices  $em->getRepository(Commande::class)
  152.                         ->commandeParDateEtType($boutique->getId(), 'invoice'$dateDebut$dateFin);
  153.         
  154.         $startYear date('Y-01-01');
  155.         $endYear date('Y-12-31');
  156.         $userBoutique $em->getRepository(UserBoutique::class)
  157.                         ->findOneBy(
  158.                             array(
  159.                             'user' => $user->getId(),
  160.                             'boutique' => $boutique->getId()
  161.                             )
  162.                         );
  163.                         
  164.         return $this->render('admin/afficher_boutique.html.twig', [
  165.             'boutique' => $boutique,
  166.             'userBoutique' => $userBoutique,
  167.             'dateDebut' => $dateDebut,
  168.            'dateFin' => $dateFin,
  169.            'startMonth' => $startMonth,
  170.            'endMonth' => $endMonth,
  171.            'startYear' => $startYear,
  172.            'endYear' => $endYear,
  173.         ]);
  174.     }
  175.     
  176.     /**
  177.      * @Route("/shop/{slug}/mini-statistic", name="admin.mini_statistic")
  178.      * @return \Symfony\Component\HttpFoundation\Response
  179.      */
  180.     public function miniStatisticAction(Request $requestBoutique $boutique)
  181.     {
  182.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  183.            return $this->redirectToRoute('security_login');
  184.         }
  185.         
  186.         $em $this->getDoctrine()
  187.                     ->getManager();
  188.         
  189.         $user $this->getUser();
  190.               
  191.         
  192.         $mois date('mY');
  193.         $annee date('Y');
  194.         $chiffrDAffaireMois $em->getRepository(Commande::class)
  195.                         ->chiffrDAffairePeriodique($mois$boutique->getId());
  196.         
  197.         $chiffrDAffaireAnnee $em->getRepository(Commande::class)
  198.                         ->chiffrDAffairePeriodique($annee$boutique->getId());
  199.                         
  200.         $depenseMois $em->getRepository(Expensive::class)
  201.                         ->depensePeriodique($mois$boutique->getId());
  202.         $depenseAnnee $em->getRepository(Expensive::class)
  203.                         ->depensePeriodique($annee$boutique->getId());
  204.         $nombreTiers 0;
  205.         
  206.         $nombreTiers $em->getRepository(Tiers::class)
  207.                         ->nombreTiers($boutique->getId());
  208.         
  209.         $nombreProduit $em->getRepository(Produit::class)
  210.                         ->nombreProduit($boutique->getId());
  211.         
  212.         $commandParMois $em->getRepository(Commande::class)
  213.                         ->chiffrDAffaireParMois($annee$boutique->getId());
  214.         
  215.         $chiffreDAffaireSurPlsAnnees $em->getRepository(Commande::class)
  216.                         ->chiffrDAffaireSurPluisieursAnnees($boutique->getId());
  217.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  218.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  219.         $dateDebut->setTime(00);
  220.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  221.         $dateFin->setTime(2359);
  222.         if($request->getMethod() == 'POST'){
  223.             $dateDebut $request->request->get('dateDebut');
  224.             $dateDebut = new \DateTime($dateDebut);
  225.             $dateDebut->setTime(00);
  226.             $dateFin $request->request->get('dateFin');
  227.             $dateFin = new \DateTime($dateFin);
  228.             $dateFin->setTime(2359);
  229.         }
  230.         $chiffreDAffaireDUnePeriode $em->getRepository(Commande::class)
  231.                                         ->chiffreDAffaireDUnePeriode('invoice'$boutique->getId(), $dateDebut$dateFin);
  232.         
  233.         $devisPeriodique  $em->getRepository(Commande::class)
  234.                                         ->chiffreDAffaireDUnePeriode('proposal'$boutique->getId(), $dateDebut$dateFin);
  235.         
  236.         if(!empty($devisPeriodique)){
  237.             $devisPeriodique $devisPeriodique[0]['totalVente'];
  238.         }else{
  239.             $devisPeriodique 0;
  240.         }
  241.         if(!empty($chiffreDAffaireDUnePeriode)){
  242.             
  243.             $chiffreDAffaireDUnePeriode $chiffreDAffaireDUnePeriode[0]['totalVente'];
  244.         }else{
  245.             $chiffreDAffaireDUnePeriode 0;
  246.         }
  247.         $paiementDUnePeriode $em->getRepository(Payment::class)
  248.                                 ->paiementDUnePeriode($boutique$dateDebut$dateFin);
  249.         
  250.         if(!empty($paiementDUnePeriode)){
  251.             $paiementDUnePeriode $paiementDUnePeriode[0]['montantTotal'];
  252.         }else{
  253.             $paiementDUnePeriode 0;
  254.         }
  255.         $totalDepenseParDate $em->getRepository(Expensive::class)
  256.                                 ->totalDepenseParDate($boutique->getId(), $dateDebut$dateFin);
  257.         if(!empty($totalDepenseParDate)){
  258.             $totalDepenseParDate $totalDepenseParDate[0]['totalDepense'];
  259.         } else{
  260.             $totalDepenseParDate 0;
  261.         }
  262.         $soldeTimbreFNE $boutique->getSoldeTimbreFNE();
  263.         $userBoutique $em->getRepository(UserBoutique::class)
  264.                         ->findOneBy(
  265.                             array(
  266.                             'user' => $user->getId(),
  267.                             'boutique' => $boutique->getId()
  268.                             )
  269.                         );
  270.         return $this->render('admin/mini_statistic.html.twig', [
  271.            'boutique' => $boutique,
  272.            'chiffrDAffaireAnnee' => $chiffrDAffaireAnnee,
  273.            'chiffrDAffaireMois' => $chiffrDAffaireMois,
  274.            'nombreTiers' => $nombreTiers,
  275.            'nombreProduit' => $nombreProduit,
  276.            'commandParMois' => $commandParMois
  277.            'chiffreDAffaireSurPlsAnnees' => $chiffreDAffaireSurPlsAnnees,
  278.            'userBoutique' => $userBoutique,
  279.            'depenseMois' => $depenseMois,
  280.            'depenseAnnee' => $depenseAnnee,
  281.            'chiffreDAffaireDUnePeriode' => $chiffreDAffaireDUnePeriode,
  282.            'totalDepenseParDate' => $totalDepenseParDate,
  283.            'soldeTimbreFNE' => $soldeTimbreFNE,
  284.            'paiementDUnePeriode' => $paiementDUnePeriode,
  285.            'devisPeriodique' => $devisPeriodique
  286.         ]);
  287.     }
  288.     
  289.     
  290.     /**
  291.      * @Route("/sales-total/{slug}", name="admin.sales_total")
  292.      * @return \Symfony\Component\HttpFoundation\Response
  293.      */
  294.     public function salesTotal(Request $requestBoutique $boutique)
  295.     {
  296.         $em $this->getDoctrine()
  297.                     ->getManager();
  298.         
  299.         $user $this->getUser();
  300.               
  301.             
  302.         $mois date('mY');
  303.         $annee date('Y');
  304.         $chiffrDAffaireMois $em->getRepository(Commande::class)
  305.                         ->chiffrDAffairePeriodique($mois$boutique->getId());
  306.         
  307.         $chiffrDAffaireAnnee $em->getRepository(Commande::class)
  308.                         ->chiffrDAffairePeriodique($annee$boutique->getId());
  309.         $nombreTiers 0;
  310.         
  311.         $nombreTiers $em->getRepository(Tiers::class)
  312.                         ->nombreTiers($boutique->getId());
  313.         
  314.         $nombreProduit $em->getRepository(Produit::class)
  315.                         ->nombreProduit($boutique->getId());
  316.         
  317.         $commandParMois $em->getRepository(Commande::class)
  318.                         ->chiffrDAffaireParMois($annee$boutique->getId());
  319.         
  320.         $chiffreDAffaireSurPlsAnnees $em->getRepository(Commande::class)
  321.                         ->chiffrDAffaireSurPluisieursAnnees($boutique->getId());
  322.         $userBoutique $em->getRepository(UserBoutique::class)
  323.                         ->findOneBy(
  324.                             array(
  325.                             'user' => $user->getId(),
  326.                             'boutique' => $boutique->getId()
  327.                             )
  328.                         );
  329.         return $this->render('admin/sales_total.html.twig', [
  330.            'boutique' => $boutique,
  331.            'chiffrDAffaireAnnee' => $chiffrDAffaireAnnee,
  332.            'chiffrDAffaireMois' => $chiffrDAffaireMois,
  333.            'nombreTiers' => $nombreTiers,
  334.            'nombreProduit' => $nombreProduit,
  335.            'commandParMois' => $commandParMois,
  336.            'chiffreDAffaireSurPlsAnnees' => $chiffreDAffaireSurPlsAnnees,
  337.            'userBoutique' => $userBoutique
  338.         ]);
  339.     }
  340.     
  341.     
  342.     /**
  343.      * @Route("/{slug}/verifier-abonnement", name="admin.verifier_abonnement")
  344.      * @return \Symfony\Component\HttpFoundation\Response
  345.      */
  346.     public function verifierAbonnementAction(Request $requestBoutique $boutique)
  347.     {
  348.             
  349.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  350.            return $this->redirectToRoute('security_login');
  351.         }
  352.         
  353.         $em $this->getDoctrine()
  354.                     ->getManager();
  355.                     
  356.         $derniereValiditeService =  $em->getRepository(ValiditeService::class)
  357.                         ->derniereValiditeService($boutique->getId());
  358.             
  359.         $user $this->getUser();
  360.         
  361.         $nombreDeJour 0;
  362.         $aujourdhui = new \DateTime();
  363.         $interV '';
  364.         if(null !== $derniereValiditeService){
  365.                 
  366.             $interV $aujourdhui->diff($derniereValiditeService->getValableJusquAu());
  367.             
  368.             $nombreDeJour $interV->days;
  369.         }
  370.         
  371.         if($nombreDeJour <= 0){
  372.             
  373.             //return $this->redirectToRoute('choose_paied_plan');
  374.         }
  375.         $userBoutique $em->getRepository(UserBoutique::class)
  376.                         ->findOneBy(
  377.                             array(
  378.                             'user' => $user->getId(),
  379.                             'boutique' => $boutique->getId()
  380.                             )
  381.                         );
  382.         return $this->render('admin/verifier_abonnement.html.twig', [
  383.            'boutique' => $boutique,
  384.            'derniereValiditeService' => $derniereValiditeService,
  385.            'nombreDeJour' => $nombreDeJour,
  386.            'userBoutique' => $userBoutique
  387.         ]);
  388.     }
  389.     
  390.     
  391.     //Proposals
  392.     /**
  393.      * @Route("/{slug}/proposals", name="admin.proposals")
  394.      * @return \Symfony\Component\HttpFoundation\Response
  395.      */
  396.     public function proposalsActionRequest $requestBoutique $boutique)
  397.     {
  398.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  399.            return $this->redirectToRoute('security_login');
  400.         }
  401.         
  402.         $em $this->getDoctrine()
  403.                     ->getManager();
  404.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  405.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  406.         $dateDebut->setTime(00);
  407.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  408.         $dateFin->setTime(2359);
  409.         
  410.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  411.         $startMonth $intervalleMois['debut'];
  412.         $endMonth $intervalleMois['fin'];
  413.         
  414.         $proposals  $em->getRepository(Commande::class)
  415.                         ->commandeParDateEtType($boutique->getId(), 'proposal'$dateDebut$dateFin);
  416.         $user $this->getUser();
  417.         $userBoutique $em->getRepository(UserBoutique::class)
  418.                         ->findOneBy(
  419.                             array(
  420.                             'user' => $user->getId(),
  421.                             'boutique' => $boutique->getId()
  422.                             )
  423.                         );
  424.         $startYear date('Y-01-01');
  425.         $endYear date('Y-12-31');
  426.         $clients $em->getRepository(Tiers::class)
  427.                     ->findBy(
  428.                         array(
  429.                             'boutique' => $boutique->getId(),
  430.                             'estSupprime' => false
  431.                             
  432.                         ),
  433.                         array(
  434.                             'nom' => 'ASC'
  435.                         )
  436.                     );
  437.         if('POST' == $request->getMethod()){
  438.             $dateDebut $_POST['dateDebut'];
  439.             $dateFin $_POST['dateFin'];
  440.             
  441.             $dateDebut = new \DateTime($dateDebut);
  442.             $dateDebut->setTime(00);
  443.             $dateFin = new \DateTime($dateFin);
  444.             $dateFin->setTime(2359);
  445.             
  446.             $proposals  $em->getRepository(Commande::class)
  447.                         ->commandeParDateEtType($boutique->getId(), 'proposal'$dateDebut$dateFin);
  448.             
  449.             
  450.             return $this->render('admin/proposals_table_content.html.twig', [
  451.                'boutique' => $boutique,
  452.                'proposals' => $proposals,
  453.                'userBoutique' => $userBoutique
  454.             ]);
  455.             
  456.         }
  457.         
  458.         return $this->render('admin/proposals.html.twig', [
  459.            'boutique' => $boutique,
  460.            'proposals' => $proposals,
  461.            'dateDebut' => $dateDebut,
  462.            'dateFin' => $dateFin,
  463.            'startMonth' => $startMonth,
  464.            'endMonth' => $endMonth,
  465.            'startYear' => $startYear,
  466.            'endYear' => $endYear,
  467.            'userBoutique' => $userBoutique,
  468.            'clients' => $clients
  469.         ]);
  470.     }
  471.     
  472.     //Proposals
  473.     /**
  474.      * @Route("/{slug}/deposits", name="admin.deposits")
  475.      * @return \Symfony\Component\HttpFoundation\Response
  476.      */
  477.     public function depositsActionRequest $requestBoutique $boutique)
  478.     {
  479.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  480.            return $this->redirectToRoute('security_login');
  481.         }
  482.         
  483.         $em $this->getDoctrine()
  484.                     ->getManager();
  485.         
  486.             
  487.         $user $this->getUser();
  488.         $userBoutique $em->getRepository(UserBoutique::class)
  489.                         ->findOneBy(
  490.                             array(
  491.                             'user' => $user->getId(),
  492.                             'boutique' => $boutique->getId()
  493.                             )
  494.                         );
  495.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  496.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  497.         $dateDebut->setTime(00);
  498.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  499.         $dateFin->setTime(2359);
  500.         
  501.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  502.         $startMonth $intervalleMois['debut'];
  503.         $endMonth $intervalleMois['fin'];
  504.         
  505.         $deposits  $em->getRepository(FactureAcompte::class)
  506.                         ->factureParDate($boutique->getId(), $dateDebut$dateFin);
  507.         
  508.         
  509.         $startYear date('Y-01-01');
  510.         $endYear date('Y-12-31');
  511.         if('POST' == $request->getMethod()){
  512.             $dateDebut $_POST['dateDebut'];
  513.             $dateFin $_POST['dateFin'];
  514.             
  515.             $dateDebut = new \DateTime($dateDebut);
  516.             $dateDebut->setTime(00);
  517.             $dateFin = new \DateTime($dateFin);
  518.             $dateFin->setTime(2359);
  519.             
  520.             $deposits  $em->getRepository(FactureAcompte::class)
  521.                         ->factureParDate($boutique->getId(), $dateDebut$dateFin);
  522.         
  523.             return $this->render('admin/deposits_table_content.html.twig', [
  524.                'boutique' => $boutique,
  525.                'deposits' => $deposits,
  526.                 'userBoutique' => $userBoutique
  527.             ]);
  528.             
  529.         }
  530.         
  531.         
  532.     
  533.         return $this->render('admin/deposits.html.twig', [
  534.            'boutique' => $boutique,
  535.            'deposits' => $deposits,
  536.            'dateDebut' => $dateDebut,
  537.            'dateFin' => $dateFin,
  538.            'startMonth' => $startMonth,
  539.            'endMonth' => $endMonth,
  540.            'startYear' => $startYear,
  541.            'endYear' => $endYear,
  542.            'userBoutique' => $userBoutique
  543.         ]);
  544.     }
  545.     
  546.     //Proposals
  547.     /**
  548.      * @Route("/{slug}/new-deposit", name="admin.new_deposit")
  549.      * @return \Symfony\Component\HttpFoundation\Response
  550.      */
  551.     public function newDepositActionRequest $requestBoutique $boutique)
  552.     {
  553.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  554.            return $this->redirectToRoute('security_login');
  555.         }
  556.         
  557.         $responseFNE '';
  558.         $vehicules = array(1222328);
  559.         $em $this->getDoctrine()
  560.                     ->getManager();
  561.         $tvas  $em->getRepository(TVA::class)
  562.                         ->findBy(
  563.                             array(
  564.                                 'boutique' => $boutique->getId()
  565.                             )
  566.                         );
  567.         $factures  $em->getRepository(Commande::class)
  568.                         ->facturesPourVersement$boutique->getId());
  569.                         
  570.         $editMode 'new';
  571.         $user $this->getUser();
  572.         $userBoutique $em->getRepository(UserBoutique::class)
  573.                         ->findOneBy(
  574.                             array(
  575.                             'user' => $user->getId(),
  576.                             'boutique' => $boutique->getId()
  577.                             )
  578.                         );
  579.         if($request->getMethod() == 'POST'){
  580.             $facture $_POST['facture'];
  581.             $facture $em->getRepository(Commande::class)
  582.                             ->findOneBy(
  583.                                 array(
  584.                                 'boutique' => $boutique->getId(),
  585.                                 'id' => $facture
  586.                                 )
  587.                             );
  588.         
  589.             $montant $_POST['montant'];
  590.             $valableJusquAu '';
  591.             if(isset($_POST['valableJusquAu'])){
  592.                 $valableJusquAu $_POST['valableJusquAu'];
  593.             }
  594.             
  595.             $pourcentage $_POST['pourcentage'];
  596.             $appliquerTVA false;
  597.             if(isset($_POST['appliquerTVA'])){
  598.                 $appliquerTVA = (bool) $_POST['appliquerTVA'];
  599.             }
  600.             
  601.             $tva 0;
  602.             if(isset($_POST['tva'])){
  603.                 $tva $_POST['tva'];
  604.             }
  605.             $laDate '';
  606.             if(isset($_POST['laDate'])){
  607.                 $laDate $_POST['laDate'];
  608.             }
  609.             
  610.             $deposit = new FactureAcompte;
  611.             $deposit->setTotalHT($montant);
  612.             $deposit->setPourcentage($pourcentage);
  613.             $deposit->setBoutique($boutique);
  614.             $deposit->setTiers($facture->getTiers());
  615.             $deposit->setFacture($facture);
  616.             $deposit->setLaDate(new \DateTime($laDate));
  617.             $deposit->setValableJusquAu(new \DateTime($valableJusquAu));
  618.             $deposit->setNumero($this->getNumero('deposit'$boutique));
  619.             if($appliquerTVA){
  620.                 $deposit->setTotalTVA(($montant $tva)/100);
  621.                 $ttc $montant * ($tva/100);
  622.                 $deposit->setTotalTTC($ttc);
  623.                 $deposit->setValeurTVA($tva);
  624.             } else{
  625.                 $deposit->setTotalTTC($montant);
  626.                 $deposit->setValeurTVA(0);
  627.             }
  628.             $em->persist($deposit);
  629.             $em->flush();
  630.             
  631.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  632.                     
  633.             $content $this->renderView('pdf/facture_acompte.html.twig', [
  634.                 'boutique' => $boutique,
  635.                 'facture' => $deposit,
  636.             ]);
  637.             $pdf->writeHTML($content);
  638.             $name 'deposit'.$deposit->getId().time().$boutique->getId().rand(110000).'.pdf';
  639.             $lienPhysique $deposit->getUploadRootDir().$name;
  640.             
  641.             $deposit->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  642.             $pdf->output($lienPhysique'F');
  643.             
  644.             $em->flush();
  645.             
  646.             return $this->render('admin/response_new_deposit.html.twig', [
  647.                    'boutique' => $boutique,
  648.                    'commande' => $deposit,
  649.                    'responseFNE' => $responseFNE,
  650.                     'vehicules' => $vehicules
  651.                 ]);
  652.         }
  653.         return $this->render('admin/new_deposit.html.twig', [
  654.            'boutique' => $boutique,
  655.            'factures' => $factures,
  656.            'editMode' => $editMode,
  657.            'tvas' => $tvas,
  658.            'userBoutique' => $userBoutique
  659.         ]);
  660.     }
  661.     
  662.     //Proposals
  663.     /**
  664.      * @Route("/{slug}/edit-deposit/{id}", name="admin.edit_deposit")
  665.      * @return \Symfony\Component\HttpFoundation\Response
  666.      */
  667.     public function editDepositActionRequest $request,  $slug$id)
  668.     {
  669.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  670.            return $this->redirectToRoute('security_login');
  671.         }
  672.         
  673.         $em $this->getDoctrine()
  674.                     ->getManager();
  675.         
  676.         $boutique  $em->getRepository(Boutique::class)
  677.                         ->findOneBySlug($slug);
  678.         $user $this->getUser();
  679.         $userBoutique $em->getRepository(UserBoutique::class)
  680.                         ->findOneBy(
  681.                             array(
  682.                             'user' => $user->getId(),
  683.                             'boutique' => $boutique->getId()
  684.                             )
  685.                         );
  686.                         
  687.         $factures  $em->getRepository(Commande::class)
  688.                         ->findBy(
  689.                             array(
  690.                                 'boutique' => $boutique->getId(),
  691.                                 'typeFacture' => 'invoice'
  692.                             )
  693.                         );
  694.         
  695.         $tvas  $em->getRepository(TVA::class)
  696.                         ->findBy(
  697.                             array(
  698.                                 'boutique' => $boutique->getId()
  699.                             )
  700.                         );
  701.         
  702.         $deposit  $em->getRepository(FactureAcompte::class)
  703.                         ->findOneBy(
  704.                             array(
  705.                                 'boutique' => $boutique->getId(),
  706.                                 'id' => $id
  707.                             )
  708.                         );
  709.         
  710.         $editMode 'edit';
  711.         if($request->getMethod() == 'POST'){
  712.         $facture $_POST['facture'];
  713.             $facture $em->getRepository(Commande::class)
  714.                             ->findOneBy(
  715.                                 array(
  716.                                 'boutique' => $boutique->getId(),
  717.                                 'id' => $facture
  718.                                 )
  719.                             );
  720.         
  721.             $montant $_POST['montant'];
  722.             $pourcentage $_POST['pourcentage'];
  723.             $appliquerTVA false;
  724.             if(isset($_POST['appliquerTVA'])){
  725.                 $appliquerTVA = (bool) $_POST['appliquerTVA'];
  726.             }
  727.             
  728.             $tva 0;
  729.             if(isset($_POST['tva'])){
  730.                 $tva $_POST['tva'];
  731.             }
  732.             
  733.             $laDate '';
  734.             if(isset($_POST['laDate'])){
  735.                 $laDate $_POST['laDate'];
  736.             }
  737.             
  738.             $deposit->setTotalHT($montant);
  739.             $deposit->setPourcentage($pourcentage);
  740.             $deposit->setBoutique($boutique);
  741.             $deposit->setTiers($facture->getTiers());
  742.             $deposit->setLaDate(new \DateTime($laDate));
  743.             if($appliquerTVA){
  744.                 $deposit->setTotalTVA(($montant $tva)/100);
  745.                 $ttc $montant * ($tva)/100;
  746.                 $deposit->setTotalTVA(($montant $tva)/100);
  747.                 $deposit->setTotalTTC($ttc);
  748.                 $deposit->setValeurTVA($tva);
  749.             } else{
  750.                 $deposit->setTotalTTC($montant);
  751.                 $deposit->setValeurTVA(0);
  752.                 $deposit->setTotalTVA(0);
  753.             }
  754.             
  755.             $em->flush();
  756.         }
  757.         return $this->render('admin/edit_deposit.html.twig', [
  758.            'boutique' => $boutique,
  759.            'factures' => $factures,
  760.            'editMode' => $editMode,
  761.            'tvas' => $tvas,
  762.            'deposit' => $deposit,
  763.            'userBoutique' => $userBoutique
  764.         ]);
  765.     }
  766.     
  767.     /**
  768.      * @Route("/{slug}/delete-deposit/{id}", name="admin.delete_deposit")
  769.      * @return \Symfony\Component\HttpFoundation\Response
  770.      */
  771.     public function deleteDepositActionRequest $request,  $slug$id)
  772.     {
  773.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  774.            return $this->redirectToRoute('security_login');
  775.         }
  776.         
  777.         $em $this->getDoctrine()
  778.                     ->getManager();
  779.         
  780.         $boutique  $em->getRepository(Boutique::class)
  781.                         ->findOneBySlug($slug);
  782.         
  783.         $user $this->getUser();
  784.         $userBoutique $em->getRepository(UserBoutique::class)
  785.                         ->findOneBy(
  786.                             array(
  787.                             'user' => $user->getId(),
  788.                             'boutique' => $boutique->getId()
  789.                             )
  790.                         );
  791.         $deposit  $em->getRepository(FactureAcompte::class)
  792.                         ->findOneBy(
  793.                             array(
  794.                                 'boutique' => $boutique->getId(),
  795.                                 'id' => $id
  796.                             )
  797.                         );
  798.         if(null != $deposit){
  799.             $em->remove($deposit);
  800.             $em->flush();
  801.         }
  802.         return $this->redirectToRoute('admin.deposits', array('slug' => $boutique->getSlug()));
  803.     }
  804.     
  805.     
  806.     /**
  807.      * @Route("/{slug}/invoices", name="admin.invoices")
  808.      * @return \Symfony\Component\HttpFoundation\Response
  809.      */
  810.     public function invoicesActionRequest $requestBoutique $boutique)
  811.     {
  812.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  813.            return $this->redirectToRoute('security_login');
  814.         }
  815.         
  816.         $em $this->getDoctrine()
  817.                     ->getManager();
  818.                     
  819.         $paymentMethods $em->getRepository(PaymentMethod::class)
  820.                     ->findBy(
  821.                         array(
  822.                             'boutique' => $boutique->getId()
  823.                         )
  824.                     );
  825.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  826.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  827.         $dateDebut->setTime(00);
  828.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  829.         $dateFin->setTime(2359);
  830.         
  831.         
  832.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  833.         $startMonth $intervalleMois['debut'];
  834.         $endMonth $intervalleMois['fin'];
  835.         
  836.         $invoices  $em->getRepository(Commande::class)
  837.                         ->commandeParDate($boutique->getId(), $dateDebut$dateFin$boutique->getSettings()->getFactureAAfficher());
  838.         
  839.         $startYear date('Y-01-01');
  840.         $endYear date('Y-12-31');
  841.         $user $this->getUser();
  842.         
  843.         $userBoutique $em->getRepository(UserBoutique::class)
  844.                         ->findOneBy(
  845.                             array(
  846.                             'user' => $user->getId(),
  847.                             'boutique' => $boutique->getId()
  848.                             )
  849.                         );
  850.         $clients $em->getRepository(Tiers::class)
  851.                     ->findBy(
  852.                         array(
  853.                             'boutique' => $boutique->getId(),
  854.                             'estSupprime' => false
  855.                             
  856.                         ),
  857.                         array(
  858.                             'nom' => 'ASC'
  859.                         )
  860.                     );
  861.         if('POST' == $request->getMethod()){
  862.             $dateDebut $_POST['dateDebut'];
  863.             $dateFin $_POST['dateFin'];
  864.             
  865.             $dateDebut = new \DateTime($dateDebut);
  866.             $dateDebut->setTime(00);
  867.             $dateFin = new \DateTime($dateFin);
  868.             $dateFin->setTime(2359);
  869.             
  870.             $invoices  $em->getRepository(Commande::class)
  871.                         ->commandeParDate($boutique->getId(), $dateDebut$dateFin$boutique->getSettings()->getFactureAAfficher());
  872.             
  873.             
  874.             return $this->render('admin/invoices_table_content.html.twig', [
  875.                'boutique' => $boutique,
  876.                'invoices' => $invoices,
  877.                'userBoutique' => $userBoutique
  878.             ]);
  879.             
  880.         }
  881.         
  882.         return $this->render('admin/invoices.html.twig', [
  883.            'boutique' => $boutique,
  884.            'paymentMethods' => $paymentMethods,
  885.            'invoices' => $invoices,
  886.            'dateDebut' => $dateDebut,
  887.            'dateFin' => $dateFin,
  888.            'startMonth' => $startMonth,
  889.            'endMonth' => $endMonth,
  890.            'startYear' => $startYear,
  891.            'endYear' => $endYear,
  892.            'userBoutique' => $userBoutique,
  893.            'clients' => $clients
  894.         ]);
  895.     }
  896.     /**
  897.      * @Route("/{slug}/point-par-client/{id}/{type}/{dateDebut}/{dateFin}", name="admin_point_par_client")
  898.      * @return \Symfony\Component\HttpFoundation\Response
  899.      */
  900.     public function pointParClientActionRequest $request$slug$id 0$type 'invoice'$dateDebut ''$dateFin '')
  901.     {
  902.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  903.            return $this->redirectToRoute('security_login');
  904.         }
  905.         
  906.         $em $this->getDoctrine()
  907.                     ->getManager();
  908.                         
  909.         $boutique $em->getRepository(Boutique::class)
  910.                         ->findOneBySlug($slug);
  911.         
  912.         
  913.         $user $this->getUser();
  914.         $userBoutique $em->getRepository(UserBoutique::class)
  915.                         ->findOneBy(
  916.                             array(
  917.                             'user' => $user->getId(),
  918.                             'boutique' => $boutique->getId()
  919.                             )
  920.                         );
  921.         $client $em->getRepository(Tiers::class)
  922.                     ->findOneById($id);
  923.         $dateDebut = new \DateTime($dateDebut);
  924.         $dateDebut->setTime(00);
  925.         $dateFin = new \DateTime($dateFin);
  926.         $dateFin->setTime(2359);
  927.         $invoices  $em->getRepository(Commande::class)
  928.                         ->commandeParClientDateEtType($boutique->getId(), $type$id$dateDebut$dateFin);
  929.     
  930.         if($id == 0){
  931.             return $this->render('admin/point_par_client.html.twig', [
  932.                 'boutique' => $boutique,
  933.                 
  934.                 'invoices' => $invoices,
  935.                 'dateDebut' => $dateDebut,
  936.                 'dateFin' => $dateFin,
  937.                 'userBoutique' => $userBoutique,
  938.                 ]);
  939.         }
  940.        
  941.         return $this->render('admin/point_par_client.html.twig', [
  942.            'boutique' => $boutique,
  943.            
  944.            'invoices' => $invoices,
  945.            'dateDebut' => $dateDebut,
  946.            'dateFin' => $dateFin,
  947.            'userBoutique' => $userBoutique,
  948.         ]);
  949.     }
  950.     /**
  951.      * @Route("/{slug}/imprimer-point-par-client/{id}/{type}/{dateDebut}/{dateFin}", name="admin_imprimer_point_par_client")
  952.      * @return \Symfony\Component\HttpFoundation\Response
  953.      */
  954.     public function imprimerPointParClientActionRequest $request$slug$id 0$type 'invoice'$dateDebut ''$dateFin '')
  955.     {
  956.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  957.            return $this->redirectToRoute('security_login');
  958.         }
  959.         
  960.         $em $this->getDoctrine()
  961.                     ->getManager();
  962.                         
  963.         $boutique $em->getRepository(Boutique::class)
  964.                         ->findOneBySlug($slug);
  965.         
  966.         
  967.         $user $this->getUser();
  968.         $userBoutique $em->getRepository(UserBoutique::class)
  969.                         ->findOneBy(
  970.                             array(
  971.                             'user' => $user->getId(),
  972.                             'boutique' => $boutique->getId()
  973.                             )
  974.                         );
  975.         $client $em->getRepository(Tiers::class)
  976.                     ->findOneById($id);
  977.         $dateDebut = new \DateTime($dateDebut);
  978.         $dateDebut->setTime(00);
  979.         $dateFin = new \DateTime($dateFin);
  980.         $dateFin->setTime(2359);
  981.         $invoices  $em->getRepository(Commande::class)
  982.                         ->commandeParClientDateEtType($boutique->getId(), $type$id$dateDebut$dateFin);
  983.         $pdf = new Html2Pdf('P''A4''fr');
  984.         if($id == 0){
  985.             $content $this->renderView('pdf/point_pour_tous_les_clients.html.twig', [
  986.                         'boutique' => $boutique,
  987.                         'invoices' => $invoices,
  988.                         'dateDebut' => $dateDebut,
  989.                         'dateFin' => $dateFin,
  990.                         'userBoutique' => $userBoutique,
  991.                     ]);
  992.         }else{
  993.             $content $this->renderView('pdf/point_par_client.html.twig', [
  994.                         'boutique' => $boutique,
  995.                         'client' => $client,
  996.                         'invoices' => $invoices,
  997.                         'dateDebut' => $dateDebut,
  998.                         'dateFin' => $dateFin,
  999.                         'userBoutique' => $userBoutique,
  1000.                     ]);
  1001.         }
  1002.         
  1003.         $pdf->writeHTML($content);
  1004.         $name time().$boutique->getId().rand(110000).'.pdf';
  1005.         $photo = new Photo;
  1006.         $lienPhysique $photo->getUploadRootDir().$name;
  1007.                 
  1008.         $pdf->output($lienPhysique'I');
  1009.         return $this->render('pdf/point_par_client.html.twig', [
  1010.            'boutique' => $boutique,
  1011.            'client' => $client,
  1012.            'invoices' => $invoices,
  1013.            'dateDebut' => $dateDebut,
  1014.            'dateFin' => $dateFin,
  1015.            'userBoutique' => $userBoutique,
  1016.         ]);
  1017.     }
  1018.     //Proposals
  1019.     /**
  1020.      * @Route("/{slug}/detail-commande/{id}", name="admin_detail_commande")
  1021.      * @return \Symfony\Component\HttpFoundation\Response
  1022.      */
  1023.     public function detailCommandeActionRequest $request$slug$id=0)
  1024.     {
  1025.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1026.            return $this->redirectToRoute('security_login');
  1027.         }
  1028.         $em $this->getDoctrine()
  1029.                     ->getManager();
  1030.         $boutique $em->getRepository(Boutique::class)
  1031.                         ->findOneBySlug($slug);
  1032.         $produitCommandes $em->getRepository(ProduitCommande::class)
  1033.                                 ->findBy(
  1034.                                     array(
  1035.                                         'commande' => $id
  1036.                                     )
  1037.                                 );
  1038.         return $this->render('admin/detail_commande.html.twig', [
  1039.            'produitCommandes' => $produitCommandes,
  1040.         ]);
  1041.     }
  1042.     /**
  1043.      * @Route("/{slug}/rh/tableau-de-bord", name="admin_rh_tableau_de_bord")
  1044.      * @return \Symfony\Component\HttpFoundation\Response
  1045.      */
  1046.     public function rhTableauDeBordActionRequest $requestBoutique $boutique)
  1047.     {
  1048.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1049.            return $this->redirectToRoute('security_login');
  1050.         }  
  1051.         $em $this->getDoctrine()
  1052.                     ->getManager();
  1053.         
  1054.         $user $this->getUser();
  1055.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  1056.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1057.         $dateDebut->setTime(00);
  1058.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1059.         $dateFin->setTime(2359);
  1060.         
  1061.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  1062.         $startMonth $intervalleMois['debut'];
  1063.         $endMonth $intervalleMois['fin'];
  1064.         
  1065.         $startYear date('Y-01-01');
  1066.         $endYear date('Y-12-31');
  1067.         
  1068.         $estParti false;
  1069.         $nombreDEmployeActuel $em->getRepository(UserBoutique::class)
  1070.                     ->nombreDEmployeActuel($boutique->getId(), 'ROLE_EMPLOYE'$estParti);
  1071.         $nombreDEmployeActuel $nombreDEmployeActuel[0]['nombreEmploye'];
  1072.         $estParti true;
  1073.         $nombreDEmployeParti $em->getRepository(UserBoutique::class)
  1074.                     ->nombreDEmployeActuel($boutique->getId(), 'ROLE_EMPLOYE'$estParti);
  1075.         $nombreDEmployeParti $nombreDEmployeParti[0]['nombreEmploye'];
  1076.         $heureDeTravails $em->getRepository(PresenceEmployeUser::class)
  1077.                     ->heureDeTravail($boutique->getId(), $dateDebut$dateFin);
  1078.         
  1079.         $tempsDeTravail 0;
  1080.         $heureSupplementaires 0;
  1081.         
  1082.         if(!empty($heureDeTravails)){
  1083.             $tempsDeTravail $heureDeTravails[0]['tempsDeTravail'];
  1084.             $heureSupplementaires $heureDeTravails[0]['heureSupplementaire'];
  1085.         }
  1086.         
  1087.         
  1088.         $userBoutique $em->getRepository(UserBoutique::class)
  1089.                         ->findOneBy(
  1090.                             array(
  1091.                             'user' => $user->getId(),
  1092.                             'boutique' => $boutique->getId()
  1093.                             )
  1094.                         );
  1095.         
  1096.         
  1097.         return $this->render('admin/rh_tableau_de_bord.html.twig', [
  1098.            'boutique' => $boutique,
  1099.             'nombreDEmployeParti' => $nombreDEmployeParti,
  1100.            'userBoutique' => $userBoutique,
  1101.            'nombreDEmployeActuel' => $nombreDEmployeActuel,
  1102.            'tempsDeTravail' => $tempsDeTravail,
  1103.             'heureSupplementaires' => $heureSupplementaires,
  1104.             'dateDebut' => $dateDebut,
  1105.            'dateFin' => $dateFin,
  1106.            'startMonth' => $startMonth,
  1107.            'endMonth' => $endMonth,
  1108.            'startYear' => $startYear,
  1109.            'endYear' => $endYear,
  1110.         ]);
  1111.     }
  1112.     /**
  1113.      * @Route("/{slug}/rh/employees", name="admin_rh_employees")
  1114.      * @return \Symfony\Component\HttpFoundation\Response
  1115.      */
  1116.     public function employeesActionRequest $requestBoutique $boutique)
  1117.     {
  1118.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1119.            return $this->redirectToRoute('security_login');
  1120.         }      
  1121.         $em $this->getDoctrine()
  1122.                     ->getManager();
  1123.         
  1124.         $user $this->getUser();
  1125.         
  1126.         
  1127.         $employes $em->getRepository(UserBoutique::class)
  1128.                     ->findBy(
  1129.                         array(
  1130.                             'boutique' => $boutique->getId(),
  1131.                             'estParti' => false
  1132.                         )
  1133.                     );
  1134.         
  1135.         
  1136.         $userBoutique $em->getRepository(UserBoutique::class)
  1137.                         ->findOneBy(
  1138.                             array(
  1139.                             'user' => $user->getId(),
  1140.                             'boutique' => $boutique->getId(),
  1141.                             
  1142.                             )
  1143.                         );
  1144.         
  1145.         
  1146.         return $this->render('admin/employes.html.twig', [
  1147.            'boutique' => $boutique,
  1148.             'employes' => $employes,
  1149.            'userBoutique' => $userBoutique
  1150.         ]);
  1151.     }
  1152.     /**
  1153.      * @Route("/{slug}/rh/pointage-journalier", name="admin_pointage_journalier")
  1154.      * @return \Symfony\Component\HttpFoundation\Response
  1155.      */
  1156.     public function pointageJournalierActionRequest $requestBoutique $boutique)
  1157.     {
  1158.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1159.            return $this->redirectToRoute('security_login');
  1160.         }      
  1161.         $em $this->getDoctrine()
  1162.                     ->getManager();
  1163.         
  1164.         $user $this->getUser();
  1165.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  1166.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1167.         
  1168.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1169.         
  1170.         
  1171.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  1172.         $startMonth $intervalleMois['debut'];
  1173.         $endMonth $intervalleMois['fin'];
  1174.         
  1175.         $presenceEmployeParDates  $em->getRepository(PresenceEmploye::class)
  1176.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut$dateFin);
  1177.         
  1178.         $startYear date('Y-01-01');
  1179.         $endYear date('Y-12-31');
  1180.         if($request->getMethod() == 'POST'){
  1181.             $dateDebut $request->request->get('dateDebut');
  1182.             $dateDebut = new \DateTime($dateDebut);
  1183.             $dateFin $request->request->get('dateFin');
  1184.             $dateFin = new \DateTime($dateFin);
  1185.             $presenceEmployeParDates  $em->getRepository(PresenceEmploye::class)
  1186.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut$dateFin);
  1187.              return $this->render('admin/contenu_table_pointage_journalier.html.twig', [
  1188.                 
  1189.                 'presenceEmployeParDates' => $presenceEmployeParDates
  1190.                 
  1191.                 ]);
  1192.                     
  1193.         }
  1194.         $userBoutique $em->getRepository(UserBoutique::class)
  1195.                         ->findOneBy(
  1196.                             array(
  1197.                             'user' => $user->getId(),
  1198.                             'boutique' => $boutique->getId()
  1199.                             )
  1200.                         );
  1201.         
  1202.         
  1203.         return $this->render('admin/pointage_journalier.html.twig', [
  1204.            'boutique' => $boutique,
  1205.            'userBoutique' => $userBoutique,
  1206.            'presenceEmployeParDates' => $presenceEmployeParDates,
  1207.             'dateDebut' => $dateDebut,
  1208.            'dateFin' => $dateFin,
  1209.            'startMonth' => $startMonth,
  1210.            'endMonth' => $endMonth,
  1211.            'startYear' => $startYear,
  1212.            'endYear' => $endYear,
  1213.         ]);
  1214.     }
  1215.     /**
  1216.      * @Route("/{slug}/rh/element-pointage-journalier/{idPresence}", name="admin_element_pointage_journalier")
  1217.      * @return \Symfony\Component\HttpFoundation\Response
  1218.      */
  1219.     public function elementPointageJournalierActionRequest $requestBoutique $boutique$idPresence '')
  1220.     {
  1221.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1222.            return $this->redirectToRoute('security_login');
  1223.         }      
  1224.         $em $this->getDoctrine()
  1225.                     ->getManager();
  1226.         
  1227.         $user $this->getUser();
  1228.         $presenceEmploye  $em->getRepository(PresenceEmploye::class)
  1229.                         ->findOneById($idPresence);
  1230.         
  1231.         $presenceEmployeUsers  $em->getRepository(PresenceEmployeUser::class)
  1232.                         ->findByPresenceEmploye($presenceEmploye);
  1233.         
  1234.         
  1235.         
  1236.         $userBoutique $em->getRepository(UserBoutique::class)
  1237.                         ->findOneBy(
  1238.                             array(
  1239.                             'user' => $user->getId(),
  1240.                             'boutique' => $boutique->getId()
  1241.                             )
  1242.                         );
  1243.         
  1244.         
  1245.         return $this->render('admin/element_pointage_journalier.html.twig', [
  1246.            'boutique' => $boutique,
  1247.            'userBoutique' => $userBoutique,
  1248.            'presenceEmployeUsers' => $presenceEmployeUsers,
  1249.         ]);
  1250.     }
  1251.     /**
  1252.      * @Route("/{slug}/rh/nouveau-pointage-journalier", name="admin_nouveau_pointage_journalier")
  1253.      * @return \Symfony\Component\HttpFoundation\Response
  1254.      */
  1255.     public function nouveauPointageJournalierActionRequest $requestBoutique $boutique)
  1256.     {
  1257.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1258.            return $this->redirectToRoute('security_login');
  1259.         }      
  1260.         $em $this->getDoctrine()
  1261.                     ->getManager();
  1262.         
  1263.         $user $this->getUser();
  1264.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  1265.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1266.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1267.         
  1268.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  1269.         $startMonth $intervalleMois['debut'];
  1270.         $endMonth $intervalleMois['fin'];
  1271.         
  1272.         $presenceEmployeParDates  $em->getRepository(PresenceEmploye::class)
  1273.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut$dateFin);
  1274.         
  1275.         $startYear date('Y-01-01');
  1276.         $endYear date('Y-12-31');
  1277.         
  1278.         $employes $em->getRepository(UserBoutique::class)
  1279.                         ->findBy(
  1280.                             array(
  1281.                                 'boutique' => $boutique,
  1282.                                 'estParti' => false
  1283.                             )
  1284.                         );
  1285.         if($request->getMethod() == 'POST'){
  1286.             $laDate $request->request->get('la_date');
  1287.             $laDate = new \DateTime($laDate);
  1288.             $presenceEmploye = new PresenceEmploye;
  1289.             $presenceEmploye->setBoutique($boutique);
  1290.             $presenceEmploye->setLaDate($laDate);
  1291.             $em->persist($presenceEmploye);
  1292.             $em->flush();
  1293.             foreach($employes as $employe){
  1294.                 $estPresent =  (bool)$request->request->get('est_present'.$employe->getUser()->getId());
  1295.                 $heureDebut =  $request->request->get('heure_debut'.$employe->getUser()->getId());
  1296.                 $heureDebut = new \DateTime($heureDebut);
  1297.                 $heureFin =  $request->request->get('heure_fin'.$employe->getUser()->getId());
  1298.                 $heureFin = new \DateTime($heureFin);
  1299.                 $tempsDeTravail =  (float)$request->request->get('temps_de_travail'.$employe->getUser()->getId());
  1300.                 $heureSupplementaire =  $request->request->get('heure_supplementaire'.$employe->getUser()->getId());
  1301.                 
  1302.                 if($estPresent){
  1303.                     $presenceEmployeUser = new PresenceEmployeUser;
  1304.                     $presenceEmployeUser->setUser($employe->getUser());
  1305.                     $presenceEmployeUser->setBoutique($boutique);
  1306.                     $presenceEmployeUser->setPresenceEmploye($presenceEmploye);
  1307.                     $presenceEmployeUser->setEstPresent($estPresent);
  1308.                     $presenceEmployeUser->setDatePresence($laDate);
  1309.                     $presenceEmployeUser->setHeureArrivee($heureDebut);
  1310.                     $presenceEmployeUser->setHeureDepart($heureFin);
  1311.                     $presenceEmployeUser->setHeurePassee($tempsDeTravail);
  1312.                     $presenceEmployeUser->setHeureSupplementaire($heureSupplementaire);
  1313.                     $em->persist($presenceEmployeUser);
  1314.                     $em->flush();
  1315.                     
  1316.                 }
  1317.             }
  1318.         }
  1319.         $userBoutique $em->getRepository(UserBoutique::class)
  1320.                         ->findOneBy(
  1321.                             array(
  1322.                             'user' => $user->getId(),
  1323.                             'boutique' => $boutique->getId()
  1324.                             )
  1325.                         );
  1326.         
  1327.         
  1328.         return $this->render('admin/nouveau_pointage_journalier.html.twig', [
  1329.            'boutique' => $boutique,
  1330.            'userBoutique' => $userBoutique,
  1331.            'employes' => $employes,
  1332.            'presenceEmployeParDates' => $presenceEmployeParDates,
  1333.             'dateDebut' => $dateDebut,
  1334.            'dateFin' => $dateFin,
  1335.            'startMonth' => $startMonth,
  1336.            'endMonth' => $endMonth,
  1337.            'startYear' => $startYear,
  1338.            'endYear' => $endYear,
  1339.         ]);
  1340.     }
  1341.     
  1342.     
  1343.     //Salaire
  1344.     /**
  1345.      * @Route("/{slug}/rh/salaire", name="admin_rh_salaires")
  1346.      * @return \Symfony\Component\HttpFoundation\Response
  1347.      */
  1348.     public function salairesActionRequest $requestBoutique $boutique)
  1349.     {
  1350.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1351.            return $this->redirectToRoute('security_login');
  1352.         }      
  1353.         $em $this->getDoctrine()
  1354.                     ->getManager();
  1355.         
  1356.         $user $this->getUser();
  1357.         
  1358.         
  1359.         $employes $em->getRepository(UserBoutique::class)
  1360.                     ->findBy(
  1361.                         array(
  1362.                             'boutique' => $boutique->getId(),
  1363.                             'estParti' => false,
  1364.                             'estEmploye' => true
  1365.                         )
  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.         $mois $this->getMois();
  1378.         $annees $this->getAnnee();
  1379.         $moyenDePaiements = array(
  1380.             'VIREMENT BANCAIRE''CHEQUE''ESPECE''WAVE''ORANGE MONEY''MTN MONEY''MOOV MONEY'
  1381.         );
  1382.         return $this->render('admin/salaries.html.twig', [
  1383.            'boutique' => $boutique,
  1384.             'employes' => $employes,
  1385.            'userBoutique' => $userBoutique,
  1386.            'mois' => $mois,
  1387.            'annees' => $annees,
  1388.            'moyenDePaiements' => $moyenDePaiements
  1389.         ]);
  1390.     }
  1391.     /**
  1392.      * @Route("/{slug}/rh/calculer-salaire", name="admin_rh_calcuer_salaire")
  1393.      * @return \Symfony\Component\HttpFoundation\Response
  1394.      */
  1395.     public function calculerSalaireActionRequest $requestBoutique $boutique)
  1396.     {
  1397.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1398.            return $this->redirectToRoute('security_login');
  1399.         }      
  1400.         $em $this->getDoctrine()
  1401.                     ->getManager();
  1402.         
  1403.         $user $this->getUser();
  1404.         
  1405.         
  1406.         $rubriques = array();
  1407.         if($request->getMethod() == 'POST'){
  1408.             $idEmploye $request->request->get('idEmploye');
  1409.             $mois = (int)$request->request->get('mois');
  1410.             $annee $request->request->get('annee');
  1411.             $moyenDePaiement $request->request->get('moyenDePaiement');
  1412.             $employe $em->getRepository(UserBoutique::class)
  1413.                     ->findOneBy(
  1414.                         array(
  1415.                             'user' => $idEmploye,
  1416.                             'boutique' => $boutique->getId()
  1417.                         )    
  1418.                     );
  1419.             if($mois 10){
  1420.                 $mois '0'.$mois;
  1421.             }
  1422.             $dateDebutPaiementSalaire $annee.'-'.$mois.'-01';
  1423.             $dateDebutPaiementSalaire = new \DateTime($dateDebutPaiementSalaire);
  1424.             $laDatePaiement $annee.'-'.$mois.'-01';
  1425.             
  1426.             $datePaiementSalaire = new \DateTime($laDatePaiement);
  1427.             $datePaiementSalaire $datePaiementSalaire->modify('last day of this month');
  1428.             $anncienete $employe->getDateDePriseDeFonction()->diff($datePaiementSalaire);
  1429.             $nNombreDeJourDeTravail 30;
  1430.             $nNombreDeJourDeConge 0;
  1431.             
  1432.             //Salaire de base
  1433.             $salaireDeBase $em->getRepository(RubriqueSalaireEmploye::class)
  1434.                                         ->findOneBy(
  1435.                                             array(
  1436.                                                 'boutique' => $boutique->getId(),
  1437.                                                 'user' => $employe->getUser()->getId(),
  1438.                                                 'designation' => 'SALAIRE DE BASE'
  1439.                                             )
  1440.                                         );
  1441.             
  1442.             
  1443.             $rSalaireDeBase $salaireDeBase->getLaBase();
  1444.             
  1445.             //Congé
  1446.             $totaux = array();
  1447.             $conge $em->getRepository(Conge::class)
  1448.                         ->dernierConge($boutique->getId(), $employe->getUser()->getId());
  1449.             $bFautAjouterCongePaye false;
  1450.             if(!empty($conge)){
  1451.                 $dateDebut $conge[0]->getDateDebut();
  1452.                 $dateDiff $dateDebut->diff($datePaiementSalaire);
  1453.                 $nombreDeJour $dateDiff->format("%a");
  1454.                 if($nombreDeJour && $nombreDeJour <= 30 ){
  1455.                     $totaux['dateDebutConge'] = $conge[0]->getDateDebut();
  1456.                     $totaux['dateFinConge'] = $conge[0]->getDateFin();
  1457.                     $nNombreDeJourDeConge =  $conge[0]->getNombreDeJour();
  1458.                     $bFautAjouterCongePaye true;
  1459.                     if($datePaiementSalaire $conge[0]->getDateDebut()){
  1460.                         $nNombreDeJourDeTravail -= $nNombreDeJourDeConge;
  1461.                     }
  1462.                     $rSalaireDeBase = ($salaireDeBase->getLaBase() * $nNombreDeJourDeTravail)/30;
  1463.                 }
  1464.             }
  1465.             $rubrique = array(
  1466.                     'code' => $salaireDeBase->getCode(),
  1467.                     'designation' => $salaireDeBase->getDesignation(),
  1468.                     'nombre' => $nNombreDeJourDeTravail,
  1469.                     'base' => $rSalaireDeBase,
  1470.                     'tauxSalarial' => 0,
  1471.                     'gainSalarial' => $rSalaireDeBase,
  1472.                     'retenueSalarial' => 0,
  1473.                     'tauxPatronal' => 0,
  1474.                     'gainPatronal' => 0,
  1475.                     'retenuePatronal' => 0
  1476.                 
  1477.                 );    
  1478.                 array_push($rubriques$rubrique);
  1479.             
  1480.             
  1481.             $rIndemniteCongePaye 0;
  1482.             if($bFautAjouterCongePaye){
  1483.                 $rIndemniteCongePaye = ($salaireDeBase->getLaBase() * 12 $nNombreDeJourDeConge)/(10 30);
  1484.                 $rubrique = array(
  1485.                     'code' => '100',
  1486.                     'designation' => 'INDEMNITE CONGE PAYE',
  1487.                     'nombre' => $nNombreDeJourDeConge,
  1488.                     'base' => $rIndemniteCongePaye,
  1489.                     'tauxSalarial' => '',
  1490.                     'gainSalarial' => $rIndemniteCongePaye,
  1491.                     'retenueSalarial' => '',
  1492.                     'tauxPatronal' => '',
  1493.                     'gainPatronal' => '',
  1494.                     'retenuePatronal' => ''
  1495.                 
  1496.                 );
  1497.                 array_push($rubriques$rubrique);
  1498.                 
  1499.             }
  1500.             //Sursalaire
  1501.             $surSalaire $em->getRepository(RubriqueSalaireEmploye::class)
  1502.                                         ->findOneBy(
  1503.                                             array(
  1504.                                                 'boutique' => $boutique->getId(),
  1505.                                                 'user' => $employe->getUser()->getId(),
  1506.                                                 'designation' => 'SURSALAIRE'
  1507.                                             )
  1508.                                         );
  1509.             $rubrique = array(
  1510.                     'code' => $surSalaire->getCode(),
  1511.                     'designation' => $surSalaire->getDesignation(),
  1512.                     'nombre' => $nNombreDeJourDeTravail,
  1513.                     'base' => $surSalaire->getLaBase(),
  1514.                     'tauxSalarial' => '',
  1515.                     'gainSalarial' => $surSalaire->getLaBase(),
  1516.                     'retenueSalarial' => '',
  1517.                     'tauxPatronal' => '',
  1518.                     'gainPatronal' => '',
  1519.                     'retenuePatronal' => ''
  1520.                 
  1521.                 );    
  1522.                 array_push($rubriques$rubrique);
  1523.         
  1524.             //
  1525.             // Ancienneté
  1526.             $anciennte 0;
  1527.             $dateAnciennete $datePaiementSalaire->diff($employe->getDateDePriseDeFonction());
  1528.             $anneeAnciennete $dateAnciennete->format('%y');
  1529.             $moisAnciennete $dateAnciennete->format('%m');
  1530.             if(($anneeAnciennete >= && $moisAnciennete >= 1) || $anneeAnciennete 2){
  1531.                 $anciennte $anneeAnciennete;
  1532.             }
  1533.             $rMontantAnciennete = ($anciennte $salaireDeBase->getLaBase())/100;
  1534.             $rubrique = array(
  1535.                         'code' => $salaireDeBase->getCode(),
  1536.                         'designation' => 'ANCIENNETE',
  1537.                         'nombre' => '',
  1538.                         'base' => $salaireDeBase->getLaBase(),
  1539.                         'tauxSalarial' => $anciennte,
  1540.                         'gainSalarial' => $rMontantAnciennete,
  1541.                         'retenueSalarial' => '',
  1542.                         'tauxPatronal' => '',
  1543.                         'gainPatronal' => '',
  1544.                         'retenuePatronal' => ''
  1545.                     
  1546.                     );    
  1547.             array_push($rubriques$rubrique);
  1548.             $userBoutique $em->getRepository(UserBoutique::class)
  1549.                             ->findOneBy(
  1550.                                 array(
  1551.                                 'user' => $user->getId(),
  1552.                                 'boutique' => $boutique->getId()
  1553.                                 )
  1554.                             );
  1555.             $rTotalBrut $rSalaireDeBase +  $surSalaire->getLaBase() + $rMontantAnciennete $rIndemniteCongePaye;
  1556.             $rubrique = array(
  1557.                         'code' => '',
  1558.                         'designation' => 'TOTAL BRUT',
  1559.                         'nombre' => '',
  1560.                         'base' => '',
  1561.                         'tauxSalarial' => '',
  1562.                         'gainSalarial' => $rTotalBrut,
  1563.                         'retenueSalarial' => '',
  1564.                         'tauxPatronal' => '',
  1565.                         'gainPatronal' => '',
  1566.                         'retenuePatronal' => ''
  1567.                     
  1568.                     );    
  1569.             array_push($rubriques$rubrique);
  1570.             $rImpotNet 0;
  1571.             $rTranche1 0;
  1572.             $rTranche2 0;
  1573.             if($rTotalBrut 75000 && $rTotalBrut <= 240000){
  1574.                 $rTranche2 = (($rTotalBrut 75000)*16)/100;
  1575.             }else{
  1576.                 if($rTotalBrut 240000){
  1577.                     $rTranche2 = ((240000 75000)*16)/100;
  1578.                 }
  1579.             }
  1580.             $rTranche3 0;
  1581.             if ($rTotalBrut 240000 && $rTotalBrut <= 800000){
  1582.                 $rTranche3 = (($rTotalBrut 240000)*21)/100;
  1583.             }else{
  1584.                 if($rTotalBrut 800000){
  1585.                     $rTranche3 = ((800000 240000)*21)/100;
  1586.                 }
  1587.             }
  1588.             $rTranche4  0;
  1589.             if($rTotalBrut 800000 && $rTotalBrut <= 2400000){
  1590.                 $rTranche4 = (($rTotalBrut 800000)*24)/100;
  1591.             } else{
  1592.                 if($rTotalBrut 2400000){
  1593.                     $rTranche4 = ((2400000 800000)*24)/100;
  1594.                 }
  1595.             }
  1596.             $rTranche5 0;
  1597.             if($rTotalBrut 2400000 && $rTotalBrut <= 8000000){
  1598.                 $rTranche5 = ((rTotalBrut 2400000)*28)/100;
  1599.             } else{
  1600.                 if($rTotalBrut 8000000){
  1601.                     $rTranche5 = ((8000000 2400000)*28)/100;
  1602.                 }
  1603.             }
  1604.             $rTranche6 0;
  1605.             if($rTotalBrut 8000000){
  1606.                 $rTranche6 = ((rTotalBrut 8000000)*32)/100;
  1607.             }
  1608.             $rImpotBrut $rTranche1 $rTranche2 $rTranche3 $rTranche4 $rTranche5 $rTranche6;
  1609.             
  1610.             $rPartIGR  $employe->getIgr();
  1611.             $rReductionImpt1  0;
  1612.             $rReductionImpt2 0;
  1613.             if ($rPartIGR == 1.5){
  1614.                 $rReductionImpt2 5500;
  1615.             }
  1616.             $rReductionImpt3 0;
  1617.             if($rPartIGR == 2){
  1618.                 $rReductionImpt3 11000;
  1619.             }
  1620.             $rReductionImpt4 0;
  1621.             if($rPartIGR == 2.5){
  1622.                 $rReductionImpt4 16500;
  1623.             }
  1624.             $rReductionImpt5  0;
  1625.             if($rPartIGR == 3){
  1626.                 $rReductionImpt5 22000;
  1627.             }
  1628.             $rReductionImpt6 0;
  1629.             if($rPartIGR == 3.5){
  1630.                 $rReductionImpt6 27500;
  1631.             }
  1632.             $rReductionImpt7 0;
  1633.             if($rPartIGR == 4){
  1634.                 $rReductionImpt7 33000;
  1635.             }
  1636.             $rReductionImpt8 0;
  1637.             if($rPartIGR == 4.5){
  1638.                 $rReductionImpt8 38500;
  1639.             }
  1640.             $rReductionImpt9 0;
  1641.             if($rPartIGR == 5){
  1642.                 $rReductionImpt9 44000;
  1643.             }
  1644.             $rReduction $rReductionImpt1 $rReductionImpt2 $rReductionImpt3 $rReductionImpt4 $rReductionImpt5 $rReductionImpt6 $rReductionImpt7 $rReductionImpt8 $rReductionImpt9;
  1645.             $rImpotNet $rImpotBrut $rReduction;
  1646.             if($rImpotNet <= 0){
  1647.                 $rImpotNet 0;
  1648.             }
  1649.             $rubrique = array(
  1650.                         'code' => '04',
  1651.                         'designation' => 'IMPOT NET',
  1652.                         'nombre' => '',
  1653.                         'base' => '',
  1654.                         'tauxSalarial' => '',
  1655.                         'gainSalarial' => '',
  1656.                         'retenueSalarial' => $rImpotNet,
  1657.                         'tauxPatronal' => '',
  1658.                         'gainPatronal' => '',
  1659.                         'retenuePatronal' => ''
  1660.                     
  1661.                     );    
  1662.             array_push($rubriques$rubrique);
  1663.             
  1664.             $rCNPSSalarie 0;
  1665.             $rCNPSEmployeur 0;
  1666.             $cnps $em->getRepository(RubriqueSalaireEmploye::class)
  1667.                                             ->findOneBy(
  1668.                                                 array(
  1669.                                                     'boutique' => $boutique->getId(),
  1670.                                                     'user' => $employe->getUser()->getId(),
  1671.                                                     'designation' => 'CNPS'
  1672.                                                 )
  1673.                                             );
  1674.         $rCNPSSalarie = ($rTotalBrut 6.3)/100;
  1675.         $rCNPSEmployeur = ($rTotalBrut 7.7)/100;
  1676.         
  1677.         $rubrique = array(
  1678.                         'code' => $cnps->getCode(),
  1679.                         'designation' => $cnps->getDesignation(),
  1680.                         'nombre' => '',
  1681.                         'base' => $rTotalBrut,
  1682.                         'tauxSalarial' => 6.3,
  1683.                         'gainSalarial' => '',
  1684.                         'retenueSalarial' => $rCNPSSalarie,
  1685.                         'tauxPatronal' => 7.7,
  1686.                         'gainPatronal' => '',
  1687.                         'retenuePatronal' => $rCNPSEmployeur
  1688.                     
  1689.                     );    
  1690.         array_push($rubriques$rubrique);
  1691.         $rCMU 1000 1000 $employe->getNombreDEnfant();
  1692.         $rCMUSalarie $rCMU/2;
  1693.         $rCMUEmployeur $rCMU/2;
  1694.         $cmu $em->getRepository(RubriqueSalaireEmploye::class)
  1695.                                             ->findOneBy(
  1696.                                                 array(
  1697.                                                     'boutique' => $boutique->getId(),
  1698.                                                     'user' => $employe->getUser()->getId(),
  1699.                                                     'designation' => 'CMU'
  1700.                                                 )
  1701.                                             );
  1702.         
  1703.         $rubrique = array(
  1704.                         'code' => $cmu->getCode(),
  1705.                         'designation' => $cmu->getDesignation(),
  1706.                         'nombre' => '',
  1707.                         'base' => '',
  1708.                         'tauxSalarial' => '',
  1709.                         'gainSalarial' => '',
  1710.                         'retenueSalarial' => $rCMUSalarie,
  1711.                         'tauxPatronal' => '',
  1712.                         'gainPatronal' => '',
  1713.                         'retenuePatronal' => $rCMUEmployeur
  1714.                     
  1715.                     );
  1716.         
  1717.         array_push($rubriques$rubrique);
  1718.         $rPrestationFamiliale 0;
  1719.         $prestation $em->getRepository(RubriqueSalaireEmploye::class)
  1720.                                             ->findOneBy(
  1721.                                                 array(
  1722.                                                     'boutique' => $boutique->getId(),
  1723.                                                     'user' => $employe->getUser()->getId(),
  1724.                                                     'designation' => 'PRESTATION FAMILIALE'
  1725.                                                 )
  1726.                                             );
  1727.         $rPrestationFamiliale = ($prestation->getLaBase() * $prestation->getTaux())/100;
  1728.         $rubrique = array(
  1729.                         'code' => $prestation->getCode(),
  1730.                         'designation' => $prestation->getDesignation(),
  1731.                         'nombre' => '',
  1732.                         'base' => $prestation->getLaBase(),
  1733.                         'tauxSalarial' => '',
  1734.                         'gainSalarial' => '',
  1735.                         'retenueSalarial' => '',
  1736.                         'tauxPatronal' => $prestation->getTaux(),
  1737.                         'gainPatronal' => '',
  1738.                         'retenuePatronal' => $rPrestationFamiliale
  1739.                     
  1740.                     );
  1741.         
  1742.         array_push($rubriques$rubrique);
  1743.         $rAccidentDeTravail 0;
  1744.         $accident $em->getRepository(RubriqueSalaireEmploye::class)
  1745.                                             ->findOneBy(
  1746.                                                 array(
  1747.                                                     'boutique' => $boutique->getId(),
  1748.                                                     'user' => $employe->getUser()->getId(),
  1749.                                                     'designation' => 'ACCIDENT DE TRAVAIL'
  1750.                                                 )
  1751.                                             );
  1752.     $rAccidentDeTravail = ($accident->getLaBase() * $accident->getTaux())/100;
  1753.     $rubrique = array(
  1754.                         'code' => $accident->getCode(),
  1755.                         'designation' => $accident->getDesignation(),
  1756.                         'nombre' => '',
  1757.                         'base' => $accident->getLaBase(),
  1758.                         'tauxSalarial' => '',
  1759.                         'gainSalarial' => '',
  1760.                         'retenueSalarial' => '',
  1761.                         'tauxPatronal' => $accident->getTaux(),
  1762.                         'gainPatronal' => '',
  1763.                         'retenuePatronal' => $rAccidentDeTravail
  1764.                     
  1765.                     );
  1766.         
  1767.         array_push($rubriques$rubrique);
  1768.         $rTaxeDApprentissage 0;
  1769.         $taxeAppr $em->getRepository(RubriqueSalaireEmploye::class)
  1770.                                             ->findOneBy(
  1771.                                                 array(
  1772.                                                     'boutique' => $boutique->getId(),
  1773.                                                     'user' => $employe->getUser()->getId(),
  1774.                                                     'designation' => 'TAXE D\'APPRENTISSAGE'
  1775.                                                 )
  1776.                                             );
  1777.     $rTaxeDApprentissage = ($rTotalBrut $taxeAppr->getTaux())/100;
  1778.     $rubrique = array(
  1779.                         'code' => $taxeAppr->getCode(),
  1780.                         'designation' => $taxeAppr->getDesignation(),
  1781.                         'nombre' => '',
  1782.                         'base' => $rTotalBrut,
  1783.                         'tauxSalarial' => '',
  1784.                         'gainSalarial' => '',
  1785.                         'retenueSalarial' => '',
  1786.                         'tauxPatronal' => $taxeAppr->getTaux(),
  1787.                         'gainPatronal' => '',
  1788.                         'retenuePatronal' => $rTaxeDApprentissage
  1789.                     
  1790.                     );
  1791.         
  1792.         array_push($rubriques$rubrique);
  1793.         $rFormationContinue 0;
  1794.         $formationC $em->getRepository(RubriqueSalaireEmploye::class)
  1795.                                             ->findOneBy(
  1796.                                                 array(
  1797.                                                     'boutique' => $boutique->getId(),
  1798.                                                     'user' => $employe->getUser()->getId(),
  1799.                                                     'designation' => 'FORMATION CONTINUE'
  1800.                                                 )
  1801.                                             );
  1802.     $rFormationContinue = ($rTotalBrut $formationC->getTaux())/100;
  1803.     $rubrique = array(
  1804.                         'code' => $formationC->getCode(),
  1805.                         'designation' => $formationC->getDesignation(),
  1806.                         'nombre' => '',
  1807.                         'base' => $rTotalBrut,
  1808.                         'tauxSalarial' => '',
  1809.                         'gainSalarial' => '',
  1810.                         'retenueSalarial' => '',
  1811.                         'tauxPatronal' => $formationC->getTaux(),
  1812.                         'gainPatronal' => '',
  1813.                         'retenuePatronal' => $rFormationContinue
  1814.                     
  1815.                     );
  1816.         
  1817.         array_push($rubriques$rubrique);
  1818.         $rCE 0;
  1819.         $ce $em->getRepository(RubriqueSalaireEmploye::class)
  1820.                                             ->findOneBy(
  1821.                                                 array(
  1822.                                                     'boutique' => $boutique->getId(),
  1823.                                                     'user' => $employe->getUser()->getId(),
  1824.                                                     'designation' => 'CE'
  1825.                                                 )
  1826.                                             );
  1827.     $rCE = ($rTotalBrut *2.8 )/100;
  1828.     $rubrique = array(
  1829.                         'code' => $ce->getCode(),
  1830.                         'designation' => $ce->getDesignation(),
  1831.                         'nombre' => '',
  1832.                         'base' => '',
  1833.                         'tauxSalarial' => '',
  1834.                         'gainSalarial' => '',
  1835.                         'retenueSalarial' => '',
  1836.                         'tauxPatronal' => 2.8,
  1837.                         'gainPatronal' => '',
  1838.                         'retenuePatronal' => $rCE
  1839.                     
  1840.                     );
  1841.         
  1842.         array_push($rubriques$rubrique);
  1843.         $rChargeSalariales $rImpotNet $rCNPSSalarie $rCMUSalarie;
  1844.         $rChargeEmployeur $rCNPSEmployeur $rCE $rCMUEmployeur $rPrestationFamiliale $rAccidentDeTravail $rTaxeDApprentissage $rFormationContinue;
  1845.         
  1846.         $rubrique = array(
  1847.                         'code' => '',
  1848.                         'designation' => 'TOTAL COTISATION',
  1849.                         'nombre' => '',
  1850.                         'base' => '',
  1851.                         'tauxSalarial' => '',
  1852.                         'gainSalarial' => '',
  1853.                         'retenueSalarial' => $rChargeSalariales,
  1854.                         'tauxPatronal' => '',
  1855.                         'gainPatronal' => '',
  1856.                         'retenuePatronal' => $rChargeEmployeur
  1857.                     
  1858.                     );
  1859.         
  1860.         array_push($rubriques$rubrique);
  1861.         $primeDeTransport $em->getRepository(RubriqueSalaireEmploye::class)
  1862.                                             ->findOneBy(
  1863.                                                 array(
  1864.                                                     'boutique' => $boutique->getId(),
  1865.                                                     'user' => $employe->getUser()->getId(),
  1866.                                                     'designation' => 'PRIME DE TRANSPORT'
  1867.                                                 )
  1868.                                             );
  1869.     $rubrique = array(
  1870.                         'code' => $primeDeTransport->getCode(),
  1871.                         'designation' => $primeDeTransport->getDesignation(),
  1872.                         'nombre' => '',
  1873.                         'base' => $primeDeTransport->getLaBase(),
  1874.                         'tauxSalarial' => '',
  1875.                         'gainSalarial' => $primeDeTransport->getLaBase(),
  1876.                         'retenueSalarial' => '',
  1877.                         'tauxPatronal' => '',
  1878.                         'gainPatronal' => '',
  1879.                         'retenuePatronal' => ''
  1880.                     
  1881.                     );
  1882.         
  1883.         array_push($rubriques$rubrique);
  1884.     $rPrimeDeSalissure 0;
  1885.     $salissure $em->getRepository(RubriqueSalaireEmploye::class)
  1886.                                             ->findOneBy(
  1887.                                                 array(
  1888.                                                     'boutique' => $boutique->getId(),
  1889.                                                     'user' => $employe->getUser()->getId(),
  1890.                                                     'designation' => 'PRIME DE SALISSURE'
  1891.                                                 )
  1892.                                             );
  1893.     if($salissure != null){
  1894.         $rPrimeDeSalissure $salissure->getLaBase() * 7;
  1895.         if($rPrimeDeSalissure 0){ 
  1896.             
  1897.         $rubrique = array(
  1898.                             'code' => $salissure->getCode(),
  1899.                             'designation' => $salissure->getDesignation(),
  1900.                             'nombre' => 7,
  1901.                             'base' => $salissure->getLaBase(),
  1902.                             'tauxSalarial' => '',
  1903.                             'gainSalarial' => $rPrimeDeSalissure,
  1904.                             'retenueSalarial' => '',
  1905.                             'tauxPatronal' => '',
  1906.                             'gainPatronal' => '',
  1907.                             'retenuePatronal' => ''
  1908.                         
  1909.                         );
  1910.             
  1911.             array_push($rubriques$rubrique);
  1912.         }
  1913.     }
  1914.         $rPrimeDeTenue 0;
  1915.         $tenue $em->getRepository(RubriqueSalaireEmploye::class)
  1916.                                             ->findOneBy(
  1917.                                                 array(
  1918.                                                     'boutique' => $boutique->getId(),
  1919.                                                     'user' => $employe->getUser()->getId(),
  1920.                                                     'designation' => 'PRIME DE TENUE'
  1921.                                                 )
  1922.                                             );
  1923.         if($tenue != null){
  1924.             $rPrimeDeTenue $tenue->getLaBase() * 3;
  1925.             if($rPrimeDeTenue 0){
  1926.                 
  1927.                 $rubrique = array(
  1928.                                 'code' => $tenue->getCode(),
  1929.                                 'designation' => $tenue->getDesignation(),
  1930.                                 'nombre' => 3,
  1931.                                 'base' => $tenue->getLaBase(),
  1932.                                 'tauxSalarial' => '',
  1933.                                 'gainSalarial' => $rPrimeDeTenue,
  1934.                                 'retenueSalarial' => '',
  1935.                                 'tauxPatronal' => '',
  1936.                                 'gainPatronal' => '',
  1937.                                 'retenuePatronal' => ''
  1938.                             
  1939.                             );
  1940.                 
  1941.                 array_push($rubriques$rubrique);
  1942.             }
  1943.         }
  1944.     //Heures supplementaires
  1945.     $heureDeTravail $em->getRepository(PresenceEmployeUser::class)
  1946.                             ->heureDeTravail($boutique$dateDebutPaiementSalaire$datePaiementSalaire);
  1947.     $heuresSupplementaires 0;
  1948.     $heuresTravaillees 0;
  1949.         $rTauxHoraire 470;
  1950.         $rValeureuresSupplementaires 0;
  1951.         if(!empty($heureDeTravail)){
  1952.             $lesHeurs = (float)$heureDeTravail[0]['heureSupplementaire'];
  1953.             $heuresTravaillees $heureDeTravail[0]['tempsDeTravail'];
  1954.             $heuresSupplementaires =  $heureDeTravail[0]['heureSupplementaire'];
  1955.             if( $lesHeurs0){
  1956.                     $rValeureuresSupplementaires $lesHeurs *  $rTauxHoraire * (1.25);
  1957.             
  1958.                     $rubrique = array(
  1959.                                 'code' => '00',
  1960.                                 'designation' => 'HEURES SUPPLEMENTAIRES',
  1961.                                 'nombre' => $lesHeurs,
  1962.                                 'base' => $rTauxHoraire,
  1963.                                 'tauxSalarial' => '',
  1964.                                 'gainSalarial' => $rValeureuresSupplementaires,
  1965.                                 'retenueSalarial' => '',
  1966.                                 'tauxPatronal' => '',
  1967.                                 'gainPatronal' => '',
  1968.                                 'retenuePatronal' => ''
  1969.                             
  1970.                             );
  1971.                 
  1972.                 array_push($rubriques$rubrique);
  1973.             }
  1974.         }
  1975.         $supprimerPaiementSalaireDUnMoisDunEmploye $em->getRepository(RubriqueSalairePaiement::class)
  1976.                                                     ->findBy(
  1977.                                                         array(
  1978.                                                             'boutique' => $boutique->getId(),
  1979.                                                             'user' => $employe->getUser()->getId(),
  1980.                                                             'moisPaiementSalaire' =>$mois,
  1981.                                                             'anneePaiementSalaire' => $annee
  1982.                                                         )
  1983.                                                     );
  1984.         foreach($supprimerPaiementSalaireDUnMoisDunEmploye as $rb){
  1985.             $em->remove($rb);
  1986.         }
  1987.         $em->flush();
  1988.         foreach($rubriques as $rub){
  1989.             $rubriqueSalairePaiement = new RubriqueSalairePaiement;
  1990.             $rubriqueSalairePaiement->setBoutique($boutique);
  1991.             $rubriqueSalairePaiement->setUser($employe->getUser());
  1992.             $rubriqueSalairePaiement->setCode($rub['code']);
  1993.             $rubriqueSalairePaiement->setDesignation($rub['designation']);
  1994.             $rubriqueSalairePaiement->setNombre((float)$rub['nombre']);
  1995.             $rubriqueSalairePaiement->setLaBase((float)$rub['base']);
  1996.             $rubriqueSalairePaiement->setTauxSalarial((float)$rub['tauxSalarial']);
  1997.             $rubriqueSalairePaiement->setGainSalarial((float)$rub['gainSalarial']);
  1998.             $rubriqueSalairePaiement->setRetenueSalarial((float)$rub['retenueSalarial']);
  1999.             $rubriqueSalairePaiement->setTauxPatronal((float)$rub['tauxPatronal']);
  2000.             $rubriqueSalairePaiement->setGainPatronal((float)$rub['gainPatronal']);
  2001.             $rubriqueSalairePaiement->setRetenuePatronal((float)$rub['retenuePatronal']);
  2002.             $rubriqueSalairePaiement->setMoisPaiementSalaire($mois);
  2003.             $rubriqueSalairePaiement->setAnneePaiementSalaire($annee);
  2004.             $rubriqueSalairePaiement->setDatePaiementSalaire(new \DateTime());
  2005.             $em->persist($rubriqueSalairePaiement);
  2006.         }
  2007.         $em->flush();
  2008.         $paiementSalaireASupprimer $em->getRepository(PaiementSalaire::class)
  2009.                                         ->findOneBy(
  2010.                                             array(
  2011.                                                 'boutique' => $boutique->getId(),
  2012.                                                 'user' =>$employe->getUser()->getId(),
  2013.                                                 'moisSalaire' =>$mois,
  2014.                                                 'anneeSalaire' => $annee
  2015.                                             )
  2016.                                         );
  2017.         if($paiementSalaireASupprimer != null){
  2018.             $em->remove($paiementSalaireASupprimer);
  2019.             $em->flush();
  2020.         }
  2021.         $salaireNetAPayer $rTotalBrut $rChargeSalariales $primeDeTransport->getLaBase();
  2022.         $paiementSalaire = new PaiementSalaire;
  2023.         $paiementSalaire->setBoutique($boutique);
  2024.         $paiementSalaire->setUser($employe->getUser());
  2025.         $paiementSalaire->setSalaireBrut($rTotalBrut);
  2026.         $paiementSalaire->setChargesSalariales($rChargeSalariales);
  2027.         $paiementSalaire->setChargesPatronales($rChargeEmployeur);
  2028.         $paiementSalaire->setHeuresTravaillees($heuresTravaillees);
  2029.         $paiementSalaire->setHeuresSupplementaires($heuresSupplementaires);
  2030.         $paiementSalaire->setSalaireNetAPayer($salaireNetAPayer);
  2031.         $paiementSalaire->setDatePaiementFinDuMois($datePaiementSalaire);
  2032.         $paiementSalaire->setMoisSalaire($mois);
  2033.         $paiementSalaire->setAnneeSalaire($annee);
  2034.         $cumulElementPaiementSalaire $em->getRepository(PaiementSalaire::class)
  2035.                                         ->cumulElementPaiementSalaire($boutique->getId(), $employe->getUser()->getId(), new \DateTime());
  2036.         
  2037.         $cumulSalaireBrut $rTotalBrut + (float)$cumulElementPaiementSalaire['0']['cumulSalaireBrut'];
  2038.         $paiementSalaire->setCumulSalaireBrut($cumulSalaireBrut);
  2039.         
  2040.         $cumulChargesSalariales $rChargeSalariales + (float)$cumulElementPaiementSalaire['0']['cumulChargesSalariales'];
  2041.         $paiementSalaire->setCumulChargesSalariales($cumulChargesSalariales);
  2042.         $cumulChargesPatronales $rChargeEmployeur + (float)$cumulElementPaiementSalaire['0']['cumulChargesPatronales'];
  2043.         $paiementSalaire->setCumulChargesPatronales($cumulChargesPatronales);
  2044.         $cumulHeuresTravaillees =  $heuresTravaillees + (float)$cumulElementPaiementSalaire['0']['cumulHeuresTravaillees'];
  2045.         $paiementSalaire->setCumulHeuresTravaillees($cumulHeuresTravaillees);
  2046.         $cumulHeuresSupplementaires $heuresSupplementaires + (float)$cumulElementPaiementSalaire['0']['cumulHeuresSupplementaires'];
  2047.         $paiementSalaire->setCumulHeuresSupplementaires($cumulHeuresSupplementaires);
  2048.         $cumulSalaireNetAPayer $salaireNetAPayer + (float)$cumulElementPaiementSalaire['0']['cumulSalaireNetAPayer'];
  2049.         $paiementSalaire->setCumulSalaireNetAPayer($cumulSalaireNetAPayer);
  2050.         $em->persist($paiementSalaire);
  2051.         $em->flush();
  2052. }
  2053.         return $this->render('admin/calculer_salaire.html.twig', [
  2054.            'boutique' => $boutique,
  2055.            'userBoutique' => $userBoutique
  2056.         ]);
  2057.     }
  2058.     /**
  2059.      * @Route("/{slug}/rh/imprimer-bulletin-salaire/{employe}/{dateDebut}/{dateFin}/{moyenDePaiement}", name="admin_imprimer_bulletin_salaire")
  2060.      * @return \Symfony\Component\HttpFoundation\Response
  2061.      */
  2062.     public function imprimerBulletinSalaireActionRequest $requestBoutique $boutique$employe 0$dateDebut ''$dateFin ''$moyenDePaiement '')
  2063.     {
  2064.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2065.            return $this->redirectToRoute('security_login');
  2066.         }  
  2067.         $em $this->getDoctrine()
  2068.                     ->getManager();
  2069.         
  2070.         $user $this->getUser();
  2071.         $employe $em->getRepository(UserBoutique::class)
  2072.                     ->findOneBy(
  2073.                         array(
  2074.                             'boutique' => $boutique,
  2075.                             'user' => $employe
  2076.                         )
  2077.                     );
  2078.         $dateDebut = new \DateTime($dateDebut);
  2079.         $dateFin = new \DateTime($dateFin);
  2080.         $userBoutique $em->getRepository(UserBoutique::class)
  2081.                         ->findOneBy(
  2082.                             array(
  2083.                             'user' => $user->getId(),
  2084.                             'boutique' => $boutique->getId()
  2085.                             )
  2086.                         );
  2087.         
  2088.         $rubriques $em->getRepository(RubriqueSalairePaiement::class)
  2089.                                         ->findBy(
  2090.                                             array(
  2091.                                                 'boutique' => $boutique->getId(),
  2092.                                                 'user' => $employe->getUser()->getId(),
  2093.                                                 'moisPaiementSalaire' => $dateDebut->format('m'),
  2094.                                                 'anneePaiementSalaire' => $dateDebut->format('Y')
  2095.                                             )
  2096.                                         );
  2097.         $paiementSalaire $em->getRepository(PaiementSalaire::class)
  2098.                                         ->findOneBy(
  2099.                                             array(
  2100.                                                 'boutique' => $boutique->getId(),
  2101.                                                 'user' =>$employe->getUser()->getId(),
  2102.                                                 'moisSalaire' =>$dateDebut->format('m'),
  2103.                                                 'anneeSalaire' => $dateDebut->format('Y')
  2104.                                             )
  2105.                                         );
  2106.         
  2107.         $pdf = new Html2Pdf('P''A4''fr');
  2108.         $content $this->renderView('pdf/bulletin_de_salaire.html.twig', [
  2109.                         'boutique' => $boutique,
  2110.                         'dateDebut' => $dateDebut,
  2111.                         'dateFin' => $dateFin,
  2112.                         'moyenDePaiement' => $moyenDePaiement,
  2113.                         'rubriques' => $rubriques,
  2114.                         'employe' => $employe,
  2115.                         'paiementSalaire' => $paiementSalaire
  2116.                     ]);
  2117.         $pdf->writeHTML($content);
  2118.         $name $employe->getUser()->getId().time().$boutique->getId().rand(110000).'.pdf';
  2119.         $photo = new Photo;
  2120.         $lienPhysique $photo->getUploadRootDir().$name;
  2121.                 
  2122.         $pdf->output($lienPhysique'I');
  2123.         
  2124.         return $this->render('pdf/bulletin_de_salaire.html.twig', [
  2125.            'boutique' => $boutique,
  2126.             'rubriques' => $rubriques,
  2127.            'userBoutique' => $userBoutique
  2128.         ]);
  2129.     }
  2130.     /**
  2131.      * @Route("/{slug}/rh/rubriques-salaires", name="admin_rubriques_slaires")
  2132.      * @return \Symfony\Component\HttpFoundation\Response
  2133.      */
  2134.     public function rubriquesSalairesActionRequest $requestBoutique $boutique)
  2135.     {
  2136.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2137.            return $this->redirectToRoute('security_login');
  2138.         }  
  2139.         $em $this->getDoctrine()
  2140.                     ->getManager();
  2141.         
  2142.         $user $this->getUser();
  2143.         
  2144.         
  2145.         $rubriquesSalaires $em->getRepository(RubriqueSalaire::class)
  2146.                     ->findBy(
  2147.                         array(
  2148.                             'boutique' => $boutique->getId(),
  2149.                             
  2150.                         )
  2151.                     );
  2152.         
  2153.         
  2154.         $userBoutique $em->getRepository(UserBoutique::class)
  2155.                         ->findOneBy(
  2156.                             array(
  2157.                             'user' => $user->getId(),
  2158.                             'boutique' => $boutique->getId()
  2159.                             )
  2160.                         );
  2161.         
  2162.         
  2163.         return $this->render('admin/rubriques_slaires.html.twig', [
  2164.            'boutique' => $boutique,
  2165.             'rubriquesSalaires' => $rubriquesSalaires,
  2166.            'userBoutique' => $userBoutique
  2167.         ]);
  2168.     }
  2169.     
  2170.     
  2171.     /**
  2172.      * @Route("/{slug}/rh/editer-rubriques-salaires-employer/{id}", name="admin_editer_rubriques_slaires_employe")
  2173.      * @return \Symfony\Component\HttpFoundation\Response
  2174.      */
  2175.     public function editerRubriquesSalairesEmployeActionRequest $request,  $slug$id)
  2176.     {
  2177.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2178.            return $this->redirectToRoute('security_login');
  2179.         }      
  2180.         $em $this->getDoctrine()
  2181.                     ->getManager();
  2182.         
  2183.         $user $this->getUser();
  2184.         $boutique $em->getRepository(Boutique::class)
  2185.                     ->findOneBySlug($slug);
  2186.         
  2187.         
  2188.         $rubriquesSalaires $em->getRepository(RubriqueSalaire::class)
  2189.                     ->findBy(
  2190.                         array(
  2191.                             'boutique' => $boutique->getId(),    
  2192.                         )
  2193.                     );
  2194.         
  2195.         $employe $em->getRepository(AppUser::class)
  2196.                     ->findOneById($id);
  2197.         $rubriqueSalaireEmployes $em->getRepository(RubriqueSalaireEmploye::class)
  2198.                                 ->findBy(
  2199.                                     array(
  2200.                                         'boutique' => $boutique,
  2201.                                         'user' => $employe
  2202.                                     )
  2203.                                 );
  2204.         $lesRubriques = array();
  2205.         
  2206.         foreach($rubriquesSalaires as $rubriquesSalaire){
  2207.             $estDeDans false;
  2208.             if(empty($rubriqueSalaireEmployes))
  2209.             {
  2210.                 $r = array(
  2211.                             'code' => $rubriquesSalaire->getCode(),
  2212.                             'designation' =>  $rubriquesSalaire->getDesignation(),
  2213.                             'laBase' => '',
  2214.                             'taux' =>  '',
  2215.                             'part' => $rubriquesSalaire->getPart(),
  2216.                             'gainOuRetenu' => $rubriquesSalaire->getGainOuRetenu(),
  2217.                             'existeDeja' => false
  2218.                         );
  2219.                     array_push($lesRubriques$r);
  2220.             }else{
  2221.                 $taux 0;
  2222.             $laBase 0;
  2223.             $existeDeja false;
  2224.             foreach($rubriqueSalaireEmployes as $rubriqueSalaireEmploye){
  2225.                     
  2226.                 if($rubriqueSalaireEmploye->getCode() == $rubriquesSalaire->getCode()){
  2227.                     //existe_deja permet de savoir si le
  2228.                     $taux $rubriqueSalaireEmploye->getTaux();
  2229.                     $laBase $rubriqueSalaireEmploye->getLaBase();
  2230.                     $existeDeja true;
  2231.                 }else{
  2232.                     $existeDeja false;
  2233.                 }
  2234.             }
  2235.             $r = array(
  2236.                     'code' => $rubriquesSalaire->getCode(),
  2237.                     'designation' => $rubriquesSalaire->getDesignation(),
  2238.                     'laBase' => $laBase,
  2239.                     'taux'  => $taux,
  2240.                     'part' =>$rubriquesSalaire->getPart(),
  2241.                     'gainOuRetenu' => $rubriquesSalaire->getGainOuRetenu(),
  2242.                     'existeDeja' => $existeDeja
  2243.                 );
  2244.             array_push($lesRubriques$r);
  2245.             }
  2246.             
  2247.         }
  2248.         if($request->getMethod() == 'POST'){
  2249.             $i 0;
  2250.             foreach($rubriquesSalaires as $rubriquesSalaire){
  2251.                 $i++;
  2252.                 $laBase = (float)$request->request->get('la_base'.$i);
  2253.                 $taux =  (float)$request->request->get('taux'.$i);
  2254.                 $existeDeja = (bool)$request->request->get('existe_deja'.$i);
  2255.                 $rubrique $em->getRepository(RubriqueSalaireEmploye::class)
  2256.                                 ->findOneBy(
  2257.                                     array(
  2258.                                         'boutique' => $boutique,
  2259.                                         'user' => $employe,
  2260.                                         'code' =>$rubriquesSalaire->getCode()
  2261.                                     )
  2262.                                 );
  2263.                 if($rubrique == null){
  2264.                     $rubrique = new RubriqueSalaireEmploye;
  2265.                     $rubrique->setUser($employe);
  2266.                     $rubrique->setBoutique($boutique);
  2267.                     $rubrique->setCode($rubriquesSalaire->getCode());
  2268.                     $rubrique->setDesignation($rubriquesSalaire->getDesignation());
  2269.                     $rubrique->setPart($rubriquesSalaire->getPart());
  2270.                     $rubrique->setGainOuRetenu($rubriquesSalaire->getGainOuRetenu());
  2271.                 }
  2272.                 
  2273.                 $rubrique->setLaBase($laBase);
  2274.                 $rubrique->setTaux($taux);
  2275.                 $em->persist($rubrique);
  2276.                 $em->flush();
  2277.                 
  2278.                 
  2279.                 
  2280.             }
  2281.             return $this->redirectToRoute('admin_rh_salaires', array('slug' => $boutique->getSlug()));
  2282.         }
  2283.         $userBoutique $em->getRepository(UserBoutique::class)
  2284.                         ->findOneBy(
  2285.                             array(
  2286.                             'user' => $user->getId(),
  2287.                             'boutique' => $boutique->getId()
  2288.                             )
  2289.                         );
  2290.         
  2291.         
  2292.         return $this->render('admin/editer_rubriques_slaires_employe.html.twig', [
  2293.            'boutique' => $boutique,
  2294.             'rubriquesSalaires' => $rubriquesSalaires,
  2295.            'userBoutique' => $userBoutique,
  2296.            'employe' => $employe,
  2297.            'rubriqueSalaireEmployes' => $rubriqueSalaireEmployes,
  2298.            'lesRubriques' => $lesRubriques
  2299.         ]);
  2300.     }
  2301.     /**
  2302.      * @Route("/{slug}/rh/rubriques-salaires/nouveau", name="admin_nouvelle_rubrique_slaire")
  2303.      * @return \Symfony\Component\HttpFoundation\Response
  2304.      */
  2305.     public function nouvelleRubriqueSalaireActionRequest $requestBoutique $boutique)
  2306.     {
  2307.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2308.            return $this->redirectToRoute('security_login');
  2309.         }      
  2310.         $em $this->getDoctrine()
  2311.                     ->getManager();
  2312.         
  2313.         $user $this->getUser();
  2314.         
  2315.         $rubriquesSalaire = new RubriqueSalaire;
  2316.         $form $this->createForm(RubriqueSalaireType::class, $rubriquesSalaire);
  2317.         
  2318.         if($request->getMethod() == 'POST'){
  2319.             $form->handleRequest($request);
  2320.             if($form->isValid()){
  2321.                    
  2322.                 $rubriquesSalaire->setBoutique($boutique);
  2323.                    
  2324.                 $em->persist($rubriquesSalaire);
  2325.                 $em->flush();
  2326.                 
  2327.                 $ok_soumission =" Votre message a été pris en compte";
  2328.                     
  2329.                 
  2330.                 $rubriquesSalaire = new RubriqueSalaire;
  2331.                 $form $this->createForm(RubriqueSalaireType::class, $rubriquesSalaire);
  2332.                     
  2333.                 } else {
  2334.                     $error =" Veillez corrigez vos erreurs";
  2335.                 }
  2336.                 
  2337.         
  2338.         }
  2339.         $userBoutique $em->getRepository(UserBoutique::class)
  2340.                         ->findOneBy(
  2341.                             array(
  2342.                             'user' => $user->getId(),
  2343.                             'boutique' => $boutique->getId()
  2344.                             )
  2345.                         );
  2346.         
  2347.         
  2348.         return $this->render('admin/nouvelle_rubrique_salaire.html.twig', [
  2349.            'boutique' => $boutique,
  2350.             
  2351.            'userBoutique' => $userBoutique,
  2352.            'form' =>$form->createView()
  2353.         ]);
  2354.     }
  2355.     
  2356.     /**
  2357.      * @Route("/{slug}/rh/rubriques-salaires/modifier/{id}", name="admin_modifier_rubrique_salaire")
  2358.      * @return \Symfony\Component\HttpFoundation\Response
  2359.      */
  2360.     public function modifierRubriqueSalaireActionRequest $request$slug$id)
  2361.     {
  2362.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2363.            return $this->redirectToRoute('security_login');
  2364.         }      
  2365.         $em $this->getDoctrine()
  2366.                     ->getManager();
  2367.         
  2368.         $user $this->getUser();
  2369.         $boutique $em->getRepository(Boutique::class)
  2370.                                 ->findOneBySlug($slug);
  2371.         
  2372.         $rubriqueSalaire $em->getRepository(RubriqueSalaire::class)
  2373.                                 ->findOneById($id);
  2374.         $form $this->createForm(RubriqueSalaireEditType::class, $rubriqueSalaire);
  2375.         
  2376.         if($request->getMethod() == 'POST'){
  2377.             $form->handleRequest($request);
  2378.             if($form->isValid()){
  2379.     
  2380.                 $em->flush();
  2381.                 
  2382.                 $ok_soumission =" Votre message a été pris en compte";
  2383.                     
  2384.                 } else {
  2385.                     $error =" Veillez corrigez vos erreurs";
  2386.                 }
  2387.                 
  2388.         
  2389.         }
  2390.         $userBoutique $em->getRepository(UserBoutique::class)
  2391.                         ->findOneBy(
  2392.                             array(
  2393.                             'user' => $user->getId(),
  2394.                             'boutique' => $boutique->getId()
  2395.                             )
  2396.                         );
  2397.         
  2398.         
  2399.         return $this->render('admin/modifier_rubrique_salaire.html.twig', [
  2400.            'boutique' => $boutique,
  2401.            'userBoutique' => $userBoutique,
  2402.            'form' =>$form->createView()
  2403.         ]);
  2404.     }
  2405.     /**
  2406.      * @Route("/{slug}/rh/rubriques-salaires/supprimer/{id}", name="admin_supprimer_rubrique_salaire")
  2407.      * @return \Symfony\Component\HttpFoundation\Response
  2408.      */
  2409.     public function supprimerRubriqueSalaireActionRequest $request,  $slug$id)
  2410.     {
  2411.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2412.            return $this->redirectToRoute('security_login');
  2413.         }      
  2414.         $em $this->getDoctrine()
  2415.                     ->getManager();
  2416.         
  2417.         $user $this->getUser();
  2418.         $boutique $em->getRepository(Boutique::class)
  2419.                                 ->findOneBySlug($slug);
  2420.         
  2421.         $rubriquesSalaire $em->getRepository(RubriqueSalaire::class)
  2422.                                 ->findOneById($id);
  2423.     
  2424.         if(null !== $rubriquesSalaire){
  2425.             $em->remove($rubriquesSalaire);
  2426.             $em->flush();
  2427.         }
  2428.         
  2429.         return $this->redirectToRoute('admin_rubriques_slaires', array('slug'=>$boutique->getSlug()));
  2430.     }
  2431.     /**
  2432.      * @Route("/{slug}/rh/conges", name="admin_conges")
  2433.      * @return \Symfony\Component\HttpFoundation\Response
  2434.      */
  2435.     public function congesActionRequest $requestBoutique $boutique)
  2436.     {
  2437.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2438.            return $this->redirectToRoute('security_login');
  2439.         }  
  2440.         $em $this->getDoctrine()
  2441.                     ->getManager();
  2442.         
  2443.         $user $this->getUser();
  2444.     
  2445.         $userBoutiques $em->getRepository(UserBoutique::class)
  2446.                             ->findBy(
  2447.                                 array(
  2448.                                     'boutique' => $boutique->getId(),
  2449.                                     'estParti' => false
  2450.                                 )
  2451.                             );
  2452.         
  2453.         $userBoutique $em->getRepository(UserBoutique::class)
  2454.                         ->findOneBy(
  2455.                             array(
  2456.                             'user' => $user->getId(),
  2457.                             'boutique' => $boutique->getId()
  2458.                             )
  2459.                         );
  2460.         
  2461.         $employes = array();
  2462.         foreach($userBoutiques as $ub){
  2463.             $e = array(
  2464.                 'id' =>$ub->getUser()->getId(),
  2465.                 'name' =>$ub->getUser()->getNom().' '.$ub->getUser()->getPrenom(),
  2466.                 'department' => $ub->getDepartementEmploi()
  2467.             );
  2468.             array_push($employes$e);
  2469.         }
  2470.         $employes json_encode($employes);
  2471.         $conges $em->getRepository(Conge::class)
  2472.                     ->findBy(
  2473.                         array(
  2474.                         'boutique' => $boutique->getId()
  2475.                         )
  2476.                     );
  2477.         $cgs = array();
  2478.         foreach($conges as $conge){
  2479.             $cg = array(
  2480.                 'id' => $conge->getId(),
  2481.                 'employeeId' =>$conge->getUser()->getId(),
  2482.                 'employeeName' => $conge->getUser()->getNom(). ' '.$conge->getUser()->getPrenom(),
  2483.                 'type' => $conge->getTypeConge(),
  2484.                 'startDate' => $conge->getDateDebut()->format('Y-m-d'),
  2485.                 'endDate' => $conge->getDateFin()->format('Y-m-d'),
  2486.                 'notes' => $conge->getNotes()
  2487.             );
  2488.             array_push($cgs$cg);
  2489.         }
  2490.         return $this->render('admin/conges.html.twig', [
  2491.            'boutique' => $boutique,
  2492.            'userBoutiques' => $userBoutiques,
  2493.            'userBoutique' => $userBoutique,
  2494.            'employes' => $employes,
  2495.            'conges' => json_encode($cgs)
  2496.         ]);
  2497.         
  2498.     }    
  2499.     /**
  2500.      * @Route("/{slug}/rh/nouveau-conge", name="admin_rh_nouveau_conge")
  2501.      * @return \Symfony\Component\HttpFoundation\Response
  2502.      */
  2503.     public function nouveauCongeActionRequest $request,  $slug)
  2504.     {
  2505.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2506.            return $this->redirectToRoute('security_login');
  2507.         }
  2508.         $em $this->getDoctrine()
  2509.                     ->getManager();
  2510.         $boutique $em->getRepository(Boutique::class)
  2511.                         ->findOneBySlug($slug);
  2512.         $user $this->getUser();
  2513.         
  2514.         if($request->getMethod() == 'POST'){
  2515.             $employe $request->request->get('employe');
  2516.             $employe $em->getRepository(UserBoutique::class)
  2517.                     ->findOneBy(
  2518.                         array(
  2519.                             'boutique' => $boutique->getId(),
  2520.                             'user'=>$employe
  2521.                         )
  2522.                     );
  2523.             $typeConge $request->request->get('typeConge');
  2524.             $notes $request->request->get('notes');
  2525.             $dateDebut $request->request->get('dateDebut');
  2526.             $dateDebut = new \DateTime($dateDebut);
  2527.         
  2528.             $dateFin $request->request->get('dateFin');
  2529.                 
  2530.             $dateFin = new \DateTime($dateFin);
  2531.             $conge = new Conge;
  2532.             $conge->setDateDebut($dateDebut);
  2533.             $conge->setDateFin($dateFin);
  2534.             $conge->setTypeConge($typeConge);
  2535.             $conge->setNotes($notes);
  2536.             $conge->setUser($employe->getUser());
  2537.             $conge->setBoutique($boutique);
  2538.             
  2539.             $conge->setAnnee($dateDebut->format('Y'));
  2540.             $conge->setMois($dateDebut->format('m'));
  2541.             $nombreDeJour $dateFin->diff($dateDebut)->format("%a");
  2542.             $conge->setNombreDeJour($nombreDeJour);
  2543.             $em->persist($conge);
  2544.             $em->flush();
  2545.             return $this->redirectToRoute('admin_conges', array('slug'=>$boutique->getSlug()));
  2546.         }
  2547.         $userBoutique $em->getRepository(UserBoutique::class)
  2548.                         ->findOneBy(
  2549.                             array(
  2550.                             'user' => $user->getId(),
  2551.                             'boutique' => $boutique->getId()
  2552.                             )
  2553.                         );
  2554.         
  2555.         
  2556.         return $this->render('admin/nouveau_conge.html.twig', [
  2557.            'boutique' => $boutique,
  2558.            'userBoutique' => $userBoutique,
  2559.         ]);
  2560.     }
  2561.     /**
  2562.      * @Route("/{slug}/rh/nouvel-employe", name="admin.nouvel_employe")
  2563.      * @return \Symfony\Component\HttpFoundation\Response
  2564.     */
  2565.     public function nouvelEmployeAction(Request $requestUserPasswordHasherInterface $passwordHasherBoutique $boutique)
  2566.     {
  2567.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2568.            return $this->redirectToRoute('security_login');
  2569.         }
  2570.         $em $this->getDoctrine()
  2571.                     ->getManager();
  2572.         $employe = new AppUser;
  2573.         $form $this->createForm(EmployeType::class, $employe);
  2574.         $error '';
  2575.         $droits DroitUtilisateur::getDroits();
  2576.         $ok_submission '';
  2577.         if('POST' == $request->getMethod()){
  2578.             $form->handleRequest($request);
  2579.             if($form->isValid()){
  2580.                 $employe->setUsername($form->getData()->getNom().$form->getData()->getPrenom().time());
  2581.                 $roles $employe->getRoles();
  2582.                 $roles[] = 'ROLE_EMPLOYE';
  2583.                 $employe->setRoles($roles);
  2584.                 $employe->setEnabled(true);
  2585.                 $employe->setBoutique($boutique);
  2586.                 $email $form->getData()->getEmail();
  2587.                 if($email == ''){
  2588.                     $employe->setEmail($form->getData()->getNom().$form->getData()->getPrenom().time());
  2589.                 }
  2590.                 $motDePasse $request->request->get('mot_de_passe');
  2591.                 $motDePasse $request->request->get('mot_de_passe');
  2592.                 
  2593.                 $sexe $request->request->get('sexe');
  2594.                 
  2595.                 $hashedPassword $passwordHasher->hashPassword($employe$motDePasse);
  2596.                 $employe->setPassword($hashedPassword);
  2597.                 $employe->setSexe($sexe);
  2598.                 $em->persist($employe);
  2599.                 $em->flush();
  2600.                 
  2601.                 $matricule $request->request->get('matricule');
  2602.                 $salaire = (float)$request->request->get('salaire');
  2603.                 $laFonction $request->request->get('la_fonction');
  2604.                 $laQualification $request->request->get('la_qualification');
  2605.                 $categorie $request->request->get('categorie');
  2606.                 $departement $request->request->get('departement');
  2607.                 $dateDePriseDeFonction $request->request->get('date_de_prise_de_fonction');
  2608.                 $dateDePriseDeFonction = new \DateTime($dateDePriseDeFonction);
  2609.                 $nombreDEnfant =  (float)$request->request->get('nombre_d_enfant');
  2610.                 $igr =  (float)$request->request->get('igr');
  2611.                 
  2612.                 $employeBoutique = new UserBoutique;
  2613.                 $employeBoutique->setUser($employe);
  2614.                 $employeBoutique->setBoutique($boutique);
  2615.                 $employeBoutique->setMatricule($matricule);
  2616.                 $employeBoutique->setSalaire($salaire);
  2617.                 $employeBoutique->setLaFonction($laFonction);
  2618.                 $employeBoutique->setLaQualification($laQualification);
  2619.                 
  2620.                 $employeBoutique->setCategorieEmploi($categorie);
  2621.                 $employeBoutique->setDepartementEmploi($departement);
  2622.                 $employeBoutique->setDateDePriseDeFonction($dateDePriseDeFonction);
  2623.                 $employeBoutique->setNombreDEnfant($nombreDEnfant);
  2624.                 $employeBoutique->setIgr($igr);
  2625.                 $employeBoutique->setRole('ROLE_EMPLOYE');
  2626.                 $estEmploye =  $request->request->get('est_employe');
  2627.                 $employeBoutique->setEstEmploye($estEmploye);
  2628.                 //Droits 
  2629.                 
  2630.                 $lesDroits = array();
  2631.                 foreach($droits as $droit){
  2632.                     
  2633.                     $voir =  (boolean)$request->request->get($droit['nomVariable'].'voir');
  2634.                     $ajouter =  (boolean)$request->request->get($droit['nomVariable'].'ajouter');
  2635.                     $modifier = (boolean)$request->request->get($droit['nomVariable'].'modifier');
  2636.                     $supprimer = (boolean)$request->request->get($droit['nomVariable'].'supprimer');
  2637.                     $leDroit =  array(
  2638.                                             'nom' => $droit['nom'],
  2639.                                             'nomVariable' => $droit['nomVariable'],
  2640.                                             'valeurDroit' => array(
  2641.                                                     'lecture' => $voir,
  2642.                                                     'ajout' => $ajouter,
  2643.                                                     'modification' => $modifier,
  2644.                                                     'suppression' => $supprimer
  2645.                                                 )
  2646.                                             
  2647.                                 );
  2648.                     
  2649.                     array_push($lesDroits$leDroit);
  2650.                 }
  2651.                 $employeBoutique->setDroits($lesDroits);
  2652.                 $em->persist($employeBoutique);
  2653.                 $em->flush();
  2654.                 $employe = new AppUser;
  2655.                 $form $this->createForm(EmployeType::class, $employe);
  2656.                 $ok_submission 'Enregistrement effectué';
  2657.             } else{
  2658.                 $error 'error';
  2659.             }
  2660.         }
  2661.         
  2662.         $userBoutique $em->getRepository(UserBoutique::class)
  2663.                             ->findOneBy(
  2664.                                 array(
  2665.                                     'user' => $this->getUser(),
  2666.                                     'boutique' => $boutique
  2667.                                 )
  2668.                             );
  2669.         
  2670.         
  2671.         return $this->render('admin/nouvel_employe.html.twig', [ 
  2672.             'boutique' => $boutique,
  2673.             'form' => $form->createView(),
  2674.             'ok_submission' => $ok_submission,
  2675.             'error' => $error,
  2676.             'userBoutique' => $userBoutique,
  2677.             'droits' => $droits
  2678.         ]);    
  2679.     } 
  2680.     
  2681.     /**
  2682.      * @Route("/{slug}/rh/modifier-employe/{id}", name="admin_modifier_employe")
  2683.      * @return \Symfony\Component\HttpFoundation\Response
  2684.     */
  2685.     public function modifierEmployeAction(Request $request,  $slug$id)
  2686.     {
  2687.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2688.            return $this->redirectToRoute('security_login');
  2689.         }
  2690.         $em $this->getDoctrine()
  2691.                     ->getManager();
  2692.         
  2693.         $boutique $em->getRepository(Boutique::class)
  2694.                         ->findOneBySlug($slug);
  2695.         $employe $em->getRepository(AppUser::class)
  2696.                     ->findOneById($id);
  2697.         
  2698.         $employeBoutique $em->getRepository(UserBoutique::class)
  2699.                         ->findOneBy(
  2700.                                 array(
  2701.                                 'boutique' => $boutique->getId(),
  2702.                                 'user' => $employe->getId()
  2703.                                 )
  2704.                         );
  2705.         $droits $employeBoutique->getDroits();
  2706.         $form $this->createForm(EmployeEditType::class, $employe);
  2707.         $error '';
  2708.         
  2709.         $ok_submission '';
  2710.         if('POST' == $request->getMethod()){
  2711.             $form->handleRequest($request);
  2712.             if($form->isValid()){
  2713.                 $sexe $request->request->get('sexe');
  2714.                 $employe->setSexe($sexe);
  2715.                 $em->flush();
  2716.                 $ok_submission 'Enregistrement effectué';
  2717.                 $matricule $request->request->get('matricule');
  2718.                 $salaire = (float)$request->request->get('salaire');
  2719.                 $laFonction $request->request->get('la_fonction');
  2720.                 $laQualification $request->request->get('la_qualification');
  2721.                 $categorie $request->request->get('categorie');
  2722.                 $departement $request->request->get('departement');
  2723.                 $dateDePriseDeFonction $request->request->get('date_de_prise_de_fonction');
  2724.                 $dateDePriseDeFonction = new \DateTime($dateDePriseDeFonction);
  2725.                 $nombreDEnfant =  (float)$request->request->get('nombre_d_enfant');
  2726.                 $igr =  (float)$request->request->get('igr');
  2727.             
  2728.                 $employeBoutique->setMatricule($matricule);
  2729.                 $employeBoutique->setSalaire($salaire);
  2730.                 $employeBoutique->setLaFonction($laFonction);
  2731.                 $employeBoutique->setLaQualification($laQualification);
  2732.                 $employeBoutique->setCategorieEmploi($categorie);
  2733.                 $employeBoutique->setDepartementEmploi($departement);
  2734.                 $employeBoutique->setDateDePriseDeFonction($dateDePriseDeFonction);
  2735.                 $employeBoutique->setNombreDEnfant($nombreDEnfant);
  2736.                 $employeBoutique->setIgr($igr);
  2737.                 $estEmploye =  $request->request->get('est_employe');
  2738.                 $employeBoutique->setEstEmploye($estEmploye);
  2739.                 //Droits 
  2740.                 
  2741.                 $lesDroits = array();
  2742.                 foreach($droits as $droit){
  2743.                     
  2744.                     $voir =  (boolean)$request->request->get($droit['nomVariable'].'voir');
  2745.                     $ajouter =  (boolean)$request->request->get($droit['nomVariable'].'ajouter');
  2746.                     $modifier = (boolean)$request->request->get($droit['nomVariable'].'modifier');
  2747.                     $supprimer = (boolean)$request->request->get($droit['nomVariable'].'supprimer');
  2748.                     $leDroit =  array(
  2749.                                             'nom' => $droit['nom'],
  2750.                                             'nomVariable' => $droit['nomVariable'],
  2751.                                             'valeurDroit' => array(
  2752.                                                     'lecture' => $voir,
  2753.                                                     'ajout' => $ajouter,
  2754.                                                     'modification' => $modifier,
  2755.                                                     'suppression' => $supprimer
  2756.                                                 )
  2757.                                             
  2758.                                 );
  2759.                     
  2760.                     array_push($lesDroits$leDroit);
  2761.                 }
  2762.                 $employeBoutique->setDroits($lesDroits);
  2763.                 $em->flush();
  2764.             } else{
  2765.                 $error 'error';
  2766.             }
  2767.         }
  2768.         
  2769.         $userBoutique $em->getRepository(UserBoutique::class)
  2770.                             ->findOneBy(
  2771.                                 array(
  2772.                                     'user' => $this->getUser(),
  2773.                                     'boutique' => $boutique
  2774.                                 )
  2775.                             );
  2776.         
  2777.         
  2778.         return $this->render('admin/modifier_employe.html.twig', [ 
  2779.             'boutique' => $boutique,
  2780.             'form' => $form->createView(),
  2781.             'ok_submission' => $ok_submission,
  2782.             'error' => $error,
  2783.             'userBoutique' => $userBoutique,
  2784.             'employe' => $employe,
  2785.             'droits' => $droits,
  2786.             'employeBoutique' => $employeBoutique
  2787.         ]);    
  2788.     } 
  2789.     
  2790.     
  2791.     /**
  2792.      * @Route("/{slug}/comptes", name="admin_comptabilite_comptes")
  2793.      * @return \Symfony\Component\HttpFoundation\Response
  2794.      */
  2795.     public function comptesAction(Request $request,  $slug)
  2796.     {
  2797.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2798.            return $this->redirectToRoute('security_login');
  2799.         }      
  2800.         $em $this->getDoctrine()
  2801.                     ->getManager();
  2802.         $user $this->getUser();
  2803.         $boutique $em->getRepository(Boutique::class)
  2804.                     ->findOneBySlug($slug);
  2805.         $userBoutique $em->getRepository(UserBoutique::class)
  2806.                             ->findOneBy(
  2807.                                 array(
  2808.                                     'user' => $this->getUser(),
  2809.                                     'boutique' => $boutique
  2810.                                 )
  2811.                             );
  2812.         $comptes $em->getRepository(Compte::class)
  2813.                     ->findBy(
  2814.                         array(
  2815.                         'boutique' => $boutique->getId()
  2816.                         ),
  2817.                         array(
  2818.                             'numero' => 'ASC'
  2819.                         )
  2820.                         
  2821.                     );
  2822.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  2823.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  2824.         $dateDebut->setTime(00);
  2825.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  2826.         $dateFin->setTime(2359);
  2827.         
  2828.         
  2829.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  2830.         $startMonth $intervalleMois['debut'];
  2831.         $endMonth $intervalleMois['fin'];
  2832.         
  2833.         $invoices  $em->getRepository(Commande::class)
  2834.                         ->commandeParDateEtType($boutique->getId(), 'invoice'$dateDebut$dateFin);
  2835.         
  2836.         $startYear date('Y-01-01');
  2837.         $endYear date('Y-12-31');
  2838.         $user $this->getUser();
  2839.         return $this->render('admin/comptes.html.twig', [ 
  2840.             'boutique' => $boutique,
  2841.             'userBoutique' => $userBoutique,
  2842.             'comptes' => $comptes,
  2843.            'dateDebut' => $dateDebut,
  2844.            'dateFin' => $dateFin,
  2845.            'startMonth' => $startMonth,
  2846.            'endMonth' => $endMonth,
  2847.            'startYear' => $startYear,
  2848.            'endYear' => $endYear,
  2849.         ]);    
  2850.     }
  2851.     /**
  2852.      * @Route("/{slug}/ecritures-comptable-d-un-compte", name="admin_ecritures_comptale_d_un_compte")
  2853.      * @return \Symfony\Component\HttpFoundation\Response
  2854.      */
  2855.     public function ecrituresComptableDUnCompteAction(Request $request,  $slug)
  2856.     {
  2857.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2858.            return $this->redirectToRoute('security_login');
  2859.         }      
  2860.         $em $this->getDoctrine()
  2861.                     ->getManager();
  2862.         $user $this->getUser();
  2863.         $boutique $em->getRepository(Boutique::class)
  2864.                     ->findOneBySlug($slug);
  2865.         $userBoutique $em->getRepository(UserBoutique::class)
  2866.                             ->findOneBy(
  2867.                                 array(
  2868.                                     'user' => $this->getUser(),
  2869.                                     'boutique' => $boutique
  2870.                                 )
  2871.                             );
  2872.         if($request->getMethod() == 'POST'){
  2873.             $compte $request->request->get('compte');
  2874.             $dateDebut $request->request->get('dateDebut');
  2875.             $dateDebut = new \DateTime($dateDebut);
  2876.             $dateFin $request->request->get('dateFin');
  2877.             $dateFin = new \DateTime($dateFin);
  2878.             $ecrituresComptables $em->getRepository(EcritureComptable::class)
  2879.                     ->ecrituresComptableParDate($boutique$dateDebut$dateFin$compte);
  2880.         }
  2881.         return $this->render('admin/ecritures_comptale_d_un_compte.html.twig', [ 
  2882.             'boutique' => $boutique,
  2883.             'userBoutique' => $userBoutique,
  2884.             'ecrituresComptables' => $ecrituresComptables
  2885.         ]);    
  2886.     }
  2887.     /**
  2888.      * @Route("/{slug}/nouveau-compte", name="admin_nouveau_compte")
  2889.      * @return \Symfony\Component\HttpFoundation\Response
  2890.      */
  2891.     public function nouveauCompteAction(Request $requestBoutique $boutique)
  2892.     {
  2893.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2894.            return $this->redirectToRoute('security_login');
  2895.         }
  2896.         $em $this->getDoctrine()
  2897.                     ->getManager();
  2898.         
  2899.         $compte = new Compte;
  2900.         
  2901.         $user $this->getUser();
  2902.         $userBoutique $em->getRepository(UserBoutique::class)
  2903.                         ->findOneBy(
  2904.                             array(
  2905.                             'user' => $user->getId(),
  2906.                             'boutique' => $boutique->getId()
  2907.                             )
  2908.                         );
  2909.         $form $this->createForm(CompteType::class, $compte, array('boutique' => $boutique->getId()));
  2910.         
  2911.         $ok_soumission '';
  2912.         $error '';
  2913.         
  2914.         if($request->getMethod() == 'POST'){
  2915.             
  2916.                $form->handleRequest($request);
  2917.                if($form->isValid()){
  2918.                    $compte->setBoutique($boutique);
  2919.                   $em->persist($compte);
  2920.                   $em->flush();
  2921.         
  2922.                 $ok_soumission =" Votre message a été pris en compte";
  2923.                     
  2924.                 unset($compte);
  2925.                 unset($form);
  2926.                 $compte = new Compte;
  2927.                 
  2928.                 $form $this->createForm(CompteType::class, $compte, array('boutique' => $boutique->getId()));
  2929.                     
  2930.                 } else {
  2931.                     $error =" Veillez corrigez vos erreurs";
  2932.                 }
  2933.         }
  2934.     
  2935.         return $this->render('admin/nouveau_compte.html.twig', [
  2936.            'boutique' => $boutique,
  2937.            'form' => $form->createView(),
  2938.            'userBoutique' => $userBoutique
  2939.         ]);
  2940.     }
  2941.     /**
  2942.      * @Route("/{slug}/journaux", name="admin_comptabilite_journaux")
  2943.      * @return \Symfony\Component\HttpFoundation\Response
  2944.      */
  2945.     public function journauxAction(Request $requestBoutique $boutique)
  2946.     {
  2947.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2948.            return $this->redirectToRoute('security_login');
  2949.         }
  2950.         $em $this->getDoctrine()
  2951.                     ->getManager();
  2952.         
  2953.         $compte = new Compte;
  2954.         
  2955.         $user $this->getUser();
  2956.         $userBoutique $em->getRepository(UserBoutique::class)
  2957.                         ->findOneBy(
  2958.                             array(
  2959.                             'user' => $user->getId(),
  2960.                             'boutique' => $boutique->getId()
  2961.                             )
  2962.                         );
  2963.         
  2964.         $journaux $em->getRepository(JournalComptabilite::class)
  2965.                         ->findBy(
  2966.                             array(
  2967.                                 'boutique' => $boutique->getId(),
  2968.                                 'estSupprime' => false
  2969.                             ),
  2970.                             array(
  2971.                                 'nom' => 'ASC'
  2972.                             )
  2973.                         );
  2974.     
  2975.         return $this->render('admin/journaux.html.twig', [
  2976.            'boutique' => $boutique,
  2977.            'journaux' => $journaux,
  2978.            'userBoutique' => $userBoutique
  2979.         ]);
  2980.     }
  2981.     /**
  2982.      * @Route("/{slug}/nouveau-journal", name="admin_comptabilite_nouveau_journal")
  2983.      * @return \Symfony\Component\HttpFoundation\Response
  2984.      */
  2985.     public function nouveauJournalAction(Request $requestBoutique $boutique)
  2986.     {
  2987.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2988.            return $this->redirectToRoute('security_login');
  2989.         }
  2990.         $em $this->getDoctrine()
  2991.                     ->getManager();
  2992.         
  2993.         $journal = new JournalComptabilite;
  2994.         
  2995.         $user $this->getUser();
  2996.         $userBoutique $em->getRepository(UserBoutique::class)
  2997.                         ->findOneBy(
  2998.                             array(
  2999.                             'user' => $user->getId(),
  3000.                             'boutique' => $boutique->getId()
  3001.                             )
  3002.                         );
  3003.         $form $this->createForm(JournalComptabiliteType::class, $journal);
  3004.         
  3005.         $ok_soumission '';
  3006.         $error '';
  3007.         
  3008.         if($request->getMethod() == 'POST'){
  3009.             
  3010.                $form->handleRequest($request);
  3011.                if($form->isValid()){
  3012.                    $journal->setBoutique($boutique);
  3013.                   $em->persist($journal);
  3014.                   $em->flush();
  3015.         
  3016.                 $ok_soumission =" Votre message a été pris en compte";
  3017.                     
  3018.                 unset($journal);
  3019.                 unset($form);
  3020.                 $journal = new JournalComptabilite;
  3021.                 
  3022.                 $form $this->createForm(JournalComptabiliteType::class, $journal);
  3023.                     
  3024.                 } else {
  3025.                     $error =" Veillez corrigez vos erreurs";
  3026.                 }
  3027.         }
  3028.     
  3029.         return $this->render('admin/nouveau_journal.html.twig', [
  3030.            'boutique' => $boutique,
  3031.            'form' => $form->createView(),
  3032.            'userBoutique' => $userBoutique
  3033.         ]);
  3034.     }
  3035.     /**
  3036.      * @Route("/{slug}/modifier-journal/{id}", name="admin_comptabilite_modifier_journal")
  3037.      * @return \Symfony\Component\HttpFoundation\Response
  3038.      */
  3039.     public function modifierJournalAction(Request $request,  $slug$id)
  3040.     {
  3041.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3042.            return $this->redirectToRoute('security_login');
  3043.         }
  3044.         $em $this->getDoctrine()
  3045.                     ->getManager();
  3046.         
  3047.         $journal $em->getRepository(JournalComptabilite::class)
  3048.                     ->findOneById($id);
  3049.         $boutique $em->getRepository(Boutique::class)
  3050.                     ->findOneBySlug($slug);
  3051.         
  3052.         $user $this->getUser();
  3053.         $userBoutique $em->getRepository(UserBoutique::class)
  3054.                         ->findOneBy(
  3055.                             array(
  3056.                             'user' => $user->getId(),
  3057.                             'boutique' => $boutique->getId()
  3058.                             )
  3059.                         );
  3060.         $form $this->createForm(JournalComptabiliteEditType::class, $journal);
  3061.         
  3062.         $ok_soumission '';
  3063.         $error '';
  3064.         
  3065.         if($request->getMethod() == 'POST'){
  3066.             
  3067.                $form->handleRequest($request);
  3068.                if($form->isValid()){
  3069.                   $em->flush();
  3070.         
  3071.                 $ok_soumission =" Votre message a été pris en compte";
  3072.                     
  3073.                     
  3074.                 } else {
  3075.                     $error =" Veillez corrigez vos erreurs";
  3076.                 }
  3077.         }
  3078.     
  3079.         return $this->render('admin/modifier_journal.html.twig', [
  3080.            'boutique' => $boutique,
  3081.            'form' => $form->createView(),
  3082.            'userBoutique' => $userBoutique,
  3083.            'journal' => $journal
  3084.         ]);
  3085.     }
  3086.     /**
  3087.      * @Route("/{slug}/supprimer-journal/{id}", name="admin_comptabilite_supprimer_journal")
  3088.      * @return \Symfony\Component\HttpFoundation\Response
  3089.      */
  3090.     public function supprimerJournalAction(Request $request,  $slug$id)
  3091.     {
  3092.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3093.            return $this->redirectToRoute('security_login');
  3094.         }
  3095.         $em $this->getDoctrine()
  3096.                     ->getManager();
  3097.         
  3098.         $journal $em->getRepository(JournalComptabilite::class)
  3099.                     ->findOneById($id);
  3100.         $boutique $em->getRepository(Boutique::class)
  3101.                     ->findOneBySlug($slug);
  3102.         
  3103.         $user $this->getUser();
  3104.         $userBoutique $em->getRepository(UserBoutique::class)
  3105.                         ->findOneBy(
  3106.                             array(
  3107.                             'user' => $user->getId(),
  3108.                             'boutique' => $boutique->getId()
  3109.                             )
  3110.                         );
  3111.     
  3112.         
  3113.         if(null !== $journal){
  3114.             $journal->setEstSupprime(true);
  3115.             $em->flush();
  3116.         }
  3117.         return $this->redirectToRoute('admin_comptabilite_journaux', array('slug' => $boutique->getSlug()));
  3118.     
  3119.        
  3120.     }
  3121.     /**
  3122.      * @Route("/{slug}/etats-financiers", name="admin_comptabilite_etats_financiers")
  3123.      * @return \Symfony\Component\HttpFoundation\Response
  3124.      */
  3125.     public function etatsFinanciersAction(Request $requestBoutique $boutique)
  3126.     {
  3127.         
  3128.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3129.            return $this->redirectToRoute('security_login');
  3130.         }
  3131.         
  3132.         $em $this->getDoctrine()
  3133.                     ->getManager();
  3134.     
  3135.         
  3136.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  3137.         $dateDebut date('Y-01-01');
  3138.         $dateDebut = new \DateTime($dateDebut);
  3139.         $dateDebut->setTime(00);
  3140.         $dateFin date('Y-12-31');
  3141.         $dateFin = new \DateTime($dateFin);
  3142.         $dateFin->setTime(2359);
  3143.         
  3144.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  3145.         $startMonth $intervalleMois['debut'];
  3146.         $endMonth $intervalleMois['fin'];
  3147.         $chargeDExploitations  $em->getRepository(Expensive::class)
  3148.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut$dateFin'Charges d\'exploitation');
  3149.         
  3150.         $chargeFinancieres  $em->getRepository(Expensive::class)
  3151.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut$dateFin'Charges financières');
  3152.         
  3153.         $chargeExceptionnelles  $em->getRepository(Expensive::class)
  3154.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut$dateFin'Charges exceptionnelles');
  3155.         
  3156.         $impotSurLeBenefice  $em->getRepository(Expensive::class)
  3157.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut$dateFin'Impôts sur les bénéficices');
  3158.         
  3159.         
  3160.         $venteDeMarchandise $em->getRepository(Commande::class)
  3161.                                         ->chiffreDAffaireDUnePeriode('invoice'$boutique->getId(), $dateDebut$dateFin);
  3162.         if(!empty($venteDeMarchandise)){
  3163.             $venteDeMarchandise $venteDeMarchandise['0'];
  3164.         }else{
  3165.             $venteDeMarchandise = array(
  3166.                                         'totalVente' => 0
  3167.                                     );
  3168.         }
  3169.         
  3170.         
  3171.         $startYear date('Y-01-01');
  3172.         $endYear date('Y-12-31');
  3173.         $user $this->getUser();
  3174.     
  3175.         $actifs = array();
  3176.         
  3177.         $immobilisationsIncorporelles $em->getRepository(EcritureComptable::class)
  3178.                                 ->bilanComptable($boutique'Immobilisations incorporelles'$dateDebut$dateFin);
  3179.         $immobilisationsCorporelles $em->getRepository(EcritureComptable::class)
  3180.                                 ->bilanComptable($boutique'Immobilisations corporelles'$dateDebut$dateFin);
  3181.         $immobilisationsFinancieres $em->getRepository(EcritureComptable::class)
  3182.                                 ->bilanComptable($boutique'Immobilisations financières'$dateDebut$dateFin);
  3183.         $stocks $em->getRepository(EcritureComptable::class)
  3184.                                 ->bilanComptable($boutique'Stocks'$dateDebut$dateFin);
  3185.         $creances $em->getRepository(EcritureComptable::class)
  3186.                                 ->bilanComptable($boutique'Créance'$dateDebut$dateFin);
  3187.         /*
  3188.         $disponibilites = $em->getRepository(EcritureComptable::class)
  3189.                                 ->bilanComptable($boutique, 'Disponibilité', $dateDebut, $dateFin);
  3190.         */
  3191.         
  3192.         $disponibilites $em->getRepository(EcritureComptable::class)
  3193.                                 ->bilanComptable($boutique'Disponibilités'$dateDebut$dateFin);
  3194.         
  3195.         $capitauxPropres $em->getRepository(EcritureComptable::class)
  3196.                                 ->bilanComptable($boutique'Capitaux propres'$dateDebut$dateFin);
  3197.         $dettesFinancieres $em->getRepository(EcritureComptable::class)
  3198.                                 ->bilanComptable($boutique'Dettes financières'$dateDebut$dateFin);
  3199.         $dettesDExploitations $em->getRepository(EcritureComptable::class)
  3200.                                 ->bilanComptable($boutique'Dettes d\'exploitation'$dateDebut$dateFin);
  3201.         $dettesFiscales $em->getRepository(EcritureComptable::class)
  3202.                                 ->bilanComptable($boutique'Dettes fiscales et sociales'$dateDebut$dateFin);
  3203.         $dettesSurImmobilisations $em->getRepository(EcritureComptable::class)
  3204.                                 ->bilanComptable($boutique'Dettes sur immobilisations'$dateDebut$dateFin);
  3205.         if($request->getMethod() == 'POST'){
  3206.             
  3207.             
  3208.         }
  3209.             $userBoutique $em->getRepository(UserBoutique::class)
  3210.                         ->findOneBy(
  3211.                             array(
  3212.                             'user' => $user->getId(),
  3213.                             'boutique' => $boutique->getId()
  3214.                             )
  3215.                         );
  3216.                         
  3217.         return $this->render('admin/etats_financiers.html.twig', [
  3218.            'boutique' => $boutique,
  3219.            'userBoutique' => $userBoutique,
  3220.            'intervalleDeDate' => $intervalleDeDate,
  3221.            'dateDebut' => $dateDebut,
  3222.            'dateFin' => $dateFin,
  3223.            'startMonth' => $startMonth,
  3224.            'intervalleMois' => $intervalleMois,
  3225.            'endMonth' => $endMonth,
  3226.            'startYear' => $startYear,
  3227.            'endYear' => $endYear,
  3228.            
  3229.            'chargeDExploitations' => $chargeDExploitations,
  3230.            'chargeFinancieres' => $chargeFinancieres,
  3231.            'chargeExceptionnelles' => $chargeExceptionnelles,
  3232.            'impotSurLeBenefice' => $impotSurLeBenefice,
  3233.            'venteDeMarchandise' => $venteDeMarchandise,
  3234.            
  3235.            'immobilisationsIncorporelles' => $immobilisationsIncorporelles,
  3236.            'immobilisationsCorporelles' => $immobilisationsCorporelles,
  3237.            'immobilisationsFinancieres' => $immobilisationsFinancieres,
  3238.            'stocks' => $stocks,
  3239.            'creances' => $creances,
  3240.            'disponibilites' => $disponibilites,
  3241.            'capitauxPropres' => $capitauxPropres,
  3242.            'dettesFinancieres' => $dettesFinancieres,
  3243.            'dettesDExploitations' => $dettesDExploitations,
  3244.            'dettesFiscales' => $dettesFiscales,
  3245.            'dettesSurImmobilisations' => $dettesSurImmobilisations
  3246.            
  3247.         ]);
  3248.     }
  3249.     
  3250.     
  3251.     /**
  3252.      * @Route("/{slug}/ecritures-comptable", name="admin_comptabilite_ecritures_comptable")
  3253.      * @return \Symfony\Component\HttpFoundation\Response
  3254.      */
  3255.     public function ecrituresEomptableAction(Request $requestBoutique $boutique)
  3256.     {
  3257.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3258.            return $this->redirectToRoute('security_login');
  3259.         }
  3260.         $em $this->getDoctrine()
  3261.                     ->getManager();
  3262.         
  3263.         $compte = new Compte;
  3264.         
  3265.         $user $this->getUser();
  3266.         $userBoutique $em->getRepository(UserBoutique::class)
  3267.                         ->findOneBy(
  3268.                             array(
  3269.                             'user' => $user->getId(),
  3270.                             'boutique' => $boutique->getId()
  3271.                             )
  3272.                         );
  3273.         $ecritureComptables $em->getRepository(EcritureComptable::class)
  3274.                                 ->findBy(
  3275.                                     array(
  3276.                                         'boutique' => $boutique->getId()
  3277.                                     ),
  3278.                                     array(
  3279.                                         'laDate' => 'DESC'
  3280.                                     )
  3281.                                 );
  3282.         
  3283.         if($request->getMethod() == 'POST'){
  3284.             $ecritureComptables = array();
  3285.             
  3286.         }
  3287.     
  3288.         return $this->render('admin/ecriture_comptables.html.twig', [
  3289.            'boutique' => $boutique,
  3290.            'ecritureComptables' => $ecritureComptables,
  3291.            'userBoutique' => $userBoutique
  3292.         ]);
  3293.     }
  3294.     /**
  3295.      * @Route("/{slug}/grand-livre", name="admin_comptabilite_grand_livre")
  3296.      * @return \Symfony\Component\HttpFoundation\Response
  3297.      */
  3298.     public function grandLivreAction(Request $requestBoutique $boutique)
  3299.     {
  3300.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3301.            return $this->redirectToRoute('security_login');
  3302.         }
  3303.         $em $this->getDoctrine()
  3304.                     ->getManager();
  3305.         
  3306.         $compte = new Compte;
  3307.         
  3308.         $user $this->getUser();
  3309.         $userBoutique $em->getRepository(UserBoutique::class)
  3310.                         ->findOneBy(
  3311.                             array(
  3312.                             'user' => $user->getId(),
  3313.                             'boutique' => $boutique->getId()
  3314.                             )
  3315.                         );
  3316.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  3317.         $dateDebut date('Y-01-01');
  3318.         $dateDebut = new \DateTime($dateDebut);
  3319.         $dateDebut->setTime(00);
  3320.         $dateFin date('Y-12-31');
  3321.         $dateFin = new \DateTime($dateFin);
  3322.         $dateFin->setTime(2359);
  3323.         
  3324.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  3325.         $startMonth $intervalleMois['debut'];
  3326.         $endMonth $intervalleMois['fin'];
  3327.         $ecritureComptables $em->getRepository(EcritureComptable::class)
  3328.                                 ->grandLivre($boutique->getId(), $dateDebut$dateFin);
  3329.         
  3330.         if($request->getMethod() == 'POST'){
  3331.             $ecritureComptables = array();
  3332.             
  3333.         }
  3334.     
  3335.         return $this->render('admin/grand_livre.html.twig', [
  3336.            'boutique' => $boutique,
  3337.            'ecritureComptables' => $ecritureComptables,
  3338.            'userBoutique' => $userBoutique
  3339.         ]);
  3340.     }
  3341.     
  3342.     /**
  3343.      * @Route("/{slug}/nouvelle-ecriture-comptable", name="admin_comptabilite_nouvelle_ecriture_comptable")
  3344.      * @return \Symfony\Component\HttpFoundation\Response
  3345.      */
  3346.     public function nouvelleEcritureEomptableAction(Request $requestBoutique $boutique)
  3347.     {
  3348.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3349.            return $this->redirectToRoute('security_login');
  3350.         }
  3351.         $em $this->getDoctrine()
  3352.                     ->getManager();
  3353.         
  3354.         $user $this->getUser();
  3355.         $userBoutique $em->getRepository(UserBoutique::class)
  3356.                         ->findOneBy(
  3357.                             array(
  3358.                             'user' => $user->getId(),
  3359.                             'boutique' => $boutique->getId()
  3360.                             )
  3361.                         );
  3362.         
  3363.         $ok_soumission '';
  3364.         $error '';
  3365.         $comptes $em->getRepository(Compte::class)
  3366.                         ->findBy(
  3367.                             array(
  3368.                                 'boutique' => $boutique->getId(),
  3369.                                 ),
  3370.                                 array(
  3371.                                     'numero' => 'ASC'
  3372.                                 )
  3373.                         );
  3374.         $journaux $em->getRepository(JournalComptabilite::class)
  3375.                         ->findBy(
  3376.                             array(
  3377.                                 'boutique' => $boutique->getId(),
  3378.                                 ),
  3379.                                 array(
  3380.                                     'nom' => 'ASC'
  3381.                                 )
  3382.                         );
  3383.         if($request->getMethod() == 'POST'){
  3384.             $journal $_POST['journal'];
  3385.             $journal $em->getRepository(JournalComptabilite::class)
  3386.                         ->findOneById($journal);
  3387.             $pieceJustificative $_POST['pieceJustificative'];
  3388.             $libelle $_POST['libelle'];
  3389.             $laDate $_POST['laDate'];
  3390.             $laDate = new \DateTime($laDate);
  3391.             $listeComptes json_decode($_POST['listeComptes']);
  3392.             $totalDebit = (float)$_POST['totalDebit'];
  3393.             $totalCredit = (float)$_POST['totalCredit'];
  3394.             
  3395.             $groupeEcritureComptable = new GroupeEcritureComptable;
  3396.             $groupeEcritureComptable->setBoutique($boutique);
  3397.                     
  3398.             $groupeEcritureComptable->setLibelleEcriture($libelle);
  3399.             $groupeEcritureComptable->setDebit($totalDebit);
  3400.             $groupeEcritureComptable->setCredit($totalCredit);
  3401.             $groupeEcritureComptable->setLaDate($laDate);
  3402.             $groupeEcritureComptable->setNumeroPiece($pieceJustificative);
  3403.             $groupeEcritureComptable->setAnnee($laDate->format('Y'));
  3404.             $groupeEcritureComptable->setMois($laDate->format('m'));
  3405.             $groupeEcritureComptable->setLeJournal($journal);
  3406.             $em->persist($groupeEcritureComptable);
  3407.             $em->flush();
  3408.             foreach($listeComptes as $cp){
  3409.                 $cp = (array)$cp;
  3410.                 $idCompte $cp['idCompte'];
  3411.                 $debit $cp['debit'];
  3412.                 $credit $cp['credit'];
  3413.                 $ecritureComptable = new EcritureComptable;
  3414.                 $ecritureComptable->setBoutique($boutique);
  3415.                 $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3416.                 $ecritureComptable->setLeJournal($journal);
  3417.                 $compte $em->getRepository(Compte::class)
  3418.                                 ->findOneById($idCompte);
  3419.                 $compte->setSolde($compte->getSolde() + $debit $credit);
  3420.                 $ecritureComptable->setCompte($compte);
  3421.                 $ecritureComptable->setLibelleEcriture($libelle);
  3422.                 $ecritureComptable->setDebit($debit);
  3423.                 $ecritureComptable->setCredit($credit);
  3424.                 $ecritureComptable->setSolde($compte->getSolde());
  3425.                 $ecritureComptable->setLaDate($laDate);
  3426.                 $ecritureComptable->setNumeroPiece($pieceJustificative);
  3427.                 $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3428.                 $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3429.                 $em->persist($ecritureComptable);
  3430.             }
  3431.             $em->flush();
  3432.             
  3433.         }
  3434.     
  3435.         return $this->render('admin/nouvelle_ecriture_comptable.html.twig', [
  3436.            'boutique' => $boutique,
  3437.            
  3438.            'userBoutique' => $userBoutique,
  3439.            'comptes' => $comptes,
  3440.            'journaux' => $journaux
  3441.         ]);
  3442.     }
  3443.     /**
  3444.      * @Route("/{slug}/visites", name="admin_visites")
  3445.      * @return \Symfony\Component\HttpFoundation\Response
  3446.      */
  3447.     public function visitesAction(Request $requestBoutique $boutique)
  3448.     {
  3449.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3450.            return $this->redirectToRoute('security_login');
  3451.         }
  3452.         $em $this->getDoctrine()
  3453.                     ->getManager();
  3454.         $user $this->getUser();
  3455.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  3456.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  3457.         $dateDebut->setTime(00);
  3458.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  3459.         $dateFin->setTime(2359);
  3460.         
  3461.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  3462.         $startMonth $intervalleMois['debut'];
  3463.         $endMonth $intervalleMois['fin'];
  3464.         
  3465.         $visites  $em->getRepository(Visite::class)
  3466.                         ->visiteParDate($boutique->getId(), $dateDebut$dateFin);
  3467.         
  3468.         $startYear date('Y-01-01');
  3469.         $endYear date('Y-12-31');
  3470.         $userBoutique $em->getRepository(UserBoutique::class)
  3471.                         ->findOneBy(
  3472.                             array(
  3473.                             'user' => $user->getId(),
  3474.                             'boutique' => $boutique->getId()
  3475.                             )
  3476.                         );
  3477.          return $this->render('admin/visites.html.twig', [
  3478.             'boutique' => $boutique,
  3479.             'userBoutique' => $userBoutique,
  3480.             'dateDebut' => $dateDebut,
  3481.            'dateFin' => $dateFin,
  3482.            'startMonth' => $startMonth,
  3483.            'endMonth' => $endMonth,
  3484.            'startYear' => $startYear,
  3485.            'endYear' => $endYear,
  3486.            'visites' => $visites
  3487.         ]);
  3488.     }
  3489.     /**
  3490.      * @Route("/{slug}/nouvelle-visite", name="admin_nouvelle_visite")
  3491.      * @return \Symfony\Component\HttpFoundation\Response
  3492.      */
  3493.     public function nouvelleVisiteAction(Request $requestBoutique $boutique)
  3494.     {
  3495.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3496.            return $this->redirectToRoute('security_login');
  3497.         }
  3498.         $em $this->getDoctrine()
  3499.                     ->getManager();
  3500.         
  3501.         $visite = new Visite;
  3502.         $form $this->createForm(VisiteType::class, $visite);
  3503.         
  3504.         $user $this->getUser();
  3505.         $userBoutique $em->getRepository(UserBoutique::class)
  3506.                         ->findOneBy(
  3507.                             array(
  3508.                             'user' => $user->getId(),
  3509.                             'boutique' => $boutique->getId()
  3510.                             )
  3511.                         );
  3512.         
  3513.         $ok_soumission '';
  3514.         $error '';
  3515.         
  3516.         if($request->getMethod() == 'POST'){
  3517.             
  3518.                $form->handleRequest($request);
  3519.                if($form->isSubmitted() && $form->isValid()){
  3520.                    $visite->setBoutique($boutique);
  3521.                    $visite->setCreePar($user);
  3522.                     $em->persist($visite);
  3523.                   $em->flush();
  3524.                 
  3525.                   if(isset($_FILES['photos']) && $_FILES['photos']['name'][0] != ''){
  3526.                         
  3527.                         $this->gererFichierMultiple($visite$_FILES['photos']);
  3528.                     }
  3529.         
  3530.                 $ok_soumission ="Enregistrement effectué";
  3531.                 $visite = new Visite;
  3532.                 
  3533.                 $form $this->createForm(VisiteType::class, $visite);
  3534.                     
  3535.                 } else {
  3536.                     $error =" Veillez corrigez vos erreurs";
  3537.                 }
  3538.         }
  3539.         return $this->render('admin/nouvelle_visite.html.twig', [
  3540.            'boutique' => $boutique,
  3541.            'form' => $form->createView(),
  3542.            'userBoutique' => $userBoutique,
  3543.            'ok_soumission' => $ok_soumission,
  3544.            'error' => $error
  3545.         ]);
  3546.     }
  3547.     /**
  3548.      * @Route("/{slug}/modifier-visite/{visite}", name="admin_modifier_visite")
  3549.      * @return \Symfony\Component\HttpFoundation\Response
  3550.      */
  3551.     public function modifierVisiteAction(Request $requestBoutique $boutique$visite)
  3552.     {
  3553.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3554.            return $this->redirectToRoute('security_login');
  3555.         }
  3556.         $em $this->getDoctrine()
  3557.                     ->getManager();
  3558.                     
  3559.         $user $this->getUser();
  3560.         $userBoutique $em->getRepository(UserBoutique::class)
  3561.                         ->findOneBy(
  3562.                             array(
  3563.                             'user' => $user->getId(),
  3564.                             'boutique' => $boutique->getId()
  3565.                             )
  3566.                         );
  3567.         $visite $em->getRepository(Visite::class)
  3568.                     ->findOneById($visite);
  3569.         $form $this->createForm(VisiteEditType::class, $visite);
  3570.         
  3571.         $ok_soumission '';
  3572.         $error '';
  3573.         
  3574.         if($request->getMethod() == 'POST'){
  3575.             
  3576.                $form->handleRequest($request);
  3577.                if($form->isValid()){
  3578.                     $visite->setModifiePar($user);
  3579.                     $em->flush();
  3580.         
  3581.                 $ok_soumission =" Votre message a été pris en compte";
  3582.                     
  3583.                 } else {
  3584.                     $error =" Veillez corrigez vos erreurs";
  3585.                 }
  3586.         }
  3587.         return $this->render('admin/modifier_visite.html.twig', [
  3588.            'boutique' => $boutique,
  3589.            'form' => $form->createView(),
  3590.            'userBoutique' => $userBoutique,
  3591.            'visite' => $visite
  3592.         ]);
  3593.     }
  3594.     /**
  3595.      * @Route("/{slug}/depart-visiteur/{visite}", name="admin_depart_visiteur")
  3596.      * @return \Symfony\Component\HttpFoundation\Response
  3597.      */
  3598.     public function departVisiteurAction(Request $requestBoutique $boutique$visite)
  3599.     {
  3600.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3601.            return $this->redirectToRoute('security_login');
  3602.         }
  3603.         $em $this->getDoctrine()
  3604.                     ->getManager();
  3605.         $user $this->getUser();
  3606.         $visite $em->getRepository(Visite::class)
  3607.                     ->findOneById($visite);
  3608.                     
  3609.         if(null != $visite){
  3610.             $visite->setDateDeDepart(new \DateTime());
  3611.             $em->flush();
  3612.         }
  3613.         
  3614.         return $this->redirectToRoute('admin_visites', array('slug' => $boutique->getSlug()));
  3615.     }
  3616.     /**
  3617.      * @Route("/{slug}/supprimer-visite/{visite}", name="admin_supprimer_visite")
  3618.      * @return \Symfony\Component\HttpFoundation\Response
  3619.      */
  3620.     public function supprimerVisiteAction(Request $requestBoutique $boutique$visite)
  3621.     {
  3622.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3623.            return $this->redirectToRoute('security_login');
  3624.         }
  3625.         $em $this->getDoctrine()
  3626.                     ->getManager();
  3627.         $user $this->getUser();
  3628.         $visite $em->getRepository(Visite::class)
  3629.                     ->findOneById($visite);
  3630.                     
  3631.         if(null != $visite){
  3632.             $visite->setEstSupprime(true);
  3633.             $visite->setSupprimePar($user);
  3634.             $em->flush();
  3635.         }
  3636.         
  3637.         return $this->redirectToRoute('admin_visites', array('slug' => $boutique->getSlug()));
  3638.     }
  3639.     
  3640.     
  3641.     
  3642.     /**
  3643.      * @Route("/{slug}/new-payment/{id}", name="admin.new_payment")
  3644.      * @return \Symfony\Component\HttpFoundation\Response
  3645.      */
  3646.     public function newPaymentAction(Request $request,  $slug$id)
  3647.     {
  3648.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3649.            return $this->redirectToRoute('security_login');
  3650.         }      
  3651.         $em $this->getDoctrine()
  3652.                     ->getManager();
  3653.         
  3654.         $boutique $em->getRepository(Boutique::class)
  3655.                     ->findOneBySlug($slug);
  3656.             
  3657.         $commande $em->getRepository(Commande::class)
  3658.                     ->findOneBy(
  3659.                         array(
  3660.                             'boutique' => $boutique->getId(),
  3661.                             'id' => $id
  3662.                         )
  3663.                     );
  3664.         $factures $em->getRepository(Commande::class)
  3665.                     ->facturesPourVersement($boutique->getId());
  3666.         
  3667.         $user $this->getUser();        
  3668.         $userBoutique $em->getRepository(UserBoutique::class)
  3669.                         ->findOneBy(
  3670.                             array(
  3671.                             'user' => $user->getId(),
  3672.                             'boutique' => $boutique->getId()
  3673.                             )
  3674.                         );
  3675.         $paymentMethods $em->getRepository(PaymentMethod::class)
  3676.                     ->findBy(
  3677.                         array(
  3678.                             'boutique' => $boutique->getId()
  3679.                         )
  3680.                     );
  3681.                     
  3682.         $ok_soumission '';
  3683.         $error '';
  3684.             
  3685.             
  3686.        return $this->render('admin/new_payment.html.twig', [
  3687.            'boutique' => $boutique,
  3688.            'commande' => $commande,
  3689.            'paymentMethods' => $paymentMethods,
  3690.            'factures' => $factures,
  3691.            'userBoutique' => $userBoutique
  3692.         ]);
  3693.     
  3694.    }
  3695.    /**
  3696.      * @Route("/{slug}/make-payment/{id}", name="admin_make_payment")
  3697.      * @return \Symfony\Component\HttpFoundation\Response
  3698.      */
  3699.     public function makePaymentAction(Request $request,  $slug$id 0)
  3700.     {
  3701.         /*
  3702.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3703.            return $this->redirectToRoute('security_login');
  3704.         }      
  3705.         */
  3706.         $em $this->getDoctrine()
  3707.                     ->getManager();
  3708.         
  3709.         $boutique $em->getRepository(Boutique::class)
  3710.                     ->findOneBySlug($slug);
  3711.         
  3712.         $commande $em->getRepository(Commande::class)
  3713.                     ->findOneBy(
  3714.                         array(
  3715.                             'boutique' => $boutique->getId(),
  3716.                             'id' => $id
  3717.                         )
  3718.                     );
  3719.         $factures $em->getRepository(Commande::class)
  3720.                     ->facturesPourVersement($boutique->getId());
  3721.         
  3722.         $user $this->getUser();
  3723.         
  3724.         
  3725.         $userBoutique $em->getRepository(UserBoutique::class)
  3726.                         ->findOneBy(
  3727.                             array(
  3728.                             'user' => $user->getId(),
  3729.                             'boutique' => $boutique->getId()
  3730.                             )
  3731.                         );
  3732.         $paymentMethods $em->getRepository(PaymentMethod::class)
  3733.                     ->findBy(
  3734.                         array(
  3735.                             'boutique' => $boutique->getId()
  3736.                         )
  3737.                     );
  3738.                     
  3739.         $ok_soumission '';
  3740.         $error '';
  3741.         
  3742.         
  3743.             $laDate $request->request->get('laDate'); 
  3744.             $frais = (float)$request->request->get('frais');
  3745.             $paymentMethod $request->request->get('paymentMethod');
  3746.             $montant = (float)$request->request->get('montant');
  3747.             $referencePaiement $request->request->get('referencePaiement');
  3748.             $commande $request->request->get('facture');
  3749.             
  3750.             $commande $em->getRepository(Commande::class)
  3751.                             ->findOneBy(
  3752.                                 array(
  3753.                                 'boutique' =>$boutique->getId(),
  3754.                                 'id' => $commande
  3755.                                 )
  3756.                             );
  3757.             
  3758.             if((float)$commande->getResteAPayer() < $montant || $montant == 0){
  3759.                 $this->addFlash(
  3760.                     'danger',
  3761.                     'Montant invalide '$montant
  3762.                 );
  3763.             } else{
  3764.                 $laDate = new \DateTime($laDate);
  3765.                 $payment = new Payment;
  3766.                 $payment->setLaDate($laDate);
  3767.                 $payment->setCommande($commande);
  3768.                 $payment->setBoutique($boutique);
  3769.                 $payment->setMontant($montant);
  3770.                 $payment->setReferencePaiement($referencePaiement);
  3771.                 $payment->setMoyenDePaiement($paymentMethod);
  3772.                 
  3773.                 $em->persist($payment);
  3774.                 
  3775.                 $commande->setMontantPaye($commande->getMontantPaye() + $montant);
  3776.                 $commande->setResteAPayer($commande->getResteAPayer() - $montant);
  3777.                 $em->flush();
  3778.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  3779.                     $groupeEcritureComptable = new GroupeEcritureComptable;
  3780.                     $groupeEcritureComptable->setBoutique($boutique);
  3781.                     
  3782.                     $groupeEcritureComptable->setLibelleEcriture('Règlement client');
  3783.                     $groupeEcritureComptable->setDebit($montant);
  3784.                     $groupeEcritureComptable->setCredit($montant);
  3785.                     $groupeEcritureComptable->setLaDate($payment->getLaDate());
  3786.                     $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  3787.                     $groupeEcritureComptable->setAnnee($payment->getLaDate()->format('Y'));
  3788.                     $groupeEcritureComptable->setMois($payment->getLaDate()->format('m'));
  3789.                     $em->persist($groupeEcritureComptable);
  3790.                     $em->flush();
  3791.                 if($paymentMethod == 'check' || $paymentMethod == 'transfer'){
  3792.                     //Debit
  3793.                     
  3794.                     $ecritureComptable = new EcritureComptable;
  3795.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeBanque());
  3796.                     $ecritureComptable->setBoutique($boutique);
  3797.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3798.                     
  3799.                     $ecritureComptable->setLeJournal($leJournal);
  3800.                     $compte $em->getRepository(Compte::class)
  3801.                                 ->findOneBy(
  3802.                                     array(
  3803.                                         'numero' => '521',
  3804.                                         'boutique' => $boutique->getId()
  3805.                                     )
  3806.                                 ); //Banque
  3807.                                 
  3808.                     $compte->setSolde($compte->getSolde() + $montant);
  3809.                     $ecritureComptable->setCompte($compte);
  3810.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3811.                     $ecritureComptable->setDebit($montant);
  3812.                     $ecritureComptable->setSolde($compte->getSolde());
  3813.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3814.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3815.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3816.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3817.                     $em->persist($ecritureComptable);
  3818.                     //Credit
  3819.                     $ecritureComptable = new EcritureComptable;
  3820.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3821.                     $ecritureComptable->setBoutique($boutique);
  3822.                     
  3823.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeBanque());
  3824.                     $compte $em->getRepository(Compte::class)
  3825.                                 ->findOneBy(
  3826.                                     array(
  3827.                                         'numero' => '411',
  3828.                                         'boutique' => $boutique->getId()
  3829.                                     )
  3830.                                 ); //Client
  3831.                                 
  3832.                     $compte->setSolde($compte->getSolde() - $montant);
  3833.                     $ecritureComptable->setCompte($compte);
  3834.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3835.                     $ecritureComptable->setCredit($montant);
  3836.                     $ecritureComptable->setSolde($compte->getSolde());
  3837.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3838.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3839.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3840.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3841.                     $em->persist($ecritureComptable);
  3842.                 }
  3843.                 if($paymentMethod == 'cash'){
  3844.                     //Débit
  3845.                     $ecritureComptable = new EcritureComptable;
  3846.                     $ecritureComptable->setBoutique($boutique);
  3847.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3848.                     $leJournal $em->getRepository(JournalComptabilite::class)
  3849.                                     ->findOneBy(
  3850.                                         array(
  3851.                                         'boutique' => $boutique->getId(),
  3852.                                         'reference' => 'CA',
  3853.                                         'nom' => 'Caisse'
  3854.                                         )
  3855.                                     );
  3856.                     $groupeEcritureComptable->setLeJournal($leJournal);
  3857.                     $ecritureComptable->setLeJournal($leJournal);
  3858.                     $compte $em->getRepository(Compte::class)
  3859.                                 ->findOneBy(
  3860.                                     array(
  3861.                                         'numero' => '5711',
  3862.                                         'boutique' => $boutique->getId()
  3863.                                     )
  3864.                                 ); //caisse
  3865.                                 
  3866.                     $compte->setSolde($compte->getSolde() + $montant);
  3867.                     $ecritureComptable->setCompte($compte);
  3868.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3869.                     $ecritureComptable->setDebit($montant);
  3870.                     $ecritureComptable->setSolde($compte->getSolde());
  3871.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3872.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3873.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3874.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3875.                     $em->persist($ecritureComptable);
  3876.                     //Credit
  3877.                     $ecritureComptable = new EcritureComptable;
  3878.                     $ecritureComptable->setBoutique($boutique);
  3879.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3880.                     
  3881.                     $ecritureComptable->setLeJournal($leJournal);
  3882.                     $compte $em->getRepository(Compte::class)
  3883.                                 ->findOneBy(
  3884.                                     array(
  3885.                                         'numero' => '411',
  3886.                                         'boutique' => $boutique->getId()
  3887.                                     )
  3888.                                 ); //Client
  3889.                                 
  3890.                     $compte->setSolde($compte->getSolde() - $montant);
  3891.                     $ecritureComptable->setCompte($compte);
  3892.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3893.                     $ecritureComptable->setCredit($montant);
  3894.                     $ecritureComptable->setSolde($compte->getSolde());
  3895.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3896.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3897.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3898.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3899.                     $em->persist($ecritureComptable);
  3900.                 }
  3901.                 if($paymentMethod == 'card'){
  3902.                     $ecritureComptable = new EcritureComptable;
  3903.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3904.                     $ecritureComptable->setBoutique($boutique);
  3905.                     $leJournal $em->getRepository(JournalComptabilite::class)
  3906.                                     ->findOneBy(
  3907.                                         array(
  3908.                                         'boutique' => $boutique->getId(),
  3909.                                         'reference' => 'BQ',
  3910.                                         'nom' => 'Banque'
  3911.                                         )
  3912.                                     );
  3913.                     $ecritureComptable->setLeJournal($leJournal);
  3914.                     $groupeEcritureComptable->setLeJournal($leJournal);
  3915.                     $compte $em->getRepository(Compte::class)
  3916.                                 ->findOneBy(
  3917.                                     array(
  3918.                                         'numero' => '521',
  3919.                                         'boutique' => $boutique->getId()
  3920.                                     )
  3921.                                 ); //Banque 
  3922.                                 
  3923.                     $compte->setSolde($compte->getSolde() + $montant $frais);
  3924.                     $ecritureComptable->setCompte($compte);
  3925.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3926.                     $ecritureComptable->setDebit($montant $frais);
  3927.                     $ecritureComptable->setSolde($compte->getSolde());
  3928.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3929.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3930.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3931.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3932.                     $em->persist($ecritureComptable);
  3933.                     if($frais 0){
  3934.                         $ecritureComptable = new EcritureComptable;
  3935.                         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3936.                         $ecritureComptable->setBoutique($boutique);
  3937.                         
  3938.                         $ecritureComptable->setLeJournal($leJournal);
  3939.                         $compte $em->getRepository(Compte::class)
  3940.                                     ->findOneBy(
  3941.                                         array(
  3942.                                             'numero' => '6315',
  3943.                                             'boutique' => $boutique->getId()
  3944.                                         )
  3945.                                     ) //Commissions sur cartes de crédit
  3946.                                     -
  3947.                         $compte->setSolde($compte->getSolde() + $frais);
  3948.                         $ecritureComptable->setCompte($compte);
  3949.                         $ecritureComptable->setLibelleEcriture('Règlement client');
  3950.                         $ecritureComptable->setDebit($frais);
  3951.                         $ecritureComptable->setSolde($compte->getSolde());
  3952.                         $ecritureComptable->setLaDate($payment->getLaDate());
  3953.                         $ecritureComptable->setNumeroPiece($commande->getNumero());
  3954.                         $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3955.                         $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3956.                         $em->persist($ecritureComptable);
  3957.                     }
  3958.                     //Credit
  3959.                     $ecritureComptable = new EcritureComptable;
  3960.                     $ecritureComptable->setBoutique($boutique);
  3961.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3962.                     
  3963.                     $ecritureComptable->setLeJournal($leJournal);
  3964.                     $compte $em->getRepository(Compte::class)
  3965.                                 ->findOneBy(
  3966.                                     array(
  3967.                                         'numero' => '515',
  3968.                                         'boutique' => $boutique->getId()
  3969.                                     )
  3970.                                 ); //CARTES DE CREDIT A ENCAISSER
  3971.                             
  3972.                     $compte->setSolde($compte->getSolde() - $montant );
  3973.                     $ecritureComptable->setCompte($compte);
  3974.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3975.                     $ecritureComptable->setCredit($montant);
  3976.                     $ecritureComptable->setSolde($compte->getSolde());
  3977.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3978.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3979.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3980.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3981.                     $em->persist($ecritureComptable);
  3982.                 }
  3983.                 if($paymentMethod == 'mobile-money'){
  3984.                     $ecritureComptable = new EcritureComptable;
  3985.                     $ecritureComptable->setBoutique($boutique);
  3986.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3987.                     $leJournal $em->getRepository(JournalComptabilite::class)
  3988.                                     ->findOneBy(
  3989.                                         array(
  3990.                                             'boutique' => $boutique->getId(),
  3991.                                         'reference' => 'CA',
  3992.                                         'nom' => 'Caisse'
  3993.                                         )
  3994.                                     );
  3995.                     $ecritureComptable->setLeJournal($leJournal);
  3996.                     $groupeEcritureComptable->setLeJournal($leJournal);
  3997.                     $compte $em->getRepository(Compte::class)
  3998.                                 ->findOneBy(
  3999.                                     array(
  4000.                                         'numero' => '5711',
  4001.                                         'boutique' => $boutique->getId()
  4002.                                     )
  4003.                                 ); //Caisse en monnaie nationale
  4004.                                 
  4005.                     $compte->setSolde($compte->getSolde() + $montant $frais);
  4006.                     $ecritureComptable->setCompte($compte);
  4007.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4008.                     $ecritureComptable->setDebit($montant $frais);
  4009.                     $ecritureComptable->setSolde($compte->getSolde());
  4010.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4011.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4012.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4013.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4014.                     $em->persist($ecritureComptable);
  4015.                     if($frais 0){
  4016.                         $ecritureComptable = new EcritureComptable;
  4017.                         $ecritureComptable->setBoutique($boutique);
  4018.                         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4019.                         
  4020.                         $ecritureComptable->setLeJournal($leJournal);
  4021.                         $compte $em->getRepository(Compte::class)
  4022.                                     ->findOneBy(
  4023.                                         array(
  4024.                                             'numero' => '6317',
  4025.                                             'boutique' => $boutique->getId()
  4026.                                         )
  4027.                                     ); //Frais sur instruments monnaie électronique
  4028.                                     
  4029.                         $compte->setSolde($compte->getSolde() + $frais);
  4030.                         $ecritureComptable->setCompte($compte);
  4031.                         $ecritureComptable->setLibelleEcriture('Règlement client');
  4032.                         $ecritureComptable->setDebit($frais);
  4033.                         $ecritureComptable->setSolde($compte->getSolde());
  4034.                         $ecritureComptable->setLaDate($payment->getLaDate());
  4035.                         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4036.                         $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4037.                         $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4038.                         $em->persist($ecritureComptable);
  4039.                     }
  4040.                     //Credit
  4041.                     $ecritureComptable = new EcritureComptable;
  4042.                     $ecritureComptable->setBoutique($boutique);
  4043.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4044.                     
  4045.                     $ecritureComptable->setLeJournal($leJournal);
  4046.                     $compte $em->getRepository(Compte::class)
  4047.                                 ->findOneBy(
  4048.                                     array(
  4049.                                         'numero' => '554',
  4050.                                         'boutique' => $boutique->getId()
  4051.                                     )
  4052.                                 ); //PORTE-MONNAIE ELECTRONIQUE
  4053.                                 
  4054.                     $compte->setSolde($compte->getSolde() - $montant);
  4055.                     $ecritureComptable->setCompte($compte);
  4056.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4057.                     $ecritureComptable->setCredit($montant);
  4058.                     $ecritureComptable->setSolde($compte->getSolde());
  4059.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4060.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4061.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4062.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4063.                     $em->persist($ecritureComptable);
  4064.                 }
  4065.                 } //Fin condition ecriture comptable automatique
  4066.                 $em->flush();
  4067.                  $this->addFlash(
  4068.                         'success',
  4069.                         'Enregistrement effectué'
  4070.                     );
  4071.             }
  4072.         
  4073.         
  4074.        return $this->render('admin/new_payment.html.twig', [
  4075.            'boutique' => $boutique,
  4076.            'commande' => $commande,
  4077.            'paymentMethods' => $paymentMethods,
  4078.            'factures' => $factures,
  4079.            'userBoutique' => $userBoutique
  4080.         ]);
  4081.     
  4082.    }
  4083.     
  4084.     
  4085.     
  4086.     //bill_credit
  4087.     /**
  4088.      * @Route("/{slug}/bill-credits", name="admin.bill_credits")
  4089.      * @return \Symfony\Component\HttpFoundation\Response
  4090.      */
  4091.     public function billCreditsActionRequest $requestBoutique $boutique)
  4092.     {
  4093.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4094.            return $this->redirectToRoute('security_login');
  4095.         }      
  4096.         $em $this->getDoctrine()
  4097.                     ->getManager();
  4098.     
  4099.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  4100.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  4101.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  4102.         
  4103.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  4104.         $startMonth $intervalleMois['debut'];
  4105.         $endMonth $intervalleMois['fin'];
  4106.         
  4107.         $billCredits  $em->getRepository(Commande::class)
  4108.                         ->commandeParDateEtType($boutique->getId(), 'bill_credit'$dateDebut$dateFin);
  4109.         
  4110.         $startYear date('Y-01-01');
  4111.         $endYear date('Y-12-31');
  4112.         $user $this->getUser();
  4113.         $userBoutique $em->getRepository(UserBoutique::class)
  4114.                         ->findOneBy(
  4115.                             array(
  4116.                             'user' => $user->getId(),
  4117.                             'boutique' => $boutique->getId()
  4118.                             )
  4119.                         );
  4120.         if('POST' == $request->getMethod()){
  4121.             $dateDebut $_POST['dateDebut'];
  4122.             $dateFin $_POST['dateFin'];
  4123.             
  4124.             $dateDebut = new \DateTime($dateDebut);
  4125.             $dateFin = new \DateTime($dateFin);
  4126.             
  4127.             $billCredits  $em->getRepository(Commande::class)
  4128.                         ->commandeParDateEtType($boutique->getId(), 'bill_credit'$dateDebut$dateFin);
  4129.             
  4130.             
  4131.             return $this->render('admin/bill_credits_table_content.html.twig', [
  4132.                'boutique' => $boutique,
  4133.                'billCredits' => $billCredits,
  4134.                'userBoutique' => $userBoutique
  4135.             ]);
  4136.             
  4137.         }
  4138.     
  4139.     
  4140.         return $this->render('admin/bill_credits.html.twig', [
  4141.            'boutique' => $boutique,
  4142.            'billCredits' => $billCredits,
  4143.            'dateDebut' => $dateDebut,
  4144.            'dateFin' => $dateFin,
  4145.            'startMonth' => $startMonth,
  4146.            'endMonth' => $endMonth,
  4147.            'startYear' => $startYear,
  4148.            'endYear' => $endYear,
  4149.            'userBoutique' => $userBoutique
  4150.         ]);
  4151.     }
  4152.     
  4153.     //Sales
  4154.     /**
  4155.      * @Route("/{slug}/proposals/new", name="admin.new_proposal")
  4156.      * @return \Symfony\Component\HttpFoundation\Response
  4157.      */
  4158.     public function newProposalsActionRequest $requestBoutique $boutique)
  4159.     {
  4160.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4161.            return $this->redirectToRoute('security_login');
  4162.         }  
  4163.         $em $this->getDoctrine()
  4164.                     ->getManager();
  4165.         
  4166.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  4167.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  4168.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  4169.         
  4170.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  4171.         $startMonth $intervalleMois['debut'];
  4172.         $endMonth $intervalleMois['fin'];
  4173.         
  4174.         $proposals  $em->getRepository(Commande::class)
  4175.                         ->commandeParDateEtType($boutique->getId(), 'proposal'$dateDebut$dateFin);
  4176.         
  4177.         $startYear date('Y-01-01');
  4178.         $endYear date('Y-12-31');
  4179.         $user $this->getUser();
  4180.         $userBoutique $em->getRepository(UserBoutique::class)
  4181.                         ->findOneBy(
  4182.                             array(
  4183.                             'user' => $user->getId(),
  4184.                             'boutique' => $boutique->getId()
  4185.                             )
  4186.                         );
  4187.         if('POST' == $request->getMethod()){
  4188.             $dateDebut $_POST['dateDebut'];
  4189.             $dateFin $_POST['dateFin'];
  4190.             
  4191.             $dateDebut = new \DateTime($dateDebut);
  4192.             $dateFin = new \DateTime($dateFin);
  4193.             
  4194.             $proposals  $em->getRepository(Commande::class)
  4195.                         ->commandeParDateEtType($boutique->getId(), 'proposal'$dateDebut$dateFin);
  4196.             
  4197.             
  4198.             return $this->render('admin/proposals_table_content.html.twig', [
  4199.                'boutique' => $boutique,
  4200.                'proposals' => $proposals
  4201.             ]);
  4202.             
  4203.         }
  4204.     
  4205.         return $this->render('admin/nouvelle_commande.html.twig', [
  4206.            'boutique' => $boutique,
  4207.            'proposals' => $proposals,
  4208.            'dateDebut' => $dateDebut,
  4209.            'dateFin' => $dateFin,
  4210.            'startMonth' => $startMonth,
  4211.            'endMonth' => $endMonth,
  4212.            'startYear' => $startYear,
  4213.            'endYear' => $endYear,
  4214.            'userBoutique' => $userBoutique
  4215.         ]);
  4216.     }
  4217.     
  4218.     //Sales
  4219.     /**
  4220.      * @Route("/{slug}/sales", name="admin.sales")
  4221.      * @return \Symfony\Component\HttpFoundation\Response
  4222.      */
  4223.     public function salesActionRequest $requestChiffreEnLettre $chiffreEnLettreBoutique $boutique$type 'Invoice')
  4224.     {
  4225.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4226.            return $this->redirectToRoute('security_login');
  4227.         }      
  4228.         $em $this->getDoctrine()
  4229.                     ->getManager();
  4230.         $produits  $em->getRepository(Produit::class)
  4231.                         ->findByBoutique($boutique);
  4232.         $modeleReglements $em->getRepository(ModeleReglement::class)
  4233.                                 ->findByBoutique($boutique);        
  4234.         $tiers $em->getRepository(Tiers::class)
  4235.                                 ->findByBoutique($boutique);        
  4236.         
  4237.         $user $this->getUser();
  4238.     
  4239.         $ok_soumission '';
  4240.         $error '';
  4241.         
  4242.         
  4243.         if($request->getMethod() == 'POST'){
  4244.             $typeFacture $_POST['typeFacture'];
  4245.             $modeleReglement $_POST['modeleReglement'];
  4246.             $client $_POST['client'];
  4247.             $dateCommande $_POST['dateCommande'];
  4248.             $montantHT $_POST['montantHT'];
  4249.             $montantTVA $_POST['montantTVA'];
  4250.             $montantTTC $_POST['montantTTC'];
  4251.             $listeProduits json_decode($_POST['listeProduits']);
  4252.             
  4253.             $commande = new Commande;
  4254.             $commande->setBoutique($boutique);
  4255.             $client $em->getRepository(Tiers::class)
  4256.                         ->findOneById($client);
  4257.             if(null !== $client){
  4258.                 
  4259.                 $commande->setTiers($client);
  4260.             }
  4261.             
  4262.             $laDate = new \DateTime($dateCommande);
  4263.             $commande->setLaDate($laDate);
  4264.             $commande->setTotalHT($montantHT);
  4265.             $commande->setTotalTVA($montantTVA);
  4266.             $commande->setTotalTTC($montantTTC);
  4267.             $montantlettre strtoupper($chiffreEnLettre->Conversion($montantTTC));
  4268.             $commande->setMontantEnLettre($montantlettre);
  4269.             $commande->setTypeFacture($typeFacture);
  4270.             $em->persist($commande);
  4271.             $em->flush();
  4272.             $produitCommandes = array();
  4273.             foreach($listeProduits as $listeProduit){
  4274.                 $listeProduit = (array)$listeProduit;
  4275.                 $leProduit $em->getRepository(Produit::class)->findOneById($listeProduit['idProduit']);
  4276.                 
  4277.                 $produitCommande = new ProduitCommande;
  4278.                 $produitCommande->setProduit($leProduit);
  4279.                 $produitCommande->setCommande($commande);
  4280.                 $produitCommande->setQuantite($listeProduit['quantite']);
  4281.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  4282.                 $produitCommande->setRemise($listeProduit['reduction']);
  4283.                 $produitCommande->setTotalHT($listeProduit['totalHT']);
  4284.                 $produitCommande->setTotalTVA($listeProduit['totalTVA']);
  4285.                 $produitCommande->setTotalTTC($listeProduit['totalTTC']);
  4286.                 $em->persist($produitCommande);
  4287.                 array_push($produitCommandes$produitCommande);
  4288.                 
  4289.             }
  4290.             $em->flush();
  4291.             return $this->render('admin/facture.html.twig', [
  4292.                    'boutique' => $boutique,
  4293.                    'commande' => $commande,
  4294.                    'typeFacture' => $typeFacture,
  4295.                    'client' => $client,
  4296.                    'produitCommandes' => $produitCommandes,
  4297.                    'listeProduit' => $listeProduit,
  4298.                    'montantHT' => $montantHT,
  4299.                    'montantTVA' => $montantTVA,
  4300.                    'montantTTC' => $montantTTC,
  4301.                    'userBoutique' => $userBoutique
  4302.                 ]);
  4303.             
  4304.             
  4305.         }
  4306.     
  4307.         return $this->render('admin/nouvelle_commande.html.twig', [
  4308.            'boutique' => $boutique,
  4309.            'produits' => $produits,
  4310.            'modeleReglements' => $modeleReglements,
  4311.            'tiers' => $tiers,
  4312.            'userBoutique' => $userBoutique
  4313.         ]);
  4314.     }
  4315.     
  4316.     //Vente
  4317.     /**
  4318.      * @Route("/{slug}/new-sale/{type}", name="admin.new_sale")
  4319.      * @return \Symfony\Component\HttpFoundation\Response
  4320.      */
  4321.     public function newSaleActionRequest $requestChiffreEnLettre $chiffreEnLettreBoutique $boutique$type 'invoice')
  4322.     {
  4323.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4324.            return $this->redirectToRoute('security_login');
  4325.         }      
  4326.         
  4327.         $em $this->getDoctrine()
  4328.                     ->getManager();
  4329.         $produits  $em->getRepository(Produit::class)
  4330.                         ->findByBoutique($boutique);
  4331.         $modeleReglements $em->getRepository(ModeleReglement::class)
  4332.                                 ->findByBoutique($boutique);        
  4333.         $tiers $em->getRepository(Tiers::class)
  4334.                                 ->findByBoutique($boutique);        
  4335.         
  4336.         $user $this->getUser();
  4337.         $vehicules = array( 222328);
  4338.         
  4339.         $userBoutique $em->getRepository(UserBoutique::class)
  4340.                         ->findOneBy(
  4341.                             array(
  4342.                             'user' => $user->getId(),
  4343.                             'boutique' => $boutique->getId()
  4344.                             )
  4345.                         );
  4346.     
  4347.         $ok_soumission '';
  4348.         $error '';
  4349.         
  4350.         $editMode 'new';
  4351.         $responseFNE '';
  4352.         $natureFacture '';
  4353.         if($request->getMethod() == 'POST'){
  4354.             $typeFacture $_POST['typeFacture'];
  4355.             $modeleReglement $_POST['modeleReglement'];
  4356.             $client $_POST['client'];
  4357.             $moyenDePaiement $_POST['moyenDePaiement'];
  4358.             $clientFinalNom $_POST['clientFinalNom'];
  4359.             $clientFinalNumero $_POST['clientFinalNumero'];
  4360.             $dateCommande $_POST['dateCommande'];
  4361.             $montantHT = (float)$_POST['montantHT'];
  4362.             $remise =   (float)$_POST['remise'];
  4363.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  4364.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  4365.             $montantTVA = (float)$_POST['montantTVA'];
  4366.             $montantTTC = (float)$_POST['montantTTC'];
  4367.             $titreDocument $_POST['titreDocument'];
  4368.             $valableJusquAu $_POST['valableJusquAu'];
  4369.             $observation $_POST['observation'];
  4370.             $matriculeVehicule $_POST['matriculeVehicule'];
  4371.             $marqueVehicule $_POST['marqueVehicule'];
  4372.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  4373.             $listeProduits json_decode($_POST['listeProduits']);
  4374.             $natureFacture $_POST['natureFacture'];
  4375.             
  4376.             $commande = new Commande;
  4377.             $commande->setNatureFacture($natureFacture);
  4378.             $commande->setClientFinalNom($clientFinalNom);
  4379.             $commande->setClientFinalNumero($clientFinalNumero);
  4380.             $commande->setCreePar($user);
  4381.             $commande->setBoutique($boutique);
  4382.             $client $em->getRepository(Tiers::class)
  4383.                         ->findOneById($client);
  4384.             if(null !== $client){
  4385.                 
  4386.                 $commande->setTiers($client);
  4387.             }
  4388.             
  4389.             $laDate = new \DateTime($dateCommande);
  4390.             $commande->setLaDate($laDate);
  4391.             $commande->setMoyenDePaiement($moyenDePaiement);
  4392.             $commande->setMatriculeVehicule($matriculeVehicule);
  4393.             $commande->setMarqueVehicule($marqueVehicule);
  4394.             $commande->setKilometrageVehicule($kilometrageVehicule);
  4395.             
  4396.             $commande->setTotalHT($montantHT);
  4397.             $commande->setRemise($remise);
  4398.             $commande->setRemisePourcentage($remisePourcentage);
  4399.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  4400.             if($commande->getNatureFacture() == 'purchase'){
  4401.                 $commande->setTotalTVA(0);
  4402.                 $commande->setTotalTTC($totalHTApresRemise);
  4403.                 $commande->setResteAPayer($totalHTApresRemise);
  4404.             }else{
  4405.                 $commande->setTotalTVA($montantTVA);
  4406.                 $commande->setTotalTTC($montantTTC);
  4407.                 $commande->setResteAPayer($montantTTC);
  4408.             }
  4409.             $commande->setTitreDocument($titreDocument);
  4410.             $commande->setObservation($observation);
  4411.             if($valableJusquAu != ''){
  4412.                 $commande->setValableJusquAu(new \DateTime($valableJusquAu));
  4413.             }
  4414.             $montantlettre strtoupper($chiffreEnLettre->Conversion($commande->getTotalTTC()));
  4415.             $commande->setMontantEnLettre($montantlettre);
  4416.             $commande->setTypeFacture($type);
  4417.             
  4418.             if($commande->getNumero() == ''){
  4419.                 $commande->setNumero($this->getNumero($type$boutique));
  4420.             }
  4421.             
  4422.             $em->persist($commande);
  4423.             $em->flush();
  4424.             $produitCommandes = array();
  4425.             $produitsPourFactures = array();
  4426.             $coutDeRevientCommande 0;
  4427.             foreach($listeProduits as $listeProduit){
  4428.                 $listeProduit = (array)$listeProduit;
  4429.                 $idDuProduit $listeProduit['idProduit'];
  4430.                 
  4431.                 if($idDuProduit == ''){
  4432.                     //Produit inexistant, il faut le créer
  4433.                     $leProduit = new Produit;
  4434.                     $leProduit->setNom($listeProduit['nomProduit']);
  4435.                     $em->persist($leProduit);
  4436.                     $em->flush();
  4437.                     
  4438.                     //TVA
  4439.                     if($listeProduit['tva'] > 0){
  4440.                         $tva $em->getRepository(TVA::class)
  4441.                                     ->findOneBy(
  4442.                                         array(
  4443.                                             'boutique' => $boutique->getId(),
  4444.                                             'valeur'  => $listeProduit['tva']
  4445.                                         )
  4446.                                     );
  4447.                         if($tva == null){
  4448.                             $tva = new TVA;
  4449.                             $tva->setValeur($listeProduit['tva']);
  4450.                             $em->persist($tva);
  4451.                             $em->flush();
  4452.                         }
  4453.                         
  4454.                         $leProduit->setTva($tva);
  4455.                         
  4456.                     }else{
  4457.                         $tva $em->getRepository(TVA::class)
  4458.                                     ->findOneBy(
  4459.                                         array(
  4460.                                             'boutique' => $boutique->getId(),
  4461.                                             'estPrincipale'  => true
  4462.                                         )
  4463.                                     );
  4464.                         $leProduit->setTva($tva);
  4465.                     }
  4466.                     //Prix
  4467.                     $produitP = new PrixProduit;
  4468.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  4469.                     $leProduit->addPrix($produitP);
  4470.                     $leProduit->setPrixActuel($produitP);
  4471.                     $leProduit->setBoutique($boutique);
  4472.                     $em->persist($produitP);
  4473.                     $em->persist($leProduit);
  4474.                     $em->flush();
  4475.                     
  4476.                 } else{
  4477.                     $leProduit $em->getRepository(Produit::class)
  4478.                         ->findOneById($idDuProduit);
  4479.                 }
  4480.                 
  4481.                 
  4482.                 $produitCommande = new ProduitCommande;
  4483.                 $produitCommande->setProduit($leProduit);
  4484.                 $produitCommande->setCommande($commande);
  4485.                 $quantite = (float)$listeProduit['quantite'];
  4486.                 $produitCommande->setQuantite($quantite);
  4487.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  4488.                 $prixDeRevient = (float)$listeProduit['prixDeRevient'];
  4489.                 $produitCommande->setCoutDeRevient($prixDeRevient);
  4490.                 $totalCoutDeRevient $prixDeRevient $quantite;
  4491.                 $produitCommande->setTotalCoutDeRevient($totalCoutDeRevient);
  4492.                 $coutDeRevientCommande += $totalCoutDeRevient;
  4493.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  4494.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  4495.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  4496.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  4497.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  4498.                 
  4499.                 $produitCommande->setTva((float)$listeProduit['tva']);
  4500.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  4501.                 if($produitCommande->getProduit()->getTypeProduit() != null){
  4502.                     if($produitCommande->getProduit()->getTypeProduit()->getNomInterne() == 'produit'){
  4503.                         if($type == 'invoice'){
  4504.                             $leProduit->setStockDisponible($leProduit->getStockDisponible() - $produitCommande->getQuantite());
  4505.                         }
  4506.                     }
  4507.                 }
  4508.                 $em->persist($produitCommande);
  4509.                 array_push($produitCommandes$produitCommande);
  4510.                 $nom $produitCommande->getProduit()->getNom();
  4511.                     if(mb_strtoupper($nom'UTF-8') === $nom){
  4512.                         $nom wordwrap($produitCommande->getProduit()->getNom(), 60"<br/>"true);
  4513.                     }else{
  4514.                         $nom wordwrap($produitCommande->getProduit()->getNom(), 90"<br/>"true);
  4515.                     }
  4516.                 $produitsPourFacture = array(
  4517.                     'nom' => $nom,
  4518.                     'quantite' =>$produitCommande->getQuantite(),
  4519.                     'prix' => $produitCommande->getPrix(),
  4520.                     'remise' => $produitCommande->getRemise(),
  4521.                     'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  4522.                 );
  4523.                 array_push($produitsPourFactures$produitsPourFacture);
  4524.                 
  4525.             } // Fin foreach($listeProduits as $listeProduit)
  4526.              
  4527.             $commande->setCoutDeRevient($coutDeRevientCommande);
  4528.             $em->flush();
  4529.             
  4530.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4531.             $content '';
  4532.             //Tous les documents sont désormais générés au même endroit
  4533.             $content $this->renderView('pdf/facture.html.twig', [
  4534.                         'boutique' => $boutique,
  4535.                         'facture' => $commande,
  4536.                         'produits' => $produitsPourFactures,
  4537.                         'natureFacture' => $natureFacture,
  4538.                         'vehicules' => $vehicules
  4539.                     ]);
  4540.             switch($type){
  4541.                 case 'invoice':
  4542.                     //Facture FNE qui
  4543.                     
  4544.                     if($boutique->getApiKeyFNE() != ''){
  4545.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  4546.                             $responseFNE $this->genererFactureFNE($boutique->getSlug(), $commande->getId(), $natureFacture);
  4547.                         }
  4548.                     
  4549.                     }
  4550.                     $commande->setEtat(Commande::ETAT_FACTURE_PROVISOIRE);
  4551.                         
  4552.                     if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  4553.                         $this->genererEcritureComptableDeVente($boutique$commande);
  4554.                         //Ecriture comptable
  4555.                     }
  4556.                     $em->flush();
  4557.                     
  4558.                 break;
  4559.                 
  4560.                 case 'proposal':
  4561.                     $commande->setEtat(Commande::ETAT_DEVIS_PROVISOIRE);
  4562.                     
  4563.                 break;
  4564.                 
  4565.                 
  4566.                 case 'bill_credit':
  4567.                     
  4568.                 break;
  4569.             }
  4570.             
  4571.             
  4572.             $pdf->writeHTML($content);
  4573.             $name $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(110000).'.pdf';
  4574.             $lienPhysique $commande->getUploadRootDir().$name;
  4575.                 
  4576.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4577.             $pdf->output($lienPhysique'F');
  4578.             
  4579.             $em->flush();
  4580.             
  4581.             return $this->render('admin/response_new_sale.html.twig', [
  4582.                    'boutique' => $boutique,
  4583.                    'commande' => $commande,
  4584.                    'responseFNE' => $responseFNE,
  4585.                    'vehicules' => $vehicules
  4586.                    
  4587.                 ]);
  4588.             
  4589.             
  4590.             /*
  4591.             return $this->render('admin/facture.html.twig', [
  4592.                    'boutique' => $boutique,
  4593.                    'commande' => $commande,
  4594.                    'typeFacture' => $typeFacture,
  4595.                    'client' => $client,
  4596.                    'produitCommandes' => $produitCommandes,
  4597.                    'listeProduit' => $listeProduit,
  4598.                    'montantHT' => $montantHT,
  4599.                    'montantTVA' => $montantTVA,
  4600.                    'montantTTC' => $montantTTC,
  4601.                    'userBoutique' => $userBoutique
  4602.                 ]);
  4603.             */
  4604.             
  4605.         }
  4606.     
  4607.         return $this->render('admin/nouvelle_commande.html.twig', [
  4608.            'boutique' => $boutique,
  4609.            'produits' => $produits,
  4610.            'modeleReglements' => $modeleReglements,
  4611.            'tiers' => $tiers,
  4612.            'editMode' => $editMode,
  4613.            'userBoutique' => $userBoutique,
  4614.            'responseFNE' => $responseFNE,
  4615.            'type' => $type,
  4616.            'vehicules' => $vehicules
  4617.           
  4618.         ]);
  4619.     }
  4620.     //Vente
  4621.     /**
  4622.      * @Route("/{slug}/marque-tout-paye", name="admin_marque_tout_paye")
  4623.      * @return \Symfony\Component\HttpFoundation\Response
  4624.      */
  4625.     public function marquerToutPayeActionRequest $requestBoutique $boutique)
  4626.     {
  4627.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4628.            return $this->redirectToRoute('security_login');
  4629.         }      
  4630.         
  4631.         $em $this->getDoctrine()
  4632.                     ->getManager();
  4633.         $user $this->getUser();
  4634.         $commandes $em->getRepository(Commande::class)
  4635.                         ->findBy(
  4636.                             array(
  4637.                                 'typeFacture' => 'invoice',
  4638.                                 'boutique' => $boutique
  4639.                             )
  4640.                         );
  4641.         foreach($commandes as $commande){
  4642.             
  4643.                 $montant $commande->getTotalTTC();
  4644.                 
  4645.                 $payment = new Payment;
  4646.                 $payment->setLaDate($commande->getLaDate());
  4647.                 $payment->setCommande($commande);
  4648.                 $payment->setBoutique($boutique);
  4649.                 $payment->setMontant($montant);
  4650.                 $payment->setReferencePaiement($commande->getId());
  4651.                 $payment->setMoyenDePaiement('cash');
  4652.                 
  4653.                 $em->persist($payment);
  4654.                 
  4655.                 $commande->setMontantPaye($montant);
  4656.                 $commande->setResteAPayer(0);
  4657.                 $em->flush();
  4658.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  4659.                     $groupeEcritureComptable = new GroupeEcritureComptable;
  4660.                     $groupeEcritureComptable->setBoutique($boutique);
  4661.                     
  4662.                     $groupeEcritureComptable->setLibelleEcriture('Règlement client');
  4663.                     $groupeEcritureComptable->setDebit($commande->getResteAPayer());
  4664.                     $groupeEcritureComptable->setCredit($commande->getResteAPayer());
  4665.                     $groupeEcritureComptable->setLaDate($payment->getLaDate());
  4666.                     $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  4667.                     $groupeEcritureComptable->setAnnee($payment->getLaDate()->format('Y'));
  4668.                     $groupeEcritureComptable->setMois($payment->getLaDate()->format('m'));
  4669.                     $em->persist($groupeEcritureComptable);
  4670.                     $em->flush();
  4671.                     //Débit
  4672.                     $ecritureComptable = new EcritureComptable;
  4673.                     $ecritureComptable->setBoutique($boutique);
  4674.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4675.                     $leJournal $em->getRepository(JournalComptabilite::class)
  4676.                                     ->findOneBy(
  4677.                                         array(
  4678.                                         'boutique' => $boutique->getId(),
  4679.                                         'reference' => 'CA',
  4680.                                         'nom' => 'Caisse'
  4681.                                         )
  4682.                                     );
  4683.                     $groupeEcritureComptable->setLeJournal($leJournal);
  4684.                     $ecritureComptable->setLeJournal($leJournal);
  4685.                     $compte $em->getRepository(Compte::class)
  4686.                                 ->findOneBy(
  4687.                                     array(
  4688.                                         'numero' => '5711',
  4689.                                         'boutique' => $boutique->getId()
  4690.                                     )
  4691.                                 ); //caisse
  4692.                                 
  4693.                     $compte->setSolde($compte->getSolde() + $commande->getResteAPayer());
  4694.                     $ecritureComptable->setCompte($compte);
  4695.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4696.                     $ecritureComptable->setDebit($montant);
  4697.                     $ecritureComptable->setSolde($compte->getSolde());
  4698.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4699.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4700.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4701.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4702.                     $em->persist($ecritureComptable);
  4703.                     //Credit
  4704.                     $ecritureComptable = new EcritureComptable;
  4705.                     $ecritureComptable->setBoutique($boutique);
  4706.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4707.                     
  4708.                     $ecritureComptable->setLeJournal($leJournal);
  4709.                     $compte $em->getRepository(Compte::class)
  4710.                                 ->findOneBy(
  4711.                                     array(
  4712.                                         'numero' => '411',
  4713.                                         'boutique' => $boutique->getId()
  4714.                                     )
  4715.                                 ); //Client
  4716.                                 
  4717.                     $compte->setSolde($compte->getSolde() - $montant);
  4718.                     $ecritureComptable->setCompte($compte);
  4719.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4720.                     $ecritureComptable->setCredit($montant);
  4721.                     $ecritureComptable->setSolde($compte->getSolde());
  4722.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4723.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4724.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4725.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4726.                     $em->persist($ecritureComptable);
  4727.                 } //Fin condition ecriture comptable automatique
  4728.                 
  4729.         }
  4730.         $userBoutique $em->getRepository(UserBoutique::class)
  4731.                         ->findOneBy(
  4732.                             array(
  4733.                             'user' => $user->getId(),
  4734.                             'boutique' => $boutique->getId()
  4735.                             )
  4736.                         );
  4737.     
  4738.         
  4739.         return $this->render('admin/marque_tout_paye.html.twig', [
  4740.            'boutique' => $boutique,
  4741.            'userBoutique' => $userBoutique,
  4742.           
  4743.         ]);
  4744.     }
  4745.     public function genererEcritureComptableDeVente($boutique$commande)
  4746.     {
  4747.         $em $this->getDoctrine()
  4748.                     ->getManager();
  4749.                     
  4750.         $groupeEcritureComptable = new GroupeEcritureComptable;
  4751.         $groupeEcritureComptable->setBoutique($boutique);
  4752.         $libelle 'Vente client';
  4753.         if($commande->getTiers() != null){
  4754.             $libelle 'Vente à ' $commande->getTiers()->getNom();
  4755.         }
  4756.         $groupeEcritureComptable->setLibelleEcriture($libelle);
  4757.         $groupeEcritureComptable->setDebit($commande->getTotalTTC());
  4758.         $groupeEcritureComptable->setCredit($commande->getTotalTTC());
  4759.         $groupeEcritureComptable->setLaDate($commande->getLaDate());
  4760.         $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  4761.         $groupeEcritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4762.         $groupeEcritureComptable->setMois($commande->getLaDate()->format('m'));
  4763.         $em->persist($groupeEcritureComptable);
  4764.         $em->flush();
  4765.         //Débit
  4766.         $ecritureComptable = new EcritureComptable;
  4767.         $ecritureComptable->setBoutique($boutique);
  4768.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4769.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4770.         $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4771.         $compteClient $em->getRepository(Compte::class)
  4772.                                     ->findOneBy(
  4773.                                         array(
  4774.                                             'numero' => '411',
  4775.                                             'boutique' =>$boutique->getId()
  4776.                                         )
  4777.                                     );
  4778.         $compteClient->setSolde($compteClient->getSolde() + $commande->getTotalTTC());
  4779.         $ecritureComptable->setCompte($compteClient);
  4780.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4781.         $nomClient '';
  4782.         if($commande->getTiers() != null){
  4783.             $nomClient =  ' à '.$commande->getTiers()->getNom();
  4784.         }
  4785.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4786.         $ecritureComptable->setDebit($commande->getTotalTTC());
  4787.         $ecritureComptable->setSolde($compteClient->getSolde());
  4788.         $ecritureComptable->setLaDate($commande->getLaDate());
  4789.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4790.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4791.                     
  4792.         $em->persist($ecritureComptable);
  4793.         $ecritureComptable = new EcritureComptable;
  4794.         $ecritureComptable->setBoutique($boutique);
  4795.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4796.         
  4797.         //Crédit
  4798.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4799.         $compte $em->getRepository(Compte::class)
  4800.                     ->findOneBy(
  4801.                         array(
  4802.                                 'numero' => '701',
  4803.                                 'boutique' => $boutique->getId()
  4804.                             )
  4805.                         );
  4806.         
  4807.         $compte->setSolde($compte->getSolde() - $commande->getTotalHTApresRemise() );
  4808.         $ecritureComptable->setCompte($compte);
  4809.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4810.                     
  4811.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4812.         $ecritureComptable->setCredit($commande->getTotalHTApresRemise());
  4813.         $ecritureComptable->setSolde($compte->getSolde());
  4814.         $ecritureComptable->setLaDate($commande->getLaDate());
  4815.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4816.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4817.                     
  4818.                     
  4819.         $em->persist($ecritureComptable);
  4820.         //TVA pour une entreprise qui facture la TVA
  4821.         if($commande->getTotalTVA() > 0){
  4822.             $ecritureComptable = new EcritureComptable;
  4823.             $ecritureComptable->setBoutique($boutique);
  4824.             $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4825.                         
  4826.             $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4827.             $compte $em->getRepository(Compte::class)
  4828.                             ->findOneBy(
  4829.                                 array(
  4830.                                     'numero' => '4431',
  4831.                                     'boutique' => $boutique->getId()
  4832.                                 )
  4833.                             );
  4834.             $compte->setSolde($compte->getSolde() - $commande->getTotalTVA() );
  4835.             $ecritureComptable->setCompte($compte);
  4836.             $ecritureComptable->setNumeroPiece($commande->getNumero());
  4837.                         
  4838.             $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4839.             $ecritureComptable->setCredit($commande->getTotalTVA());
  4840.             $ecritureComptable->setSolde($compte->getSolde());
  4841.             $ecritureComptable->setLaDate($commande->getLaDate());
  4842.             $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4843.             $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4844.                     
  4845.                         
  4846.             $em->persist($ecritureComptable);
  4847.         }
  4848.         $em->flush();
  4849.     }
  4850.     
  4851.     /**
  4852.       * @Route("/{slug}/generer-facture-fne/{id}", name="admin_url_generer_facture_fne")
  4853.     */
  4854.     public function urlGenererFactureFNEAction(Request $request$slug$id)
  4855.     {
  4856.         
  4857.         $em $this->getDoctrine()
  4858.                     ->getManager();
  4859.         $boutique $em->getRepository(Boutique::class)
  4860.                         ->findOneBySlug($slug);
  4861.         $commande $em->getRepository(Commande::class)
  4862.                         ->findOneById($id);
  4863.         
  4864.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4865.                             ->findByCommande($commande);
  4866.         $reponse '';
  4867.         $vehicules = array( 222328);
  4868.         if($boutique->getApiKeyFNE() != ''){
  4869.             $reponse $this->genererFactureFNE($slug$id$commande->getNatureFacture());
  4870.             //$reponse = json_decode($reponse);
  4871.             if(isset($reponse['invoice']['id'])){
  4872.                 $commande->setIdFactureFNE($reponse['invoice']['id']);
  4873.             }
  4874.             if(isset($reponse['token'])){
  4875.                 $commande->seTtokenFNE($reponse['token']);
  4876.             }
  4877.             if(isset($reponse['balance_sticker'])){
  4878.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  4879.             }
  4880.             if(isset($reponse['balance_sticker'])){
  4881.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  4882.             }
  4883.             if(isset($reponse['balance_funds'])){
  4884.                 $boutique->setSoldeTimbreFNE($reponse['balance_funds']);
  4885.             }
  4886.             
  4887.             
  4888.             $em->flush();
  4889.         
  4890.         }
  4891.         
  4892.         $produitsPourFactures = array();
  4893.         foreach($produitCommandes as $produitCommande){
  4894.             $produitsPourFacture = array(
  4895.                         'nom' => wordwrap($produitCommande->getProduit()->getNom(), 90"<br/>"true),
  4896.                         'quantite' =>$produitCommande->getQuantite(),
  4897.                         'prix' => $produitCommande->getPrix(),
  4898.                         'remise' => $produitCommande->getRemise(),
  4899.                         'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  4900.                     );
  4901.             array_push($produitsPourFactures$produitsPourFacture);
  4902.         }
  4903.         
  4904.         $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'fr');
  4905.     
  4906.         $content $this->renderView('pdf/facture.html.twig', [
  4907.                     'boutique' => $boutique,
  4908.                     'facture' => $commande,
  4909.                     'produits' => $produitsPourFactures,
  4910.                     'natureFacture' => $commande->getNatureFacture(),
  4911.                     'vehicules' => $vehicules
  4912.                 ]);
  4913.         $pdf->writeHTML($content);
  4914.         $name $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(110000).'.pdf';
  4915.         $lienPhysique $commande->getUploadRootDir().$name;
  4916.                 
  4917.         $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4918.         $pdf->output($lienPhysique'F');
  4919.         $em->flush();
  4920.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  4921.         return $this->render('admin/admin_generer_facture_fne.html.twig', [
  4922.            'boutique' => $boutique,
  4923.            'content' => $content,
  4924.            'userBoutique' => $userBoutique
  4925.         ]);
  4926.         
  4927.     }
  4928.     public function genererFactureFNE($slug$idCommande$invoiceType 'sale')
  4929.     {
  4930.         
  4931.         $em $this->getDoctrine()
  4932.                     ->getManager();
  4933.         $boutique $em->getRepository(Boutique::class)
  4934.                         ->findOneBySlug($slug);
  4935.         $commande $em->getRepository(Commande::class)
  4936.                         ->findOneById($idCommande);
  4937.         $user $this->getUser();
  4938.         $userBoutique $em->getRepository(UserBoutique::class)
  4939.                         ->findOneBy(
  4940.                             array(
  4941.                                 'user' => $user,
  4942.                                 'boutique' => $boutique
  4943.                             )
  4944.                         );
  4945.         $url $boutique->getUrlFNEDeBase().'/external/invoices/sign';
  4946.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4947.                                 ->findByCommande($commande);
  4948.                                 
  4949.         $globalCustomTaxes = array();
  4950.         
  4951.         $items = array();
  4952.         foreach($produitCommandes as $produitCommande){
  4953.             $tvas = array();
  4954.             $customTaxes = array();
  4955.             if($invoiceType == 'sale'){
  4956.                 if($produitCommande->getProduit()->getTVA() != null){
  4957.                     array_push($tvas$produitCommande->getProduit()->getTVA()->getLibelleInterne());
  4958.                     $nested = array(
  4959.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  4960.                         'amount' =>$produitCommande->getProduit()->getTVA()->getValeur()
  4961.                     );
  4962.                     $nested  json_encode($nested);
  4963.                     array_push($customTaxes$nested);
  4964.                 }
  4965.             }else{
  4966.                 array_push($tvas'TVAD');
  4967.                     $nested = array(
  4968.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  4969.                         'amount' =>0
  4970.                     );
  4971.                     $nested  json_encode($nested);
  4972.                     array_push($customTaxes$nested);
  4973.             }
  4974.             
  4975.             
  4976.             
  4977.             $item = array(
  4978.                     //'taxes' => $tvas,
  4979.                     //'customTaxes' => $customTaxes,
  4980.                     'reference' => $produitCommande->getProduit()->getReference(),
  4981.                     'description' =>  $produitCommande->getProduit()->getNom(),
  4982.                     'quantity' => $produitCommande->getQuantite(),
  4983.                     'amount' => $produitCommande->getPrix(),
  4984.                     'discount' => $produitCommande->getRemisePourcentage(),
  4985.                     'measurementUnit' => $produitCommande->getProduit()->getUniteDeMesure()
  4986.             );
  4987.             if($invoiceType == 'sale'){
  4988.                 $item['taxes'] = $tvas;
  4989.             }
  4990.             array_push($items$item);
  4991.         }
  4992.         
  4993.         $clientNcc =  '';
  4994.         if($invoiceType == 'sale'){
  4995.             if($commande->getTiers() != null){
  4996.                 $clientNcc str_replace(' '''$commande->getTiers()->getCodeTVA());
  4997.             }
  4998.             
  4999.         }
  5000.         $template 'B2C';
  5001.         $clientCompanyName $commande->getClientFinalNom();
  5002.         $clientPhone str_replace(' '''$commande->getClientFinalNumero());
  5003.         $clientEmail '';
  5004.         if($commande->getTiers() != null){
  5005.             $template $commande->getTiers()->getTypeClient();
  5006.             $clientCompanyName $commande->getTiers()->getNom();
  5007.             $clientPhone str_replace(' '''$commande->getTiers()->getTelephone());
  5008.             $clientEmail $commande->getTiers()->getEmail();
  5009.         }
  5010.         $content = array(
  5011.             
  5012.             'invoiceType' => $invoiceType ,
  5013.             'paymentMethod'=> $commande->getMoyenDePaiement(),
  5014.             'template' => $template,
  5015.             'isRne' => false,
  5016.             'clientNcc' => $clientNcc,
  5017.             'clientCompanyName' => $clientCompanyName,
  5018.             'clientPhone' => $clientPhone,
  5019.             'clientEmail' => $clientEmail,
  5020.             'clientSellerName' => $user->getNomComplet(),
  5021.             'pointOfSale' => $userBoutique->getNomPointDeVenteFNE(),
  5022.             'establishment' =>  $userBoutique->getNomEtablissementFNE(),
  5023.             'clientSellerName' =>$userBoutique->getVendeurFNE(),
  5024.             'commercialMessage' => $commande->getTitreDocument(),
  5025.             'footer' => 'Arrêtée la presente facture à la somme de '.$commande->getMontantEnLettre().' '.$boutique->getSettings()->getDevise(),
  5026.             //'foreignCurrency' => '',
  5027.             //'foreignCurrencyRate' => 0,
  5028.             'items' => $items,
  5029.             
  5030.             'discount' => $commande->getRemisePourcentage()
  5031.         );
  5032.         
  5033.         if($invoiceType == 'sale'){
  5034.             $content['customTaxes'] = $globalCustomTaxes;
  5035.         }
  5036.         
  5037.         $content json_encode($content);
  5038.         $ch curl_init($url);
  5039.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  5040.         curl_setopt($chCURLOPT_HTTPHEADER, ['Content-Type: application/json''Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  5041.         curl_setopt($chCURLOPT_POSTFIELDS$content);
  5042.         $serverOutput curl_exec($ch);
  5043.         curl_close($ch);
  5044.         
  5045.         $response = new JsonResponse;
  5046.         
  5047.         
  5048.         //$response->setContent(json_encode($serverOutput));
  5049.         //return $response;
  5050.         $serverOutput json_decode($serverOutputtrue);
  5051.         if(isset($serverOutput['invoice'])){
  5052.             $commande->setIdFactureFNE($serverOutput['invoice']['id']);
  5053.             $commande->seTtokenFNE($serverOutput['token']);
  5054.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5055.             if(isset($serverOutput['balance_funds'])){
  5056.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  5057.             }
  5058.             if(isset($serverOutput['balance_sticker'])){
  5059.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5060.             }
  5061.             
  5062.             
  5063.             //Mettre aussi les produitCommande Ajour pour d'eventuel facture d'avoir
  5064.             
  5065.             $itemsRetournes $serverOutput['invoice']['items'];
  5066.             foreach($itemsRetournes as $itemsRetourne){
  5067.                 $pro $em->getRepository(Produit::class)
  5068.                             ->findOneBy(
  5069.                                 array(
  5070.                                     'boutique' => $boutique,
  5071.                                     'nom' => $itemsRetourne['description'],
  5072.                                     'reference' => $itemsRetourne['reference']
  5073.                                 )
  5074.                             );
  5075.                 if($pro != null){
  5076.                     $proCom $em->getRepository(ProduitCommande::class)
  5077.                             ->findOneBy(
  5078.                                 array(
  5079.                                     'commande' => $commande->getId(),
  5080.                                     'produit' => $pro->getId()
  5081.                                 )
  5082.                             );
  5083.                     if($proCom != null){
  5084.                         $proCom->setIdProduitPourFactureDAvoirFNE($itemsRetourne['id']);
  5085.                         $em->persist($proCom);
  5086.                     }
  5087.                 
  5088.                 }
  5089.             }
  5090.             
  5091.             $em->flush();
  5092.         }
  5093.         return $serverOutput;
  5094.         
  5095.     }
  5096.     
  5097.     
  5098.     /**
  5099.       * @Route("/{slug}/url-generer-facture-d-avoir-fne/{id}", name="admin_url_generer_facture_d_avoir_fne")
  5100.     */
  5101.     public function urlGenererFactureDAvoirFNEAction(Request $requestChiffreEnLettre $chiffreEnLettre$slug$id)
  5102.     {
  5103.         
  5104.         $em $this->getDoctrine()
  5105.                     ->getManager();
  5106.         $commande $em->getRepository(Commande::class)
  5107.                         ->findOneById($id);
  5108.         $boutique $em->getRepository(Boutique::class)
  5109.                         ->findOneBySlug($slug);
  5110.         $user $this->getUser();
  5111.         $userBoutique $em->getRepository(UserBoutique::class)
  5112.                         ->findOneBy(
  5113.                             array(
  5114.                                 'user' => $user,
  5115.                                 'boutique' => $boutique
  5116.                             )
  5117.                         );
  5118.         $produitCommandes $em->getRepository(ProduitCommande::class)
  5119.                                 ->findByCommande($commande);
  5120.         $reponse '';
  5121.         
  5122.         if($request->getMethod() == 'POST'){
  5123.                 
  5124.             $chiffreEnLettre = new ChiffreEnLettre;
  5125.                 $commande $em->getRepository(Commande::class)
  5126.                         ->findOneById($id);
  5127.         $user $this->getUser();
  5128.         
  5129.         $produitCommandes $em->getRepository(ProduitCommande::class)
  5130.                                 ->findByCommande($commande);
  5131.                                 
  5132.             $avoir =  clone $commande;
  5133.             $avoir->setBoutique($boutique);
  5134.             $avoir->setTypeFacture('bill_credit');
  5135.             $avoir->setNumero($this->getNumero('bill_credit'$boutique));
  5136.             $avoir->setTiers($commande->getTiers());
  5137.             $avoir->setIdFactureDeBase($commande->getId());
  5138.             $em->persist($avoir);
  5139.             
  5140.             $em->flush();
  5141.             $avoirProduits = array();
  5142.             $avoirProduitPourFactures = array();
  5143.             foreach($produitCommandes as $produitCommande){
  5144.                     
  5145.                     $avoirProduit = new ProduitCommande;
  5146.                     $avoirProduit->setCommande($avoir);
  5147.                     $avoirProduit->setProduit($produitCommande->getProduit());
  5148.                     $avoirProduit->setQuantite($produitCommande->getQuantite());
  5149.                     $avoirProduit->setPrix($produitCommande->getPrix());
  5150.                 
  5151.                     $avoirProduit->setTotalHT($produitCommande->getTotalHT());
  5152.                     $avoirProduit->setTva($produitCommande->getTotalTva());
  5153.                     $avoirProduit->setTotalTTC($produitCommande->getTotalTTC());
  5154.                     array_push($avoirProduits$avoirProduit);
  5155.                     $nom $produitCommande->getProduit()->getNom();
  5156.                     if(mb_strtoupper($nom'UTF-8') === $nom){
  5157.                         $nom wordwrap($produitCommande->getProduit()->getNom(), 60"<br/>"true);
  5158.                     }else{
  5159.                         $nom wordwrap($produitCommande->getProduit()->getNom(), 90"<br/>"true);
  5160.                     }
  5161.                     
  5162.                     $avoirProduitPourFacture = array(
  5163.                     'nom' => $nom,
  5164.                     'quantite' =>$produitCommande->getQuantite(),
  5165.                     'prix' => $produitCommande->getPrix(),
  5166.                     'remise' => $produitCommande->getRemise(),
  5167.                     'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  5168.                     );
  5169.                     array_push($avoirProduitPourFactures$avoirProduitPourFacture);
  5170.                     $em->persist($avoirProduit);
  5171.             }
  5172.             $em->flush();
  5173.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5174.                 
  5175.                     
  5176.             $pdfContent $this->renderView('pdf/facture.html.twig', [
  5177.                         'boutique' => $boutique,
  5178.                         'facture' => $avoir,
  5179.                         'produits' => $avoirProduitPourFactures,
  5180.                         'commandeDeBasse' => $commande
  5181.                 ]);
  5182.             $pdf->writeHTML($pdfContent);
  5183.             $name $avoir->getTypeFacture().$avoir->getId().time().$boutique->getId().rand(110000).'.pdf';
  5184.             $lienPhysique $avoir->getUploadRootDir().$name;
  5185.                 
  5186.             $avoir->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  5187.             $pdf->output($lienPhysique'F');
  5188.             // Fin facture PDF
  5189.             
  5190.             $em->flush();
  5191.         
  5192.             if($boutique->getApiKeyFNE() != ''){
  5193.                 $reponse $this->genererFactureDAvoirFNE($chiffreEnLettre$boutique->getSlug(), $commande->getId());
  5194.             }
  5195.              return $this->render('admin/retour_url_generer_facture_d_avoir_fne.html.twig', [
  5196.                 'boutique' => $boutique,
  5197.                 'reponse' => $reponse,
  5198.                 'userBoutique' => $userBoutique,
  5199.                 'produitCommandes' => $produitCommandes,
  5200.                 'avoir' => $avoir
  5201.                 ]);
  5202.         }
  5203.         
  5204.         
  5205.          return $this->render('admin/url_generer_facture_d_avoir_fne.html.twig', [
  5206.            'boutique' => $boutique,
  5207.            'reponse' => $reponse,
  5208.            'userBoutique' => $userBoutique,
  5209.            'produitCommandes' => $produitCommandes
  5210.         ]);
  5211.     }
  5212.     
  5213.     public function genererFactureDAvoirFNE(ChiffreEnLettre $chiffreEnLettre$slug$id)
  5214.     {
  5215.         
  5216.         $em $this->getDoctrine()
  5217.                     ->getManager();
  5218.         $boutique $em->getRepository(Boutique::class)
  5219.                         ->findOneBySlug($slug);
  5220.         $commande $em->getRepository(Commande::class)
  5221.                         ->findOneById($id);
  5222.         $user $this->getUser();
  5223.         $userBoutique $em->getRepository(UserBoutique::class)
  5224.                         ->findOneBy(
  5225.                             array(
  5226.                                 'user' => $user,
  5227.                                 'boutique' => $boutique
  5228.                             )
  5229.                         );
  5230.         
  5231.         $produitCommandes $em->getRepository(ProduitCommande::class)
  5232.                                 ->findByCommande($commande);
  5233.                                 
  5234.         
  5235.         $items = array();
  5236.         $url $boutique->getUrlFNEDeBase().'/external/invoices/'.$commande->getIdFactureFNE().'/refund';
  5237.         $avoirProduits = array();
  5238.         foreach($produitCommandes as $produitCommande){
  5239.             $item = array(
  5240.                     'id' => $produitCommande->getProduit()->getId(),
  5241.                     'quantity' => $produitCommande->getQuantite(),
  5242.                 );
  5243.             array_push($items$item);
  5244.         }
  5245.             $content = array(
  5246.                 'id' => $commande->getIdFactureFNE(),
  5247.                 'items' => $items
  5248.             );
  5249.             
  5250.             
  5251.             $content json_encode($content);
  5252.             
  5253.             $ch curl_init($url);
  5254.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  5255.             curl_setopt($chCURLOPT_HTTPHEADER, ['Content-Type: application/json''Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  5256.             curl_setopt($chCURLOPT_POSTFIELDS$content);
  5257.             $serverOutput curl_exec($ch);
  5258.             curl_close($ch);
  5259.             
  5260.             $response = new JsonResponse;
  5261.             
  5262.             
  5263.             //$response->setContent(json_encode($serverOutput));
  5264.             //return $response;
  5265.             $serverOutput json_decode($serverOutputtrue);
  5266.             //$commande->setIdFactureFNE($serverOutput['invoice']['id']);
  5267.             if(isset($serverOutput['token'])){
  5268.                 $avoir->seTtokenFNE($serverOutput['token']);
  5269.             }
  5270.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5271.             if(isset($serverOutput['balance_funds'])){
  5272.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  5273.             }
  5274.             if(isset($serverOutput['balance_sticker'])){
  5275.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5276.             }
  5277.             
  5278.             
  5279.             $em->flush();
  5280.             return $serverOutput;
  5281.         
  5282.         
  5283.     }
  5284.     
  5285.     //Vente
  5286.     /**
  5287.      * @Route("/{slug}/change-sale-state/{type}/{id}/{state}", name="admin.change_sale_state")
  5288.      * @return \Symfony\Component\HttpFoundation\Response
  5289.      */
  5290.     public function changeSaleStateAction(Request $request$slug$type$id$state)
  5291.     {
  5292.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5293.            return $this->redirectToRoute('security_login');
  5294.         }
  5295.         
  5296.         $em $this->getDoctrine()
  5297.                     ->getManager();
  5298.                     
  5299.         $boutique  $em->getRepository(Boutique::class)
  5300.                         ->findOneBySlug($slug);
  5301.     
  5302.         $user $this->getUser();
  5303.         $userBoutique $em->getRepository(UserBoutique::class)
  5304.                         ->findOneBy(
  5305.                             array(
  5306.                             'user' => $user->getId(),
  5307.                             'boutique' => $boutique->getId()
  5308.                             )
  5309.                         );
  5310.         $commande  $em->getRepository(Commande::class)
  5311.                         ->findOneBy(
  5312.                             array(
  5313.                                 'boutique' => $boutique->getId(),
  5314.                                 'id' => $id
  5315.                         ));
  5316.         if($commande->getNumero() == ''){
  5317.             $commande->setNumero($this->getNumero($type$boutique));
  5318.         }
  5319.         $commande->setEtat($state);
  5320.         $em->flush();
  5321.         
  5322.         //Produit commande du devis
  5323.                     
  5324.         $produitCommandesDevis $em->getRepository(ProduitCommande::class)
  5325.                                 ->findByCommande($commande);
  5326.         //
  5327.         $produitCommandes = array();
  5328.         $produitsPourFactures = array();
  5329.         
  5330.         
  5331.         switch($type){
  5332.             case 'proposal':
  5333.                 
  5334.                     $facture = new  Commande;
  5335.                     $facture->setTypeFacture('invoice');
  5336.                     $facture->setNatureFacture('sale');
  5337.                     $facture->setEtat(Commande::ETAT_FACTURE_FINALISE);
  5338.                     $facture->setLaDate(new \DateTime());
  5339.                     $facture->setTotalHT($commande->getTotalHT());
  5340.                     $facture->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  5341.                     $facture->setTotalTVA($commande->getTotalTVA());
  5342.                     $facture->setTotalTTC($commande->getTotalTTC());
  5343.                     $facture->setResteAPayer($commande->getTotalTTC());
  5344.                     $facture->setCoutDeRevient($commande->getCoutDeRevient());
  5345.                     
  5346.                     $facture->setRemise($commande->getRemise());
  5347.                     $facture->setRemisePourcentage($commande->getRemisePourcentage());
  5348.                     $facture->setMontantEnLettre($commande->getMontantEnLettre());
  5349.                     $facture->setBoutique($commande->getBoutique());
  5350.                     $facture->setTiers($commande->getTiers());
  5351.                     $facture->setClientFinalNom($commande->getClientFinalNom());
  5352.                     $facture->setClientFinalNumero($commande->getClientFinalNumero());
  5353.                     
  5354.                     $facture->setNumero($this->getNumero('invoice'$boutique));
  5355.                     $em->persist($facture);
  5356.                     $em->flush();
  5357.                     $this->genererEcritureComptableDeVente($boutique$facture);
  5358.                     
  5359.                     if($boutique->getApiKeyFNE() != ''){
  5360.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  5361.                             $responseFNE $this->genererFactureFNE($boutique->getSlug(), $facture->getId(), $facture->getNatureFacture());
  5362.                         }
  5363.                     
  5364.                     }
  5365.                     foreach($produitCommandesDevis as $produitCommandeDevis){
  5366.                         $prodCom = new ProduitCommande;
  5367.                         $prodCom->setProduit($produitCommandeDevis->getProduit());
  5368.                         $prodCom->setCommande($facture);
  5369.                         $prodCom->setQuantite($produitCommandeDevis->getQuantite());
  5370.                         $prodCom->setPrix($produitCommandeDevis->getPrix());
  5371.                         $prodCom->setRemise($produitCommandeDevis->getRemise());
  5372.                         $prodCom->setTotalHT($produitCommandeDevis->getTotalHT());
  5373.                         $prodCom->setTotalHTApresRemise($produitCommandeDevis->getTotalHTApresRemise());
  5374.                         $prodCom->setCoutDeRevient($produitCommandeDevis->getCoutDeRevient());
  5375.                         $prodCom->setTotalCoutDeRevient($produitCommandeDevis->getTotalCoutDeRevient());
  5376.                         
  5377.                         
  5378.                         $prodCom->setTotalTVA($produitCommandeDevis->getTotalTVA());
  5379.                         $prodCom->setTotalTTC($produitCommandeDevis->getTotalTTC());
  5380.                         $prodCom->setTva($produitCommandeDevis->getTva());
  5381.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  5382.                             $produitCommandeDevis->getProduit()->setStockDisponible($produitCommandeDevis->getProduit()->getStockDisponible() - $produitCommandeDevis->getQuantite());
  5383.                         }
  5384.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  5385.                             if($type == 'invoice'){
  5386.                                 
  5387.                                 $produitVendu $em->getRepository(Produit::class)
  5388.                                                 ->findOneById($idDuProduit);
  5389.                                 $produitVendu->setStockDisponible($produitVendu->getStockDisponible() - $produitCommandeDevis->getQuantite());
  5390.                             }
  5391.                         }
  5392.                         $em->persist($prodCom);
  5393.                         array_push($produitCommandes$prodCom);
  5394.                         $produitsPourFacture = array(
  5395.                             'nom' => wordwrap($prodCom->getProduit()->getNom(), 90"<br />"true),
  5396.                             'quantite' =>$prodCom->getQuantite(),
  5397.                             'prix' => $prodCom->getPrix(),
  5398.                             'remise' => $prodCom->getRemise(),
  5399.                             'totalHTApresRemise' => $prodCom->getTotalHTApresRemise()
  5400.                         );
  5401.                         array_push($produitsPourFactures$produitsPourFacture);
  5402.                     }
  5403.                     
  5404.                     $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5405.                     
  5406.                     $content $this->renderView('pdf/facture.html.twig', [
  5407.                         'boutique' => $boutique,
  5408.                         'facture' => $facture,
  5409.                         'produits' => $produitsPourFactures
  5410.                     ]);
  5411.                     
  5412.                     $pdf->writeHTML($content);
  5413.                     $lienPhysique $facture->getUploadRootDir().$facture->getTypeFacture().$facture->getId().'.pdf';
  5414.                 
  5415.                     $facture->setLienPDF($this->getDomain().'/pdf478njkp01/'.$facture->getTypeFacture().$facture->getId().'.pdf');
  5416.                     $pdf->output($lienPhysique'F');
  5417.                     
  5418.                     $commande->setEtat(Commande::ETAT_DEVIS_FINALISE);
  5419.                     $em->flush();
  5420.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  5421.             
  5422.             break;
  5423.             
  5424.             case 'invoice':
  5425.                     $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5426.                     
  5427.                     $content $this->renderView('pdf/facture.html.twig', [
  5428.                         'boutique' => $boutique,
  5429.                         'facture' => $commande,
  5430.                         'produits' => $produitsPourFactures
  5431.                     ]);
  5432.                     
  5433.                     $pdf->writeHTML($content);
  5434.                     $lienPhysique $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  5435.                 
  5436.                     $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  5437.                     $commande->setEtat(Commande::ETAT_FACTURE_FINALISE);
  5438.                     $pdf->output($lienPhysique'F');
  5439.                     
  5440.                     $em->flush();
  5441.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  5442.             break;
  5443.         }
  5444.         
  5445.         
  5446.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  5447.         
  5448.     }
  5449.     
  5450.     
  5451.     /**
  5452.      * @Route("/{slug}/check-customer-vat-status", name="admin.check_customer_vat_status")
  5453.      * @return \Symfony\Component\HttpFoundation\Response
  5454.      */
  5455.     public function checkCustomerVATStatusAction(Request $request$slug)
  5456.     {
  5457.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5458.            return $this->redirectToRoute('security_login');
  5459.         }
  5460.         $em $this->getDoctrine()
  5461.                     ->getManager();
  5462.         $response = new JsonResponse;
  5463.         $response->headers->set('Access-Control-Allow-Origin''*');
  5464.         $response->headers->set('Content-Type''application/json');
  5465.         
  5466.         $boutique $em->getRepository(Boutique::class)
  5467.                                     ->findOneBySlug($slug);
  5468.                         
  5469.         $data = array();
  5470.         
  5471.         if($request->getMethod() == 'POST'){
  5472.             $id $_POST['id'];
  5473.             $customer  $em->getRepository(Tiers::class)
  5474.                         ->findOneBy(
  5475.                             array(
  5476.                                 'boutique' => $boutique->getId(),
  5477.                                 'id' => $id
  5478.                         ));
  5479.             
  5480.             $data = array(
  5481.                 "assujettiALaTVA" => $customer->getAssujettiALaTVA()
  5482.             );
  5483.         }
  5484.         
  5485.         $response->setContent(json_encode($data));
  5486.         return $response;
  5487.     }
  5488.     
  5489.     
  5490.     //Vente
  5491.     /**
  5492.      * @Route("/{slug}/edit-sale/{type}/{id}", name="admin.edit_sale")
  5493.      * @return \Symfony\Component\HttpFoundation\Response
  5494.      */
  5495.     public function editSaleAction(Request $requestChiffreEnLettre $chiffreEnLettre$slug$type$id)
  5496.     {
  5497.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5498.            return $this->redirectToRoute('security_login');
  5499.         }  
  5500.         $em $this->getDoctrine()
  5501.                     ->getManager();
  5502.         $boutique  $em->getRepository(Boutique::class)
  5503.                         ->findOneBySlug($slug);
  5504.     
  5505.         $produits  $em->getRepository(Produit::class)
  5506.                         ->findByBoutique($boutique->getId());
  5507.     
  5508.         $commande  $em->getRepository(Commande::class)
  5509.                         ->findOneBy(
  5510.                             array(
  5511.                                 'boutique' => $boutique->getId(),
  5512.                                 'id' => $id
  5513.                         ));
  5514.         
  5515.         $ancienProduitCommandes  $em->getRepository(ProduitCommande::class)
  5516.                         ->findBy(
  5517.                             array(
  5518.                                 'commande' => $commande->getId()
  5519.                         ));
  5520.                         
  5521.         $modeleReglements $em->getRepository(ModeleReglement::class)
  5522.                                 ->findByBoutique($boutique);        
  5523.         $tiers $em->getRepository(Tiers::class)
  5524.                                 ->findByBoutique($boutique);        
  5525.         
  5526.         $user $this->getUser();
  5527.         $userBoutique $em->getRepository(UserBoutique::class)
  5528.                         ->findOneBy(
  5529.                             array(
  5530.                             'user' => $user->getId(),
  5531.                             'boutique' => $boutique->getId()
  5532.                             )
  5533.                         );
  5534.         $vehicules = array(1222328);
  5535.     
  5536.         $ok_soumission '';
  5537.         $error '';
  5538.         $editMode 'edit';
  5539.         if($request->getMethod() == 'POST'){
  5540.             $typeFacture $_POST['typeFacture'];
  5541.             $observation $_POST['observation'];
  5542.             $titreDocument $_POST['titreDocument'];
  5543.             $modeleReglement $_POST['modeleReglement'];
  5544.             $moyenDePaiement $_POST['moyenDePaiement'];
  5545.             $client $_POST['client'];
  5546.             $clientFinalNom $_POST['clientFinalNom'];
  5547.             $clientFinalNumero $_POST['clientFinalNumero'];
  5548.             $dateCommande $_POST['dateCommande'];
  5549.             
  5550.             $montantHT = (float)$_POST['montantHT'];
  5551.             $remise =   (float)$_POST['remise'];
  5552.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  5553.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  5554.             $montantTVA = (float)$_POST['montantTVA'];
  5555.             $montantTTC = (float)$_POST['montantTTC'];
  5556.             $matriculeVehicule $_POST['matriculeVehicule'];
  5557.             $marqueVehicule $_POST['marqueVehicule'];
  5558.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  5559.             $listeProduits json_decode($_POST['listeProduits']);
  5560.             $client $em->getRepository(Tiers::class)
  5561.                         ->findOneById($client);
  5562.             if(null !== $client){
  5563.                 $commande->setTiers($client);
  5564.             }
  5565.             
  5566.             $laDate = new \DateTime($dateCommande);
  5567.             $commande->setLaDate($laDate);
  5568.             $commande->setTitreDocument($titreDocument);
  5569.             $commande->setObservation($observation);
  5570.             $commande->setModifiePar($user);
  5571.             $commande->setMoyenDePaiement($moyenDePaiement);
  5572.             $commande->setClientFinalNom($clientFinalNom);
  5573.             $commande->setClientFinalNumero($clientFinalNumero);
  5574.             
  5575.             $commande->setMatriculeVehicule($matriculeVehicule);
  5576.             $commande->setMarqueVehicule($marqueVehicule);
  5577.             $commande->setKilometrageVehicule($kilometrageVehicule);
  5578.             $commande->setTotalHT($montantHT);
  5579.             $commande->setRemise($remise);
  5580.             $commande->setRemisePourcentage($remisePourcentage);
  5581.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  5582.             
  5583.             $commande->setTotalTVA($montantTVA);
  5584.             $commande->setTotalTTC($montantTTC);
  5585.             $commande->setResteAPayer($montantTTC);
  5586.             $montantlettre strtoupper($chiffreEnLettre->Conversion($montantTTC));
  5587.             $commande->setMontantEnLettre($montantlettre);
  5588.             $commande->setTypeFacture($type);
  5589.             if($commande->getNumero() == ''){
  5590.                 $commande->setNumero($this->getNumero($type$boutique));
  5591.             }
  5592.             $em->flush();
  5593.             
  5594.             //Supprimer les ancien ProduitCommande lié 
  5595.             foreach($ancienProduitCommandes as $ancienProduitCommande){
  5596.                 $em->remove($ancienProduitCommande);
  5597.             }
  5598.             $em->flush();
  5599.             $produitCommandes = array();
  5600.             $produitsPourFactures = array();
  5601.             $coutDeRevientCommande 0;
  5602.             foreach($listeProduits as $listeProduit){
  5603.                 $listeProduit = (array)$listeProduit;
  5604.                 $idDuProduit $listeProduit['idProduit'];
  5605.             
  5606.                 if($idDuProduit == ''){
  5607.                     //Produit inexistant, il faut le créer
  5608.                     $leProduit = new Produit;
  5609.                     $leProduit->setNom($listeProduit['nomProduit']);
  5610.                     $em->persist($leProduit);
  5611.                     
  5612.                     //TVA
  5613.                     if($listeProduit['tva'] > 0){
  5614.                         $tva $em->getRepository(TVA::class)
  5615.                                     ->findOneBy(
  5616.                                         array(
  5617.                                             'boutique' => $boutique->getId(),
  5618.                                             'valeur'  => $listeProduit['tva']
  5619.                                         )
  5620.                                     );
  5621.                         if($tva == null){
  5622.                             $tva = new TVA;
  5623.                             $tva->setValeur($listeProduit['tva']);
  5624.                             $em->persist($tva);
  5625.                             $em->flush();
  5626.                         }
  5627.                         
  5628.                         $leProduit->setTva($tva);
  5629.                         
  5630.                     }
  5631.                     //Prix
  5632.                     $produitP = new PrixProduit;
  5633.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  5634.                     $produitP->setBoutique($boutique);
  5635.                     $leProduit->addPrix($produitP);
  5636.                     $leProduit->setPrixActuel($produitP);
  5637.                     $leProduit->setBoutique($boutique);
  5638.                     $em->persist($produitP);
  5639.                     $em->persist($leProduit);
  5640.                     $em->flush();
  5641.                     
  5642.                 } else{
  5643.                     $leProduit $em->getRepository(Produit::class)
  5644.                         ->findOneById($idDuProduit);
  5645.                 }
  5646.                 $produitCommande = new ProduitCommande;
  5647.                 $produitCommande->setProduit($leProduit);
  5648.                 $produitCommande->setCommande($commande);
  5649.                 $quantite = (float)$listeProduit['quantite'];
  5650.                 $produitCommande->setQuantite($quantite);
  5651.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  5652.                 $prixDeRevient = (float)$listeProduit['prixDeRevient'];
  5653.                 $produitCommande->setCoutDeRevient($prixDeRevient);
  5654.                 $totalCoutDeRevient $prixDeRevient $quantite;
  5655.                 $produitCommande->setTotalCoutDeRevient($totalCoutDeRevient);
  5656.                 $coutDeRevientCommande += $totalCoutDeRevient;
  5657.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  5658.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  5659.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  5660.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  5661.                 
  5662.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  5663.                 $produitCommande->setTva((float)$listeProduit['tva']);
  5664.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  5665.                 $em->persist($produitCommande);
  5666.                 array_push($produitCommandes$produitCommande);
  5667.                 
  5668.                 $nom $produitCommande->getProduit()->getNom();
  5669.                     if(mb_strtoupper($nom'UTF-8') === $nom){
  5670.                         $nom wordwrap($produitCommande->getProduit()->getNom(), 60"<br/>"true);
  5671.                     }else{
  5672.                         $nom wordwrap($produitCommande->getProduit()->getNom(), 90"<br/>"true);
  5673.                     }
  5674.                 $produitsPourFacture = array(
  5675.                     'nom' => $nom,
  5676.                     'quantite' =>$produitCommande->getQuantite(),
  5677.                     'prix' => $produitCommande->getPrix(),
  5678.                     'remise' => $produitCommande->getRemise(),
  5679.                     'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  5680.                 );
  5681.                 array_push($produitsPourFactures$produitsPourFacture);
  5682.                 
  5683.             } //Fin boucle sur les produit
  5684.             $em->flush();
  5685.             $commande->setCoutDeRevient($coutDeRevientCommande);
  5686.             
  5687.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5688.             $content '';
  5689.             $content $this->renderView('pdf/facture.html.twig', [
  5690.                         'boutique' => $boutique,
  5691.                         'facture' => $commande,
  5692.                         'produits' => $produitsPourFactures
  5693.             ]);
  5694.             switch($type){
  5695.                 case 'invoice':    
  5696.                     
  5697.                 break;
  5698.                 
  5699.                 case 'proposal':
  5700.                     
  5701.                 break;
  5702.             }
  5703.             
  5704.             $pdf->writeHTML($content);
  5705.             $lienPhysique $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  5706.                 
  5707.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  5708.             $pdf->output($lienPhysique'F');
  5709.             
  5710.             $em->flush();
  5711.             
  5712.             return $this->render('admin/response_new_sale.html.twig', [
  5713.                    'boutique' => $boutique,
  5714.                    'commande' => $commande,
  5715.                    'responseFNE' => '',
  5716.                    'vehicules' => $vehicules,
  5717.                    'typeFacture' => $typeFacture,
  5718.                    'client' => $client,
  5719.                    'produitCommandes' => $produitCommandes,
  5720.                    'listeProduit' => $listeProduit,
  5721.                    'montantHT' => $montantHT,
  5722.                    'montantTVA' => $montantTVA,
  5723.                    'montantTTC' => $montantTTC,
  5724.                    'userBoutique' => $userBoutique
  5725.                 ]);
  5726.             
  5727.         }
  5728.     
  5729.         return $this->render('admin/edit_sale.html.twig', [
  5730.            'boutique' => $boutique,
  5731.            'produits' => $produits,
  5732.            'modeleReglements' => $modeleReglements,
  5733.            'tiers' => $tiers,
  5734.            'editMode' => $editMode,
  5735.            'commande' => $commande,
  5736.            'ancienProduitCommandes' => $ancienProduitCommandes,
  5737.            'type' => $type,
  5738.            'userBoutique' => $userBoutique,
  5739.            'vehicules' => $vehicules
  5740.         ]);
  5741.     }
  5742.     /**
  5743.      * @Route("/{slug}/bon-de-livraison/{id}", name="admin.bon_de_livraison")
  5744.      * @return \Symfony\Component\HttpFoundation\Response
  5745.      */
  5746.     public function bonDeLivraisonAction(Request $request$slug$id)
  5747.     {
  5748.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5749.            return $this->redirectToRoute('security_login');
  5750.         }      
  5751.         $em $this->getDoctrine()
  5752.                     ->getManager();
  5753.         $boutique  $em->getRepository(Boutique::class)
  5754.                         ->findOneBySlug($slug);
  5755.     
  5756.         $user $this->getUser();
  5757.         $userBoutique $em->getRepository(UserBoutique::class)
  5758.                         ->findOneBy(
  5759.                             array(
  5760.                             'user' => $user->getId(),
  5761.                             'boutique' => $boutique->getId()
  5762.                             )
  5763.                         );
  5764.         $commande  $em->getRepository(Commande::class)
  5765.                         ->findOneBy(
  5766.                             array(
  5767.                                 'boutique' => $boutique->getId(),
  5768.                                 'id' => $id
  5769.                         ));
  5770.         
  5771.         
  5772.             
  5773.             return $this->render('admin/bon_de_livraison.html.twig', [
  5774.                 'boutique' => $boutique,
  5775.                 'facture' => $commande,
  5776.                 'userBoutique' => $userBoutique,
  5777.                 'commande' => $commande
  5778.             ]);
  5779.     }        
  5780.     /**
  5781.      * @Route("/{slug}/bon-de-livraison-avec-date/{id}", name="admin_bon_de_livraison_avec_date")
  5782.      * @return \Symfony\Component\HttpFoundation\Response
  5783.      */
  5784.     public function bonDeLivraisonAvecDateAction(Request $request$slug$id)
  5785.     {
  5786.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5787.            return $this->redirectToRoute('security_login');
  5788.         }      
  5789.         $em $this->getDoctrine()
  5790.                     ->getManager();
  5791.         $boutique  $em->getRepository(Boutique::class)
  5792.                         ->findOneBySlug($slug);
  5793.     
  5794.         $user $this->getUser();
  5795.         $userBoutique $em->getRepository(UserBoutique::class)
  5796.                         ->findOneBy(
  5797.                             array(
  5798.                             'user' => $user->getId(),
  5799.                             'boutique' => $boutique->getId()
  5800.                             )
  5801.                         );
  5802.         if($request->getMethod() == 'POST'){
  5803.         $dateDImpression $request->request->get('dateDImpression');
  5804.         $dateDImpression = new \DateTime($dateDImpression);
  5805.         $commande  $em->getRepository(Commande::class)
  5806.                         ->findOneBy(
  5807.                             array(
  5808.                                 'boutique' => $boutique->getId(),
  5809.                                 'id' => $id
  5810.                         ));
  5811.         
  5812.         $listeProduits  $em->getRepository(ProduitCommande::class)
  5813.                         ->findBy(
  5814.                             array(
  5815.                                 'commande' => $commande->getId()
  5816.                         ));
  5817.                 
  5818.             
  5819.             $produitCommandes = array();
  5820.             foreach($listeProduits as $listeProduit){
  5821.                 
  5822.                 array_push($produitCommandes$listeProduit);
  5823.                 
  5824.             }
  5825.             
  5826.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5827.             
  5828.             
  5829.             $content $this->renderView('pdf/bon_de_livraison.html.twig', [
  5830.                 'boutique' => $boutique,
  5831.                 'facture' => $commande,
  5832.                 'produits' => $produitCommandes,
  5833.                 'dateDImpression' => $dateDImpression
  5834.             ]);
  5835.             
  5836.             
  5837.             $pdf->writeHTML($content);
  5838.             $lienPhysique $commande->getUploadRootDir().'_bon_de_livraison_'.$commande->getId().'.pdf';
  5839.                 
  5840.             $pdf->output($lienPhysique'I');
  5841.             
  5842.             return $this->renderView('pdf/bon_de_livraison.html.twig', [
  5843.                 'boutique' => $boutique,
  5844.                 'facture' => $commande,
  5845.                 'produits' => $produitCommandes,
  5846.                 'dateDImpression' => $dateDImpression
  5847.             ]);
  5848.         }
  5849.     }        
  5850.     
  5851.     
  5852.     /**
  5853.      * @Route("/{slug}/duplicate-sale/{id}", name="admin.duplicate_sale")
  5854.      * @return \Symfony\Component\HttpFoundation\Response
  5855.      */
  5856.     public function duplicateSaleAction(Request $request$slug$id)
  5857.     {
  5858.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5859.            return $this->redirectToRoute('security_login');
  5860.         }      
  5861.         $em $this->getDoctrine()
  5862.                     ->getManager();
  5863.         $boutique  $em->getRepository(Boutique::class)
  5864.                         ->findOneBySlug($slug);
  5865.     
  5866.         $user $this->getUser();
  5867.         $userBoutique $em->getRepository(UserBoutique::class)
  5868.                         ->findOneBy(
  5869.                             array(
  5870.                             'user' => $user->getId(),
  5871.                             'boutique' => $boutique->getId()
  5872.                             )
  5873.                         );
  5874.         $commande  $em->getRepository(Commande::class)
  5875.                         ->findOneBy(
  5876.                             array(
  5877.                                 'boutique' => $boutique->getId(),
  5878.                                 'id' => $id
  5879.                         ));
  5880.         
  5881.         $listeProduits  $em->getRepository(ProduitCommande::class)
  5882.                         ->findBy(
  5883.                             array(
  5884.                                 'commande' => $commande->getId()
  5885.                         ));
  5886.                 
  5887.             $nouvelleCommande = new Commande;
  5888.             $nouvelleCommande->setBoutique($boutique);
  5889.             $nouvelleCommande->setTiers($commande->getTiers());
  5890.             
  5891.             $nouvelleCommande->setLaDate(new \DateTime());
  5892.             $nouvelleCommande->setTotalHT($commande->getTotalHT());
  5893.             $nouvelleCommande->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  5894.             $nouvelleCommande->setRemise($commande->getRemise());
  5895.             $nouvelleCommande->setRemisePourcentage($commande->getRemisePourcentage());
  5896.             $nouvelleCommande->setTotalTVA($commande->getTotalTVA());
  5897.             $nouvelleCommande->setTotalAutreTaxe($commande->getTotalAutreTaxe());
  5898.             $nouvelleCommande->setTotalTTC($commande->getTotalTTC());
  5899.             $nouvelleCommande->setResteAPayer($commande->getTotalTTC());
  5900.             $nouvelleCommande->setTitreDocument($commande->getTitreDocument());
  5901.             $nouvelleCommande->setObservation($commande->getObservation());
  5902.             $nouvelleCommande->setValableJusquAu($commande->getValableJusquAu());
  5903.             $nouvelleCommande->setMontantEnLettre($commande->getMontantEnLettre());
  5904.             $nouvelleCommande->setTypeFacture($commande->getTypeFacture());
  5905.             $nouvelleCommande->setNatureFacture($commande->getNatureFacture());
  5906.             
  5907.             $nouvelleCommande->setNumero($this->getNumero($nouvelleCommande->getTypeFacture(), $boutique));
  5908.             $em->persist($nouvelleCommande);
  5909.             $em->flush();
  5910.             $produitCommandes = array();
  5911.             $produitsPourFactures = array();
  5912.             foreach($listeProduits as $listeProduit){
  5913.                 $produitCommande = new ProduitCommande;
  5914.                 $produitCommande->setProduit($listeProduit->getProduit());
  5915.                 $produitCommande->setCommande($nouvelleCommande);
  5916.                 $produitCommande->setQuantite($listeProduit->getQuantite());
  5917.                 $produitCommande->setPrix($listeProduit->getPrix());
  5918.                 $produitCommande->setRemise($listeProduit->getRemise());
  5919.                 $produitCommande->setRemisePourcentage($listeProduit->getRemisePourcentage());
  5920.                 $produitCommande->setTotalHT($listeProduit->getTotalHT());
  5921.                 $produitCommande->setTotalHTApresRemise($listeProduit->getTotalHTApresRemise());
  5922.                 $produitCommande->setTotalTVA($listeProduit->getTotalTVA());
  5923.                 $produitCommande->setAutreTaxe($listeProduit->getAutreTaxe());
  5924.                 $produitCommande->setTotalTTC($listeProduit->getTotalTTC());
  5925.                 $em->persist($produitCommande);
  5926.                 
  5927.                 array_push($produitCommandes$produitCommande);
  5928.                 
  5929.                 $produitsPourFacture = array(
  5930.                                 'nom' => wordwrap($produitCommande->getProduit()->getNom(), 90"<br/>"true),
  5931.                                 'quantite' =>$produitCommande->getQuantite(),
  5932.                                 'prix' => $produitCommande->getPrix(),
  5933.                                 'remise' => $produitCommande->getRemise(),
  5934.                                 'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  5935.                             );
  5936.                 array_push($produitsPourFactures$produitsPourFacture);
  5937.                 
  5938.                 
  5939.                 
  5940.             }
  5941.             $em->flush();
  5942.             
  5943.             if($nouvelleCommande->getTypeFacture() == 'invoice'){
  5944.                     
  5945.                 if($boutique->getApiKeyFNE() != ''){
  5946.                     if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  5947.                         $responseFNE $this->genererFactureFNE($boutique->getSlug(), $nouvelleCommande->getId(), $nouvelleCommande->getNatureFacture());
  5948.                     }
  5949.                     
  5950.                 }
  5951.                 $this->genererEcritureComptableDeVente($boutique$nouvelleCommande);
  5952.                     //Ecriture comptable
  5953.             }
  5954.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5955.             $content '';
  5956.             switch($commande->getTypeFacture()){
  5957.                 case 'invoice':    
  5958.                     $content $this->renderView('pdf/facture.html.twig', [
  5959.                         'boutique' => $boutique,
  5960.                         'facture' => $nouvelleCommande,
  5961.                         'produits' => $produitsPourFactures
  5962.                     ]);
  5963.                 break;
  5964.                 
  5965.                 case 'proposal':
  5966.                     $content $this->renderView('pdf/devis.html.twig', [
  5967.                         'boutique' => $boutique,
  5968.                         'facture' => $nouvelleCommande,
  5969.                         'produits' => $produitsPourFactures
  5970.                     ]);
  5971.                 break;
  5972.             }
  5973.             
  5974.             $pdf->writeHTML($content);
  5975.             $lienPhysique $nouvelleCommande->getUploadRootDir().$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf';
  5976.                 
  5977.             $nouvelleCommande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf');
  5978.             $pdf->output($lienPhysique'F');
  5979.             
  5980.             $em->flush();
  5981.             
  5982.             switch($commande->getTypeFacture()){
  5983.                 case 'invoice':    
  5984.                     return $this->redirectToRoute('admin.invoices',  array('slug' => $boutique->getSlug()));
  5985.                 break;
  5986.                 
  5987.                 case 'proposal':
  5988.                     return $this->redirectToRoute('admin.proposals',  array('slug' => $boutique->getSlug()));
  5989.                 break;
  5990.                 
  5991.                 case 'bill_credit':
  5992.                     return $this->redirectToRoute('admin.bill_credits',  array('slug' => $boutique->getSlug()));
  5993.                 break;
  5994.                 
  5995.                 case 'deposit':
  5996.                     return $this->redirectToRoute('admin.deposits',  array('slug' => $boutique->getSlug()));
  5997.                 break;
  5998.             }
  5999.     }
  6000.     
  6001.     /**
  6002.      * @Route("/{slug}/delete-sale/{type}/{id}", name="admin.delete_sale")
  6003.      * @return \Symfony\Component\HttpFoundation\Response
  6004.   
  6005.     */
  6006.     public function deleteSaleAction(Request $request$slug$type$id)
  6007.     {
  6008.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6009.            return $this->redirectToRoute('security_login');
  6010.         }
  6011.         $em $this->getDoctrine()
  6012.                     ->getManager();
  6013.         
  6014.         $boutique $em->getRepository(Boutique::class)
  6015.                         ->findOneBySlug($slug);
  6016.         $user $this->getUser();
  6017.         $userBoutique $em->getRepository(UserBoutique::class)
  6018.                         ->findOneBy(
  6019.                             array(
  6020.                             'user' => $user->getId(),
  6021.                             'boutique' => $boutique->getId()
  6022.                             )
  6023.                         );
  6024.         $commande $em->getRepository(Commande::class)
  6025.                         ->findOneBy(
  6026.                             array(
  6027.                                 'boutique' => $boutique->getId(),
  6028.                                 'id' => $id
  6029.                             ));
  6030.         /*
  6031.         
  6032.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  6033.                         ->findByCommande($commande->getId());
  6034.                         
  6035.         foreach($produitCommandes as $produitCommande){
  6036.             $em->remove($produitCommande);
  6037.         }
  6038.         $em->flush();
  6039.         
  6040.         $em->remove($commande);
  6041.         */
  6042.         
  6043.         
  6044.         $commande->setEstSupprime(true);
  6045.         $commande->setSupprimePar($user);
  6046.         $em->flush();
  6047.         
  6048.         switch($type){
  6049.             case 'invoice':
  6050.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  6051.             break;
  6052.             
  6053.             case 'bill_credit':
  6054.                 return $this->redirectToRoute('admin.bill_credits', array('slug' => $boutique->getSlug()));
  6055.             break;
  6056.             
  6057.             case 'proposal':
  6058.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  6059.             break;
  6060.         }
  6061.         
  6062.     }
  6063.     
  6064.     /**
  6065.      * @Route("/{slug}/product/list", name="admin.list_product")
  6066.      * @return \Symfony\Component\HttpFoundation\Response
  6067.     */
  6068.     public function listProductAction(Request $requestBoutique $boutique)
  6069.     {
  6070.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6071.            return $this->redirectToRoute('security_login');
  6072.         }
  6073.         $em $this->getDoctrine()
  6074.                     ->getManager();
  6075.         
  6076.         $produits $em->getRepository(Produit::class)
  6077.                         ->findBy(
  6078.                             array(
  6079.                                 'boutique' => $boutique->getId(),
  6080.                                 'estSupprime' => false
  6081.                             ),    
  6082.                             array(
  6083.                                 'nom' => 'ASC'
  6084.                             )
  6085.                         );
  6086.         $user $this->getUser();
  6087.         $userBoutique $em->getRepository(UserBoutique::class)
  6088.                         ->findOneBy(
  6089.                             array(
  6090.                             'user' => $user->getId(),
  6091.                             'boutique' => $boutique->getId()
  6092.                             )
  6093.                         );
  6094.         return $this->render('admin/liste_produit.html.twig', [
  6095.            'boutique' => $boutique,
  6096.            'produits' => $produits,
  6097.            'userBoutique' => $userBoutique
  6098.         ]);
  6099.     }
  6100.     
  6101.     /**
  6102.      * @Route("/{slug}/new-product", name="admin.new_product")
  6103.      * @return \Symfony\Component\HttpFoundation\Response
  6104.      */
  6105.     public function newProductAction(Request $requestBoutique $boutique)
  6106.     {
  6107.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6108.            return $this->redirectToRoute('security_login');
  6109.         }
  6110.         $em $this->getDoctrine()
  6111.                     ->getManager();
  6112.         
  6113.         $produit = new Produit;
  6114.         
  6115.         $user $this->getUser();
  6116.         $userBoutique $em->getRepository(UserBoutique::class)
  6117.                         ->findOneBy(
  6118.                             array(
  6119.                             'user' => $user->getId(),
  6120.                             'boutique' => $boutique->getId()
  6121.                             )
  6122.                         );
  6123.         $form $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  6124.         
  6125.         $ok_soumission '';
  6126.         $error '';
  6127.         
  6128.         if($request->getMethod() == 'POST'){
  6129.             
  6130.                $form->handleRequest($request);
  6131.                if($form->isValid()){
  6132.                  $em->persist($produit);
  6133.                    $em->flush();
  6134.                  
  6135.                    //Prix
  6136.                    $prix = (float)$_POST['prix'];
  6137.                    $produitP = new PrixProduit;
  6138.                    $produitP->setValeur($prix);
  6139.                    $produitP->setBoutique($boutique);
  6140.                    $produit->addPrix($produitP);
  6141.                    $produit->setPrixActuel($produitP);
  6142.                    $produit->setBoutique($boutique);
  6143.                   $em->persist($produitP);
  6144.                   
  6145.                   $em->flush();
  6146.                 if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0){
  6147.                     $this->gererFichierMultiple($produit$_FILES['photo'], true);
  6148.                 }
  6149.         
  6150.                 
  6151.                 $ok_soumission =" Votre message a été pris en compte";
  6152.                     
  6153.                 unset($produit);
  6154.                 unset($form);
  6155.                 $produit = new Produit;
  6156.                 $form $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  6157.                     
  6158.                 } else {
  6159.                     $error =" Veillez corrigez vos erreurs";
  6160.                 }
  6161.         }
  6162.     
  6163.         return $this->render('admin/nouveau_produit.html.twig', [
  6164.            'boutique' => $boutique,
  6165.            'form' => $form->createView(),
  6166.            'userBoutique' => $userBoutique
  6167.         ]);
  6168.     }
  6169.     
  6170.     /**
  6171.      * @Route("/{slug}/product/edit/{id}", name="admin.edit_product")
  6172.      * @return \Symfony\Component\HttpFoundation\Response
  6173.     */
  6174.     public function edtProductAction(Request $request$slug$id)
  6175.     {
  6176.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6177.            return $this->redirectToRoute('security_login');
  6178.         }
  6179.         $em $this->getDoctrine()
  6180.                     ->getManager();
  6181.         
  6182.         $boutique $em->getRepository(Boutique::class)
  6183.                         ->findOneBySlug($slug);
  6184.         
  6185.         $produit $em->getRepository(Produit::class)
  6186.                         ->findOneBy(
  6187.                             array(
  6188.                             'boutique' => $boutique->getId(),
  6189.                             'id' => $id
  6190.                             )
  6191.                         );
  6192.         
  6193.         $user $this->getUser();
  6194.         $userBoutique $em->getRepository(UserBoutique::class)
  6195.                         ->findOneBy(
  6196.                             array(
  6197.                             'user' => $user->getId(),
  6198.                             'boutique' => $boutique->getId()
  6199.                             )
  6200.                         );
  6201.         $form $this->createForm(ProduitEditType::class, $produit, array('boutique' => $boutique->getId()));
  6202.         
  6203.         $ok_soumission '';
  6204.         $error '';
  6205.         
  6206.         if($request->getMethod() == 'POST'){
  6207.             
  6208.                $form->handleRequest($request);
  6209.                if($form->isValid()){
  6210.                    //Prix
  6211.                     $prix = (float)$_POST['prix'];
  6212.                     if($prix && $produit->getPrixActuel()->getValeur() != $prix){
  6213.                         $produit->getPrixActuel()->setValeur($prix);
  6214.                         $produitP = new PrixProduit;
  6215.                        $produitP->setValeur($prix);
  6216.                        $produit->addPrix($produitP);
  6217.                        $produit->setPrixActuel($produitP);
  6218.                        $produit->setBoutique($boutique);
  6219.                       $em->persist($produitP);
  6220.                         
  6221.                     }
  6222.                     if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0){
  6223.                         $this->gererFichierMultiple($produit$_FILES['photo'], true);
  6224.                     }
  6225.                     $em->flush();
  6226.                     $ok_soumission =" Votre message a été pris en compte";
  6227.                 } else {
  6228.                     $error =" Veillez corrigez vos erreurs";
  6229.                 }
  6230.         }
  6231.     
  6232.         return $this->render('admin/edit_product.html.twig', [
  6233.            'boutique' => $boutique,
  6234.            'form' => $form->createView(),
  6235.            'produit' => $produit,
  6236.            'userBoutique' => $userBoutique
  6237.         ]);
  6238.     }
  6239.     
  6240.     //Produit/Service
  6241.     /**
  6242.      * @Route("/{slug}/delete-product/{id}", name="admin.delete_product")
  6243.      * @return \Symfony\Component\HttpFoundation\Response
  6244.      */
  6245.     public function deleteProductAction(Request $request,  $slug$id)
  6246.     { 
  6247.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6248.            return $this->redirectToRoute('security_login');
  6249.         }
  6250.         $em $this->getDoctrine()
  6251.                     ->getManager();
  6252.         $boutique $em->getRepository(Boutique::class)
  6253.                         ->findOneBySlug($slug);
  6254.         
  6255.         $product $em->getRepository(Produit::class)
  6256.                         ->findOneBy(
  6257.                         array(
  6258.                             'boutique' => $boutique->getId(),
  6259.                             'id' => $id
  6260.                         )
  6261.                         );
  6262.         if(null !== $product){
  6263.             
  6264.             $product->setEstSupprime(true);
  6265.             $em->flush();
  6266.         }
  6267.         return $this->redirectToRoute('admin.list_product', array('slug' => $boutique->getSlug()));
  6268.     
  6269.     }
  6270.     
  6271.     /**
  6272.      * @Route("/{slug}/product-category/list", name="admin.category_product")
  6273.      * @return \Symfony\Component\HttpFoundation\Response
  6274.     */
  6275.     public function listeCategoryProductAction(Request $requestBoutique $boutique)
  6276.     {
  6277.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6278.            return $this->redirectToRoute('security_login');
  6279.         }
  6280.         $em $this->getDoctrine()
  6281.                     ->getManager();
  6282.         
  6283.         $categories $em->getRepository(CategorieProduit::class)
  6284.                         ->findByBoutique($boutique);
  6285.         $user $this->getUser();
  6286.         $userBoutique $em->getRepository(UserBoutique::class)
  6287.                         ->findOneBy(
  6288.                             array(
  6289.                             'user' => $user->getId(),
  6290.                             'boutique' => $boutique->getId()
  6291.                             )
  6292.                         );
  6293.         return $this->render('admin/category_product.html.twig', [
  6294.            'categories' => $categories,
  6295.            'boutique' => $boutique,
  6296.            'userBoutique' => $userBoutique
  6297.         ]);
  6298.     }
  6299.     
  6300.     //Produit/Service
  6301.     /**
  6302.      * @Route("/{slug}/new-product-category", name="admin.new_product_category")
  6303.      * @return \Symfony\Component\HttpFoundation\Response
  6304.      */
  6305.     public function newProductCategoryAction(Request $requestBoutique $boutique)
  6306.     {
  6307.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6308.            return $this->redirectToRoute('security_login');
  6309.         }      
  6310.         $em $this->getDoctrine()
  6311.                     ->getManager();
  6312.         
  6313.         $categorie = new CategorieProduit;
  6314.         $form $this->createForm(CategorieProduitType::class, $categorie);
  6315.         
  6316.         $ok_soumission '';
  6317.         $error '';
  6318.         $user $this->getUser();
  6319.         $userBoutique $em->getRepository(UserBoutique::class)
  6320.                         ->findOneBy(
  6321.                             array(
  6322.                             'user' => $user->getId(),
  6323.                             'boutique' => $boutique->getId()
  6324.                             )
  6325.                         );
  6326.         if($request->getMethod() == 'POST'){
  6327.             
  6328.                $form->handleRequest($request);
  6329.                if($form->isValid()){
  6330.                    $categorie->setBoutique($boutique);
  6331.                   $em->persist($categorie);
  6332.                   $em->flush();
  6333.         
  6334.                 $ok_soumission =" Votre message a été pris en compte";
  6335.                     
  6336.                 unset($categorie);
  6337.                 unset($form);
  6338.                 $categorie = new CategorieProduit;
  6339.                 
  6340.                 $form $this->createForm(CategorieProduitType::class, $categorie);
  6341.                     
  6342.                 } else {
  6343.                     $error =" Veillez corrigez vos erreurs";
  6344.                 }
  6345.         }
  6346.     
  6347.         return $this->render('admin/new_product_category.html.twig', [
  6348.            'boutique' => $boutique,
  6349.            'form' => $form->createView(),
  6350.            'userBoutique' => $userBoutique
  6351.         ]);
  6352.     }
  6353.     
  6354.     
  6355.     //Produit/Service
  6356.     /**
  6357.      * @Route("/{slug}/edit-product-category/{id}", name="admin.edit_product_category")
  6358.      * @return \Symfony\Component\HttpFoundation\Response
  6359.      */
  6360.     public function editProductCategoryAction(Request $request$slug$id)
  6361.     { 
  6362.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6363.            return $this->redirectToRoute('security_login');
  6364.         }
  6365.         $em $this->getDoctrine()
  6366.                     ->getManager();
  6367.         
  6368.         $user $this->getUser();
  6369.         
  6370.         $categorie $em->getRepository(CategorieProduit::class)
  6371.                         ->findOneById($id);
  6372.         $boutique $em->getRepository(Boutique::class)
  6373.                         ->findOneBySlug($slug);
  6374.         $userBoutique $em->getRepository(UserBoutique::class)
  6375.                         ->findOneBy(
  6376.                             array(
  6377.                             'user' => $user->getId(),
  6378.                             'boutique' => $boutique->getId()
  6379.                             )
  6380.                         );
  6381.         $form $this->createForm(CategorieProduitEditType::class, $categorie);
  6382.         
  6383.         $ok_soumission '';
  6384.         $error '';
  6385.         
  6386.         if($request->getMethod() == 'POST'){
  6387.             
  6388.                $form->handleRequest($request);
  6389.                if($form->isValid()){
  6390.                   $em->flush();
  6391.         
  6392.                 $ok_soumission =" Votre message a été pris en compte";    
  6393.                 } else {
  6394.                     $error =" Veillez corrigez vos erreurs";
  6395.                 }
  6396.         }
  6397.     
  6398.         return $this->render('admin/edit_product_category.html.twig', [
  6399.            'boutique' => $boutique,
  6400.            'categorie' => $categorie,
  6401.            'form' => $form->createView(),
  6402.            'userBoutique' => $userBoutique
  6403.         ]);
  6404.     }
  6405.     
  6406.     //Produit/Service
  6407.     /**
  6408.      * @Route("/{slug}/delete-product-category/{id}", name="admin.delete_product_category")
  6409.      * @return \Symfony\Component\HttpFoundation\Response
  6410.      */
  6411.     public function deleteProductCategoryAction(Request $request,  $slug$id)
  6412.     { 
  6413.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6414.            return $this->redirectToRoute('security_login');
  6415.         }
  6416.         $em $this->getDoctrine()
  6417.                     ->getManager();
  6418.         $boutique $em->getRepository(Boutique::class)
  6419.                         ->findOneBySlug($slug);
  6420.                         
  6421.         $categorie $em->getRepository(CategorieProduit::class)
  6422.                         ->findOneBy(
  6423.                         array(
  6424.                             'boutique' => $boutique->getId(),
  6425.                             'id' => $id
  6426.                         )
  6427.                         );
  6428.         if(null !== $categorie){
  6429.             $em->remove($categorie);
  6430.             $em->flush();
  6431.         }
  6432.         return $this->redirectToRoute('admin.category_product', array('slug' => $boutique->getSlug()));
  6433.         
  6434.         
  6435.     }
  6436.     /**
  6437.      * @Route("/{slug}/tax/list", name="admin.list_tax")
  6438.      * @return \Symfony\Component\HttpFoundation\Response
  6439.      */
  6440.     public function listTaxAction(Request $requestBoutique $boutique)
  6441.     {    
  6442.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6443.            return $this->redirectToRoute('security_login');
  6444.         }
  6445.         $em $this->getDoctrine()
  6446.                     ->getManager();
  6447.         
  6448.         $taxes $em->getRepository(TVA::class)
  6449.                         ->findByBoutique($boutique);
  6450.         $user $this->getUser();
  6451.         $userBoutique $em->getRepository(UserBoutique::class)
  6452.                         ->findOneBy(
  6453.                             array(
  6454.                             'user' => $user->getId(),
  6455.                             'boutique' => $boutique->getId()
  6456.                             )
  6457.                         );
  6458.         return $this->render('admin/liste_tva.html.twig', [
  6459.            'boutique' => $boutique,
  6460.            'taxes' => $taxes,
  6461.            'userBoutique' => $userBoutique
  6462.         ]);
  6463.     }
  6464.     
  6465.     /**
  6466.      * @Route("/{slug}/new-tax", name="admin.new_tax")
  6467.      * @return \Symfony\Component\HttpFoundation\Response
  6468.      */
  6469.     public function newTaxAction(Request $requestBoutique $boutique)
  6470.     {
  6471.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6472.            return $this->redirectToRoute('security_login');
  6473.         }
  6474.         $em $this->getDoctrine()
  6475.                     ->getManager();
  6476.         
  6477.         $tva = new TVA;
  6478.         
  6479.         $user $this->getUser();
  6480.         $userBoutique $em->getRepository(UserBoutique::class)
  6481.                         ->findOneBy(
  6482.                             array(
  6483.                             'user' => $user->getId(),
  6484.                             'boutique' => $boutique->getId()
  6485.                             )
  6486.                         );
  6487.         $form $this->createForm(TVAType::class, $tva);
  6488.         
  6489.         $ok_soumission '';
  6490.         $error '';
  6491.         
  6492.         if($request->getMethod() == 'POST'){
  6493.             
  6494.                $form->handleRequest($request);
  6495.                if($form->isValid()){
  6496.                    $tva->setBoutique($boutique);
  6497.                   $em->persist($tva);
  6498.                   $em->flush();
  6499.         
  6500.                 $ok_soumission =" Votre message a été pris en compte";
  6501.                     
  6502.                 unset($tva);
  6503.                 unset($form);
  6504.                 $tva = new TVA;
  6505.                 
  6506.                 $form $this->createForm(TVAType::class, $tva);
  6507.                     
  6508.                 } else {
  6509.                     $error =" Veillez corrigez vos erreurs";
  6510.                 }
  6511.         }
  6512.     
  6513.         return $this->render('admin/nouvelle_tva.html.twig', [
  6514.            'boutique' => $boutique,
  6515.            'form' => $form->createView(),
  6516.            'userBoutique' => $userBoutique
  6517.         ]);
  6518.     }
  6519.     
  6520.     /**
  6521.      * @Route("/{slug}/edit-tax/{tva}", name="admin.edit_tax")
  6522.      * @return \Symfony\Component\HttpFoundation\Response
  6523.      */
  6524.     public function editTaxAction(Request $request$slug$tva)
  6525.     {
  6526.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6527.            return $this->redirectToRoute('security_login');
  6528.         }
  6529.         $em $this->getDoctrine()
  6530.                     ->getManager();
  6531.         
  6532.         $boutique $em->getRepository(Boutique::class)
  6533.                         ->findOneBySlug($slug);
  6534.                         
  6535.         $tva $em->getRepository(TVA::class)
  6536.                         ->findOneBy(
  6537.                         array(
  6538.                             'boutique' => $boutique->getId(),
  6539.                             'id' => $tva
  6540.                         )
  6541.                         );
  6542.         
  6543.         $user $this->getUser();
  6544.         $userBoutique $em->getRepository(UserBoutique::class)
  6545.                         ->findOneBy(
  6546.                             array(
  6547.                             'user' => $user->getId(),
  6548.                             'boutique' => $boutique->getId()
  6549.                             )
  6550.                         );
  6551.         $userBoutique $em->getRepository(UserBoutique::class)
  6552.                         ->findOneBy(
  6553.                             array(
  6554.                             'user' => $user->getId(),
  6555.                             'boutique' => $boutique->getId()
  6556.                             )
  6557.                         );
  6558.         $form $this->createForm(TVAEditType::class, $tva);
  6559.         
  6560.         $ok_soumission '';
  6561.         $error '';
  6562.         
  6563.         if($request->getMethod() == 'POST'){
  6564.             
  6565.                $form->handleRequest($request);
  6566.                if($form->isValid()){
  6567.                   $em->flush();
  6568.         
  6569.                 $ok_soumission =" Votre message a été pris en compte";
  6570.                     
  6571.                     
  6572.                 } else {
  6573.                     $error =" Veillez corrigez vos erreurs";
  6574.                 }
  6575.         }
  6576.     
  6577.         return $this->render('admin/edit_tax.html.twig', [
  6578.            'boutique' => $boutique,
  6579.            'tva' => $tva,
  6580.            'form' => $form->createView(),
  6581.            'userBoutique' => $userBoutique
  6582.         ]);
  6583.     }
  6584.     
  6585.     /**
  6586.      * @Route("/{slug}/delete-tax/{id}", name="admin.delete_tax")
  6587.      * @return \Symfony\Component\HttpFoundation\Response
  6588.      */
  6589.     public function deleteTaxAction(Request $request$slugTVA $tva)
  6590.     {
  6591.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6592.            return $this->redirectToRoute('security_login');
  6593.         }
  6594.         $em $this->getDoctrine()
  6595.                     ->getManager();
  6596.         $boutique $em->getRepository(Boutique::class)
  6597.                         ->findOneBySlug($slug);
  6598.         
  6599.         $tva $em->getRepository(TVA::class)
  6600.                         ->findOneBy(
  6601.                         array(
  6602.                             'boutique' => $boutique->getId(),
  6603.                             'id' => $tva
  6604.                         )
  6605.                         );
  6606.         if(null !== $tva){
  6607.             $em->remove($tva);
  6608.             $em->flush();
  6609.         }
  6610.         return $this->redirectToRoute('admin.list_tax', array('slug' => $boutique->getSlug()));
  6611.     }
  6612.     
  6613.     /**
  6614.      * @Route("/{slug}/payment-method/list", name="admin.payment_methods")
  6615.      * @return \Symfony\Component\HttpFoundation\Response
  6616.      */
  6617.     public function paymentMethodsAction(Request $requestBoutique $boutique)
  6618.     {
  6619.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6620.            return $this->redirectToRoute('security_login');
  6621.         }
  6622.         $em $this->getDoctrine()
  6623.                     ->getManager();
  6624.         
  6625.         $paymentMethods $em->getRepository(PaymentMethod::class)
  6626.                         ->findByBoutique($boutique);
  6627.         $user $this->getUser();
  6628.         $userBoutique $em->getRepository(UserBoutique::class)
  6629.                         ->findOneBy(
  6630.                             array(
  6631.                             'user' => $user->getId(),
  6632.                             'boutique' => $boutique->getId()
  6633.                             )
  6634.                         );
  6635.         return $this->render('admin/payment_methods.html.twig', [
  6636.            'boutique' => $boutique,
  6637.            'paymentMethods' => $paymentMethods,
  6638.            'userBoutique' => $userBoutique
  6639.         ]);
  6640.     }
  6641.     
  6642.     /**
  6643.      * @Route("/{slug}/payment-method/new", name="admin.new_payment_method")
  6644.      * @return \Symfony\Component\HttpFoundation\Response
  6645.      */
  6646.     public function newPaymentMethodAction(Request $requestBoutique $boutique)
  6647.     {
  6648.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6649.            return $this->redirectToRoute('security_login');
  6650.         }
  6651.         $em $this->getDoctrine()
  6652.                     ->getManager();
  6653.         
  6654.         $paymentMethod = new PaymentMethod;
  6655.         
  6656.         $user $this->getUser();
  6657.         $userBoutique $em->getRepository(UserBoutique::class)
  6658.                         ->findOneBy(
  6659.                             array(
  6660.                             'user' => $user->getId(),
  6661.                             'boutique' => $boutique->getId()
  6662.                             )
  6663.                         );
  6664.         $form $this->createForm(PaymentMethodType::class, $paymentMethod);
  6665.         
  6666.         $ok_soumission '';
  6667.         $error '';
  6668.         
  6669.         if($request->getMethod() == 'POST'){
  6670.             
  6671.                $form->handleRequest($request);
  6672.                if($form->isValid()){
  6673.                    $paymentMethod->setBoutique($boutique);
  6674.                   $em->persist($paymentMethod);
  6675.                   $em->flush();
  6676.         
  6677.                 $ok_soumission =" Votre message a été pris en compte";
  6678.                     
  6679.                 $paymentMethod = new PaymentMethod;
  6680.                 
  6681.                 $form $this->createForm(PaymentMethodType::class, $paymentMethod);
  6682.                     
  6683.                 } else {
  6684.                     $error =" Veillez corrigez vos erreurs";
  6685.                 }
  6686.         }
  6687.     
  6688.         return $this->render('admin/new_payment_method.html.twig', [
  6689.            'boutique' => $boutique,
  6690.            'form' => $form->createView(),
  6691.            'userBoutique' => $userBoutique
  6692.         ]);
  6693.     }
  6694.     
  6695.     /**
  6696.      * @Route("/{slug}/payment-method/edit/{paymentMethod}", name="admin.edit_payment_method")
  6697.      * @return \Symfony\Component\HttpFoundation\Response
  6698.      */
  6699.     public function editPaymentMethodAction(Request $request,  $slug$paymentMethod)
  6700.     {
  6701.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6702.            return $this->redirectToRoute('security_login');
  6703.         }
  6704.         $em $this->getDoctrine()
  6705.                     ->getManager();
  6706.         
  6707.         $boutique $em->getRepository(Boutique::class)
  6708.                     ->findOneBySlug($slug);
  6709.         $user $this->getUser();
  6710.         $userBoutique $em->getRepository(UserBoutique::class)
  6711.                         ->findOneBy(
  6712.                             array(
  6713.                             'user' => $user->getId(),
  6714.                             'boutique' => $boutique->getId()
  6715.                             )
  6716.                         );
  6717.         $paymentMethod $em->getRepository(PaymentMethod::class)
  6718.                     ->findOneBy(
  6719.                         array(
  6720.                             'boutique' => $boutique->getId(),
  6721.                             'id' => $paymentMethod
  6722.                         )
  6723.                     );
  6724.         
  6725.         $form $this->createForm(PaymentMethodEditType::class, $paymentMethod);
  6726.         
  6727.         $ok_soumission '';
  6728.         $error '';
  6729.         
  6730.         if($request->getMethod() == 'POST'){
  6731.             
  6732.                $form->handleRequest($request);
  6733.                if($form->isValid()){
  6734.                   $em->flush();
  6735.         
  6736.                 $ok_soumission =" Votre message a été pris en compte";
  6737.                     
  6738.                     
  6739.                 } else {
  6740.                     $error =" Veillez corrigez vos erreurs";
  6741.                 }
  6742.         }
  6743.     
  6744.         return $this->render('admin/edit_payment_method.html.twig', [
  6745.            'boutique' => $boutique,
  6746.            'paymentMethod' => $paymentMethod,
  6747.            'form' => $form->createView(),
  6748.            'userBoutique' => $userBoutique
  6749.         ]);
  6750.     }
  6751.     
  6752.     /**
  6753.      * @Route("/{slug}/payment-method/delete/{id}", name="admin.delete_payment_method")
  6754.      * @return \Symfony\Component\HttpFoundation\Response
  6755.      */
  6756.     public function deletePaymentMethodAction(Request $request$slug$id)
  6757.     {
  6758.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6759.            return $this->redirectToRoute('security_login');
  6760.         }
  6761.         $em $this->getDoctrine()
  6762.                     ->getManager();
  6763.         $boutique $em->getRepository(Boutique::class)
  6764.                         ->findOneBySlug($slug);
  6765.                         
  6766.         $paymentMethod $em->getRepository(PaymentMethod::class)
  6767.                         ->findOneBy(
  6768.                         array(
  6769.                             'boutique' => $boutique->getId(),
  6770.                             'id' => $id
  6771.                         )
  6772.                         );
  6773.         if(null !== $paymentMethod){
  6774.             $em->remove($paymentMethod);
  6775.             $em->flush();
  6776.         }
  6777.         return $this->redirectToRoute('admin.payment_methods', array('slug' => $boutique->getSlug()));
  6778.     }
  6779.     
  6780.     /**
  6781.      * @Route("/{slug}/expensives/list", name="admin.expensives")
  6782.      * @return \Symfony\Component\HttpFoundation\Response
  6783.      */
  6784.     public function expensivesAction(Request $requestBoutique $boutique)
  6785.     {
  6786.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6787.            return $this->redirectToRoute('security_login');
  6788.         }
  6789.         $em $this->getDoctrine()
  6790.                     ->getManager();
  6791.         
  6792.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  6793.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  6794.         $dateDebut->setTime(00);
  6795.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  6796.         $dateFin->setTime(2359);
  6797.         
  6798.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  6799.         $startMonth $intervalleMois['debut'];
  6800.         $endMonth $intervalleMois['fin'];
  6801.         
  6802.         $expensives  $em->getRepository(Expensive::class)
  6803.                         ->depenseParDate($boutique->getId(), $dateDebut$dateFin);
  6804.         
  6805.         $startYear date('Y-01-01');
  6806.         $endYear date('Y-12-31');
  6807.         $user $this->getUser();
  6808.         $userBoutique $em->getRepository(UserBoutique::class)
  6809.                         ->findOneBy(
  6810.                             array(
  6811.                             'user' => $user->getId(),
  6812.                             'boutique' => $boutique->getId()
  6813.                             )
  6814.                         );
  6815.         if('POST' == $request->getMethod()){
  6816.             $dateDebut $_POST['dateDebut'];
  6817.             $dateFin $_POST['dateFin'];
  6818.             
  6819.             $dateDebut = new \DateTime($dateDebut);
  6820.             $dateFin = new \DateTime($dateFin);
  6821.             
  6822.             $expensives $em->getRepository(Expensive::class)
  6823.                         ->depenseParDate($boutique->getId(), $dateDebut$dateFin);
  6824.             
  6825.             
  6826.             return $this->render('admin/expensives_table_content.html.twig', [
  6827.                'boutique' => $boutique,
  6828.                'expensives' => $expensives,
  6829.                'userBoutique' => $userBoutique
  6830.             ]);
  6831.         }
  6832.         
  6833.             
  6834.         return $this->render('admin/expensives.html.twig', [
  6835.            'boutique' => $boutique,
  6836.            'expensives' => $expensives,
  6837.            'userBoutique' => $userBoutique,
  6838.            'intervalleDeDate' => $intervalleDeDate,
  6839.            'dateDebut' => $dateDebut,
  6840.            'dateFin' => $dateFin,
  6841.            'startMonth' => $startMonth,
  6842.            'intervalleMois' => $intervalleMois,
  6843.            'endMonth' => $endMonth,
  6844.            'startYear' => $startYear,
  6845.            'endYear' => $endYear
  6846.            
  6847.         ]);
  6848.     }
  6849.     
  6850.     /**
  6851.      * @Route("/{slug}/expensives/new", name="admin.new_expensive")
  6852.      * @return \Symfony\Component\HttpFoundation\Response
  6853.      */
  6854.     public function newExpensiveAction(Request $requestBoutique $boutique)
  6855.     {
  6856.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6857.            return $this->redirectToRoute('security_login');
  6858.         }
  6859.         $em $this->getDoctrine()
  6860.                     ->getManager();
  6861.         
  6862.         $expensive = new Expensive;
  6863.         
  6864.         $user $this->getUser();
  6865.         $userBoutique $em->getRepository(UserBoutique::class)
  6866.                         ->findOneBy(
  6867.                             array(
  6868.                             'user' => $user->getId(),
  6869.                             'boutique' => $boutique->getId()
  6870.                             )
  6871.                         );
  6872.         $form $this->createForm(ExpensiveType::class, $expensive, array('boutique' => $boutique->getId()));
  6873.         
  6874.         $ok_soumission '';
  6875.         $error '';
  6876.         $laDate '';
  6877.         if($request->getMethod() == 'POST'){
  6878.             
  6879.                $form->handleRequest($request);
  6880.                if($form->isValid()){
  6881.                 $data $form->getData();
  6882.                    $expensive->setBoutique($boutique);
  6883.                    $expensive->setCreePar($user);
  6884.                   $em->persist($expensive);
  6885.                   $em->flush();
  6886.         
  6887.                 $ok_soumission =" Votre message a été pris en compte";
  6888.                     
  6889.                 $moyenDePaiement $request->request->get('moyenDePaiement');
  6890.                 $expensive->setMoyenDePaiement($moyenDePaiement);
  6891.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  6892.                 $libelle 'Règlement fournisseur';
  6893.                 if($expensive->getTiers() != null){
  6894.                     $libelle $libelle' '$expensive->getTiers()->getNom();
  6895.                 }
  6896.                 $groupeEcritureComptable = new GroupeEcritureComptable;
  6897.                 $groupeEcritureComptable->setBoutique($boutique);
  6898.                 $groupeEcritureComptable->setLibelleEcriture($libelle);
  6899.                 $groupeEcritureComptable->setDebit($data->getMontant());
  6900.                 $groupeEcritureComptable->setCredit($data->getMontant());
  6901.                 $groupeEcritureComptable->setLaDate($data->getLaDate());
  6902.                 $groupeEcritureComptable->setNumeroPiece($data->getPiece());
  6903.                 $groupeEcritureComptable->setAnnee($data->getLaDate()->format('Y'));
  6904.                 $groupeEcritureComptable->setMois($data->getLaDate()->format('m'));
  6905.                 $em->persist($groupeEcritureComptable);
  6906.                 $em->flush();
  6907.                     
  6908.                 //Ecriture comptable
  6909.                 
  6910.                 //$ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  6911.                 if($moyenDePaiement == 'cash' || $moyenDePaiement == 'mobile-money'){
  6912.                     //Debit
  6913.                     
  6914.                     
  6915.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6916.                     $ecritureComptable = new EcritureComptable;
  6917.                     
  6918.                     $ecritureComptable->setBoutique($boutique);
  6919.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6920.                     
  6921.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6922.                     $compte $em->getRepository(Compte::class)
  6923.                                 ->findOneBy(
  6924.                                     array(
  6925.                                         'boutique' => $boutique,
  6926.                                         'numero' => '5711' //Caisse
  6927.                                     )    
  6928.                                 ); 
  6929.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  6930.                     $ecritureComptable->setCompte($compte);
  6931.                     $ecritureComptable->setLibelleEcriture($libelle);
  6932.                     $ecritureComptable->setCredit($data->getMontant());
  6933.                     $ecritureComptable->setSolde($compte->getSolde());
  6934.                     $ecritureComptable->setLaDate($data->getLaDate());
  6935.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6936.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6937.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6938.                     $em->persist($ecritureComptable);
  6939.                     //Debit
  6940.                     $ecritureComptable = new EcritureComptable;
  6941.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6942.                     $ecritureComptable->setBoutique($boutique);
  6943.                     
  6944.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6945.                     $compte $em->getRepository(Compte::class)
  6946.                                 ->findOneBy(
  6947.                                     array(
  6948.                                         'boutique' => $boutique,
  6949.                                         'numero' => '658'
  6950.                                     )    
  6951.                                 ); //Charge divers
  6952.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  6953.                     $ecritureComptable->setCompte($compte);
  6954.                     $ecritureComptable->setLibelleEcriture($libelle);
  6955.                     $ecritureComptable->setDebit($data->getMontant());
  6956.                     $ecritureComptable->setSolde($compte->getSolde());
  6957.                     $ecritureComptable->setLaDate($data->getLaDate());
  6958.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6959.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6960.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6961.                     $em->persist($ecritureComptable);
  6962.                 }else{
  6963.                     $leJournal $boutique->getSettings()->getJournalDeBanque();
  6964.                     
  6965.                     $groupeEcritureComptable->setLeJournal($leJournal);
  6966.                     $ecritureComptable = new EcritureComptable;
  6967.                     
  6968.                     $ecritureComptable->setBoutique($boutique);
  6969.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6970.                     
  6971.                     $ecritureComptable->setLeJournal($leJournal);
  6972.                     $compte $em->getRepository(Compte::class)
  6973.                                 ->findOneBy(
  6974.                                     array(
  6975.                                         'boutique' => $boutique,
  6976.                                         'numero' => '521'
  6977.                                     )    
  6978.                                 ); //Banque
  6979.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  6980.                     $ecritureComptable->setCompte($compte);
  6981.                     $ecritureComptable->setLibelleEcriture($libelle);
  6982.                     $ecritureComptable->setCredit($data->getMontant());
  6983.                     $ecritureComptable->setSolde($compte->getSolde());
  6984.                     $ecritureComptable->setLaDate($data->getLaDate());
  6985.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6986.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6987.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6988.                     $em->persist($ecritureComptable);
  6989.                     //Debit
  6990.                     $ecritureComptable = new EcritureComptable;
  6991.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6992.                     $ecritureComptable->setBoutique($boutique);
  6993.                     
  6994.                     $ecritureComptable->setLeJournal($leJournal);
  6995.                     $compte $em->getRepository(Compte::class)
  6996.                                 ->findOneBy(
  6997.                                     array(
  6998.                                         'boutique' => $boutique,
  6999.                                         'numero' => '658'
  7000.                                     )    
  7001.                                 ); //Charge divers
  7002.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  7003.                     $ecritureComptable->setCompte($compte);
  7004.                     $ecritureComptable->setLibelleEcriture($libelle);
  7005.                     $ecritureComptable->setDebit($data->getMontant());
  7006.                     $ecritureComptable->setSolde($compte->getSolde());
  7007.                     $ecritureComptable->setLaDate($data->getLaDate());
  7008.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  7009.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  7010.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  7011.                     $em->persist($ecritureComptable);
  7012.                 }
  7013.                 }
  7014.                 $em->flush();
  7015.                 $expensive = new Expensive;
  7016.                 
  7017.                 $form $this->createForm(ExpensiveType::class, $expensive);
  7018.                     
  7019.                 } else {
  7020.                     $error =" Veillez corrigez vos erreurs";
  7021.                 }
  7022.         }
  7023.     
  7024.         return $this->render('admin/new_expensive.html.twig', [
  7025.            'boutique' => $boutique,
  7026.            'form' => $form->createView(),
  7027.            'userBoutique' => $userBoutique
  7028.         ]);
  7029.     }
  7030.     
  7031.     /**
  7032.      * @Route("/{slug}/expensive/edit/{id}", name="admin.edit_expensive")
  7033.      * @return \Symfony\Component\HttpFoundation\Response
  7034.      */
  7035.     public function editExpensivesAction(Request $request,  $slug$id)
  7036.     {
  7037.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7038.            return $this->redirectToRoute('security_login');
  7039.         }
  7040.         $em $this->getDoctrine()
  7041.                     ->getManager();
  7042.         
  7043.         $boutique $em->getRepository(Boutique::class)
  7044.                     ->findOneBySlug($slug);
  7045.         $user $this->getUser();
  7046.         $userBoutique $em->getRepository(UserBoutique::class)
  7047.                         ->findOneBy(
  7048.                             array(
  7049.                             'user' => $user->getId(),
  7050.                             'boutique' => $boutique->getId()
  7051.                             )
  7052.                         );
  7053.         $expensive $em->getRepository(Expensive::class)
  7054.                     ->findOneBy(
  7055.                         array(
  7056.                             'boutique' => $boutique->getId(),
  7057.                             'id' => $id
  7058.                         )
  7059.                     );
  7060.         
  7061.         $form $this->createForm(ExpensiveEditType::class, $expensive, array('boutique' => $boutique->getId()));
  7062.         
  7063.         $ok_soumission '';
  7064.         $error '';
  7065.         
  7066.         if($request->getMethod() == 'POST'){
  7067.             
  7068.                $form->handleRequest($request);
  7069.                if($form->isValid()){
  7070.                 $expensive->setModifiePar($user);
  7071.                   $em->flush();
  7072.         
  7073.                 $ok_soumission =" Votre message a été pris en compte";
  7074.                     
  7075.                     
  7076.                 } else {
  7077.                     $error =" Veillez corrigez vos erreurs";
  7078.                 }
  7079.         }
  7080.     
  7081.         return $this->render('admin/edit_expensive.html.twig', [
  7082.            'boutique' => $boutique,
  7083.            'expensive' => $expensive,
  7084.            'form' => $form->createView(),
  7085.            'userBoutique' => $userBoutique
  7086.         ]);
  7087.     }
  7088.     
  7089.     /**
  7090.      * @Route("/{slug}/expensive/delete/{id}", name="admin.delete_expensive")
  7091.      * @return \Symfony\Component\HttpFoundation\Response
  7092.      */
  7093.     public function deleteExpensiveAction(Request $request$slug$id)
  7094.     {
  7095.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7096.            return $this->redirectToRoute('security_login');
  7097.         }
  7098.         $em $this->getDoctrine()
  7099.                     ->getManager();
  7100.         $boutique $em->getRepository(Boutique::class)
  7101.                         ->findOneBySlug($slug);
  7102.         $user $this->getUser();
  7103.                         
  7104.         $expensive $em->getRepository(Expensive::class)
  7105.                         ->findOneBy(
  7106.                         array(
  7107.                             'boutique' => $boutique->getId(),
  7108.                             'id' => $id
  7109.                         )
  7110.                         );
  7111.         if(null !== $expensive){
  7112.             $expensive->setEstSupprime(true);
  7113.             $expensive->setSupprimePar($user);
  7114.             //$em->remove($expensive);
  7115.             $em->flush();
  7116.         }
  7117.         return $this->redirectToRoute('admin.expensives', array('slug' => $boutique->getSlug()));
  7118.     }
  7119.     /**
  7120.      * @Route("/{slug}/categorie-depense/list", name="admin_categorie_depenses")
  7121.      * @return \Symfony\Component\HttpFoundation\Response
  7122.      */
  7123.     public function categorieDepenseAction(Request $requestBoutique $boutique)
  7124.     {
  7125.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7126.            return $this->redirectToRoute('security_login');
  7127.         }
  7128.         $em $this->getDoctrine()
  7129.                     ->getManager();
  7130.         
  7131.         $categorieDepenses  $em->getRepository(CategorieDepense::class)
  7132.                         ->findBy(
  7133.                             array(
  7134.                                 'boutique' => $boutique->getId()
  7135.                             )    
  7136.                         );
  7137.         
  7138.         $user $this->getUser();
  7139.         $userBoutique $em->getRepository(UserBoutique::class)
  7140.                         ->findOneBy(
  7141.                             array(
  7142.                             'user' => $user->getId(),
  7143.                             'boutique' => $boutique->getId()
  7144.                             )
  7145.                         );
  7146.         
  7147.         
  7148.             
  7149.         return $this->render('admin/categorie_depenses.html.twig', [
  7150.            'boutique' => $boutique,
  7151.            'userBoutique' => $userBoutique,
  7152.            'categorieDepenses' => $categorieDepenses
  7153.            
  7154.         ]);
  7155.     }
  7156.     
  7157.     /**
  7158.      * @Route("/{slug}/categorie-depense/nouveau", name="admin_nouvelle_categorie_dedepense")
  7159.      * @return \Symfony\Component\HttpFoundation\Response
  7160.      */
  7161.     public function nouvelleCategorieDepenseAction(Request $requestBoutique $boutique)
  7162.     {
  7163.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7164.            return $this->redirectToRoute('security_login');
  7165.         }
  7166.         $em $this->getDoctrine()
  7167.                     ->getManager();
  7168.         
  7169.         $categorieDepense = new CategorieDepense;
  7170.         
  7171.         $user $this->getUser();
  7172.         $userBoutique $em->getRepository(UserBoutique::class)
  7173.                         ->findOneBy(
  7174.                             array(
  7175.                             'user' => $user->getId(),
  7176.                             'boutique' => $boutique->getId()
  7177.                             )
  7178.                         );
  7179.         $form $this->createForm(CategorieDepenseType::class, $categorieDepense);
  7180.         
  7181.         $ok_soumission '';
  7182.         
  7183.         if($request->getMethod() == 'POST'){
  7184.             
  7185.                $form->handleRequest($request);
  7186.                if($form->isValid()){
  7187.                 $categorieDepense->setBoutique($boutique);
  7188.                   $em->persist($categorieDepense);
  7189.                   $em->flush();
  7190.         
  7191.                 $ok_soumission =" Votre message a été pris en compte";
  7192.                     
  7193.                 $categorieDepense = new CategorieDepense;
  7194.                 
  7195.                 $form $this->createForm(CategorieDepenseType::class, $categorieDepense);
  7196.                     
  7197.                 } else {
  7198.                     $error =" Veillez corrigez vos erreurs";
  7199.                 }
  7200.         }
  7201.     
  7202.         return $this->render('admin/nouvelle_categorie_depense.html.twig', [
  7203.            'boutique' => $boutique,
  7204.            'form' => $form->createView(),
  7205.            'userBoutique' => $userBoutique
  7206.         ]);
  7207.     }
  7208.     
  7209.     /**
  7210.      * @Route("/{slug}/categorie-depense/modifier/{id}", name="admin_modifier_categorie_depense")
  7211.      * @return \Symfony\Component\HttpFoundation\Response
  7212.      */
  7213.     public function modifierCategorieDepenseAction(Request $request,  $slug$id)
  7214.     {
  7215.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7216.            return $this->redirectToRoute('security_login');
  7217.         }
  7218.         $em $this->getDoctrine()
  7219.                     ->getManager();
  7220.         
  7221.         $boutique $em->getRepository(Boutique::class)
  7222.                     ->findOneBySlug($slug);
  7223.         $user $this->getUser();
  7224.         $userBoutique $em->getRepository(UserBoutique::class)
  7225.                         ->findOneBy(
  7226.                             array(
  7227.                             'user' => $user->getId(),
  7228.                             'boutique' => $boutique->getId()
  7229.                             )
  7230.                         );
  7231.         $categorieDepense $em->getRepository(CategorieDepense::class)
  7232.                     ->findOneBy(
  7233.                         array(
  7234.                             'boutique' => $boutique->getId(),
  7235.                             'id' => $id
  7236.                         )
  7237.                     );
  7238.         
  7239.         $form $this->createForm(CategorieDepenseEditType::class, $categorieDepense);
  7240.         
  7241.         $ok_soumission '';
  7242.         $error '';
  7243.         
  7244.         if($request->getMethod() == 'POST'){
  7245.             
  7246.                $form->handleRequest($request);
  7247.                if($form->isValid()){
  7248.                 
  7249.                   $em->flush();
  7250.         
  7251.                 $ok_soumission =" Votre message a été pris en compte";
  7252.                     
  7253.                     
  7254.                 } else {
  7255.                     $error =" Veillez corrigez vos erreurs";
  7256.                 }
  7257.         }
  7258.     
  7259.         return $this->render('admin/modifier_categorie_depense.html.twig', [
  7260.            'boutique' => $boutique,
  7261.            'categorieDepense' => $categorieDepense,
  7262.            'form' => $form->createView(),
  7263.            'userBoutique' => $userBoutique
  7264.         ]);
  7265.     }
  7266.     
  7267.     /**
  7268.      * @Route("/{slug}/categorie-depense/supprimer/{id}", name="admin_supprimer_categorie_depense")
  7269.      * @return \Symfony\Component\HttpFoundation\Response
  7270.      */
  7271.     public function supprimerCategorieDepenseAction(Request $request$slug$id)
  7272.     {
  7273.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7274.            return $this->redirectToRoute('security_login');
  7275.         }
  7276.         $em $this->getDoctrine()
  7277.                     ->getManager();
  7278.         $boutique $em->getRepository(Boutique::class)
  7279.                         ->findOneBySlug($slug);
  7280.         $user $this->getUser();
  7281.                         
  7282.         $categorieDepense $em->getRepository(CategorieDepense::class)
  7283.                         ->findOneBy(
  7284.                         array(
  7285.                             'boutique' => $boutique->getId(),
  7286.                             'id' => $id
  7287.                         )
  7288.                         );
  7289.         if(null !== $categorieDepense){
  7290.             
  7291.             $em->remove($categorieDepense);
  7292.             $em->flush();
  7293.         }
  7294.         return $this->redirectToRoute('admin_categorie_depenses', array('slug' => $boutique->getSlug()));
  7295.     }
  7296.     
  7297.     
  7298.     /**
  7299.      * @Route("/{slug}/third/list", name="admin.liste_tiers")
  7300.      * @return \Symfony\Component\HttpFoundation\Response
  7301.      */
  7302.     public function listeTiersAction(Request $requestBoutique $boutique)
  7303.     {
  7304.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7305.            return $this->redirectToRoute('security_login');
  7306.         }
  7307.         $em $this->getDoctrine()
  7308.                     ->getManager();
  7309.         
  7310.         $tiers $em->getRepository(Tiers::class)
  7311.                     ->findBy(
  7312.                         array(
  7313.                             'boutique' => $boutique->getId(),
  7314.                             'estSupprime' => false
  7315.                             
  7316.                         ),
  7317.                         array(
  7318.                             'nom' => 'ASC'
  7319.                         )
  7320.                         );
  7321.         $user $this->getUser();
  7322.         $userBoutique $em->getRepository(UserBoutique::class)
  7323.                         ->findOneBy(
  7324.                             array(
  7325.                             'user' => $user->getId(),
  7326.                             'boutique' => $boutique->getId()
  7327.                             )
  7328.                         );
  7329.         return $this->render('admin/liste_tiers.html.twig', [
  7330.            'boutique' => $boutique,
  7331.            'tiers' => $tiers,
  7332.            'userBoutique' => $userBoutique
  7333.         ]);
  7334.     }
  7335.     
  7336.     //Service
  7337.     
  7338.     /**
  7339.      * @Route("/{slug}/new-third", name="admin.new_third")
  7340.      * @return \Symfony\Component\HttpFoundation\Response
  7341.      */
  7342.     public function newThirdAction(Request $requestBoutique $boutique)
  7343.     {
  7344.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7345.            return $this->redirectToRoute('security_login');
  7346.         }
  7347.         $em $this->getDoctrine()
  7348.                     ->getManager();
  7349.         
  7350.         $tiers = new Tiers;
  7351.         $form $this->createForm(TiersType::class, $tiers);
  7352.         
  7353.         $user $this->getUser();
  7354.         $userBoutique $em->getRepository(UserBoutique::class)
  7355.                         ->findOneBy(
  7356.                             array(
  7357.                             'user' => $user->getId(),
  7358.                             'boutique' => $boutique->getId()
  7359.                             )
  7360.                         );
  7361.         
  7362.         $ok_soumission '';
  7363.         $error '';
  7364.         
  7365.         if($request->getMethod() == 'POST'){
  7366.             
  7367.                $form->handleRequest($request);
  7368.                if($form->isValid()){
  7369.                    $tiers->setBoutique($boutique);
  7370.                    $tiers->setCreePar($user);
  7371.                   $em->persist($tiers);
  7372.                   $em->flush();
  7373.         
  7374.                 $ok_soumission =" Votre message a été pris en compte";
  7375.                 $tiers = new Tiers;
  7376.                 
  7377.                 $form $this->createForm(TiersType::class, $tiers);
  7378.                     
  7379.                 } else {
  7380.                     $error =" Veillez corrigez vos erreurs";
  7381.                 }
  7382.         }
  7383.         return $this->render('admin/nouveau_tiers.html.twig', [
  7384.            'boutique' => $boutique,
  7385.            'form' => $form->createView(),
  7386.            'userBoutique' => $userBoutique
  7387.         ]);
  7388.     }
  7389.     /**
  7390.      * @Route("/{slug}/edit-third/{third}", name="admin.edit_third")
  7391.      * @return \Symfony\Component\HttpFoundation\Response
  7392.      */
  7393.     public function editThirdAction(Request $requestBoutique $boutique$third)
  7394.     {
  7395.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7396.            return $this->redirectToRoute('security_login');
  7397.         }
  7398.         $em $this->getDoctrine()
  7399.                     ->getManager();
  7400.                     
  7401.         $user $this->getUser();
  7402.         $userBoutique $em->getRepository(UserBoutique::class)
  7403.                         ->findOneBy(
  7404.                             array(
  7405.                             'user' => $user->getId(),
  7406.                             'boutique' => $boutique->getId()
  7407.                             )
  7408.                         );
  7409.         $third $em->getRepository(Tiers::class)
  7410.                     ->findOneById($third);
  7411.         $form $this->createForm(TiersEditType::class, $third);
  7412.         
  7413.         $ok_soumission '';
  7414.         $error '';
  7415.         
  7416.         if($request->getMethod() == 'POST'){
  7417.             
  7418.                $form->handleRequest($request);
  7419.                if($form->isValid()){
  7420.                     $third->setModifiePar($user);
  7421.                   $em->flush();
  7422.         
  7423.                 $ok_soumission =" Votre message a été pris en compte";
  7424.                     
  7425.                 } else {
  7426.                     $error =" Veillez corrigez vos erreurs";
  7427.                 }
  7428.         }
  7429.         return $this->render('admin/edit_third.html.twig', [
  7430.            'boutique' => $boutique,
  7431.            'form' => $form->createView(),
  7432.            'third' => $third,
  7433.            'userBoutique' => $userBoutique
  7434.         ]);
  7435.     }
  7436.     /**
  7437.      * @Route("/{slug}/delete-third/{third}", name="admin.delete_third")
  7438.      * @return \Symfony\Component\HttpFoundation\Response
  7439.      */
  7440.     public function deleteThirdAction(Request $requestBoutique $boutique$third)
  7441.     {
  7442.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7443.            return $this->redirectToRoute('security_login');
  7444.         }
  7445.         $em $this->getDoctrine()
  7446.                     ->getManager();
  7447.         $user $this->getUser();
  7448.         $third $em->getRepository(Tiers::class)
  7449.                     ->findOneById($third);
  7450.                     
  7451.         if(null != $third){
  7452.             $third->setEstSupprime(true);
  7453.             $third->setSupprimePar($user);
  7454.             $em->flush();
  7455.         }
  7456.         
  7457.         return $this->redirectToRoute('admin.liste_tiers', array('slug' => $boutique->getSlug()));
  7458.     }
  7459.     /**
  7460.      * @Route("/{slug}/statistics", name="admin.statistics")
  7461.      * @return \Symfony\Component\HttpFoundation\Response
  7462.      */
  7463.     public function statisticsAction(Request $requestBoutique $boutique)
  7464.     {
  7465.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7466.            return $this->redirectToRoute('security_login');
  7467.         }
  7468.         $em $this->getDoctrine()
  7469.                     ->getManager();
  7470.         
  7471.         $tiers $em->getRepository(Tiers::class)
  7472.                     ->findByBoutique($boutique);
  7473.         $user $this->getUser();
  7474.         $userBoutique $em->getRepository(UserBoutique::class)
  7475.                         ->findOneBy(
  7476.                             array(
  7477.                             'user' => $user->getId(),
  7478.                             'boutique' => $boutique->getId()
  7479.                             )
  7480.                         );
  7481.                         
  7482.         return $this->render('admin/statistics.html.twig', [
  7483.            'boutique' => $boutique,
  7484.            'tiers' => $tiers,
  7485.            'userBoutique' => $userBoutique
  7486.         ]);
  7487.     }
  7488.     
  7489.     /**
  7490.      * @Route("/{slug}/promotions", name="admin.promotions")
  7491.      * @return \Symfony\Component\HttpFoundation\Response
  7492.      */
  7493.     public function promotionsAction(Request $requestBoutique $boutique)
  7494.     {
  7495.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7496.            return $this->redirectToRoute('security_login');
  7497.         }
  7498.         $em $this->getDoctrine()
  7499.                     ->getManager();
  7500.         
  7501.         $tiers $em->getRepository(Tiers::class)
  7502.                     ->findByBoutique($boutique);
  7503.         $user $this->getUser();
  7504.         $userBoutique $em->getRepository(UserBoutique::class)
  7505.                         ->findOneBy(
  7506.                             array(
  7507.                             'user' => $user->getId(),
  7508.                             'boutique' => $boutique->getId()
  7509.                             )
  7510.                         );
  7511.         return $this->render('admin/liste_tiers.html.twig', [
  7512.            'boutique' => $boutique,
  7513.            'tiers' => $tiers,
  7514.            'userBoutique' => $userBoutique
  7515.         ]);
  7516.     }
  7517.     
  7518.     /**
  7519.      * @Route("/{slug}/new-payment-patern", name="admin.new_payment_patern")
  7520.      * @return \Symfony\Component\HttpFoundation\Response
  7521.      */
  7522.     public function newPayementPaternMethodAction(Request $requestBoutique $boutique)
  7523.     {
  7524.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7525.            return $this->redirectToRoute('security_login');
  7526.         }
  7527.         $em $this->getDoctrine()
  7528.                     ->getManager();
  7529.         
  7530.         $modeleReglement = new ModeleReglement;
  7531.         $form $this->createForm(ModeleReglementType::class, $modeleReglement);
  7532.         
  7533.         $ok_soumission '';
  7534.         $error '';
  7535.         $user $this->getUser();
  7536.         $userBoutique $em->getRepository(UserBoutique::class)
  7537.                         ->findOneBy(
  7538.                             array(
  7539.                             'user' => $user->getId(),
  7540.                             'boutique' => $boutique->getId()
  7541.                             )
  7542.                         );
  7543.         if($request->getMethod() == 'POST'){
  7544.             
  7545.                $form->handleRequest($request);
  7546.                if($form->isValid()){
  7547.                    $modeleReglement->setBoutique($boutique);
  7548.                   $em->persist($modeleReglement);
  7549.                   $em->flush();
  7550.         
  7551.                 $ok_soumission =" Votre message a été pris en compte";
  7552.                     
  7553.                 unset($modeleReglement);
  7554.                 unset($form);
  7555.                 $modeleReglement = new ModeleReglement;
  7556.                 
  7557.                 $form $this->createForm(ModeleReglementType::class, $modeleReglement);
  7558.                     
  7559.                 } else {
  7560.                     $error =" Veillez corrigez vos erreurs";
  7561.                 }
  7562.         }
  7563.         return $this->render('admin/nouveau_modele_reglement.html.twig', [
  7564.            'boutique' => $boutique
  7565.            'form' => $form->createView(),
  7566.            'userBoutique' => $userBoutique
  7567.         ]);
  7568.     }
  7569.     
  7570.     /**
  7571.      * @Route("/{slug}/payment-patern/list", name="admin.list_payment_patern")
  7572.      * @return \Symfony\Component\HttpFoundation\Response
  7573.      */
  7574.     public function listeModeleReglementAction(Request $requestBoutique $boutique)
  7575.     {
  7576.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7577.            return $this->redirectToRoute('security_login');
  7578.         }
  7579.         $em $this->getDoctrine()
  7580.                     ->getManager();
  7581.         
  7582.         $modeleReglements $em->getRepository(ModeleReglement::class)
  7583.                     ->findByBoutique($boutique);
  7584.         $user $this->getUser();
  7585.         $userBoutique $em->getRepository(UserBoutique::class)
  7586.                         ->findOneBy(
  7587.                             array(
  7588.                             'user' => $user->getId(),
  7589.                             'boutique' => $boutique->getId()
  7590.                             )
  7591.                         );
  7592.                         
  7593.         return $this->render('admin/liste_modele_reglement.html.twig', [
  7594.            'boutique' => $boutique,
  7595.            'modeleReglements' => $modeleReglements,
  7596.            'userBoutique' => $userBoutique
  7597.         ]);
  7598.     }
  7599.     
  7600.     /**
  7601.      * @Route("/{slug}/send-document-mail/{id}", name="admin.send_document_mail")
  7602.      * @return \Symfony\Component\HttpFoundation\Response
  7603.      */
  7604.     public function sendDocumentMailAction(Request $requestMailerInterface $mailer$slug$id)
  7605.     {
  7606.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7607.            return $this->redirectToRoute('security_login');
  7608.         }
  7609.         $em $this->getDoctrine()
  7610.                     ->getManager();
  7611.         $boutique $em->getRepository(Boutique::class)
  7612.                         ->findOneBySlug($slug);
  7613.         $user $this->getUser();
  7614.         $userBoutique $em->getRepository(UserBoutique::class)
  7615.                         ->findOneBy(
  7616.                             array(
  7617.                             'user' => $user->getId(),
  7618.                             'boutique' => $boutique->getId()
  7619.                             )
  7620.                         );        
  7621.         $commande $em->getRepository(Commande::class)
  7622.                     ->findOneBy(
  7623.                         array(
  7624.                         'boutique' => $boutique->getId(),
  7625.                         'id' => $id
  7626.                         )
  7627.                     );
  7628.         
  7629.         $appName $this->getParameter('app_name');
  7630.         if('POST'== $request->getMethod()){
  7631.             $from $_POST['from'];
  7632.             $to $_POST['to_mail'];
  7633.             $subject $_POST['subject'];
  7634.             $contenu $_POST['message'];
  7635.             $sendAttachment = (bool)$_POST['send_attachment'];
  7636.             
  7637.             /*
  7638.             $message = (new \Swift_Message($subject))
  7639.             ->setFrom([$from  => $appName])
  7640.             ->setTo([$to])
  7641.             ->setBody(
  7642.                 $this->renderView(
  7643.                 'admin/document_email.html.twig',
  7644.                 [
  7645.                 'message' => $contenu
  7646.                 ]
  7647.                 ),
  7648.             'text/html'
  7649.             );
  7650.             
  7651.             if($sendAttachment){
  7652.                 $message->attach(\Swift_Attachment::fromPath($commande->getLienPDF()));
  7653.             }
  7654.             
  7655.             $mailer->send($message);
  7656.             */
  7657.             //Nouveau mailer
  7658.         $from $_POST['from'];
  7659.             $to $_POST['to_mail'];
  7660.             $subject $_POST['subject'];
  7661.             $contenu $_POST['message'];
  7662.             $sendAttachment = (bool)$_POST['send_attachment'];
  7663.             
  7664.             
  7665.             $email = (new TemplatedEmail())
  7666.                 ->from($from)
  7667.                 ->to($to)
  7668.                 ->subject($subject)
  7669.                 ->htmlTemplate('email/document_email.html.html.twig')
  7670.                 ->context([
  7671.                     'contenu' => $contenu
  7672.                 ]);
  7673.                 //$mailer->send($email); // Dispatches the message
  7674.             
  7675.         }
  7676.         
  7677.         return $this->render('admin/send_document_mail.html.twig', [
  7678.            'boutique' => $boutique,
  7679.            'commande' => $commande,
  7680.            'userBoutique' => $userBoutique
  7681.         ]);
  7682.     }
  7683.     
  7684.     
  7685.     /**
  7686.      * @Route("/{slug}/nombre-commande-en-retard", name="admin.nombre_commande_en_retard")
  7687.      * @return \Symfony\Component\HttpFoundation\Response
  7688.      */
  7689.     public function nombreCommandeEnRetard(Request $requestBoutique $boutique)
  7690.     {
  7691.         $em $this->getDoctrine()
  7692.                     ->getManager();
  7693.         $nombreCommandeEnRetard $em->getRepository(Commande::class)
  7694.                         -> nombreCommandeEnRetard($boutique->getId());
  7695.                         
  7696.         $nombreCommandeEnRetard count($nombreCommandeEnRetard);
  7697.         $user $this->getUser();
  7698.         $userBoutique $em->getRepository(UserBoutique::class)
  7699.                         ->findOneBy(
  7700.                             array(
  7701.                             'user' => $user->getId(),
  7702.                             'boutique' => $boutique->getId()
  7703.                             )
  7704.                         );
  7705.         return $this->render('admin/nombre_commande_en_retard.html.twig', [
  7706.            'boutique' => $boutique,
  7707.            'nombreCommandeEnRetard' => $nombreCommandeEnRetard,
  7708.            'userBoutique' => $userBoutique
  7709.         ]);
  7710.     }
  7711.     
  7712.     /**
  7713.      * @Route("/{slug}/liste-commande-en-retard", name="admin.liste_commande_en_retard")
  7714.      * @return \Symfony\Component\HttpFoundation\Response
  7715.      */
  7716.     public function listeCommandeEnRetard(Request $requestBoutique $boutique)
  7717.     {
  7718.         $em $this->getDoctrine()
  7719.                     ->getManager();
  7720.         $nombreCommandeEnRetards $em->getRepository(Commande::class)
  7721.                         -> nombreCommandeEnRetard($boutique->getId());
  7722.                         
  7723.         $user $this->getUser();
  7724.         $userBoutique $em->getRepository(UserBoutique::class)
  7725.                         ->findOneBy(
  7726.                             array(
  7727.                             'user' => $user->getId(),
  7728.                             'boutique' => $boutique->getId()
  7729.                             )
  7730.                         );
  7731.         
  7732.         return $this->render('admin/liste_commande_en_retard.html.twig', [
  7733.            'boutique' => $boutique,
  7734.            'nombreCommandeEnRetards' => $nombreCommandeEnRetards,
  7735.            'userBoutique' => $userBoutique
  7736.         ]);
  7737.     }
  7738.     
  7739.     /**
  7740.      * @Route("/{slug}/my-invoices", name="admin.my_invoices")
  7741.      * @return \Symfony\Component\HttpFoundation\Response
  7742.      */
  7743.     public function myInvoicesAction(Request $requestBoutique $boutique)
  7744.     {
  7745.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7746.            return $this->redirectToRoute('security_login');
  7747.         }
  7748.         $em $this->getDoctrine()
  7749.                     ->getManager();
  7750.                     
  7751.         
  7752.                         
  7753.         $toutesLesValiditeServices $em->getRepository(ValiditeService::class)
  7754.                     ->toutesLesValiditeService($boutique->getId());
  7755.                     
  7756.         
  7757.         $user $this->getUser();
  7758.         $userBoutique $em->getRepository(UserBoutique::class)
  7759.                         ->findOneBy(
  7760.                             array(
  7761.                             'user' => $user->getId(),
  7762.                             'boutique' => $boutique->getId()
  7763.                             )
  7764.                         );
  7765.                         
  7766.         return $this->render('admin/my_invoices.html.twig', [
  7767.            'toutesLesValiditeServices' => $toutesLesValiditeServices,
  7768.            'boutique' => $boutique,
  7769.            'userBoutique' => $userBoutique
  7770.         ]);
  7771.     }
  7772.     
  7773.     /**
  7774.      * @Route("/{slug}/my-tickets/{id}", name="admin.my_tickets")
  7775.      * @return \Symfony\Component\HttpFoundation\Response
  7776.      */
  7777.     public function myTicketsAction(Request $request$slug$id)
  7778.     {
  7779.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7780.            return $this->redirectToRoute('security_login');
  7781.         }
  7782.         $em $this->getDoctrine()
  7783.                     ->getManager();
  7784.                     
  7785.         $boutique $em->getRepository(Boutique::class)
  7786.                         ->findOneBySlug($slug);
  7787.         $user $this->getUser();
  7788.         $userBoutique $em->getRepository(UserBoutique::class)
  7789.                         ->findOneBy(
  7790.                             array(
  7791.                             'user' => $user->getId(),
  7792.                             'boutique' => $boutique->getId()
  7793.                             )
  7794.                         );
  7795.         
  7796.         $tickets $em->getRepository(Ticket::class)
  7797.                         ->findBy(
  7798.                             array(
  7799.                                 'boutique'=>$boutique->getId(),
  7800.                                 'user' => $user->getId()
  7801.                             )
  7802.                         );
  7803.         
  7804.         return $this->render('admin/my_tickets.html.twig', [
  7805.            'boutique' => $boutique,
  7806.            'tickets'  => $tickets,
  7807.            'userBoutique' => $userBoutique
  7808.         ]);
  7809.     }
  7810.     
  7811.     /**
  7812.      * @Route("/{slug}/new-ticket", name="admin.new_ticket")
  7813.      * @return \Symfony\Component\HttpFoundation\Response
  7814.      */
  7815.     public function newTicketAction(Request $request$slug)
  7816.     {
  7817.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7818.            return $this->redirectToRoute('security_login');
  7819.         }
  7820.         $em $this->getDoctrine()
  7821.                     ->getManager();
  7822.                     
  7823.         $boutique $em->getRepository(Boutique::class)
  7824.                         ->findOneBySlug($slug);
  7825.         $user $this->getUser();
  7826.         
  7827.         $ticket = new Ticket;
  7828.         
  7829.         $user $this->getUser();
  7830.         $userBoutique $em->getRepository(UserBoutique::class)
  7831.                         ->findOneBy(
  7832.                             array(
  7833.                             'user' => $user->getId(),
  7834.                             'boutique' => $boutique->getId()
  7835.                             )
  7836.                         );
  7837.         $form $this->createForm(TicketType::class, $ticket);
  7838.         
  7839.         $ok_soumission '';
  7840.         $error '';
  7841.         
  7842.         if($request->getMethod() == 'POST'){
  7843.             
  7844.                $form->handleRequest($request);
  7845.                if($form->isValid()){
  7846.                    $ticket->setBoutique($boutique);
  7847.                    $ticket->setUser($user);
  7848.                    
  7849.                   $em->persist($ticket);
  7850.                   $em->flush();
  7851.                   
  7852.                 return $this->redirectToRoute('admin.display_ticket', array('slug' => $boutique->getSlug(), 'id' => $ticket->getId()));
  7853.                 $ok_soumission =" Votre message a été pris en compte";
  7854.                     
  7855.                 $ticket = new Ticket;
  7856.                 
  7857.                 $form $this->createForm(TicketType::class, $ticket);
  7858.                     
  7859.                 } else {
  7860.                     $error =" Veillez corrigez vos erreurs";
  7861.                 }
  7862.         }
  7863.         
  7864.         return $this->render('admin/new_ticket.html.twig', [
  7865.            'boutique' => $boutique,
  7866.            'form' => $form->createView(),
  7867.            'userBoutique' => $userBoutique
  7868.         ]);
  7869.     }
  7870.     
  7871.     /**
  7872.      * @Route("/{slug}/display-ticket/{id}", name="admin.display_ticket")
  7873.      * @return \Symfony\Component\HttpFoundation\Response
  7874.      */
  7875.     public function displayTicketAction(Request $request$slug$id)
  7876.     {
  7877.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7878.            return $this->redirectToRoute('security_login');
  7879.         }
  7880.         $em $this->getDoctrine()
  7881.                     ->getManager();
  7882.                     
  7883.         $boutique $em->getRepository(Boutique::class)
  7884.                         ->findOneBySlug($slug);
  7885.         $user $this->getUser();
  7886.         $userBoutique $em->getRepository(UserBoutique::class)
  7887.                         ->findOneBy(
  7888.                             array(
  7889.                             'user' => $user->getId(),
  7890.                             'boutique' => $boutique->getId()
  7891.                             )
  7892.                         );
  7893.         
  7894.         $ticket $em->getRepository(Ticket::class)
  7895.                     ->findOneBy(
  7896.                         array(
  7897.                             'boutique' => $boutique->getId(),
  7898.                             'id' => $id
  7899.                         )
  7900.                     );
  7901.         $commentaires $em->getRepository(CommentaireTicket::class)
  7902.                             ->findByTicket($ticket->getId());
  7903.         $commentaireTicket = new CommentaireTicket;
  7904.         
  7905.         $user $this->getUser();
  7906.         $form $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  7907.         
  7908.         $ok_soumission '';
  7909.         $error '';
  7910.         
  7911.         if($request->getMethod() == 'POST'){
  7912.             
  7913.                $form->handleRequest($request);
  7914.                if($form->isValid()){
  7915.                    
  7916.                    $commentaireTicket->setTicket($ticket);
  7917.                    $commentaireTicket->setUser($user);
  7918.                    
  7919.                   $em->persist($commentaireTicket);
  7920.                   $em->flush();
  7921.                 
  7922.                 $commentaires $em->getRepository(CommentaireTicket::class)
  7923.                             ->findByTicket($ticket->getId());
  7924.                 $ok_soumission =" Votre message a été pris en compte";
  7925.                     
  7926.                 $commentaireTicket = new CommentaireTicket;
  7927.                 
  7928.                 $form $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  7929.                     
  7930.                 } else {
  7931.                     $error =" Veillez corrigez vos erreurs";
  7932.                 }
  7933.         }
  7934.         
  7935.         return $this->render('admin/display_ticket.html.twig', [
  7936.            'boutique' => $boutique,
  7937.            'ticket' => $ticket,
  7938.            'form' => $form->createView(),
  7939.            'commentaires' => $commentaires,
  7940.            'userBoutique' => $userBoutique
  7941.         ]);
  7942.     }
  7943.     
  7944.     /**
  7945.      * @Route("/{slug}/close-ticket/{id}", name="admin.close_ticket")
  7946.      * @return \Symfony\Component\HttpFoundation\Response
  7947.      */
  7948.     public function closeTicketAction(Request $request$slug$id)
  7949.     {
  7950.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7951.            return $this->redirectToRoute('security_login');
  7952.         }
  7953.         $em $this->getDoctrine()
  7954.                     ->getManager();
  7955.                     
  7956.         $boutique $em->getRepository(Boutique::class)
  7957.                         ->findOneBySlug($slug);
  7958.         
  7959.         $ticket $em->getRepository(Ticket::class)
  7960.                     ->findOneBy(
  7961.                         array(
  7962.                             'boutique' => $boutique->getId(),
  7963.                             'id' => $id
  7964.                         )
  7965.                     );
  7966.         
  7967.         if(null !== $ticket){
  7968.             $ticket->setLesCommentairesSontFermes(true);
  7969.             $em->flush();
  7970.         }
  7971.         
  7972.         return $this->redirectToRoute('admin.display_ticket',array('slug'=>$boutique->getSlug(), 'id'=>$ticket->getId()));
  7973.     }
  7974.     
  7975.     
  7976.     /**
  7977.      * @Route("/{slug}/delete-ticket/{id}", name="admin.delete_ticket")
  7978.      * @return \Symfony\Component\HttpFoundation\Response
  7979.      */
  7980.     public function deleteTicketAction(Request $request$slug$id)
  7981.     {
  7982.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7983.            return $this->redirectToRoute('security_login');
  7984.         }
  7985.         $em $this->getDoctrine()
  7986.                     ->getManager();
  7987.                     
  7988.         $boutique $em->getRepository(Boutique::class)
  7989.                         ->findOneBySlug($slug);
  7990.         $user $this->getUser();
  7991.         
  7992.         
  7993.         $ok_soumission '';
  7994.         $error '';
  7995.         
  7996.         $ticket $em->getRepository(Ticket::class)
  7997.                     ->findOneBy(
  7998.                         array(
  7999.                             'boutique' => $boutique->getId(),
  8000.                             'id' => $id
  8001.                         )
  8002.                     );
  8003.         if(null !== $ticket){
  8004.             $commentaireTickets $em->getRepository(CommentaireTicket::class)
  8005.                                     ->findByTicket($ticket->getId());
  8006.             foreach($commentaireTickets as $commentaireTicket)
  8007.             {
  8008.                 $em->remove($commentaireTicket);
  8009.             }
  8010.             $em->remove($ticket);
  8011.             $em->flush();
  8012.         }
  8013.         
  8014.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  8015.     }
  8016.     
  8017.     
  8018.     /**
  8019.      * @Route("/{slug}/delete-commentaire-ticket/{id}", name="admin.delete_commentaire_ticket")
  8020.      * @return \Symfony\Component\HttpFoundation\Response
  8021.      */
  8022.     public function deleteCommentaireTicketAction(Request $request$slug$id)
  8023.     {
  8024.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8025.            return $this->redirectToRoute('security_login');
  8026.         }
  8027.         $em $this->getDoctrine()
  8028.                     ->getManager();
  8029.                     
  8030.         $boutique $em->getRepository(Boutique::class)
  8031.                         ->findOneBySlug($slug);
  8032.         $user $this->getUser();
  8033.     
  8034.         $commentaireTicket $em->getRepository(CommentaireTicket::class)
  8035.                     ->findOneById($id);
  8036.                     
  8037.         if(null !== $commentaireTicket){
  8038.             
  8039.             $em->remove($commentaireTicket);
  8040.             $em->flush();
  8041.         }
  8042.         
  8043.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  8044.     }
  8045.     
  8046.     /**
  8047.      * @Route("/{slug}/liste-produit-lors-commande", name="admin.liste_produit_lors_commande")
  8048.      * @return \Symfony\Component\HttpFoundation\Response
  8049.      */
  8050.     public function listeProduitLorsCommandeAction(Request $requestBoutique $boutique)
  8051.     {
  8052.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8053.            return $this->redirectToRoute('security_login');
  8054.         }
  8055.         
  8056.         $em $this->getDoctrine()
  8057.                     ->getManager();
  8058.                     
  8059.         $produits $em->getRepository(Produit::class)
  8060.                         ->findBy(
  8061.                             array(
  8062.                                 'boutique' => $boutique->getId(),
  8063.                                 'estSupprime' => false
  8064.                             )    
  8065.                         );
  8066.         $user $this->getUser();
  8067.         $userBoutique $em->getRepository(UserBoutique::class)
  8068.                         ->findOneBy(
  8069.                             array(
  8070.                             'user' => $user->getId(),
  8071.                             'boutique' => $boutique->getId()
  8072.                             )
  8073.                         );
  8074.         
  8075.         
  8076.         return $this->render('admin/liste_produit_lors_commande.html.twig', [
  8077.            'boutique' => $boutique,
  8078.            'produits' => $produits,
  8079.            'userBoutique' => $userBoutique
  8080.         ]);
  8081.     }
  8082.     
  8083.     /**
  8084.      * @Route("/{slug}/stock-management", name="admin.stock_management")
  8085.      * @return \Symfony\Component\HttpFoundation\Response
  8086.      */
  8087.     public function stockManagementAction(Request $requestBoutique $boutique)
  8088.     {
  8089.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8090.            return $this->redirectToRoute('security_login');
  8091.         }
  8092.         $em $this->getDoctrine()
  8093.                     ->getManager();
  8094.                     
  8095.         $produits $em->getRepository(Produit::class)
  8096.                         ->findByBoutique($boutique->getId());
  8097.         $user $this->getUser();
  8098.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  8099.         
  8100.         
  8101.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  8102.         $startMonth $intervalleMois['debut'];
  8103.         $endMonth $intervalleMois['fin'];
  8104.         
  8105.         $dateDebut = new \DateTime($startMonth);
  8106.         $dateFin = new \DateTime($endMonth);
  8107.         $startYear date('Y-01-01');
  8108.         $endYear date('Y-12-31');
  8109.         $user $this->getUser();
  8110.         
  8111.         $userBoutique $em->getRepository(UserBoutique::class)
  8112.                         ->findOneBy(
  8113.                             array(
  8114.                             'user' => $user->getId(),
  8115.                             'boutique' => $boutique->getId()
  8116.                             )
  8117.                         );
  8118.         
  8119.         $stockEntries  $em->getRepository(EntreeDeStock::class)
  8120.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  8121.         $produitVendus  $em->getRepository(ProduitCommande::class)
  8122.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice'$dateDebut$dateFin);
  8123.         if('POST' == $request->getMethod()){
  8124.             $dateDebut $_POST['dateDebut'];
  8125.             $dateFin $_POST['dateFin'];
  8126.             
  8127.             $dateDebut = new \DateTime($dateDebut);
  8128.             $dateFin = new \DateTime($dateFin);
  8129.             
  8130.             $stockEntries  $em->getRepository(EntreeDeStock::class)
  8131.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  8132.             
  8133.             return $this->render('admin/entries_table_content.html.twig', [
  8134.                'boutique' => $boutique,
  8135.                'stockEntries' => $stockEntries,
  8136.                'userBoutique' => $userBoutique
  8137.             ]);
  8138.             
  8139.         }
  8140.         
  8141.         return $this->render('admin/stock_management.html.twig', [
  8142.            'boutique' => $boutique,
  8143.            'produits' => $produits,
  8144.            'userBoutique' => $userBoutique,
  8145.            'dateDebut' => $dateDebut,
  8146.            'dateFin' => $dateFin,
  8147.            'startMonth' => $startMonth,
  8148.            'endMonth' => $endMonth,
  8149.            'startYear' => $startYear,
  8150.            'endYear' => $endYear,
  8151.            'stockEntries' => $stockEntries,
  8152.            'produitVendus' => $produitVendus
  8153.         ]);
  8154.     }
  8155.     
  8156.     /**
  8157.      * @Route("/{slug}/nouvel-inventaire", name="admin_nouvel_inventaire")
  8158.      * @return \Symfony\Component\HttpFoundation\Response
  8159.      */
  8160.     public function nouvelInventaireAction(Request $requestBoutique $boutique)
  8161.     {
  8162.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8163.            return $this->redirectToRoute('security_login');
  8164.         }
  8165.         $em $this->getDoctrine()
  8166.                     ->getManager();
  8167.                     
  8168.         $produits $em->getRepository(Produit::class)
  8169.                         ->findByBoutique($boutique->getId());
  8170.         $user $this->getUser();
  8171.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  8172.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  8173.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  8174.         
  8175.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  8176.         $startMonth $intervalleMois['debut'];
  8177.         $endMonth $intervalleMois['fin'];
  8178.         
  8179.         $startYear date('Y-01-01');
  8180.         $endYear date('Y-12-31');
  8181.         $user $this->getUser();
  8182.         
  8183.         $userBoutique $em->getRepository(UserBoutique::class)
  8184.                         ->findOneBy(
  8185.                             array(
  8186.                             'user' => $user->getId(),
  8187.                             'boutique' => $boutique->getId()
  8188.                             )
  8189.                         );
  8190.         
  8191.         $stockEntries  $em->getRepository(EntreeDeStock::class)
  8192.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  8193.         $produits $em->getRepository(Produit::class)
  8194.                         ->findBy(
  8195.                             array(
  8196.                                 'boutique' => $boutique->getId() 
  8197.                             ),
  8198.                             array(
  8199.                                 'nom' => 'ASC'
  8200.                             )
  8201.                         );
  8202.         if('POST' == $request->getMethod()){
  8203.             $dateDebut $_POST['dateDebut'];
  8204.             $dateFin $_POST['dateFin'];
  8205.             
  8206.             $dateDebut = new \DateTime($dateDebut);
  8207.             $dateFin = new \DateTime($dateFin);
  8208.             
  8209.             $stockEntries  $em->getRepository(EntreeDeStock::class)
  8210.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  8211.             
  8212.             return $this->render('admin/entries_table_content.html.twig', [
  8213.                'boutique' => $boutique,
  8214.                'stockEntries' => $stockEntries
  8215.             ]);
  8216.             
  8217.         }
  8218.         
  8219.         return $this->render('admin/nouvel_inventaire.html.twig', [
  8220.            'boutique' => $boutique,
  8221.            'produits' => $produits,
  8222.            'userBoutique' => $userBoutique,
  8223.            'dateDebut' => $dateDebut,
  8224.            'dateFin' => $dateFin,
  8225.            'startMonth' => $startMonth,
  8226.            'endMonth' => $endMonth,
  8227.            'startYear' => $startYear,
  8228.            'endYear' => $endYear,
  8229.            'stockEntries' => $stockEntries,
  8230.            'produits' => $produits
  8231.         ]);
  8232.     }
  8233.     /**
  8234.      * @Route("/{slug}/payer-entree-de-stock/{id}", name="admin_payer_entree_de_stock")
  8235.      * @return \Symfony\Component\HttpFoundation\Response
  8236.      */
  8237.     public function payerEntreeDeSTockAction(Request $request,  $slug$id)
  8238.     {
  8239.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8240.            return $this->redirectToRoute('security_login');
  8241.         }
  8242.         $em $this->getDoctrine()
  8243.                     ->getManager();
  8244.         $entreeDeStock $em->getRepository(EntreeDeStock::class)
  8245.                                 ->findOneById($id);    
  8246.                                 
  8247.         $boutique $em->getRepository(Boutique::class)
  8248.                                 ->findOneBySlug($slug);    
  8249.         
  8250.                     
  8251.         $user $this->getUser();
  8252.         $userBoutique $em->getRepository(UserBoutique::class)
  8253.                         ->findOneBy(
  8254.                             array(
  8255.                             'user' => $user->getId(),
  8256.                             'boutique' => $boutique->getId()
  8257.                             )
  8258.                         );
  8259.         
  8260.         if($request->getMethod() == 'POST'){
  8261.             
  8262.             $montant = (float)$_POST['montant'];
  8263.             $moyenDePaiement $_POST['moyenDePaiement'];
  8264.             
  8265.             
  8266.             $depense = new Expensive;
  8267.             $depense->setBoutique($boutique);
  8268.             $depense->setMontant($montant);
  8269.             $categorieDepense $em->getRepository(CategorieDepense::class)
  8270.                                 ->findOneBy(
  8271.                                     array(
  8272.                                         'boutique' => $boutique,
  8273.                                         'nom' => 'ACHAT DE MARCHANDISES'
  8274.                                     )
  8275.                                 );
  8276.             
  8277.             $depense->setCategorieDepense($categorieDepense);
  8278.         
  8279.             $em->persist($depense);
  8280.             $entreeDeStock->setResteAPayer($entreeDeStock->getResteAPayer() - $montant);
  8281.             $entreeDeStock->setMontantPaye($entreeDeStock->getMontantPaye() + $montant);
  8282.             $em->flush();
  8283.             
  8284.         }
  8285.     
  8286.         return $this->render('admin/payer_entree_de_stock.html.twig', [
  8287.            'boutique' => $boutique,
  8288.            'userBoutique' => $userBoutique,
  8289.            
  8290.            'entreeDeStock' => $entreeDeStock
  8291.         ]);
  8292.     }
  8293.     /**
  8294.      * @Route("/{slug}/new-stock-entry", name="admin.new_stock_entry")
  8295.      * @return \Symfony\Component\HttpFoundation\Response
  8296.      */
  8297.     public function newStockEntryAction(Request $requestBoutique $boutique)
  8298.     {
  8299.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8300.            return $this->redirectToRoute('security_login');
  8301.         }
  8302.         $em $this->getDoctrine()
  8303.                     ->getManager();
  8304.         $tiers $em->getRepository(Tiers::class)
  8305.                                 ->findByBoutique($boutique);        
  8306.         
  8307.                     
  8308.         $produits $em->getRepository(Produit::class)
  8309.                         ->findByBoutique($boutique->getId());
  8310.         $user $this->getUser();
  8311.         $userBoutique $em->getRepository(UserBoutique::class)
  8312.                         ->findOneBy(
  8313.                             array(
  8314.                             'user' => $user->getId(),
  8315.                             'boutique' => $boutique->getId()
  8316.                             )
  8317.                         );
  8318.         $editMode'new';
  8319.         
  8320.         if($request->getMethod() == 'POST'){
  8321.             
  8322.             $dateCommande $_POST['dateCommande'];
  8323.             $tiers $_POST['tiers'];
  8324.             
  8325.             $tiers $em->getRepository(Tiers::class)
  8326.                         ->findOneById($tiers);
  8327.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  8328.             $autreFrais =  (float)$_POST['autreFrais'];
  8329.             $listeProduits json_decode($_POST['listeProduits']);
  8330.             
  8331.             $entreeDeStock = new EntreeDeStock;
  8332.             $entreeDeStock->setBoutique($boutique);
  8333.         
  8334.             $laDate = new \DateTime($dateCommande);
  8335.             $entreeDeStock->setLaDate($laDate);
  8336.         
  8337.             $em->persist($entreeDeStock);
  8338.             $em->flush();
  8339.             $produitCommandes = array();
  8340.             $sousTotal 0;
  8341.             foreach($listeProduits as $listeProduit){
  8342.                 $listeProduit = (array)$listeProduit;
  8343.                 $idDuProduit $listeProduit['idProduit'];
  8344.                 
  8345.                 $leProduit $em->getRepository(Produit::class)
  8346.                         ->findOneById($idDuProduit);
  8347.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  8348.                 
  8349.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  8350.                 $produitEntreeDeStock->setProduit($leProduit);
  8351.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  8352.                 $produitEntreeDeStock->setQuantite((float)$listeProduit['quantite']);
  8353.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  8354.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  8355.                 
  8356.                 $sousTotal += (float)$listeProduit['sousTotal'];
  8357.                 $em->persist($produitEntreeDeStock);
  8358.             }
  8359.             $entreeDeStock->setTotalAchat($sousTotal);
  8360.             $entreeDeStock->setFraisDeTransport($fraisDeTransport);
  8361.             $entreeDeStock->setAutreFrais($autreFrais);
  8362.             $entreeDeStock->setNetPaye($autreFrais $sousTotal);
  8363.             $entreeDeStock->setResteAPayer($sousTotal $autreFrais);
  8364.             $entreeDeStock->setTiers($tiers);
  8365.             
  8366.             $em->flush();
  8367.             
  8368.         }
  8369.     
  8370.         return $this->render('admin/new_stock_entry.html.twig', [
  8371.            'boutique' => $boutique,
  8372.            'produits' => $produits,
  8373.            'userBoutique' => $userBoutique,
  8374.            'editMode' => $editMode,
  8375.            'tiers' => $tiers
  8376.         ]);
  8377.     }
  8378.     
  8379.     /**
  8380.      * @Route("/{slug}/edit-stock-entry/{id}", name="admin.edit_stock_entry")
  8381.      * @return \Symfony\Component\HttpFoundation\Response
  8382.      */
  8383.     public function editStockEntryAction(Request $request$slug$id)
  8384.     {
  8385.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8386.            return $this->redirectToRoute('security_login');
  8387.         }      
  8388.         $em $this->getDoctrine()
  8389.                     ->getManager();
  8390.         $boutique  $em->getRepository(Boutique::class)
  8391.                         ->findOneBySlug($slug);
  8392.         $tiers $em->getRepository(Tiers::class)
  8393.                     ->findByBoutique($boutique);
  8394.     
  8395.         $produits  $em->getRepository(Produit::class)
  8396.                         ->findByBoutique($boutique->getId());
  8397.     
  8398.         $entreeDeStock  $em->getRepository(EntreeDeStock::class)
  8399.                         ->findOneBy(
  8400.                             array(
  8401.                                 'boutique' => $boutique->getId(),
  8402.                                 'id' => $id
  8403.                         ));
  8404.         
  8405.         $ancienProduitEntreeDeStocks  $em->getRepository(ProduitEntreeDeStock::class)
  8406.                         ->findBy(
  8407.                             array(
  8408.                                 'entreeDeStock' => $entreeDeStock->getId()
  8409.                         ));
  8410.                         
  8411.         $user $this->getUser();
  8412.         $userBoutique $em->getRepository(UserBoutique::class)
  8413.                         ->findOneBy(
  8414.                             array(
  8415.                             'user' => $user->getId(),
  8416.                             'boutique' => $boutique->getId()
  8417.                             )
  8418.                         );
  8419.     
  8420.         $ok_soumission '';
  8421.         $error '';
  8422.         $editMode 'edit';
  8423.         if($request->getMethod() == 'POST'){
  8424.             $dateCommande $_POST['dateCommande'];
  8425.             $listeProduits json_decode($_POST['listeProduits']);
  8426.             
  8427.             $tiers $_POST['tiers'];
  8428.             
  8429.             $tiers $em->getRepository(Tiers::class)
  8430.                         ->findOneById($tiers);
  8431.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  8432.             $autreFrais =  (float)$_POST['autreFrais'];
  8433.             $em->flush();
  8434.             
  8435.             //Supprimer les ancien ProduitCommande lié 
  8436.             foreach($ancienProduitEntreeDeStocks as $ancienProduitEntreeDeStock){
  8437.                 $em->remove($ancienProduitEntreeDeStock);
  8438.                 
  8439.                 $leProduit $em->getRepository(Produit::class)
  8440.                         ->findOneById($ancienProduitEntreeDeStock->getProduit()->getId());
  8441.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() - $ancienProduitEntreeDeStock->getQuantite());
  8442.             }
  8443.             $em->flush();
  8444.             $produitEntreeDeStocks = array();
  8445.             $sousTotal 0;
  8446.             foreach($listeProduits as $listeProduit){
  8447.                 $listeProduit = (array)$listeProduit;
  8448.                 $idDuProduit $listeProduit['idProduit'];
  8449.                 
  8450.                 $leProduit $em->getRepository(Produit::class)
  8451.                         ->findOneById($idDuProduit);
  8452.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  8453.         
  8454.                 
  8455.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  8456.                 $produitEntreeDeStock->setProduit($leProduit);
  8457.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  8458.                 $produitEntreeDeStock->setQuantite($listeProduit['quantite']);
  8459.                 
  8460.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  8461.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  8462.                 
  8463.                 $sousTotal += (float)$listeProduit['sousTotal'];
  8464.                 $em->persist($produitEntreeDeStock);
  8465.             }
  8466.             
  8467.             $entreeDeStock->setTotalAchat($sousTotal);
  8468.             $entreeDeStock->setFraisDeTransport($fraisDeTransport);
  8469.             $entreeDeStock->setAutreFrais($autreFrais);
  8470.             $entreeDeStock->setNetPaye($autreFrais $sousTotal);
  8471.             $entreeDeStock->setResteAPayer($sousTotal $autreFrais);
  8472.             $entreeDeStock->setTiers($tiers);
  8473.             $em->flush();
  8474.         }
  8475.     
  8476.         return $this->render('admin/edit_stock_entry.html.twig', [
  8477.            'boutique' => $boutique,
  8478.            'produits' => $produits,
  8479.            'editMode' => $editMode,
  8480.            'entreeDeStock' => $entreeDeStock,
  8481.            'ancienProduitEntreeDeStocks' => $ancienProduitEntreeDeStocks,
  8482.            'userBoutique' => $userBoutique,
  8483.            'tiers' => $tiers
  8484.         ]);
  8485.     }
  8486.     
  8487.     
  8488.     /**
  8489.      * @Route("/{slug}/delete-stock-entry/{id}", name="admin.delete_stock_entry")
  8490.      * @return \Symfony\Component\HttpFoundation\Response
  8491.      */
  8492.     public function deleteStockEntryAction(Request $request,  $slug$id)
  8493.     {
  8494.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8495.            return $this->redirectToRoute('security_login');
  8496.         }  
  8497.         $em $this->getDoctrine()
  8498.                     ->getManager();
  8499.         
  8500.         $boutique  $em->getRepository(Boutique::class)
  8501.                         ->findOneBySlug($slug);
  8502.         
  8503.         $user $this->getUser();
  8504.         $userBoutique $em->getRepository(UserBoutique::class)
  8505.                         ->findOneBy(
  8506.                             array(
  8507.                             'user' => $user->getId(),
  8508.                             'boutique' => $boutique->getId()
  8509.                             )
  8510.                         );
  8511.         $entreeDeStock  $em->getRepository(EntreeDeStock::class)
  8512.                         ->findOneBy(
  8513.                             array(
  8514.                                 'boutique' => $boutique->getId(),
  8515.                                 'id' => $id
  8516.                             )
  8517.                         );
  8518.         
  8519.         if(null != $entreeDeStock){
  8520.             $produitEntreeDeStocks $em->getRepository(ProduitEntreeDeStock::class)
  8521.                                         ->findBy(
  8522.                                             array(
  8523.                                                 'entreeDeStock' => $entreeDeStock->getId()
  8524.                                             )
  8525.                                         );
  8526.             foreach($produitEntreeDeStocks as $produitEntreeDeStock){
  8527.                 $em->remove($produitEntreeDeStock);
  8528.                 $produit $em->getRepository(Produit::class)
  8529.                                 ->findOneById($produitEntreeDeStock->getProduit()->getId());
  8530.                 $produit->setStockDisponible($produit->getStockDisponible() - $produitEntreeDeStock->getQuantite());
  8531.             }
  8532.             $em->flush();
  8533.             
  8534.             $em->remove($entreeDeStock);
  8535.             $em->flush();
  8536.         }
  8537.         return $this->redirectToRoute('admin.stock_management', array('slug' => $boutique->getSlug()));
  8538.     }
  8539.     /**
  8540.      * @Route("/{slug}/produits-vendus", name="admin_produits_vendus")
  8541.      * @return \Symfony\Component\HttpFoundation\Response
  8542.      */
  8543.     public function produitsVendusActionRequest $requestBoutique $boutique)
  8544.     {
  8545.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8546.            return $this->redirectToRoute('security_login');
  8547.         }
  8548.         
  8549.         $em $this->getDoctrine()
  8550.                     ->getManager();
  8551.         
  8552.         $userBoutique $em->getRepository(UserBoutique::class)
  8553.                         ->findOneBy(
  8554.                             array(
  8555.                             'user' => $this->getUser()->getId(),
  8556.                             'boutique' => $boutique->getId()
  8557.                             )
  8558.                         );
  8559.         
  8560.         if('POST' == $request->getMethod()){
  8561.             $dateDebut $_POST['dateDebut'];
  8562.             $dateFin $_POST['dateFin'];
  8563.             
  8564.             $dateDebut = new \DateTime($dateDebut);
  8565.             $dateDebut->setTime(00);
  8566.             $dateFin = new \DateTime($dateFin);
  8567.             $dateFin->setTime(2359);
  8568.             
  8569.             $produitsVendus  $em->getRepository(ProduitCommande::class)
  8570.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice'$dateDebut$dateFin);
  8571.             
  8572.             
  8573.             return $this->render('admin/produits_vendus.html.twig', [
  8574.                'boutique' => $boutique,
  8575.                'produitsVendus' => $produitsVendus
  8576.             ]);
  8577.             
  8578.         }
  8579.         
  8580.         return $this->render('admin/sortie_de_stock.html.twig', [
  8581.            'boutique' => $boutique,
  8582.            'dateDebut' => $dateDebut,
  8583.            'dateFin' => $dateFin,
  8584.            'userBoutique' => $userBoutique,
  8585.            'typeFacture' => $typeFacture
  8586.         ]);
  8587.     }
  8588.     
  8589.     /**
  8590.      * @Route("/{slug}/import-products", name="admin.import_products")
  8591.      * @return \Symfony\Component\HttpFoundation\Response
  8592.      */
  8593.     public function importProductsAction(Request $requestBoutique $boutique)
  8594.     {
  8595.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8596.            return $this->redirectToRoute('security_login');
  8597.         }
  8598.         $em $this->getDoctrine()
  8599.                     ->getManager();
  8600.                     
  8601.         $user $this->getUser();
  8602.         
  8603.         $userBoutique $em->getRepository(UserBoutique::class)
  8604.                         ->findOneBy(
  8605.                             array(
  8606.                             'user' => $user->getId(),
  8607.                             'boutique' => $boutique->getId()
  8608.                             )
  8609.                         );
  8610.         
  8611.         $error '';
  8612.         $success '';
  8613.         if('POST' == $request->getMethod()){
  8614.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  8615.             {
  8616.                 
  8617.             
  8618.                 $em->flush();
  8619.                 if ($this->gererFichierMultipleImportation($_FILES['fichier'], $boutique)){
  8620.                     $success 'success';
  8621.                 } else{
  8622.                     $error 'error';
  8623.                 }
  8624.                 
  8625.             }
  8626.         }
  8627.         
  8628.         return $this->render('admin/import_products.html.twig', [
  8629.            'boutique' => $boutique,
  8630.            'userBoutique' => $userBoutique,
  8631.            'error' => $error,
  8632.            'success' => $success
  8633.         ]);
  8634.     }
  8635.     
  8636.     /**
  8637.      * @Route("/{slug}/import-customers", name="admin.import_customers")
  8638.      * @return \Symfony\Component\HttpFoundation\Response
  8639.      */
  8640.     public function importCustomersAction(Request $requestBoutique $boutique)
  8641.     {
  8642.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8643.            return $this->redirectToRoute('security_login');
  8644.         }
  8645.         $em $this->getDoctrine()
  8646.                     ->getManager();
  8647.                     
  8648.         $user $this->getUser();
  8649.         
  8650.         $userBoutique $em->getRepository(UserBoutique::class)
  8651.                         ->findOneBy(
  8652.                             array(
  8653.                             'user' => $user->getId(),
  8654.                             'boutique' => $boutique->getId()
  8655.                             )
  8656.                         );
  8657.         
  8658.         $error '';
  8659.         $success '';
  8660.         if('POST' == $request->getMethod()){
  8661.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  8662.             {
  8663.                 
  8664.             
  8665.                 $em->flush();
  8666.                 if ($this->gererFichierMultipleCustomerImportation($_FILES['fichier'], $boutique)){
  8667.                     $success 'success';
  8668.                 } else{
  8669.                     $error 'error';
  8670.                 }
  8671.                 
  8672.             }
  8673.         }
  8674.         
  8675.         return $this->render('admin/import_customers.html.twig', [
  8676.            'boutique' => $boutique,
  8677.            'userBoutique' => $userBoutique,
  8678.            'error' => $error,
  8679.            'success' => $success
  8680.         ]);
  8681.     }
  8682.     
  8683.     /**
  8684.      * @Route("/{slug}/ajout-utilisateur-employe", name="admin_ajout_utilisateur_employe")
  8685.      * @return \Symfony\Component\HttpFoundation\Response
  8686.      */
  8687.     public function ajoutUtilisateurEmployeAction(Request $requestBoutique $boutique)
  8688.     {
  8689.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8690.            return $this->redirectToRoute('security_login');
  8691.         }
  8692.         $em $this->getDoctrine()
  8693.                     ->getManager();
  8694.                     
  8695.         $droits DroitUtilisateur::getDroits();
  8696.         $userBoutiques $em->getRepository(UserBoutique::class)
  8697.                         ->findBy(
  8698.                             array(
  8699.                                 'boutique' => $boutique->getId(),
  8700.                                 'estParti' => false
  8701.                             )    
  8702.                         );
  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.         return $this->render('admin/ajout_utilisateur_employe.html.twig', [
  8713.            'boutique' => $boutique,
  8714.            'userBoutiques' => $userBoutiques,
  8715.            'userBoutique' => $userBoutique,
  8716.            'droits' => $droits
  8717.            
  8718.         ]);
  8719.     }
  8720.     /**
  8721.      * @Route("/{slug}/users", name="admin.users")
  8722.      * @return \Symfony\Component\HttpFoundation\Response
  8723.      */
  8724.     public function usersAction(Request $requestBoutique $boutique)
  8725.     {
  8726.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8727.            return $this->redirectToRoute('security_login');
  8728.         }
  8729.         $em $this->getDoctrine()
  8730.                     ->getManager();
  8731.                     
  8732.         $userBoutiques $em->getRepository(UserBoutique::class)
  8733.                         ->findByBoutique($boutique->getId());
  8734.         $user $this->getUser();
  8735.         $userBoutique $em->getRepository(UserBoutique::class)
  8736.                         ->findOneBy(
  8737.                             array(
  8738.                             'user' => $user->getId(),
  8739.                             'boutique' => $boutique->getId()
  8740.                             )
  8741.                         );
  8742.         
  8743.         return $this->render('admin/users.html.twig', [
  8744.            'boutique' => $boutique,
  8745.            'userBoutiques' => $userBoutiques,
  8746.            'userBoutique' => $userBoutique,
  8747.            
  8748.         ]);
  8749.     }
  8750.     
  8751.     /**
  8752.      * @Route("/{slug}/add-user", name="admin.add_user")
  8753.      * @return \Symfony\Component\HttpFoundation\Response
  8754.      */
  8755.     public function addUserAction(Request $request, \Swift_Mailer $mailerBoutique $boutique)
  8756.     {
  8757.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8758.            return $this->redirectToRoute('security_login');
  8759.         }
  8760.         $em $this->getDoctrine()
  8761.                     ->getManager();
  8762.                     
  8763.         $userBoutiques $em->getRepository(UserBoutique::class)
  8764.                         ->findByBoutique($boutique->getId());
  8765.         $user $this->getUser();
  8766.         $userBoutique $em->getRepository(UserBoutique::class)
  8767.                         ->findOneBy(
  8768.                             array(
  8769.                             'user' => $user->getId(),
  8770.                             'boutique' => $boutique->getId()
  8771.                             )
  8772.                         );
  8773.         $appName $this->getParameter('app_name');
  8774.         
  8775.     
  8776.         if('POST' == $request->getMethod()){
  8777.             $email $_POST['email'];
  8778.             $role $_POST['role'];
  8779.             
  8780.             $requeteAjoutBoutique  = new RequeteAjoutBoutique;
  8781.             
  8782.             $requeteAjoutBoutique->setRole($role);
  8783.             $requeteAjoutBoutique->setEmail($email);
  8784.             $requeteAjoutBoutique->setBoutique($boutique);
  8785.             
  8786.             $em->persist($requeteAjoutBoutique);
  8787.             $em->flush();
  8788.             
  8789.             //Envoi de mail
  8790.             $message = (new \Swift_Message('Welcome to '.$appName))
  8791.             ->setFrom(['no-reply-myinvoice@assiemail.com'  => $appName])
  8792.             ->setTo([$email])
  8793.             ->setBody(
  8794.                 $this->renderView(
  8795.                 'admin/requete_ajout_boutique_email.html.twig',
  8796.                 [
  8797.                     'appName' => $appName,
  8798.                     'role' => $role,
  8799.                     'boutique' => $boutique
  8800.                 ]
  8801.                 ),
  8802.             'text/html'
  8803.             );
  8804.             
  8805.             //$mailer->send($message);
  8806.         }
  8807.         
  8808.         return $this->render('admin/users.html.twig', [
  8809.            'boutique' => $boutique,
  8810.            'userBoutiques' => $userBoutiques,
  8811.            'userBoutique' => $userBoutique
  8812.         ]);
  8813.     }
  8814.     /**
  8815.      * @Route("/{slug}/paiement-bio", name="admin_paiement_bio")
  8816.      * @return \Symfony\Component\HttpFoundation\Response
  8817.      */
  8818.     public function refairePaiementBionAction(Request $requestBoutique $boutique)
  8819.     {
  8820.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8821.            return $this->redirectToRoute('security_login');
  8822.         }
  8823.         $em $this->getDoctrine()
  8824.                     ->getManager();
  8825.         $user $this->getUser();
  8826.         $userBoutique $em->getRepository(UserBoutique::class)
  8827.                         ->findOneBy(
  8828.                             array(
  8829.                             'user' => $user->getId(),
  8830.                             'boutique' => $boutique->getId()
  8831.                             )
  8832.                         );
  8833.         $laBoutique $em->getRepository(Boutique::class)
  8834.                         ->findOneById(49);
  8835.         
  8836.         $versements $em->getRepository(Payment::class)
  8837.                         ->findByBoutique($laBoutique);
  8838.         foreach($versements as $versement){
  8839.             $em->remove($versement);
  8840.         }
  8841.         $commandes $em->getRepository(Commande::class)
  8842.                         ->findByBoutique($laBoutique);
  8843.         foreach($commandes as $commande){
  8844.             $commande->setMontantPaye(0);
  8845.             $commande->setResteAPayer($commande->getTotalTTC());
  8846.             
  8847.         }
  8848.         $em->flush();
  8849.     return $this->render('admin/refaire_versement.html.twig', [
  8850.            'boutique' => $boutique,
  8851.            'userBoutique' => $userBoutique
  8852.         ]);
  8853.     }
  8854.     /**
  8855.      * @Route("/{slug}/mon-compte", name="admin_mon_compte")
  8856.      * @return \Symfony\Component\HttpFoundation\Response
  8857.      */
  8858.     public function monCompteAction(Request $requestBoutique $boutique)
  8859.     {
  8860.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8861.            return $this->redirectToRoute('security_login');
  8862.         }
  8863.         $em $this->getDoctrine()
  8864.                     ->getManager();
  8865.     return $this->render('admin/mon_compte.html.twig', [
  8866.            'boutique' => $boutique,
  8867.            'userBoutiques' => $userBoutiques,
  8868.            'userBoutique' => $userBoutique
  8869.         ]);
  8870.     }
  8871.     /**
  8872.      * @Route("/{slug}/mot-de-passe", name="admin_mot_de_passe")
  8873.      * @return \Symfony\Component\HttpFoundation\Response
  8874.      */
  8875.     public function motDePasseAction(Request $requestUserPasswordHasherInterface $passwordHasherBoutique $boutique)
  8876.     {
  8877.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8878.            return $this->redirectToRoute('security_login');
  8879.         }
  8880.         $em $this->getDoctrine()
  8881.                     ->getManager();
  8882.         
  8883.         $user $this->getUser();
  8884.         $error '';
  8885.         $ok_submission '';
  8886.         $error_submission '';
  8887.         $actuel $user->getPassword();
  8888.         $hashed '';
  8889.         if('POST' == $request->getMethod())
  8890.         {
  8891.             $motDePasseActuel $request->request->get('motDePasseActuel');
  8892.             $nouveauMotDePasse $request->request->get('nouveauMotDePasse');
  8893.             
  8894.             $repeterMotDePasse $request->request->get('repeterMotDePasse'); 
  8895.             //$user->setPassword('');
  8896.             //$hashed = $passwordHasher->hashPassword($user, $motDePasseActuel);
  8897.             //if(  $hashed == $user->getPassword()){
  8898.                 $user->setPassword('');
  8899.                 $hashedPassword $passwordHasher->hashPassword($user$nouveauMotDePasse);
  8900.                 $user->setPassword($hashedPassword);
  8901.                 $ok_submission 'Mot de passe changé';
  8902.             //}else{
  8903.             //    $error_submission = 'Ancien mot de passe incorrect';
  8904.             //}
  8905.             //Effacer l'ancien mot de passe
  8906.             
  8907.             
  8908.             $em->flush();
  8909.         }
  8910.         $userBoutique $em->getRepository(UserBoutique::class)
  8911.                             ->findOneBy(
  8912.                                 array(
  8913.                                     'user' => $user,
  8914.                                     'boutique' => $boutique
  8915.                                 )
  8916.                             );
  8917.     return $this->render('admin/mot_de_passe.html.twig', [
  8918.            'boutique' => $boutique,
  8919.            'userBoutique' => $userBoutique,
  8920.            'ok_submission' => $ok_submission,
  8921.            'error_submission' => $error_submission,
  8922.            'hashed' => $hashed,
  8923.            'actuel' => $actuel
  8924.         ]);
  8925.     }
  8926.     
  8927.     
  8928.     
  8929.     public function getDomain()
  8930.     {
  8931.         $domaine $_SERVER['HTTP_HOST'];
  8932.         $protocol '';
  8933.         if($domaine == 'localhost' || $domaine == '127.0.0.1'){
  8934.             $domaine $domaine.'/myinvoice-def/public';
  8935.         }
  8936.         if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  8937.             $protocol 'https://';
  8938.         } else{
  8939.             $protocol 'http://';
  8940.         }
  8941.         
  8942.         return $protocol.$domaine;
  8943.     }
  8944.     
  8945.     public function getNumero($type$boutique)
  8946.     {
  8947.         $numero '';
  8948.         $em $this->getDoctrine()
  8949.                     ->getManager();
  8950.         $nombre 0;
  8951.         if($type == 'deposit'){
  8952.             $nombre $em->getRepository(FactureAcompte::class)
  8953.                     ->getNumero($type$boutique->getId());
  8954.         } else{
  8955.             $nombre $em->getRepository(Commande::class)
  8956.                     ->getNumero($type$boutique->getId());
  8957.         
  8958.         }
  8959.         if(empty($nombre)){
  8960.             $nombre ;
  8961.         } else {
  8962.             $nombre = (int)$nombre[0]['nombre'];
  8963.             $nombre++;
  8964.         }
  8965.         
  8966.         
  8967.         
  8968.         switch($type){
  8969.             case 'invoice':
  8970.                 $numero .= $boutique->getSettings()->getLettreDebutFacture();
  8971.             break;
  8972.             
  8973.             case 'deposit':
  8974.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAcompte();
  8975.             break;
  8976.             case 'bill_credit':
  8977.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAvoir();
  8978.             break;
  8979.             
  8980.             case 'proposal':
  8981.                 $numero .= $boutique->getSettings()->getLettreDebutDevis();
  8982.             break;
  8983.         }
  8984.         
  8985.         if($boutique->getSettings()->getIncluAnnee()){
  8986.             $numero .= date('y');
  8987.         }
  8988.         
  8989.         $nombreDeZeroAAjouter strlen((string)$nombre);
  8990.         
  8991.         $nombreDeZeroAAjouter =  $boutique->getSettings()->getNombreDeChiffre() - $nombreDeZeroAAjouter;
  8992.         
  8993.         for($i 0$i $nombreDeZeroAAjouter$i++){
  8994.             $numero .= '0';
  8995.         }
  8996.         
  8997.         $numero .= $nombre;
  8998.         
  8999.         return $numero;
  9000.         
  9001.     }
  9002.     
  9003.     function intervalleMois($datestr)
  9004.     {
  9005.        date_default_timezone_set (date_default_timezone_get());
  9006.         $dt strtotime ($datestr);
  9007.        return array (
  9008.          "debut" => date ('Y-m-d'strtotime ('first day of this month'$dt)),
  9009.          "fin" => date ('Y-m-d'strtotime ('last day of this month'$dt))
  9010.        );
  9011.     }
  9012.     function intervalleSemaine($datestr) {
  9013.        date_default_timezone_set (date_default_timezone_get());
  9014.        $dt strtotime ($datestr);
  9015.        return array (
  9016.          "debut" => date ('N'$dt) == date ('Y-m-d'$dt) : date ('Y-m-d'strtotime ('last monday'$dt)),
  9017.          "fin" => date('N'$dt) == date ('Y-m-d'$dt) : date ('Y-m-d'strtotime ('next sunday'$dt))
  9018.        );
  9019.     }
  9020.     
  9021.     public function gererFichierMultipleImportation($data$boutique)
  9022.     {        
  9023.             $leRetour false;
  9024.             $em $this->getDoctrine()->getManager();
  9025.             
  9026.             $ex pathinfo($data['name'])['extension'];
  9027.             $exA = array('csv');
  9028.             
  9029.             if (in_array(strtolower($ex), $exA)){
  9030.             } else{
  9031.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  9032.             }
  9033.             
  9034.             $name time();
  9035.             $namePourRepertoire $name;
  9036.             //hydratation des attributs de l'objet
  9037.             $domaine $_SERVER['HTTP_HOST'];
  9038.             $protocol '';
  9039.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  9040.                 $protocol 'https://';
  9041.             } else{
  9042.                 $protocol 'http://';
  9043.             }
  9044.             
  9045.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  9046.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  9047.             $url $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  9048.             
  9049.             //deplacement (création de l'image original)
  9050.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  9051.             
  9052.             
  9053.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777true))
  9054.             {
  9055.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  9056.             }
  9057.             
  9058.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  9059.             {
  9060.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  9061.             }
  9062.             
  9063.             $fileToHandle fopen($url'r');
  9064.             $row 1;
  9065.             while (($data fgetcsv($fileToHandle10000",")) !== false) {
  9066.                 $num count($data);
  9067.                 //echo "<p> $num champs à la ligne $row: <br /></p>\n";
  9068.                 $row++;
  9069.                 $categorie $data[0];
  9070.                 $categorieProduit $em->getRepository(CategorieProduit::class)
  9071.                                 ->findOneByNom($categorie);
  9072.                 if(null == $categorieProduit){
  9073.                     $categorieProduit = new CategorieProduit;
  9074.                     $categorieProduit->setNom($categorie);
  9075.                     $em->persist($categorieProduit);
  9076.                     $em->flush();
  9077.                 }
  9078.                 
  9079.                 $ref             $data[1];
  9080.                 $nomProd         $data[2];
  9081.                 $prix            $data[3];
  9082.                 $stockDisponible $data[4];
  9083.                 $stockDAlerte    $data[5];
  9084.                 $stockDeSecurite $data[6];
  9085.                 $stockMinimum    $data[7];
  9086.                 $stockMaximum    $data[8];
  9087.                 $stockOutil      $data[9];
  9088.                 $coutDeStockage  $data[10];
  9089.                 
  9090.                 $produit $em->getRepository(Produit::class)
  9091.                                 ->findOneBy(
  9092.                                     array(
  9093.                                         'reference' => $ref,
  9094.                                         'nom' => $nomProd
  9095.                                     )
  9096.                                 );
  9097.                 if(null == $produit){
  9098.                     $produit = new Produit;
  9099.                     $produit->setCategorieProduit($categorieProduit);
  9100.                     $produit->setReference($ref);
  9101.                     $produit->setNom($nomProd);
  9102.                     
  9103.                     $prixActuel = new PrixProduit;
  9104.                     $prixActuel->setValeur($prix);
  9105.                     $produit->addPrix($prixActuel);
  9106.                     $produit->setPrixActuel($prixActuel);
  9107.                     $produit->setStockDisponible($stockDisponible);
  9108.                     $produit->setStockDAlerte($stockDAlerte);
  9109.                     $produit->setStockDeSecurite($stockDeSecurite);
  9110.                     $produit->setStockMinimum($stockMinimum);
  9111.                     $produit->setStockMaximum($stockMaximum);
  9112.                     $produit->setStockOutil($stockOutil);
  9113.                     $produit->setCoutDeStockage($coutDeStockage);
  9114.                     
  9115.                     $produit->setBoutique($boutique);
  9116.                     $em->persist($produit);
  9117.                     $em->flush();
  9118.                 }
  9119.                 
  9120.                 
  9121.             }
  9122.             $leRetour true;
  9123.             fclose($fileToHandle);
  9124.             
  9125.             //$this->getDoctrine()->getManager()->flush();
  9126.             
  9127.         return $leRetour;
  9128.     }
  9129.     public function gererFichierMultiple($anyObject$data$fichierUnique false)
  9130.     {
  9131.         $nbFichier 0
  9132.         
  9133.         if($fichierUnique){
  9134.             $photo = new Photo;
  9135.                 $photo->setFile($data);
  9136.                 
  9137.                 
  9138.                 
  9139.                 $ex pathinfo($data['name'])['extension'];
  9140.                 $exA = array('jpg''jpeg''png''gif');
  9141.                 
  9142.                 if (in_array(strtolower($ex), $exA)){
  9143.                 
  9144.                     $photo->setExtension($ex);
  9145.                 } else {
  9146.                     throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  9147.                 }
  9148.                 
  9149.                 $name $anyObject->getId().time();
  9150.                 $namePourRepertoire $name;
  9151.                 //hydratation des attributs de l'objet
  9152.                 $photo->setUrl($name.'.'.$photo->getExtension());
  9153.                 $photo->setAlt('Image de ');
  9154.                 $extension $photo->getExtension();
  9155.                 //deplacement (création de l'image original)
  9156.                 //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  9157.                 
  9158.                 
  9159.                 if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  9160.                 {
  9161.                     throw new \RuntimeException('Impossible de créer le dossier de destination');
  9162.                 }
  9163.                 
  9164.                 if (!move_uploaded_file($data['tmp_name'], $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension()))
  9165.                 {
  9166.                     throw new \RuntimeException('Désolé, une erreur s\'est producte.');
  9167.                 }
  9168.                 try{
  9169.                     $name $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension();
  9170.                         $nvlleImgMenu = ( $ex =='jpg' || $ex == 'jpeg') ? imagecreatefromjpeg($name) : imagecreatefrompng($name);
  9171.                         
  9172.                         $miniatureMenu imagecreatetruecolor(600600);
  9173.                         
  9174.                         $largeurNvlleImgMenu imagesx($nvlleImgMenu);
  9175.                         $hauteurNvlleImgMenu imagesy($nvlleImgMenu);
  9176.                         $largeurMiniatureMenu imagesx($miniatureMenu);
  9177.                         $hauteurMiniatureMenu imagesy($miniatureMenu);
  9178.                         
  9179.                         //fusion et generation des miniatures
  9180.                         
  9181.                         imagecopyresampled($miniatureMenu$nvlleImgMenu0000$largeurMiniatureMenu$hauteurMiniatureMenu,
  9182.                                    $largeurNvlleImgMenu$hauteurNvlleImgMenu);
  9183.                         
  9184.                         //deplacer les nouvelles images(miniatures) dans les repertoires correspondants
  9185.                         
  9186.                         if(!is_dir($photo->getUploadRootDir().'/featured/') && !mkdir($photo->getUploadRootDir().'/featured/'0777true)){
  9187.                             throw \RuntimeException('Impossible de créer le dossier de destination');
  9188.                         }
  9189.                         $name $photo->getUploadRootDir().'/featured/'.$photo->getUrl();
  9190.                         if($extension == 'jpg' || $extension == 'jpeg'){
  9191.                             imagejpeg($miniatureMenu$name95);
  9192.                         } else{
  9193.                             imagepng($miniatureMenu$name9);
  9194.                         }
  9195.                         $host $_SERVER['HTTP_HOST'];
  9196.                         if($host == '127.0.0.1'){
  9197.                             $host .= '/myinvoice-def/public';
  9198.                         }
  9199.                         $fromSecure 'http://';
  9200.                         if( isset($_SERVER['HTTPS'] ) ){
  9201.                             $fromSecure 'https://';
  9202.                         }
  9203.                         $photo->setUrl($fromSecure.$host.'/'.$photo->getUploadDir().'/featured/'.$photo->getUrl());
  9204.                     
  9205.                         //
  9206.                     } catch(Exception $e){
  9207.                     }
  9208.                 $this->getDoctrine()->getManager()->persist($photo);
  9209.                 $this->getDoctrine()->getManager()->flush();
  9210.                 $anyObject->setPhoto($photo);
  9211.         }else{
  9212.             $tableauFichier $this->reArrayFiles($data);
  9213.             //var_dump($tableauFichier);
  9214.             $i 0;
  9215.             foreach ($tableauFichier as $file)
  9216.             {
  9217.                 $i++;
  9218.             //print 'File Name: ' . $file['name'];
  9219.             //print 'File Type: ' . $file['type'];
  9220.             //print 'File Size: ' . $file['size'];
  9221.         
  9222.             
  9223.                 $photo = new VisitePhoto;
  9224.                 $photo->setFile($file);
  9225.                 
  9226.                 
  9227.                 
  9228.                 $ex pathinfo($file['name'])['extension'];
  9229.                 $exA = array('jpg''jpeg''png''gif''webp''svg');
  9230.                 
  9231.                 if (in_array(strtolower($ex), $exA)){
  9232.                 
  9233.                     $photo->setExtension($ex);
  9234.                 } else {
  9235.                     throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  9236.                 }
  9237.                 
  9238.                 $name $anyObject->getId().$i.time();
  9239.                 $namePourRepertoire $name;
  9240.                 //hydratation des attributs de l'objet
  9241.                 $photo->setUrl($name.'.'.$photo->getExtension());
  9242.                 $photo->setAlt('Image de '.$anyObject->getNom());
  9243.                 $fromSecure 'http://';
  9244.                         if( isset($_SERVER['HTTPS'] ) ){
  9245.                             $fromSecure 'https://';
  9246.                         }
  9247.                 $host $_SERVER['HTTP_HOST'];
  9248.                 
  9249.                 if($host == '127.0.0.1'){
  9250.                     $host .= '/myinvoice-def/public';
  9251.                 }
  9252.                 $photo->setUrl($fromSecure.$host.'/'.$photo->getUploadDir().'/original/'.$photo->getUrl());
  9253.                     
  9254.                 //deplacement (création de l'image original)
  9255.                 //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  9256.                 
  9257.                 $anyObject->addPhoto($photo);
  9258.                 if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  9259.                 {
  9260.                     throw new \RuntimeException('Impossible de créer le dossier de destination');
  9261.                 }
  9262.                 
  9263.                 if (!move_uploaded_file($file['tmp_name'], $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension()))
  9264.                 {
  9265.                     throw new \RuntimeException('Désolé, une erreur s\'est producte.');
  9266.                 }
  9267.                 $this->getDoctrine()->getManager()->persist($photo);
  9268.             }
  9269.         }
  9270.         $this->getDoctrine()->getManager()->flush();
  9271.         
  9272.     }
  9273.     public function reArrayFiles($file_post)
  9274.     {
  9275.         $file_ary = array();
  9276.         $file_count count($file_post['name']);
  9277.         $file_keys array_keys($file_post);
  9278.         for ($i=0$i<$file_count$i++)
  9279.         {
  9280.             foreach ($file_keys as $key)
  9281.             {
  9282.                 $file_ary[$i][$key] = $file_post[$key][$i];
  9283.             }
  9284.         }
  9285.         return $file_ary;
  9286.     }
  9287.     
  9288.     public function gererFichierMultipleCustomerImportation($data$boutique)
  9289.     {        
  9290.             $leRetour false;
  9291.             $em $this->getDoctrine()->getManager();
  9292.             
  9293.             $ex pathinfo($data['name'])['extension'];
  9294.             $exA = array('csv');
  9295.             
  9296.             if (in_array(strtolower($ex), $exA)){
  9297.             } else{
  9298.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  9299.             }
  9300.             
  9301.             $name time();
  9302.             $namePourRepertoire $name;
  9303.             //hydratation des attributs de l'objet
  9304.             $domaine $_SERVER['HTTP_HOST'];
  9305.             $protocol '';
  9306.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  9307.                 $protocol 'https://';
  9308.             } else{
  9309.                 $protocol 'http://';
  9310.             }
  9311.             
  9312.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  9313.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  9314.             $url $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  9315.             
  9316.             //deplacement (création de l'image original)
  9317.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  9318.             
  9319.             
  9320.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777true))
  9321.             {
  9322.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  9323.             }
  9324.             
  9325.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  9326.             {
  9327.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  9328.             }
  9329.             
  9330.             $fileToHandle fopen($url'r');
  9331.             $row 1;
  9332.             while (($data fgetcsv($fileToHandle10000",")) !== false) {
  9333.                 $num count($data);
  9334.                 $row++;
  9335.                 
  9336.                 $nomClient    $data[0];
  9337.                 $adresse      $data[1];
  9338.                 $codePostal   $data[2];
  9339.                 $nomPays      $data[3];
  9340.                 $ville        $data[4];
  9341.                 $email        $data[5];
  9342.                 $telephone    $data[6];
  9343.                 $soumisALaTVA $data[7];
  9344.                 $codeTVA      $data[8];
  9345.                 
  9346.                 $tier $em->getRepository(Tiers::class)
  9347.                                 ->findOneBy(
  9348.                                     array(
  9349.                                     'boutique' => $boutique->getId(),
  9350.                                     'nom' => $nomClient
  9351.                                     )
  9352.                                 );
  9353.                 if(null == $tier){
  9354.                     $tier = new Tiers;
  9355.                     $tier->setNom($nomClient);
  9356.                     $tier->setAdresse($adresse);
  9357.                     $tier->setCodePostal($codePostal);
  9358.                     $tier->setEmail($email);
  9359.                     $tier->setTelephone($telephone);
  9360.                     $tier->setVille($ville);
  9361.                     $tier->setAssujettiALaTVA($soumisALaTVA);
  9362.                     $tier->setCodeTVA($codeTVA);
  9363.                     
  9364.                     $pays $em->getRepository(Pays::class)
  9365.                                 ->findOneBy(
  9366.                                     array(
  9367.                                     'nom' => $nomPays
  9368.                                     )
  9369.                                 );
  9370.                     if (null == $pays){
  9371.                         $pays $em->getRepository(Pays::class)
  9372.                                 ->findOneBy(
  9373.                                     array(
  9374.                                     'nomFr' => $nomPays
  9375.                                     )
  9376.                                 );
  9377.                         if(null == $pays){
  9378.                             $pays = new Pays;
  9379.                             $pays->setNom($nomPays);
  9380.                             $em->persist($pays);
  9381.                             $em->flush();
  9382.                         }
  9383.                     }
  9384.                     
  9385.                     $tier->setPays($pays);
  9386.                     $tier->setBoutique($boutique);
  9387.                     $em->persist($tier);
  9388.                     $em->flush();
  9389.                 }    
  9390.             }
  9391.             $leRetour true;
  9392.             fclose($fileToHandle);
  9393.             
  9394.             //$this->getDoctrine()->getManager()->flush();
  9395.             
  9396.         return $leRetour;
  9397.     }
  9398.     public function getMois()
  9399.     {
  9400.         $mois = array(
  9401.             array(
  9402.                 'index' => 1,
  9403.                 'nom' => 'Janvier'
  9404.             ),
  9405.             array(
  9406.                 'index' => 2,
  9407.                 'nom' => 'Février'
  9408.             ),
  9409.             array(
  9410.                 'index' => 3,
  9411.                 'nom' => 'Mars'
  9412.             ),
  9413.             array(
  9414.                 'index' => 4,
  9415.                 'nom' => 'Avril'
  9416.             ),
  9417.             array(
  9418.                 'index' => 5,
  9419.                 'nom' => 'Mai'
  9420.             ),
  9421.             array(
  9422.                 'index' => 6,
  9423.                 'nom' => 'Juin'
  9424.             ),
  9425.             array(
  9426.                 'index' => 7,
  9427.                 'nom' => 'Juillet'
  9428.             ),
  9429.             array(
  9430.                 'index' => 8,
  9431.                 'nom' => 'Août'
  9432.             ),
  9433.             array(
  9434.                 'index' => 9,
  9435.                 'nom' => 'Septembre'
  9436.             ),
  9437.             array(
  9438.                 'index' => 10,
  9439.                 'nom' => 'Octobre'
  9440.             ),
  9441.             array(
  9442.                 'index' => 11,
  9443.                 'nom' => 'Novembre'
  9444.             ),
  9445.             array(
  9446.                 'index' => 12,
  9447.                 'nom' => 'Décembre'
  9448.             ),
  9449.         );
  9450.         return $mois;
  9451.     }
  9452.     public function getAnnee()
  9453.     {
  9454.         $actuel date('Y');
  9455.         $annees = array();
  9456.         for($i $actuel$i >= 2020$i--){
  9457.             array_push($annees$i);
  9458.         }
  9459.         return $annees;
  9460.     }
  9461. }