src/Controller/AdminController.php line 8926

Open in your IDE?
  1. <?php
  2. // src/Controller/EntrepriseController.php
  3. namespace App\Controller;
  4. use App\Entity\AppUser;
  5. use App\Entity\SlidePhoto;
  6. use App\Entity\ImageArticleBlog;
  7. use App\Entity\CategorieArticle;
  8. use App\Entity\FactureAcompte;
  9. use App\Entity\ProductPhoto;
  10. use App\Form\ArticleEditType;
  11. use App\Form\ArticleType;
  12. use App\Entity\Article;
  13. use App\Entity\Product;
  14. use App\Entity\ProductOrder;
  15. use App\Entity\TVA;
  16. use App\Entity\Pays;
  17. use App\Form\TVAEditType;
  18. use App\Form\TVAType;
  19. use App\Entity\PaymentMethod;
  20. use App\Form\PaymentMethodEditType;
  21. use App\Form\PaymentMethodType;
  22. use App\Form\ProduitType;
  23. use App\Form\ProduitEditType;
  24. use App\Form\SujetFAQType;
  25. use App\Form\SujetFAQEditType;
  26. use App\Entity\Entreprise;
  27. use App\Form\ProductType;
  28. use App\Form\ProductEditType;
  29. use App\Entity\Tiers;
  30. use App\Entity\Produit;
  31. use App\Entity\ProduitCommande;
  32. use App\Entity\Category;
  33. use App\Entity\SubCategory;
  34. use App\Form\CategorieProduitType;
  35. use App\Form\CategorieArticleEditType;
  36. use App\Form\CategorieArticleType;
  37. use App\Form\CategoryType;
  38. use App\Entity\ShippingMethod;
  39. use App\Form\ShippingMethodType;
  40. use App\Form\ShippingMethodEditType;
  41. use App\Form\CategoryEditType;
  42. use App\Form\SubCategoryType;
  43. use App\Form\SubCategoryEditType;
  44. use App\Form\ArticleAideType;
  45. use App\Entity\ArticleAide;
  46. use App\Entity\Boutique;
  47. use App\Form\ArticleAideEditType;
  48. use App\Entity\Coupon;
  49. use App\Entity\PrixProduit;
  50. use App\Form\CouponType;
  51. use App\Form\CouponEditType;
  52. use App\Form\BoutiqueType;
  53. use App\Form\CategorieProduitEditType;
  54. use App\Entity\Commande;
  55. use App\Entity\CategorieProduit;
  56. use App\Form\TiersType;
  57. use App\Form\TiersEditType;
  58. use App\Entity\ModeleReglement;
  59. use App\Entity\Payment;
  60. use App\Entity\ValiditeService;
  61. use App\Entity\UserBoutique;
  62. use App\Form\CategorieArticleAideType;
  63. use App\Form\CategorieArticleAideEditType;
  64. use App\Entity\Ticket;
  65. use App\Form\TicketType;
  66. use App\Entity\CommentaireTicket;
  67. use App\Form\CommentaireTicketType;
  68. use App\Services\ChiffreEnLettre;
  69. use App\Entity\RequeteAjoutBoutique;
  70. use App\Entity\EntreeDeStock;
  71. use App\Entity\ProduitEntreeDeStock;
  72. use App\Entity\Expensive;
  73. use App\Form\ExpensiveType;
  74. use App\Form\ExpensiveEditType;
  75. use App\Entity\PresenceEmploye;
  76. use App\Entity\PresenceEmployeUser;
  77. use App\Entity\RubriqueSalaire;
  78. use App\Form\RubriqueSalaireType;
  79. use App\Form\RubriqueSalaireEditType;
  80. use App\Entity\RubriqueSalaireEmploye;
  81. use App\Entity\Conge;
  82. use App\Entity\Compte;
  83. use App\Form\CompteType;
  84. use App\Form\EcritureComptableType;
  85. use App\Form\JournalComptabiliteType;
  86. use App\Form\JournalComptabiliteEditType;
  87. use App\Entity\JournalComptabilite;
  88. use App\Entity\EcritureComptable;
  89. use App\Entity\RubriqueSalairePaiement;
  90. use App\Entity\PaiementSalaire;
  91. use App\Entity\GroupeEcritureComptable;
  92. use App\Form\CategorieDepenseType;
  93. use App\Entity\CategorieDepense;
  94. use App\Form\CategorieDepenseEditType;
  95. use App\Form\VisiteType;
  96. use App\Entity\Visite;
  97. use App\Form\VisiteEditType;
  98. use App\Entity\VisitePhoto;
  99. use App\Entity\Projet;
  100. use App\Form\ProjetType;
  101. use App\Form\ProjetEditType;
  102. use App\Entity\EtapeProjet;
  103. use App\Form\EtapeProjetType;
  104. use App\Form\EtapeProjetEditType;
  105. use App\Entity\Stock;
  106. use App\Form\EmployeType;
  107. use App\Form\EmployeEditType;
  108. use App\Entity\Photo;
  109. use App\Entity\DroitUtilisateur;
  110. use App\Entity\MouvementDeStock;
  111. use App\Entity\MouvementDeStockProduit; 
  112. use App\Entity\Magasin;
  113. use App\Form\MagasinType;
  114. use App\Form\MagasinEditType;
  115. use Symfony\Component\HttpFoundation\Response;
  116. use Symfony\Component\HttpFoundation\Request;
  117. use Symfony\Component\HttpFoundation\JsonResponse;
  118. use Symfony\Component\Routing\Annotation\Route;
  119. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  120. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  121. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  122. use Symfony\Component\Mailer\MailerInterface;
  123. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  124. use Symfony\Component\HttpKernel\KernelInterface;
  125. use Spipu\Html2Pdf\Html2Pdf;
  126. /**
  127.  * @Route("/{_locale}/dashboard")
  128.  */
  129. class AdminController extends AbstractController
  130. {    
  131.     private $kernel;
  132.     
  133.     public function  __construct(KernelInterface $kernel)
  134.     {
  135.         $this->kernel = $kernel;
  136.         
  137.     }
  138.     
  139.     /**
  140.      * @Route("/shop/{slug}", name="admin.show_shop")
  141.      * @return \Symfony\Component\HttpFoundation\Response
  142.      */
  143.     public function afficherBoutiqueAction(Request $request, Boutique $boutique)
  144.     {
  145.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  146.            return $this->redirectToRoute('security_login');
  147.         }
  148.         
  149.         
  150.         $em = $this->getDoctrine()
  151.                     ->getManager();
  152.         $user = $this->getUser();
  153.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  154.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  155.         $dateDebut->setTime(0, 0);
  156.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  157.         $dateFin->setTime(23, 59);
  158.         
  159.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  160.         $startMonth = $intervalleMois['debut'];
  161.         $endMonth = $intervalleMois['fin'];
  162.         
  163.         $invoices  = $em->getRepository(Commande::class)
  164.                         ->commandeParDateEtType($boutique->getId(), 'invoice', $dateDebut, $dateFin);
  165.         
  166.         $startYear = date('Y-01-01');
  167.         $endYear = date('Y-12-31');
  168.         $userBoutique = $em->getRepository(UserBoutique::class)
  169.                         ->findOneBy(
  170.                             array(
  171.                             'user' => $user->getId(),
  172.                             'boutique' => $boutique->getId()
  173.                             )
  174.                         );
  175.                         
  176.         return $this->render('admin/afficher_boutique.html.twig', [
  177.             'boutique' => $boutique,
  178.             'userBoutique' => $userBoutique,
  179.             'dateDebut' => $dateDebut,
  180.            'dateFin' => $dateFin,
  181.            'startMonth' => $startMonth,
  182.            'endMonth' => $endMonth,
  183.            'startYear' => $startYear,
  184.            'endYear' => $endYear,
  185.         ]);
  186.     }
  187.     
  188.     /**
  189.      * @Route("/shop/{slug}/mini-statistic", name="admin.mini_statistic")
  190.      * @return \Symfony\Component\HttpFoundation\Response
  191.      */
  192.     public function miniStatisticAction(Request $request, Boutique $boutique)
  193.     {
  194.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  195.            return $this->redirectToRoute('security_login');
  196.         }
  197.         
  198.         $em = $this->getDoctrine()
  199.                     ->getManager();
  200.         
  201.         $user = $this->getUser();
  202.               
  203.         
  204.         $mois = date('mY');
  205.         $annee = date('Y');
  206.         $chiffrDAffaireMois = $em->getRepository(Commande::class)
  207.                         ->chiffrDAffairePeriodique($mois, $boutique->getId());
  208.         
  209.         $chiffrDAffaireAnnee = $em->getRepository(Commande::class)
  210.                         ->chiffrDAffairePeriodique($annee, $boutique->getId());
  211.                         
  212.         $depenseMois = $em->getRepository(Expensive::class)
  213.                         ->depensePeriodique($mois, $boutique->getId());
  214.         $depenseAnnee = $em->getRepository(Expensive::class)
  215.                         ->depensePeriodique($annee, $boutique->getId());
  216.         $nombreTiers = 0;
  217.         
  218.         $nombreTiers = $em->getRepository(Tiers::class)
  219.                         ->nombreTiers($boutique->getId());
  220.         
  221.         $nombreProduit = $em->getRepository(Produit::class)
  222.                         ->nombreProduit($boutique->getId());
  223.         
  224.         $commandParMois = $em->getRepository(Commande::class)
  225.                         ->chiffrDAffaireParMois($annee, $boutique->getId());
  226.         
  227.         $chiffreDAffaireSurPlsAnnees = $em->getRepository(Commande::class)
  228.                         ->chiffrDAffaireSurPluisieursAnnees($boutique->getId());
  229.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  230.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  231.         $dateDebut->setTime(0, 0);
  232.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  233.         $dateFin->setTime(23, 59);
  234.         if($request->getMethod() == 'POST'){
  235.             $dateDebut = $request->request->get('dateDebut');
  236.             $dateDebut = new \DateTime($dateDebut);
  237.             $dateDebut->setTime(0, 0);
  238.             $dateFin = $request->request->get('dateFin');
  239.             $dateFin = new \DateTime($dateFin);
  240.             $dateFin->setTime(23, 59);
  241.         }
  242.         $chiffreDAffaireDUnePeriode = $em->getRepository(Commande::class)
  243.                                         ->chiffreDAffaireDUnePeriode('invoice', $boutique->getId(), $dateDebut, $dateFin);
  244.         
  245.         $devisPeriodique  = $em->getRepository(Commande::class)
  246.                                         ->chiffreDAffaireDUnePeriode('proposal', $boutique->getId(), $dateDebut, $dateFin);
  247.         
  248.         if(!empty($devisPeriodique)){
  249.             $devisPeriodique = $devisPeriodique[0]['totalVente'];
  250.         }else{
  251.             $devisPeriodique = 0;
  252.         }
  253.         if(!empty($chiffreDAffaireDUnePeriode)){
  254.             
  255.             $chiffreDAffaireDUnePeriode = $chiffreDAffaireDUnePeriode[0]['totalVente'];
  256.         }else{
  257.             $chiffreDAffaireDUnePeriode = 0;
  258.         }
  259.         $paiementDUnePeriode = $em->getRepository(Payment::class)
  260.                                 ->paiementDUnePeriode($boutique, $dateDebut, $dateFin);
  261.         
  262.         if(!empty($paiementDUnePeriode)){
  263.             $paiementDUnePeriode = $paiementDUnePeriode[0]['montantTotal'];
  264.         }else{
  265.             $paiementDUnePeriode = 0;
  266.         }
  267.         $totalDepenseParDate = $em->getRepository(Expensive::class)
  268.                                 ->totalDepenseParDate($boutique->getId(), $dateDebut, $dateFin);
  269.         if(!empty($totalDepenseParDate)){
  270.             $totalDepenseParDate = $totalDepenseParDate[0]['totalDepense'];
  271.         } else{
  272.             $totalDepenseParDate = 0;
  273.         }
  274.         $soldeTimbreFNE = $boutique->getSoldeTimbreFNE();
  275.         $userBoutique = $em->getRepository(UserBoutique::class)
  276.                         ->findOneBy(
  277.                             array(
  278.                             'user' => $user->getId(),
  279.                             'boutique' => $boutique->getId()
  280.                             )
  281.                         );
  282.         return $this->render('admin/mini_statistic.html.twig', [
  283.            'boutique' => $boutique,
  284.            'chiffrDAffaireAnnee' => $chiffrDAffaireAnnee,
  285.            'chiffrDAffaireMois' => $chiffrDAffaireMois,
  286.            'nombreTiers' => $nombreTiers,
  287.            'nombreProduit' => $nombreProduit,
  288.            'commandParMois' => $commandParMois, 
  289.            'chiffreDAffaireSurPlsAnnees' => $chiffreDAffaireSurPlsAnnees,
  290.            'userBoutique' => $userBoutique,
  291.            'depenseMois' => $depenseMois,
  292.            'depenseAnnee' => $depenseAnnee,
  293.            'chiffreDAffaireDUnePeriode' => $chiffreDAffaireDUnePeriode,
  294.            'totalDepenseParDate' => $totalDepenseParDate,
  295.            'soldeTimbreFNE' => $soldeTimbreFNE,
  296.            'paiementDUnePeriode' => $paiementDUnePeriode,
  297.            'devisPeriodique' => $devisPeriodique
  298.         ]);
  299.     }
  300.     
  301.     
  302.     /**
  303.      * @Route("/sales-total/{slug}", name="admin.sales_total")
  304.      * @return \Symfony\Component\HttpFoundation\Response
  305.      */
  306.     public function salesTotal(Request $request, Boutique $boutique)
  307.     {
  308.         $em = $this->getDoctrine()
  309.                     ->getManager();
  310.         
  311.         $user = $this->getUser();
  312.               
  313.             
  314.         $mois = date('mY');
  315.         $annee = date('Y');
  316.         $chiffrDAffaireMois = $em->getRepository(Commande::class)
  317.                         ->chiffrDAffairePeriodique($mois, $boutique->getId());
  318.         
  319.         $chiffrDAffaireAnnee = $em->getRepository(Commande::class)
  320.                         ->chiffrDAffairePeriodique($annee, $boutique->getId());
  321.         $nombreTiers = 0;
  322.         
  323.         $nombreTiers = $em->getRepository(Tiers::class)
  324.                         ->nombreTiers($boutique->getId());
  325.         
  326.         $nombreProduit = $em->getRepository(Produit::class)
  327.                         ->nombreProduit($boutique->getId());
  328.         
  329.         $commandParMois = $em->getRepository(Commande::class)
  330.                         ->chiffrDAffaireParMois($annee, $boutique->getId());
  331.         
  332.         $chiffreDAffaireSurPlsAnnees = $em->getRepository(Commande::class)
  333.                         ->chiffrDAffaireSurPluisieursAnnees($boutique->getId());
  334.         $userBoutique = $em->getRepository(UserBoutique::class)
  335.                         ->findOneBy(
  336.                             array(
  337.                             'user' => $user->getId(),
  338.                             'boutique' => $boutique->getId()
  339.                             )
  340.                         );
  341.         return $this->render('admin/sales_total.html.twig', [
  342.            'boutique' => $boutique,
  343.            'chiffrDAffaireAnnee' => $chiffrDAffaireAnnee,
  344.            'chiffrDAffaireMois' => $chiffrDAffaireMois,
  345.            'nombreTiers' => $nombreTiers,
  346.            'nombreProduit' => $nombreProduit,
  347.            'commandParMois' => $commandParMois,
  348.            'chiffreDAffaireSurPlsAnnees' => $chiffreDAffaireSurPlsAnnees,
  349.            'userBoutique' => $userBoutique
  350.         ]);
  351.     }
  352.     
  353.     
  354.     /**
  355.      * @Route("/{slug}/verifier-abonnement", name="admin.verifier_abonnement")
  356.      * @return \Symfony\Component\HttpFoundation\Response
  357.      */
  358.     public function verifierAbonnementAction(Request $request, Boutique $boutique)
  359.     {
  360.             
  361.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  362.            return $this->redirectToRoute('security_login');
  363.         }
  364.         
  365.         $em = $this->getDoctrine()
  366.                     ->getManager();
  367.                     
  368.         $derniereValiditeService =  $em->getRepository(ValiditeService::class)
  369.                         ->derniereValiditeService($boutique->getId());
  370.             
  371.         $user = $this->getUser();
  372.         
  373.         $nombreDeJour = 0;
  374.         $aujourdhui = new \DateTime();
  375.         $interV = '';
  376.         if(null !== $derniereValiditeService){
  377.                 
  378.             $interV = $aujourdhui->diff($derniereValiditeService->getValableJusquAu());
  379.             
  380.             $nombreDeJour = $interV->days;
  381.         }
  382.         
  383.         if($nombreDeJour <= 0){
  384.             
  385.             //return $this->redirectToRoute('choose_paied_plan');
  386.         }
  387.         $userBoutique = $em->getRepository(UserBoutique::class)
  388.                         ->findOneBy(
  389.                             array(
  390.                             'user' => $user->getId(),
  391.                             'boutique' => $boutique->getId()
  392.                             )
  393.                         );
  394.         return $this->render('admin/verifier_abonnement.html.twig', [
  395.            'boutique' => $boutique,
  396.            'derniereValiditeService' => $derniereValiditeService,
  397.            'nombreDeJour' => $nombreDeJour,
  398.            'userBoutique' => $userBoutique
  399.         ]);
  400.     }
  401.     
  402.     
  403.     //Proposals
  404.     /**
  405.      * @Route("/{slug}/proposals", name="admin.proposals")
  406.      * @return \Symfony\Component\HttpFoundation\Response
  407.      */
  408.     public function proposalsAction( Request $request, Boutique $boutique)
  409.     {
  410.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  411.            return $this->redirectToRoute('security_login');
  412.         }
  413.         
  414.         $em = $this->getDoctrine()
  415.                     ->getManager();
  416.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  417.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  418.         $dateDebut->setTime(0, 0);
  419.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  420.         $dateFin->setTime(23, 59);
  421.         
  422.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  423.         $startMonth = $intervalleMois['debut'];
  424.         $endMonth = $intervalleMois['fin'];
  425.         
  426.         $proposals  = $em->getRepository(Commande::class)
  427.                         ->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
  428.         $user = $this->getUser();
  429.         $userBoutique = $em->getRepository(UserBoutique::class)
  430.                         ->findOneBy(
  431.                             array(
  432.                             'user' => $user->getId(),
  433.                             'boutique' => $boutique->getId()
  434.                             )
  435.                         );
  436.         $startYear = date('Y-01-01');
  437.         $endYear = date('Y-12-31');
  438.         $clients = $em->getRepository(Tiers::class)
  439.                     ->findBy(
  440.                         array(
  441.                             'boutique' => $boutique->getId(),
  442.                             'estSupprime' => false
  443.                             
  444.                         ),
  445.                         array(
  446.                             'nom' => 'ASC'
  447.                         )
  448.                     );
  449.         if('POST' == $request->getMethod()){
  450.             $dateDebut = $_POST['dateDebut'];
  451.             $dateFin = $_POST['dateFin'];
  452.             
  453.             $dateDebut = new \DateTime($dateDebut);
  454.             $dateDebut->setTime(0, 0);
  455.             $dateFin = new \DateTime($dateFin);
  456.             $dateFin->setTime(23, 59);
  457.             
  458.             $proposals  = $em->getRepository(Commande::class)
  459.                         ->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
  460.             
  461.             
  462.             return $this->render('admin/proposals_table_content.html.twig', [
  463.                'boutique' => $boutique,
  464.                'proposals' => $proposals,
  465.                'userBoutique' => $userBoutique
  466.             ]);
  467.             
  468.         }
  469.         
  470.         return $this->render('admin/proposals.html.twig', [
  471.            'boutique' => $boutique,
  472.            'proposals' => $proposals,
  473.            'dateDebut' => $dateDebut,
  474.            'dateFin' => $dateFin,
  475.            'startMonth' => $startMonth,
  476.            'endMonth' => $endMonth,
  477.            'startYear' => $startYear,
  478.            'endYear' => $endYear,
  479.            'userBoutique' => $userBoutique,
  480.            'clients' => $clients
  481.         ]);
  482.     }
  483.     
  484.     //Proposals
  485.     /**
  486.      * @Route("/{slug}/deposits", name="admin.deposits")
  487.      * @return \Symfony\Component\HttpFoundation\Response
  488.      */
  489.     public function depositsAction( Request $request, Boutique $boutique)
  490.     {
  491.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  492.            return $this->redirectToRoute('security_login');
  493.         }
  494.         
  495.         $em = $this->getDoctrine()
  496.                     ->getManager();
  497.         
  498.             
  499.         $user = $this->getUser();
  500.         $userBoutique = $em->getRepository(UserBoutique::class)
  501.                         ->findOneBy(
  502.                             array(
  503.                             'user' => $user->getId(),
  504.                             'boutique' => $boutique->getId()
  505.                             )
  506.                         );
  507.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  508.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  509.         $dateDebut->setTime(0, 0);
  510.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  511.         $dateFin->setTime(23, 59);
  512.         
  513.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  514.         $startMonth = $intervalleMois['debut'];
  515.         $endMonth = $intervalleMois['fin'];
  516.         
  517.         $deposits  = $em->getRepository(FactureAcompte::class)
  518.                         ->factureParDate($boutique->getId(), $dateDebut, $dateFin);
  519.         
  520.         
  521.         $startYear = date('Y-01-01');
  522.         $endYear = date('Y-12-31');
  523.         if('POST' == $request->getMethod()){
  524.             $dateDebut = $_POST['dateDebut'];
  525.             $dateFin = $_POST['dateFin'];
  526.             
  527.             $dateDebut = new \DateTime($dateDebut);
  528.             $dateDebut->setTime(0, 0);
  529.             $dateFin = new \DateTime($dateFin);
  530.             $dateFin->setTime(23, 59);
  531.             
  532.             $deposits  = $em->getRepository(FactureAcompte::class)
  533.                         ->factureParDate($boutique->getId(), $dateDebut, $dateFin);
  534.         
  535.             return $this->render('admin/deposits_table_content.html.twig', [
  536.                'boutique' => $boutique,
  537.                'deposits' => $deposits,
  538.                 'userBoutique' => $userBoutique
  539.             ]);
  540.             
  541.         }
  542.         
  543.         
  544.     
  545.         return $this->render('admin/deposits.html.twig', [
  546.            'boutique' => $boutique,
  547.            'deposits' => $deposits,
  548.            'dateDebut' => $dateDebut,
  549.            'dateFin' => $dateFin,
  550.            'startMonth' => $startMonth,
  551.            'endMonth' => $endMonth,
  552.            'startYear' => $startYear,
  553.            'endYear' => $endYear,
  554.            'userBoutique' => $userBoutique
  555.         ]);
  556.     }
  557.     
  558.     //Proposals
  559.     /**
  560.      * @Route("/{slug}/new-deposit", name="admin.new_deposit")
  561.      * @return \Symfony\Component\HttpFoundation\Response
  562.      */
  563.     public function newDepositAction( Request $request, Boutique $boutique)
  564.     {
  565.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  566.            return $this->redirectToRoute('security_login');
  567.         }
  568.         
  569.         $responseFNE = '';
  570.         $vehicules = array(1, 22, 23, 28);
  571.         $em = $this->getDoctrine()
  572.                     ->getManager();
  573.         $tvas  = $em->getRepository(TVA::class)
  574.                         ->findBy(
  575.                             array(
  576.                                 'boutique' => $boutique->getId()
  577.                             )
  578.                         );
  579.         $factures  = $em->getRepository(Commande::class)
  580.                         ->facturesPourVersement( $boutique->getId());
  581.                         
  582.         $editMode = 'new';
  583.         $user = $this->getUser();
  584.         $userBoutique = $em->getRepository(UserBoutique::class)
  585.                         ->findOneBy(
  586.                             array(
  587.                             'user' => $user->getId(),
  588.                             'boutique' => $boutique->getId()
  589.                             )
  590.                         );
  591.         if($request->getMethod() == 'POST'){
  592.             $facture = $_POST['facture'];
  593.             $facture = $em->getRepository(Commande::class)
  594.                             ->findOneBy(
  595.                                 array(
  596.                                 'boutique' => $boutique->getId(),
  597.                                 'id' => $facture
  598.                                 )
  599.                             );
  600.         
  601.             $montant = $_POST['montant'];
  602.             $valableJusquAu = '';
  603.             if(isset($_POST['valableJusquAu'])){
  604.                 $valableJusquAu = $_POST['valableJusquAu'];
  605.             }
  606.             
  607.             $pourcentage = $_POST['pourcentage'];
  608.             $appliquerTVA = false;
  609.             if(isset($_POST['appliquerTVA'])){
  610.                 $appliquerTVA = (bool) $_POST['appliquerTVA'];
  611.             }
  612.             
  613.             $tva = 0;
  614.             if(isset($_POST['tva'])){
  615.                 $tva = $_POST['tva'];
  616.             }
  617.             $laDate = '';
  618.             if(isset($_POST['laDate'])){
  619.                 $laDate = $_POST['laDate'];
  620.             }
  621.             
  622.             $deposit = new FactureAcompte;
  623.             $deposit->setTotalHT($montant);
  624.             $deposit->setPourcentage($pourcentage);
  625.             $deposit->setBoutique($boutique);
  626.             $deposit->setTiers($facture->getTiers());
  627.             $deposit->setFacture($facture);
  628.             $deposit->setLaDate(new \DateTime($laDate));
  629.             $deposit->setValableJusquAu(new \DateTime($valableJusquAu));
  630.             $deposit->setNumero($this->getNumero('deposit', $boutique));
  631.             if($appliquerTVA){
  632.                 $deposit->setTotalTVA(($montant * $tva)/100);
  633.                 $ttc = $montant * (1 + $tva/100);
  634.                 $deposit->setTotalTTC($ttc);
  635.                 $deposit->setValeurTVA($tva);
  636.             } else{
  637.                 $deposit->setTotalTTC($montant);
  638.                 $deposit->setValeurTVA(0);
  639.             }
  640.             $em->persist($deposit);
  641.             $em->flush();
  642.             
  643.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  644.                     
  645.             $content = $this->renderView('pdf/facture_acompte.html.twig', [
  646.                 'boutique' => $boutique,
  647.                 'facture' => $deposit,
  648.             ]);
  649.             $pdf->writeHTML($content);
  650.             $name = 'deposit'.$deposit->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
  651.             $lienPhysique = $deposit->getUploadRootDir().$name;
  652.             
  653.             $deposit->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  654.             $pdf->output($lienPhysique, 'F');
  655.             
  656.             $em->flush();
  657.             
  658.             return $this->render('admin/response_new_deposit.html.twig', [
  659.                    'boutique' => $boutique,
  660.                    'commande' => $deposit,
  661.                    'responseFNE' => $responseFNE,
  662.                     'vehicules' => $vehicules
  663.                 ]);
  664.         }
  665.         return $this->render('admin/new_deposit.html.twig', [
  666.            'boutique' => $boutique,
  667.            'factures' => $factures,
  668.            'editMode' => $editMode,
  669.            'tvas' => $tvas,
  670.            'userBoutique' => $userBoutique
  671.         ]);
  672.     }
  673.     
  674.     //Proposals
  675.     /**
  676.      * @Route("/{slug}/edit-deposit/{id}", name="admin.edit_deposit")
  677.      * @return \Symfony\Component\HttpFoundation\Response
  678.      */
  679.     public function editDepositAction( Request $request,  $slug, $id)
  680.     {
  681.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  682.            return $this->redirectToRoute('security_login');
  683.         }
  684.         
  685.         $em = $this->getDoctrine()
  686.                     ->getManager();
  687.         
  688.         $boutique  = $em->getRepository(Boutique::class)
  689.                         ->findOneBySlug($slug);
  690.         $user = $this->getUser();
  691.         $userBoutique = $em->getRepository(UserBoutique::class)
  692.                         ->findOneBy(
  693.                             array(
  694.                             'user' => $user->getId(),
  695.                             'boutique' => $boutique->getId()
  696.                             )
  697.                         );
  698.                         
  699.         $factures  = $em->getRepository(Commande::class)
  700.                         ->findBy(
  701.                             array(
  702.                                 'boutique' => $boutique->getId(),
  703.                                 'typeFacture' => 'invoice'
  704.                             )
  705.                         );
  706.         
  707.         $tvas  = $em->getRepository(TVA::class)
  708.                         ->findBy(
  709.                             array(
  710.                                 'boutique' => $boutique->getId()
  711.                             )
  712.                         );
  713.         
  714.         $deposit  = $em->getRepository(FactureAcompte::class)
  715.                         ->findOneBy(
  716.                             array(
  717.                                 'boutique' => $boutique->getId(),
  718.                                 'id' => $id
  719.                             )
  720.                         );
  721.         
  722.         $editMode = 'edit';
  723.         if($request->getMethod() == 'POST'){
  724.         $facture = $_POST['facture'];
  725.             $facture = $em->getRepository(Commande::class)
  726.                             ->findOneBy(
  727.                                 array(
  728.                                 'boutique' => $boutique->getId(),
  729.                                 'id' => $facture
  730.                                 )
  731.                             );
  732.         
  733.             $montant = $_POST['montant'];
  734.             $pourcentage = $_POST['pourcentage'];
  735.             $appliquerTVA = false;
  736.             if(isset($_POST['appliquerTVA'])){
  737.                 $appliquerTVA = (bool) $_POST['appliquerTVA'];
  738.             }
  739.             
  740.             $tva = 0;
  741.             if(isset($_POST['tva'])){
  742.                 $tva = $_POST['tva'];
  743.             }
  744.             
  745.             $laDate = '';
  746.             if(isset($_POST['laDate'])){
  747.                 $laDate = $_POST['laDate'];
  748.             }
  749.             
  750.             $deposit->setTotalHT($montant);
  751.             $deposit->setPourcentage($pourcentage);
  752.             $deposit->setBoutique($boutique);
  753.             $deposit->setTiers($facture->getTiers());
  754.             $deposit->setLaDate(new \DateTime($laDate));
  755.             if($appliquerTVA){
  756.                 $deposit->setTotalTVA(($montant * $tva)/100);
  757.                 $ttc = $montant * (1 + $tva)/100;
  758.                 $deposit->setTotalTVA(($montant * $tva)/100);
  759.                 $deposit->setTotalTTC($ttc);
  760.                 $deposit->setValeurTVA($tva);
  761.             } else{
  762.                 $deposit->setTotalTTC($montant);
  763.                 $deposit->setValeurTVA(0);
  764.                 $deposit->setTotalTVA(0);
  765.             }
  766.             
  767.             $em->flush();
  768.         }
  769.         return $this->render('admin/edit_deposit.html.twig', [
  770.            'boutique' => $boutique,
  771.            'factures' => $factures,
  772.            'editMode' => $editMode,
  773.            'tvas' => $tvas,
  774.            'deposit' => $deposit,
  775.            'userBoutique' => $userBoutique
  776.         ]);
  777.     }
  778.     
  779.     /**
  780.      * @Route("/{slug}/delete-deposit/{id}", name="admin.delete_deposit")
  781.      * @return \Symfony\Component\HttpFoundation\Response
  782.      */
  783.     public function deleteDepositAction( Request $request,  $slug, $id)
  784.     {
  785.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  786.            return $this->redirectToRoute('security_login');
  787.         }
  788.         
  789.         $em = $this->getDoctrine()
  790.                     ->getManager();
  791.         
  792.         $boutique  = $em->getRepository(Boutique::class)
  793.                         ->findOneBySlug($slug);
  794.         
  795.         $user = $this->getUser();
  796.         $userBoutique = $em->getRepository(UserBoutique::class)
  797.                         ->findOneBy(
  798.                             array(
  799.                             'user' => $user->getId(),
  800.                             'boutique' => $boutique->getId()
  801.                             )
  802.                         );
  803.         $deposit  = $em->getRepository(FactureAcompte::class)
  804.                         ->findOneBy(
  805.                             array(
  806.                                 'boutique' => $boutique->getId(),
  807.                                 'id' => $id
  808.                             )
  809.                         );
  810.         if(null != $deposit){
  811.             $em->remove($deposit);
  812.             $em->flush();
  813.         }
  814.         return $this->redirectToRoute('admin.deposits', array('slug' => $boutique->getSlug()));
  815.     }
  816.     
  817.     
  818.     /**
  819.      * @Route("/{slug}/invoices", name="admin.invoices")
  820.      * @return \Symfony\Component\HttpFoundation\Response
  821.      */
  822.     public function invoicesAction( Request $request, Boutique $boutique)
  823.     {
  824.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  825.            return $this->redirectToRoute('security_login');
  826.         }
  827.         
  828.         $em = $this->getDoctrine()
  829.                     ->getManager();
  830.                     
  831.         $paymentMethods = $em->getRepository(PaymentMethod::class)
  832.                     ->findBy(
  833.                         array(
  834.                             'boutique' => $boutique->getId()
  835.                         )
  836.                     );
  837.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  838.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  839.         $dateDebut->setTime(0, 0);
  840.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  841.         $dateFin->setTime(23, 59);
  842.         
  843.         
  844.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  845.         $startMonth = $intervalleMois['debut'];
  846.         $endMonth = $intervalleMois['fin'];
  847.         
  848.         $invoices  = $em->getRepository(Commande::class)
  849.                         ->commandeParDate($boutique->getId(), $dateDebut, $dateFin, $boutique->getSettings()->getFactureAAfficher());
  850.         
  851.         $startYear = date('Y-01-01');
  852.         $endYear = date('Y-12-31');
  853.         $user = $this->getUser();
  854.         
  855.         $userBoutique = $em->getRepository(UserBoutique::class)
  856.                         ->findOneBy(
  857.                             array(
  858.                             'user' => $user->getId(),
  859.                             'boutique' => $boutique->getId()
  860.                             )
  861.                         );
  862.         $clients = $em->getRepository(Tiers::class)
  863.                     ->findBy(
  864.                         array(
  865.                             'boutique' => $boutique->getId(),
  866.                             'estSupprime' => false
  867.                             
  868.                         ),
  869.                         array(
  870.                             'nom' => 'ASC'
  871.                         )
  872.                     );
  873.         if('POST' == $request->getMethod()){
  874.             $dateDebut = $_POST['dateDebut'];
  875.             $dateFin = $_POST['dateFin'];
  876.             
  877.             $dateDebut = new \DateTime($dateDebut);
  878.             $dateDebut->setTime(0, 0);
  879.             $dateFin = new \DateTime($dateFin);
  880.             $dateFin->setTime(23, 59);
  881.             
  882.             $invoices  = $em->getRepository(Commande::class)
  883.                         ->commandeParDate($boutique->getId(), $dateDebut, $dateFin, $boutique->getSettings()->getFactureAAfficher());
  884.             
  885.             
  886.             return $this->render('admin/invoices_table_content.html.twig', [
  887.                'boutique' => $boutique,
  888.                'invoices' => $invoices,
  889.                'userBoutique' => $userBoutique
  890.             ]);
  891.         }
  892.         
  893.         return $this->render('admin/invoices.html.twig', [
  894.            'boutique' => $boutique,
  895.            'paymentMethods' => $paymentMethods,
  896.            'invoices' => $invoices,
  897.            'dateDebut' => $dateDebut,
  898.            'dateFin' => $dateFin,
  899.            'startMonth' => $startMonth,
  900.            'endMonth' => $endMonth,
  901.            'startYear' => $startYear,
  902.            'endYear' => $endYear,
  903.            'userBoutique' => $userBoutique,
  904.            'clients' => $clients
  905.         ]);
  906.     }
  907.     /**
  908.      * @Route("/{slug}/point-par-client/{id}/{type}/{dateDebut}/{dateFin}", name="admin_point_par_client")
  909.      * @return \Symfony\Component\HttpFoundation\Response
  910.      */
  911.     public function pointParClientAction( Request $request, $slug, $id = 0, $type = 'invoice', $dateDebut = '', $dateFin = '')
  912.     {
  913.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  914.            return $this->redirectToRoute('security_login');
  915.         }
  916.         
  917.         $em = $this->getDoctrine()
  918.                     ->getManager();
  919.                         
  920.         $boutique = $em->getRepository(Boutique::class)
  921.                         ->findOneBySlug($slug);
  922.         
  923.         
  924.         $user = $this->getUser();
  925.         $userBoutique = $em->getRepository(UserBoutique::class)
  926.                         ->findOneBy(
  927.                             array(
  928.                             'user' => $user->getId(),
  929.                             'boutique' => $boutique->getId()
  930.                             )
  931.                         );
  932.         $client = $em->getRepository(Tiers::class)
  933.                     ->findOneById($id);
  934.         $dateDebut = new \DateTime($dateDebut);
  935.         $dateDebut->setTime(0, 0);
  936.         $dateFin = new \DateTime($dateFin);
  937.         $dateFin->setTime(23, 59);
  938.         $invoices  = $em->getRepository(Commande::class)
  939.                         ->commandeParClientDateEtType($boutique->getId(), $type, $id, $dateDebut, $dateFin);
  940.     
  941.         if($id == 0){
  942.             return $this->render('admin/point_par_client.html.twig', [
  943.                 'boutique' => $boutique,
  944.                 
  945.                 'invoices' => $invoices,
  946.                 'dateDebut' => $dateDebut,
  947.                 'dateFin' => $dateFin,
  948.                 'userBoutique' => $userBoutique,
  949.                 ]);
  950.         }
  951.        
  952.         return $this->render('admin/point_par_client.html.twig', [
  953.            'boutique' => $boutique,
  954.            
  955.            'invoices' => $invoices,
  956.            'dateDebut' => $dateDebut,
  957.            'dateFin' => $dateFin,
  958.            'userBoutique' => $userBoutique,
  959.         ]);
  960.     }
  961.     /**
  962.      * @Route("/{slug}/imprimer-point-par-client/{id}/{type}/{dateDebut}/{dateFin}", name="admin_imprimer_point_par_client")
  963.      * @return \Symfony\Component\HttpFoundation\Response
  964.      */
  965.     public function imprimerPointParClientAction( Request $request, $slug, $id = 0, $type = 'invoice', $dateDebut = '', $dateFin = '')
  966.     {
  967.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  968.            return $this->redirectToRoute('security_login');
  969.         }
  970.         
  971.         $em = $this->getDoctrine()
  972.                     ->getManager();
  973.                         
  974.         $boutique = $em->getRepository(Boutique::class)
  975.                         ->findOneBySlug($slug);
  976.         
  977.         
  978.         $user = $this->getUser();
  979.         $userBoutique = $em->getRepository(UserBoutique::class)
  980.                         ->findOneBy(
  981.                             array(
  982.                             'user' => $user->getId(),
  983.                             'boutique' => $boutique->getId()
  984.                             )
  985.                         );
  986.         $client = $em->getRepository(Tiers::class)
  987.                     ->findOneById($id);
  988.         $dateDebut = new \DateTime($dateDebut);
  989.         $dateDebut->setTime(0, 0);
  990.         $dateFin = new \DateTime($dateFin);
  991.         $dateFin->setTime(23, 59);
  992.         $invoices  = $em->getRepository(Commande::class)
  993.                         ->commandeParClientDateEtType($boutique->getId(), $type, $id, $dateDebut, $dateFin);
  994.         $pdf = new Html2Pdf('P', 'A4', 'fr');
  995.         if($id == 0){
  996.             $content = $this->renderView('pdf/point_pour_tous_les_clients.html.twig', [
  997.                         'boutique' => $boutique,
  998.                         'invoices' => $invoices,
  999.                         'dateDebut' => $dateDebut,
  1000.                         'dateFin' => $dateFin,
  1001.                         'userBoutique' => $userBoutique,
  1002.                     ]);
  1003.         }else{
  1004.             $content = $this->renderView('pdf/point_par_client.html.twig', [
  1005.                         'boutique' => $boutique,
  1006.                         'client' => $client,
  1007.                         'invoices' => $invoices,
  1008.                         'dateDebut' => $dateDebut,
  1009.                         'dateFin' => $dateFin,
  1010.                         'userBoutique' => $userBoutique,
  1011.                     ]);
  1012.         }
  1013.         
  1014.         $pdf->writeHTML($content);
  1015.         $name = time().$boutique->getId().rand(1, 10000).'.pdf';
  1016.         $photo = new Photo;
  1017.         $lienPhysique = $photo->getUploadRootDir().$name;
  1018.                 
  1019.         $pdf->output($lienPhysique, 'I');
  1020.         return $this->render('pdf/point_par_client.html.twig', [
  1021.            'boutique' => $boutique,
  1022.            'client' => $client,
  1023.            'invoices' => $invoices,
  1024.            'dateDebut' => $dateDebut,
  1025.            'dateFin' => $dateFin,
  1026.            'userBoutique' => $userBoutique,
  1027.         ]);
  1028.     }
  1029.     //Proposals
  1030.     /**
  1031.      * @Route("/{slug}/detail-commande/{id}", name="admin_detail_commande")
  1032.      * @return \Symfony\Component\HttpFoundation\Response
  1033.      */
  1034.     public function detailCommandeAction( Request $request, $slug, $id=0)
  1035.     {
  1036.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1037.            return $this->redirectToRoute('security_login');
  1038.         }
  1039.         $em = $this->getDoctrine()
  1040.                     ->getManager();
  1041.         $boutique = $em->getRepository(Boutique::class)
  1042.                         ->findOneBySlug($slug);
  1043.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  1044.                                 ->findBy(
  1045.                                     array(
  1046.                                         'commande' => $id
  1047.                                     )
  1048.                                 );
  1049.         return $this->render('admin/detail_commande.html.twig', [
  1050.            'produitCommandes' => $produitCommandes,
  1051.         ]);
  1052.     }
  1053.     /**
  1054.      * @Route("/{slug}/rh/tableau-de-bord", name="admin_rh_tableau_de_bord")
  1055.      * @return \Symfony\Component\HttpFoundation\Response
  1056.      */
  1057.     public function rhTableauDeBordAction( Request $request, Boutique $boutique)
  1058.     {
  1059.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1060.            return $this->redirectToRoute('security_login');
  1061.         }  
  1062.         $em = $this->getDoctrine()
  1063.                     ->getManager();
  1064.         
  1065.         $user = $this->getUser();
  1066.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  1067.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1068.         $dateDebut->setTime(0, 0);
  1069.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1070.         $dateFin->setTime(23, 59);
  1071.         
  1072.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  1073.         $startMonth = $intervalleMois['debut'];
  1074.         $endMonth = $intervalleMois['fin'];
  1075.         
  1076.         $startYear = date('Y-01-01');
  1077.         $endYear = date('Y-12-31');
  1078.         
  1079.         $estParti = false;
  1080.         $nombreDEmployeActuel = $em->getRepository(UserBoutique::class)
  1081.                     ->nombreDEmployeActuel($boutique->getId(), 'ROLE_EMPLOYE', $estParti);
  1082.         $nombreDEmployeActuel = $nombreDEmployeActuel[0]['nombreEmploye'];
  1083.         $estParti = true;
  1084.         $nombreDEmployeParti = $em->getRepository(UserBoutique::class)
  1085.                     ->nombreDEmployeActuel($boutique->getId(), 'ROLE_EMPLOYE', $estParti);
  1086.         $nombreDEmployeParti = $nombreDEmployeParti[0]['nombreEmploye'];
  1087.         $heureDeTravails = $em->getRepository(PresenceEmployeUser::class)
  1088.                     ->heureDeTravail($boutique->getId(), $dateDebut, $dateFin);
  1089.         
  1090.         $tempsDeTravail = 0;
  1091.         $heureSupplementaires = 0;
  1092.         
  1093.         if(!empty($heureDeTravails)){
  1094.             $tempsDeTravail = $heureDeTravails[0]['tempsDeTravail'];
  1095.             $heureSupplementaires = $heureDeTravails[0]['heureSupplementaire'];
  1096.         }
  1097.         
  1098.         
  1099.         $userBoutique = $em->getRepository(UserBoutique::class)
  1100.                         ->findOneBy(
  1101.                             array(
  1102.                             'user' => $user->getId(),
  1103.                             'boutique' => $boutique->getId()
  1104.                             )
  1105.                         );
  1106.         
  1107.         
  1108.         return $this->render('admin/rh_tableau_de_bord.html.twig', [
  1109.            'boutique' => $boutique,
  1110.             'nombreDEmployeParti' => $nombreDEmployeParti,
  1111.            'userBoutique' => $userBoutique,
  1112.            'nombreDEmployeActuel' => $nombreDEmployeActuel,
  1113.            'tempsDeTravail' => $tempsDeTravail,
  1114.             'heureSupplementaires' => $heureSupplementaires,
  1115.             'dateDebut' => $dateDebut,
  1116.            'dateFin' => $dateFin,
  1117.            'startMonth' => $startMonth,
  1118.            'endMonth' => $endMonth,
  1119.            'startYear' => $startYear,
  1120.            'endYear' => $endYear,
  1121.         ]);
  1122.     }
  1123.     /**
  1124.      * @Route("/{slug}/rh/employees", name="admin_rh_employees")
  1125.      * @return \Symfony\Component\HttpFoundation\Response
  1126.      */
  1127.     public function employeesAction( Request $request, Boutique $boutique)
  1128.     {
  1129.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1130.            return $this->redirectToRoute('security_login');
  1131.         }      
  1132.         $em = $this->getDoctrine()
  1133.                     ->getManager();
  1134.         
  1135.         $user = $this->getUser();
  1136.         
  1137.         
  1138.         $employes = $em->getRepository(UserBoutique::class)
  1139.                     ->findBy(
  1140.                         array(
  1141.                             'boutique' => $boutique->getId(),
  1142.                             'estParti' => false
  1143.                         )
  1144.                     );
  1145.         
  1146.         
  1147.         $userBoutique = $em->getRepository(UserBoutique::class)
  1148.                         ->findOneBy(
  1149.                             array(
  1150.                             'user' => $user->getId(),
  1151.                             'boutique' => $boutique->getId(),
  1152.                             
  1153.                             )
  1154.                         );
  1155.         
  1156.         
  1157.         return $this->render('admin/employes.html.twig', [
  1158.            'boutique' => $boutique,
  1159.             'employes' => $employes,
  1160.            'userBoutique' => $userBoutique
  1161.         ]);
  1162.     }
  1163.     /**
  1164.      * @Route("/{slug}/rh/pointage-journalier", name="admin_pointage_journalier")
  1165.      * @return \Symfony\Component\HttpFoundation\Response
  1166.      */
  1167.     public function pointageJournalierAction( Request $request, Boutique $boutique)
  1168.     {
  1169.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1170.            return $this->redirectToRoute('security_login');
  1171.         }      
  1172.         $em = $this->getDoctrine()
  1173.                     ->getManager();
  1174.         
  1175.         $user = $this->getUser();
  1176.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  1177.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1178.         
  1179.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1180.         
  1181.         
  1182.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  1183.         $startMonth = $intervalleMois['debut'];
  1184.         $endMonth = $intervalleMois['fin'];
  1185.         
  1186.         $presenceEmployeParDates  = $em->getRepository(PresenceEmploye::class)
  1187.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut, $dateFin);
  1188.         
  1189.         $startYear = date('Y-01-01');
  1190.         $endYear = date('Y-12-31');
  1191.         if($request->getMethod() == 'POST'){
  1192.             $dateDebut = $request->request->get('dateDebut');
  1193.             $dateDebut = new \DateTime($dateDebut);
  1194.             $dateFin = $request->request->get('dateFin');
  1195.             $dateFin = new \DateTime($dateFin);
  1196.             $presenceEmployeParDates  = $em->getRepository(PresenceEmploye::class)
  1197.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut, $dateFin);
  1198.              return $this->render('admin/contenu_table_pointage_journalier.html.twig', [
  1199.                 
  1200.                 'presenceEmployeParDates' => $presenceEmployeParDates
  1201.                 
  1202.                 ]);
  1203.                     
  1204.         }
  1205.         $userBoutique = $em->getRepository(UserBoutique::class)
  1206.                         ->findOneBy(
  1207.                             array(
  1208.                             'user' => $user->getId(),
  1209.                             'boutique' => $boutique->getId()
  1210.                             )
  1211.                         );
  1212.         
  1213.         
  1214.         return $this->render('admin/pointage_journalier.html.twig', [
  1215.            'boutique' => $boutique,
  1216.            'userBoutique' => $userBoutique,
  1217.            'presenceEmployeParDates' => $presenceEmployeParDates,
  1218.             'dateDebut' => $dateDebut,
  1219.            'dateFin' => $dateFin,
  1220.            'startMonth' => $startMonth,
  1221.            'endMonth' => $endMonth,
  1222.            'startYear' => $startYear,
  1223.            'endYear' => $endYear,
  1224.         ]);
  1225.     }
  1226.     /**
  1227.      * @Route("/{slug}/rh/element-pointage-journalier/{idPresence}", name="admin_element_pointage_journalier")
  1228.      * @return \Symfony\Component\HttpFoundation\Response
  1229.      */
  1230.     public function elementPointageJournalierAction( Request $request, Boutique $boutique, $idPresence = '')
  1231.     {
  1232.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1233.            return $this->redirectToRoute('security_login');
  1234.         }      
  1235.         $em = $this->getDoctrine()
  1236.                     ->getManager();
  1237.         
  1238.         $user = $this->getUser();
  1239.         $presenceEmploye  = $em->getRepository(PresenceEmploye::class)
  1240.                         ->findOneById($idPresence);
  1241.         
  1242.         $presenceEmployeUsers  = $em->getRepository(PresenceEmployeUser::class)
  1243.                         ->findByPresenceEmploye($presenceEmploye);
  1244.         
  1245.         
  1246.         
  1247.         $userBoutique = $em->getRepository(UserBoutique::class)
  1248.                         ->findOneBy(
  1249.                             array(
  1250.                             'user' => $user->getId(),
  1251.                             'boutique' => $boutique->getId()
  1252.                             )
  1253.                         );
  1254.         
  1255.         
  1256.         return $this->render('admin/element_pointage_journalier.html.twig', [
  1257.            'boutique' => $boutique,
  1258.            'userBoutique' => $userBoutique,
  1259.            'presenceEmployeUsers' => $presenceEmployeUsers,
  1260.         ]);
  1261.     }
  1262.     /**
  1263.      * @Route("/{slug}/rh/nouveau-pointage-journalier", name="admin_nouveau_pointage_journalier")
  1264.      * @return \Symfony\Component\HttpFoundation\Response
  1265.      */
  1266.     public function nouveauPointageJournalierAction( Request $request, Boutique $boutique)
  1267.     {
  1268.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1269.            return $this->redirectToRoute('security_login');
  1270.         }      
  1271.         $em = $this->getDoctrine()
  1272.                     ->getManager();
  1273.         
  1274.         $user = $this->getUser();
  1275.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  1276.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  1277.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  1278.         
  1279.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  1280.         $startMonth = $intervalleMois['debut'];
  1281.         $endMonth = $intervalleMois['fin'];
  1282.         
  1283.         $presenceEmployeParDates  = $em->getRepository(PresenceEmploye::class)
  1284.                         ->presenceEmployeParDate($boutique->getId(), $dateDebut, $dateFin);
  1285.         
  1286.         $startYear = date('Y-01-01');
  1287.         $endYear = date('Y-12-31');
  1288.         
  1289.         $employes = $em->getRepository(UserBoutique::class)
  1290.                         ->findBy(
  1291.                             array(
  1292.                                 'boutique' => $boutique,
  1293.                                 'estParti' => false
  1294.                             )
  1295.                         );
  1296.         if($request->getMethod() == 'POST'){
  1297.             $laDate = $request->request->get('la_date');
  1298.             $laDate = new \DateTime($laDate);
  1299.             $presenceEmploye = new PresenceEmploye;
  1300.             $presenceEmploye->setBoutique($boutique);
  1301.             $presenceEmploye->setLaDate($laDate);
  1302.             $em->persist($presenceEmploye);
  1303.             $em->flush();
  1304.             foreach($employes as $employe){
  1305.                 $estPresent =  (bool)$request->request->get('est_present'.$employe->getUser()->getId());
  1306.                 $heureDebut =  $request->request->get('heure_debut'.$employe->getUser()->getId());
  1307.                 $heureDebut = new \DateTime($heureDebut);
  1308.                 $heureFin =  $request->request->get('heure_fin'.$employe->getUser()->getId());
  1309.                 $heureFin = new \DateTime($heureFin);
  1310.                 $tempsDeTravail =  (float)$request->request->get('temps_de_travail'.$employe->getUser()->getId());
  1311.                 $heureSupplementaire =  $request->request->get('heure_supplementaire'.$employe->getUser()->getId());
  1312.                 
  1313.                 if($estPresent){
  1314.                     $presenceEmployeUser = new PresenceEmployeUser;
  1315.                     $presenceEmployeUser->setUser($employe->getUser());
  1316.                     $presenceEmployeUser->setBoutique($boutique);
  1317.                     $presenceEmployeUser->setPresenceEmploye($presenceEmploye);
  1318.                     $presenceEmployeUser->setEstPresent($estPresent);
  1319.                     $presenceEmployeUser->setDatePresence($laDate);
  1320.                     $presenceEmployeUser->setHeureArrivee($heureDebut);
  1321.                     $presenceEmployeUser->setHeureDepart($heureFin);
  1322.                     $presenceEmployeUser->setHeurePassee($tempsDeTravail);
  1323.                     $presenceEmployeUser->setHeureSupplementaire($heureSupplementaire);
  1324.                     $em->persist($presenceEmployeUser);
  1325.                     $em->flush();
  1326.                     
  1327.                 }
  1328.             }
  1329.         }
  1330.         $userBoutique = $em->getRepository(UserBoutique::class)
  1331.                         ->findOneBy(
  1332.                             array(
  1333.                             'user' => $user->getId(),
  1334.                             'boutique' => $boutique->getId()
  1335.                             )
  1336.                         );
  1337.         
  1338.         
  1339.         return $this->render('admin/nouveau_pointage_journalier.html.twig', [
  1340.            'boutique' => $boutique,
  1341.            'userBoutique' => $userBoutique,
  1342.            'employes' => $employes,
  1343.            'presenceEmployeParDates' => $presenceEmployeParDates,
  1344.             'dateDebut' => $dateDebut,
  1345.            'dateFin' => $dateFin,
  1346.            'startMonth' => $startMonth,
  1347.            'endMonth' => $endMonth,
  1348.            'startYear' => $startYear,
  1349.            'endYear' => $endYear,
  1350.         ]);
  1351.     }
  1352.     
  1353.     
  1354.     //Salaire
  1355.     /**
  1356.      * @Route("/{slug}/rh/salaire", name="admin_rh_salaires")
  1357.      * @return \Symfony\Component\HttpFoundation\Response
  1358.      */
  1359.     public function salairesAction( Request $request, Boutique $boutique)
  1360.     {
  1361.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1362.            return $this->redirectToRoute('security_login');
  1363.         }      
  1364.         $em = $this->getDoctrine()
  1365.                     ->getManager();
  1366.         
  1367.         $user = $this->getUser();
  1368.         
  1369.         
  1370.         $employes = $em->getRepository(UserBoutique::class)
  1371.                     ->findBy(
  1372.                         array(
  1373.                             'boutique' => $boutique->getId(),
  1374.                             'estParti' => false,
  1375.                             'estEmploye' => true
  1376.                         )
  1377.                     );
  1378.         
  1379.         
  1380.         $userBoutique = $em->getRepository(UserBoutique::class)
  1381.                         ->findOneBy(
  1382.                             array(
  1383.                             'user' => $user->getId(),
  1384.                             'boutique' => $boutique->getId()
  1385.                             )
  1386.                         );
  1387.         
  1388.         $mois = $this->getMois();
  1389.         $annees = $this->getAnnee();
  1390.         $moyenDePaiements = array(
  1391.             'VIREMENT BANCAIRE', 'CHEQUE', 'ESPECE', 'WAVE', 'ORANGE MONEY', 'MTN MONEY', 'MOOV MONEY'
  1392.         );
  1393.         return $this->render('admin/salaries.html.twig', [
  1394.            'boutique' => $boutique,
  1395.             'employes' => $employes,
  1396.            'userBoutique' => $userBoutique,
  1397.            'mois' => $mois,
  1398.            'annees' => $annees,
  1399.            'moyenDePaiements' => $moyenDePaiements
  1400.         ]);
  1401.     }
  1402.     /**
  1403.      * @Route("/{slug}/rh/calculer-salaire", name="admin_rh_calcuer_salaire")
  1404.      * @return \Symfony\Component\HttpFoundation\Response
  1405.      */
  1406.     public function calculerSalaireAction( Request $request, Boutique $boutique)
  1407.     {
  1408.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  1409.            return $this->redirectToRoute('security_login');
  1410.         }      
  1411.         $em = $this->getDoctrine()
  1412.                     ->getManager();
  1413.         
  1414.         $user = $this->getUser();
  1415.         
  1416.         
  1417.         $rubriques = array();
  1418.         if($request->getMethod() == 'POST'){
  1419.             $idEmploye = $request->request->get('idEmploye');
  1420.             $mois = (int)$request->request->get('mois');
  1421.             $annee = $request->request->get('annee');
  1422.             $moyenDePaiement = $request->request->get('moyenDePaiement');
  1423.             $employe = $em->getRepository(UserBoutique::class)
  1424.                     ->findOneBy(
  1425.                         array(
  1426.                             'user' => $idEmploye,
  1427.                             'boutique' => $boutique->getId()
  1428.                         )    
  1429.                     );
  1430.             if($mois < 10){
  1431.                 $mois = '0'.$mois;
  1432.             }
  1433.             $dateDebutPaiementSalaire = $annee.'-'.$mois.'-01';
  1434.             $dateDebutPaiementSalaire = new \DateTime($dateDebutPaiementSalaire);
  1435.             $laDatePaiement = $annee.'-'.$mois.'-01';
  1436.             
  1437.             $datePaiementSalaire = new \DateTime($laDatePaiement);
  1438.             $datePaiementSalaire = $datePaiementSalaire->modify('last day of this month');
  1439.             $anncienete = $employe->getDateDePriseDeFonction()->diff($datePaiementSalaire);
  1440.             $nNombreDeJourDeTravail = 30;
  1441.             $nNombreDeJourDeConge = 0;
  1442.             
  1443.             //Salaire de base
  1444.             $salaireDeBase = $em->getRepository(RubriqueSalaireEmploye::class)
  1445.                                         ->findOneBy(
  1446.                                             array(
  1447.                                                 'boutique' => $boutique->getId(),
  1448.                                                 'user' => $employe->getUser()->getId(),
  1449.                                                 'designation' => 'SALAIRE DE BASE'
  1450.                                             )
  1451.                                         );
  1452.             
  1453.             
  1454.             $rSalaireDeBase = $salaireDeBase->getLaBase();
  1455.             
  1456.             //Congé
  1457.             $totaux = array();
  1458.             $conge = $em->getRepository(Conge::class)
  1459.                         ->dernierConge($boutique->getId(), $employe->getUser()->getId());
  1460.             $bFautAjouterCongePaye = false;
  1461.             if(!empty($conge)){
  1462.                 $dateDebut = $conge[0]->getDateDebut();
  1463.                 $dateDiff = $dateDebut->diff($datePaiementSalaire);
  1464.                 $nombreDeJour = $dateDiff->format("%a");
  1465.                 if($nombreDeJour > 0 && $nombreDeJour <= 30 ){
  1466.                     $totaux['dateDebutConge'] = $conge[0]->getDateDebut();
  1467.                     $totaux['dateFinConge'] = $conge[0]->getDateFin();
  1468.                     $nNombreDeJourDeConge =  $conge[0]->getNombreDeJour();
  1469.                     $bFautAjouterCongePaye = true;
  1470.                     if($datePaiementSalaire > $conge[0]->getDateDebut()){
  1471.                         $nNombreDeJourDeTravail -= $nNombreDeJourDeConge;
  1472.                     }
  1473.                     $rSalaireDeBase = ($salaireDeBase->getLaBase() * $nNombreDeJourDeTravail)/30;
  1474.                 }
  1475.             }
  1476.             $rubrique = array(
  1477.                     'code' => $salaireDeBase->getCode(),
  1478.                     'designation' => $salaireDeBase->getDesignation(),
  1479.                     'nombre' => $nNombreDeJourDeTravail,
  1480.                     'base' => $rSalaireDeBase,
  1481.                     'tauxSalarial' => 0,
  1482.                     'gainSalarial' => $rSalaireDeBase,
  1483.                     'retenueSalarial' => 0,
  1484.                     'tauxPatronal' => 0,
  1485.                     'gainPatronal' => 0,
  1486.                     'retenuePatronal' => 0
  1487.                 
  1488.                 );    
  1489.                 array_push($rubriques, $rubrique);
  1490.             
  1491.             
  1492.             $rIndemniteCongePaye = 0;
  1493.             if($bFautAjouterCongePaye){
  1494.                 $rIndemniteCongePaye = ($salaireDeBase->getLaBase() * 12 * $nNombreDeJourDeConge)/(10 * 30);
  1495.                 $rubrique = array(
  1496.                     'code' => '100',
  1497.                     'designation' => 'INDEMNITE CONGE PAYE',
  1498.                     'nombre' => $nNombreDeJourDeConge,
  1499.                     'base' => $rIndemniteCongePaye,
  1500.                     'tauxSalarial' => '',
  1501.                     'gainSalarial' => $rIndemniteCongePaye,
  1502.                     'retenueSalarial' => '',
  1503.                     'tauxPatronal' => '',
  1504.                     'gainPatronal' => '',
  1505.                     'retenuePatronal' => ''
  1506.                 
  1507.                 );
  1508.                 array_push($rubriques, $rubrique);
  1509.                 
  1510.             }
  1511.             //Sursalaire
  1512.             $surSalaire = $em->getRepository(RubriqueSalaireEmploye::class)
  1513.                                         ->findOneBy(
  1514.                                             array(
  1515.                                                 'boutique' => $boutique->getId(),
  1516.                                                 'user' => $employe->getUser()->getId(),
  1517.                                                 'designation' => 'SURSALAIRE'
  1518.                                             )
  1519.                                         );
  1520.             $rubrique = array(
  1521.                     'code' => $surSalaire->getCode(),
  1522.                     'designation' => $surSalaire->getDesignation(),
  1523.                     'nombre' => $nNombreDeJourDeTravail,
  1524.                     'base' => $surSalaire->getLaBase(),
  1525.                     'tauxSalarial' => '',
  1526.                     'gainSalarial' => $surSalaire->getLaBase(),
  1527.                     'retenueSalarial' => '',
  1528.                     'tauxPatronal' => '',
  1529.                     'gainPatronal' => '',
  1530.                     'retenuePatronal' => ''
  1531.                 
  1532.                 );    
  1533.                 array_push($rubriques, $rubrique);
  1534.         
  1535.             //
  1536.             // Ancienneté
  1537.             $anciennte = 0;
  1538.             $dateAnciennete = $datePaiementSalaire->diff($employe->getDateDePriseDeFonction());
  1539.             $anneeAnciennete = $dateAnciennete->format('%y');
  1540.             $moisAnciennete = $dateAnciennete->format('%m');
  1541.             if(($anneeAnciennete >= 2 && $moisAnciennete >= 1) || $anneeAnciennete > 2){
  1542.                 $anciennte = $anneeAnciennete;
  1543.             }
  1544.             $rMontantAnciennete = ($anciennte * $salaireDeBase->getLaBase())/100;
  1545.             $rubrique = array(
  1546.                         'code' => $salaireDeBase->getCode(),
  1547.                         'designation' => 'ANCIENNETE',
  1548.                         'nombre' => '',
  1549.                         'base' => $salaireDeBase->getLaBase(),
  1550.                         'tauxSalarial' => $anciennte,
  1551.                         'gainSalarial' => $rMontantAnciennete,
  1552.                         'retenueSalarial' => '',
  1553.                         'tauxPatronal' => '',
  1554.                         'gainPatronal' => '',
  1555.                         'retenuePatronal' => ''
  1556.                     
  1557.                     );    
  1558.             array_push($rubriques, $rubrique);
  1559.             $userBoutique = $em->getRepository(UserBoutique::class)
  1560.                             ->findOneBy(
  1561.                                 array(
  1562.                                 'user' => $user->getId(),
  1563.                                 'boutique' => $boutique->getId()
  1564.                                 )
  1565.                             );
  1566.             $rTotalBrut = $rSalaireDeBase +  $surSalaire->getLaBase() + $rMontantAnciennete + $rIndemniteCongePaye;
  1567.             $rubrique = array(
  1568.                         'code' => '',
  1569.                         'designation' => 'TOTAL BRUT',
  1570.                         'nombre' => '',
  1571.                         'base' => '',
  1572.                         'tauxSalarial' => '',
  1573.                         'gainSalarial' => $rTotalBrut,
  1574.                         'retenueSalarial' => '',
  1575.                         'tauxPatronal' => '',
  1576.                         'gainPatronal' => '',
  1577.                         'retenuePatronal' => ''
  1578.                     
  1579.                     );    
  1580.             array_push($rubriques, $rubrique);
  1581.             $rImpotNet = 0;
  1582.             $rTranche1 = 0;
  1583.             $rTranche2 = 0;
  1584.             if($rTotalBrut > 75000 && $rTotalBrut <= 240000){
  1585.                 $rTranche2 = (($rTotalBrut - 75000)*16)/100;
  1586.             }else{
  1587.                 if($rTotalBrut > 240000){
  1588.                     $rTranche2 = ((240000 - 75000)*16)/100;
  1589.                 }
  1590.             }
  1591.             $rTranche3 = 0;
  1592.             if ($rTotalBrut > 240000 && $rTotalBrut <= 800000){
  1593.                 $rTranche3 = (($rTotalBrut - 240000)*21)/100;
  1594.             }else{
  1595.                 if($rTotalBrut > 800000){
  1596.                     $rTranche3 = ((800000 - 240000)*21)/100;
  1597.                 }
  1598.             }
  1599.             $rTranche4  = 0;
  1600.             if($rTotalBrut > 800000 && $rTotalBrut <= 2400000){
  1601.                 $rTranche4 = (($rTotalBrut - 800000)*24)/100;
  1602.             } else{
  1603.                 if($rTotalBrut > 2400000){
  1604.                     $rTranche4 = ((2400000 - 800000)*24)/100;
  1605.                 }
  1606.             }
  1607.             $rTranche5 = 0;
  1608.             if($rTotalBrut > 2400000 && $rTotalBrut <= 8000000){
  1609.                 $rTranche5 = ((rTotalBrut - 2400000)*28)/100;
  1610.             } else{
  1611.                 if($rTotalBrut > 8000000){
  1612.                     $rTranche5 = ((8000000 - 2400000)*28)/100;
  1613.                 }
  1614.             }
  1615.             $rTranche6 = 0;
  1616.             if($rTotalBrut > 8000000){
  1617.                 $rTranche6 = ((rTotalBrut - 8000000)*32)/100;
  1618.             }
  1619.             $rImpotBrut = $rTranche1 + $rTranche2 + $rTranche3 + $rTranche4 + $rTranche5 + $rTranche6;
  1620.             
  1621.             $rPartIGR  = $employe->getIgr();
  1622.             $rReductionImpt1  = 0;
  1623.             $rReductionImpt2 = 0;
  1624.             if ($rPartIGR == 1.5){
  1625.                 $rReductionImpt2 = 5500;
  1626.             }
  1627.             $rReductionImpt3 = 0;
  1628.             if($rPartIGR == 2){
  1629.                 $rReductionImpt3 = 11000;
  1630.             }
  1631.             $rReductionImpt4 = 0;
  1632.             if($rPartIGR == 2.5){
  1633.                 $rReductionImpt4 = 16500;
  1634.             }
  1635.             $rReductionImpt5  = 0;
  1636.             if($rPartIGR == 3){
  1637.                 $rReductionImpt5 = 22000;
  1638.             }
  1639.             $rReductionImpt6 = 0;
  1640.             if($rPartIGR == 3.5){
  1641.                 $rReductionImpt6 = 27500;
  1642.             }
  1643.             $rReductionImpt7 = 0;
  1644.             if($rPartIGR == 4){
  1645.                 $rReductionImpt7 = 33000;
  1646.             }
  1647.             $rReductionImpt8 = 0;
  1648.             if($rPartIGR == 4.5){
  1649.                 $rReductionImpt8 = 38500;
  1650.             }
  1651.             $rReductionImpt9 = 0;
  1652.             if($rPartIGR == 5){
  1653.                 $rReductionImpt9 = 44000;
  1654.             }
  1655.             $rReduction = $rReductionImpt1 + $rReductionImpt2 + $rReductionImpt3 + $rReductionImpt4 + $rReductionImpt5 + $rReductionImpt6 + $rReductionImpt7 + $rReductionImpt8 + $rReductionImpt9;
  1656.             $rImpotNet = $rImpotBrut - $rReduction;
  1657.             if($rImpotNet <= 0){
  1658.                 $rImpotNet = 0;
  1659.             }
  1660.             $rubrique = array(
  1661.                         'code' => '04',
  1662.                         'designation' => 'IMPOT NET',
  1663.                         'nombre' => '',
  1664.                         'base' => '',
  1665.                         'tauxSalarial' => '',
  1666.                         'gainSalarial' => '',
  1667.                         'retenueSalarial' => $rImpotNet,
  1668.                         'tauxPatronal' => '',
  1669.                         'gainPatronal' => '',
  1670.                         'retenuePatronal' => ''
  1671.                     
  1672.                     );    
  1673.             array_push($rubriques, $rubrique);
  1674.             
  1675.             $rCNPSSalarie = 0;
  1676.             $rCNPSEmployeur = 0;
  1677.             $cnps = $em->getRepository(RubriqueSalaireEmploye::class)
  1678.                                             ->findOneBy(
  1679.                                                 array(
  1680.                                                     'boutique' => $boutique->getId(),
  1681.                                                     'user' => $employe->getUser()->getId(),
  1682.                                                     'designation' => 'CNPS'
  1683.                                                 )
  1684.                                             );
  1685.         $rCNPSSalarie = ($rTotalBrut * 6.3)/100;
  1686.         $rCNPSEmployeur = ($rTotalBrut * 7.7)/100;
  1687.         
  1688.         $rubrique = array(
  1689.                         'code' => $cnps->getCode(),
  1690.                         'designation' => $cnps->getDesignation(),
  1691.                         'nombre' => '',
  1692.                         'base' => $rTotalBrut,
  1693.                         'tauxSalarial' => 6.3,
  1694.                         'gainSalarial' => '',
  1695.                         'retenueSalarial' => $rCNPSSalarie,
  1696.                         'tauxPatronal' => 7.7,
  1697.                         'gainPatronal' => '',
  1698.                         'retenuePatronal' => $rCNPSEmployeur
  1699.                     
  1700.                     );    
  1701.         array_push($rubriques, $rubrique);
  1702.         $rCMU = 1000 + 1000 * $employe->getNombreDEnfant();
  1703.         $rCMUSalarie = $rCMU/2;
  1704.         $rCMUEmployeur = $rCMU/2;
  1705.         $cmu = $em->getRepository(RubriqueSalaireEmploye::class)
  1706.                                             ->findOneBy(
  1707.                                                 array(
  1708.                                                     'boutique' => $boutique->getId(),
  1709.                                                     'user' => $employe->getUser()->getId(),
  1710.                                                     'designation' => 'CMU'
  1711.                                                 )
  1712.                                             );
  1713.         
  1714.         $rubrique = array(
  1715.                         'code' => $cmu->getCode(),
  1716.                         'designation' => $cmu->getDesignation(),
  1717.                         'nombre' => '',
  1718.                         'base' => '',
  1719.                         'tauxSalarial' => '',
  1720.                         'gainSalarial' => '',
  1721.                         'retenueSalarial' => $rCMUSalarie,
  1722.                         'tauxPatronal' => '',
  1723.                         'gainPatronal' => '',
  1724.                         'retenuePatronal' => $rCMUEmployeur
  1725.                     
  1726.                     );
  1727.         
  1728.         array_push($rubriques, $rubrique);
  1729.         $rPrestationFamiliale = 0;
  1730.         $prestation = $em->getRepository(RubriqueSalaireEmploye::class)
  1731.                                             ->findOneBy(
  1732.                                                 array(
  1733.                                                     'boutique' => $boutique->getId(),
  1734.                                                     'user' => $employe->getUser()->getId(),
  1735.                                                     'designation' => 'PRESTATION FAMILIALE'
  1736.                                                 )
  1737.                                             );
  1738.         $rPrestationFamiliale = ($prestation->getLaBase() * $prestation->getTaux())/100;
  1739.         $rubrique = array(
  1740.                         'code' => $prestation->getCode(),
  1741.                         'designation' => $prestation->getDesignation(),
  1742.                         'nombre' => '',
  1743.                         'base' => $prestation->getLaBase(),
  1744.                         'tauxSalarial' => '',
  1745.                         'gainSalarial' => '',
  1746.                         'retenueSalarial' => '',
  1747.                         'tauxPatronal' => $prestation->getTaux(),
  1748.                         'gainPatronal' => '',
  1749.                         'retenuePatronal' => $rPrestationFamiliale
  1750.                     
  1751.                     );
  1752.         
  1753.         array_push($rubriques, $rubrique);
  1754.         $rAccidentDeTravail = 0;
  1755.         $accident = $em->getRepository(RubriqueSalaireEmploye::class)
  1756.                                             ->findOneBy(
  1757.                                                 array(
  1758.                                                     'boutique' => $boutique->getId(),
  1759.                                                     'user' => $employe->getUser()->getId(),
  1760.                                                     'designation' => 'ACCIDENT DE TRAVAIL'
  1761.                                                 )
  1762.                                             );
  1763.     $rAccidentDeTravail = ($accident->getLaBase() * $accident->getTaux())/100;
  1764.     $rubrique = array(
  1765.                         'code' => $accident->getCode(),
  1766.                         'designation' => $accident->getDesignation(),
  1767.                         'nombre' => '',
  1768.                         'base' => $accident->getLaBase(),
  1769.                         'tauxSalarial' => '',
  1770.                         'gainSalarial' => '',
  1771.                         'retenueSalarial' => '',
  1772.                         'tauxPatronal' => $accident->getTaux(),
  1773.                         'gainPatronal' => '',
  1774.                         'retenuePatronal' => $rAccidentDeTravail
  1775.                     
  1776.                     );
  1777.         
  1778.         array_push($rubriques, $rubrique);
  1779.         $rTaxeDApprentissage = 0;
  1780.         $taxeAppr = $em->getRepository(RubriqueSalaireEmploye::class)
  1781.                                             ->findOneBy(
  1782.                                                 array(
  1783.                                                     'boutique' => $boutique->getId(),
  1784.                                                     'user' => $employe->getUser()->getId(),
  1785.                                                     'designation' => 'TAXE D\'APPRENTISSAGE'
  1786.                                                 )
  1787.                                             );
  1788.     $rTaxeDApprentissage = ($rTotalBrut * $taxeAppr->getTaux())/100;
  1789.     $rubrique = array(
  1790.                         'code' => $taxeAppr->getCode(),
  1791.                         'designation' => $taxeAppr->getDesignation(),
  1792.                         'nombre' => '',
  1793.                         'base' => $rTotalBrut,
  1794.                         'tauxSalarial' => '',
  1795.                         'gainSalarial' => '',
  1796.                         'retenueSalarial' => '',
  1797.                         'tauxPatronal' => $taxeAppr->getTaux(),
  1798.                         'gainPatronal' => '',
  1799.                         'retenuePatronal' => $rTaxeDApprentissage
  1800.                     
  1801.                     );
  1802.         
  1803.         array_push($rubriques, $rubrique);
  1804.         $rFormationContinue = 0;
  1805.         $formationC = $em->getRepository(RubriqueSalaireEmploye::class)
  1806.                                             ->findOneBy(
  1807.                                                 array(
  1808.                                                     'boutique' => $boutique->getId(),
  1809.                                                     'user' => $employe->getUser()->getId(),
  1810.                                                     'designation' => 'FORMATION CONTINUE'
  1811.                                                 )
  1812.                                             );
  1813.     $rFormationContinue = ($rTotalBrut * $formationC->getTaux())/100;
  1814.     $rubrique = array(
  1815.                         'code' => $formationC->getCode(),
  1816.                         'designation' => $formationC->getDesignation(),
  1817.                         'nombre' => '',
  1818.                         'base' => $rTotalBrut,
  1819.                         'tauxSalarial' => '',
  1820.                         'gainSalarial' => '',
  1821.                         'retenueSalarial' => '',
  1822.                         'tauxPatronal' => $formationC->getTaux(),
  1823.                         'gainPatronal' => '',
  1824.                         'retenuePatronal' => $rFormationContinue
  1825.                     
  1826.                     );
  1827.         
  1828.         array_push($rubriques, $rubrique);
  1829.         $rCE = 0;
  1830.         $ce = $em->getRepository(RubriqueSalaireEmploye::class)
  1831.                                             ->findOneBy(
  1832.                                                 array(
  1833.                                                     'boutique' => $boutique->getId(),
  1834.                                                     'user' => $employe->getUser()->getId(),
  1835.                                                     'designation' => 'CE'
  1836.                                                 )
  1837.                                             );
  1838.     $rCE = ($rTotalBrut *2.8 )/100;
  1839.     $rubrique = array(
  1840.                         'code' => $ce->getCode(),
  1841.                         'designation' => $ce->getDesignation(),
  1842.                         'nombre' => '',
  1843.                         'base' => '',
  1844.                         'tauxSalarial' => '',
  1845.                         'gainSalarial' => '',
  1846.                         'retenueSalarial' => '',
  1847.                         'tauxPatronal' => 2.8,
  1848.                         'gainPatronal' => '',
  1849.                         'retenuePatronal' => $rCE
  1850.                     
  1851.                     );
  1852.         
  1853.         array_push($rubriques, $rubrique);
  1854.         $rChargeSalariales = $rImpotNet + $rCNPSSalarie + $rCMUSalarie;
  1855.         $rChargeEmployeur = $rCNPSEmployeur + $rCE + $rCMUEmployeur + $rPrestationFamiliale + $rAccidentDeTravail + $rTaxeDApprentissage + $rFormationContinue;
  1856.         
  1857.         $rubrique = array(
  1858.                         'code' => '',
  1859.                         'designation' => 'TOTAL COTISATION',
  1860.                         'nombre' => '',
  1861.                         'base' => '',
  1862.                         'tauxSalarial' => '',
  1863.                         'gainSalarial' => '',
  1864.                         'retenueSalarial' => $rChargeSalariales,
  1865.                         'tauxPatronal' => '',
  1866.                         'gainPatronal' => '',
  1867.                         'retenuePatronal' => $rChargeEmployeur
  1868.                     
  1869.                     );
  1870.         
  1871.         array_push($rubriques, $rubrique);
  1872.         $primeDeTransport = $em->getRepository(RubriqueSalaireEmploye::class)
  1873.                                             ->findOneBy(
  1874.                                                 array(
  1875.                                                     'boutique' => $boutique->getId(),
  1876.                                                     'user' => $employe->getUser()->getId(),
  1877.                                                     'designation' => 'PRIME DE TRANSPORT'
  1878.                                                 )
  1879.                                             );
  1880.     $rubrique = array(
  1881.                         'code' => $primeDeTransport->getCode(),
  1882.                         'designation' => $primeDeTransport->getDesignation(),
  1883.                         'nombre' => '',
  1884.                         'base' => $primeDeTransport->getLaBase(),
  1885.                         'tauxSalarial' => '',
  1886.                         'gainSalarial' => $primeDeTransport->getLaBase(),
  1887.                         'retenueSalarial' => '',
  1888.                         'tauxPatronal' => '',
  1889.                         'gainPatronal' => '',
  1890.                         'retenuePatronal' => ''
  1891.                     
  1892.                     );
  1893.         
  1894.         array_push($rubriques, $rubrique);
  1895.     $rPrimeDeSalissure = 0;
  1896.     $salissure = $em->getRepository(RubriqueSalaireEmploye::class)
  1897.                                             ->findOneBy(
  1898.                                                 array(
  1899.                                                     'boutique' => $boutique->getId(),
  1900.                                                     'user' => $employe->getUser()->getId(),
  1901.                                                     'designation' => 'PRIME DE SALISSURE'
  1902.                                                 )
  1903.                                             );
  1904.     if($salissure != null){
  1905.         $rPrimeDeSalissure = $salissure->getLaBase() * 7;
  1906.         if($rPrimeDeSalissure > 0){ 
  1907.             
  1908.         $rubrique = array(
  1909.                             'code' => $salissure->getCode(),
  1910.                             'designation' => $salissure->getDesignation(),
  1911.                             'nombre' => 7,
  1912.                             'base' => $salissure->getLaBase(),
  1913.                             'tauxSalarial' => '',
  1914.                             'gainSalarial' => $rPrimeDeSalissure,
  1915.                             'retenueSalarial' => '',
  1916.                             'tauxPatronal' => '',
  1917.                             'gainPatronal' => '',
  1918.                             'retenuePatronal' => ''
  1919.                         
  1920.                         );
  1921.             
  1922.             array_push($rubriques, $rubrique);
  1923.         }
  1924.     }
  1925.         $rPrimeDeTenue = 0;
  1926.         $tenue = $em->getRepository(RubriqueSalaireEmploye::class)
  1927.                                             ->findOneBy(
  1928.                                                 array(
  1929.                                                     'boutique' => $boutique->getId(),
  1930.                                                     'user' => $employe->getUser()->getId(),
  1931.                                                     'designation' => 'PRIME DE TENUE'
  1932.                                                 )
  1933.                                             );
  1934.         if($tenue != null){
  1935.             $rPrimeDeTenue = $tenue->getLaBase() * 3;
  1936.             if($rPrimeDeTenue > 0){
  1937.                 
  1938.                 $rubrique = array(
  1939.                                 'code' => $tenue->getCode(),
  1940.                                 'designation' => $tenue->getDesignation(),
  1941.                                 'nombre' => 3,
  1942.                                 'base' => $tenue->getLaBase(),
  1943.                                 'tauxSalarial' => '',
  1944.                                 'gainSalarial' => $rPrimeDeTenue,
  1945.                                 'retenueSalarial' => '',
  1946.                                 'tauxPatronal' => '',
  1947.                                 'gainPatronal' => '',
  1948.                                 'retenuePatronal' => ''
  1949.                             
  1950.                             );
  1951.                 
  1952.                 array_push($rubriques, $rubrique);
  1953.             }
  1954.         }
  1955.     //Heures supplementaires
  1956.     $heureDeTravail = $em->getRepository(PresenceEmployeUser::class)
  1957.                             ->heureDeTravail($boutique, $dateDebutPaiementSalaire, $datePaiementSalaire);
  1958.     $heuresSupplementaires = 0;
  1959.     $heuresTravaillees = 0;
  1960.         $rTauxHoraire = 470;
  1961.         $rValeureuresSupplementaires = 0;
  1962.         if(!empty($heureDeTravail)){
  1963.             $lesHeurs = (float)$heureDeTravail[0]['heureSupplementaire'];
  1964.             $heuresTravaillees = $heureDeTravail[0]['tempsDeTravail'];
  1965.             $heuresSupplementaires =  $heureDeTravail[0]['heureSupplementaire'];
  1966.             if( $lesHeurs> 0){
  1967.                     $rValeureuresSupplementaires = $lesHeurs *  $rTauxHoraire * (1.25);
  1968.             
  1969.                     $rubrique = array(
  1970.                                 'code' => '00',
  1971.                                 'designation' => 'HEURES SUPPLEMENTAIRES',
  1972.                                 'nombre' => $lesHeurs,
  1973.                                 'base' => $rTauxHoraire,
  1974.                                 'tauxSalarial' => '',
  1975.                                 'gainSalarial' => $rValeureuresSupplementaires,
  1976.                                 'retenueSalarial' => '',
  1977.                                 'tauxPatronal' => '',
  1978.                                 'gainPatronal' => '',
  1979.                                 'retenuePatronal' => ''
  1980.                             
  1981.                             );
  1982.                 
  1983.                 array_push($rubriques, $rubrique);
  1984.             }
  1985.         }
  1986.         $supprimerPaiementSalaireDUnMoisDunEmploye = $em->getRepository(RubriqueSalairePaiement::class)
  1987.                                                     ->findBy(
  1988.                                                         array(
  1989.                                                             'boutique' => $boutique->getId(),
  1990.                                                             'user' => $employe->getUser()->getId(),
  1991.                                                             'moisPaiementSalaire' =>$mois,
  1992.                                                             'anneePaiementSalaire' => $annee
  1993.                                                         )
  1994.                                                     );
  1995.         foreach($supprimerPaiementSalaireDUnMoisDunEmploye as $rb){
  1996.             $em->remove($rb);
  1997.         }
  1998.         $em->flush();
  1999.         foreach($rubriques as $rub){
  2000.             $rubriqueSalairePaiement = new RubriqueSalairePaiement;
  2001.             $rubriqueSalairePaiement->setBoutique($boutique);
  2002.             $rubriqueSalairePaiement->setUser($employe->getUser());
  2003.             $rubriqueSalairePaiement->setCode($rub['code']);
  2004.             $rubriqueSalairePaiement->setDesignation($rub['designation']);
  2005.             $rubriqueSalairePaiement->setNombre((float)$rub['nombre']);
  2006.             $rubriqueSalairePaiement->setLaBase((float)$rub['base']);
  2007.             $rubriqueSalairePaiement->setTauxSalarial((float)$rub['tauxSalarial']);
  2008.             $rubriqueSalairePaiement->setGainSalarial((float)$rub['gainSalarial']);
  2009.             $rubriqueSalairePaiement->setRetenueSalarial((float)$rub['retenueSalarial']);
  2010.             $rubriqueSalairePaiement->setTauxPatronal((float)$rub['tauxPatronal']);
  2011.             $rubriqueSalairePaiement->setGainPatronal((float)$rub['gainPatronal']);
  2012.             $rubriqueSalairePaiement->setRetenuePatronal((float)$rub['retenuePatronal']);
  2013.             $rubriqueSalairePaiement->setMoisPaiementSalaire($mois);
  2014.             $rubriqueSalairePaiement->setAnneePaiementSalaire($annee);
  2015.             $rubriqueSalairePaiement->setDatePaiementSalaire(new \DateTime());
  2016.             $em->persist($rubriqueSalairePaiement);
  2017.         }
  2018.         $em->flush();
  2019.         $paiementSalaireASupprimer = $em->getRepository(PaiementSalaire::class)
  2020.                                         ->findOneBy(
  2021.                                             array(
  2022.                                                 'boutique' => $boutique->getId(),
  2023.                                                 'user' =>$employe->getUser()->getId(),
  2024.                                                 'moisSalaire' =>$mois,
  2025.                                                 'anneeSalaire' => $annee
  2026.                                             )
  2027.                                         );
  2028.         if($paiementSalaireASupprimer != null){
  2029.             $em->remove($paiementSalaireASupprimer);
  2030.             $em->flush();
  2031.         }
  2032.         $salaireNetAPayer = $rTotalBrut - $rChargeSalariales + $primeDeTransport->getLaBase();
  2033.         $paiementSalaire = new PaiementSalaire;
  2034.         $paiementSalaire->setBoutique($boutique);
  2035.         $paiementSalaire->setUser($employe->getUser());
  2036.         $paiementSalaire->setSalaireBrut($rTotalBrut);
  2037.         $paiementSalaire->setChargesSalariales($rChargeSalariales);
  2038.         $paiementSalaire->setChargesPatronales($rChargeEmployeur);
  2039.         $paiementSalaire->setHeuresTravaillees($heuresTravaillees);
  2040.         $paiementSalaire->setHeuresSupplementaires($heuresSupplementaires);
  2041.         $paiementSalaire->setSalaireNetAPayer($salaireNetAPayer);
  2042.         $paiementSalaire->setDatePaiementFinDuMois($datePaiementSalaire);
  2043.         $paiementSalaire->setMoisSalaire($mois);
  2044.         $paiementSalaire->setAnneeSalaire($annee);
  2045.         $cumulElementPaiementSalaire = $em->getRepository(PaiementSalaire::class)
  2046.                                         ->cumulElementPaiementSalaire($boutique->getId(), $employe->getUser()->getId(), new \DateTime());
  2047.         
  2048.         $cumulSalaireBrut = $rTotalBrut + (float)$cumulElementPaiementSalaire['0']['cumulSalaireBrut'];
  2049.         $paiementSalaire->setCumulSalaireBrut($cumulSalaireBrut);
  2050.         
  2051.         $cumulChargesSalariales = $rChargeSalariales + (float)$cumulElementPaiementSalaire['0']['cumulChargesSalariales'];
  2052.         $paiementSalaire->setCumulChargesSalariales($cumulChargesSalariales);
  2053.         $cumulChargesPatronales = $rChargeEmployeur + (float)$cumulElementPaiementSalaire['0']['cumulChargesPatronales'];
  2054.         $paiementSalaire->setCumulChargesPatronales($cumulChargesPatronales);
  2055.         $cumulHeuresTravaillees =  $heuresTravaillees + (float)$cumulElementPaiementSalaire['0']['cumulHeuresTravaillees'];
  2056.         $paiementSalaire->setCumulHeuresTravaillees($cumulHeuresTravaillees);
  2057.         $cumulHeuresSupplementaires = $heuresSupplementaires + (float)$cumulElementPaiementSalaire['0']['cumulHeuresSupplementaires'];
  2058.         $paiementSalaire->setCumulHeuresSupplementaires($cumulHeuresSupplementaires);
  2059.         $cumulSalaireNetAPayer = $salaireNetAPayer + (float)$cumulElementPaiementSalaire['0']['cumulSalaireNetAPayer'];
  2060.         $paiementSalaire->setCumulSalaireNetAPayer($cumulSalaireNetAPayer);
  2061.         $em->persist($paiementSalaire);
  2062.         $em->flush();
  2063. }
  2064.         return $this->render('admin/calculer_salaire.html.twig', [
  2065.            'boutique' => $boutique,
  2066.            'userBoutique' => $userBoutique
  2067.         ]);
  2068.     }
  2069.     /**
  2070.      * @Route("/{slug}/rh/imprimer-bulletin-salaire/{employe}/{dateDebut}/{dateFin}/{moyenDePaiement}", name="admin_imprimer_bulletin_salaire")
  2071.      * @return \Symfony\Component\HttpFoundation\Response
  2072.      */
  2073.     public function imprimerBulletinSalaireAction( Request $request, Boutique $boutique, $employe = 0, $dateDebut = '', $dateFin = '', $moyenDePaiement = '')
  2074.     {
  2075.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2076.            return $this->redirectToRoute('security_login');
  2077.         }  
  2078.         $em = $this->getDoctrine()
  2079.                     ->getManager();
  2080.         
  2081.         $user = $this->getUser();
  2082.         $employe = $em->getRepository(UserBoutique::class)
  2083.                     ->findOneBy(
  2084.                         array(
  2085.                             'boutique' => $boutique,
  2086.                             'user' => $employe
  2087.                         )
  2088.                     );
  2089.         $dateDebut = new \DateTime($dateDebut);
  2090.         $dateFin = new \DateTime($dateFin);
  2091.         $userBoutique = $em->getRepository(UserBoutique::class)
  2092.                         ->findOneBy(
  2093.                             array(
  2094.                             'user' => $user->getId(),
  2095.                             'boutique' => $boutique->getId()
  2096.                             )
  2097.                         );
  2098.         
  2099.         $rubriques = $em->getRepository(RubriqueSalairePaiement::class)
  2100.                                         ->findBy(
  2101.                                             array(
  2102.                                                 'boutique' => $boutique->getId(),
  2103.                                                 'user' => $employe->getUser()->getId(),
  2104.                                                 'moisPaiementSalaire' => $dateDebut->format('m'),
  2105.                                                 'anneePaiementSalaire' => $dateDebut->format('Y')
  2106.                                             )
  2107.                                         );
  2108.         $paiementSalaire = $em->getRepository(PaiementSalaire::class)
  2109.                                         ->findOneBy(
  2110.                                             array(
  2111.                                                 'boutique' => $boutique->getId(),
  2112.                                                 'user' =>$employe->getUser()->getId(),
  2113.                                                 'moisSalaire' =>$dateDebut->format('m'),
  2114.                                                 'anneeSalaire' => $dateDebut->format('Y')
  2115.                                             )
  2116.                                         );
  2117.         
  2118.         $pdf = new Html2Pdf('P', 'A4', 'fr');
  2119.         $content = $this->renderView('pdf/bulletin_de_salaire.html.twig', [
  2120.                         'boutique' => $boutique,
  2121.                         'dateDebut' => $dateDebut,
  2122.                         'dateFin' => $dateFin,
  2123.                         'moyenDePaiement' => $moyenDePaiement,
  2124.                         'rubriques' => $rubriques,
  2125.                         'employe' => $employe,
  2126.                         'paiementSalaire' => $paiementSalaire
  2127.                     ]);
  2128.         $pdf->writeHTML($content);
  2129.         $name = $employe->getUser()->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
  2130.         $photo = new Photo;
  2131.         $lienPhysique = $photo->getUploadRootDir().$name;
  2132.                 
  2133.         $pdf->output($lienPhysique, 'I');
  2134.         
  2135.         return $this->render('pdf/bulletin_de_salaire.html.twig', [
  2136.            'boutique' => $boutique,
  2137.             'rubriques' => $rubriques,
  2138.            'userBoutique' => $userBoutique
  2139.         ]);
  2140.     }
  2141.     /**
  2142.      * @Route("/{slug}/rh/rubriques-salaires", name="admin_rubriques_slaires")
  2143.      * @return \Symfony\Component\HttpFoundation\Response
  2144.      */
  2145.     public function rubriquesSalairesAction( Request $request, Boutique $boutique)
  2146.     {
  2147.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2148.            return $this->redirectToRoute('security_login');
  2149.         }  
  2150.         $em = $this->getDoctrine()
  2151.                     ->getManager();
  2152.         
  2153.         $user = $this->getUser();
  2154.         
  2155.         
  2156.         $rubriquesSalaires = $em->getRepository(RubriqueSalaire::class)
  2157.                     ->findBy(
  2158.                         array(
  2159.                             'boutique' => $boutique->getId(),
  2160.                             
  2161.                         )
  2162.                     );
  2163.         
  2164.         
  2165.         $userBoutique = $em->getRepository(UserBoutique::class)
  2166.                         ->findOneBy(
  2167.                             array(
  2168.                             'user' => $user->getId(),
  2169.                             'boutique' => $boutique->getId()
  2170.                             )
  2171.                         );
  2172.         
  2173.         
  2174.         return $this->render('admin/rubriques_slaires.html.twig', [
  2175.            'boutique' => $boutique,
  2176.             'rubriquesSalaires' => $rubriquesSalaires,
  2177.            'userBoutique' => $userBoutique
  2178.         ]);
  2179.     }
  2180.     
  2181.     
  2182.     /**
  2183.      * @Route("/{slug}/rh/editer-rubriques-salaires-employer/{id}", name="admin_editer_rubriques_slaires_employe")
  2184.      * @return \Symfony\Component\HttpFoundation\Response
  2185.      */
  2186.     public function editerRubriquesSalairesEmployeAction( Request $request,  $slug, $id)
  2187.     {
  2188.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2189.            return $this->redirectToRoute('security_login');
  2190.         }      
  2191.         $em = $this->getDoctrine()
  2192.                     ->getManager();
  2193.         
  2194.         $user = $this->getUser();
  2195.         $boutique = $em->getRepository(Boutique::class)
  2196.                     ->findOneBySlug($slug);
  2197.         
  2198.         
  2199.         $rubriquesSalaires = $em->getRepository(RubriqueSalaire::class)
  2200.                     ->findBy(
  2201.                         array(
  2202.                             'boutique' => $boutique->getId(),    
  2203.                         )
  2204.                     );
  2205.         
  2206.         $employe = $em->getRepository(AppUser::class)
  2207.                     ->findOneById($id);
  2208.         $rubriqueSalaireEmployes = $em->getRepository(RubriqueSalaireEmploye::class)
  2209.                                 ->findBy(
  2210.                                     array(
  2211.                                         'boutique' => $boutique,
  2212.                                         'user' => $employe
  2213.                                     )
  2214.                                 );
  2215.         $lesRubriques = array();
  2216.         
  2217.         foreach($rubriquesSalaires as $rubriquesSalaire){
  2218.             $estDeDans = false;
  2219.             if(empty($rubriqueSalaireEmployes))
  2220.             {
  2221.                 $r = array(
  2222.                             'code' => $rubriquesSalaire->getCode(),
  2223.                             'designation' =>  $rubriquesSalaire->getDesignation(),
  2224.                             'laBase' => '',
  2225.                             'taux' =>  '',
  2226.                             'part' => $rubriquesSalaire->getPart(),
  2227.                             'gainOuRetenu' => $rubriquesSalaire->getGainOuRetenu(),
  2228.                             'existeDeja' => false
  2229.                         );
  2230.                     array_push($lesRubriques, $r);
  2231.             }else{
  2232.                 $taux = 0;
  2233.             $laBase = 0;
  2234.             $existeDeja = false;
  2235.             foreach($rubriqueSalaireEmployes as $rubriqueSalaireEmploye){
  2236.                     
  2237.                 if($rubriqueSalaireEmploye->getCode() == $rubriquesSalaire->getCode()){
  2238.                     //existe_deja permet de savoir si le
  2239.                     $taux = $rubriqueSalaireEmploye->getTaux();
  2240.                     $laBase = $rubriqueSalaireEmploye->getLaBase();
  2241.                     $existeDeja = true;
  2242.                 }else{
  2243.                     $existeDeja = false;
  2244.                 }
  2245.             }
  2246.             $r = array(
  2247.                     'code' => $rubriquesSalaire->getCode(),
  2248.                     'designation' => $rubriquesSalaire->getDesignation(),
  2249.                     'laBase' => $laBase,
  2250.                     'taux'  => $taux,
  2251.                     'part' =>$rubriquesSalaire->getPart(),
  2252.                     'gainOuRetenu' => $rubriquesSalaire->getGainOuRetenu(),
  2253.                     'existeDeja' => $existeDeja
  2254.                 );
  2255.             array_push($lesRubriques, $r);
  2256.             }
  2257.             
  2258.         }
  2259.         if($request->getMethod() == 'POST'){
  2260.             $i = 0;
  2261.             foreach($rubriquesSalaires as $rubriquesSalaire){
  2262.                 $i++;
  2263.                 $laBase = (float)$request->request->get('la_base'.$i);
  2264.                 $taux =  (float)$request->request->get('taux'.$i);
  2265.                 $existeDeja = (bool)$request->request->get('existe_deja'.$i);
  2266.                 $rubrique = $em->getRepository(RubriqueSalaireEmploye::class)
  2267.                                 ->findOneBy(
  2268.                                     array(
  2269.                                         'boutique' => $boutique,
  2270.                                         'user' => $employe,
  2271.                                         'code' =>$rubriquesSalaire->getCode()
  2272.                                     )
  2273.                                 );
  2274.                 if($rubrique == null){
  2275.                     $rubrique = new RubriqueSalaireEmploye;
  2276.                     $rubrique->setUser($employe);
  2277.                     $rubrique->setBoutique($boutique);
  2278.                     $rubrique->setCode($rubriquesSalaire->getCode());
  2279.                     $rubrique->setDesignation($rubriquesSalaire->getDesignation());
  2280.                     $rubrique->setPart($rubriquesSalaire->getPart());
  2281.                     $rubrique->setGainOuRetenu($rubriquesSalaire->getGainOuRetenu());
  2282.                 }
  2283.                 
  2284.                 $rubrique->setLaBase($laBase);
  2285.                 $rubrique->setTaux($taux);
  2286.                 $em->persist($rubrique);
  2287.                 $em->flush();
  2288.                 
  2289.                 
  2290.                 
  2291.             }
  2292.             return $this->redirectToRoute('admin_rh_salaires', array('slug' => $boutique->getSlug()));
  2293.         }
  2294.         $userBoutique = $em->getRepository(UserBoutique::class)
  2295.                         ->findOneBy(
  2296.                             array(
  2297.                             'user' => $user->getId(),
  2298.                             'boutique' => $boutique->getId()
  2299.                             )
  2300.                         );
  2301.         
  2302.         
  2303.         return $this->render('admin/editer_rubriques_slaires_employe.html.twig', [
  2304.            'boutique' => $boutique,
  2305.             'rubriquesSalaires' => $rubriquesSalaires,
  2306.            'userBoutique' => $userBoutique,
  2307.            'employe' => $employe,
  2308.            'rubriqueSalaireEmployes' => $rubriqueSalaireEmployes,
  2309.            'lesRubriques' => $lesRubriques
  2310.         ]);
  2311.     }
  2312.     /**
  2313.      * @Route("/{slug}/rh/rubriques-salaires/nouveau", name="admin_nouvelle_rubrique_slaire")
  2314.      * @return \Symfony\Component\HttpFoundation\Response
  2315.      */
  2316.     public function nouvelleRubriqueSalaireAction( Request $request, Boutique $boutique)
  2317.     {
  2318.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2319.            return $this->redirectToRoute('security_login');
  2320.         }      
  2321.         $em = $this->getDoctrine()
  2322.                     ->getManager();
  2323.         
  2324.         $user = $this->getUser();
  2325.         
  2326.         $rubriquesSalaire = new RubriqueSalaire;
  2327.         $form = $this->createForm(RubriqueSalaireType::class, $rubriquesSalaire);
  2328.         
  2329.         if($request->getMethod() == 'POST'){
  2330.             $form->handleRequest($request);
  2331.             if($form->isValid()){
  2332.                    
  2333.                 $rubriquesSalaire->setBoutique($boutique);
  2334.                    
  2335.                 $em->persist($rubriquesSalaire);
  2336.                 $em->flush();
  2337.                 
  2338.                 $ok_soumission =" Votre message a été pris en compte";
  2339.                     
  2340.                 
  2341.                 $rubriquesSalaire = new RubriqueSalaire;
  2342.                 $form = $this->createForm(RubriqueSalaireType::class, $rubriquesSalaire);
  2343.                     
  2344.                 } else {
  2345.                     $error =" Veillez corrigez vos erreurs";
  2346.                 }
  2347.                 
  2348.         
  2349.         }
  2350.         $userBoutique = $em->getRepository(UserBoutique::class)
  2351.                         ->findOneBy(
  2352.                             array(
  2353.                             'user' => $user->getId(),
  2354.                             'boutique' => $boutique->getId()
  2355.                             )
  2356.                         );
  2357.         
  2358.         
  2359.         return $this->render('admin/nouvelle_rubrique_salaire.html.twig', [
  2360.            'boutique' => $boutique,
  2361.             
  2362.            'userBoutique' => $userBoutique,
  2363.            'form' =>$form->createView()
  2364.         ]);
  2365.     }
  2366.     
  2367.     /**
  2368.      * @Route("/{slug}/rh/rubriques-salaires/modifier/{id}", name="admin_modifier_rubrique_salaire")
  2369.      * @return \Symfony\Component\HttpFoundation\Response
  2370.      */
  2371.     public function modifierRubriqueSalaireAction( Request $request, $slug, $id)
  2372.     {
  2373.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2374.            return $this->redirectToRoute('security_login');
  2375.         }      
  2376.         $em = $this->getDoctrine()
  2377.                     ->getManager();
  2378.         
  2379.         $user = $this->getUser();
  2380.         $boutique = $em->getRepository(Boutique::class)
  2381.                                 ->findOneBySlug($slug);
  2382.         
  2383.         $rubriqueSalaire = $em->getRepository(RubriqueSalaire::class)
  2384.                                 ->findOneById($id);
  2385.         $form = $this->createForm(RubriqueSalaireEditType::class, $rubriqueSalaire);
  2386.         
  2387.         if($request->getMethod() == 'POST'){
  2388.             $form->handleRequest($request);
  2389.             if($form->isValid()){
  2390.     
  2391.                 $em->flush();
  2392.                 
  2393.                 $ok_soumission =" Votre message a été pris en compte";
  2394.                     
  2395.                 } else {
  2396.                     $error =" Veillez corrigez vos erreurs";
  2397.                 }
  2398.                 
  2399.         
  2400.         }
  2401.         $userBoutique = $em->getRepository(UserBoutique::class)
  2402.                         ->findOneBy(
  2403.                             array(
  2404.                             'user' => $user->getId(),
  2405.                             'boutique' => $boutique->getId()
  2406.                             )
  2407.                         );
  2408.         
  2409.         
  2410.         return $this->render('admin/modifier_rubrique_salaire.html.twig', [
  2411.            'boutique' => $boutique,
  2412.            'userBoutique' => $userBoutique,
  2413.            'form' =>$form->createView()
  2414.         ]);
  2415.     }
  2416.     /**
  2417.      * @Route("/{slug}/rh/rubriques-salaires/supprimer/{id}", name="admin_supprimer_rubrique_salaire")
  2418.      * @return \Symfony\Component\HttpFoundation\Response
  2419.      */
  2420.     public function supprimerRubriqueSalaireAction( Request $request,  $slug, $id)
  2421.     {
  2422.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2423.            return $this->redirectToRoute('security_login');
  2424.         }      
  2425.         $em = $this->getDoctrine()
  2426.                     ->getManager();
  2427.         
  2428.         $user = $this->getUser();
  2429.         $boutique = $em->getRepository(Boutique::class)
  2430.                                 ->findOneBySlug($slug);
  2431.         
  2432.         $rubriquesSalaire = $em->getRepository(RubriqueSalaire::class)
  2433.                                 ->findOneById($id);
  2434.     
  2435.         if(null !== $rubriquesSalaire){
  2436.             $em->remove($rubriquesSalaire);
  2437.             $em->flush();
  2438.         }
  2439.         
  2440.         return $this->redirectToRoute('admin_rubriques_slaires', array('slug'=>$boutique->getSlug()));
  2441.     }
  2442.     /**
  2443.      * @Route("/{slug}/rh/conges", name="admin_conges")
  2444.      * @return \Symfony\Component\HttpFoundation\Response
  2445.      */
  2446.     public function congesAction( Request $request, Boutique $boutique)
  2447.     {
  2448.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2449.            return $this->redirectToRoute('security_login');
  2450.         }  
  2451.         $em = $this->getDoctrine()
  2452.                     ->getManager();
  2453.         
  2454.         $user = $this->getUser();
  2455.     
  2456.         $userBoutiques = $em->getRepository(UserBoutique::class)
  2457.                             ->findBy(
  2458.                                 array(
  2459.                                     'boutique' => $boutique->getId(),
  2460.                                     'estParti' => false
  2461.                                 )
  2462.                             );
  2463.         
  2464.         $userBoutique = $em->getRepository(UserBoutique::class)
  2465.                         ->findOneBy(
  2466.                             array(
  2467.                             'user' => $user->getId(),
  2468.                             'boutique' => $boutique->getId()
  2469.                             )
  2470.                         );
  2471.         
  2472.         $employes = array();
  2473.         foreach($userBoutiques as $ub){
  2474.             $e = array(
  2475.                 'id' =>$ub->getUser()->getId(),
  2476.                 'name' =>$ub->getUser()->getNom().' '.$ub->getUser()->getPrenom(),
  2477.                 'department' => $ub->getDepartementEmploi()
  2478.             );
  2479.             array_push($employes, $e);
  2480.         }
  2481.         $employes = json_encode($employes);
  2482.         $conges = $em->getRepository(Conge::class)
  2483.                     ->findBy(
  2484.                         array(
  2485.                         'boutique' => $boutique->getId()
  2486.                         )
  2487.                     );
  2488.         $cgs = array();
  2489.         foreach($conges as $conge){
  2490.             $cg = array(
  2491.                 'id' => $conge->getId(),
  2492.                 'employeeId' =>$conge->getUser()->getId(),
  2493.                 'employeeName' => $conge->getUser()->getNom(). ' '.$conge->getUser()->getPrenom(),
  2494.                 'type' => $conge->getTypeConge(),
  2495.                 'startDate' => $conge->getDateDebut()->format('Y-m-d'),
  2496.                 'endDate' => $conge->getDateFin()->format('Y-m-d'),
  2497.                 'notes' => $conge->getNotes()
  2498.             );
  2499.             array_push($cgs, $cg);
  2500.         }
  2501.         return $this->render('admin/conges.html.twig', [
  2502.            'boutique' => $boutique,
  2503.            'userBoutiques' => $userBoutiques,
  2504.            'userBoutique' => $userBoutique,
  2505.            'employes' => $employes,
  2506.            'conges' => json_encode($cgs)
  2507.         ]);
  2508.         
  2509.     }    
  2510.     /**
  2511.      * @Route("/{slug}/rh/nouveau-conge", name="admin_rh_nouveau_conge")
  2512.      * @return \Symfony\Component\HttpFoundation\Response
  2513.      */
  2514.     public function nouveauCongeAction( Request $request,  $slug)
  2515.     {
  2516.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2517.            return $this->redirectToRoute('security_login');
  2518.         }
  2519.         $em = $this->getDoctrine()
  2520.                     ->getManager();
  2521.         $boutique = $em->getRepository(Boutique::class)
  2522.                         ->findOneBySlug($slug);
  2523.         $user = $this->getUser();
  2524.         
  2525.         if($request->getMethod() == 'POST'){
  2526.             $employe = $request->request->get('employe');
  2527.             $employe = $em->getRepository(UserBoutique::class)
  2528.                     ->findOneBy(
  2529.                         array(
  2530.                             'boutique' => $boutique->getId(),
  2531.                             'user'=>$employe
  2532.                         )
  2533.                     );
  2534.             $typeConge = $request->request->get('typeConge');
  2535.             $notes = $request->request->get('notes');
  2536.             $dateDebut = $request->request->get('dateDebut');
  2537.             $dateDebut = new \DateTime($dateDebut);
  2538.         
  2539.             $dateFin = $request->request->get('dateFin');
  2540.                 
  2541.             $dateFin = new \DateTime($dateFin);
  2542.             $conge = new Conge;
  2543.             $conge->setDateDebut($dateDebut);
  2544.             $conge->setDateFin($dateFin);
  2545.             $conge->setTypeConge($typeConge);
  2546.             $conge->setNotes($notes);
  2547.             $conge->setUser($employe->getUser());
  2548.             $conge->setBoutique($boutique);
  2549.             
  2550.             $conge->setAnnee($dateDebut->format('Y'));
  2551.             $conge->setMois($dateDebut->format('m'));
  2552.             $nombreDeJour = $dateFin->diff($dateDebut)->format("%a");
  2553.             $conge->setNombreDeJour($nombreDeJour);
  2554.             $em->persist($conge);
  2555.             $em->flush();
  2556.             return $this->redirectToRoute('admin_conges', array('slug'=>$boutique->getSlug()));
  2557.         }
  2558.         $userBoutique = $em->getRepository(UserBoutique::class)
  2559.                         ->findOneBy(
  2560.                             array(
  2561.                             'user' => $user->getId(),
  2562.                             'boutique' => $boutique->getId()
  2563.                             )
  2564.                         );
  2565.         
  2566.         
  2567.         return $this->render('admin/nouveau_conge.html.twig', [
  2568.            'boutique' => $boutique,
  2569.            'userBoutique' => $userBoutique,
  2570.         ]);
  2571.     }
  2572.     /**
  2573.      * @Route("/{slug}/rh/nouvel-employe", name="admin.nouvel_employe")
  2574.      * @return \Symfony\Component\HttpFoundation\Response
  2575.     */
  2576.     public function nouvelEmployeAction(Request $request, UserPasswordHasherInterface $passwordHasher, Boutique $boutique)
  2577.     {
  2578.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2579.            return $this->redirectToRoute('security_login');
  2580.         }
  2581.         $em = $this->getDoctrine()
  2582.                     ->getManager();
  2583.         $employe = new AppUser;
  2584.         $form = $this->createForm(EmployeType::class, $employe);
  2585.         $error = '';
  2586.         $droits = DroitUtilisateur::getDroits();
  2587.         $ok_submission = '';
  2588.         if('POST' == $request->getMethod()){
  2589.             $form->handleRequest($request);
  2590.             if($form->isValid()){
  2591.                 $employe->setUsername($form->getData()->getNom().$form->getData()->getPrenom().time());
  2592.                 $roles = $employe->getRoles();
  2593.                 $roles[] = 'ROLE_EMPLOYE';
  2594.                 $employe->setRoles($roles);
  2595.                 $employe->setEnabled(true);
  2596.                 $employe->setBoutique($boutique);
  2597.                 $email = $form->getData()->getEmail();
  2598.                 if($email == ''){
  2599.                     $employe->setEmail($form->getData()->getNom().$form->getData()->getPrenom().time());
  2600.                 }
  2601.                 $motDePasse = $request->request->get('mot_de_passe');
  2602.                 $motDePasse = $request->request->get('mot_de_passe');
  2603.                 
  2604.                 $sexe = $request->request->get('sexe');
  2605.                 
  2606.                 $hashedPassword = $passwordHasher->hashPassword($employe, $motDePasse);
  2607.                 $employe->setPassword($hashedPassword);
  2608.                 $employe->setSexe($sexe);
  2609.                 $em->persist($employe);
  2610.                 $em->flush();
  2611.                 
  2612.                 $matricule = $request->request->get('matricule');
  2613.                 $salaire = (float)$request->request->get('salaire');
  2614.                 $laFonction = $request->request->get('la_fonction');
  2615.                 $laQualification = $request->request->get('la_qualification');
  2616.                 $categorie = $request->request->get('categorie');
  2617.                 $departement = $request->request->get('departement');
  2618.                 $dateDePriseDeFonction = $request->request->get('date_de_prise_de_fonction');
  2619.                 $dateDePriseDeFonction = new \DateTime($dateDePriseDeFonction);
  2620.                 $nombreDEnfant =  (float)$request->request->get('nombre_d_enfant');
  2621.                 $igr =  (float)$request->request->get('igr');
  2622.                 
  2623.                 $employeBoutique = new UserBoutique;
  2624.                 $employeBoutique->setUser($employe);
  2625.                 $employeBoutique->setBoutique($boutique);
  2626.                 $employeBoutique->setMatricule($matricule);
  2627.                 $employeBoutique->setSalaire($salaire);
  2628.                 $employeBoutique->setLaFonction($laFonction);
  2629.                 $employeBoutique->setLaQualification($laQualification);
  2630.                 
  2631.                 $employeBoutique->setCategorieEmploi($categorie);
  2632.                 $employeBoutique->setDepartementEmploi($departement);
  2633.                 $employeBoutique->setDateDePriseDeFonction($dateDePriseDeFonction);
  2634.                 $employeBoutique->setNombreDEnfant($nombreDEnfant);
  2635.                 $employeBoutique->setIgr($igr);
  2636.                 $employeBoutique->setRole('ROLE_EMPLOYE');
  2637.                 $estEmploye =  $request->request->get('est_employe');
  2638.                 $employeBoutique->setEstEmploye($estEmploye);
  2639.                 //Droits 
  2640.                 
  2641.                 $lesDroits = array();
  2642.                 foreach($droits as $droit){
  2643.                     
  2644.                     $voir =  (boolean)$request->request->get($droit['nomVariable'].'voir');
  2645.                     $ajouter =  (boolean)$request->request->get($droit['nomVariable'].'ajouter');
  2646.                     $modifier = (boolean)$request->request->get($droit['nomVariable'].'modifier');
  2647.                     $supprimer = (boolean)$request->request->get($droit['nomVariable'].'supprimer');
  2648.                     $leDroit =  array(
  2649.                                             'nom' => $droit['nom'],
  2650.                                             'nomVariable' => $droit['nomVariable'],
  2651.                                             'valeurDroit' => array(
  2652.                                                     'lecture' => $voir,
  2653.                                                     'ajout' => $ajouter,
  2654.                                                     'modification' => $modifier,
  2655.                                                     'suppression' => $supprimer
  2656.                                                 )
  2657.                                             
  2658.                                 );
  2659.                     
  2660.                     array_push($lesDroits, $leDroit);
  2661.                 }
  2662.                 $employeBoutique->setDroits($lesDroits);
  2663.                 $em->persist($employeBoutique);
  2664.                 $em->flush();
  2665.                 $employe = new AppUser;
  2666.                 $form = $this->createForm(EmployeType::class, $employe);
  2667.                 $ok_submission = 'Enregistrement effectué';
  2668.             } else{
  2669.                 $error = 'error';
  2670.             }
  2671.         }
  2672.         
  2673.         $userBoutique = $em->getRepository(UserBoutique::class)
  2674.                             ->findOneBy(
  2675.                                 array(
  2676.                                     'user' => $this->getUser(),
  2677.                                     'boutique' => $boutique
  2678.                                 )
  2679.                             );
  2680.         
  2681.         
  2682.         return $this->render('admin/nouvel_employe.html.twig', [ 
  2683.             'boutique' => $boutique,
  2684.             'form' => $form->createView(),
  2685.             'ok_submission' => $ok_submission,
  2686.             'error' => $error,
  2687.             'userBoutique' => $userBoutique,
  2688.             'droits' => $droits
  2689.         ]);    
  2690.     } 
  2691.     
  2692.     /**
  2693.      * @Route("/{slug}/rh/modifier-employe/{id}", name="admin_modifier_employe")
  2694.      * @return \Symfony\Component\HttpFoundation\Response
  2695.     */
  2696.     public function modifierEmployeAction(Request $request,  $slug, $id)
  2697.     {
  2698.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2699.            return $this->redirectToRoute('security_login');
  2700.         }
  2701.         $em = $this->getDoctrine()
  2702.                     ->getManager();
  2703.         
  2704.         $boutique = $em->getRepository(Boutique::class)
  2705.                         ->findOneBySlug($slug);
  2706.         $employe = $em->getRepository(AppUser::class)
  2707.                     ->findOneById($id);
  2708.         
  2709.         $employeBoutique = $em->getRepository(UserBoutique::class)
  2710.                         ->findOneBy(
  2711.                                 array(
  2712.                                 'boutique' => $boutique->getId(),
  2713.                                 'user' => $employe->getId()
  2714.                                 )
  2715.                         );
  2716.         $droits = $employeBoutique->getDroits();
  2717.         $form = $this->createForm(EmployeEditType::class, $employe);
  2718.         $error = '';
  2719.         
  2720.         $ok_submission = '';
  2721.         if('POST' == $request->getMethod()){
  2722.             $form->handleRequest($request);
  2723.             if($form->isValid()){
  2724.                 $sexe = $request->request->get('sexe');
  2725.                 $employe->setSexe($sexe);
  2726.                 $em->flush();
  2727.                 $ok_submission = 'Enregistrement effectué';
  2728.                 $matricule = $request->request->get('matricule');
  2729.                 $salaire = (float)$request->request->get('salaire');
  2730.                 $laFonction = $request->request->get('la_fonction');
  2731.                 $laQualification = $request->request->get('la_qualification');
  2732.                 $categorie = $request->request->get('categorie');
  2733.                 $departement = $request->request->get('departement');
  2734.                 $dateDePriseDeFonction = $request->request->get('date_de_prise_de_fonction');
  2735.                 $dateDePriseDeFonction = new \DateTime($dateDePriseDeFonction);
  2736.                 $nombreDEnfant =  (float)$request->request->get('nombre_d_enfant');
  2737.                 $igr =  (float)$request->request->get('igr');
  2738.             
  2739.                 $employeBoutique->setMatricule($matricule);
  2740.                 $employeBoutique->setSalaire($salaire);
  2741.                 $employeBoutique->setLaFonction($laFonction);
  2742.                 $employeBoutique->setLaQualification($laQualification);
  2743.                 $employeBoutique->setCategorieEmploi($categorie);
  2744.                 $employeBoutique->setDepartementEmploi($departement);
  2745.                 $employeBoutique->setDateDePriseDeFonction($dateDePriseDeFonction);
  2746.                 $employeBoutique->setNombreDEnfant($nombreDEnfant);
  2747.                 $employeBoutique->setIgr($igr);
  2748.                 $estEmploye =  $request->request->get('est_employe');
  2749.                 $employeBoutique->setEstEmploye($estEmploye);
  2750.                 //Droits 
  2751.                 
  2752.                 $lesDroits = array();
  2753.                 foreach($droits as $droit){
  2754.                     
  2755.                     $voir =  (boolean)$request->request->get($droit['nomVariable'].'voir');
  2756.                     $ajouter =  (boolean)$request->request->get($droit['nomVariable'].'ajouter');
  2757.                     $modifier = (boolean)$request->request->get($droit['nomVariable'].'modifier');
  2758.                     $supprimer = (boolean)$request->request->get($droit['nomVariable'].'supprimer');
  2759.                     $leDroit =  array(
  2760.                                             'nom' => $droit['nom'],
  2761.                                             'nomVariable' => $droit['nomVariable'],
  2762.                                             'valeurDroit' => array(
  2763.                                                     'lecture' => $voir,
  2764.                                                     'ajout' => $ajouter,
  2765.                                                     'modification' => $modifier,
  2766.                                                     'suppression' => $supprimer
  2767.                                                 )
  2768.                                             
  2769.                                 );
  2770.                     
  2771.                     array_push($lesDroits, $leDroit);
  2772.                 }
  2773.                 $employeBoutique->setDroits($lesDroits);
  2774.                 $em->flush();
  2775.             } else{
  2776.                 $error = 'error';
  2777.             }
  2778.         }
  2779.         
  2780.         $userBoutique = $em->getRepository(UserBoutique::class)
  2781.                             ->findOneBy(
  2782.                                 array(
  2783.                                     'user' => $this->getUser(),
  2784.                                     'boutique' => $boutique
  2785.                                 )
  2786.                             );
  2787.         
  2788.         
  2789.         return $this->render('admin/modifier_employe.html.twig', [ 
  2790.             'boutique' => $boutique,
  2791.             'form' => $form->createView(),
  2792.             'ok_submission' => $ok_submission,
  2793.             'error' => $error,
  2794.             'userBoutique' => $userBoutique,
  2795.             'employe' => $employe,
  2796.             'droits' => $droits,
  2797.             'employeBoutique' => $employeBoutique
  2798.         ]);    
  2799.     } 
  2800.     
  2801.     
  2802.     /**
  2803.      * @Route("/{slug}/comptes", name="admin_comptabilite_comptes")
  2804.      * @return \Symfony\Component\HttpFoundation\Response
  2805.      */
  2806.     public function comptesAction(Request $request,  $slug)
  2807.     {
  2808.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2809.            return $this->redirectToRoute('security_login');
  2810.         }      
  2811.         $em = $this->getDoctrine()
  2812.                     ->getManager();
  2813.         $user = $this->getUser();
  2814.         $boutique = $em->getRepository(Boutique::class)
  2815.                     ->findOneBySlug($slug);
  2816.         $userBoutique = $em->getRepository(UserBoutique::class)
  2817.                             ->findOneBy(
  2818.                                 array(
  2819.                                     'user' => $this->getUser(),
  2820.                                     'boutique' => $boutique
  2821.                                 )
  2822.                             );
  2823.         $comptes = $em->getRepository(Compte::class)
  2824.                     ->findBy(
  2825.                         array(
  2826.                         'boutique' => $boutique->getId()
  2827.                         ),
  2828.                         array(
  2829.                             'numero' => 'ASC'
  2830.                         )
  2831.                         
  2832.                     );
  2833.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  2834.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  2835.         $dateDebut->setTime(0, 0);
  2836.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  2837.         $dateFin->setTime(23, 59);
  2838.         
  2839.         
  2840.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  2841.         $startMonth = $intervalleMois['debut'];
  2842.         $endMonth = $intervalleMois['fin'];
  2843.         
  2844.         $invoices  = $em->getRepository(Commande::class)
  2845.                         ->commandeParDateEtType($boutique->getId(), 'invoice', $dateDebut, $dateFin);
  2846.         
  2847.         $startYear = date('Y-01-01');
  2848.         $endYear = date('Y-12-31');
  2849.         $user = $this->getUser();
  2850.         return $this->render('admin/comptes.html.twig', [ 
  2851.             'boutique' => $boutique,
  2852.             'userBoutique' => $userBoutique,
  2853.             'comptes' => $comptes,
  2854.            'dateDebut' => $dateDebut,
  2855.            'dateFin' => $dateFin,
  2856.            'startMonth' => $startMonth,
  2857.            'endMonth' => $endMonth,
  2858.            'startYear' => $startYear,
  2859.            'endYear' => $endYear,
  2860.         ]);    
  2861.     }
  2862.     /**
  2863.      * @Route("/{slug}/ecritures-comptable-d-un-compte", name="admin_ecritures_comptale_d_un_compte")
  2864.      * @return \Symfony\Component\HttpFoundation\Response
  2865.      */
  2866.     public function ecrituresComptableDUnCompteAction(Request $request,  $slug)
  2867.     {
  2868.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2869.            return $this->redirectToRoute('security_login');
  2870.         }      
  2871.         $em = $this->getDoctrine()
  2872.                     ->getManager();
  2873.         $user = $this->getUser();
  2874.         $boutique = $em->getRepository(Boutique::class)
  2875.                     ->findOneBySlug($slug);
  2876.         $userBoutique = $em->getRepository(UserBoutique::class)
  2877.                             ->findOneBy(
  2878.                                 array(
  2879.                                     'user' => $this->getUser(),
  2880.                                     'boutique' => $boutique
  2881.                                 )
  2882.                             );
  2883.         if($request->getMethod() == 'POST'){
  2884.             $compte = $request->request->get('compte');
  2885.             $dateDebut = $request->request->get('dateDebut');
  2886.             $dateDebut = new \DateTime($dateDebut);
  2887.             $dateFin = $request->request->get('dateFin');
  2888.             $dateFin = new \DateTime($dateFin);
  2889.             $ecrituresComptables = $em->getRepository(EcritureComptable::class)
  2890.                     ->ecrituresComptableParDate($boutique, $dateDebut, $dateFin, $compte);
  2891.         }
  2892.         return $this->render('admin/ecritures_comptale_d_un_compte.html.twig', [ 
  2893.             'boutique' => $boutique,
  2894.             'userBoutique' => $userBoutique,
  2895.             'ecrituresComptables' => $ecrituresComptables
  2896.         ]);    
  2897.     }
  2898.     /**
  2899.      * @Route("/{slug}/nouveau-compte", name="admin_nouveau_compte")
  2900.      * @return \Symfony\Component\HttpFoundation\Response
  2901.      */
  2902.     public function nouveauCompteAction(Request $request, Boutique $boutique)
  2903.     {
  2904.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2905.            return $this->redirectToRoute('security_login');
  2906.         }
  2907.         $em = $this->getDoctrine()
  2908.                     ->getManager();
  2909.         
  2910.         $compte = new Compte;
  2911.         
  2912.         $user = $this->getUser();
  2913.         $userBoutique = $em->getRepository(UserBoutique::class)
  2914.                         ->findOneBy(
  2915.                             array(
  2916.                             'user' => $user->getId(),
  2917.                             'boutique' => $boutique->getId()
  2918.                             )
  2919.                         );
  2920.         $form = $this->createForm(CompteType::class, $compte, array('boutique' => $boutique->getId()));
  2921.         
  2922.         $ok_soumission = '';
  2923.         $error = '';
  2924.         
  2925.         if($request->getMethod() == 'POST'){
  2926.             
  2927.                $form->handleRequest($request);
  2928.                if($form->isValid()){
  2929.                    $compte->setBoutique($boutique);
  2930.                   $em->persist($compte);
  2931.                   $em->flush();
  2932.         
  2933.                 $ok_soumission =" Votre message a été pris en compte";
  2934.                     
  2935.                 unset($compte);
  2936.                 unset($form);
  2937.                 $compte = new Compte;
  2938.                 
  2939.                 $form = $this->createForm(CompteType::class, $compte, array('boutique' => $boutique->getId()));
  2940.                     
  2941.                 } else {
  2942.                     $error =" Veillez corrigez vos erreurs";
  2943.                 }
  2944.         }
  2945.     
  2946.         return $this->render('admin/nouveau_compte.html.twig', [
  2947.            'boutique' => $boutique,
  2948.            'form' => $form->createView(),
  2949.            'userBoutique' => $userBoutique
  2950.         ]);
  2951.     }
  2952.     /**
  2953.      * @Route("/{slug}/journaux", name="admin_comptabilite_journaux")
  2954.      * @return \Symfony\Component\HttpFoundation\Response
  2955.      */
  2956.     public function journauxAction(Request $request, Boutique $boutique)
  2957.     {
  2958.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2959.            return $this->redirectToRoute('security_login');
  2960.         }
  2961.         $em = $this->getDoctrine()
  2962.                     ->getManager();
  2963.         
  2964.         $compte = new Compte;
  2965.         
  2966.         $user = $this->getUser();
  2967.         $userBoutique = $em->getRepository(UserBoutique::class)
  2968.                         ->findOneBy(
  2969.                             array(
  2970.                             'user' => $user->getId(),
  2971.                             'boutique' => $boutique->getId()
  2972.                             )
  2973.                         );
  2974.         
  2975.         $journaux = $em->getRepository(JournalComptabilite::class)
  2976.                         ->findBy(
  2977.                             array(
  2978.                                 'boutique' => $boutique->getId(),
  2979.                                 'estSupprime' => false
  2980.                             ),
  2981.                             array(
  2982.                                 'nom' => 'ASC'
  2983.                             )
  2984.                         );
  2985.     
  2986.         return $this->render('admin/journaux.html.twig', [
  2987.            'boutique' => $boutique,
  2988.            'journaux' => $journaux,
  2989.            'userBoutique' => $userBoutique
  2990.         ]);
  2991.     }
  2992.     /**
  2993.      * @Route("/{slug}/nouveau-journal", name="admin_comptabilite_nouveau_journal")
  2994.      * @return \Symfony\Component\HttpFoundation\Response
  2995.      */
  2996.     public function nouveauJournalAction(Request $request, Boutique $boutique)
  2997.     {
  2998.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  2999.            return $this->redirectToRoute('security_login');
  3000.         }
  3001.         $em = $this->getDoctrine()
  3002.                     ->getManager();
  3003.         
  3004.         $journal = new JournalComptabilite;
  3005.         
  3006.         $user = $this->getUser();
  3007.         $userBoutique = $em->getRepository(UserBoutique::class)
  3008.                         ->findOneBy(
  3009.                             array(
  3010.                             'user' => $user->getId(),
  3011.                             'boutique' => $boutique->getId()
  3012.                             )
  3013.                         );
  3014.         $form = $this->createForm(JournalComptabiliteType::class, $journal);
  3015.         
  3016.         $ok_soumission = '';
  3017.         $error = '';
  3018.         
  3019.         if($request->getMethod() == 'POST'){
  3020.             
  3021.                $form->handleRequest($request);
  3022.                if($form->isValid()){
  3023.                    $journal->setBoutique($boutique);
  3024.                   $em->persist($journal);
  3025.                   $em->flush();
  3026.         
  3027.                 $ok_soumission =" Votre message a été pris en compte";
  3028.                     
  3029.                 unset($journal);
  3030.                 unset($form);
  3031.                 $journal = new JournalComptabilite;
  3032.                 
  3033.                 $form = $this->createForm(JournalComptabiliteType::class, $journal);
  3034.                     
  3035.                 } else {
  3036.                     $error =" Veillez corrigez vos erreurs";
  3037.                 }
  3038.         }
  3039.     
  3040.         return $this->render('admin/nouveau_journal.html.twig', [
  3041.            'boutique' => $boutique,
  3042.            'form' => $form->createView(),
  3043.            'userBoutique' => $userBoutique
  3044.         ]);
  3045.     }
  3046.     /**
  3047.      * @Route("/{slug}/modifier-journal/{id}", name="admin_comptabilite_modifier_journal")
  3048.      * @return \Symfony\Component\HttpFoundation\Response
  3049.      */
  3050.     public function modifierJournalAction(Request $request,  $slug, $id)
  3051.     {
  3052.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3053.            return $this->redirectToRoute('security_login');
  3054.         }
  3055.         $em = $this->getDoctrine()
  3056.                     ->getManager();
  3057.         
  3058.         $journal = $em->getRepository(JournalComptabilite::class)
  3059.                     ->findOneById($id);
  3060.         $boutique = $em->getRepository(Boutique::class)
  3061.                     ->findOneBySlug($slug);
  3062.         
  3063.         $user = $this->getUser();
  3064.         $userBoutique = $em->getRepository(UserBoutique::class)
  3065.                         ->findOneBy(
  3066.                             array(
  3067.                             'user' => $user->getId(),
  3068.                             'boutique' => $boutique->getId()
  3069.                             )
  3070.                         );
  3071.         $form = $this->createForm(JournalComptabiliteEditType::class, $journal);
  3072.         
  3073.         $ok_soumission = '';
  3074.         $error = '';
  3075.         
  3076.         if($request->getMethod() == 'POST'){
  3077.             
  3078.                $form->handleRequest($request);
  3079.                if($form->isValid()){
  3080.                   $em->flush();
  3081.         
  3082.                 $ok_soumission =" Votre message a été pris en compte";
  3083.                     
  3084.                     
  3085.                 } else {
  3086.                     $error =" Veillez corrigez vos erreurs";
  3087.                 }
  3088.         }
  3089.     
  3090.         return $this->render('admin/modifier_journal.html.twig', [
  3091.            'boutique' => $boutique,
  3092.            'form' => $form->createView(),
  3093.            'userBoutique' => $userBoutique,
  3094.            'journal' => $journal
  3095.         ]);
  3096.     }
  3097.     /**
  3098.      * @Route("/{slug}/supprimer-journal/{id}", name="admin_comptabilite_supprimer_journal")
  3099.      * @return \Symfony\Component\HttpFoundation\Response
  3100.      */
  3101.     public function supprimerJournalAction(Request $request,  $slug, $id)
  3102.     {
  3103.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3104.            return $this->redirectToRoute('security_login');
  3105.         }
  3106.         $em = $this->getDoctrine()
  3107.                     ->getManager();
  3108.         
  3109.         $journal = $em->getRepository(JournalComptabilite::class)
  3110.                     ->findOneById($id);
  3111.         $boutique = $em->getRepository(Boutique::class)
  3112.                     ->findOneBySlug($slug);
  3113.         
  3114.         $user = $this->getUser();
  3115.         $userBoutique = $em->getRepository(UserBoutique::class)
  3116.                         ->findOneBy(
  3117.                             array(
  3118.                             'user' => $user->getId(),
  3119.                             'boutique' => $boutique->getId()
  3120.                             )
  3121.                         );
  3122.     
  3123.         
  3124.         if(null !== $journal){
  3125.             $journal->setEstSupprime(true);
  3126.             $em->flush();
  3127.         }
  3128.         return $this->redirectToRoute('admin_comptabilite_journaux', array('slug' => $boutique->getSlug()));
  3129.     
  3130.        
  3131.     }
  3132.     /**
  3133.      * @Route("/{slug}/etats-financiers", name="admin_comptabilite_etats_financiers")
  3134.      * @return \Symfony\Component\HttpFoundation\Response
  3135.      */
  3136.     public function etatsFinanciersAction(Request $request, Boutique $boutique)
  3137.     {
  3138.         
  3139.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3140.            return $this->redirectToRoute('security_login');
  3141.         }
  3142.         
  3143.         $em = $this->getDoctrine()
  3144.                     ->getManager();
  3145.     
  3146.         
  3147.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  3148.         $dateDebut = date('Y-01-01');
  3149.         $dateDebut = new \DateTime($dateDebut);
  3150.         $dateDebut->setTime(0, 0);
  3151.         $dateFin = date('Y-12-31');
  3152.         $dateFin = new \DateTime($dateFin);
  3153.         $dateFin->setTime(23, 59);
  3154.         
  3155.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  3156.         $startMonth = $intervalleMois['debut'];
  3157.         $endMonth = $intervalleMois['fin'];
  3158.         $chargeDExploitations  = $em->getRepository(Expensive::class)
  3159.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Charges d\'exploitation');
  3160.         
  3161.         $chargeFinancieres  = $em->getRepository(Expensive::class)
  3162.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Charges financières');
  3163.         
  3164.         $chargeExceptionnelles  = $em->getRepository(Expensive::class)
  3165.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Charges exceptionnelles');
  3166.         
  3167.         $impotSurLeBenefice  = $em->getRepository(Expensive::class)
  3168.                         ->chargeCompteDeResultatParDate($boutique->getId(), $dateDebut, $dateFin, 'Impôts sur les bénéficices');
  3169.         
  3170.         
  3171.         $venteDeMarchandise = $em->getRepository(Commande::class)
  3172.                                         ->chiffreDAffaireDUnePeriode('invoice', $boutique->getId(), $dateDebut, $dateFin);
  3173.         if(!empty($venteDeMarchandise)){
  3174.             $venteDeMarchandise = $venteDeMarchandise['0'];
  3175.         }else{
  3176.             $venteDeMarchandise = array(
  3177.                                         'totalVente' => 0
  3178.                                     );
  3179.         }
  3180.         
  3181.         
  3182.         $startYear = date('Y-01-01');
  3183.         $endYear = date('Y-12-31');
  3184.         $user = $this->getUser();
  3185.     
  3186.         $actifs = array();
  3187.         
  3188.         $immobilisationsIncorporelles = $em->getRepository(EcritureComptable::class)
  3189.                                 ->bilanComptable($boutique, 'Immobilisations incorporelles', $dateDebut, $dateFin);
  3190.         $immobilisationsCorporelles = $em->getRepository(EcritureComptable::class)
  3191.                                 ->bilanComptable($boutique, 'Immobilisations corporelles', $dateDebut, $dateFin);
  3192.         $immobilisationsFinancieres = $em->getRepository(EcritureComptable::class)
  3193.                                 ->bilanComptable($boutique, 'Immobilisations financières', $dateDebut, $dateFin);
  3194.         $stocks = $em->getRepository(EcritureComptable::class)
  3195.                                 ->bilanComptable($boutique, 'Stocks', $dateDebut, $dateFin);
  3196.         $creances = $em->getRepository(EcritureComptable::class)
  3197.                                 ->bilanComptable($boutique, 'Créance', $dateDebut, $dateFin);
  3198.         /*
  3199.         $disponibilites = $em->getRepository(EcritureComptable::class)
  3200.                                 ->bilanComptable($boutique, 'Disponibilité', $dateDebut, $dateFin);
  3201.         */
  3202.         
  3203.         $disponibilites = $em->getRepository(EcritureComptable::class)
  3204.                                 ->bilanComptable($boutique, 'Disponibilités', $dateDebut, $dateFin);
  3205.         
  3206.         $capitauxPropres = $em->getRepository(EcritureComptable::class)
  3207.                                 ->bilanComptable($boutique, 'Capitaux propres', $dateDebut, $dateFin);
  3208.         $dettesFinancieres = $em->getRepository(EcritureComptable::class)
  3209.                                 ->bilanComptable($boutique, 'Dettes financières', $dateDebut, $dateFin);
  3210.         $dettesDExploitations = $em->getRepository(EcritureComptable::class)
  3211.                                 ->bilanComptable($boutique, 'Dettes d\'exploitation', $dateDebut, $dateFin);
  3212.         $dettesFiscales = $em->getRepository(EcritureComptable::class)
  3213.                                 ->bilanComptable($boutique, 'Dettes fiscales et sociales', $dateDebut, $dateFin);
  3214.         $dettesSurImmobilisations = $em->getRepository(EcritureComptable::class)
  3215.                                 ->bilanComptable($boutique, 'Dettes sur immobilisations', $dateDebut, $dateFin);
  3216.         if($request->getMethod() == 'POST'){
  3217.             
  3218.             
  3219.         }
  3220.             $userBoutique = $em->getRepository(UserBoutique::class)
  3221.                         ->findOneBy(
  3222.                             array(
  3223.                             'user' => $user->getId(),
  3224.                             'boutique' => $boutique->getId()
  3225.                             )
  3226.                         );
  3227.                         
  3228.         return $this->render('admin/etats_financiers.html.twig', [
  3229.            'boutique' => $boutique,
  3230.            'userBoutique' => $userBoutique,
  3231.            'intervalleDeDate' => $intervalleDeDate,
  3232.            'dateDebut' => $dateDebut,
  3233.            'dateFin' => $dateFin,
  3234.            'startMonth' => $startMonth,
  3235.            'intervalleMois' => $intervalleMois,
  3236.            'endMonth' => $endMonth,
  3237.            'startYear' => $startYear,
  3238.            'endYear' => $endYear,
  3239.            
  3240.            'chargeDExploitations' => $chargeDExploitations,
  3241.            'chargeFinancieres' => $chargeFinancieres,
  3242.            'chargeExceptionnelles' => $chargeExceptionnelles,
  3243.            'impotSurLeBenefice' => $impotSurLeBenefice,
  3244.            'venteDeMarchandise' => $venteDeMarchandise,
  3245.            
  3246.            'immobilisationsIncorporelles' => $immobilisationsIncorporelles,
  3247.            'immobilisationsCorporelles' => $immobilisationsCorporelles,
  3248.            'immobilisationsFinancieres' => $immobilisationsFinancieres,
  3249.            'stocks' => $stocks,
  3250.            'creances' => $creances,
  3251.            'disponibilites' => $disponibilites,
  3252.            'capitauxPropres' => $capitauxPropres,
  3253.            'dettesFinancieres' => $dettesFinancieres,
  3254.            'dettesDExploitations' => $dettesDExploitations,
  3255.            'dettesFiscales' => $dettesFiscales,
  3256.            'dettesSurImmobilisations' => $dettesSurImmobilisations
  3257.            
  3258.         ]);
  3259.     }
  3260.     
  3261.     
  3262.     /**
  3263.      * @Route("/{slug}/ecritures-comptable", name="admin_comptabilite_ecritures_comptable")
  3264.      * @return \Symfony\Component\HttpFoundation\Response
  3265.      */
  3266.     public function ecrituresEomptableAction(Request $request, Boutique $boutique)
  3267.     {
  3268.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3269.            return $this->redirectToRoute('security_login');
  3270.         }
  3271.         $em = $this->getDoctrine()
  3272.                     ->getManager();
  3273.         
  3274.         $compte = new Compte;
  3275.         
  3276.         $user = $this->getUser();
  3277.         $userBoutique = $em->getRepository(UserBoutique::class)
  3278.                         ->findOneBy(
  3279.                             array(
  3280.                             'user' => $user->getId(),
  3281.                             'boutique' => $boutique->getId()
  3282.                             )
  3283.                         );
  3284.         $ecritureComptables = $em->getRepository(EcritureComptable::class)
  3285.                                 ->findBy(
  3286.                                     array(
  3287.                                         'boutique' => $boutique->getId()
  3288.                                     ),
  3289.                                     array(
  3290.                                         'laDate' => 'DESC'
  3291.                                     )
  3292.                                 );
  3293.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  3294.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  3295.         $dateDebut->setTime(0, 0);
  3296.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  3297.         $dateFin->setTime(23, 59);
  3298.         
  3299.         
  3300.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  3301.         $startMonth = $intervalleMois['debut'];
  3302.         $endMonth = $intervalleMois['fin'];
  3303.         
  3304.         $ecritureComptables  = $em->getRepository(EcritureComptable::class)
  3305.                         ->ecritureComptablesParDateGlobale($boutique->getId(), $dateDebut, $dateFin);
  3306.         
  3307.         $startYear = date('Y-01-01');
  3308.         $endYear = date('Y-12-31');
  3309.         
  3310.         if($request->getMethod() == 'POST'){
  3311.             $dateDebut = $_POST['dateDebut'];
  3312.             $dateFin = $_POST['dateFin'];
  3313.             
  3314.             $dateDebut = new \DateTime($dateDebut);
  3315.             $dateDebut->setTime(0, 0);
  3316.             
  3317.             $dateFin = new \DateTime($dateFin);
  3318.             $dateFin->setTime(23, 59);
  3319.             
  3320.             $ecritureComptables  = $em->getRepository(EcritureComptable::class)
  3321.                         ->ecritureComptablesParDateGlobale($boutique->getId(), $dateDebut, $dateFin);
  3322.             
  3323.             
  3324.             return $this->render('admin/ecriture_comptable_table_content.html.twig', [
  3325.                'boutique' => $boutique,
  3326.                'ecritureComptables' => $ecritureComptables,
  3327.                'userBoutique' => $userBoutique
  3328.             ]);
  3329.             
  3330.             
  3331.         }
  3332.     
  3333.         return $this->render('admin/ecriture_comptables.html.twig', [
  3334.            'boutique' => $boutique,
  3335.            'ecritureComptables' => $ecritureComptables,
  3336.            'userBoutique' => $userBoutique,
  3337.              'dateDebut' => $dateDebut,
  3338.            'dateFin' => $dateFin,
  3339.            'startMonth' => $startMonth,
  3340.            'endMonth' => $endMonth,
  3341.            'startYear' => $startYear,
  3342.            'endYear' => $endYear,
  3343.         ]);
  3344.     }
  3345.     /**
  3346.      * @Route("/{slug}/grand-livre", name="admin_comptabilite_grand_livre")
  3347.      * @return \Symfony\Component\HttpFoundation\Response
  3348.      */
  3349.     public function grandLivreAction(Request $request, Boutique $boutique)
  3350.     {
  3351.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3352.            return $this->redirectToRoute('security_login');
  3353.         }
  3354.         $em = $this->getDoctrine()
  3355.                     ->getManager();
  3356.         
  3357.         $compte = new Compte;
  3358.         
  3359.         $user = $this->getUser();
  3360.         $userBoutique = $em->getRepository(UserBoutique::class)
  3361.                         ->findOneBy(
  3362.                             array(
  3363.                             'user' => $user->getId(),
  3364.                             'boutique' => $boutique->getId()
  3365.                             )
  3366.                         );
  3367.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  3368.         $dateDebut = date('Y-01-01');
  3369.         $dateDebut = new \DateTime($dateDebut);
  3370.         $dateDebut->setTime(0, 0);
  3371.         $dateFin = date('Y-12-31');
  3372.         $dateFin = new \DateTime($dateFin);
  3373.         $dateFin->setTime(23, 59);
  3374.         
  3375.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  3376.         $startMonth = $intervalleMois['debut'];
  3377.         $endMonth = $intervalleMois['fin'];
  3378.         $ecritureComptables = $em->getRepository(EcritureComptable::class)
  3379.                                 ->grandLivre($boutique->getId(), $dateDebut, $dateFin);
  3380.         
  3381.         if($request->getMethod() == 'POST'){
  3382.             $ecritureComptables = array();
  3383.             
  3384.         }
  3385.     
  3386.         return $this->render('admin/grand_livre.html.twig', [
  3387.            'boutique' => $boutique,
  3388.            'ecritureComptables' => $ecritureComptables,
  3389.            'userBoutique' => $userBoutique
  3390.         ]);
  3391.     }
  3392.     
  3393.     /**
  3394.      * @Route("/{slug}/nouvelle-ecriture-comptable", name="admin_comptabilite_nouvelle_ecriture_comptable")
  3395.      * @return \Symfony\Component\HttpFoundation\Response
  3396.      */
  3397.     public function nouvelleEcritureEomptableAction(Request $request, Boutique $boutique)
  3398.     {
  3399.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3400.            return $this->redirectToRoute('security_login');
  3401.         }
  3402.         $em = $this->getDoctrine()
  3403.                     ->getManager();
  3404.         
  3405.         $user = $this->getUser();
  3406.         $userBoutique = $em->getRepository(UserBoutique::class)
  3407.                         ->findOneBy(
  3408.                             array(
  3409.                             'user' => $user->getId(),
  3410.                             'boutique' => $boutique->getId()
  3411.                             )
  3412.                         );
  3413.         
  3414.         $ok_soumission = '';
  3415.         $error = '';
  3416.         $comptes = $em->getRepository(Compte::class)
  3417.                         ->findBy(
  3418.                             array(
  3419.                                 'boutique' => $boutique->getId(),
  3420.                                 ),
  3421.                                 array(
  3422.                                     'numero' => 'ASC'
  3423.                                 )
  3424.                         );
  3425.         $journaux = $em->getRepository(JournalComptabilite::class)
  3426.                         ->findBy(
  3427.                             array(
  3428.                                 'boutique' => $boutique->getId(),
  3429.                                 ),
  3430.                                 array(
  3431.                                     'nom' => 'ASC'
  3432.                                 )
  3433.                         );
  3434.         if($request->getMethod() == 'POST'){
  3435.             $journal = $_POST['journal'];
  3436.             $journal = $em->getRepository(JournalComptabilite::class)
  3437.                         ->findOneById($journal);
  3438.             $pieceJustificative = $_POST['pieceJustificative'];
  3439.             $libelle = $_POST['libelle'];
  3440.             $laDate = $_POST['laDate'];
  3441.             $laDate = new \DateTime($laDate);
  3442.             $listeComptes = json_decode($_POST['listeComptes']);
  3443.             $totalDebit = (float)$_POST['totalDebit'];
  3444.             $totalCredit = (float)$_POST['totalCredit'];
  3445.             
  3446.             $groupeEcritureComptable = new GroupeEcritureComptable;
  3447.             $groupeEcritureComptable->setBoutique($boutique);
  3448.                     
  3449.             $groupeEcritureComptable->setLibelleEcriture($libelle);
  3450.             $groupeEcritureComptable->setDebit($totalDebit);
  3451.             $groupeEcritureComptable->setCredit($totalCredit);
  3452.             $groupeEcritureComptable->setLaDate($laDate);
  3453.             $groupeEcritureComptable->setNumeroPiece($pieceJustificative);
  3454.             $groupeEcritureComptable->setAnnee($laDate->format('Y'));
  3455.             $groupeEcritureComptable->setMois($laDate->format('m'));
  3456.             $groupeEcritureComptable->setLeJournal($journal);
  3457.             $em->persist($groupeEcritureComptable);
  3458.             $em->flush();
  3459.             foreach($listeComptes as $cp){
  3460.                 $cp = (array)$cp;
  3461.                 $idCompte = $cp['idCompte'];
  3462.                 $debit = $cp['debit'];
  3463.                 $credit = $cp['credit'];
  3464.                 $ecritureComptable = new EcritureComptable;
  3465.                 $ecritureComptable->setBoutique($boutique);
  3466.                 $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3467.                 $ecritureComptable->setLeJournal($journal);
  3468.                 $compte = $em->getRepository(Compte::class)
  3469.                                 ->findOneById($idCompte);
  3470.                 $compte->setSolde($compte->getSolde() + $debit - $credit);
  3471.                 $ecritureComptable->setCompte($compte);
  3472.                 $ecritureComptable->setLibelleEcriture($libelle);
  3473.                 $ecritureComptable->setDebit($debit);
  3474.                 $ecritureComptable->setCredit($credit);
  3475.                 $ecritureComptable->setSolde($compte->getSolde());
  3476.                 $ecritureComptable->setLaDate($laDate);
  3477.                 $ecritureComptable->setNumeroPiece($pieceJustificative);
  3478.                 $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3479.                 $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3480.                 $em->persist($ecritureComptable);
  3481.             }
  3482.             $em->flush();
  3483.             
  3484.         }
  3485.     
  3486.         return $this->render('admin/nouvelle_ecriture_comptable.html.twig', [
  3487.            'boutique' => $boutique,
  3488.            
  3489.            'userBoutique' => $userBoutique,
  3490.            'comptes' => $comptes,
  3491.            'journaux' => $journaux
  3492.         ]);
  3493.     }
  3494.     /**
  3495.      * @Route("/{slug}/visites", name="admin_visites")
  3496.      * @return \Symfony\Component\HttpFoundation\Response
  3497.      */
  3498.     public function visitesAction(Request $request, Boutique $boutique)
  3499.     {
  3500.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3501.            return $this->redirectToRoute('security_login');
  3502.         }
  3503.         $em = $this->getDoctrine()
  3504.                     ->getManager();
  3505.         $user = $this->getUser();
  3506.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  3507.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  3508.         $dateDebut->setTime(0, 0);
  3509.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  3510.         $dateFin->setTime(23, 59);
  3511.         
  3512.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  3513.         $startMonth = $intervalleMois['debut'];
  3514.         $endMonth = $intervalleMois['fin'];
  3515.         
  3516.         $visites  = $em->getRepository(Visite::class)
  3517.                         ->visiteParDate($boutique->getId(), $dateDebut, $dateFin);
  3518.         
  3519.         $startYear = date('Y-01-01');
  3520.         $endYear = date('Y-12-31');
  3521.         $userBoutique = $em->getRepository(UserBoutique::class)
  3522.                         ->findOneBy(
  3523.                             array(
  3524.                             'user' => $user->getId(),
  3525.                             'boutique' => $boutique->getId()
  3526.                             )
  3527.                         );
  3528.          return $this->render('admin/visites.html.twig', [
  3529.             'boutique' => $boutique,
  3530.             'userBoutique' => $userBoutique,
  3531.             'dateDebut' => $dateDebut,
  3532.            'dateFin' => $dateFin,
  3533.            'startMonth' => $startMonth,
  3534.            'endMonth' => $endMonth,
  3535.            'startYear' => $startYear,
  3536.            'endYear' => $endYear,
  3537.            'visites' => $visites
  3538.         ]);
  3539.     }
  3540.     /**
  3541.      * @Route("/{slug}/nouvelle-visite", name="admin_nouvelle_visite")
  3542.      * @return \Symfony\Component\HttpFoundation\Response
  3543.      */
  3544.     public function nouvelleVisiteAction(Request $request, Boutique $boutique)
  3545.     {
  3546.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3547.            return $this->redirectToRoute('security_login');
  3548.         }
  3549.         $em = $this->getDoctrine()
  3550.                     ->getManager();
  3551.         
  3552.         $visite = new Visite;
  3553.         $form = $this->createForm(VisiteType::class, $visite);
  3554.         
  3555.         $user = $this->getUser();
  3556.         $userBoutique = $em->getRepository(UserBoutique::class)
  3557.                         ->findOneBy(
  3558.                             array(
  3559.                             'user' => $user->getId(),
  3560.                             'boutique' => $boutique->getId()
  3561.                             )
  3562.                         );
  3563.         
  3564.         $ok_soumission = '';
  3565.         $error = '';
  3566.         
  3567.         if($request->getMethod() == 'POST'){
  3568.             
  3569.                $form->handleRequest($request);
  3570.                if($form->isSubmitted() && $form->isValid()){
  3571.                    $visite->setBoutique($boutique);
  3572.                    $visite->setCreePar($user);
  3573.                     $em->persist($visite);
  3574.                   $em->flush();
  3575.                 
  3576.                   if(isset($_FILES['photos']) && $_FILES['photos']['name'][0] != ''){
  3577.                         
  3578.                         $this->gererFichierMultiple($visite, $_FILES['photos']);
  3579.                     }
  3580.         
  3581.                 $ok_soumission ="Enregistrement effectué";
  3582.                 $visite = new Visite;
  3583.                 
  3584.                 $form = $this->createForm(VisiteType::class, $visite);
  3585.                     
  3586.                 } else {
  3587.                     $error =" Veillez corrigez vos erreurs";
  3588.                 }
  3589.         }
  3590.         return $this->render('admin/nouvelle_visite.html.twig', [
  3591.            'boutique' => $boutique,
  3592.            'form' => $form->createView(),
  3593.            'userBoutique' => $userBoutique,
  3594.            'ok_soumission' => $ok_soumission,
  3595.            'error' => $error
  3596.         ]);
  3597.     }
  3598.     /**
  3599.      * @Route("/{slug}/modifier-visite/{visite}", name="admin_modifier_visite")
  3600.      * @return \Symfony\Component\HttpFoundation\Response
  3601.      */
  3602.     public function modifierVisiteAction(Request $request, Boutique $boutique, $visite)
  3603.     {
  3604.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3605.            return $this->redirectToRoute('security_login');
  3606.         }
  3607.         $em = $this->getDoctrine()
  3608.                     ->getManager();
  3609.                     
  3610.         $user = $this->getUser();
  3611.         $userBoutique = $em->getRepository(UserBoutique::class)
  3612.                         ->findOneBy(
  3613.                             array(
  3614.                             'user' => $user->getId(),
  3615.                             'boutique' => $boutique->getId()
  3616.                             )
  3617.                         );
  3618.         $visite = $em->getRepository(Visite::class)
  3619.                     ->findOneById($visite);
  3620.         $form = $this->createForm(VisiteEditType::class, $visite);
  3621.         
  3622.         $ok_soumission = '';
  3623.         $error = '';
  3624.         
  3625.         if($request->getMethod() == 'POST'){
  3626.             
  3627.                $form->handleRequest($request);
  3628.                if($form->isValid()){
  3629.                     $visite->setModifiePar($user);
  3630.                     $em->flush();
  3631.         
  3632.                 $ok_soumission =" Votre message a été pris en compte";
  3633.                     
  3634.                 } else {
  3635.                     $error =" Veillez corrigez vos erreurs";
  3636.                 }
  3637.         }
  3638.         return $this->render('admin/modifier_visite.html.twig', [
  3639.            'boutique' => $boutique,
  3640.            'form' => $form->createView(),
  3641.            'userBoutique' => $userBoutique,
  3642.            'visite' => $visite
  3643.         ]);
  3644.     }
  3645.     /**
  3646.      * @Route("/{slug}/depart-visiteur/{visite}", name="admin_depart_visiteur")
  3647.      * @return \Symfony\Component\HttpFoundation\Response
  3648.      */
  3649.     public function departVisiteurAction(Request $request, Boutique $boutique, $visite)
  3650.     {
  3651.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3652.            return $this->redirectToRoute('security_login');
  3653.         }
  3654.         $em = $this->getDoctrine()
  3655.                     ->getManager();
  3656.         $user = $this->getUser();
  3657.         $visite = $em->getRepository(Visite::class)
  3658.                     ->findOneById($visite);
  3659.                     
  3660.         if(null != $visite){
  3661.             $visite->setDateDeDepart(new \DateTime());
  3662.             $em->flush();
  3663.         }
  3664.         
  3665.         return $this->redirectToRoute('admin_visites', array('slug' => $boutique->getSlug()));
  3666.     }
  3667.     /**
  3668.      * @Route("/{slug}/supprimer-visite/{visite}", name="admin_supprimer_visite")
  3669.      * @return \Symfony\Component\HttpFoundation\Response
  3670.      */
  3671.     public function supprimerVisiteAction(Request $request, Boutique $boutique, $visite)
  3672.     {
  3673.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3674.            return $this->redirectToRoute('security_login');
  3675.         }
  3676.         $em = $this->getDoctrine()
  3677.                     ->getManager();
  3678.         $user = $this->getUser();
  3679.         $visite = $em->getRepository(Visite::class)
  3680.                     ->findOneById($visite);
  3681.                     
  3682.         if(null != $visite){
  3683.             $visite->setEstSupprime(true);
  3684.             $visite->setSupprimePar($user);
  3685.             $em->flush();
  3686.         }
  3687.         
  3688.         return $this->redirectToRoute('admin_visites', array('slug' => $boutique->getSlug()));
  3689.     }
  3690.     /**
  3691.      * @Route("/{slug}/etape-projets", name="admin_etape_projets")
  3692.      * @return \Symfony\Component\HttpFoundation\Response
  3693.      */
  3694.     public function etapeProjetsAction(Request $request, Boutique $boutique)
  3695.     {
  3696.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3697.            return $this->redirectToRoute('security_login');
  3698.         }
  3699.         $em = $this->getDoctrine()
  3700.                     ->getManager();
  3701.         $user = $this->getUser();
  3702.         $etapeProjets  = $em->getRepository(EtapeProjet::class)
  3703.                         ->findBy(
  3704.                             array(
  3705.                                 'boutique' => $boutique->getId(),
  3706.                                 'estSupprime' => false
  3707.                             ),
  3708.                             array(
  3709.                                 'ordre' => 'DESC'
  3710.                             )
  3711.                         );
  3712.         $userBoutique = $em->getRepository(UserBoutique::class)
  3713.                         ->findOneBy(
  3714.                             array(
  3715.                             'user' => $user->getId(),
  3716.                             'boutique' => $boutique->getId()
  3717.                             )
  3718.                         );
  3719.         return $this->render('admin/etapes_projets.html.twig', [
  3720.             'boutique' => $boutique,
  3721.             'userBoutique' => $userBoutique,
  3722.            'etapeProjets' => $etapeProjets
  3723.         ]);
  3724.     }
  3725.         /**
  3726.      * @Route("/{slug}/nouvelle-etape-projet", name="admin_nouvelle_etape_projet")
  3727.      * @return \Symfony\Component\HttpFoundation\Response
  3728.      */
  3729.     public function nouvelleEtapeProjetAction(Request $request, Boutique $boutique)
  3730.     {
  3731.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3732.            return $this->redirectToRoute('security_login');
  3733.         }
  3734.         $em = $this->getDoctrine()
  3735.                     ->getManager();
  3736.         
  3737.         $etapeProjet = new EtapeProjet;
  3738.         $form = $this->createForm(EtapeProjetType::class, $etapeProjet);
  3739.         
  3740.         $user = $this->getUser();
  3741.         $userBoutique = $em->getRepository(UserBoutique::class)
  3742.                         ->findOneBy(
  3743.                             array(
  3744.                             'user' => $user->getId(),
  3745.                             'boutique' => $boutique->getId()
  3746.                             )
  3747.                         );
  3748.         
  3749.         $ok_soumission = '';
  3750.         $error = '';
  3751.         
  3752.         if($request->getMethod() == 'POST'){
  3753.             
  3754.                $form->handleRequest($request);
  3755.                if($form->isSubmitted() && $form->isValid()){
  3756.                    $etapeProjet->setBoutique($boutique);
  3757.                    $etapeProjet->setCreePar($user);
  3758.                     $em->persist($etapeProjet);
  3759.                   $em->flush();
  3760.                 
  3761.                 $ok_soumission ="Enregistrement effectué";
  3762.                 $etapeProjet = new EtapeProjet;
  3763.                 
  3764.                 $form = $this->createForm(EtapeProjetType::class, $etapeProjet);
  3765.                     
  3766.                 } else {
  3767.                     $error =" Veillez corrigez vos erreurs";
  3768.                 }
  3769.         }
  3770.         return $this->render('admin/nouvelle_etape_projet.html.twig', [
  3771.            'boutique' => $boutique,
  3772.            'form' => $form->createView(),
  3773.            'userBoutique' => $userBoutique,
  3774.            'ok_soumission' => $ok_soumission,
  3775.            'error' => $error
  3776.         ]);
  3777.     }
  3778.     /**
  3779.      * @Route("/{slug}/modifier-etape-projet/{etapeProjet}", name="admin_modifier_etape_projet")
  3780.      * @return \Symfony\Component\HttpFoundation\Response
  3781.      */
  3782.     public function modifierEtapeProjetAction(Request $request, Boutique $boutique, $etapeProjet)
  3783.     {
  3784.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3785.            return $this->redirectToRoute('security_login');
  3786.         }
  3787.         $em = $this->getDoctrine()
  3788.                     ->getManager();
  3789.                     
  3790.         $user = $this->getUser();
  3791.         $userBoutique = $em->getRepository(UserBoutique::class)
  3792.                         ->findOneBy(
  3793.                             array(
  3794.                             'user' => $user->getId(),
  3795.                             'boutique' => $boutique->getId()
  3796.                             )
  3797.                         );
  3798.         $etapeProjet = $em->getRepository(EtapeProjet::class)
  3799.                     ->findOneById($etapeProjet);
  3800.         $form = $this->createForm(EtapeProjetEditType::class, $etapeProjet);
  3801.         
  3802.         $ok_soumission = '';
  3803.         $error = '';
  3804.         
  3805.         if($request->getMethod() == 'POST'){
  3806.             
  3807.                $form->handleRequest($request);
  3808.                if($form->isValid()){
  3809.                     $etapeProjet->setModifiePar($user);
  3810.                     $em->flush();
  3811.         
  3812.                 $ok_soumission =" Votre message a été pris en compte";
  3813.                     
  3814.                 } else {
  3815.                     $error =" Veillez corrigez vos erreurs";
  3816.                 }
  3817.         }
  3818.         return $this->render('admin/modifier_etape_projet.html.twig', [
  3819.            'boutique' => $boutique,
  3820.            'form' => $form->createView(),
  3821.            'userBoutique' => $userBoutique,
  3822.            'etapeProjet' => $etapeProjet
  3823.         ]);
  3824.     }
  3825.     
  3826.     /**
  3827.      * @Route("/{slug}/supprimer-etape-projet/{etapeProjet}", name="admin_supprimer_etape_projet")
  3828.      * @return \Symfony\Component\HttpFoundation\Response
  3829.      */
  3830.     public function supprimerEtapeProjetAction(Request $request, Boutique $boutique, $etapeProjet)
  3831.     {
  3832.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3833.            return $this->redirectToRoute('security_login');
  3834.         }
  3835.         $em = $this->getDoctrine()
  3836.                     ->getManager();
  3837.         $user = $this->getUser();
  3838.         $etapeProjet = $em->getRepository(EtapeProjet::class)
  3839.                     ->findOneById($etapeProjet);
  3840.                     
  3841.         if(null != $etapeProjet){
  3842.             $etapeProjet->setEstSupprime(true);
  3843.             $etapeProjet->setSupprimePar($user);
  3844.             $em->flush();
  3845.         }
  3846.         
  3847.         return $this->redirectToRoute('admin_etape_projets', array('slug' => $boutique->getSlug()));
  3848.     }
  3849.     /**
  3850.      * @Route("/{slug}/projets", name="admin_projets")
  3851.      * @return \Symfony\Component\HttpFoundation\Response
  3852.      */
  3853.     public function projetsAction(Request $request, Boutique $boutique)
  3854.     {
  3855.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3856.            return $this->redirectToRoute('security_login');
  3857.         }
  3858.         $em = $this->getDoctrine()
  3859.                     ->getManager();
  3860.         $user = $this->getUser();
  3861.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  3862.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  3863.         $dateDebut->setTime(0, 0);
  3864.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  3865.         $dateFin->setTime(23, 59);
  3866.         
  3867.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  3868.         $startMonth = $intervalleMois['debut'];
  3869.         $endMonth = $intervalleMois['fin'];
  3870.         
  3871.         $projets  = $em->getRepository(Projet::class)
  3872.                         ->projetParDate($boutique->getId(), $dateDebut, $dateFin);
  3873.         
  3874.          $userBoutique = $em->getRepository(UserBoutique::class)
  3875.                         ->findOneBy(
  3876.                             array(
  3877.                             'user' => $user->getId(),
  3878.                             'boutique' => $boutique->getId()
  3879.                             )
  3880.                         );
  3881.         if('POST' == $request->getMethod()){
  3882.             $dateDebut = $_POST['dateDebut'];
  3883.             $dateFin = $_POST['dateFin'];
  3884.             
  3885.             $dateDebut = new \DateTime($dateDebut);
  3886.             $dateDebut->setTime(0, 0);
  3887.             $dateFin = new \DateTime($dateFin);
  3888.             $dateFin->setTime(23, 59);
  3889.             
  3890.             $projets  = $em->getRepository(Projet::class)
  3891.                         ->projetParDate($boutique->getId(), $dateDebut, $dateFin);
  3892.             
  3893.             return $this->render('admin/projet_table_content.html.twig', [
  3894.                'boutique' => $boutique,
  3895.                'projets' => $projets,
  3896.                'userBoutique' => $userBoutique
  3897.             ]);
  3898.         }
  3899.         
  3900.         $startYear = date('Y-01-01');
  3901.         $endYear = date('Y-12-31');
  3902.          return $this->render('admin/projets.html.twig', [
  3903.             'boutique' => $boutique,
  3904.             'userBoutique' => $userBoutique,
  3905.             'dateDebut' => $dateDebut,
  3906.            'dateFin' => $dateFin,
  3907.            'startMonth' => $startMonth,
  3908.            'endMonth' => $endMonth,
  3909.            'startYear' => $startYear,
  3910.            'endYear' => $endYear,
  3911.            'projets' => $projets
  3912.         ]);
  3913.     }
  3914.     /**
  3915.      * @Route("/{slug}/detail-document-projet/{id}", name="admin_detail_document_projet")
  3916.      * @return \Symfony\Component\HttpFoundation\Response
  3917.      */
  3918.     public function detailDocumentProjetAction(Request $request, $slug, $id)
  3919.     {
  3920.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3921.            return $this->redirectToRoute('security_login');
  3922.         }
  3923.         $em = $this->getDoctrine()
  3924.                     ->getManager();
  3925.         $boutique = $em->getRepository(Boutique::class)
  3926.                         ->findOneBySlug($slug);
  3927.         $user = $this->getUser();
  3928.         
  3929.         $invoices = $em->getRepository(Commande::class)
  3930.                         ->findBy(
  3931.                             array(
  3932.                                 'boutique' => $boutique->getId(),
  3933.                                 'projet' => $id
  3934.                             )
  3935.                         );
  3936.         $expensives = $em->getRepository(Expensive::class)
  3937.                         ->findBy(
  3938.                             array(
  3939.                                 'boutique' => $boutique->getId(),
  3940.                                 'projet' => $id
  3941.                             )
  3942.                         );
  3943.         $userBoutique = $em->getRepository(UserBoutique::class)
  3944.                         ->findOneBy(
  3945.                             array(
  3946.                             'user' => $user->getId(),
  3947.                             'boutique' => $boutique->getId()
  3948.                             )
  3949.                         );
  3950.          return $this->render('admin/detail_document_projet.html.twig', [
  3951.             'boutique' => $boutique,
  3952.            'invoices' => $invoices,
  3953.            'expensives' => $expensives,
  3954.            'userBoutique' => $userBoutique
  3955.         ]);
  3956.     }
  3957.     /**
  3958.      * @Route("/{slug}/nouveau-projet", name="admin_nouveau_projet")
  3959.      * @return \Symfony\Component\HttpFoundation\Response
  3960.      */
  3961.     public function nouveauProjetAction(Request $request, Boutique $boutique)
  3962.     {
  3963.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3964.            return $this->redirectToRoute('security_login');
  3965.         }
  3966.         $em = $this->getDoctrine()
  3967.                     ->getManager();
  3968.         
  3969.         $projet = new Projet;
  3970.         $form = $this->createForm(ProjetType::class, $projet, array('boutique' => $boutique->getId()));
  3971.         
  3972.         $user = $this->getUser();
  3973.         $userBoutique = $em->getRepository(UserBoutique::class)
  3974.                         ->findOneBy(
  3975.                             array(
  3976.                             'user' => $user->getId(),
  3977.                             'boutique' => $boutique->getId()
  3978.                             )
  3979.                         );
  3980.         
  3981.         $ok_soumission = '';
  3982.         $error = '';
  3983.         
  3984.         if($request->getMethod() == 'POST'){
  3985.             
  3986.                $form->handleRequest($request);
  3987.                if($form->isSubmitted() && $form->isValid()){
  3988.                    $projet->setBoutique($boutique);
  3989.                    $projet->setCreePar($user);
  3990.                     $em->persist($projet);
  3991.                   $em->flush();
  3992.                 
  3993.                 $ok_soumission ="Enregistrement effectué";
  3994.                 $projet = new Projet;
  3995.                 
  3996.                 $form = $this->createForm(ProjetType::class, $projet, array('boutique' => $boutique->getId()));
  3997.                     
  3998.                 } else {
  3999.                     $error =" Veillez corrigez vos erreurs";
  4000.                 }
  4001.         }
  4002.         return $this->render('admin/nouveau_projet.html.twig', [
  4003.            'boutique' => $boutique,
  4004.            'form' => $form->createView(),
  4005.            'userBoutique' => $userBoutique,
  4006.            'ok_soumission' => $ok_soumission,
  4007.            'error' => $error
  4008.         ]);
  4009.     }
  4010.     /**
  4011.      * @Route("/{slug}/modifier-projet/{projet}", name="admin_modifier_projet")
  4012.      * @return \Symfony\Component\HttpFoundation\Response
  4013.      */
  4014.     public function modifierProjetAction(Request $request, Boutique $boutique, $projet)
  4015.     {
  4016.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4017.            return $this->redirectToRoute('security_login');
  4018.         }
  4019.         $em = $this->getDoctrine()
  4020.                     ->getManager();
  4021.                     
  4022.         $user = $this->getUser();
  4023.         $userBoutique = $em->getRepository(UserBoutique::class)
  4024.                         ->findOneBy(
  4025.                             array(
  4026.                             'user' => $user->getId(),
  4027.                             'boutique' => $boutique->getId()
  4028.                             )
  4029.                         );
  4030.         $projet = $em->getRepository(Projet::class)
  4031.                     ->findOneById($projet);
  4032.         $form = $this->createForm(ProjetEditType::class, $projet, array('boutique' => $boutique->getId()));
  4033.         
  4034.         $ok_soumission = '';
  4035.         $error = '';
  4036.         
  4037.         if($request->getMethod() == 'POST'){
  4038.             
  4039.                $form->handleRequest($request);
  4040.                if($form->isValid()){
  4041.                     $projet->setModifiePar($user);
  4042.                     $em->flush();
  4043.         
  4044.                 $ok_soumission =" Votre message a été pris en compte";
  4045.                     
  4046.                 } else {
  4047.                     $error =" Veillez corrigez vos erreurs";
  4048.                 }
  4049.         }
  4050.         return $this->render('admin/modifier_projet.html.twig', [
  4051.            'boutique' => $boutique,
  4052.            'form' => $form->createView(),
  4053.            'userBoutique' => $userBoutique,
  4054.            'projet' => $projet
  4055.         ]);
  4056.     }
  4057.     
  4058.     /**
  4059.      * @Route("/{slug}/supprimer-projet/{projet}", name="admin_supprimer_projet")
  4060.      * @return \Symfony\Component\HttpFoundation\Response
  4061.      */
  4062.     public function supprimerProjetAction(Request $request, Boutique $boutique, $projet)
  4063.     {
  4064.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4065.            return $this->redirectToRoute('security_login');
  4066.         }
  4067.         $em = $this->getDoctrine()
  4068.                     ->getManager();
  4069.         $user = $this->getUser();
  4070.         $projet = $em->getRepository(Projet::class)
  4071.                     ->findOneById($projet);
  4072.                     
  4073.         if(null != $projet){
  4074.             $projet->setEstSupprime(true);
  4075.             $projet->setSupprimePar($user);
  4076.             $em->flush();
  4077.         }
  4078.         
  4079.         return $this->redirectToRoute('admin_projets', array('slug' => $boutique->getSlug()));
  4080.     }
  4081.     
  4082.     /**
  4083.      * @Route("/{slug}/new-payment/{id}", name="admin.new_payment")
  4084.      * @return \Symfony\Component\HttpFoundation\Response
  4085.      */
  4086.     public function newPaymentAction(Request $request,  $slug, $id)
  4087.     {
  4088.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4089.            return $this->redirectToRoute('security_login');
  4090.         }      
  4091.         $em = $this->getDoctrine()
  4092.                     ->getManager();
  4093.         
  4094.         $boutique = $em->getRepository(Boutique::class)
  4095.                     ->findOneBySlug($slug);
  4096.             
  4097.         $commande = $em->getRepository(Commande::class)
  4098.                     ->findOneBy(
  4099.                         array(
  4100.                             'boutique' => $boutique->getId(),
  4101.                             'id' => $id
  4102.                         )
  4103.                     );
  4104.         $factures = $em->getRepository(Commande::class)
  4105.                     ->facturesPourVersement($boutique->getId());
  4106.         
  4107.         $user = $this->getUser();        
  4108.         $userBoutique = $em->getRepository(UserBoutique::class)
  4109.                         ->findOneBy(
  4110.                             array(
  4111.                             'user' => $user->getId(),
  4112.                             'boutique' => $boutique->getId()
  4113.                             )
  4114.                         );
  4115.         $paymentMethods = $em->getRepository(PaymentMethod::class)
  4116.                     ->findBy(
  4117.                         array(
  4118.                             'boutique' => $boutique->getId()
  4119.                         )
  4120.                     );
  4121.                     
  4122.         $ok_soumission = '';
  4123.         $error = '';
  4124.             
  4125.             
  4126.        return $this->render('admin/new_payment.html.twig', [
  4127.            'boutique' => $boutique,
  4128.            'commande' => $commande,
  4129.            'paymentMethods' => $paymentMethods,
  4130.            'factures' => $factures,
  4131.            'userBoutique' => $userBoutique
  4132.         ]);
  4133.     
  4134.    }
  4135.    /**
  4136.      * @Route("/{slug}/make-payment/{id}", name="admin_make_payment")
  4137.      * @return \Symfony\Component\HttpFoundation\Response
  4138.      */
  4139.     public function makePaymentAction(Request $request,  $slug, $id = 0)
  4140.     {
  4141.         /*
  4142.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4143.            return $this->redirectToRoute('security_login');
  4144.         }      
  4145.         */
  4146.         $em = $this->getDoctrine()
  4147.                     ->getManager();
  4148.         
  4149.         $boutique = $em->getRepository(Boutique::class)
  4150.                     ->findOneBySlug($slug);
  4151.         
  4152.         $commande = $em->getRepository(Commande::class)
  4153.                     ->findOneBy(
  4154.                         array(
  4155.                             'boutique' => $boutique->getId(),
  4156.                             'id' => $id
  4157.                         )
  4158.                     );
  4159.         $factures = $em->getRepository(Commande::class)
  4160.                     ->facturesPourVersement($boutique->getId());
  4161.         
  4162.         $user = $this->getUser();
  4163.         
  4164.         
  4165.         $userBoutique = $em->getRepository(UserBoutique::class)
  4166.                         ->findOneBy(
  4167.                             array(
  4168.                             'user' => $user->getId(),
  4169.                             'boutique' => $boutique->getId()
  4170.                             )
  4171.                         );
  4172.         $paymentMethods = $em->getRepository(PaymentMethod::class)
  4173.                     ->findBy(
  4174.                         array(
  4175.                             'boutique' => $boutique->getId()
  4176.                         )
  4177.                     );
  4178.                     
  4179.         $ok_soumission = '';
  4180.         $error = '';
  4181.         
  4182.         
  4183.             $laDate = $request->request->get('laDate'); 
  4184.             $frais = (float)$request->request->get('frais');
  4185.             $paymentMethod = $request->request->get('paymentMethod');
  4186.             $montant = (float)$request->request->get('montant');
  4187.             $referencePaiement = $request->request->get('referencePaiement');
  4188.             $commande = $request->request->get('facture');
  4189.             
  4190.             $commande = $em->getRepository(Commande::class)
  4191.                             ->findOneBy(
  4192.                                 array(
  4193.                                 'boutique' =>$boutique->getId(),
  4194.                                 'id' => $commande
  4195.                                 )
  4196.                             );
  4197.             
  4198.             if((float)$commande->getResteAPayer() < $montant || $montant == 0){
  4199.                 $this->addFlash(
  4200.                     'danger',
  4201.                     'Montant invalide '. $montant
  4202.                 );
  4203.             } else{
  4204.                 $laDate = new \DateTime($laDate);
  4205.                 $payment = new Payment;
  4206.                 $payment->setLaDate($laDate);
  4207.                 $payment->setCommande($commande);
  4208.                 $payment->setBoutique($boutique);
  4209.                 $payment->setMontant($montant);
  4210.                 $payment->setReferencePaiement($referencePaiement);
  4211.                 $payment->setMoyenDePaiement($paymentMethod);
  4212.                 
  4213.                 $em->persist($payment);
  4214.                 
  4215.                 $commande->setMontantPaye($commande->getMontantPaye() + $montant);
  4216.                 $commande->setResteAPayer($commande->getResteAPayer() - $montant);
  4217.                 $em->flush();
  4218.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  4219.                     $groupeEcritureComptable = new GroupeEcritureComptable;
  4220.                     $groupeEcritureComptable->setBoutique($boutique);
  4221.                     
  4222.                     $groupeEcritureComptable->setLibelleEcriture('Règlement client');
  4223.                     $groupeEcritureComptable->setDebit($montant);
  4224.                     $groupeEcritureComptable->setCredit($montant);
  4225.                     $groupeEcritureComptable->setLaDate($payment->getLaDate());
  4226.                     $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  4227.                     $groupeEcritureComptable->setAnnee($payment->getLaDate()->format('Y'));
  4228.                     $groupeEcritureComptable->setMois($payment->getLaDate()->format('m'));
  4229.                     $em->persist($groupeEcritureComptable);
  4230.                     $em->flush();
  4231.                 if($paymentMethod == 'check' || $paymentMethod == 'transfer'){
  4232.                     //Debit
  4233.                     
  4234.                     $ecritureComptable = new EcritureComptable;
  4235.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeBanque());
  4236.                     $ecritureComptable->setBoutique($boutique);
  4237.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4238.                     
  4239.                     $ecritureComptable->setLeJournal($leJournal);
  4240.                     $compte = $em->getRepository(Compte::class)
  4241.                                 ->findOneBy(
  4242.                                     array(
  4243.                                         'numero' => '521',
  4244.                                         'boutique' => $boutique->getId()
  4245.                                     )
  4246.                                 ); //Banque
  4247.                                 
  4248.                     $compte->setSolde($compte->getSolde() + $montant);
  4249.                     $ecritureComptable->setCompte($compte);
  4250.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4251.                     $ecritureComptable->setDebit($montant);
  4252.                     $ecritureComptable->setSolde($compte->getSolde());
  4253.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4254.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4255.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4256.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4257.                     $em->persist($ecritureComptable);
  4258.                     //Credit
  4259.                     $ecritureComptable = new EcritureComptable;
  4260.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4261.                     $ecritureComptable->setBoutique($boutique);
  4262.                     
  4263.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeBanque());
  4264.                     $compte = $em->getRepository(Compte::class)
  4265.                                 ->findOneBy(
  4266.                                     array(
  4267.                                         'numero' => '411',
  4268.                                         'boutique' => $boutique->getId()
  4269.                                     )
  4270.                                 ); //Client
  4271.                                 
  4272.                     $compte->setSolde($compte->getSolde() - $montant);
  4273.                     $ecritureComptable->setCompte($compte);
  4274.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4275.                     $ecritureComptable->setCredit($montant);
  4276.                     $ecritureComptable->setSolde($compte->getSolde());
  4277.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4278.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4279.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4280.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4281.                     $em->persist($ecritureComptable);
  4282.                 }
  4283.                 if($paymentMethod == 'cash'){
  4284.                     //Débit
  4285.                     $ecritureComptable = new EcritureComptable;
  4286.                     $ecritureComptable->setBoutique($boutique);
  4287.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4288.                     $leJournal = $em->getRepository(JournalComptabilite::class)
  4289.                                     ->findOneBy(
  4290.                                         array(
  4291.                                         'boutique' => $boutique->getId(),
  4292.                                         'reference' => 'CA',
  4293.                                         'nom' => 'Caisse'
  4294.                                         )
  4295.                                     );
  4296.                     $groupeEcritureComptable->setLeJournal($leJournal);
  4297.                     $ecritureComptable->setLeJournal($leJournal);
  4298.                     $compte = $em->getRepository(Compte::class)
  4299.                                 ->findOneBy(
  4300.                                     array(
  4301.                                         'numero' => '5711',
  4302.                                         'boutique' => $boutique->getId()
  4303.                                     )
  4304.                                 ); //caisse
  4305.                                 
  4306.                     $compte->setSolde($compte->getSolde() + $montant);
  4307.                     $ecritureComptable->setCompte($compte);
  4308.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4309.                     $ecritureComptable->setDebit($montant);
  4310.                     $ecritureComptable->setSolde($compte->getSolde());
  4311.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4312.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4313.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4314.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4315.                     $em->persist($ecritureComptable);
  4316.                     //Credit
  4317.                     $ecritureComptable = new EcritureComptable;
  4318.                     $ecritureComptable->setBoutique($boutique);
  4319.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4320.                     
  4321.                     $ecritureComptable->setLeJournal($leJournal);
  4322.                     $compte = $em->getRepository(Compte::class)
  4323.                                 ->findOneBy(
  4324.                                     array(
  4325.                                         'numero' => '411',
  4326.                                         'boutique' => $boutique->getId()
  4327.                                     )
  4328.                                 ); //Client
  4329.                                 
  4330.                     $compte->setSolde($compte->getSolde() - $montant);
  4331.                     $ecritureComptable->setCompte($compte);
  4332.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4333.                     $ecritureComptable->setCredit($montant);
  4334.                     $ecritureComptable->setSolde($compte->getSolde());
  4335.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4336.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4337.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4338.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4339.                     $em->persist($ecritureComptable);
  4340.                 }
  4341.                 if($paymentMethod == 'card'){
  4342.                     $ecritureComptable = new EcritureComptable;
  4343.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4344.                     $ecritureComptable->setBoutique($boutique);
  4345.                     $leJournal = $em->getRepository(JournalComptabilite::class)
  4346.                                     ->findOneBy(
  4347.                                         array(
  4348.                                         'boutique' => $boutique->getId(),
  4349.                                         'reference' => 'BQ',
  4350.                                         'nom' => 'Banque'
  4351.                                         )
  4352.                                     );
  4353.                     $ecritureComptable->setLeJournal($leJournal);
  4354.                     $groupeEcritureComptable->setLeJournal($leJournal);
  4355.                     $compte = $em->getRepository(Compte::class)
  4356.                                 ->findOneBy(
  4357.                                     array(
  4358.                                         'numero' => '521',
  4359.                                         'boutique' => $boutique->getId()
  4360.                                     )
  4361.                                 ); //Banque 
  4362.                                 
  4363.                     $compte->setSolde($compte->getSolde() + $montant - $frais);
  4364.                     $ecritureComptable->setCompte($compte);
  4365.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4366.                     $ecritureComptable->setDebit($montant - $frais);
  4367.                     $ecritureComptable->setSolde($compte->getSolde());
  4368.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4369.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4370.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4371.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4372.                     $em->persist($ecritureComptable);
  4373.                     if($frais > 0){
  4374.                         $ecritureComptable = new EcritureComptable;
  4375.                         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4376.                         $ecritureComptable->setBoutique($boutique);
  4377.                         
  4378.                         $ecritureComptable->setLeJournal($leJournal);
  4379.                         $compte = $em->getRepository(Compte::class)
  4380.                                     ->findOneBy(
  4381.                                         array(
  4382.                                             'numero' => '6315',
  4383.                                             'boutique' => $boutique->getId()
  4384.                                         )
  4385.                                     ) //Commissions sur cartes de crédit
  4386.                                     -
  4387.                         $compte->setSolde($compte->getSolde() + $frais);
  4388.                         $ecritureComptable->setCompte($compte);
  4389.                         $ecritureComptable->setLibelleEcriture('Règlement client');
  4390.                         $ecritureComptable->setDebit($frais);
  4391.                         $ecritureComptable->setSolde($compte->getSolde());
  4392.                         $ecritureComptable->setLaDate($payment->getLaDate());
  4393.                         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4394.                         $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4395.                         $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4396.                         $em->persist($ecritureComptable);
  4397.                     }
  4398.                     //Credit
  4399.                     $ecritureComptable = new EcritureComptable;
  4400.                     $ecritureComptable->setBoutique($boutique);
  4401.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4402.                     
  4403.                     $ecritureComptable->setLeJournal($leJournal);
  4404.                     $compte = $em->getRepository(Compte::class)
  4405.                                 ->findOneBy(
  4406.                                     array(
  4407.                                         'numero' => '515',
  4408.                                         'boutique' => $boutique->getId()
  4409.                                     )
  4410.                                 ); //CARTES DE CREDIT A ENCAISSER
  4411.                             
  4412.                     $compte->setSolde($compte->getSolde() - $montant );
  4413.                     $ecritureComptable->setCompte($compte);
  4414.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4415.                     $ecritureComptable->setCredit($montant);
  4416.                     $ecritureComptable->setSolde($compte->getSolde());
  4417.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4418.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4419.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4420.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4421.                     $em->persist($ecritureComptable);
  4422.                 }
  4423.                 if($paymentMethod == 'mobile-money'){
  4424.                     $ecritureComptable = new EcritureComptable;
  4425.                     $ecritureComptable->setBoutique($boutique);
  4426.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4427.                     $leJournal = $em->getRepository(JournalComptabilite::class)
  4428.                                     ->findOneBy(
  4429.                                         array(
  4430.                                             'boutique' => $boutique->getId(),
  4431.                                         'reference' => 'CA',
  4432.                                         'nom' => 'Caisse'
  4433.                                         )
  4434.                                     );
  4435.                     $ecritureComptable->setLeJournal($leJournal);
  4436.                     $groupeEcritureComptable->setLeJournal($leJournal);
  4437.                     $compte = $em->getRepository(Compte::class)
  4438.                                 ->findOneBy(
  4439.                                     array(
  4440.                                         'numero' => '5711',
  4441.                                         'boutique' => $boutique->getId()
  4442.                                     )
  4443.                                 ); //Caisse en monnaie nationale
  4444.                                 
  4445.                     $compte->setSolde($compte->getSolde() + $montant - $frais);
  4446.                     $ecritureComptable->setCompte($compte);
  4447.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4448.                     $ecritureComptable->setDebit($montant - $frais);
  4449.                     $ecritureComptable->setSolde($compte->getSolde());
  4450.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4451.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4452.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4453.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4454.                     $em->persist($ecritureComptable);
  4455.                     if($frais > 0){
  4456.                         $ecritureComptable = new EcritureComptable;
  4457.                         $ecritureComptable->setBoutique($boutique);
  4458.                         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4459.                         
  4460.                         $ecritureComptable->setLeJournal($leJournal);
  4461.                         $compte = $em->getRepository(Compte::class)
  4462.                                     ->findOneBy(
  4463.                                         array(
  4464.                                             'numero' => '6317',
  4465.                                             'boutique' => $boutique->getId()
  4466.                                         )
  4467.                                     ); //Frais sur instruments monnaie électronique
  4468.                                     
  4469.                         $compte->setSolde($compte->getSolde() + $frais);
  4470.                         $ecritureComptable->setCompte($compte);
  4471.                         $ecritureComptable->setLibelleEcriture('Règlement client');
  4472.                         $ecritureComptable->setDebit($frais);
  4473.                         $ecritureComptable->setSolde($compte->getSolde());
  4474.                         $ecritureComptable->setLaDate($payment->getLaDate());
  4475.                         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4476.                         $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4477.                         $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4478.                         $em->persist($ecritureComptable);
  4479.                     }
  4480.                     //Credit
  4481.                     $ecritureComptable = new EcritureComptable;
  4482.                     $ecritureComptable->setBoutique($boutique);
  4483.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4484.                     
  4485.                     $ecritureComptable->setLeJournal($leJournal);
  4486.                     $compte = $em->getRepository(Compte::class)
  4487.                                 ->findOneBy(
  4488.                                     array(
  4489.                                         'numero' => '554',
  4490.                                         'boutique' => $boutique->getId()
  4491.                                     )
  4492.                                 ); //PORTE-MONNAIE ELECTRONIQUE
  4493.                                 
  4494.                     $compte->setSolde($compte->getSolde() - $montant);
  4495.                     $ecritureComptable->setCompte($compte);
  4496.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  4497.                     $ecritureComptable->setCredit($montant);
  4498.                     $ecritureComptable->setSolde($compte->getSolde());
  4499.                     $ecritureComptable->setLaDate($payment->getLaDate());
  4500.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  4501.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  4502.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  4503.                     $em->persist($ecritureComptable);
  4504.                 }
  4505.                 } //Fin condition ecriture comptable automatique
  4506.                 $em->flush();
  4507.                  $this->addFlash(
  4508.                         'success',
  4509.                         'Enregistrement effectué'
  4510.                     );
  4511.             }
  4512.         
  4513.         
  4514.        return $this->render('admin/new_payment.html.twig', [
  4515.            'boutique' => $boutique,
  4516.            'commande' => $commande,
  4517.            'paymentMethods' => $paymentMethods,
  4518.            'factures' => $factures,
  4519.            'userBoutique' => $userBoutique
  4520.         ]);
  4521.     
  4522.    }
  4523.     
  4524.     
  4525.     
  4526.     //bill_credit
  4527.     /**
  4528.      * @Route("/{slug}/bill-credits", name="admin.bill_credits")
  4529.      * @return \Symfony\Component\HttpFoundation\Response
  4530.      */
  4531.     public function billCreditsAction( Request $request, Boutique $boutique)
  4532.     {
  4533.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4534.            return $this->redirectToRoute('security_login');
  4535.         }      
  4536.         $em = $this->getDoctrine()
  4537.                     ->getManager();
  4538.     
  4539.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  4540.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  4541.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  4542.         
  4543.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  4544.         $startMonth = $intervalleMois['debut'];
  4545.         $endMonth = $intervalleMois['fin'];
  4546.         
  4547.         $billCredits  = $em->getRepository(Commande::class)
  4548.                         ->commandeParDateEtType($boutique->getId(), 'bill_credit', $dateDebut, $dateFin);
  4549.         
  4550.         $startYear = date('Y-01-01');
  4551.         $endYear = date('Y-12-31');
  4552.         $user = $this->getUser();
  4553.         $userBoutique = $em->getRepository(UserBoutique::class)
  4554.                         ->findOneBy(
  4555.                             array(
  4556.                             'user' => $user->getId(),
  4557.                             'boutique' => $boutique->getId()
  4558.                             )
  4559.                         );
  4560.         if('POST' == $request->getMethod()){
  4561.             $dateDebut = $_POST['dateDebut'];
  4562.             $dateFin = $_POST['dateFin'];
  4563.             
  4564.             $dateDebut = new \DateTime($dateDebut);
  4565.             $dateFin = new \DateTime($dateFin);
  4566.             
  4567.             $billCredits  = $em->getRepository(Commande::class)
  4568.                         ->commandeParDateEtType($boutique->getId(), 'bill_credit', $dateDebut, $dateFin);
  4569.             
  4570.             
  4571.             return $this->render('admin/bill_credits_table_content.html.twig', [
  4572.                'boutique' => $boutique,
  4573.                'billCredits' => $billCredits,
  4574.                'userBoutique' => $userBoutique
  4575.             ]);
  4576.             
  4577.         }
  4578.     
  4579.     
  4580.         return $this->render('admin/bill_credits.html.twig', [
  4581.            'boutique' => $boutique,
  4582.            'billCredits' => $billCredits,
  4583.            'dateDebut' => $dateDebut,
  4584.            'dateFin' => $dateFin,
  4585.            'startMonth' => $startMonth,
  4586.            'endMonth' => $endMonth,
  4587.            'startYear' => $startYear,
  4588.            'endYear' => $endYear,
  4589.            'userBoutique' => $userBoutique
  4590.         ]);
  4591.     }
  4592.     
  4593.     //Sales
  4594.     /**
  4595.      * @Route("/{slug}/proposals/new", name="admin.new_proposal")
  4596.      * @return \Symfony\Component\HttpFoundation\Response
  4597.      */
  4598.     public function newProposalsAction( Request $request, Boutique $boutique)
  4599.     {
  4600.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4601.            return $this->redirectToRoute('security_login');
  4602.         }  
  4603.         $em = $this->getDoctrine()
  4604.                     ->getManager();
  4605.         
  4606.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  4607.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  4608.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  4609.         
  4610.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  4611.         $startMonth = $intervalleMois['debut'];
  4612.         $endMonth = $intervalleMois['fin'];
  4613.         
  4614.         $proposals  = $em->getRepository(Commande::class)
  4615.                         ->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
  4616.         
  4617.         $startYear = date('Y-01-01');
  4618.         $endYear = date('Y-12-31');
  4619.         $user = $this->getUser();
  4620.         $userBoutique = $em->getRepository(UserBoutique::class)
  4621.                         ->findOneBy(
  4622.                             array(
  4623.                             'user' => $user->getId(),
  4624.                             'boutique' => $boutique->getId()
  4625.                             )
  4626.                         );
  4627.         if('POST' == $request->getMethod()){
  4628.             $dateDebut = $_POST['dateDebut'];
  4629.             $dateFin = $_POST['dateFin'];
  4630.             
  4631.             $dateDebut = new \DateTime($dateDebut);
  4632.             $dateFin = new \DateTime($dateFin);
  4633.             
  4634.             $proposals  = $em->getRepository(Commande::class)
  4635.                         ->commandeParDateEtType($boutique->getId(), 'proposal', $dateDebut, $dateFin);
  4636.             
  4637.             
  4638.             return $this->render('admin/proposals_table_content.html.twig', [
  4639.                'boutique' => $boutique,
  4640.                'proposals' => $proposals
  4641.             ]);
  4642.             
  4643.         }
  4644.     
  4645.         return $this->render('admin/nouvelle_commande.html.twig', [
  4646.            'boutique' => $boutique,
  4647.            'proposals' => $proposals,
  4648.            'dateDebut' => $dateDebut,
  4649.            'dateFin' => $dateFin,
  4650.            'startMonth' => $startMonth,
  4651.            'endMonth' => $endMonth,
  4652.            'startYear' => $startYear,
  4653.            'endYear' => $endYear,
  4654.            'userBoutique' => $userBoutique
  4655.         ]);
  4656.     }
  4657.     
  4658.     //Sales
  4659.     /**
  4660.      * @Route("/{slug}/sales", name="admin.sales")
  4661.      * @return \Symfony\Component\HttpFoundation\Response
  4662.      */
  4663.     public function salesAction( Request $request, ChiffreEnLettre $chiffreEnLettre, Boutique $boutique, $type = 'Invoice')
  4664.     {
  4665.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4666.            return $this->redirectToRoute('security_login');
  4667.         }      
  4668.         $em = $this->getDoctrine()
  4669.                     ->getManager();
  4670.         $produits  = $em->getRepository(Produit::class)
  4671.                         ->findByBoutique($boutique);
  4672.         $modeleReglements = $em->getRepository(ModeleReglement::class)
  4673.                                 ->findByBoutique($boutique);        
  4674.         $tiers = $em->getRepository(Tiers::class)
  4675.                                 ->findByBoutique($boutique);        
  4676.         
  4677.         $user = $this->getUser();
  4678.     
  4679.         $ok_soumission = '';
  4680.         $error = '';
  4681.         
  4682.         
  4683.         if($request->getMethod() == 'POST'){
  4684.             $typeFacture = $_POST['typeFacture'];
  4685.             $modeleReglement = $_POST['modeleReglement'];
  4686.             $client = $_POST['client'];
  4687.             $dateCommande = $_POST['dateCommande'];
  4688.             $montantHT = $_POST['montantHT'];
  4689.             $montantTVA = $_POST['montantTVA'];
  4690.             $montantTTC = $_POST['montantTTC'];
  4691.             $listeProduits = json_decode($_POST['listeProduits']);
  4692.             
  4693.             $commande = new Commande;
  4694.             $commande->setBoutique($boutique);
  4695.             $client = $em->getRepository(Tiers::class)
  4696.                         ->findOneById($client);
  4697.             if(null !== $client){
  4698.                 
  4699.                 $commande->setTiers($client);
  4700.             }
  4701.             
  4702.             $laDate = new \DateTime($dateCommande);
  4703.             $commande->setLaDate($laDate);
  4704.             $commande->setTotalHT($montantHT);
  4705.             $commande->setTotalTVA($montantTVA);
  4706.             $commande->setTotalTTC($montantTTC);
  4707.             $montantlettre = strtoupper($chiffreEnLettre->Conversion($montantTTC));
  4708.             $commande->setMontantEnLettre($montantlettre);
  4709.             $commande->setTypeFacture($typeFacture);
  4710.             $em->persist($commande);
  4711.             $em->flush();
  4712.             $produitCommandes = array();
  4713.             foreach($listeProduits as $listeProduit){
  4714.                 $listeProduit = (array)$listeProduit;
  4715.                 $leProduit = $em->getRepository(Produit::class)->findOneById($listeProduit['idProduit']);
  4716.                 
  4717.                 $produitCommande = new ProduitCommande;
  4718.                 $produitCommande->setProduit($leProduit);
  4719.                 $produitCommande->setCommande($commande);
  4720.                 $produitCommande->setQuantite($listeProduit['quantite']);
  4721.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  4722.                 $produitCommande->setRemise($listeProduit['reduction']);
  4723.                 $produitCommande->setTotalHT($listeProduit['totalHT']);
  4724.                 $produitCommande->setTotalTVA($listeProduit['totalTVA']);
  4725.                 $produitCommande->setTotalTTC($listeProduit['totalTTC']);
  4726.                 $em->persist($produitCommande);
  4727.                 array_push($produitCommandes, $produitCommande);
  4728.                 
  4729.             }
  4730.             $em->flush();
  4731.             return $this->render('admin/facture.html.twig', [
  4732.                    'boutique' => $boutique,
  4733.                    'commande' => $commande,
  4734.                    'typeFacture' => $typeFacture,
  4735.                    'client' => $client,
  4736.                    'produitCommandes' => $produitCommandes,
  4737.                    'listeProduit' => $listeProduit,
  4738.                    'montantHT' => $montantHT,
  4739.                    'montantTVA' => $montantTVA,
  4740.                    'montantTTC' => $montantTTC,
  4741.                    'userBoutique' => $userBoutique
  4742.                 ]);
  4743.             
  4744.             
  4745.         }
  4746.     
  4747.         return $this->render('admin/nouvelle_commande.html.twig', [
  4748.            'boutique' => $boutique,
  4749.            'produits' => $produits,
  4750.            'modeleReglements' => $modeleReglements,
  4751.            'tiers' => $tiers,
  4752.            'userBoutique' => $userBoutique
  4753.         ]);
  4754.     }
  4755.     
  4756.     //Vente
  4757.     /**
  4758.      * @Route("/{slug}/new-sale/{type}", name="admin.new_sale")
  4759.      * @return \Symfony\Component\HttpFoundation\Response
  4760.      */
  4761.     public function newSaleAction( Request $request, ChiffreEnLettre $chiffreEnLettre, Boutique $boutique, $type = 'invoice')
  4762.     {
  4763.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4764.            return $this->redirectToRoute('security_login');
  4765.         }      
  4766.         $em = $this->getDoctrine()
  4767.                     ->getManager();
  4768.         $magasins = $em->getRepository(Magasin::class)
  4769.                 ->findBy(
  4770.                     array(
  4771.                         'boutique' => $boutique,
  4772.                         'estSupprime' => false
  4773.                     )
  4774.                 );
  4775.         $projets = $em->getRepository(Projet::class)
  4776.                 ->findBy(
  4777.                     array(
  4778.                         'boutique' => $boutique,
  4779.                         'estSupprime' => false,
  4780.                         'boucle' => false
  4781.                     )
  4782.                 );
  4783.         $produits  = $em->getRepository(Produit::class)
  4784.                         ->findByBoutique($boutique);
  4785.         $modeleReglements = $em->getRepository(ModeleReglement::class)
  4786.                                 ->findByBoutique($boutique);        
  4787.         $tiers = $em->getRepository(Tiers::class)
  4788.                                 ->findByBoutique($boutique);        
  4789.         
  4790.         $user = $this->getUser();
  4791.         $vehicules = array( 22, 23, 28);
  4792.         
  4793.         $userBoutique = $em->getRepository(UserBoutique::class)
  4794.                         ->findOneBy(
  4795.                             array(
  4796.                             'user' => $user->getId(),
  4797.                             'boutique' => $boutique->getId()
  4798.                             )
  4799.                         );
  4800.     
  4801.         $ok_soumission = '';
  4802.         $error = '';
  4803.         
  4804.         $editMode = 'new';
  4805.         $responseFNE = '';
  4806.         $natureFacture = '';
  4807.         if($request->getMethod() == 'POST'){
  4808.             $magasin =  $_POST['magasin'];
  4809.             $magasin = $em->getRepository(Magasin::class)
  4810.                         ->findOneById($magasin);
  4811.             $projet =  $_POST['projet'];
  4812.             $typeFacture = $_POST['typeFacture'];
  4813.             $modeleReglement = $_POST['modeleReglement'];
  4814.             $client = $_POST['client'];
  4815.             $moyenDePaiement = $_POST['moyenDePaiement'];
  4816.             $clientFinalNom = $_POST['clientFinalNom'];
  4817.             $clientFinalNumero = $_POST['clientFinalNumero'];
  4818.             $dateCommande = $_POST['dateCommande'];
  4819.             $montantHT = (float)$_POST['montantHT'];
  4820.             $remise =   (float)$_POST['remise'];
  4821.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  4822.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  4823.             $montantTVA = (float)$_POST['montantTVA'];
  4824.             $montantTTC = (float)$_POST['montantTTC'];
  4825.             $titreDocument = $_POST['titreDocument'];
  4826.             $valableJusquAu = $_POST['valableJusquAu'];
  4827.             $observation = $_POST['observation'];
  4828.             $matriculeVehicule = $_POST['matriculeVehicule'];
  4829.             $marqueVehicule = $_POST['marqueVehicule'];
  4830.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  4831.             $listeProduits = json_decode($_POST['listeProduits']);
  4832.             $natureFacture = $_POST['natureFacture'];
  4833.             
  4834.             $commande = new Commande;
  4835.             $projet = $em->getRepository(Projet::class)
  4836.                         ->findOneById($projet);
  4837.             
  4838.             $commande->setProjet($projet);
  4839.             $commande->setNatureFacture($natureFacture);
  4840.             $commande->setClientFinalNom($clientFinalNom);
  4841.             $commande->setClientFinalNumero($clientFinalNumero);
  4842.             $commande->setCreePar($user);
  4843.             $commande->setBoutique($boutique);
  4844.             $client = $em->getRepository(Tiers::class)
  4845.                         ->findOneById($client);
  4846.             if(null !== $client){
  4847.                 
  4848.                 $commande->setTiers($client);
  4849.             }
  4850.             
  4851.             $laDate = new \DateTime($dateCommande);
  4852.             $commande->setLaDate($laDate);
  4853.             $commande->setMoyenDePaiement($moyenDePaiement);
  4854.             $commande->setMatriculeVehicule($matriculeVehicule);
  4855.             $commande->setMarqueVehicule($marqueVehicule);
  4856.             $commande->setKilometrageVehicule($kilometrageVehicule);
  4857.             
  4858.             $commande->setTotalHT($montantHT);
  4859.             $commande->setRemise($remise);
  4860.             $commande->setRemisePourcentage($remisePourcentage);
  4861.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  4862.             if($commande->getNatureFacture() == 'purchase'){
  4863.                 $commande->setTotalTVA(0);
  4864.                 $commande->setTotalTTC($totalHTApresRemise);
  4865.                 $commande->setResteAPayer($totalHTApresRemise);
  4866.             }else{
  4867.                 $commande->setTotalTVA($montantTVA);
  4868.                 $commande->setTotalTTC($montantTTC);
  4869.                 $commande->setResteAPayer($montantTTC);
  4870.             }
  4871.             $commande->setTitreDocument($titreDocument);
  4872.             $commande->setObservation($observation);
  4873.             if($valableJusquAu != ''){
  4874.                 $commande->setValableJusquAu(new \DateTime($valableJusquAu));
  4875.             }
  4876.             $montantlettre = strtoupper($chiffreEnLettre->Conversion($commande->getTotalTTC()));
  4877.             $commande->setMontantEnLettre($montantlettre);
  4878.             $commande->setTypeFacture($type);
  4879.             
  4880.             if($commande->getNumero() == ''){
  4881.                 $commande->setNumero($this->getNumero($type, $boutique));
  4882.             }
  4883.             
  4884.             $em->persist($commande);
  4885.             $em->flush();
  4886.             
  4887.             $produitCommandes = array();
  4888.             $produitsPourFactures = array();
  4889.             $coutDeRevientCommande = 0;
  4890.             $tourSurLaGestionDuStock = 0;
  4891.             
  4892.             $mouvementDeStock = new MouvementDeStock;
  4893.             $mouvementDeStock->setTypeMouvement(MouvementDeStock::TYPE_MOUVEMENT_SORTIE);
  4894.             $mouvementDeStock->setBoutique($boutique);
  4895.             $mouvementDeStock->setCommande($commande);
  4896.             $mouvementDeStock->setMagasin($magasin);
  4897.             $em->persist($mouvementDeStock);
  4898.                         
  4899.             foreach($listeProduits as $listeProduit){
  4900.                 $tourSurLaGestionDuStock++;
  4901.                 $listeProduit = (array)$listeProduit;
  4902.                 $idDuProduit = $listeProduit['idProduit'];
  4903.                 
  4904.                 if($idDuProduit == ''){
  4905.                     //Produit inexistant, il faut le créer
  4906.                     $leProduit = new Produit;
  4907.                     $leProduit->setNom($listeProduit['nomProduit']);
  4908.                     $em->persist($leProduit);
  4909.                     $em->flush();
  4910.                     
  4911.                     //TVA
  4912.                     if($listeProduit['tva'] > 0){
  4913.                         $tva = $em->getRepository(TVA::class)
  4914.                                     ->findOneBy(
  4915.                                         array(
  4916.                                             'boutique' => $boutique->getId(),
  4917.                                             'valeur'  => $listeProduit['tva']
  4918.                                         )
  4919.                                     );
  4920.                         if($tva == null){
  4921.                             $tva = new TVA;
  4922.                             $tva->setValeur($listeProduit['tva']);
  4923.                             $em->persist($tva);
  4924.                             $em->flush();
  4925.                         }
  4926.                         
  4927.                         $leProduit->setTva($tva);
  4928.                         
  4929.                     }else{
  4930.                         $tva = $em->getRepository(TVA::class)
  4931.                                     ->findOneBy(
  4932.                                         array(
  4933.                                             'boutique' => $boutique->getId(),
  4934.                                             'estPrincipale'  => true
  4935.                                         )
  4936.                                     );
  4937.                         $leProduit->setTva($tva);
  4938.                     }
  4939.                     //Prix
  4940.                     $produitP = new PrixProduit;
  4941.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  4942.                     $leProduit->addPrix($produitP);
  4943.                     $leProduit->setPrixActuel($produitP);
  4944.                     $leProduit->setBoutique($boutique);
  4945.                     $em->persist($produitP);
  4946.                     $em->persist($leProduit);
  4947.                     $em->flush();
  4948.                     
  4949.                 } else{
  4950.                     $leProduit = $em->getRepository(Produit::class)
  4951.                         ->findOneById($idDuProduit);
  4952.                 }
  4953.                 
  4954.                 
  4955.                 $produitCommande = new ProduitCommande;
  4956.                 $produitCommande->setProduit($leProduit);
  4957.                 $produitCommande->setCommande($commande);
  4958.                 $quantite = (float)$listeProduit['quantite'];
  4959.                 $produitCommande->setQuantite($quantite);
  4960.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  4961.                 $prixDeRevient = (float)$listeProduit['prixDeRevient'];
  4962.                 $produitCommande->setCoutDeRevient($prixDeRevient);
  4963.                 $totalCoutDeRevient = $prixDeRevient * $quantite;
  4964.                 $produitCommande->setTotalCoutDeRevient($totalCoutDeRevient);
  4965.                 $coutDeRevientCommande += $totalCoutDeRevient;
  4966.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  4967.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  4968.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  4969.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  4970.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  4971.                 
  4972.                 $produitCommande->setTva((float)$listeProduit['tva']);
  4973.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  4974.                 //Gestion des mouvements de stock
  4975.                 
  4976.                 if($leProduit->isGereLeStock()){
  4977.                 
  4978.                     if($type == 'invoice'){
  4979.                         
  4980.                         if($tourSurLaGestionDuStock == 1){
  4981.                             //$em->persist($mouvementDeStock);
  4982.                             $em->flush();
  4983.                         }
  4984.                         $leProduit->setStockDisponible($leProduit->getStockDisponible() - $produitCommande->getQuantite());    
  4985.                         $mouvementDeStockProduit = new MouvementDeStockProduit;
  4986.                         $mouvementDeStockProduit->setQuantite($produitCommande->getQuantite());
  4987.                         $mouvementDeStockProduit->setPrix($produitCommande->getPrix());
  4988.                         $mouvementDeStockProduit->setBoutique($boutique);
  4989.                         $mouvementDeStockProduit->setMouvementDeStock($mouvementDeStock);
  4990.                         $mouvementDeStockProduit->setProduit($leProduit);
  4991.                         $em->persist($mouvementDeStockProduit);
  4992.                         //Magasin
  4993.                         $stock = $em->getRepository(Stock::class)
  4994.                                 ->findOneBy(
  4995.                                     array(
  4996.                                         'boutique' => $boutique->getId(),
  4997.                                         'magasin' => $magasin->getId(),
  4998.                                         'produit' => $leProduit->getId()
  4999.                                     )
  5000.                                 );
  5001.                         if($stock !== null){
  5002.                             $stock->setQuantite($stock->getQuantite() - $produitCommande->getQuantite());
  5003.                             $mouvementDeStockProduit->setSoldeQuantite($stock->getQuantite());
  5004.                         }
  5005.                     }
  5006.                 } //Fin gestion de stock
  5007.                 $em->persist($produitCommande);
  5008.                 array_push($produitCommandes, $produitCommande);
  5009.                 $nom = $produitCommande->getProduit()->getNom();
  5010.                     if(mb_strtoupper($nom, 'UTF-8') === $nom){
  5011.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 60, "<br/>", true);
  5012.                     }else{
  5013.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 90, "<br/>", true);
  5014.                     }
  5015.                 $produitsPourFacture = array(
  5016.                     'nom' => $nom,
  5017.                     'quantite' =>$produitCommande->getQuantite(),
  5018.                     'prix' => $produitCommande->getPrix(),
  5019.                     'remise' => $produitCommande->getRemise(),
  5020.                     'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  5021.                 );
  5022.                 array_push($produitsPourFactures, $produitsPourFacture);
  5023.                 
  5024.             } // Fin foreach($listeProduits as $listeProduit)
  5025.              
  5026.             $commande->setCoutDeRevient($coutDeRevientCommande);
  5027.             $em->flush();
  5028.             
  5029.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  5030.             $content = '';
  5031.             //Tous les documents sont désormais générés au même endroit
  5032.             $content = $this->renderView('pdf/facture.html.twig', [
  5033.                         'boutique' => $boutique,
  5034.                         'facture' => $commande,
  5035.                         'produits' => $produitsPourFactures,
  5036.                         'natureFacture' => $natureFacture,
  5037.                         'vehicules' => $vehicules
  5038.                     ]);
  5039.             switch($type){
  5040.                 case 'invoice':
  5041.                     //Facture FNE qui
  5042.                     
  5043.                     if($boutique->getApiKeyFNE() != ''){
  5044.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  5045.                             $responseFNE = $this->genererFactureFNE($boutique->getSlug(), $commande->getId(), $natureFacture);
  5046.                         }
  5047.                     
  5048.                     }
  5049.                     $commande->setEtat(Commande::ETAT_FACTURE_PROVISOIRE);
  5050.                         
  5051.                     if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  5052.                         $this->genererEcritureComptableDeVente($boutique, $commande);
  5053.                         //Ecriture comptable
  5054.                     }
  5055.                     $em->flush();
  5056.                     
  5057.                 break;
  5058.                 
  5059.                 case 'proposal':
  5060.                     $commande->setEtat(Commande::ETAT_DEVIS_PROVISOIRE);
  5061.                     
  5062.                 break;
  5063.                 
  5064.                 
  5065.                 case 'bill_credit':
  5066.                     
  5067.                 break;
  5068.             }
  5069.             
  5070.             
  5071.             $pdf->writeHTML($content);
  5072.             $name = $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
  5073.             $lienPhysique = $commande->getUploadRootDir().$name;
  5074.                 
  5075.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  5076.             $pdf->output($lienPhysique, 'F');
  5077.             
  5078.             $em->flush();
  5079.             
  5080.             return $this->render('admin/response_new_sale.html.twig', [
  5081.                    'boutique' => $boutique,
  5082.                    'commande' => $commande,
  5083.                    'responseFNE' => $responseFNE,
  5084.                    'vehicules' => $vehicules
  5085.                    
  5086.                 ]);
  5087.             
  5088.             
  5089.             /*
  5090.             return $this->render('admin/facture.html.twig', [
  5091.                    'boutique' => $boutique,
  5092.                    'commande' => $commande,
  5093.                    'typeFacture' => $typeFacture,
  5094.                    'client' => $client,
  5095.                    'produitCommandes' => $produitCommandes,
  5096.                    'listeProduit' => $listeProduit,
  5097.                    'montantHT' => $montantHT,
  5098.                    'montantTVA' => $montantTVA,
  5099.                    'montantTTC' => $montantTTC,
  5100.                    'userBoutique' => $userBoutique
  5101.                 ]);
  5102.             */
  5103.             
  5104.         }
  5105.     
  5106.         return $this->render('admin/nouvelle_commande.html.twig', [
  5107.            'boutique' => $boutique,
  5108.            'produits' => $produits,
  5109.            'modeleReglements' => $modeleReglements,
  5110.            'tiers' => $tiers,
  5111.            'editMode' => $editMode,
  5112.            'userBoutique' => $userBoutique,
  5113.            'responseFNE' => $responseFNE,
  5114.            'type' => $type,
  5115.            'vehicules' => $vehicules,
  5116.            'projets' => $projets,
  5117.            'magasins' => $magasins
  5118.           
  5119.         ]);
  5120.     }
  5121.     //Vente
  5122.     /**
  5123.      * @Route("/{slug}/marque-tout-paye", name="admin_marque_tout_paye")
  5124.      * @return \Symfony\Component\HttpFoundation\Response
  5125.      */
  5126.     public function marquerToutPayeAction( Request $request, Boutique $boutique)
  5127.     {
  5128.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5129.            return $this->redirectToRoute('security_login');
  5130.         }      
  5131.         
  5132.         $em = $this->getDoctrine()
  5133.                     ->getManager();
  5134.         $user = $this->getUser();
  5135.         $commandes = $em->getRepository(Commande::class)
  5136.                         ->findBy(
  5137.                             array(
  5138.                                 'typeFacture' => 'invoice',
  5139.                                 'boutique' => $boutique
  5140.                             )
  5141.                         );
  5142.         foreach($commandes as $commande){
  5143.             
  5144.                 $montant = $commande->getTotalTTC();
  5145.                 
  5146.                 $payment = new Payment;
  5147.                 $payment->setLaDate($commande->getLaDate());
  5148.                 $payment->setCommande($commande);
  5149.                 $payment->setBoutique($boutique);
  5150.                 $payment->setMontant($montant);
  5151.                 $payment->setReferencePaiement($commande->getId());
  5152.                 $payment->setMoyenDePaiement('cash');
  5153.                 
  5154.                 $em->persist($payment);
  5155.                 
  5156.                 $commande->setMontantPaye($montant);
  5157.                 $commande->setResteAPayer(0);
  5158.                 $em->flush();
  5159.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  5160.                     $groupeEcritureComptable = new GroupeEcritureComptable;
  5161.                     $groupeEcritureComptable->setBoutique($boutique);
  5162.                     
  5163.                     $groupeEcritureComptable->setLibelleEcriture('Règlement client');
  5164.                     $groupeEcritureComptable->setDebit($commande->getResteAPayer());
  5165.                     $groupeEcritureComptable->setCredit($commande->getResteAPayer());
  5166.                     $groupeEcritureComptable->setLaDate($payment->getLaDate());
  5167.                     $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  5168.                     $groupeEcritureComptable->setAnnee($payment->getLaDate()->format('Y'));
  5169.                     $groupeEcritureComptable->setMois($payment->getLaDate()->format('m'));
  5170.                     $em->persist($groupeEcritureComptable);
  5171.                     $em->flush();
  5172.                     //Débit
  5173.                     $ecritureComptable = new EcritureComptable;
  5174.                     $ecritureComptable->setBoutique($boutique);
  5175.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  5176.                     $leJournal = $em->getRepository(JournalComptabilite::class)
  5177.                                     ->findOneBy(
  5178.                                         array(
  5179.                                         'boutique' => $boutique->getId(),
  5180.                                         'reference' => 'CA',
  5181.                                         'nom' => 'Caisse'
  5182.                                         )
  5183.                                     );
  5184.                     $groupeEcritureComptable->setLeJournal($leJournal);
  5185.                     $ecritureComptable->setLeJournal($leJournal);
  5186.                     $compte = $em->getRepository(Compte::class)
  5187.                                 ->findOneBy(
  5188.                                     array(
  5189.                                         'numero' => '5711',
  5190.                                         'boutique' => $boutique->getId()
  5191.                                     )
  5192.                                 ); //caisse
  5193.                                 
  5194.                     $compte->setSolde($compte->getSolde() + $commande->getResteAPayer());
  5195.                     $ecritureComptable->setCompte($compte);
  5196.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  5197.                     $ecritureComptable->setDebit($montant);
  5198.                     $ecritureComptable->setSolde($compte->getSolde());
  5199.                     $ecritureComptable->setLaDate($payment->getLaDate());
  5200.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  5201.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  5202.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  5203.                     $em->persist($ecritureComptable);
  5204.                     //Credit
  5205.                     $ecritureComptable = new EcritureComptable;
  5206.                     $ecritureComptable->setBoutique($boutique);
  5207.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  5208.                     
  5209.                     $ecritureComptable->setLeJournal($leJournal);
  5210.                     $compte = $em->getRepository(Compte::class)
  5211.                                 ->findOneBy(
  5212.                                     array(
  5213.                                         'numero' => '411',
  5214.                                         'boutique' => $boutique->getId()
  5215.                                     )
  5216.                                 ); //Client
  5217.                                 
  5218.                     $compte->setSolde($compte->getSolde() - $montant);
  5219.                     $ecritureComptable->setCompte($compte);
  5220.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  5221.                     $ecritureComptable->setCredit($montant);
  5222.                     $ecritureComptable->setSolde($compte->getSolde());
  5223.                     $ecritureComptable->setLaDate($payment->getLaDate());
  5224.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  5225.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  5226.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  5227.                     $em->persist($ecritureComptable);
  5228.                 } //Fin condition ecriture comptable automatique
  5229.                 
  5230.         }
  5231.         $userBoutique = $em->getRepository(UserBoutique::class)
  5232.                         ->findOneBy(
  5233.                             array(
  5234.                             'user' => $user->getId(),
  5235.                             'boutique' => $boutique->getId()
  5236.                             )
  5237.                         );
  5238.     
  5239.         
  5240.         return $this->render('admin/marque_tout_paye.html.twig', [
  5241.            'boutique' => $boutique,
  5242.            'userBoutique' => $userBoutique,
  5243.           
  5244.         ]);
  5245.     }
  5246.     public function genererEcritureComptableDeVente($boutique, $commande)
  5247.     {
  5248.         $em = $this->getDoctrine()
  5249.                     ->getManager();
  5250.                     
  5251.         $groupeEcritureComptable = new GroupeEcritureComptable;
  5252.         $groupeEcritureComptable->setBoutique($boutique);
  5253.         $libelle = 'Vente client';
  5254.         if($commande->getTiers() != null){
  5255.             $libelle = 'Vente à ' . $commande->getTiers()->getNom();
  5256.         }
  5257.         $groupeEcritureComptable->setLibelleEcriture($libelle);
  5258.         $groupeEcritureComptable->setDebit($commande->getTotalTTC());
  5259.         $groupeEcritureComptable->setCredit($commande->getTotalTTC());
  5260.         $groupeEcritureComptable->setLaDate($commande->getLaDate());
  5261.         $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  5262.         $groupeEcritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  5263.         $groupeEcritureComptable->setMois($commande->getLaDate()->format('m'));
  5264.         $em->persist($groupeEcritureComptable);
  5265.         $em->flush();
  5266.         //Débit
  5267.         $ecritureComptable = new EcritureComptable;
  5268.         $ecritureComptable->setBoutique($boutique);
  5269.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  5270.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  5271.         $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  5272.         $compteClient = $em->getRepository(Compte::class)
  5273.                                     ->findOneBy(
  5274.                                         array(
  5275.                                             'numero' => '411',
  5276.                                             'boutique' =>$boutique->getId()
  5277.                                         )
  5278.                                     );
  5279.         $compteClient->setSolde($compteClient->getSolde() + $commande->getTotalTTC());
  5280.         $ecritureComptable->setCompte($compteClient);
  5281.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  5282.         $nomClient = '';
  5283.         if($commande->getTiers() != null){
  5284.             $nomClient =  ' à '.$commande->getTiers()->getNom();
  5285.         }
  5286.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  5287.         $ecritureComptable->setDebit($commande->getTotalTTC());
  5288.         $ecritureComptable->setSolde($compteClient->getSolde());
  5289.         $ecritureComptable->setLaDate($commande->getLaDate());
  5290.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  5291.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  5292.                     
  5293.         $em->persist($ecritureComptable);
  5294.         $ecritureComptable = new EcritureComptable;
  5295.         $ecritureComptable->setBoutique($boutique);
  5296.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  5297.         
  5298.         //Crédit
  5299.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  5300.         $compte = $em->getRepository(Compte::class)
  5301.                     ->findOneBy(
  5302.                         array(
  5303.                                 'numero' => '701',
  5304.                                 'boutique' => $boutique->getId()
  5305.                             )
  5306.                         );
  5307.         
  5308.         $compte->setSolde($compte->getSolde() - $commande->getTotalHTApresRemise() );
  5309.         $ecritureComptable->setCompte($compte);
  5310.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  5311.                     
  5312.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  5313.         $ecritureComptable->setCredit($commande->getTotalHTApresRemise());
  5314.         $ecritureComptable->setSolde($compte->getSolde());
  5315.         $ecritureComptable->setLaDate($commande->getLaDate());
  5316.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  5317.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  5318.                     
  5319.                     
  5320.         $em->persist($ecritureComptable);
  5321.         //TVA pour une entreprise qui facture la TVA
  5322.         if($commande->getTotalTVA() > 0){
  5323.             $ecritureComptable = new EcritureComptable;
  5324.             $ecritureComptable->setBoutique($boutique);
  5325.             $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  5326.                         
  5327.             $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  5328.             $compte = $em->getRepository(Compte::class)
  5329.                             ->findOneBy(
  5330.                                 array(
  5331.                                     'numero' => '4431',
  5332.                                     'boutique' => $boutique->getId()
  5333.                                 )
  5334.                             );
  5335.             $compte->setSolde($compte->getSolde() - $commande->getTotalTVA() );
  5336.             $ecritureComptable->setCompte($compte);
  5337.             $ecritureComptable->setNumeroPiece($commande->getNumero());
  5338.                         
  5339.             $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  5340.             $ecritureComptable->setCredit($commande->getTotalTVA());
  5341.             $ecritureComptable->setSolde($compte->getSolde());
  5342.             $ecritureComptable->setLaDate($commande->getLaDate());
  5343.             $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  5344.             $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  5345.                     
  5346.                         
  5347.             $em->persist($ecritureComptable);
  5348.         }
  5349.         $em->flush();
  5350.     }
  5351.     
  5352.     /**
  5353.       * @Route("/{slug}/generer-facture-fne/{id}", name="admin_url_generer_facture_fne")
  5354.     */
  5355.     public function urlGenererFactureFNEAction(Request $request, $slug, $id)
  5356.     {
  5357.         
  5358.         $em = $this->getDoctrine()
  5359.                     ->getManager();
  5360.         $boutique = $em->getRepository(Boutique::class)
  5361.                         ->findOneBySlug($slug);
  5362.         $commande = $em->getRepository(Commande::class)
  5363.                         ->findOneById($id);
  5364.         
  5365.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5366.                             ->findByCommande($commande);
  5367.         $reponse = '';
  5368.         $vehicules = array( 22, 23, 28);
  5369.         if($boutique->getApiKeyFNE() != ''){
  5370.             $reponse = $this->genererFactureFNE($slug, $id, $commande->getNatureFacture());
  5371.             //$reponse = json_decode($reponse);
  5372.             if(isset($reponse['invoice']['id'])){
  5373.                 $commande->setIdFactureFNE($reponse['invoice']['id']);
  5374.             }
  5375.             if(isset($reponse['token'])){
  5376.                 $commande->seTtokenFNE($reponse['token']);
  5377.             }
  5378.             if(isset($reponse['balance_sticker'])){
  5379.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  5380.             }
  5381.             if(isset($reponse['balance_sticker'])){
  5382.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  5383.             }
  5384.             if(isset($reponse['balance_funds'])){
  5385.                 $boutique->setSoldeTimbreFNE($reponse['balance_funds']);
  5386.             }
  5387.             
  5388.             
  5389.             $em->flush();
  5390.         
  5391.         }
  5392.         
  5393.         $produitsPourFactures = array();
  5394.         foreach($produitCommandes as $produitCommande){
  5395.             $produitsPourFacture = array(
  5396.                         'nom' => wordwrap($produitCommande->getProduit()->getNom(), 90, "<br/>", true),
  5397.                         'quantite' =>$produitCommande->getQuantite(),
  5398.                         'prix' => $produitCommande->getPrix(),
  5399.                         'remise' => $produitCommande->getRemise(),
  5400.                         'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  5401.                     );
  5402.             array_push($produitsPourFactures, $produitsPourFacture);
  5403.         }
  5404.         
  5405.         $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'fr');
  5406.     
  5407.         $content = $this->renderView('pdf/facture.html.twig', [
  5408.                     'boutique' => $boutique,
  5409.                     'facture' => $commande,
  5410.                     'produits' => $produitsPourFactures,
  5411.                     'natureFacture' => $commande->getNatureFacture(),
  5412.                     'vehicules' => $vehicules
  5413.                 ]);
  5414.         $pdf->writeHTML($content);
  5415.         $name = $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
  5416.         $lienPhysique = $commande->getUploadRootDir().$name;
  5417.                 
  5418.         $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  5419.         $pdf->output($lienPhysique, 'F');
  5420.         $em->flush();
  5421.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  5422.         return $this->render('admin/admin_generer_facture_fne.html.twig', [
  5423.            'boutique' => $boutique,
  5424.            'content' => $content,
  5425.            'userBoutique' => $userBoutique
  5426.         ]);
  5427.         
  5428.     }
  5429.     public function genererFactureFNE($slug, $idCommande, $invoiceType = 'sale')
  5430.     {
  5431.         
  5432.         $em = $this->getDoctrine()
  5433.                     ->getManager();
  5434.         $boutique = $em->getRepository(Boutique::class)
  5435.                         ->findOneBySlug($slug);
  5436.         $commande = $em->getRepository(Commande::class)
  5437.                         ->findOneById($idCommande);
  5438.         $user = $this->getUser();
  5439.         $userBoutique = $em->getRepository(UserBoutique::class)
  5440.                         ->findOneBy(
  5441.                             array(
  5442.                                 'user' => $user,
  5443.                                 'boutique' => $boutique
  5444.                             )
  5445.                         );
  5446.         $url = $boutique->getUrlFNEDeBase().'/external/invoices/sign';
  5447.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5448.                                 ->findByCommande($commande);
  5449.                                 
  5450.         $globalCustomTaxes = array();
  5451.         
  5452.         $items = array();
  5453.         foreach($produitCommandes as $produitCommande){
  5454.             $tvas = array();
  5455.             $customTaxes = array();
  5456.             if($invoiceType == 'sale'){
  5457.                 if($produitCommande->getProduit()->getTVA() != null){
  5458.                     array_push($tvas, $produitCommande->getProduit()->getTVA()->getLibelleInterne());
  5459.                     $nested = array(
  5460.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  5461.                         'amount' =>$produitCommande->getProduit()->getTVA()->getValeur()
  5462.                     );
  5463.                     $nested  = json_encode($nested);
  5464.                     array_push($customTaxes, $nested);
  5465.                 }
  5466.             }else{
  5467.                 array_push($tvas, 'TVAD');
  5468.                     $nested = array(
  5469.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  5470.                         'amount' =>0
  5471.                     );
  5472.                     $nested  = json_encode($nested);
  5473.                     array_push($customTaxes, $nested);
  5474.             }
  5475.             
  5476.             
  5477.             
  5478.             $item = array(
  5479.                     //'taxes' => $tvas,
  5480.                     //'customTaxes' => $customTaxes,
  5481.                     'reference' => $produitCommande->getProduit()->getReference(),
  5482.                     'description' =>  $produitCommande->getProduit()->getNom(),
  5483.                     'quantity' => $produitCommande->getQuantite(),
  5484.                     'amount' => $produitCommande->getPrix(),
  5485.                     'discount' => $produitCommande->getRemisePourcentage(),
  5486.                     'measurementUnit' => $produitCommande->getProduit()->getUniteDeMesure()
  5487.             );
  5488.             if($invoiceType == 'sale'){
  5489.                 $item['taxes'] = $tvas;
  5490.             }
  5491.             array_push($items, $item);
  5492.         }
  5493.         
  5494.         $clientNcc =  '';
  5495.         if($invoiceType == 'sale'){
  5496.             if($commande->getTiers() != null){
  5497.                 $clientNcc = str_replace(' ', '', $commande->getTiers()->getCodeTVA());
  5498.             }
  5499.             
  5500.         }
  5501.         $template = 'B2C';
  5502.         $clientCompanyName = $commande->getClientFinalNom();
  5503.         $clientPhone = str_replace(' ', '', $commande->getClientFinalNumero());
  5504.         $clientEmail = '';
  5505.         if($commande->getTiers() != null){
  5506.             $template = $commande->getTiers()->getTypeClient();
  5507.             $clientCompanyName = $commande->getTiers()->getNom();
  5508.             $clientPhone = str_replace(' ', '', $commande->getTiers()->getTelephone());
  5509.             $clientEmail = $commande->getTiers()->getEmail();
  5510.         }
  5511.         $content = array(
  5512.             
  5513.             'invoiceType' => $invoiceType ,
  5514.             'paymentMethod'=> $commande->getMoyenDePaiement(),
  5515.             'template' => $template,
  5516.             'isRne' => false,
  5517.             'clientNcc' => $clientNcc,
  5518.             'clientCompanyName' => $clientCompanyName,
  5519.             'clientPhone' => $clientPhone,
  5520.             'clientEmail' => $clientEmail,
  5521.             'clientSellerName' => $user->getNomComplet(),
  5522.             'pointOfSale' => $userBoutique->getNomPointDeVenteFNE(),
  5523.             'establishment' =>  $userBoutique->getNomEtablissementFNE(),
  5524.             'clientSellerName' =>$userBoutique->getVendeurFNE(),
  5525.             'commercialMessage' => $commande->getTitreDocument(),
  5526.             'footer' => 'Arrêtée la presente facture à la somme de '.$commande->getMontantEnLettre().' '.$boutique->getSettings()->getDevise(),
  5527.             //'foreignCurrency' => '',
  5528.             //'foreignCurrencyRate' => 0,
  5529.             'items' => $items,
  5530.             
  5531.             'discount' => $commande->getRemisePourcentage()
  5532.         );
  5533.         
  5534.         if($invoiceType == 'sale'){
  5535.             $content['customTaxes'] = $globalCustomTaxes;
  5536.         }
  5537.         
  5538.         $content = json_encode($content);
  5539.         $ch = curl_init($url);
  5540.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  5541.         curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  5542.         curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
  5543.         $serverOutput = curl_exec($ch);
  5544.         curl_close($ch);
  5545.         
  5546.         $response = new JsonResponse;
  5547.         
  5548.         
  5549.         //$response->setContent(json_encode($serverOutput));
  5550.         //return $response;
  5551.         $serverOutput = json_decode($serverOutput, true);
  5552.         if(isset($serverOutput['invoice'])){
  5553.             $commande->setIdFactureFNE($serverOutput['invoice']['id']);
  5554.             $commande->seTtokenFNE($serverOutput['token']);
  5555.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5556.             if(isset($serverOutput['balance_funds'])){
  5557.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  5558.             }
  5559.             if(isset($serverOutput['balance_sticker'])){
  5560.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5561.             }
  5562.             
  5563.             
  5564.             //Mettre aussi les produitCommande Ajour pour d'eventuel facture d'avoir
  5565.             
  5566.             $itemsRetournes = $serverOutput['invoice']['items'];
  5567.             foreach($itemsRetournes as $itemsRetourne){
  5568.                 $pro = $em->getRepository(Produit::class)
  5569.                             ->findOneBy(
  5570.                                 array(
  5571.                                     'boutique' => $boutique,
  5572.                                     'nom' => $itemsRetourne['description'],
  5573.                                     'reference' => $itemsRetourne['reference']
  5574.                                 )
  5575.                             );
  5576.                 if($pro != null){
  5577.                     $proCom = $em->getRepository(ProduitCommande::class)
  5578.                             ->findOneBy(
  5579.                                 array(
  5580.                                     'commande' => $commande->getId(),
  5581.                                     'produit' => $pro->getId()
  5582.                                 )
  5583.                             );
  5584.                     if($proCom != null){
  5585.                         $proCom->setIdProduitPourFactureDAvoirFNE($itemsRetourne['id']);
  5586.                         $em->persist($proCom);
  5587.                     }
  5588.                 
  5589.                 }
  5590.             }
  5591.             
  5592.             $em->flush();
  5593.         }
  5594.         return $serverOutput;
  5595.         
  5596.     }
  5597.     
  5598.     
  5599.     /**
  5600.       * @Route("/{slug}/url-generer-facture-d-avoir-fne/{id}", name="admin_url_generer_facture_d_avoir_fne")
  5601.     */
  5602.     public function urlGenererFactureDAvoirFNEAction(Request $request, ChiffreEnLettre $chiffreEnLettre, $slug, $id)
  5603.     {
  5604.         
  5605.         $em = $this->getDoctrine()
  5606.                     ->getManager();
  5607.         $commande = $em->getRepository(Commande::class)
  5608.                         ->findOneById($id);
  5609.         $boutique = $em->getRepository(Boutique::class)
  5610.                         ->findOneBySlug($slug);
  5611.         $user = $this->getUser();
  5612.         $userBoutique = $em->getRepository(UserBoutique::class)
  5613.                         ->findOneBy(
  5614.                             array(
  5615.                                 'user' => $user,
  5616.                                 'boutique' => $boutique
  5617.                             )
  5618.                         );
  5619.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5620.                                 ->findByCommande($commande);
  5621.         $reponse = '';
  5622.         
  5623.         if($request->getMethod() == 'POST'){
  5624.                 
  5625.             $chiffreEnLettre = new ChiffreEnLettre;
  5626.                 $commande = $em->getRepository(Commande::class)
  5627.                         ->findOneById($id);
  5628.         $user = $this->getUser();
  5629.         
  5630.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5631.                                 ->findByCommande($commande);
  5632.                                 
  5633.             $avoir =  clone $commande;
  5634.             $avoir->setBoutique($boutique);
  5635.             $avoir->setTypeFacture('bill_credit');
  5636.             $avoir->setNumero($this->getNumero('bill_credit', $boutique));
  5637.             $avoir->setTiers($commande->getTiers());
  5638.             $avoir->setIdFactureDeBase($commande->getId());
  5639.             $em->persist($avoir);
  5640.             
  5641.             $em->flush();
  5642.             $avoirProduits = array();
  5643.             $avoirProduitPourFactures = array();
  5644.             foreach($produitCommandes as $produitCommande){
  5645.                     
  5646.                     $avoirProduit = new ProduitCommande;
  5647.                     $avoirProduit->setCommande($avoir);
  5648.                     $avoirProduit->setProduit($produitCommande->getProduit());
  5649.                     $avoirProduit->setQuantite($produitCommande->getQuantite());
  5650.                     $avoirProduit->setPrix($produitCommande->getPrix());
  5651.                 
  5652.                     $avoirProduit->setTotalHT($produitCommande->getTotalHT());
  5653.                     $avoirProduit->setTva($produitCommande->getTotalTva());
  5654.                     $avoirProduit->setTotalTTC($produitCommande->getTotalTTC());
  5655.                     array_push($avoirProduits, $avoirProduit);
  5656.                     $nom = $produitCommande->getProduit()->getNom();
  5657.                     if(mb_strtoupper($nom, 'UTF-8') === $nom){
  5658.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 60, "<br/>", true);
  5659.                     }else{
  5660.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 90, "<br/>", true);
  5661.                     }
  5662.                     
  5663.                     $avoirProduitPourFacture = array(
  5664.                     'nom' => $nom,
  5665.                     'quantite' =>$produitCommande->getQuantite(),
  5666.                     'prix' => $produitCommande->getPrix(),
  5667.                     'remise' => $produitCommande->getRemise(),
  5668.                     'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  5669.                     );
  5670.                     array_push($avoirProduitPourFactures, $avoirProduitPourFacture);
  5671.                     $em->persist($avoirProduit);
  5672.             }
  5673.             $em->flush();
  5674.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  5675.                 
  5676.                     
  5677.             $pdfContent = $this->renderView('pdf/facture.html.twig', [
  5678.                         'boutique' => $boutique,
  5679.                         'facture' => $avoir,
  5680.                         'produits' => $avoirProduitPourFactures,
  5681.                         'commandeDeBasse' => $commande
  5682.                 ]);
  5683.             $pdf->writeHTML($pdfContent);
  5684.             $name = $avoir->getTypeFacture().$avoir->getId().time().$boutique->getId().rand(1, 10000).'.pdf';
  5685.             $lienPhysique = $avoir->getUploadRootDir().$name;
  5686.                 
  5687.             $avoir->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  5688.             $pdf->output($lienPhysique, 'F');
  5689.             // Fin facture PDF
  5690.             
  5691.             $em->flush();
  5692.         
  5693.             if($boutique->getApiKeyFNE() != ''){
  5694.                 $reponse = $this->genererFactureDAvoirFNE($chiffreEnLettre, $boutique->getSlug(), $commande->getId());
  5695.             }
  5696.              return $this->render('admin/retour_url_generer_facture_d_avoir_fne.html.twig', [
  5697.                 'boutique' => $boutique,
  5698.                 'reponse' => $reponse,
  5699.                 'userBoutique' => $userBoutique,
  5700.                 'produitCommandes' => $produitCommandes,
  5701.                 'avoir' => $avoir
  5702.                 ]);
  5703.         }
  5704.         
  5705.         
  5706.          return $this->render('admin/url_generer_facture_d_avoir_fne.html.twig', [
  5707.            'boutique' => $boutique,
  5708.            'reponse' => $reponse,
  5709.            'userBoutique' => $userBoutique,
  5710.            'produitCommandes' => $produitCommandes
  5711.         ]);
  5712.     }
  5713.     
  5714.     public function genererFactureDAvoirFNE(ChiffreEnLettre $chiffreEnLettre, $slug, $id)
  5715.     {
  5716.         
  5717.         $em = $this->getDoctrine()
  5718.                     ->getManager();
  5719.         $boutique = $em->getRepository(Boutique::class)
  5720.                         ->findOneBySlug($slug);
  5721.         $commande = $em->getRepository(Commande::class)
  5722.                         ->findOneById($id);
  5723.         $user = $this->getUser();
  5724.         $userBoutique = $em->getRepository(UserBoutique::class)
  5725.                         ->findOneBy(
  5726.                             array(
  5727.                                 'user' => $user,
  5728.                                 'boutique' => $boutique
  5729.                             )
  5730.                         );
  5731.         
  5732.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5733.                                 ->findByCommande($commande);
  5734.                                 
  5735.         
  5736.         $items = array();
  5737.         $url = $boutique->getUrlFNEDeBase().'/external/invoices/'.$commande->getIdFactureFNE().'/refund';
  5738.         $avoirProduits = array();
  5739.         foreach($produitCommandes as $produitCommande){
  5740.             $item = array(
  5741.                     'id' => $produitCommande->getProduit()->getId(),
  5742.                     'quantity' => $produitCommande->getQuantite(),
  5743.                 );
  5744.             array_push($items, $item);
  5745.         }
  5746.             $content = array(
  5747.                 'id' => $commande->getIdFactureFNE(),
  5748.                 'items' => $items
  5749.             );
  5750.             
  5751.             
  5752.             $content = json_encode($content);
  5753.             
  5754.             $ch = curl_init($url);
  5755.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  5756.             curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  5757.             curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
  5758.             $serverOutput = curl_exec($ch);
  5759.             curl_close($ch);
  5760.             
  5761.             $response = new JsonResponse;
  5762.             
  5763.             
  5764.             //$response->setContent(json_encode($serverOutput));
  5765.             //return $response;
  5766.             $serverOutput = json_decode($serverOutput, true);
  5767.             //$commande->setIdFactureFNE($serverOutput['invoice']['id']);
  5768.             if(isset($serverOutput['token'])){
  5769.                 $avoir->seTtokenFNE($serverOutput['token']);
  5770.             }
  5771.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5772.             if(isset($serverOutput['balance_funds'])){
  5773.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  5774.             }
  5775.             if(isset($serverOutput['balance_sticker'])){
  5776.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  5777.             }
  5778.             
  5779.             
  5780.             $em->flush();
  5781.             return $serverOutput;
  5782.         
  5783.         
  5784.     }
  5785.     
  5786.     //Vente
  5787.     /**
  5788.      * @Route("/{slug}/change-sale-state/{type}/{id}/{state}", name="admin.change_sale_state")
  5789.      * @return \Symfony\Component\HttpFoundation\Response
  5790.      */
  5791.     public function changeSaleStateAction(Request $request, $slug, $type, $id, $state)
  5792.     {
  5793.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5794.            return $this->redirectToRoute('security_login');
  5795.         }
  5796.         
  5797.         $em = $this->getDoctrine()
  5798.                     ->getManager();
  5799.                     
  5800.         $boutique  = $em->getRepository(Boutique::class)
  5801.                         ->findOneBySlug($slug);
  5802.     
  5803.         $user = $this->getUser();
  5804.         $userBoutique = $em->getRepository(UserBoutique::class)
  5805.                         ->findOneBy(
  5806.                             array(
  5807.                             'user' => $user->getId(),
  5808.                             'boutique' => $boutique->getId()
  5809.                             )
  5810.                         );
  5811.         $commande  = $em->getRepository(Commande::class)
  5812.                         ->findOneBy(
  5813.                             array(
  5814.                                 'boutique' => $boutique->getId(),
  5815.                                 'id' => $id
  5816.                         ));
  5817.         if($commande->getNumero() == ''){
  5818.             $commande->setNumero($this->getNumero($type, $boutique));
  5819.         }
  5820.         $commande->setEtat($state);
  5821.         $em->flush();
  5822.         
  5823.         //Produit commande du devis
  5824.                     
  5825.         $produitCommandesDevis = $em->getRepository(ProduitCommande::class)
  5826.                                 ->findByCommande($commande);
  5827.         //
  5828.         $produitCommandes = array();
  5829.         $produitsPourFactures = array();
  5830.         
  5831.         
  5832.         switch($type){
  5833.             case 'proposal':
  5834.                 
  5835.                     $facture = new  Commande;
  5836.                     $facture->setTypeFacture('invoice');
  5837.                     $facture->setNatureFacture('sale');
  5838.                     $facture->setEtat(Commande::ETAT_FACTURE_FINALISE);
  5839.                     $facture->setLaDate(new \DateTime());
  5840.                     $facture->setTotalHT($commande->getTotalHT());
  5841.                     $facture->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  5842.                     $facture->setTotalTVA($commande->getTotalTVA());
  5843.                     $facture->setTotalTTC($commande->getTotalTTC());
  5844.                     $facture->setResteAPayer($commande->getTotalTTC());
  5845.                     $facture->setCoutDeRevient($commande->getCoutDeRevient());
  5846.                     
  5847.                     $facture->setRemise($commande->getRemise());
  5848.                     $facture->setRemisePourcentage($commande->getRemisePourcentage());
  5849.                     $facture->setMontantEnLettre($commande->getMontantEnLettre());
  5850.                     $facture->setBoutique($commande->getBoutique());
  5851.                     $facture->setTiers($commande->getTiers());
  5852.                     $facture->setClientFinalNom($commande->getClientFinalNom());
  5853.                     $facture->setClientFinalNumero($commande->getClientFinalNumero());
  5854.                     
  5855.                     $facture->setNumero($this->getNumero('invoice', $boutique));
  5856.                     $em->persist($facture);
  5857.                     $em->flush();
  5858.                     $this->genererEcritureComptableDeVente($boutique, $facture);
  5859.                     
  5860.                     if($boutique->getApiKeyFNE() != ''){
  5861.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  5862.                             $responseFNE = $this->genererFactureFNE($boutique->getSlug(), $facture->getId(), $facture->getNatureFacture());
  5863.                         }
  5864.                     
  5865.                     }
  5866.                     foreach($produitCommandesDevis as $produitCommandeDevis){
  5867.                         $prodCom = new ProduitCommande;
  5868.                         $prodCom->setProduit($produitCommandeDevis->getProduit());
  5869.                         $prodCom->setCommande($facture);
  5870.                         $prodCom->setQuantite($produitCommandeDevis->getQuantite());
  5871.                         $prodCom->setPrix($produitCommandeDevis->getPrix());
  5872.                         $prodCom->setRemise($produitCommandeDevis->getRemise());
  5873.                         $prodCom->setTotalHT($produitCommandeDevis->getTotalHT());
  5874.                         $prodCom->setTotalHTApresRemise($produitCommandeDevis->getTotalHTApresRemise());
  5875.                         $prodCom->setCoutDeRevient($produitCommandeDevis->getCoutDeRevient());
  5876.                         $prodCom->setTotalCoutDeRevient($produitCommandeDevis->getTotalCoutDeRevient());
  5877.                         
  5878.                         
  5879.                         $prodCom->setTotalTVA($produitCommandeDevis->getTotalTVA());
  5880.                         $prodCom->setTotalTTC($produitCommandeDevis->getTotalTTC());
  5881.                         $prodCom->setTva($produitCommandeDevis->getTva());
  5882.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  5883.                             $produitCommandeDevis->getProduit()->setStockDisponible($produitCommandeDevis->getProduit()->getStockDisponible() - $produitCommandeDevis->getQuantite());
  5884.                         }
  5885.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  5886.                             if($type == 'invoice'){
  5887.                                 
  5888.                                 $produitVendu = $em->getRepository(Produit::class)
  5889.                                                 ->findOneById($idDuProduit);
  5890.                                 $produitVendu->setStockDisponible($produitVendu->getStockDisponible() - $produitCommandeDevis->getQuantite());
  5891.                             }
  5892.                         }
  5893.                         $em->persist($prodCom);
  5894.                         array_push($produitCommandes, $prodCom);
  5895.                         $produitsPourFacture = array(
  5896.                             'nom' => wordwrap($prodCom->getProduit()->getNom(), 90, "<br />", true),
  5897.                             'quantite' =>$prodCom->getQuantite(),
  5898.                             'prix' => $prodCom->getPrix(),
  5899.                             'remise' => $prodCom->getRemise(),
  5900.                             'totalHTApresRemise' => $prodCom->getTotalHTApresRemise()
  5901.                         );
  5902.                         array_push($produitsPourFactures, $produitsPourFacture);
  5903.                     }
  5904.                     
  5905.                     $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  5906.                     
  5907.                     $content = $this->renderView('pdf/facture.html.twig', [
  5908.                         'boutique' => $boutique,
  5909.                         'facture' => $facture,
  5910.                         'produits' => $produitsPourFactures
  5911.                     ]);
  5912.                     
  5913.                     $pdf->writeHTML($content);
  5914.                     $lienPhysique = $facture->getUploadRootDir().$facture->getTypeFacture().$facture->getId().'.pdf';
  5915.                 
  5916.                     $facture->setLienPDF($this->getDomain().'/pdf478njkp01/'.$facture->getTypeFacture().$facture->getId().'.pdf');
  5917.                     $pdf->output($lienPhysique, 'F');
  5918.                     
  5919.                     $commande->setEtat(Commande::ETAT_DEVIS_FINALISE);
  5920.                     $em->flush();
  5921.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  5922.             
  5923.             break;
  5924.             
  5925.             case 'invoice':
  5926.                     $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  5927.                     
  5928.                     $content = $this->renderView('pdf/facture.html.twig', [
  5929.                         'boutique' => $boutique,
  5930.                         'facture' => $commande,
  5931.                         'produits' => $produitsPourFactures
  5932.                     ]);
  5933.                     
  5934.                     $pdf->writeHTML($content);
  5935.                     $lienPhysique = $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  5936.                 
  5937.                     $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  5938.                     $commande->setEtat(Commande::ETAT_FACTURE_FINALISE);
  5939.                     $pdf->output($lienPhysique, 'F');
  5940.                     
  5941.                     $em->flush();
  5942.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  5943.             break;
  5944.         }
  5945.         
  5946.         
  5947.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  5948.         
  5949.     }
  5950.     
  5951.     
  5952.     /**
  5953.      * @Route("/{slug}/check-customer-vat-status", name="admin.check_customer_vat_status")
  5954.      * @return \Symfony\Component\HttpFoundation\Response
  5955.      */
  5956.     public function checkCustomerVATStatusAction(Request $request, $slug)
  5957.     {
  5958.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5959.            return $this->redirectToRoute('security_login');
  5960.         }
  5961.         $em = $this->getDoctrine()
  5962.                     ->getManager();
  5963.         $response = new JsonResponse;
  5964.         $response->headers->set('Access-Control-Allow-Origin', '*');
  5965.         $response->headers->set('Content-Type', 'application/json');
  5966.         
  5967.         $boutique = $em->getRepository(Boutique::class)
  5968.                                     ->findOneBySlug($slug);
  5969.                         
  5970.         $data = array();
  5971.         
  5972.         if($request->getMethod() == 'POST'){
  5973.             $id = $_POST['id'];
  5974.             $customer  = $em->getRepository(Tiers::class)
  5975.                         ->findOneBy(
  5976.                             array(
  5977.                                 'boutique' => $boutique->getId(),
  5978.                                 'id' => $id
  5979.                         ));
  5980.             
  5981.             $data = array(
  5982.                 "assujettiALaTVA" => $customer->getAssujettiALaTVA()
  5983.             );
  5984.         }
  5985.         
  5986.         $response->setContent(json_encode($data));
  5987.         return $response;
  5988.     }
  5989.     
  5990.     
  5991.     //Vente
  5992.     /**
  5993.      * @Route("/{slug}/edit-sale/{type}/{id}", name="admin.edit_sale")
  5994.      * @return \Symfony\Component\HttpFoundation\Response
  5995.      */
  5996.     public function editSaleAction(Request $request, ChiffreEnLettre $chiffreEnLettre, $slug, $type, $id)
  5997.     {
  5998.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5999.            return $this->redirectToRoute('security_login');
  6000.         }  
  6001.         $em = $this->getDoctrine()
  6002.                     ->getManager();
  6003.         $boutique  = $em->getRepository(Boutique::class)
  6004.                         ->findOneBySlug($slug);
  6005.     
  6006.         $produits  = $em->getRepository(Produit::class)
  6007.                         ->findByBoutique($boutique->getId());
  6008.         
  6009.         $magasins = $em->getRepository(Magasin::class)
  6010.                 ->findBy(
  6011.                     array(
  6012.                         'boutique' => $boutique,
  6013.                         'estSupprime' => false
  6014.                     )
  6015.                 );
  6016.         $projets = $em->getRepository(Projet::class)
  6017.                 ->findBy(
  6018.                     array(
  6019.                         'boutique' => $boutique,
  6020.                         'estSupprime' => false,
  6021.                         'boucle' => false
  6022.                     )
  6023.                 );
  6024.     
  6025.         $commande  = $em->getRepository(Commande::class)
  6026.                         ->findOneBy(
  6027.                             array(
  6028.                                 'boutique' => $boutique->getId(),
  6029.                                 'id' => $id
  6030.                         ));
  6031.         
  6032.         $ancienProduitCommandes  = $em->getRepository(ProduitCommande::class)
  6033.                         ->findBy(
  6034.                             array(
  6035.                                 'commande' => $commande->getId()
  6036.                         ));
  6037.                         
  6038.         $modeleReglements = $em->getRepository(ModeleReglement::class)
  6039.                                 ->findByBoutique($boutique);        
  6040.         $tiers = $em->getRepository(Tiers::class)
  6041.                                 ->findByBoutique($boutique);        
  6042.         
  6043.         $user = $this->getUser();
  6044.         $userBoutique = $em->getRepository(UserBoutique::class)
  6045.                         ->findOneBy(
  6046.                             array(
  6047.                             'user' => $user->getId(),
  6048.                             'boutique' => $boutique->getId()
  6049.                             )
  6050.                         );
  6051.         $vehicules = array(1, 22, 23, 28);
  6052.     
  6053.         $ok_soumission = '';
  6054.         $error = '';
  6055.         $editMode = 'edit';
  6056.         if($request->getMethod() == 'POST'){
  6057.             $projet = $_POST['projet'];
  6058.             $magasin = $_POST['magasin'];
  6059.             $typeFacture = $_POST['typeFacture'];
  6060.             $observation = $_POST['observation'];
  6061.             $titreDocument = $_POST['titreDocument'];
  6062.             $modeleReglement = $_POST['modeleReglement'];
  6063.             $moyenDePaiement = $_POST['moyenDePaiement'];
  6064.             $client = $_POST['client'];
  6065.             $clientFinalNom = $_POST['clientFinalNom'];
  6066.             $clientFinalNumero = $_POST['clientFinalNumero'];
  6067.             $dateCommande = $_POST['dateCommande'];
  6068.             
  6069.             $montantHT = (float)$_POST['montantHT'];
  6070.             $remise =   (float)$_POST['remise'];
  6071.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  6072.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  6073.             $montantTVA = (float)$_POST['montantTVA'];
  6074.             $montantTTC = (float)$_POST['montantTTC'];
  6075.             $matriculeVehicule = $_POST['matriculeVehicule'];
  6076.             $marqueVehicule = $_POST['marqueVehicule'];
  6077.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  6078.             $listeProduits = json_decode($_POST['listeProduits']);
  6079.             $client = $em->getRepository(Tiers::class)
  6080.                         ->findOneById($client);
  6081.             if(null !== $client){
  6082.                 $commande->setTiers($client);
  6083.             }
  6084.             
  6085.             $magasin = $em->getRepository(Projet::class)
  6086.                         ->findOneById($magasin);
  6087.             $projet = $em->getRepository(Projet::class)
  6088.                         ->findOneById($projet);
  6089.             $commande->setProjet($projet);
  6090.             
  6091.             $laDate = new \DateTime($dateCommande);
  6092.             $commande->setLaDate($laDate);
  6093.             $commande->setTitreDocument($titreDocument);
  6094.             $commande->setObservation($observation);
  6095.             $commande->setModifiePar($user);
  6096.             $commande->setMoyenDePaiement($moyenDePaiement);
  6097.             $commande->setClientFinalNom($clientFinalNom);
  6098.             $commande->setClientFinalNumero($clientFinalNumero);
  6099.             
  6100.             $commande->setMatriculeVehicule($matriculeVehicule);
  6101.             $commande->setMarqueVehicule($marqueVehicule);
  6102.             $commande->setKilometrageVehicule($kilometrageVehicule);
  6103.             $commande->setTotalHT($montantHT);
  6104.             $commande->setRemise($remise);
  6105.             $commande->setRemisePourcentage($remisePourcentage);
  6106.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  6107.             
  6108.             $commande->setTotalTVA($montantTVA);
  6109.             $commande->setTotalTTC($montantTTC);
  6110.             $commande->setResteAPayer($montantTTC);
  6111.             $montantlettre = strtoupper($chiffreEnLettre->Conversion($montantTTC));
  6112.             $commande->setMontantEnLettre($montantlettre);
  6113.             $commande->setTypeFacture($type);
  6114.             if($commande->getNumero() == ''){
  6115.                 $commande->setNumero($this->getNumero($type, $boutique));
  6116.             }
  6117.             $em->flush();
  6118.             $mouvementDeStock = $em->getRepository(MouvementDeStock::class)
  6119.                                     ->findOneByCommande($commande);
  6120.             
  6121.             
  6122.             //Supprimer les ancien ProduitCommande lié et les stocks
  6123.             foreach($ancienProduitCommandes as $ancienProduitCommande){
  6124.                 $em->remove($ancienProduitCommande);
  6125.                 if($ancienProduitCommande->getProduit()->isGereLeStock()){
  6126.                     if($type == 'invoice'){
  6127.                         
  6128.                         $mouvementDeStockProduits = $em->getRepository(MouvementDeStockProduit::class)
  6129.                                                     ->findByMouvementDeStock($mouvementDeStock);
  6130.                         foreach($mouvementDeStockProduits as $mouvementDeStockProduit){
  6131.                             $em->remove($mouvementDeStockProduit);
  6132.                         }
  6133.                         //Magasin
  6134.                         $stock = $em->getRepository(Stock::class)
  6135.                                 ->findOneBy(
  6136.                                     array(
  6137.                                         'boutique' => $boutique->getId(),
  6138.                                         'magasin' => $magasin->getId(),
  6139.                                         'produit' => $ancienProduitCommande->getProduit()->getId()
  6140.                                     )
  6141.                                 );
  6142.                         if($stock !== null){
  6143.                             $stock->setQuantite($stock->getQuantite() + $ancienProduitCommande->getQuantite());
  6144.                         }
  6145.                     }
  6146.                 } //Fin gestion de stock
  6147.             }
  6148.             $em->flush();
  6149.             $produitCommandes = array();
  6150.             $produitsPourFactures = array();
  6151.             $coutDeRevientCommande = 0;
  6152.             
  6153.             
  6154.             
  6155.             foreach($listeProduits as $listeProduit){
  6156.                 $listeProduit = (array)$listeProduit;
  6157.                 $idDuProduit = $listeProduit['idProduit'];
  6158.             
  6159.                 if($idDuProduit == ''){
  6160.                     //Produit inexistant, il faut le créer
  6161.                     $leProduit = new Produit;
  6162.                     $leProduit->setNom($listeProduit['nomProduit']);
  6163.                     $em->persist($leProduit);
  6164.                     
  6165.                     //TVA
  6166.                     if($listeProduit['tva'] > 0){
  6167.                         $tva = $em->getRepository(TVA::class)
  6168.                                     ->findOneBy(
  6169.                                         array(
  6170.                                             'boutique' => $boutique->getId(),
  6171.                                             'valeur'  => $listeProduit['tva']
  6172.                                         )
  6173.                                     );
  6174.                         if($tva == null){
  6175.                             $tva = new TVA;
  6176.                             $tva->setValeur($listeProduit['tva']);
  6177.                             $em->persist($tva);
  6178.                             $em->flush();
  6179.                         }
  6180.                         
  6181.                         $leProduit->setTva($tva);
  6182.                         
  6183.                     }
  6184.                     //Prix
  6185.                     $produitP = new PrixProduit;
  6186.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  6187.                     $produitP->setBoutique($boutique);
  6188.                     $leProduit->addPrix($produitP);
  6189.                     $leProduit->setPrixActuel($produitP);
  6190.                     $leProduit->setBoutique($boutique);
  6191.                     $em->persist($produitP);
  6192.                     $em->persist($leProduit);
  6193.                     $em->flush();
  6194.                     
  6195.                 } else{
  6196.                     $leProduit = $em->getRepository(Produit::class)
  6197.                         ->findOneById($idDuProduit);
  6198.                 }
  6199.                 $produitCommande = new ProduitCommande;
  6200.                 $produitCommande->setProduit($leProduit);
  6201.                 $produitCommande->setCommande($commande);
  6202.                 $quantite = (float)$listeProduit['quantite'];
  6203.                 $produitCommande->setQuantite($quantite);
  6204.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  6205.                 $prixDeRevient = (float)$listeProduit['prixDeRevient'];
  6206.                 $produitCommande->setCoutDeRevient($prixDeRevient);
  6207.                 $totalCoutDeRevient = $prixDeRevient * $quantite;
  6208.                 $produitCommande->setTotalCoutDeRevient($totalCoutDeRevient);
  6209.                 $coutDeRevientCommande += $totalCoutDeRevient;
  6210.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  6211.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  6212.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  6213.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  6214.                 
  6215.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  6216.                 $produitCommande->setTva((float)$listeProduit['tva']);
  6217.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  6218.                 $em->persist($produitCommande);
  6219.                 array_push($produitCommandes, $produitCommande);
  6220.                 
  6221.                 $nom = $produitCommande->getProduit()->getNom();
  6222.                     if(mb_strtoupper($nom, 'UTF-8') === $nom){
  6223.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 60, "<br/>", true);
  6224.                     }else{
  6225.                         $nom = wordwrap($produitCommande->getProduit()->getNom(), 90, "<br/>", true);
  6226.                     }
  6227.                 $produitsPourFacture = array(
  6228.                     'nom' => $nom,
  6229.                     'quantite' =>$produitCommande->getQuantite(),
  6230.                     'prix' => $produitCommande->getPrix(),
  6231.                     'remise' => $produitCommande->getRemise(),
  6232.                     'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  6233.                 );
  6234.                 array_push($produitsPourFactures, $produitsPourFacture);
  6235.                 
  6236.                 //Gestion des stocks
  6237.                 //Note très importante: Etant donné qu'il est difficile de retrouver les mouvements de stock lors de la modification
  6238.                 if($leProduit->isGereLeStock()){
  6239.                     if($type == 'invoice'){
  6240.                         
  6241.                         $leProduit->setStockDisponible($leProduit->getStockDisponible() - $produitCommande->getQuantite());    
  6242.                         $mouvementDeStockProduit = new MouvementDeStockProduit;
  6243.                         $mouvementDeStockProduit->setQuantite($produitCommande->getQuantite());
  6244.                         $mouvementDeStockProduit->setPrix($produitCommande->getPrix());
  6245.                         $mouvementDeStockProduit->setBoutique($boutique);
  6246.                         $mouvementDeStockProduit->setMouvementDeStock($mouvementDeStock);
  6247.                         $mouvementDeStockProduit->setProduit($leProduit);
  6248.                         $em->persist($mouvementDeStockProduit);
  6249.                         //Magasin
  6250.                         $stock = $em->getRepository(Stock::class)
  6251.                                 ->findOneBy(
  6252.                                     array(
  6253.                                         'boutique' => $boutique->getId(),
  6254.                                         'magasin' => $magasin->getId(),
  6255.                                         'produit' => $leProduit->getId()
  6256.                                     )
  6257.                                 );
  6258.                         if($stock !== null){
  6259.                             $stock->setQuantite($stock->getQuantite() - $produitCommande->getQuantite());
  6260.                             $mouvementDeStockProduit->setSoldeQuantite($stock->getQuantite());
  6261.                         }
  6262.                     }
  6263.                 } //Fin gestion de stock
  6264.                 
  6265.             } //Fin boucle sur les produit
  6266.             $em->flush();
  6267.             $commande->setCoutDeRevient($coutDeRevientCommande);
  6268.             
  6269.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  6270.             $content = '';
  6271.             $content = $this->renderView('pdf/facture.html.twig', [
  6272.                         'boutique' => $boutique,
  6273.                         'facture' => $commande,
  6274.                         'produits' => $produitsPourFactures
  6275.             ]);
  6276.             switch($type){
  6277.                 case 'invoice':    
  6278.                     
  6279.                 break;
  6280.                 
  6281.                 case 'proposal':
  6282.                     
  6283.                 break;
  6284.             }
  6285.             
  6286.             $pdf->writeHTML($content);
  6287.             $lienPhysique = $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  6288.                 
  6289.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  6290.             $pdf->output($lienPhysique, 'F');
  6291.             
  6292.             $em->flush();
  6293.             
  6294.             return $this->render('admin/response_new_sale.html.twig', [
  6295.                    'boutique' => $boutique,
  6296.                    'commande' => $commande,
  6297.                    'responseFNE' => '',
  6298.                    'vehicules' => $vehicules,
  6299.                    'typeFacture' => $typeFacture,
  6300.                    'client' => $client,
  6301.                    'produitCommandes' => $produitCommandes,
  6302.                    'listeProduit' => $listeProduit,
  6303.                    'montantHT' => $montantHT,
  6304.                    'montantTVA' => $montantTVA,
  6305.                    'montantTTC' => $montantTTC,
  6306.                    'userBoutique' => $userBoutique
  6307.                 ]);
  6308.             
  6309.         }
  6310.     
  6311.         return $this->render('admin/edit_sale.html.twig', [
  6312.            'boutique' => $boutique,
  6313.            'produits' => $produits,
  6314.            'modeleReglements' => $modeleReglements,
  6315.            'tiers' => $tiers,
  6316.            'editMode' => $editMode,
  6317.            'commande' => $commande,
  6318.            'ancienProduitCommandes' => $ancienProduitCommandes,
  6319.            'type' => $type,
  6320.            'userBoutique' => $userBoutique,
  6321.            'vehicules' => $vehicules,
  6322.            'projets' => $projets,
  6323.            'magasins' => $magasins
  6324.         ]);
  6325.     }
  6326.     /**
  6327.      * @Route("/{slug}/bon-de-livraison/{id}", name="admin.bon_de_livraison")
  6328.      * @return \Symfony\Component\HttpFoundation\Response
  6329.      */
  6330.     public function bonDeLivraisonAction(Request $request, $slug, $id)
  6331.     {
  6332.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6333.            return $this->redirectToRoute('security_login');
  6334.         }      
  6335.         $em = $this->getDoctrine()
  6336.                     ->getManager();
  6337.         $boutique  = $em->getRepository(Boutique::class)
  6338.                         ->findOneBySlug($slug);
  6339.     
  6340.         $user = $this->getUser();
  6341.         $userBoutique = $em->getRepository(UserBoutique::class)
  6342.                         ->findOneBy(
  6343.                             array(
  6344.                             'user' => $user->getId(),
  6345.                             'boutique' => $boutique->getId()
  6346.                             )
  6347.                         );
  6348.         $commande  = $em->getRepository(Commande::class)
  6349.                         ->findOneBy(
  6350.                             array(
  6351.                                 'boutique' => $boutique->getId(),
  6352.                                 'id' => $id
  6353.                         ));
  6354.         
  6355.         
  6356.             
  6357.             return $this->render('admin/bon_de_livraison.html.twig', [
  6358.                 'boutique' => $boutique,
  6359.                 'facture' => $commande,
  6360.                 'userBoutique' => $userBoutique,
  6361.                 'commande' => $commande
  6362.             ]);
  6363.     }        
  6364.     /**
  6365.      * @Route("/{slug}/bon-de-livraison-avec-date/{id}", name="admin_bon_de_livraison_avec_date")
  6366.      * @return \Symfony\Component\HttpFoundation\Response
  6367.      */
  6368.     public function bonDeLivraisonAvecDateAction(Request $request, $slug, $id)
  6369.     {
  6370.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6371.            return $this->redirectToRoute('security_login');
  6372.         }      
  6373.         $em = $this->getDoctrine()
  6374.                     ->getManager();
  6375.         $boutique  = $em->getRepository(Boutique::class)
  6376.                         ->findOneBySlug($slug);
  6377.     
  6378.         $user = $this->getUser();
  6379.         $userBoutique = $em->getRepository(UserBoutique::class)
  6380.                         ->findOneBy(
  6381.                             array(
  6382.                             'user' => $user->getId(),
  6383.                             'boutique' => $boutique->getId()
  6384.                             )
  6385.                         );
  6386.         if($request->getMethod() == 'POST'){
  6387.         $dateDImpression = $request->request->get('dateDImpression');
  6388.         $dateDImpression = new \DateTime($dateDImpression);
  6389.         $commande  = $em->getRepository(Commande::class)
  6390.                         ->findOneBy(
  6391.                             array(
  6392.                                 'boutique' => $boutique->getId(),
  6393.                                 'id' => $id
  6394.                         ));
  6395.         
  6396.         $listeProduits  = $em->getRepository(ProduitCommande::class)
  6397.                         ->findBy(
  6398.                             array(
  6399.                                 'commande' => $commande->getId()
  6400.                         ));
  6401.                 
  6402.             
  6403.             $produitCommandes = array();
  6404.             foreach($listeProduits as $listeProduit){
  6405.                 
  6406.                 array_push($produitCommandes, $listeProduit);
  6407.                 
  6408.             }
  6409.             
  6410.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  6411.             
  6412.             
  6413.             $content = $this->renderView('pdf/bon_de_livraison.html.twig', [
  6414.                 'boutique' => $boutique,
  6415.                 'facture' => $commande,
  6416.                 'produits' => $produitCommandes,
  6417.                 'dateDImpression' => $dateDImpression
  6418.             ]);
  6419.             
  6420.             
  6421.             $pdf->writeHTML($content);
  6422.             $lienPhysique = $commande->getUploadRootDir().'_bon_de_livraison_'.$commande->getId().'.pdf';
  6423.                 
  6424.             $pdf->output($lienPhysique, 'I');
  6425.             
  6426.             return $this->renderView('pdf/bon_de_livraison.html.twig', [
  6427.                 'boutique' => $boutique,
  6428.                 'facture' => $commande,
  6429.                 'produits' => $produitCommandes,
  6430.                 'dateDImpression' => $dateDImpression
  6431.             ]);
  6432.         }
  6433.     }        
  6434.     
  6435.     
  6436.     /**
  6437.      * @Route("/{slug}/duplicate-sale/{id}", name="admin.duplicate_sale")
  6438.      * @return \Symfony\Component\HttpFoundation\Response
  6439.      */
  6440.     public function duplicateSaleAction(Request $request, $slug, $id)
  6441.     {
  6442.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6443.            return $this->redirectToRoute('security_login');
  6444.         }      
  6445.         $em = $this->getDoctrine()
  6446.                     ->getManager();
  6447.         $boutique  = $em->getRepository(Boutique::class)
  6448.                         ->findOneBySlug($slug);
  6449.     
  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.         $commande  = $em->getRepository(Commande::class)
  6459.                         ->findOneBy(
  6460.                             array(
  6461.                                 'boutique' => $boutique->getId(),
  6462.                                 'id' => $id
  6463.                         ));
  6464.         
  6465.         $listeProduits  = $em->getRepository(ProduitCommande::class)
  6466.                         ->findBy(
  6467.                             array(
  6468.                                 'commande' => $commande->getId()
  6469.                         ));
  6470.                 
  6471.             $nouvelleCommande = new Commande;
  6472.             $nouvelleCommande->setBoutique($boutique);
  6473.             $nouvelleCommande->setTiers($commande->getTiers());
  6474.             
  6475.             $nouvelleCommande->setLaDate(new \DateTime());
  6476.             $nouvelleCommande->setTotalHT($commande->getTotalHT());
  6477.             $nouvelleCommande->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  6478.             $nouvelleCommande->setRemise($commande->getRemise());
  6479.             $nouvelleCommande->setRemisePourcentage($commande->getRemisePourcentage());
  6480.             $nouvelleCommande->setTotalTVA($commande->getTotalTVA());
  6481.             $nouvelleCommande->setTotalAutreTaxe($commande->getTotalAutreTaxe());
  6482.             $nouvelleCommande->setTotalTTC($commande->getTotalTTC());
  6483.             $nouvelleCommande->setResteAPayer($commande->getTotalTTC());
  6484.             $nouvelleCommande->setTitreDocument($commande->getTitreDocument());
  6485.             $nouvelleCommande->setObservation($commande->getObservation());
  6486.             $nouvelleCommande->setValableJusquAu($commande->getValableJusquAu());
  6487.             $nouvelleCommande->setMontantEnLettre($commande->getMontantEnLettre());
  6488.             $nouvelleCommande->setTypeFacture($commande->getTypeFacture());
  6489.             $nouvelleCommande->setNatureFacture($commande->getNatureFacture());
  6490.             
  6491.             $nouvelleCommande->setNumero($this->getNumero($nouvelleCommande->getTypeFacture(), $boutique));
  6492.             $em->persist($nouvelleCommande);
  6493.             $em->flush();
  6494.             $produitCommandes = array();
  6495.             $produitsPourFactures = array();
  6496.             foreach($listeProduits as $listeProduit){
  6497.                 $produitCommande = new ProduitCommande;
  6498.                 $produitCommande->setProduit($listeProduit->getProduit());
  6499.                 $produitCommande->setCommande($nouvelleCommande);
  6500.                 $produitCommande->setQuantite($listeProduit->getQuantite());
  6501.                 $produitCommande->setPrix($listeProduit->getPrix());
  6502.                 $produitCommande->setRemise($listeProduit->getRemise());
  6503.                 $produitCommande->setRemisePourcentage($listeProduit->getRemisePourcentage());
  6504.                 $produitCommande->setTotalHT($listeProduit->getTotalHT());
  6505.                 $produitCommande->setTotalHTApresRemise($listeProduit->getTotalHTApresRemise());
  6506.                 $produitCommande->setTotalTVA($listeProduit->getTotalTVA());
  6507.                 $produitCommande->setAutreTaxe($listeProduit->getAutreTaxe());
  6508.                 $produitCommande->setTotalTTC($listeProduit->getTotalTTC());
  6509.                 $em->persist($produitCommande);
  6510.                 
  6511.                 array_push($produitCommandes, $produitCommande);
  6512.                 
  6513.                 $produitsPourFacture = array(
  6514.                                 'nom' => wordwrap($produitCommande->getProduit()->getNom(), 90, "<br/>", true),
  6515.                                 'quantite' =>$produitCommande->getQuantite(),
  6516.                                 'prix' => $produitCommande->getPrix(),
  6517.                                 'remise' => $produitCommande->getRemise(),
  6518.                                 'totalHTApresRemise' => $produitCommande->getTotalHTApresRemise()
  6519.                             );
  6520.                 array_push($produitsPourFactures, $produitsPourFacture);
  6521.                 
  6522.                 
  6523.                 
  6524.             }
  6525.             $em->flush();
  6526.             
  6527.             if($nouvelleCommande->getTypeFacture() == 'invoice'){
  6528.                     
  6529.                 if($boutique->getApiKeyFNE() != ''){
  6530.                     if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  6531.                         $responseFNE = $this->genererFactureFNE($boutique->getSlug(), $nouvelleCommande->getId(), $nouvelleCommande->getNatureFacture());
  6532.                     }
  6533.                     
  6534.                 }
  6535.                 $this->genererEcritureComptableDeVente($boutique, $nouvelleCommande);
  6536.                     //Ecriture comptable
  6537.             }
  6538.             $pdf = new Html2Pdf('P', $boutique->getSettings()->getFormatPapierImpression(), 'en');
  6539.             $content = '';
  6540.             switch($commande->getTypeFacture()){
  6541.                 case 'invoice':    
  6542.                     $content = $this->renderView('pdf/facture.html.twig', [
  6543.                         'boutique' => $boutique,
  6544.                         'facture' => $nouvelleCommande,
  6545.                         'produits' => $produitsPourFactures
  6546.                     ]);
  6547.                 break;
  6548.                 
  6549.                 case 'proposal':
  6550.                     $content = $this->renderView('pdf/devis.html.twig', [
  6551.                         'boutique' => $boutique,
  6552.                         'facture' => $nouvelleCommande,
  6553.                         'produits' => $produitsPourFactures
  6554.                     ]);
  6555.                 break;
  6556.             }
  6557.             
  6558.             $pdf->writeHTML($content);
  6559.             $lienPhysique = $nouvelleCommande->getUploadRootDir().$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf';
  6560.                 
  6561.             $nouvelleCommande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf');
  6562.             $pdf->output($lienPhysique, 'F');
  6563.             
  6564.             $em->flush();
  6565.             
  6566.             switch($commande->getTypeFacture()){
  6567.                 case 'invoice':    
  6568.                     return $this->redirectToRoute('admin.invoices',  array('slug' => $boutique->getSlug()));
  6569.                 break;
  6570.                 
  6571.                 case 'proposal':
  6572.                     return $this->redirectToRoute('admin.proposals',  array('slug' => $boutique->getSlug()));
  6573.                 break;
  6574.                 
  6575.                 case 'bill_credit':
  6576.                     return $this->redirectToRoute('admin.bill_credits',  array('slug' => $boutique->getSlug()));
  6577.                 break;
  6578.                 
  6579.                 case 'deposit':
  6580.                     return $this->redirectToRoute('admin.deposits',  array('slug' => $boutique->getSlug()));
  6581.                 break;
  6582.             }
  6583.     }
  6584.     
  6585.     /**
  6586.      * @Route("/{slug}/delete-sale/{type}/{id}", name="admin.delete_sale")
  6587.      * @return \Symfony\Component\HttpFoundation\Response
  6588.   
  6589.     */
  6590.     public function deleteSaleAction(Request $request, $slug, $type, $id)
  6591.     {
  6592.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6593.            return $this->redirectToRoute('security_login');
  6594.         }
  6595.         $em = $this->getDoctrine()
  6596.                     ->getManager();
  6597.         
  6598.         $boutique = $em->getRepository(Boutique::class)
  6599.                         ->findOneBySlug($slug);
  6600.         $user = $this->getUser();
  6601.         $userBoutique = $em->getRepository(UserBoutique::class)
  6602.                         ->findOneBy(
  6603.                             array(
  6604.                             'user' => $user->getId(),
  6605.                             'boutique' => $boutique->getId()
  6606.                             )
  6607.                         );
  6608.         $commande = $em->getRepository(Commande::class)
  6609.                         ->findOneBy(
  6610.                             array(
  6611.                                 'boutique' => $boutique->getId(),
  6612.                                 'id' => $id
  6613.                             ));
  6614.         /*
  6615.         
  6616.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  6617.                         ->findByCommande($commande->getId());
  6618.                         
  6619.         foreach($produitCommandes as $produitCommande){
  6620.             $em->remove($produitCommande);
  6621.         }
  6622.         $em->flush();
  6623.         
  6624.         $em->remove($commande);
  6625.         */
  6626.         
  6627.         
  6628.         $commande->setEstSupprime(true);
  6629.         $commande->setSupprimePar($user);
  6630.         $em->flush();
  6631.         
  6632.         switch($type){
  6633.             case 'invoice':
  6634.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  6635.             break;
  6636.             
  6637.             case 'bill_credit':
  6638.                 return $this->redirectToRoute('admin.bill_credits', array('slug' => $boutique->getSlug()));
  6639.             break;
  6640.             
  6641.             case 'proposal':
  6642.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  6643.             break;
  6644.         }
  6645.         
  6646.     }
  6647.     
  6648.     /**
  6649.      * @Route("/{slug}/product/list", name="admin.list_product")
  6650.      * @return \Symfony\Component\HttpFoundation\Response
  6651.     */
  6652.     public function listProductAction(Request $request, Boutique $boutique)
  6653.     {
  6654.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6655.            return $this->redirectToRoute('security_login');
  6656.         }
  6657.         $em = $this->getDoctrine()
  6658.                     ->getManager();
  6659.         
  6660.         $produits = $em->getRepository(Produit::class)
  6661.                         ->findBy(
  6662.                             array(
  6663.                                 'boutique' => $boutique->getId(),
  6664.                                 'estSupprime' => false
  6665.                             ),    
  6666.                             array(
  6667.                                 'nom' => 'ASC'
  6668.                             )
  6669.                         );
  6670.         $user = $this->getUser();
  6671.         $userBoutique = $em->getRepository(UserBoutique::class)
  6672.                         ->findOneBy(
  6673.                             array(
  6674.                             'user' => $user->getId(),
  6675.                             'boutique' => $boutique->getId()
  6676.                             )
  6677.                         );
  6678.         return $this->render('admin/liste_produit.html.twig', [
  6679.            'boutique' => $boutique,
  6680.            'produits' => $produits,
  6681.            'userBoutique' => $userBoutique
  6682.         ]);
  6683.     }
  6684.     
  6685.     /**
  6686.      * @Route("/{slug}/new-product", name="admin.new_product")
  6687.      * @return \Symfony\Component\HttpFoundation\Response
  6688.      */
  6689.     public function newProductAction(Request $request, Boutique $boutique)
  6690.     {
  6691.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6692.            return $this->redirectToRoute('security_login');
  6693.         }
  6694.         $em = $this->getDoctrine()
  6695.                     ->getManager();
  6696.         
  6697.         $produit = new Produit;
  6698.         
  6699.         $user = $this->getUser();
  6700.         $userBoutique = $em->getRepository(UserBoutique::class)
  6701.                         ->findOneBy(
  6702.                             array(
  6703.                             'user' => $user->getId(),
  6704.                             'boutique' => $boutique->getId()
  6705.                             )
  6706.                         );
  6707.         $magasins = $em->getRepository(Magasin::class)
  6708.                         ->findBy(
  6709.                             array(
  6710.                             'estSupprime' => false,
  6711.                             'boutique' => $boutique->getId()
  6712.                             )
  6713.                         );
  6714.         $form = $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  6715.         
  6716.         $ok_soumission = '';
  6717.         $error = '';
  6718.         
  6719.         if($request->getMethod() == 'POST'){
  6720.             
  6721.                $form->handleRequest($request);
  6722.                if($form->isValid()){
  6723.                 
  6724.                 
  6725.                  $em->persist($produit);
  6726.                    $em->flush();
  6727.                  foreach($magasins as $magasin){
  6728.                     $stockDisponible = (float)$request->request->get('stockDisponible'.$magasin->getId());
  6729.                     $stockDAlerte = (float)$request->request->get('stockDAlerte'.$magasin->getId());
  6730.                     $stockDeSecurite = (float)$request->request->get('stockDeSecurite'.$magasin->getId());
  6731.                     $stockMinimum = (float)$request->request->get('stockMinimum'.$magasin->getId());
  6732.                     $stockMaximum = (float)$request->request->get('stockMaximum'.$magasin->getId());
  6733.                     $stockOutil = (float)$request->request->get('stockOutil'.$magasin->getId());
  6734.                     $coutDeStockage = (float)$request->request->get('coutDeStockage'.$magasin->getId());
  6735.                     $stock = new Stock;
  6736.                     $stock->setBoutique($boutique);
  6737.                     $stock->setProduit($produit);
  6738.                     $stock->setMagasin($magasin);
  6739.                     $stock->setStockDisponible($stockDisponible);
  6740.                     $stock->setStockDAlerte($stockDAlerte);
  6741.                     $stock->setStockDeSecurite($stockDeSecurite);
  6742.                     $stock->setStockMinimum($stockMinimum);
  6743.                     $stock->setStockMaximum($stockMaximum);
  6744.                     $stock->setStockOutil($stockOutil);
  6745.                     $stock->setCoutDeStockage($coutDeStockage);
  6746.                     
  6747.                     $em->persist($stock);
  6748.                     
  6749.                 }
  6750.                  
  6751.                    //Prix
  6752.                    $prix = (float)$_POST['prix'];
  6753.                    $produitP = new PrixProduit;
  6754.                    $produitP->setValeur($prix);
  6755.                    $produitP->setBoutique($boutique);
  6756.                    $produit->addPrix($produitP);
  6757.                    $produit->setPrixActuel($produitP);
  6758.                    $produit->setBoutique($boutique);
  6759.                   $em->persist($produitP);
  6760.                   
  6761.                   $em->flush();
  6762.                 if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0){
  6763.                     $this->gererFichierMultiple($produit, $_FILES['photo'], true);
  6764.                 }
  6765.         
  6766.                 
  6767.                 $ok_soumission =" Votre message a été pris en compte";
  6768.                     
  6769.                 unset($produit);
  6770.                 unset($form);
  6771.                 $produit = new Produit;
  6772.                 $form = $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  6773.                     
  6774.                 } else {
  6775.                     $error =" Veillez corrigez vos erreurs";
  6776.                 }
  6777.         }
  6778.     
  6779.         return $this->render('admin/nouveau_produit.html.twig', [
  6780.            'boutique' => $boutique,
  6781.            'form' => $form->createView(),
  6782.            'userBoutique' => $userBoutique,
  6783.            'magasins' => $magasins
  6784.         ]);
  6785.     }
  6786.     
  6787.     /**
  6788.      * @Route("/{slug}/product/edit/{id}", name="admin.edit_product")
  6789.      * @return \Symfony\Component\HttpFoundation\Response
  6790.     */
  6791.     public function edtProductAction(Request $request, $slug, $id)
  6792.     {
  6793.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6794.            return $this->redirectToRoute('security_login');
  6795.         }
  6796.         $em = $this->getDoctrine()
  6797.                     ->getManager();
  6798.         
  6799.         $boutique = $em->getRepository(Boutique::class)
  6800.                         ->findOneBySlug($slug);
  6801.         
  6802.         $produit = $em->getRepository(Produit::class)
  6803.                         ->findOneBy(
  6804.                             array(
  6805.                             'boutique' => $boutique->getId(),
  6806.                             'id' => $id
  6807.                             )
  6808.                         );
  6809.         
  6810.         $user = $this->getUser();
  6811.         $userBoutique = $em->getRepository(UserBoutique::class)
  6812.                         ->findOneBy(
  6813.                             array(
  6814.                             'user' => $user->getId(),
  6815.                             'boutique' => $boutique->getId()
  6816.                             )
  6817.                         );
  6818.         $form = $this->createForm(ProduitEditType::class, $produit, array('boutique' => $boutique->getId()));
  6819.         
  6820.         $ok_soumission = '';
  6821.         $error = '';
  6822.         
  6823.         if($request->getMethod() == 'POST'){
  6824.             
  6825.                $form->handleRequest($request);
  6826.                if($form->isValid()){
  6827.                    //Prix
  6828.                     $prix = (float)$_POST['prix'];
  6829.                     if($prix > 0 && $produit->getPrixActuel()->getValeur() != $prix){
  6830.                         $produit->getPrixActuel()->setValeur($prix);
  6831.                         $produitP = new PrixProduit;
  6832.                        $produitP->setValeur($prix);
  6833.                        $produit->addPrix($produitP);
  6834.                        $produit->setPrixActuel($produitP);
  6835.                        $produit->setBoutique($boutique);
  6836.                       $em->persist($produitP);
  6837.                         
  6838.                     }
  6839.                     if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0){
  6840.                         $this->gererFichierMultiple($produit, $_FILES['photo'], true);
  6841.                     }
  6842.                     $em->flush();
  6843.                     $ok_soumission =" Votre message a été pris en compte";
  6844.                 } else {
  6845.                     $error =" Veillez corrigez vos erreurs";
  6846.                 }
  6847.         }
  6848.     
  6849.         return $this->render('admin/edit_product.html.twig', [
  6850.            'boutique' => $boutique,
  6851.            'form' => $form->createView(),
  6852.            'produit' => $produit,
  6853.            'userBoutique' => $userBoutique
  6854.         ]);
  6855.     }
  6856.     
  6857.     //Produit/Service
  6858.     /**
  6859.      * @Route("/{slug}/delete-product/{id}", name="admin.delete_product")
  6860.      * @return \Symfony\Component\HttpFoundation\Response
  6861.      */
  6862.     public function deleteProductAction(Request $request,  $slug, $id)
  6863.     { 
  6864.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6865.            return $this->redirectToRoute('security_login');
  6866.         }
  6867.         $em = $this->getDoctrine()
  6868.                     ->getManager();
  6869.         $boutique = $em->getRepository(Boutique::class)
  6870.                         ->findOneBySlug($slug);
  6871.         
  6872.         $product = $em->getRepository(Produit::class)
  6873.                         ->findOneBy(
  6874.                         array(
  6875.                             'boutique' => $boutique->getId(),
  6876.                             'id' => $id
  6877.                         )
  6878.                         );
  6879.         if(null !== $product){
  6880.             
  6881.             $product->setEstSupprime(true);
  6882.             $em->flush();
  6883.         }
  6884.         return $this->redirectToRoute('admin.list_product', array('slug' => $boutique->getSlug()));
  6885.     
  6886.     }
  6887.     
  6888.     /**
  6889.      * @Route("/{slug}/product-category/list", name="admin.category_product")
  6890.      * @return \Symfony\Component\HttpFoundation\Response
  6891.     */
  6892.     public function listeCategoryProductAction(Request $request, Boutique $boutique)
  6893.     {
  6894.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6895.            return $this->redirectToRoute('security_login');
  6896.         }
  6897.         $em = $this->getDoctrine()
  6898.                     ->getManager();
  6899.         
  6900.         $categories = $em->getRepository(CategorieProduit::class)
  6901.                         ->findByBoutique($boutique);
  6902.         $user = $this->getUser();
  6903.         $userBoutique = $em->getRepository(UserBoutique::class)
  6904.                         ->findOneBy(
  6905.                             array(
  6906.                             'user' => $user->getId(),
  6907.                             'boutique' => $boutique->getId()
  6908.                             )
  6909.                         );
  6910.         return $this->render('admin/category_product.html.twig', [
  6911.            'categories' => $categories,
  6912.            'boutique' => $boutique,
  6913.            'userBoutique' => $userBoutique
  6914.         ]);
  6915.     }
  6916.     
  6917.     //Produit/Service
  6918.     /**
  6919.      * @Route("/{slug}/new-product-category", name="admin.new_product_category")
  6920.      * @return \Symfony\Component\HttpFoundation\Response
  6921.      */
  6922.     public function newProductCategoryAction(Request $request, Boutique $boutique)
  6923.     {
  6924.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6925.            return $this->redirectToRoute('security_login');
  6926.         }      
  6927.         $em = $this->getDoctrine()
  6928.                     ->getManager();
  6929.         
  6930.         $categorie = new CategorieProduit;
  6931.         $form = $this->createForm(CategorieProduitType::class, $categorie);
  6932.         
  6933.         $ok_soumission = '';
  6934.         $error = '';
  6935.         $user = $this->getUser();
  6936.         $userBoutique = $em->getRepository(UserBoutique::class)
  6937.                         ->findOneBy(
  6938.                             array(
  6939.                             'user' => $user->getId(),
  6940.                             'boutique' => $boutique->getId()
  6941.                             )
  6942.                         );
  6943.         if($request->getMethod() == 'POST'){
  6944.             
  6945.                $form->handleRequest($request);
  6946.                if($form->isValid()){
  6947.                    $categorie->setBoutique($boutique);
  6948.                   $em->persist($categorie);
  6949.                   $em->flush();
  6950.         
  6951.                 $ok_soumission =" Votre message a été pris en compte";
  6952.                     
  6953.                 unset($categorie);
  6954.                 unset($form);
  6955.                 $categorie = new CategorieProduit;
  6956.                 
  6957.                 $form = $this->createForm(CategorieProduitType::class, $categorie);
  6958.                     
  6959.                 } else {
  6960.                     $error =" Veillez corrigez vos erreurs";
  6961.                 }
  6962.         }
  6963.     
  6964.         return $this->render('admin/new_product_category.html.twig', [
  6965.            'boutique' => $boutique,
  6966.            'form' => $form->createView(),
  6967.            'userBoutique' => $userBoutique
  6968.         ]);
  6969.     }
  6970.     
  6971.     
  6972.     //Produit/Service
  6973.     /**
  6974.      * @Route("/{slug}/edit-product-category/{id}", name="admin.edit_product_category")
  6975.      * @return \Symfony\Component\HttpFoundation\Response
  6976.      */
  6977.     public function editProductCategoryAction(Request $request, $slug, $id)
  6978.     { 
  6979.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6980.            return $this->redirectToRoute('security_login');
  6981.         }
  6982.         $em = $this->getDoctrine()
  6983.                     ->getManager();
  6984.         
  6985.         $user = $this->getUser();
  6986.         
  6987.         $categorie = $em->getRepository(CategorieProduit::class)
  6988.                         ->findOneById($id);
  6989.         $boutique = $em->getRepository(Boutique::class)
  6990.                         ->findOneBySlug($slug);
  6991.         $userBoutique = $em->getRepository(UserBoutique::class)
  6992.                         ->findOneBy(
  6993.                             array(
  6994.                             'user' => $user->getId(),
  6995.                             'boutique' => $boutique->getId()
  6996.                             )
  6997.                         );
  6998.         $form = $this->createForm(CategorieProduitEditType::class, $categorie);
  6999.         
  7000.         $ok_soumission = '';
  7001.         $error = '';
  7002.         
  7003.         if($request->getMethod() == 'POST'){
  7004.             
  7005.                $form->handleRequest($request);
  7006.                if($form->isValid()){
  7007.                   $em->flush();
  7008.         
  7009.                 $ok_soumission =" Votre message a été pris en compte";    
  7010.                 } else {
  7011.                     $error =" Veillez corrigez vos erreurs";
  7012.                 }
  7013.         }
  7014.     
  7015.         return $this->render('admin/edit_product_category.html.twig', [
  7016.            'boutique' => $boutique,
  7017.            'categorie' => $categorie,
  7018.            'form' => $form->createView(),
  7019.            'userBoutique' => $userBoutique
  7020.         ]);
  7021.     }
  7022.     
  7023.     //Produit/Service
  7024.     /**
  7025.      * @Route("/{slug}/delete-product-category/{id}", name="admin.delete_product_category")
  7026.      * @return \Symfony\Component\HttpFoundation\Response
  7027.      */
  7028.     public function deleteProductCategoryAction(Request $request,  $slug, $id)
  7029.     { 
  7030.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7031.            return $this->redirectToRoute('security_login');
  7032.         }
  7033.         $em = $this->getDoctrine()
  7034.                     ->getManager();
  7035.         $boutique = $em->getRepository(Boutique::class)
  7036.                         ->findOneBySlug($slug);
  7037.                         
  7038.         $categorie = $em->getRepository(CategorieProduit::class)
  7039.                         ->findOneBy(
  7040.                         array(
  7041.                             'boutique' => $boutique->getId(),
  7042.                             'id' => $id
  7043.                         )
  7044.                         );
  7045.         if(null !== $categorie){
  7046.             $em->remove($categorie);
  7047.             $em->flush();
  7048.         }
  7049.         return $this->redirectToRoute('admin.category_product', array('slug' => $boutique->getSlug()));
  7050.         
  7051.         
  7052.     }
  7053.     /**
  7054.      * @Route("/{slug}/tax/list", name="admin.list_tax")
  7055.      * @return \Symfony\Component\HttpFoundation\Response
  7056.      */
  7057.     public function listTaxAction(Request $request, Boutique $boutique)
  7058.     {    
  7059.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7060.            return $this->redirectToRoute('security_login');
  7061.         }
  7062.         $em = $this->getDoctrine()
  7063.                     ->getManager();
  7064.         
  7065.         $taxes = $em->getRepository(TVA::class)
  7066.                         ->findByBoutique($boutique);
  7067.         $user = $this->getUser();
  7068.         $userBoutique = $em->getRepository(UserBoutique::class)
  7069.                         ->findOneBy(
  7070.                             array(
  7071.                             'user' => $user->getId(),
  7072.                             'boutique' => $boutique->getId()
  7073.                             )
  7074.                         );
  7075.         return $this->render('admin/liste_tva.html.twig', [
  7076.            'boutique' => $boutique,
  7077.            'taxes' => $taxes,
  7078.            'userBoutique' => $userBoutique
  7079.         ]);
  7080.     }
  7081.     
  7082.     /**
  7083.      * @Route("/{slug}/new-tax", name="admin.new_tax")
  7084.      * @return \Symfony\Component\HttpFoundation\Response
  7085.      */
  7086.     public function newTaxAction(Request $request, Boutique $boutique)
  7087.     {
  7088.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7089.            return $this->redirectToRoute('security_login');
  7090.         }
  7091.         $em = $this->getDoctrine()
  7092.                     ->getManager();
  7093.         
  7094.         $tva = new TVA;
  7095.         
  7096.         $user = $this->getUser();
  7097.         $userBoutique = $em->getRepository(UserBoutique::class)
  7098.                         ->findOneBy(
  7099.                             array(
  7100.                             'user' => $user->getId(),
  7101.                             'boutique' => $boutique->getId()
  7102.                             )
  7103.                         );
  7104.         $form = $this->createForm(TVAType::class, $tva);
  7105.         
  7106.         $ok_soumission = '';
  7107.         $error = '';
  7108.         
  7109.         if($request->getMethod() == 'POST'){
  7110.             
  7111.                $form->handleRequest($request);
  7112.                if($form->isValid()){
  7113.                    $tva->setBoutique($boutique);
  7114.                   $em->persist($tva);
  7115.                   $em->flush();
  7116.         
  7117.                 $ok_soumission =" Votre message a été pris en compte";
  7118.                     
  7119.                 unset($tva);
  7120.                 unset($form);
  7121.                 $tva = new TVA;
  7122.                 
  7123.                 $form = $this->createForm(TVAType::class, $tva);
  7124.                     
  7125.                 } else {
  7126.                     $error =" Veillez corrigez vos erreurs";
  7127.                 }
  7128.         }
  7129.     
  7130.         return $this->render('admin/nouvelle_tva.html.twig', [
  7131.            'boutique' => $boutique,
  7132.            'form' => $form->createView(),
  7133.            'userBoutique' => $userBoutique
  7134.         ]);
  7135.     }
  7136.     
  7137.     /**
  7138.      * @Route("/{slug}/edit-tax/{tva}", name="admin.edit_tax")
  7139.      * @return \Symfony\Component\HttpFoundation\Response
  7140.      */
  7141.     public function editTaxAction(Request $request, $slug, $tva)
  7142.     {
  7143.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7144.            return $this->redirectToRoute('security_login');
  7145.         }
  7146.         $em = $this->getDoctrine()
  7147.                     ->getManager();
  7148.         
  7149.         $boutique = $em->getRepository(Boutique::class)
  7150.                         ->findOneBySlug($slug);
  7151.                         
  7152.         $tva = $em->getRepository(TVA::class)
  7153.                         ->findOneBy(
  7154.                         array(
  7155.                             'boutique' => $boutique->getId(),
  7156.                             'id' => $tva
  7157.                         )
  7158.                         );
  7159.         
  7160.         $user = $this->getUser();
  7161.         $userBoutique = $em->getRepository(UserBoutique::class)
  7162.                         ->findOneBy(
  7163.                             array(
  7164.                             'user' => $user->getId(),
  7165.                             'boutique' => $boutique->getId()
  7166.                             )
  7167.                         );
  7168.         $userBoutique = $em->getRepository(UserBoutique::class)
  7169.                         ->findOneBy(
  7170.                             array(
  7171.                             'user' => $user->getId(),
  7172.                             'boutique' => $boutique->getId()
  7173.                             )
  7174.                         );
  7175.         $form = $this->createForm(TVAEditType::class, $tva);
  7176.         
  7177.         $ok_soumission = '';
  7178.         $error = '';
  7179.         
  7180.         if($request->getMethod() == 'POST'){
  7181.             
  7182.                $form->handleRequest($request);
  7183.                if($form->isValid()){
  7184.                   $em->flush();
  7185.         
  7186.                 $ok_soumission =" Votre message a été pris en compte";
  7187.                     
  7188.                     
  7189.                 } else {
  7190.                     $error =" Veillez corrigez vos erreurs";
  7191.                 }
  7192.         }
  7193.     
  7194.         return $this->render('admin/edit_tax.html.twig', [
  7195.            'boutique' => $boutique,
  7196.            'tva' => $tva,
  7197.            'form' => $form->createView(),
  7198.            'userBoutique' => $userBoutique
  7199.         ]);
  7200.     }
  7201.     
  7202.     /**
  7203.      * @Route("/{slug}/delete-tax/{id}", name="admin.delete_tax")
  7204.      * @return \Symfony\Component\HttpFoundation\Response
  7205.      */
  7206.     public function deleteTaxAction(Request $request, $slug, TVA $tva)
  7207.     {
  7208.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7209.            return $this->redirectToRoute('security_login');
  7210.         }
  7211.         $em = $this->getDoctrine()
  7212.                     ->getManager();
  7213.         $boutique = $em->getRepository(Boutique::class)
  7214.                         ->findOneBySlug($slug);
  7215.         
  7216.         $tva = $em->getRepository(TVA::class)
  7217.                         ->findOneBy(
  7218.                         array(
  7219.                             'boutique' => $boutique->getId(),
  7220.                             'id' => $tva
  7221.                         )
  7222.                         );
  7223.         if(null !== $tva){
  7224.             $em->remove($tva);
  7225.             $em->flush();
  7226.         }
  7227.         return $this->redirectToRoute('admin.list_tax', array('slug' => $boutique->getSlug()));
  7228.     }
  7229.     
  7230.     /**
  7231.      * @Route("/{slug}/payment-method/list", name="admin.payment_methods")
  7232.      * @return \Symfony\Component\HttpFoundation\Response
  7233.      */
  7234.     public function paymentMethodsAction(Request $request, Boutique $boutique)
  7235.     {
  7236.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7237.            return $this->redirectToRoute('security_login');
  7238.         }
  7239.         $em = $this->getDoctrine()
  7240.                     ->getManager();
  7241.         
  7242.         $paymentMethods = $em->getRepository(PaymentMethod::class)
  7243.                         ->findByBoutique($boutique);
  7244.         $user = $this->getUser();
  7245.         $userBoutique = $em->getRepository(UserBoutique::class)
  7246.                         ->findOneBy(
  7247.                             array(
  7248.                             'user' => $user->getId(),
  7249.                             'boutique' => $boutique->getId()
  7250.                             )
  7251.                         );
  7252.         return $this->render('admin/payment_methods.html.twig', [
  7253.            'boutique' => $boutique,
  7254.            'paymentMethods' => $paymentMethods,
  7255.            'userBoutique' => $userBoutique
  7256.         ]);
  7257.     }
  7258.     
  7259.     /**
  7260.      * @Route("/{slug}/payment-method/new", name="admin.new_payment_method")
  7261.      * @return \Symfony\Component\HttpFoundation\Response
  7262.      */
  7263.     public function newPaymentMethodAction(Request $request, Boutique $boutique)
  7264.     {
  7265.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7266.            return $this->redirectToRoute('security_login');
  7267.         }
  7268.         $em = $this->getDoctrine()
  7269.                     ->getManager();
  7270.         
  7271.         $paymentMethod = new PaymentMethod;
  7272.         
  7273.         $user = $this->getUser();
  7274.         $userBoutique = $em->getRepository(UserBoutique::class)
  7275.                         ->findOneBy(
  7276.                             array(
  7277.                             'user' => $user->getId(),
  7278.                             'boutique' => $boutique->getId()
  7279.                             )
  7280.                         );
  7281.         $form = $this->createForm(PaymentMethodType::class, $paymentMethod);
  7282.         
  7283.         $ok_soumission = '';
  7284.         $error = '';
  7285.         
  7286.         if($request->getMethod() == 'POST'){
  7287.             
  7288.                $form->handleRequest($request);
  7289.                if($form->isValid()){
  7290.                    $paymentMethod->setBoutique($boutique);
  7291.                   $em->persist($paymentMethod);
  7292.                   $em->flush();
  7293.         
  7294.                 $ok_soumission =" Votre message a été pris en compte";
  7295.                     
  7296.                 $paymentMethod = new PaymentMethod;
  7297.                 
  7298.                 $form = $this->createForm(PaymentMethodType::class, $paymentMethod);
  7299.                     
  7300.                 } else {
  7301.                     $error =" Veillez corrigez vos erreurs";
  7302.                 }
  7303.         }
  7304.     
  7305.         return $this->render('admin/new_payment_method.html.twig', [
  7306.            'boutique' => $boutique,
  7307.            'form' => $form->createView(),
  7308.            'userBoutique' => $userBoutique
  7309.         ]);
  7310.     }
  7311.     
  7312.     /**
  7313.      * @Route("/{slug}/payment-method/edit/{paymentMethod}", name="admin.edit_payment_method")
  7314.      * @return \Symfony\Component\HttpFoundation\Response
  7315.      */
  7316.     public function editPaymentMethodAction(Request $request,  $slug, $paymentMethod)
  7317.     {
  7318.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7319.            return $this->redirectToRoute('security_login');
  7320.         }
  7321.         $em = $this->getDoctrine()
  7322.                     ->getManager();
  7323.         
  7324.         $boutique = $em->getRepository(Boutique::class)
  7325.                     ->findOneBySlug($slug);
  7326.         $user = $this->getUser();
  7327.         $userBoutique = $em->getRepository(UserBoutique::class)
  7328.                         ->findOneBy(
  7329.                             array(
  7330.                             'user' => $user->getId(),
  7331.                             'boutique' => $boutique->getId()
  7332.                             )
  7333.                         );
  7334.         $paymentMethod = $em->getRepository(PaymentMethod::class)
  7335.                     ->findOneBy(
  7336.                         array(
  7337.                             'boutique' => $boutique->getId(),
  7338.                             'id' => $paymentMethod
  7339.                         )
  7340.                     );
  7341.         
  7342.         $form = $this->createForm(PaymentMethodEditType::class, $paymentMethod);
  7343.         
  7344.         $ok_soumission = '';
  7345.         $error = '';
  7346.         
  7347.         if($request->getMethod() == 'POST'){
  7348.             
  7349.                $form->handleRequest($request);
  7350.                if($form->isValid()){
  7351.                   $em->flush();
  7352.         
  7353.                 $ok_soumission =" Votre message a été pris en compte";
  7354.                     
  7355.                     
  7356.                 } else {
  7357.                     $error =" Veillez corrigez vos erreurs";
  7358.                 }
  7359.         }
  7360.     
  7361.         return $this->render('admin/edit_payment_method.html.twig', [
  7362.            'boutique' => $boutique,
  7363.            'paymentMethod' => $paymentMethod,
  7364.            'form' => $form->createView(),
  7365.            'userBoutique' => $userBoutique
  7366.         ]);
  7367.     }
  7368.     
  7369.     /**
  7370.      * @Route("/{slug}/payment-method/delete/{id}", name="admin.delete_payment_method")
  7371.      * @return \Symfony\Component\HttpFoundation\Response
  7372.      */
  7373.     public function deletePaymentMethodAction(Request $request, $slug, $id)
  7374.     {
  7375.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7376.            return $this->redirectToRoute('security_login');
  7377.         }
  7378.         $em = $this->getDoctrine()
  7379.                     ->getManager();
  7380.         $boutique = $em->getRepository(Boutique::class)
  7381.                         ->findOneBySlug($slug);
  7382.                         
  7383.         $paymentMethod = $em->getRepository(PaymentMethod::class)
  7384.                         ->findOneBy(
  7385.                         array(
  7386.                             'boutique' => $boutique->getId(),
  7387.                             'id' => $id
  7388.                         )
  7389.                         );
  7390.         if(null !== $paymentMethod){
  7391.             $em->remove($paymentMethod);
  7392.             $em->flush();
  7393.         }
  7394.         return $this->redirectToRoute('admin.payment_methods', array('slug' => $boutique->getSlug()));
  7395.     }
  7396.     
  7397.     /**
  7398.      * @Route("/{slug}/expensives/list", name="admin.expensives")
  7399.      * @return \Symfony\Component\HttpFoundation\Response
  7400.      */
  7401.     public function expensivesAction(Request $request, Boutique $boutique)
  7402.     {
  7403.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7404.            return $this->redirectToRoute('security_login');
  7405.         }
  7406.         $em = $this->getDoctrine()
  7407.                     ->getManager();
  7408.         
  7409.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  7410.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  7411.         $dateDebut->setTime(0, 0);
  7412.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  7413.         $dateFin->setTime(23, 59);
  7414.         
  7415.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  7416.         $startMonth = $intervalleMois['debut'];
  7417.         $endMonth = $intervalleMois['fin'];
  7418.         
  7419.         $expensives  = $em->getRepository(Expensive::class)
  7420.                         ->depenseParDate($boutique->getId(), $dateDebut, $dateFin);
  7421.         
  7422.         $startYear = date('Y-01-01');
  7423.         $endYear = date('Y-12-31');
  7424.         $user = $this->getUser();
  7425.         $userBoutique = $em->getRepository(UserBoutique::class)
  7426.                         ->findOneBy(
  7427.                             array(
  7428.                             'user' => $user->getId(),
  7429.                             'boutique' => $boutique->getId()
  7430.                             )
  7431.                         );
  7432.         if('POST' == $request->getMethod()){
  7433.             $dateDebut = $_POST['dateDebut'];
  7434.             $dateFin = $_POST['dateFin'];
  7435.             
  7436.             $dateDebut = new \DateTime($dateDebut);
  7437.             $dateFin = new \DateTime($dateFin);
  7438.             
  7439.             $expensives = $em->getRepository(Expensive::class)
  7440.                         ->depenseParDate($boutique->getId(), $dateDebut, $dateFin);
  7441.             
  7442.             
  7443.             return $this->render('admin/expensives_table_content.html.twig', [
  7444.                'boutique' => $boutique,
  7445.                'expensives' => $expensives,
  7446.                'userBoutique' => $userBoutique
  7447.             ]);
  7448.         }
  7449.         
  7450.             
  7451.         return $this->render('admin/expensives.html.twig', [
  7452.            'boutique' => $boutique,
  7453.            'expensives' => $expensives,
  7454.            'userBoutique' => $userBoutique,
  7455.            'intervalleDeDate' => $intervalleDeDate,
  7456.            'dateDebut' => $dateDebut,
  7457.            'dateFin' => $dateFin,
  7458.            'startMonth' => $startMonth,
  7459.            'intervalleMois' => $intervalleMois,
  7460.            'endMonth' => $endMonth,
  7461.            'startYear' => $startYear,
  7462.            'endYear' => $endYear
  7463.            
  7464.         ]);
  7465.     }
  7466.     
  7467.     /**
  7468.      * @Route("/{slug}/expensives/new", name="admin.new_expensive")
  7469.      * @return \Symfony\Component\HttpFoundation\Response
  7470.      */
  7471.     public function newExpensiveAction(Request $request, Boutique $boutique)
  7472.     {
  7473.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7474.            return $this->redirectToRoute('security_login');
  7475.         }
  7476.         $em = $this->getDoctrine()
  7477.                     ->getManager();
  7478.         
  7479.         $expensive = new Expensive;
  7480.         
  7481.         $user = $this->getUser();
  7482.         $userBoutique = $em->getRepository(UserBoutique::class)
  7483.                         ->findOneBy(
  7484.                             array(
  7485.                             'user' => $user->getId(),
  7486.                             'boutique' => $boutique->getId()
  7487.                             )
  7488.                         );
  7489.         $form = $this->createForm(ExpensiveType::class, $expensive, array('boutique' => $boutique->getId()));
  7490.         
  7491.         $ok_soumission = '';
  7492.         $error = '';
  7493.         $laDate = '';
  7494.         if($request->getMethod() == 'POST'){
  7495.             
  7496.                $form->handleRequest($request);
  7497.                if($form->isValid()){
  7498.                 $data = $form->getData();
  7499.                    $expensive->setBoutique($boutique);
  7500.                    $expensive->setCreePar($user);
  7501.                   $em->persist($expensive);
  7502.                   $em->flush();
  7503.         
  7504.                 $ok_soumission =" Votre message a été pris en compte";
  7505.                     
  7506.                 $moyenDePaiement = $request->request->get('moyenDePaiement');
  7507.                 $expensive->setMoyenDePaiement($moyenDePaiement);
  7508.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  7509.                 $libelle = 'Règlement fournisseur';
  7510.                 if($expensive->getTiers() != null){
  7511.                     $libelle = $libelle. ' '. $expensive->getTiers()->getNom();
  7512.                 }
  7513.                 $groupeEcritureComptable = new GroupeEcritureComptable;
  7514.                 $groupeEcritureComptable->setBoutique($boutique);
  7515.                 $groupeEcritureComptable->setLibelleEcriture($libelle);
  7516.                 $groupeEcritureComptable->setDebit($data->getMontant());
  7517.                 $groupeEcritureComptable->setCredit($data->getMontant());
  7518.                 $groupeEcritureComptable->setLaDate($data->getLaDate());
  7519.                 $groupeEcritureComptable->setNumeroPiece($data->getPiece());
  7520.                 $groupeEcritureComptable->setAnnee($data->getLaDate()->format('Y'));
  7521.                 $groupeEcritureComptable->setMois($data->getLaDate()->format('m'));
  7522.                 $em->persist($groupeEcritureComptable);
  7523.                 $em->flush();
  7524.                     
  7525.                 //Ecriture comptable
  7526.                 
  7527.                 //$ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  7528.                 if($moyenDePaiement == 'cash' || $moyenDePaiement == 'mobile-money'){
  7529.                     //Debit
  7530.                     
  7531.                     
  7532.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  7533.                     $ecritureComptable = new EcritureComptable;
  7534.                     
  7535.                     $ecritureComptable->setBoutique($boutique);
  7536.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  7537.                     
  7538.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  7539.                     $compte = $em->getRepository(Compte::class)
  7540.                                 ->findOneBy(
  7541.                                     array(
  7542.                                         'boutique' => $boutique,
  7543.                                         'numero' => '5711' //Caisse
  7544.                                     )    
  7545.                                 ); 
  7546.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  7547.                     $ecritureComptable->setCompte($compte);
  7548.                     $ecritureComptable->setLibelleEcriture($libelle);
  7549.                     $ecritureComptable->setCredit($data->getMontant());
  7550.                     $ecritureComptable->setSolde($compte->getSolde());
  7551.                     $ecritureComptable->setLaDate($data->getLaDate());
  7552.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  7553.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  7554.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  7555.                     $em->persist($ecritureComptable);
  7556.                     //Debit
  7557.                     $ecritureComptable = new EcritureComptable;
  7558.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  7559.                     $ecritureComptable->setBoutique($boutique);
  7560.                     
  7561.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  7562.                     $compte = $em->getRepository(Compte::class)
  7563.                                 ->findOneBy(
  7564.                                     array(
  7565.                                         'boutique' => $boutique,
  7566.                                         'numero' => '658'
  7567.                                     )    
  7568.                                 ); //Charge divers
  7569.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  7570.                     $ecritureComptable->setCompte($compte);
  7571.                     $ecritureComptable->setLibelleEcriture($libelle);
  7572.                     $ecritureComptable->setDebit($data->getMontant());
  7573.                     $ecritureComptable->setSolde($compte->getSolde());
  7574.                     $ecritureComptable->setLaDate($data->getLaDate());
  7575.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  7576.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  7577.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  7578.                     $em->persist($ecritureComptable);
  7579.                 }else{
  7580.                     $leJournal = $boutique->getSettings()->getJournalDeBanque();
  7581.                     
  7582.                     $groupeEcritureComptable->setLeJournal($leJournal);
  7583.                     $ecritureComptable = new EcritureComptable;
  7584.                     
  7585.                     $ecritureComptable->setBoutique($boutique);
  7586.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  7587.                     
  7588.                     $ecritureComptable->setLeJournal($leJournal);
  7589.                     $compte = $em->getRepository(Compte::class)
  7590.                                 ->findOneBy(
  7591.                                     array(
  7592.                                         'boutique' => $boutique,
  7593.                                         'numero' => '521'
  7594.                                     )    
  7595.                                 ); //Banque
  7596.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  7597.                     $ecritureComptable->setCompte($compte);
  7598.                     $ecritureComptable->setLibelleEcriture($libelle);
  7599.                     $ecritureComptable->setCredit($data->getMontant());
  7600.                     $ecritureComptable->setSolde($compte->getSolde());
  7601.                     $ecritureComptable->setLaDate($data->getLaDate());
  7602.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  7603.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  7604.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  7605.                     $em->persist($ecritureComptable);
  7606.                     //Debit
  7607.                     $ecritureComptable = new EcritureComptable;
  7608.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  7609.                     $ecritureComptable->setBoutique($boutique);
  7610.                     
  7611.                     $ecritureComptable->setLeJournal($leJournal);
  7612.                     $compte = $em->getRepository(Compte::class)
  7613.                                 ->findOneBy(
  7614.                                     array(
  7615.                                         'boutique' => $boutique,
  7616.                                         'numero' => '658'
  7617.                                     )    
  7618.                                 ); //Charge divers
  7619.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  7620.                     $ecritureComptable->setCompte($compte);
  7621.                     $ecritureComptable->setLibelleEcriture($libelle);
  7622.                     $ecritureComptable->setDebit($data->getMontant());
  7623.                     $ecritureComptable->setSolde($compte->getSolde());
  7624.                     $ecritureComptable->setLaDate($data->getLaDate());
  7625.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  7626.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  7627.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  7628.                     $em->persist($ecritureComptable);
  7629.                 }
  7630.                 }
  7631.                 $em->flush();
  7632.                 $expensive = new Expensive;
  7633.                 
  7634.                 $form = $this->createForm(ExpensiveType::class, $expensive);
  7635.                     
  7636.                 } else {
  7637.                     $error =" Veillez corrigez vos erreurs";
  7638.                 }
  7639.         }
  7640.     
  7641.         return $this->render('admin/new_expensive.html.twig', [
  7642.            'boutique' => $boutique,
  7643.            'form' => $form->createView(),
  7644.            'userBoutique' => $userBoutique
  7645.         ]);
  7646.     }
  7647.     
  7648.     /**
  7649.      * @Route("/{slug}/expensive/edit/{id}", name="admin.edit_expensive")
  7650.      * @return \Symfony\Component\HttpFoundation\Response
  7651.      */
  7652.     public function editExpensivesAction(Request $request,  $slug, $id)
  7653.     {
  7654.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7655.            return $this->redirectToRoute('security_login');
  7656.         }
  7657.         $em = $this->getDoctrine()
  7658.                     ->getManager();
  7659.         
  7660.         $boutique = $em->getRepository(Boutique::class)
  7661.                     ->findOneBySlug($slug);
  7662.         $user = $this->getUser();
  7663.         $userBoutique = $em->getRepository(UserBoutique::class)
  7664.                         ->findOneBy(
  7665.                             array(
  7666.                             'user' => $user->getId(),
  7667.                             'boutique' => $boutique->getId()
  7668.                             )
  7669.                         );
  7670.         $expensive = $em->getRepository(Expensive::class)
  7671.                     ->findOneBy(
  7672.                         array(
  7673.                             'boutique' => $boutique->getId(),
  7674.                             'id' => $id
  7675.                         )
  7676.                     );
  7677.         
  7678.         $form = $this->createForm(ExpensiveEditType::class, $expensive, array('boutique' => $boutique->getId()));
  7679.         
  7680.         $ok_soumission = '';
  7681.         $error = '';
  7682.         
  7683.         if($request->getMethod() == 'POST'){
  7684.             
  7685.                $form->handleRequest($request);
  7686.                if($form->isValid()){
  7687.                 $expensive->setModifiePar($user);
  7688.                   $em->flush();
  7689.         
  7690.                 $ok_soumission =" Votre message a été pris en compte";
  7691.                     
  7692.                     
  7693.                 } else {
  7694.                     $error =" Veillez corrigez vos erreurs";
  7695.                 }
  7696.         }
  7697.     
  7698.         return $this->render('admin/edit_expensive.html.twig', [
  7699.            'boutique' => $boutique,
  7700.            'expensive' => $expensive,
  7701.            'form' => $form->createView(),
  7702.            'userBoutique' => $userBoutique
  7703.         ]);
  7704.     }
  7705.     
  7706.     /**
  7707.      * @Route("/{slug}/expensive/delete/{id}", name="admin.delete_expensive")
  7708.      * @return \Symfony\Component\HttpFoundation\Response
  7709.      */
  7710.     public function deleteExpensiveAction(Request $request, $slug, $id)
  7711.     {
  7712.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7713.            return $this->redirectToRoute('security_login');
  7714.         }
  7715.         $em = $this->getDoctrine()
  7716.                     ->getManager();
  7717.         $boutique = $em->getRepository(Boutique::class)
  7718.                         ->findOneBySlug($slug);
  7719.         $user = $this->getUser();
  7720.                         
  7721.         $expensive = $em->getRepository(Expensive::class)
  7722.                         ->findOneBy(
  7723.                         array(
  7724.                             'boutique' => $boutique->getId(),
  7725.                             'id' => $id
  7726.                         )
  7727.                         );
  7728.         if(null !== $expensive){
  7729.             $expensive->setEstSupprime(true);
  7730.             $expensive->setSupprimePar($user);
  7731.             //$em->remove($expensive);
  7732.             $em->flush();
  7733.         }
  7734.         return $this->redirectToRoute('admin.expensives', array('slug' => $boutique->getSlug()));
  7735.     }
  7736.     /**
  7737.      * @Route("/{slug}/categorie-depense/list", name="admin_categorie_depenses")
  7738.      * @return \Symfony\Component\HttpFoundation\Response
  7739.      */
  7740.     public function categorieDepenseAction(Request $request, Boutique $boutique)
  7741.     {
  7742.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7743.            return $this->redirectToRoute('security_login');
  7744.         }
  7745.         $em = $this->getDoctrine()
  7746.                     ->getManager();
  7747.         
  7748.         $categorieDepenses  = $em->getRepository(CategorieDepense::class)
  7749.                         ->findBy(
  7750.                             array(
  7751.                                 'boutique' => $boutique->getId()
  7752.                             )    
  7753.                         );
  7754.         
  7755.         $user = $this->getUser();
  7756.         $userBoutique = $em->getRepository(UserBoutique::class)
  7757.                         ->findOneBy(
  7758.                             array(
  7759.                             'user' => $user->getId(),
  7760.                             'boutique' => $boutique->getId()
  7761.                             )
  7762.                         );
  7763.         
  7764.         
  7765.             
  7766.         return $this->render('admin/categorie_depenses.html.twig', [
  7767.            'boutique' => $boutique,
  7768.            'userBoutique' => $userBoutique,
  7769.            'categorieDepenses' => $categorieDepenses
  7770.            
  7771.         ]);
  7772.     }
  7773.     
  7774.     /**
  7775.      * @Route("/{slug}/categorie-depense/nouveau", name="admin_nouvelle_categorie_dedepense")
  7776.      * @return \Symfony\Component\HttpFoundation\Response
  7777.      */
  7778.     public function nouvelleCategorieDepenseAction(Request $request, Boutique $boutique)
  7779.     {
  7780.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7781.            return $this->redirectToRoute('security_login');
  7782.         }
  7783.         $em = $this->getDoctrine()
  7784.                     ->getManager();
  7785.         
  7786.         $categorieDepense = new CategorieDepense;
  7787.         
  7788.         $user = $this->getUser();
  7789.         $userBoutique = $em->getRepository(UserBoutique::class)
  7790.                         ->findOneBy(
  7791.                             array(
  7792.                             'user' => $user->getId(),
  7793.                             'boutique' => $boutique->getId()
  7794.                             )
  7795.                         );
  7796.         $form = $this->createForm(CategorieDepenseType::class, $categorieDepense);
  7797.         
  7798.         $ok_soumission = '';
  7799.         
  7800.         if($request->getMethod() == 'POST'){
  7801.             
  7802.                $form->handleRequest($request);
  7803.                if($form->isValid()){
  7804.                 $categorieDepense->setBoutique($boutique);
  7805.                   $em->persist($categorieDepense);
  7806.                   $em->flush();
  7807.         
  7808.                 $ok_soumission =" Votre message a été pris en compte";
  7809.                     
  7810.                 $categorieDepense = new CategorieDepense;
  7811.                 
  7812.                 $form = $this->createForm(CategorieDepenseType::class, $categorieDepense);
  7813.                     
  7814.                 } else {
  7815.                     $error =" Veillez corrigez vos erreurs";
  7816.                 }
  7817.         }
  7818.     
  7819.         return $this->render('admin/nouvelle_categorie_depense.html.twig', [
  7820.            'boutique' => $boutique,
  7821.            'form' => $form->createView(),
  7822.            'userBoutique' => $userBoutique
  7823.         ]);
  7824.     }
  7825.     
  7826.     /**
  7827.      * @Route("/{slug}/categorie-depense/modifier/{id}", name="admin_modifier_categorie_depense")
  7828.      * @return \Symfony\Component\HttpFoundation\Response
  7829.      */
  7830.     public function modifierCategorieDepenseAction(Request $request,  $slug, $id)
  7831.     {
  7832.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7833.            return $this->redirectToRoute('security_login');
  7834.         }
  7835.         $em = $this->getDoctrine()
  7836.                     ->getManager();
  7837.         
  7838.         $boutique = $em->getRepository(Boutique::class)
  7839.                     ->findOneBySlug($slug);
  7840.         $user = $this->getUser();
  7841.         $userBoutique = $em->getRepository(UserBoutique::class)
  7842.                         ->findOneBy(
  7843.                             array(
  7844.                             'user' => $user->getId(),
  7845.                             'boutique' => $boutique->getId()
  7846.                             )
  7847.                         );
  7848.         $categorieDepense = $em->getRepository(CategorieDepense::class)
  7849.                     ->findOneBy(
  7850.                         array(
  7851.                             'boutique' => $boutique->getId(),
  7852.                             'id' => $id
  7853.                         )
  7854.                     );
  7855.         
  7856.         $form = $this->createForm(CategorieDepenseEditType::class, $categorieDepense);
  7857.         
  7858.         $ok_soumission = '';
  7859.         $error = '';
  7860.         
  7861.         if($request->getMethod() == 'POST'){
  7862.             
  7863.                $form->handleRequest($request);
  7864.                if($form->isValid()){
  7865.                 
  7866.                   $em->flush();
  7867.         
  7868.                 $ok_soumission =" Votre message a été pris en compte";
  7869.                     
  7870.                     
  7871.                 } else {
  7872.                     $error =" Veillez corrigez vos erreurs";
  7873.                 }
  7874.         }
  7875.     
  7876.         return $this->render('admin/modifier_categorie_depense.html.twig', [
  7877.            'boutique' => $boutique,
  7878.            'categorieDepense' => $categorieDepense,
  7879.            'form' => $form->createView(),
  7880.            'userBoutique' => $userBoutique
  7881.         ]);
  7882.     }
  7883.     
  7884.     /**
  7885.      * @Route("/{slug}/categorie-depense/supprimer/{id}", name="admin_supprimer_categorie_depense")
  7886.      * @return \Symfony\Component\HttpFoundation\Response
  7887.      */
  7888.     public function supprimerCategorieDepenseAction(Request $request, $slug, $id)
  7889.     {
  7890.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7891.            return $this->redirectToRoute('security_login');
  7892.         }
  7893.         $em = $this->getDoctrine()
  7894.                     ->getManager();
  7895.         $boutique = $em->getRepository(Boutique::class)
  7896.                         ->findOneBySlug($slug);
  7897.         $user = $this->getUser();
  7898.                         
  7899.         $categorieDepense = $em->getRepository(CategorieDepense::class)
  7900.                         ->findOneBy(
  7901.                         array(
  7902.                             'boutique' => $boutique->getId(),
  7903.                             'id' => $id
  7904.                         )
  7905.                         );
  7906.         if(null !== $categorieDepense){
  7907.             
  7908.             $em->remove($categorieDepense);
  7909.             $em->flush();
  7910.         }
  7911.         return $this->redirectToRoute('admin_categorie_depenses', array('slug' => $boutique->getSlug()));
  7912.     }
  7913.     
  7914.     
  7915.     /**
  7916.      * @Route("/{slug}/third/list", name="admin.liste_tiers")
  7917.      * @return \Symfony\Component\HttpFoundation\Response
  7918.      */
  7919.     public function listeTiersAction(Request $request, Boutique $boutique)
  7920.     {
  7921.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7922.            return $this->redirectToRoute('security_login');
  7923.         }
  7924.         $em = $this->getDoctrine()
  7925.                     ->getManager();
  7926.         
  7927.         $tiers = $em->getRepository(Tiers::class)
  7928.                     ->findBy(
  7929.                         array(
  7930.                             'boutique' => $boutique->getId(),
  7931.                             'estSupprime' => false
  7932.                             
  7933.                         ),
  7934.                         array(
  7935.                             'nom' => 'ASC'
  7936.                         )
  7937.                         );
  7938.         $user = $this->getUser();
  7939.         $userBoutique = $em->getRepository(UserBoutique::class)
  7940.                         ->findOneBy(
  7941.                             array(
  7942.                             'user' => $user->getId(),
  7943.                             'boutique' => $boutique->getId()
  7944.                             )
  7945.                         );
  7946.         return $this->render('admin/liste_tiers.html.twig', [
  7947.            'boutique' => $boutique,
  7948.            'tiers' => $tiers,
  7949.            'userBoutique' => $userBoutique
  7950.         ]);
  7951.     }
  7952.     
  7953.     //Service
  7954.     
  7955.     /**
  7956.      * @Route("/{slug}/new-third", name="admin.new_third")
  7957.      * @return \Symfony\Component\HttpFoundation\Response
  7958.      */
  7959.     public function newThirdAction(Request $request, Boutique $boutique)
  7960.     {
  7961.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7962.            return $this->redirectToRoute('security_login');
  7963.         }
  7964.         $em = $this->getDoctrine()
  7965.                     ->getManager();
  7966.         
  7967.         $tiers = new Tiers;
  7968.         $form = $this->createForm(TiersType::class, $tiers);
  7969.         
  7970.         $user = $this->getUser();
  7971.         $userBoutique = $em->getRepository(UserBoutique::class)
  7972.                         ->findOneBy(
  7973.                             array(
  7974.                             'user' => $user->getId(),
  7975.                             'boutique' => $boutique->getId()
  7976.                             )
  7977.                         );
  7978.         
  7979.         $ok_soumission = '';
  7980.         $error = '';
  7981.         
  7982.         if($request->getMethod() == 'POST'){
  7983.             
  7984.                $form->handleRequest($request);
  7985.                if($form->isValid()){
  7986.                    $tiers->setBoutique($boutique);
  7987.                    $tiers->setCreePar($user);
  7988.                   $em->persist($tiers);
  7989.                   $em->flush();
  7990.         
  7991.                 $ok_soumission =" Votre message a été pris en compte";
  7992.                 $tiers = new Tiers;
  7993.                 
  7994.                 $form = $this->createForm(TiersType::class, $tiers);
  7995.                     
  7996.                 } else {
  7997.                     $error =" Veillez corrigez vos erreurs";
  7998.                 }
  7999.         }
  8000.         return $this->render('admin/nouveau_tiers.html.twig', [
  8001.            'boutique' => $boutique,
  8002.            'form' => $form->createView(),
  8003.            'userBoutique' => $userBoutique
  8004.         ]);
  8005.     }
  8006.     /**
  8007.      * @Route("/{slug}/edit-third/{third}", name="admin.edit_third")
  8008.      * @return \Symfony\Component\HttpFoundation\Response
  8009.      */
  8010.     public function editThirdAction(Request $request, Boutique $boutique, $third)
  8011.     {
  8012.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8013.            return $this->redirectToRoute('security_login');
  8014.         }
  8015.         $em = $this->getDoctrine()
  8016.                     ->getManager();
  8017.                     
  8018.         $user = $this->getUser();
  8019.         $userBoutique = $em->getRepository(UserBoutique::class)
  8020.                         ->findOneBy(
  8021.                             array(
  8022.                             'user' => $user->getId(),
  8023.                             'boutique' => $boutique->getId()
  8024.                             )
  8025.                         );
  8026.         $third = $em->getRepository(Tiers::class)
  8027.                     ->findOneById($third);
  8028.         $form = $this->createForm(TiersEditType::class, $third);
  8029.         
  8030.         $ok_soumission = '';
  8031.         $error = '';
  8032.         
  8033.         if($request->getMethod() == 'POST'){
  8034.             
  8035.                $form->handleRequest($request);
  8036.                if($form->isValid()){
  8037.                     $third->setModifiePar($user);
  8038.                   $em->flush();
  8039.         
  8040.                 $ok_soumission =" Votre message a été pris en compte";
  8041.                     
  8042.                 } else {
  8043.                     $error =" Veillez corrigez vos erreurs";
  8044.                 }
  8045.         }
  8046.         return $this->render('admin/edit_third.html.twig', [
  8047.            'boutique' => $boutique,
  8048.            'form' => $form->createView(),
  8049.            'third' => $third,
  8050.            'userBoutique' => $userBoutique
  8051.         ]);
  8052.     }
  8053.     /**
  8054.      * @Route("/{slug}/delete-third/{third}", name="admin.delete_third")
  8055.      * @return \Symfony\Component\HttpFoundation\Response
  8056.      */
  8057.     public function deleteThirdAction(Request $request, Boutique $boutique, $third)
  8058.     {
  8059.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8060.            return $this->redirectToRoute('security_login');
  8061.         }
  8062.         $em = $this->getDoctrine()
  8063.                     ->getManager();
  8064.         $user = $this->getUser();
  8065.         $third = $em->getRepository(Tiers::class)
  8066.                     ->findOneById($third);
  8067.                     
  8068.         if(null != $third){
  8069.             $third->setEstSupprime(true);
  8070.             $third->setSupprimePar($user);
  8071.             $em->flush();
  8072.         }
  8073.         
  8074.         return $this->redirectToRoute('admin.liste_tiers', array('slug' => $boutique->getSlug()));
  8075.     }
  8076.     /**
  8077.      * @Route("/{slug}/statistics", name="admin.statistics")
  8078.      * @return \Symfony\Component\HttpFoundation\Response
  8079.      */
  8080.     public function statisticsAction(Request $request, Boutique $boutique)
  8081.     {
  8082.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8083.            return $this->redirectToRoute('security_login');
  8084.         }
  8085.         $em = $this->getDoctrine()
  8086.                     ->getManager();
  8087.         
  8088.         $tiers = $em->getRepository(Tiers::class)
  8089.                     ->findByBoutique($boutique);
  8090.         $user = $this->getUser();
  8091.         $userBoutique = $em->getRepository(UserBoutique::class)
  8092.                         ->findOneBy(
  8093.                             array(
  8094.                             'user' => $user->getId(),
  8095.                             'boutique' => $boutique->getId()
  8096.                             )
  8097.                         );
  8098.                         
  8099.         return $this->render('admin/statistics.html.twig', [
  8100.            'boutique' => $boutique,
  8101.            'tiers' => $tiers,
  8102.            'userBoutique' => $userBoutique
  8103.         ]);
  8104.     }
  8105.     
  8106.     /**
  8107.      * @Route("/{slug}/promotions", name="admin.promotions")
  8108.      * @return \Symfony\Component\HttpFoundation\Response
  8109.      */
  8110.     public function promotionsAction(Request $request, Boutique $boutique)
  8111.     {
  8112.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8113.            return $this->redirectToRoute('security_login');
  8114.         }
  8115.         $em = $this->getDoctrine()
  8116.                     ->getManager();
  8117.         
  8118.         $tiers = $em->getRepository(Tiers::class)
  8119.                     ->findByBoutique($boutique);
  8120.         $user = $this->getUser();
  8121.         $userBoutique = $em->getRepository(UserBoutique::class)
  8122.                         ->findOneBy(
  8123.                             array(
  8124.                             'user' => $user->getId(),
  8125.                             'boutique' => $boutique->getId()
  8126.                             )
  8127.                         );
  8128.         return $this->render('admin/liste_tiers.html.twig', [
  8129.            'boutique' => $boutique,
  8130.            'tiers' => $tiers,
  8131.            'userBoutique' => $userBoutique
  8132.         ]);
  8133.     }
  8134.     
  8135.     /**
  8136.      * @Route("/{slug}/new-payment-patern", name="admin.new_payment_patern")
  8137.      * @return \Symfony\Component\HttpFoundation\Response
  8138.      */
  8139.     public function newPayementPaternMethodAction(Request $request, Boutique $boutique)
  8140.     {
  8141.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8142.            return $this->redirectToRoute('security_login');
  8143.         }
  8144.         $em = $this->getDoctrine()
  8145.                     ->getManager();
  8146.         
  8147.         $modeleReglement = new ModeleReglement;
  8148.         $form = $this->createForm(ModeleReglementType::class, $modeleReglement);
  8149.         
  8150.         $ok_soumission = '';
  8151.         $error = '';
  8152.         $user = $this->getUser();
  8153.         $userBoutique = $em->getRepository(UserBoutique::class)
  8154.                         ->findOneBy(
  8155.                             array(
  8156.                             'user' => $user->getId(),
  8157.                             'boutique' => $boutique->getId()
  8158.                             )
  8159.                         );
  8160.         if($request->getMethod() == 'POST'){
  8161.             
  8162.                $form->handleRequest($request);
  8163.                if($form->isValid()){
  8164.                    $modeleReglement->setBoutique($boutique);
  8165.                   $em->persist($modeleReglement);
  8166.                   $em->flush();
  8167.         
  8168.                 $ok_soumission =" Votre message a été pris en compte";
  8169.                     
  8170.                 unset($modeleReglement);
  8171.                 unset($form);
  8172.                 $modeleReglement = new ModeleReglement;
  8173.                 
  8174.                 $form = $this->createForm(ModeleReglementType::class, $modeleReglement);
  8175.                     
  8176.                 } else {
  8177.                     $error =" Veillez corrigez vos erreurs";
  8178.                 }
  8179.         }
  8180.         return $this->render('admin/nouveau_modele_reglement.html.twig', [
  8181.            'boutique' => $boutique, 
  8182.            'form' => $form->createView(),
  8183.            'userBoutique' => $userBoutique
  8184.         ]);
  8185.     }
  8186.     
  8187.     /**
  8188.      * @Route("/{slug}/payment-patern/list", name="admin.list_payment_patern")
  8189.      * @return \Symfony\Component\HttpFoundation\Response
  8190.      */
  8191.     public function listeModeleReglementAction(Request $request, Boutique $boutique)
  8192.     {
  8193.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8194.            return $this->redirectToRoute('security_login');
  8195.         }
  8196.         $em = $this->getDoctrine()
  8197.                     ->getManager();
  8198.         
  8199.         $modeleReglements = $em->getRepository(ModeleReglement::class)
  8200.                     ->findByBoutique($boutique);
  8201.         $user = $this->getUser();
  8202.         $userBoutique = $em->getRepository(UserBoutique::class)
  8203.                         ->findOneBy(
  8204.                             array(
  8205.                             'user' => $user->getId(),
  8206.                             'boutique' => $boutique->getId()
  8207.                             )
  8208.                         );
  8209.                         
  8210.         return $this->render('admin/liste_modele_reglement.html.twig', [
  8211.            'boutique' => $boutique,
  8212.            'modeleReglements' => $modeleReglements,
  8213.            'userBoutique' => $userBoutique
  8214.         ]);
  8215.     }
  8216.     
  8217.     /**
  8218.      * @Route("/{slug}/send-document-mail/{id}", name="admin.send_document_mail")
  8219.      * @return \Symfony\Component\HttpFoundation\Response
  8220.      */
  8221.     public function sendDocumentMailAction(Request $request, MailerInterface $mailer, $slug, $id)
  8222.     {
  8223.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8224.            return $this->redirectToRoute('security_login');
  8225.         }
  8226.         $em = $this->getDoctrine()
  8227.                     ->getManager();
  8228.         $boutique = $em->getRepository(Boutique::class)
  8229.                         ->findOneBySlug($slug);
  8230.         $user = $this->getUser();
  8231.         $userBoutique = $em->getRepository(UserBoutique::class)
  8232.                         ->findOneBy(
  8233.                             array(
  8234.                             'user' => $user->getId(),
  8235.                             'boutique' => $boutique->getId()
  8236.                             )
  8237.                         );        
  8238.         $commande = $em->getRepository(Commande::class)
  8239.                     ->findOneBy(
  8240.                         array(
  8241.                         'boutique' => $boutique->getId(),
  8242.                         'id' => $id
  8243.                         )
  8244.                     );
  8245.         
  8246.         $appName = $this->getParameter('app_name');
  8247.         if('POST'== $request->getMethod()){
  8248.             $from = $_POST['from'];
  8249.             $to = $_POST['to_mail'];
  8250.             $subject = $_POST['subject'];
  8251.             $contenu = $_POST['message'];
  8252.             $sendAttachment = (bool)$_POST['send_attachment'];
  8253.             
  8254.             /*
  8255.             $message = (new \Swift_Message($subject))
  8256.             ->setFrom([$from  => $appName])
  8257.             ->setTo([$to])
  8258.             ->setBody(
  8259.                 $this->renderView(
  8260.                 'admin/document_email.html.twig',
  8261.                 [
  8262.                 'message' => $contenu
  8263.                 ]
  8264.                 ),
  8265.             'text/html'
  8266.             );
  8267.             
  8268.             if($sendAttachment){
  8269.                 $message->attach(\Swift_Attachment::fromPath($commande->getLienPDF()));
  8270.             }
  8271.             
  8272.             $mailer->send($message);
  8273.             */
  8274.             //Nouveau mailer
  8275.         $from = $_POST['from'];
  8276.             $to = $_POST['to_mail'];
  8277.             $subject = $_POST['subject'];
  8278.             $contenu = $_POST['message'];
  8279.             $sendAttachment = (bool)$_POST['send_attachment'];
  8280.             
  8281.             
  8282.             $email = (new TemplatedEmail())
  8283.                 ->from($from)
  8284.                 ->to($to)
  8285.                 ->subject($subject)
  8286.                 ->htmlTemplate('email/document_email.html.html.twig')
  8287.                 ->context([
  8288.                     'contenu' => $contenu
  8289.                 ]);
  8290.                 //$mailer->send($email); // Dispatches the message
  8291.             
  8292.         }
  8293.         
  8294.         return $this->render('admin/send_document_mail.html.twig', [
  8295.            'boutique' => $boutique,
  8296.            'commande' => $commande,
  8297.            'userBoutique' => $userBoutique
  8298.         ]);
  8299.     }
  8300.     
  8301.     
  8302.     /**
  8303.      * @Route("/{slug}/nombre-commande-en-retard", name="admin.nombre_commande_en_retard")
  8304.      * @return \Symfony\Component\HttpFoundation\Response
  8305.      */
  8306.     public function nombreCommandeEnRetard(Request $request, Boutique $boutique)
  8307.     {
  8308.         $em = $this->getDoctrine()
  8309.                     ->getManager();
  8310.         $nombreCommandeEnRetard = $em->getRepository(Commande::class)
  8311.                         -> nombreCommandeEnRetard($boutique->getId());
  8312.                         
  8313.         $nombreCommandeEnRetard = count($nombreCommandeEnRetard);
  8314.         $user = $this->getUser();
  8315.         $userBoutique = $em->getRepository(UserBoutique::class)
  8316.                         ->findOneBy(
  8317.                             array(
  8318.                             'user' => $user->getId(),
  8319.                             'boutique' => $boutique->getId()
  8320.                             )
  8321.                         );
  8322.         return $this->render('admin/nombre_commande_en_retard.html.twig', [
  8323.            'boutique' => $boutique,
  8324.            'nombreCommandeEnRetard' => $nombreCommandeEnRetard,
  8325.            'userBoutique' => $userBoutique
  8326.         ]);
  8327.     }
  8328.     
  8329.     /**
  8330.      * @Route("/{slug}/liste-commande-en-retard", name="admin.liste_commande_en_retard")
  8331.      * @return \Symfony\Component\HttpFoundation\Response
  8332.      */
  8333.     public function listeCommandeEnRetard(Request $request, Boutique $boutique)
  8334.     {
  8335.         $em = $this->getDoctrine()
  8336.                     ->getManager();
  8337.         $nombreCommandeEnRetards = $em->getRepository(Commande::class)
  8338.                         -> nombreCommandeEnRetard($boutique->getId());
  8339.                         
  8340.         $user = $this->getUser();
  8341.         $userBoutique = $em->getRepository(UserBoutique::class)
  8342.                         ->findOneBy(
  8343.                             array(
  8344.                             'user' => $user->getId(),
  8345.                             'boutique' => $boutique->getId()
  8346.                             )
  8347.                         );
  8348.         
  8349.         return $this->render('admin/liste_commande_en_retard.html.twig', [
  8350.            'boutique' => $boutique,
  8351.            'nombreCommandeEnRetards' => $nombreCommandeEnRetards,
  8352.            'userBoutique' => $userBoutique
  8353.         ]);
  8354.     }
  8355.     
  8356.     /**
  8357.      * @Route("/{slug}/my-invoices", name="admin.my_invoices")
  8358.      * @return \Symfony\Component\HttpFoundation\Response
  8359.      */
  8360.     public function myInvoicesAction(Request $request, Boutique $boutique)
  8361.     {
  8362.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8363.            return $this->redirectToRoute('security_login');
  8364.         }
  8365.         $em = $this->getDoctrine()
  8366.                     ->getManager();
  8367.                     
  8368.         
  8369.                         
  8370.         $toutesLesValiditeServices = $em->getRepository(ValiditeService::class)
  8371.                     ->toutesLesValiditeService($boutique->getId());
  8372.                     
  8373.         
  8374.         $user = $this->getUser();
  8375.         $userBoutique = $em->getRepository(UserBoutique::class)
  8376.                         ->findOneBy(
  8377.                             array(
  8378.                             'user' => $user->getId(),
  8379.                             'boutique' => $boutique->getId()
  8380.                             )
  8381.                         );
  8382.                         
  8383.         return $this->render('admin/my_invoices.html.twig', [
  8384.            'toutesLesValiditeServices' => $toutesLesValiditeServices,
  8385.            'boutique' => $boutique,
  8386.            'userBoutique' => $userBoutique
  8387.         ]);
  8388.     }
  8389.     
  8390.     /**
  8391.      * @Route("/{slug}/my-tickets/{id}", name="admin.my_tickets")
  8392.      * @return \Symfony\Component\HttpFoundation\Response
  8393.      */
  8394.     public function myTicketsAction(Request $request, $slug, $id)
  8395.     {
  8396.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8397.            return $this->redirectToRoute('security_login');
  8398.         }
  8399.         $em = $this->getDoctrine()
  8400.                     ->getManager();
  8401.                     
  8402.         $boutique = $em->getRepository(Boutique::class)
  8403.                         ->findOneBySlug($slug);
  8404.         $user = $this->getUser();
  8405.         $userBoutique = $em->getRepository(UserBoutique::class)
  8406.                         ->findOneBy(
  8407.                             array(
  8408.                             'user' => $user->getId(),
  8409.                             'boutique' => $boutique->getId()
  8410.                             )
  8411.                         );
  8412.         
  8413.         $tickets = $em->getRepository(Ticket::class)
  8414.                         ->findBy(
  8415.                             array(
  8416.                                 'boutique'=>$boutique->getId(),
  8417.                                 'user' => $user->getId()
  8418.                             )
  8419.                         );
  8420.         
  8421.         return $this->render('admin/my_tickets.html.twig', [
  8422.            'boutique' => $boutique,
  8423.            'tickets'  => $tickets,
  8424.            'userBoutique' => $userBoutique
  8425.         ]);
  8426.     }
  8427.     
  8428.     /**
  8429.      * @Route("/{slug}/new-ticket", name="admin.new_ticket")
  8430.      * @return \Symfony\Component\HttpFoundation\Response
  8431.      */
  8432.     public function newTicketAction(Request $request, $slug)
  8433.     {
  8434.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8435.            return $this->redirectToRoute('security_login');
  8436.         }
  8437.         $em = $this->getDoctrine()
  8438.                     ->getManager();
  8439.                     
  8440.         $boutique = $em->getRepository(Boutique::class)
  8441.                         ->findOneBySlug($slug);
  8442.         $user = $this->getUser();
  8443.         
  8444.         $ticket = new Ticket;
  8445.         
  8446.         $user = $this->getUser();
  8447.         $userBoutique = $em->getRepository(UserBoutique::class)
  8448.                         ->findOneBy(
  8449.                             array(
  8450.                             'user' => $user->getId(),
  8451.                             'boutique' => $boutique->getId()
  8452.                             )
  8453.                         );
  8454.         $form = $this->createForm(TicketType::class, $ticket);
  8455.         
  8456.         $ok_soumission = '';
  8457.         $error = '';
  8458.         
  8459.         if($request->getMethod() == 'POST'){
  8460.             
  8461.                $form->handleRequest($request);
  8462.                if($form->isValid()){
  8463.                    $ticket->setBoutique($boutique);
  8464.                    $ticket->setUser($user);
  8465.                    
  8466.                   $em->persist($ticket);
  8467.                   $em->flush();
  8468.                   
  8469.                 return $this->redirectToRoute('admin.display_ticket', array('slug' => $boutique->getSlug(), 'id' => $ticket->getId()));
  8470.                 $ok_soumission =" Votre message a été pris en compte";
  8471.                     
  8472.                 $ticket = new Ticket;
  8473.                 
  8474.                 $form = $this->createForm(TicketType::class, $ticket);
  8475.                     
  8476.                 } else {
  8477.                     $error =" Veillez corrigez vos erreurs";
  8478.                 }
  8479.         }
  8480.         
  8481.         return $this->render('admin/new_ticket.html.twig', [
  8482.            'boutique' => $boutique,
  8483.            'form' => $form->createView(),
  8484.            'userBoutique' => $userBoutique
  8485.         ]);
  8486.     }
  8487.     
  8488.     /**
  8489.      * @Route("/{slug}/display-ticket/{id}", name="admin.display_ticket")
  8490.      * @return \Symfony\Component\HttpFoundation\Response
  8491.      */
  8492.     public function displayTicketAction(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.         $user = $this->getUser();
  8503.         $userBoutique = $em->getRepository(UserBoutique::class)
  8504.                         ->findOneBy(
  8505.                             array(
  8506.                             'user' => $user->getId(),
  8507.                             'boutique' => $boutique->getId()
  8508.                             )
  8509.                         );
  8510.         
  8511.         $ticket = $em->getRepository(Ticket::class)
  8512.                     ->findOneBy(
  8513.                         array(
  8514.                             'boutique' => $boutique->getId(),
  8515.                             'id' => $id
  8516.                         )
  8517.                     );
  8518.         $commentaires = $em->getRepository(CommentaireTicket::class)
  8519.                             ->findByTicket($ticket->getId());
  8520.         $commentaireTicket = new CommentaireTicket;
  8521.         
  8522.         $user = $this->getUser();
  8523.         $form = $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  8524.         
  8525.         $ok_soumission = '';
  8526.         $error = '';
  8527.         
  8528.         if($request->getMethod() == 'POST'){
  8529.             
  8530.                $form->handleRequest($request);
  8531.                if($form->isValid()){
  8532.                    
  8533.                    $commentaireTicket->setTicket($ticket);
  8534.                    $commentaireTicket->setUser($user);
  8535.                    
  8536.                   $em->persist($commentaireTicket);
  8537.                   $em->flush();
  8538.                 
  8539.                 $commentaires = $em->getRepository(CommentaireTicket::class)
  8540.                             ->findByTicket($ticket->getId());
  8541.                 $ok_soumission =" Votre message a été pris en compte";
  8542.                     
  8543.                 $commentaireTicket = new CommentaireTicket;
  8544.                 
  8545.                 $form = $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  8546.                     
  8547.                 } else {
  8548.                     $error =" Veillez corrigez vos erreurs";
  8549.                 }
  8550.         }
  8551.         
  8552.         return $this->render('admin/display_ticket.html.twig', [
  8553.            'boutique' => $boutique,
  8554.            'ticket' => $ticket,
  8555.            'form' => $form->createView(),
  8556.            'commentaires' => $commentaires,
  8557.            'userBoutique' => $userBoutique
  8558.         ]);
  8559.     }
  8560.     
  8561.     /**
  8562.      * @Route("/{slug}/close-ticket/{id}", name="admin.close_ticket")
  8563.      * @return \Symfony\Component\HttpFoundation\Response
  8564.      */
  8565.     public function closeTicketAction(Request $request, $slug, $id)
  8566.     {
  8567.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8568.            return $this->redirectToRoute('security_login');
  8569.         }
  8570.         $em = $this->getDoctrine()
  8571.                     ->getManager();
  8572.                     
  8573.         $boutique = $em->getRepository(Boutique::class)
  8574.                         ->findOneBySlug($slug);
  8575.         
  8576.         $ticket = $em->getRepository(Ticket::class)
  8577.                     ->findOneBy(
  8578.                         array(
  8579.                             'boutique' => $boutique->getId(),
  8580.                             'id' => $id
  8581.                         )
  8582.                     );
  8583.         
  8584.         if(null !== $ticket){
  8585.             $ticket->setLesCommentairesSontFermes(true);
  8586.             $em->flush();
  8587.         }
  8588.         
  8589.         return $this->redirectToRoute('admin.display_ticket',array('slug'=>$boutique->getSlug(), 'id'=>$ticket->getId()));
  8590.     }
  8591.     
  8592.     
  8593.     /**
  8594.      * @Route("/{slug}/delete-ticket/{id}", name="admin.delete_ticket")
  8595.      * @return \Symfony\Component\HttpFoundation\Response
  8596.      */
  8597.     public function deleteTicketAction(Request $request, $slug, $id)
  8598.     {
  8599.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8600.            return $this->redirectToRoute('security_login');
  8601.         }
  8602.         $em = $this->getDoctrine()
  8603.                     ->getManager();
  8604.                     
  8605.         $boutique = $em->getRepository(Boutique::class)
  8606.                         ->findOneBySlug($slug);
  8607.         $user = $this->getUser();
  8608.         
  8609.         
  8610.         $ok_soumission = '';
  8611.         $error = '';
  8612.         
  8613.         $ticket = $em->getRepository(Ticket::class)
  8614.                     ->findOneBy(
  8615.                         array(
  8616.                             'boutique' => $boutique->getId(),
  8617.                             'id' => $id
  8618.                         )
  8619.                     );
  8620.         if(null !== $ticket){
  8621.             $commentaireTickets = $em->getRepository(CommentaireTicket::class)
  8622.                                     ->findByTicket($ticket->getId());
  8623.             foreach($commentaireTickets as $commentaireTicket)
  8624.             {
  8625.                 $em->remove($commentaireTicket);
  8626.             }
  8627.             $em->remove($ticket);
  8628.             $em->flush();
  8629.         }
  8630.         
  8631.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  8632.     }
  8633.     
  8634.     
  8635.     /**
  8636.      * @Route("/{slug}/delete-commentaire-ticket/{id}", name="admin.delete_commentaire_ticket")
  8637.      * @return \Symfony\Component\HttpFoundation\Response
  8638.      */
  8639.     public function deleteCommentaireTicketAction(Request $request, $slug, $id)
  8640.     {
  8641.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8642.            return $this->redirectToRoute('security_login');
  8643.         }
  8644.         $em = $this->getDoctrine()
  8645.                     ->getManager();
  8646.                     
  8647.         $boutique = $em->getRepository(Boutique::class)
  8648.                         ->findOneBySlug($slug);
  8649.         $user = $this->getUser();
  8650.     
  8651.         $commentaireTicket = $em->getRepository(CommentaireTicket::class)
  8652.                     ->findOneById($id);
  8653.                     
  8654.         if(null !== $commentaireTicket){
  8655.             
  8656.             $em->remove($commentaireTicket);
  8657.             $em->flush();
  8658.         }
  8659.         
  8660.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  8661.     }
  8662.     
  8663.     /**
  8664.      * @Route("/{slug}/liste-produit-lors-commande", name="admin.liste_produit_lors_commande")
  8665.      * @return \Symfony\Component\HttpFoundation\Response
  8666.      */
  8667.     public function listeProduitLorsCommandeAction(Request $request, Boutique $boutique)
  8668.     {
  8669.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8670.            return $this->redirectToRoute('security_login');
  8671.         }
  8672.         
  8673.         $em = $this->getDoctrine()
  8674.                     ->getManager();
  8675.                     
  8676.         $produits = $em->getRepository(Produit::class)
  8677.                         ->findBy(
  8678.                             array(
  8679.                                 'boutique' => $boutique->getId(),
  8680.                                 'estSupprime' => false
  8681.                             )    
  8682.                         );
  8683.         $user = $this->getUser();
  8684.         $userBoutique = $em->getRepository(UserBoutique::class)
  8685.                         ->findOneBy(
  8686.                             array(
  8687.                             'user' => $user->getId(),
  8688.                             'boutique' => $boutique->getId()
  8689.                             )
  8690.                         );
  8691.         
  8692.         
  8693.         return $this->render('admin/liste_produit_lors_commande.html.twig', [
  8694.            'boutique' => $boutique,
  8695.            'produits' => $produits,
  8696.            'userBoutique' => $userBoutique
  8697.         ]);
  8698.     }
  8699.     /**
  8700.      * @Route("/{slug}/recreerStock", name="admin_recreer_stock")
  8701.      * @return \Symfony\Component\HttpFoundation\Response
  8702.      */
  8703.     public function recreerStockAction(Request $request, Boutique $boutique)
  8704.     {
  8705.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8706.            return $this->redirectToRoute('security_login');
  8707.         }
  8708.         $em = $this->getDoctrine()
  8709.                     ->getManager();
  8710.         $user = $this->getUser();
  8711.         
  8712.     
  8713.         $boutiques  = $em->getRepository(Boutique::class)
  8714.                         ->findAll();
  8715.         
  8716.         foreach($boutiques as $b){
  8717.             $produits = $em->getRepository(Produit::class)
  8718.                             ->findBy(
  8719.                                 array(
  8720.                                 'boutique' => $b->getId(),
  8721.                                 'gereLeStock' => true
  8722.                                 )
  8723.                             );
  8724.             $magasins =  $em->getRepository(Magasin::class)
  8725.                             ->findBy(
  8726.                                 array(
  8727.                                 'boutique' => $b->getId()
  8728.                                 )
  8729.                             );
  8730.             foreach($produits as $produit){
  8731.                 foreach($magasins as $magasin){
  8732.                     $stock = new Stock;
  8733.                     $stock->setBoutique($b);
  8734.                     $stock->SetProduit($produit);
  8735.                     $stock->setMagasin($magasin);
  8736.                     $stock->setStockDisponible((float)$produit->getStockDisponible());
  8737.                     $stock->setStockMinimum((float)$produit->getStockMinimum());
  8738.                     $stock->setStockDeSecurite((float)$produit->getStockDeSecurite());
  8739.                     $stock->setStockDAlerte((float)$produit->getStockDAlerte());
  8740.                     $stock->setStockOutil((float)$produit->getStockOutil());
  8741.                     $stock->setStockMaximum((float)$produit->getStockMaximum());
  8742.                     $stock->setCoutDeStockage((float)$produit->getCoutDeStockage());
  8743.                     $em->persist($stock);
  8744.                     
  8745.                 }
  8746.             }
  8747.         }
  8748.         $em->flush();
  8749.         $userBoutique = $em->getRepository(UserBoutique::class)
  8750.                         ->findOneBy(
  8751.                             array(
  8752.                             'user' => $user->getId(),
  8753.                             'boutique' => $boutique->getId()
  8754.                             )
  8755.                         );
  8756.          return $this->render('admin/admin_recreer_stock.html.twig', [
  8757.             'boutique' => $boutique,
  8758.             'userBoutique' => $userBoutique,
  8759.         ]);
  8760.     }
  8761.     /**
  8762.      * @Route("/{slug}/magasins", name="admin_magasins")
  8763.      * @return \Symfony\Component\HttpFoundation\Response
  8764.      */
  8765.     public function magasinsAction(Request $request, Boutique $boutique)
  8766.     {
  8767.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8768.            return $this->redirectToRoute('security_login');
  8769.         }
  8770.         $em = $this->getDoctrine()
  8771.                     ->getManager();
  8772.         $user = $this->getUser();
  8773.         
  8774.     
  8775.         $magasins  = $em->getRepository(Magasin::class)
  8776.                         ->findBy(
  8777.                             array(
  8778.                                 'boutique' => $boutique->getId(),
  8779.                                 'estSupprime' => false
  8780.                             )    
  8781.                         );
  8782.         $userBoutique = $em->getRepository(UserBoutique::class)
  8783.                         ->findOneBy(
  8784.                             array(
  8785.                             'user' => $user->getId(),
  8786.                             'boutique' => $boutique->getId()
  8787.                             )
  8788.                         );
  8789.          return $this->render('admin/magasins.html.twig', [
  8790.             'boutique' => $boutique,
  8791.             'userBoutique' => $userBoutique,
  8792.             'magasins' => $magasins
  8793.         ]);
  8794.     }
  8795.     /**
  8796.      * @Route("/{slug}/nouveau-magasin", name="admin_nouveau_magasin")
  8797.      * @return \Symfony\Component\HttpFoundation\Response
  8798.      */
  8799.     public function nouveauMagasinAction(Request $request, Boutique $boutique)
  8800.     {
  8801.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8802.            return $this->redirectToRoute('security_login');
  8803.         }
  8804.         $em = $this->getDoctrine()
  8805.                     ->getManager();
  8806.         
  8807.         $magasin = new Magasin;
  8808.         $form = $this->createForm(MagasinType::class, $magasin);
  8809.         
  8810.         $user = $this->getUser();
  8811.         $userBoutique = $em->getRepository(UserBoutique::class)
  8812.                         ->findOneBy(
  8813.                             array(
  8814.                             'user' => $user->getId(),
  8815.                             'boutique' => $boutique->getId()
  8816.                             )
  8817.                         );
  8818.         
  8819.         $ok_soumission = '';
  8820.         $error = '';
  8821.         
  8822.         if($request->getMethod() == 'POST'){
  8823.             
  8824.                $form->handleRequest($request);
  8825.                if($form->isSubmitted() && $form->isValid()){
  8826.                    $magasin->setBoutique($boutique);
  8827.                    $magasin->setCreePar($user);
  8828.                     $em->persist($magasin);
  8829.                   $em->flush();
  8830.                 
  8831.                 $ok_soumission ="Enregistrement effectué";
  8832.                 $magasin = new Magasin;
  8833.                 
  8834.                 $form = $this->createForm(MagasinType::class, $magasin);
  8835.                     
  8836.                 } else {
  8837.                     $error =" Veillez corrigez vos erreurs";
  8838.                 }
  8839.         }
  8840.         return $this->render('admin/nouveau_magasin.html.twig', [
  8841.            'boutique' => $boutique,
  8842.            'form' => $form->createView(),
  8843.            'userBoutique' => $userBoutique,
  8844.            'ok_soumission' => $ok_soumission,
  8845.            'error' => $error
  8846.         ]);
  8847.     }
  8848.     /**
  8849.      * @Route("/{slug}/modifier-magasin/{magasin}", name="admin_modifier_magasin")
  8850.      * @return \Symfony\Component\HttpFoundation\Response
  8851.      */
  8852.     public function modifierMagasinAction(Request $request, Boutique $boutique, $magasin)
  8853.     {
  8854.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8855.            return $this->redirectToRoute('security_login');
  8856.         }
  8857.         $em = $this->getDoctrine()
  8858.                     ->getManager();
  8859.                     
  8860.         $user = $this->getUser();
  8861.         $userBoutique = $em->getRepository(UserBoutique::class)
  8862.                         ->findOneBy(
  8863.                             array(
  8864.                             'user' => $user->getId(),
  8865.                             'boutique' => $boutique->getId()
  8866.                             )
  8867.                         );
  8868.         $magasin = $em->getRepository(Magasin::class)
  8869.                     ->findOneById($magasin);
  8870.         $form = $this->createForm(MagasinEditType::class, $magasin);
  8871.         
  8872.         $ok_soumission = '';
  8873.         $error = '';
  8874.         
  8875.         if($request->getMethod() == 'POST'){
  8876.             
  8877.                $form->handleRequest($request);
  8878.                if($form->isValid()){
  8879.                     $magasin->setModifiePar($user);
  8880.                     $em->flush();
  8881.         
  8882.                 $ok_soumission =" Votre message a été pris en compte";
  8883.                     
  8884.                 } else {
  8885.                     $error =" Veillez corrigez vos erreurs";
  8886.                 }
  8887.         }
  8888.         return $this->render('admin/modifier_magasin.html.twig', [
  8889.            'boutique' => $boutique,
  8890.            'form' => $form->createView(),
  8891.            'userBoutique' => $userBoutique,
  8892.            'magasin' => $magasin
  8893.         ]);
  8894.     }
  8895.     
  8896.     /**
  8897.      * @Route("/{slug}/supprimer-magasin/{magasin}", name="admin_supprimer_magasin")
  8898.      * @return \Symfony\Component\HttpFoundation\Response
  8899.      */
  8900.     public function supprimerMagasinAction(Request $request, Boutique $boutique, $magasin)
  8901.     {
  8902.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8903.            return $this->redirectToRoute('security_login');
  8904.         }
  8905.         $em = $this->getDoctrine()
  8906.                     ->getManager();
  8907.         $user = $this->getUser();
  8908.         $magasin = $em->getRepository(Magasin::class)
  8909.                     ->findOneById($magasin);
  8910.                     
  8911.         if(null != $magasin){
  8912.             $magasin->setEstSupprime(true);
  8913.             $magasin->setSupprimePar($user);
  8914.             $em->flush();
  8915.         }
  8916.         
  8917.         return $this->redirectToRoute('admin_magasins', array('slug' => $boutique->getSlug()));
  8918.     }
  8919.     
  8920.     /**
  8921.      * @Route("/{slug}/stock-management", name="admin.stock_management")
  8922.      * @return \Symfony\Component\HttpFoundation\Response
  8923.      */
  8924.     public function stockManagementAction(Request $request, Boutique $boutique)
  8925.     {
  8926.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8927.            return $this->redirectToRoute('security_login');
  8928.         }
  8929.         $em = $this->getDoctrine()
  8930.                     ->getManager();
  8931.                     
  8932.         $produits = $em->getRepository(Produit::class)
  8933.                         ->findByBoutique($boutique->getId());
  8934.         $magasins = $em->getRepository(Magasin::class)
  8935.                         ->findBy(
  8936.                             array(
  8937.                                 'boutique' => $boutique->getId(),
  8938.                                 'estSupprime' => false
  8939.                             )
  8940.                         );
  8941.         $magasinPrincipal = '';
  8942.         $mouvementDeStockProduits = array();
  8943.         foreach($magasins as $magasin){
  8944.             if($magasin->isPrincipal())
  8945.                 {
  8946.                     $magasinPrincipal = $magasin;
  8947.                 }
  8948.         }
  8949.         
  8950.         $stocks = $em->getRepository(Stock::class)
  8951.                     ->findBy(
  8952.                             array(
  8953.                                 'magasin'  => $magasinPrincipal->getId(),
  8954.                                 'boutique' => $boutique->getId()
  8955.                             )
  8956.                     );
  8957.         $user = $this->getUser();
  8958.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  8959.         
  8960.         
  8961.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  8962.         $startMonth = $intervalleMois['debut'];
  8963.         $endMonth = $intervalleMois['fin'];
  8964.         
  8965.         $dateDebut = new \DateTime($startMonth);
  8966.         $dateFin = new \DateTime($endMonth);
  8967.         $startYear = date('Y-01-01');
  8968.         $endYear = date('Y-12-31');
  8969.         $user = $this->getUser();
  8970.         
  8971.         $userBoutique = $em->getRepository(UserBoutique::class)
  8972.                         ->findOneBy(
  8973.                             array(
  8974.                             'user' => $user->getId(),
  8975.                             'boutique' => $boutique->getId()
  8976.                             )
  8977.                         );
  8978.         
  8979.         $stockEntries  = $em->getRepository(EntreeDeStock::class)
  8980.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut, $dateFin);
  8981.         $mouvementDeStockProduits  = $em->getRepository(mouvementDeStockProduit::class)
  8982.                                         ->mouvementDeStockProduitsParDate($boutique->getId(), $magasinPrincipal->getId(),
  8983.                                         $dateDebut, $dateFin);
  8984.         $produitVendus  = $em->getRepository(ProduitCommande::class)
  8985.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice', $dateDebut, $dateFin);
  8986.         if('POST' == $request->getMethod()){
  8987.             $dateDebut = $_POST['dateDebut'];
  8988.             $dateFin = $_POST['dateFin'];
  8989.             
  8990.             $dateDebut = new \DateTime($dateDebut);
  8991.             $dateFin = new \DateTime($dateFin);
  8992.             
  8993.             $stockEntries  = $em->getRepository(EntreeDeStock::class)
  8994.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut, $dateFin);
  8995.             
  8996.             return $this->render('admin/entries_table_content.html.twig', [
  8997.                'boutique' => $boutique,
  8998.                'stockEntries' => $stockEntries,
  8999.                'userBoutique' => $userBoutique
  9000.             ]);
  9001.             
  9002.         }
  9003.         
  9004.         return $this->render('admin/stock_management.html.twig', [
  9005.            'boutique' => $boutique,
  9006.            'produits' => $produits,
  9007.            'userBoutique' => $userBoutique,
  9008.            'dateDebut' => $dateDebut,
  9009.            'dateFin' => $dateFin,
  9010.            'startMonth' => $startMonth,
  9011.            'endMonth' => $endMonth,
  9012.            'startYear' => $startYear,
  9013.            'endYear' => $endYear,
  9014.            'stockEntries' => $stockEntries,
  9015.            'produitVendus' => $produitVendus,
  9016.            'mouvementDeStockProduits' => $mouvementDeStockProduits,
  9017.            'magasins' => $magasins,
  9018.            'stocks' => $stocks
  9019.         ]);
  9020.     }
  9021.         /**
  9022.      * @Route("/{slug}/imprimer-mouvement-de-stock/{magasin}/{dateDebut}/{dateFin}", name="admin_imprimer_mouvement_de_stock")
  9023.      * @return \Symfony\Component\HttpFoundation\Response
  9024.      */
  9025.     public function imprimerMouvementDeStockAction( Request $request, $slug, $magasin = 0, $dateDebut = '', $dateFin = '')
  9026.     {
  9027.         
  9028.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9029.            return $this->redirectToRoute('security_login');
  9030.         }
  9031.         
  9032.         $em = $this->getDoctrine()
  9033.                     ->getManager();
  9034.                         
  9035.         $boutique = $em->getRepository(Boutique::class)
  9036.                         ->findOneBySlug($slug);
  9037.         
  9038.         
  9039.         $user = $this->getUser();
  9040.         $userBoutique = $em->getRepository(UserBoutique::class)
  9041.                         ->findOneBy(
  9042.                             array(
  9043.                             'user' => $user->getId(),
  9044.                             'boutique' => $boutique->getId()
  9045.                             )
  9046.                         );
  9047.         
  9048.         $dateDebut = new \DateTime($dateDebut);
  9049.         $dateDebut->setTime(0, 0);
  9050.         $dateFin = new \DateTime($dateFin);
  9051.         $dateFin->setTime(23, 59);
  9052.         $magasin = $em->getRepository(Magasin::class)
  9053.                         ->findOneById($magasin);
  9054.         $mouvementDeStockProduits  = $em->getRepository(mouvementDeStockProduit::class)
  9055.                                         ->mouvementDeStockProduitsParDate($boutique->getId(), $magasin->getId(),
  9056.                                         $dateDebut, $dateFin);
  9057.         $pdf = new Html2Pdf('P', 'A4', 'fr');
  9058.         
  9059.         $content = $this->renderView('pdf/mouvement_de_stock.html.twig', [
  9060.                         'boutique' => $boutique,
  9061.                         'dateDebut' => $dateDebut,
  9062.                         'dateFin' => $dateFin,
  9063.                         'userBoutique' => $userBoutique,
  9064.                         'magasin' => $magasin,
  9065.                         'mouvementDeStockProduits' => $mouvementDeStockProduits
  9066.                     ]);
  9067.         
  9068.         
  9069.         $pdf->writeHTML($content);
  9070.         $name = time().$boutique->getId().rand(1, 10000).'.pdf';
  9071.         $photo = new Photo;
  9072.         $lienPhysique = $photo->getUploadRootDir().$name;
  9073.                 
  9074.         $pdf->output($lienPhysique, 'I');
  9075.         return $this->render('pdf/mouvement_de_stock.html.twig', [
  9076.            'boutique' => $boutique,
  9077.            'dateDebut' => $dateDebut,
  9078.            'dateFin' => $dateFin,
  9079.            'userBoutique' => $userBoutique,
  9080.            'magasin' => $magasin,
  9081.            'mouvementDeStockProduits' => $mouvementDeStockProduits
  9082.         ]);
  9083.     }
  9084.     
  9085.     /**
  9086.      * @Route("/{slug}/nouvel-inventaire", name="admin_nouvel_inventaire")
  9087.      * @return \Symfony\Component\HttpFoundation\Response
  9088.      */
  9089.     public function nouvelInventaireAction(Request $request, Boutique $boutique)
  9090.     {
  9091.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9092.            return $this->redirectToRoute('security_login');
  9093.         }
  9094.         $em = $this->getDoctrine()
  9095.                     ->getManager();
  9096.                     
  9097.         $produits = $em->getRepository(Produit::class)
  9098.                         ->findByBoutique($boutique->getId());
  9099.         $user = $this->getUser();
  9100.         $intervalleDeDate  = $this->intervalleSemaine(date('Y-m-d'));
  9101.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  9102.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  9103.         
  9104.         $intervalleMois = $this->intervalleMois(date('Y-m-d'));
  9105.         $startMonth = $intervalleMois['debut'];
  9106.         $endMonth = $intervalleMois['fin'];
  9107.         
  9108.         $startYear = date('Y-01-01');
  9109.         $endYear = date('Y-12-31');
  9110.         $user = $this->getUser();
  9111.         
  9112.         $userBoutique = $em->getRepository(UserBoutique::class)
  9113.                         ->findOneBy(
  9114.                             array(
  9115.                             'user' => $user->getId(),
  9116.                             'boutique' => $boutique->getId()
  9117.                             )
  9118.                         );
  9119.         
  9120.         $stockEntries  = $em->getRepository(EntreeDeStock::class)
  9121.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut, $dateFin);
  9122.         $produits = $em->getRepository(Produit::class)
  9123.                         ->findBy(
  9124.                             array(
  9125.                                 'boutique' => $boutique->getId() 
  9126.                             ),
  9127.                             array(
  9128.                                 'nom' => 'ASC'
  9129.                             )
  9130.                         );
  9131.         if('POST' == $request->getMethod()){
  9132.             $dateDebut = $_POST['dateDebut'];
  9133.             $dateFin = $_POST['dateFin'];
  9134.             
  9135.             $dateDebut = new \DateTime($dateDebut);
  9136.             $dateFin = new \DateTime($dateFin);
  9137.             
  9138.             $stockEntries  = $em->getRepository(EntreeDeStock::class)
  9139.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut, $dateFin);
  9140.             
  9141.             return $this->render('admin/entries_table_content.html.twig', [
  9142.                'boutique' => $boutique,
  9143.                'stockEntries' => $stockEntries
  9144.             ]);
  9145.             
  9146.         }
  9147.         
  9148.         return $this->render('admin/nouvel_inventaire.html.twig', [
  9149.            'boutique' => $boutique,
  9150.            'produits' => $produits,
  9151.            'userBoutique' => $userBoutique,
  9152.            'dateDebut' => $dateDebut,
  9153.            'dateFin' => $dateFin,
  9154.            'startMonth' => $startMonth,
  9155.            'endMonth' => $endMonth,
  9156.            'startYear' => $startYear,
  9157.            'endYear' => $endYear,
  9158.            'stockEntries' => $stockEntries,
  9159.            'produits' => $produits
  9160.         ]);
  9161.     }
  9162.     /**
  9163.      * @Route("/{slug}/payer-entree-de-stock/{id}", name="admin_payer_entree_de_stock")
  9164.      * @return \Symfony\Component\HttpFoundation\Response
  9165.      */
  9166.     public function payerEntreeDeSTockAction(Request $request,  $slug, $id)
  9167.     {
  9168.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9169.            return $this->redirectToRoute('security_login');
  9170.         }
  9171.         $em = $this->getDoctrine()
  9172.                     ->getManager();
  9173.         $entreeDeStock = $em->getRepository(EntreeDeStock::class)
  9174.                                 ->findOneById($id);    
  9175.                                 
  9176.         $boutique = $em->getRepository(Boutique::class)
  9177.                                 ->findOneBySlug($slug);    
  9178.         
  9179.                     
  9180.         $user = $this->getUser();
  9181.         $userBoutique = $em->getRepository(UserBoutique::class)
  9182.                         ->findOneBy(
  9183.                             array(
  9184.                             'user' => $user->getId(),
  9185.                             'boutique' => $boutique->getId()
  9186.                             )
  9187.                         );
  9188.         
  9189.         if($request->getMethod() == 'POST'){
  9190.             
  9191.             $montant = (float)$_POST['montant'];
  9192.             $moyenDePaiement = $_POST['moyenDePaiement'];
  9193.             
  9194.             
  9195.             $depense = new Expensive;
  9196.             $depense->setBoutique($boutique);
  9197.             $depense->setMontant($montant);
  9198.             $categorieDepense = $em->getRepository(CategorieDepense::class)
  9199.                                 ->findOneBy(
  9200.                                     array(
  9201.                                         'boutique' => $boutique,
  9202.                                         'nom' => 'ACHAT DE MARCHANDISES'
  9203.                                     )
  9204.                                 );
  9205.             
  9206.             $depense->setCategorieDepense($categorieDepense);
  9207.         
  9208.             $em->persist($depense);
  9209.             $entreeDeStock->setResteAPayer($entreeDeStock->getResteAPayer() - $montant);
  9210.             $entreeDeStock->setMontantPaye($entreeDeStock->getMontantPaye() + $montant);
  9211.             $em->flush();
  9212.             
  9213.         }
  9214.     
  9215.         return $this->render('admin/payer_entree_de_stock.html.twig', [
  9216.            'boutique' => $boutique,
  9217.            'userBoutique' => $userBoutique,
  9218.            
  9219.            'entreeDeStock' => $entreeDeStock
  9220.         ]);
  9221.     }
  9222.     /**
  9223.      * @Route("/{slug}/new-stock-entry", name="admin.new_stock_entry")
  9224.      * @return \Symfony\Component\HttpFoundation\Response
  9225.      */
  9226.     public function newStockEntryAction(Request $request, Boutique $boutique)
  9227.     {
  9228.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9229.            return $this->redirectToRoute('security_login');
  9230.         }
  9231.         $em = $this->getDoctrine()
  9232.                     ->getManager();
  9233.         $tiers = $em->getRepository(Tiers::class)
  9234.                                 ->findByBoutique($boutique);        
  9235.         
  9236.         $magasins = $em->getRepository(Magasin::class)
  9237.                                 ->findBy(
  9238.                                     array(
  9239.                                         'boutique' => $boutique->getId(),
  9240.                                         'estSupprime' => false
  9241.                                     )    
  9242.                                 );        
  9243.         
  9244.                     
  9245.         $produits = $em->getRepository(Produit::class)
  9246.                         ->findByBoutique($boutique->getId());
  9247.         $user = $this->getUser();
  9248.         $userBoutique = $em->getRepository(UserBoutique::class)
  9249.                         ->findOneBy(
  9250.                             array(
  9251.                             'user' => $user->getId(),
  9252.                             'boutique' => $boutique->getId()
  9253.                             )
  9254.                         );
  9255.         $editMode= 'new';
  9256.         
  9257.         if($request->getMethod() == 'POST'){
  9258.             
  9259.             $dateCommande = $_POST['dateCommande'];
  9260.             $magasin = $_POST['magasin'];
  9261.             $magasin = $em->getRepository(Magasin::class)
  9262.                             ->findOneById($magasin);
  9263.             $tiers = $_POST['tiers'];
  9264.             
  9265.             $tiers = $em->getRepository(Tiers::class)
  9266.                         ->findOneById($tiers);
  9267.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  9268.             $autreFrais =  (float)$_POST['autreFrais'];
  9269.             $listeProduits = json_decode($_POST['listeProduits']);
  9270.             
  9271.             $entreeDeStock = new EntreeDeStock;
  9272.             $entreeDeStock->setBoutique($boutique);
  9273.         
  9274.             $laDate = new \DateTime($dateCommande);
  9275.             $entreeDeStock->setLaDate($laDate);
  9276.         
  9277.             $em->persist($entreeDeStock);
  9278.             $mouvementDeStock = new MouvementDeStock;
  9279.             $mouvementDeStock->setBoutique($boutique);
  9280.             $mouvementDeStock->setMagasin($magasin);
  9281.             $mouvementDeStock->setTypeMouvement(MouvementDeStock::TYPE_MOUVEMENT_ENTREE);
  9282.             $em->persist($mouvementDeStock);
  9283.             $em->flush();
  9284.             $produitCommandes = array();
  9285.             $sousTotal = 0;
  9286.             foreach($listeProduits as $listeProduit){
  9287.                 $listeProduit = (array)$listeProduit;
  9288.                 $idDuProduit = $listeProduit['idProduit'];
  9289.                 
  9290.                 $leProduit = $em->getRepository(Produit::class)
  9291.                         ->findOneById($idDuProduit);
  9292.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  9293.                 
  9294.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  9295.                 $produitEntreeDeStock->setProduit($leProduit);
  9296.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  9297.                 $produitEntreeDeStock->setQuantite((float)$listeProduit['quantite']);
  9298.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  9299.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  9300.                 
  9301.                 $sousTotal += (float)$listeProduit['sousTotal'];
  9302.                 $em->persist($produitEntreeDeStock);
  9303.                 $mouvementDeStockProduit = new MouvementDeStockProduit;
  9304.                 $mouvementDeStockProduit->setBoutique($boutique);
  9305.                 $mouvementDeStockProduit->setProduit($leProduit);
  9306.                 $mouvementDeStockProduit->setMouvementDeStock($mouvementDeStock);
  9307.                 $mouvementDeStockProduit->setPrix((float)$listeProduit['prixDAchat']);
  9308.                 $mouvementDeStockProduit->setQuantite((float)$listeProduit['quantite']);
  9309.                 $em->persist($mouvementDeStockProduit);
  9310.                 $stock = $em->getRepository(Stock::class)
  9311.                             ->findOneBy(
  9312.                                 array(
  9313.                                     'boutique' => $boutique->getId(),
  9314.                                     'magasin' => $magasin->getId(),
  9315.                                     'produit' => $leProduit->getId()
  9316.                                 )
  9317.                             );
  9318.                 if($stock !== null){
  9319.                     $stock->setStockDisponible($stock->getStockDisponible() + (float)$listeProduit['quantite']);
  9320.                 }
  9321.             }
  9322.             $mouvementDeStock->setTotalAchat($sousTotal);
  9323.             $mouvementDeStock->setFraisDeTransport($fraisDeTransport);
  9324.             $mouvementDeStock->setAutreFrais($autreFrais);
  9325.             $mouvementDeStock->setNetPaye($autreFrais + $sousTotal);
  9326.             $mouvementDeStock->setResteAPayer($sousTotal + $autreFrais);
  9327.             $mouvementDeStock->setTiers($tiers);
  9328.             
  9329.             $em->flush();
  9330.         }
  9331.     
  9332.         return $this->render('admin/new_stock_entry.html.twig', [
  9333.            'boutique' => $boutique,
  9334.            'produits' => $produits,
  9335.            'userBoutique' => $userBoutique,
  9336.            'editMode' => $editMode,
  9337.            'tiers' => $tiers,
  9338.            'magasins' => $magasins
  9339.         ]);
  9340.     }
  9341.     
  9342.     /**
  9343.      * @Route("/{slug}/edit-stock-entry/{id}", name="admin.edit_stock_entry")
  9344.      * @return \Symfony\Component\HttpFoundation\Response
  9345.      */
  9346.     public function editStockEntryAction(Request $request, $slug, $id)
  9347.     {
  9348.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9349.            return $this->redirectToRoute('security_login');
  9350.         }      
  9351.         $em = $this->getDoctrine()
  9352.                     ->getManager();
  9353.         $boutique  = $em->getRepository(Boutique::class)
  9354.                         ->findOneBySlug($slug);
  9355.         $tiers = $em->getRepository(Tiers::class)
  9356.                     ->findByBoutique($boutique);
  9357.     
  9358.         $produits  = $em->getRepository(Produit::class)
  9359.                         ->findByBoutique($boutique->getId());
  9360.     
  9361.         $entreeDeStock  = $em->getRepository(EntreeDeStock::class)
  9362.                         ->findOneBy(
  9363.                             array(
  9364.                                 'boutique' => $boutique->getId(),
  9365.                                 'id' => $id
  9366.                         ));
  9367.         
  9368.         $ancienProduitEntreeDeStocks  = $em->getRepository(ProduitEntreeDeStock::class)
  9369.                         ->findBy(
  9370.                             array(
  9371.                                 'entreeDeStock' => $entreeDeStock->getId()
  9372.                         ));
  9373.                         
  9374.         $user = $this->getUser();
  9375.         $userBoutique = $em->getRepository(UserBoutique::class)
  9376.                         ->findOneBy(
  9377.                             array(
  9378.                             'user' => $user->getId(),
  9379.                             'boutique' => $boutique->getId()
  9380.                             )
  9381.                         );
  9382.     
  9383.         $ok_soumission = '';
  9384.         $error = '';
  9385.         $editMode = 'edit';
  9386.         if($request->getMethod() == 'POST'){
  9387.             $dateCommande = $_POST['dateCommande'];
  9388.             $listeProduits = json_decode($_POST['listeProduits']);
  9389.             
  9390.             $tiers = $_POST['tiers'];
  9391.             
  9392.             $tiers = $em->getRepository(Tiers::class)
  9393.                         ->findOneById($tiers);
  9394.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  9395.             $autreFrais =  (float)$_POST['autreFrais'];
  9396.             $em->flush();
  9397.             
  9398.             //Supprimer les ancien ProduitCommande lié 
  9399.             foreach($ancienProduitEntreeDeStocks as $ancienProduitEntreeDeStock){
  9400.                 $em->remove($ancienProduitEntreeDeStock);
  9401.                 
  9402.                 $leProduit = $em->getRepository(Produit::class)
  9403.                         ->findOneById($ancienProduitEntreeDeStock->getProduit()->getId());
  9404.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() - $ancienProduitEntreeDeStock->getQuantite());
  9405.             }
  9406.             $em->flush();
  9407.             $produitEntreeDeStocks = array();
  9408.             $sousTotal = 0;
  9409.             foreach($listeProduits as $listeProduit){
  9410.                 $listeProduit = (array)$listeProduit;
  9411.                 $idDuProduit = $listeProduit['idProduit'];
  9412.                 
  9413.                 $leProduit = $em->getRepository(Produit::class)
  9414.                         ->findOneById($idDuProduit);
  9415.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  9416.         
  9417.                 
  9418.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  9419.                 $produitEntreeDeStock->setProduit($leProduit);
  9420.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  9421.                 $produitEntreeDeStock->setQuantite($listeProduit['quantite']);
  9422.                 
  9423.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  9424.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  9425.                 
  9426.                 $sousTotal += (float)$listeProduit['sousTotal'];
  9427.                 $em->persist($produitEntreeDeStock);
  9428.             }
  9429.             
  9430.             $entreeDeStock->setTotalAchat($sousTotal);
  9431.             $entreeDeStock->setFraisDeTransport($fraisDeTransport);
  9432.             $entreeDeStock->setAutreFrais($autreFrais);
  9433.             $entreeDeStock->setNetPaye($autreFrais + $sousTotal);
  9434.             $entreeDeStock->setResteAPayer($sousTotal + $autreFrais);
  9435.             $entreeDeStock->setTiers($tiers);
  9436.             $em->flush();
  9437.         }
  9438.     
  9439.         return $this->render('admin/edit_stock_entry.html.twig', [
  9440.            'boutique' => $boutique,
  9441.            'produits' => $produits,
  9442.            'editMode' => $editMode,
  9443.            'entreeDeStock' => $entreeDeStock,
  9444.            'ancienProduitEntreeDeStocks' => $ancienProduitEntreeDeStocks,
  9445.            'userBoutique' => $userBoutique,
  9446.            'tiers' => $tiers
  9447.         ]);
  9448.     }
  9449.     
  9450.     
  9451.     /**
  9452.      * @Route("/{slug}/delete-stock-entry/{id}", name="admin.delete_stock_entry")
  9453.      * @return \Symfony\Component\HttpFoundation\Response
  9454.      */
  9455.     public function deleteStockEntryAction(Request $request,  $slug, $id)
  9456.     {
  9457.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9458.            return $this->redirectToRoute('security_login');
  9459.         }  
  9460.         $em = $this->getDoctrine()
  9461.                     ->getManager();
  9462.         
  9463.         $boutique  = $em->getRepository(Boutique::class)
  9464.                         ->findOneBySlug($slug);
  9465.         
  9466.         $user = $this->getUser();
  9467.         $userBoutique = $em->getRepository(UserBoutique::class)
  9468.                         ->findOneBy(
  9469.                             array(
  9470.                             'user' => $user->getId(),
  9471.                             'boutique' => $boutique->getId()
  9472.                             )
  9473.                         );
  9474.         $entreeDeStock  = $em->getRepository(EntreeDeStock::class)
  9475.                         ->findOneBy(
  9476.                             array(
  9477.                                 'boutique' => $boutique->getId(),
  9478.                                 'id' => $id
  9479.                             )
  9480.                         );
  9481.         
  9482.         if(null != $entreeDeStock){
  9483.             $produitEntreeDeStocks = $em->getRepository(ProduitEntreeDeStock::class)
  9484.                                         ->findBy(
  9485.                                             array(
  9486.                                                 'entreeDeStock' => $entreeDeStock->getId()
  9487.                                             )
  9488.                                         );
  9489.             foreach($produitEntreeDeStocks as $produitEntreeDeStock){
  9490.                 $em->remove($produitEntreeDeStock);
  9491.                 $produit = $em->getRepository(Produit::class)
  9492.                                 ->findOneById($produitEntreeDeStock->getProduit()->getId());
  9493.                 $produit->setStockDisponible($produit->getStockDisponible() - $produitEntreeDeStock->getQuantite());
  9494.             }
  9495.             $em->flush();
  9496.             
  9497.             $em->remove($entreeDeStock);
  9498.             $em->flush();
  9499.         }
  9500.         return $this->redirectToRoute('admin.stock_management', array('slug' => $boutique->getSlug()));
  9501.     }
  9502.     /**
  9503.      * @Route("/{slug}/produits-vendus", name="admin_produits_vendus")
  9504.      * @return \Symfony\Component\HttpFoundation\Response
  9505.      */
  9506.     public function produitsVendusAction( Request $request, Boutique $boutique)
  9507.     {
  9508.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9509.            return $this->redirectToRoute('security_login');
  9510.         }
  9511.         
  9512.         $em = $this->getDoctrine()
  9513.                     ->getManager();
  9514.         
  9515.         $userBoutique = $em->getRepository(UserBoutique::class)
  9516.                         ->findOneBy(
  9517.                             array(
  9518.                             'user' => $this->getUser()->getId(),
  9519.                             'boutique' => $boutique->getId()
  9520.                             )
  9521.                         );
  9522.         
  9523.         if('POST' == $request->getMethod()){
  9524.             $dateDebut = $_POST['dateDebut'];
  9525.             $dateFin = $_POST['dateFin'];
  9526.             
  9527.             $dateDebut = new \DateTime($dateDebut);
  9528.             $dateDebut->setTime(0, 0);
  9529.             $dateFin = new \DateTime($dateFin);
  9530.             $dateFin->setTime(23, 59);
  9531.             
  9532.             $produitsVendus  = $em->getRepository(ProduitCommande::class)
  9533.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice', $dateDebut, $dateFin);
  9534.             
  9535.             
  9536.             return $this->render('admin/produits_vendus.html.twig', [
  9537.                'boutique' => $boutique,
  9538.                'produitsVendus' => $produitsVendus
  9539.             ]);
  9540.             
  9541.         }
  9542.         
  9543.         return $this->render('admin/sortie_de_stock.html.twig', [
  9544.            'boutique' => $boutique,
  9545.            'dateDebut' => $dateDebut,
  9546.            'dateFin' => $dateFin,
  9547.            'userBoutique' => $userBoutique,
  9548.            'typeFacture' => $typeFacture
  9549.         ]);
  9550.     }
  9551.     
  9552.     /**
  9553.      * @Route("/{slug}/import-products", name="admin.import_products")
  9554.      * @return \Symfony\Component\HttpFoundation\Response
  9555.      */
  9556.     public function importProductsAction(Request $request, Boutique $boutique)
  9557.     {
  9558.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9559.            return $this->redirectToRoute('security_login');
  9560.         }
  9561.         $em = $this->getDoctrine()
  9562.                     ->getManager();
  9563.                     
  9564.         $user = $this->getUser();
  9565.         
  9566.         $userBoutique = $em->getRepository(UserBoutique::class)
  9567.                         ->findOneBy(
  9568.                             array(
  9569.                             'user' => $user->getId(),
  9570.                             'boutique' => $boutique->getId()
  9571.                             )
  9572.                         );
  9573.         
  9574.         $error = '';
  9575.         $success = '';
  9576.         if('POST' == $request->getMethod()){
  9577.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  9578.             {
  9579.                 
  9580.             
  9581.                 $em->flush();
  9582.                 if ($this->gererFichierMultipleImportation($_FILES['fichier'], $boutique)){
  9583.                     $success = 'success';
  9584.                 } else{
  9585.                     $error = 'error';
  9586.                 }
  9587.                 
  9588.             }
  9589.         }
  9590.         
  9591.         return $this->render('admin/import_products.html.twig', [
  9592.            'boutique' => $boutique,
  9593.            'userBoutique' => $userBoutique,
  9594.            'error' => $error,
  9595.            'success' => $success
  9596.         ]);
  9597.     }
  9598.     
  9599.     /**
  9600.      * @Route("/{slug}/import-customers", name="admin.import_customers")
  9601.      * @return \Symfony\Component\HttpFoundation\Response
  9602.      */
  9603.     public function importCustomersAction(Request $request, Boutique $boutique)
  9604.     {
  9605.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9606.            return $this->redirectToRoute('security_login');
  9607.         }
  9608.         $em = $this->getDoctrine()
  9609.                     ->getManager();
  9610.                     
  9611.         $user = $this->getUser();
  9612.         
  9613.         $userBoutique = $em->getRepository(UserBoutique::class)
  9614.                         ->findOneBy(
  9615.                             array(
  9616.                             'user' => $user->getId(),
  9617.                             'boutique' => $boutique->getId()
  9618.                             )
  9619.                         );
  9620.         
  9621.         $error = '';
  9622.         $success = '';
  9623.         if('POST' == $request->getMethod()){
  9624.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  9625.             {
  9626.                 
  9627.             
  9628.                 $em->flush();
  9629.                 if ($this->gererFichierMultipleCustomerImportation($_FILES['fichier'], $boutique)){
  9630.                     $success = 'success';
  9631.                 } else{
  9632.                     $error = 'error';
  9633.                 }
  9634.                 
  9635.             }
  9636.         }
  9637.         
  9638.         return $this->render('admin/import_customers.html.twig', [
  9639.            'boutique' => $boutique,
  9640.            'userBoutique' => $userBoutique,
  9641.            'error' => $error,
  9642.            'success' => $success
  9643.         ]);
  9644.     }
  9645.     
  9646.     /**
  9647.      * @Route("/{slug}/ajout-utilisateur-employe", name="admin_ajout_utilisateur_employe")
  9648.      * @return \Symfony\Component\HttpFoundation\Response
  9649.      */
  9650.     public function ajoutUtilisateurEmployeAction(Request $request, Boutique $boutique)
  9651.     {
  9652.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9653.            return $this->redirectToRoute('security_login');
  9654.         }
  9655.         $em = $this->getDoctrine()
  9656.                     ->getManager();
  9657.                     
  9658.         $droits = DroitUtilisateur::getDroits();
  9659.         $userBoutiques = $em->getRepository(UserBoutique::class)
  9660.                         ->findBy(
  9661.                             array(
  9662.                                 'boutique' => $boutique->getId(),
  9663.                                 'estParti' => false
  9664.                             )    
  9665.                         );
  9666.         $user = $this->getUser();
  9667.         $userBoutique = $em->getRepository(UserBoutique::class)
  9668.                         ->findOneBy(
  9669.                             array(
  9670.                             'user' => $user->getId(),
  9671.                             'boutique' => $boutique->getId()
  9672.                             )
  9673.                         );
  9674.         
  9675.         return $this->render('admin/ajout_utilisateur_employe.html.twig', [
  9676.            'boutique' => $boutique,
  9677.            'userBoutiques' => $userBoutiques,
  9678.            'userBoutique' => $userBoutique,
  9679.            'droits' => $droits
  9680.            
  9681.         ]);
  9682.     }
  9683.     /**
  9684.      * @Route("/{slug}/users", name="admin.users")
  9685.      * @return \Symfony\Component\HttpFoundation\Response
  9686.      */
  9687.     public function usersAction(Request $request, Boutique $boutique)
  9688.     {
  9689.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9690.            return $this->redirectToRoute('security_login');
  9691.         }
  9692.         $em = $this->getDoctrine()
  9693.                     ->getManager();
  9694.                     
  9695.         $userBoutiques = $em->getRepository(UserBoutique::class)
  9696.                         ->findByBoutique($boutique->getId());
  9697.         $user = $this->getUser();
  9698.         $userBoutique = $em->getRepository(UserBoutique::class)
  9699.                         ->findOneBy(
  9700.                             array(
  9701.                             'user' => $user->getId(),
  9702.                             'boutique' => $boutique->getId()
  9703.                             )
  9704.                         );
  9705.         
  9706.         return $this->render('admin/users.html.twig', [
  9707.            'boutique' => $boutique,
  9708.            'userBoutiques' => $userBoutiques,
  9709.            'userBoutique' => $userBoutique,
  9710.            
  9711.         ]);
  9712.     }
  9713.     
  9714.     /**
  9715.      * @Route("/{slug}/add-user", name="admin.add_user")
  9716.      * @return \Symfony\Component\HttpFoundation\Response
  9717.      */
  9718.     public function addUserAction(Request $request, \Swift_Mailer $mailer, Boutique $boutique)
  9719.     {
  9720.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9721.            return $this->redirectToRoute('security_login');
  9722.         }
  9723.         $em = $this->getDoctrine()
  9724.                     ->getManager();
  9725.                     
  9726.         $userBoutiques = $em->getRepository(UserBoutique::class)
  9727.                         ->findByBoutique($boutique->getId());
  9728.         $user = $this->getUser();
  9729.         $userBoutique = $em->getRepository(UserBoutique::class)
  9730.                         ->findOneBy(
  9731.                             array(
  9732.                             'user' => $user->getId(),
  9733.                             'boutique' => $boutique->getId()
  9734.                             )
  9735.                         );
  9736.         $appName = $this->getParameter('app_name');
  9737.         
  9738.     
  9739.         if('POST' == $request->getMethod()){
  9740.             $email = $_POST['email'];
  9741.             $role = $_POST['role'];
  9742.             
  9743.             $requeteAjoutBoutique  = new RequeteAjoutBoutique;
  9744.             
  9745.             $requeteAjoutBoutique->setRole($role);
  9746.             $requeteAjoutBoutique->setEmail($email);
  9747.             $requeteAjoutBoutique->setBoutique($boutique);
  9748.             
  9749.             $em->persist($requeteAjoutBoutique);
  9750.             $em->flush();
  9751.             
  9752.             //Envoi de mail
  9753.             $message = (new \Swift_Message('Welcome to '.$appName))
  9754.             ->setFrom(['no-reply-myinvoice@assiemail.com'  => $appName])
  9755.             ->setTo([$email])
  9756.             ->setBody(
  9757.                 $this->renderView(
  9758.                 'admin/requete_ajout_boutique_email.html.twig',
  9759.                 [
  9760.                     'appName' => $appName,
  9761.                     'role' => $role,
  9762.                     'boutique' => $boutique
  9763.                 ]
  9764.                 ),
  9765.             'text/html'
  9766.             );
  9767.             
  9768.             //$mailer->send($message);
  9769.         }
  9770.         
  9771.         return $this->render('admin/users.html.twig', [
  9772.            'boutique' => $boutique,
  9773.            'userBoutiques' => $userBoutiques,
  9774.            'userBoutique' => $userBoutique
  9775.         ]);
  9776.     }
  9777.     /**
  9778.      * @Route("/{slug}/paiement-bio", name="admin_paiement_bio")
  9779.      * @return \Symfony\Component\HttpFoundation\Response
  9780.      */
  9781.     public function refairePaiementBionAction(Request $request, Boutique $boutique)
  9782.     {
  9783.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9784.            return $this->redirectToRoute('security_login');
  9785.         }
  9786.         $em = $this->getDoctrine()
  9787.                     ->getManager();
  9788.         $user = $this->getUser();
  9789.         $userBoutique = $em->getRepository(UserBoutique::class)
  9790.                         ->findOneBy(
  9791.                             array(
  9792.                             'user' => $user->getId(),
  9793.                             'boutique' => $boutique->getId()
  9794.                             )
  9795.                         );
  9796.         $laBoutique = $em->getRepository(Boutique::class)
  9797.                         ->findOneById(49);
  9798.         
  9799.         $versements = $em->getRepository(Payment::class)
  9800.                         ->findByBoutique($laBoutique);
  9801.         foreach($versements as $versement){
  9802.             $em->remove($versement);
  9803.         }
  9804.         $commandes = $em->getRepository(Commande::class)
  9805.                         ->findByBoutique($laBoutique);
  9806.         foreach($commandes as $commande){
  9807.             $commande->setMontantPaye(0);
  9808.             $commande->setResteAPayer($commande->getTotalTTC());
  9809.             
  9810.         }
  9811.         $em->flush();
  9812.     return $this->render('admin/refaire_versement.html.twig', [
  9813.            'boutique' => $boutique,
  9814.            'userBoutique' => $userBoutique
  9815.         ]);
  9816.     }
  9817.     /**
  9818.      * @Route("/{slug}/mon-compte", name="admin_mon_compte")
  9819.      * @return \Symfony\Component\HttpFoundation\Response
  9820.      */
  9821.     public function monCompteAction(Request $request, Boutique $boutique)
  9822.     {
  9823.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9824.            return $this->redirectToRoute('security_login');
  9825.         }
  9826.         $em = $this->getDoctrine()
  9827.                     ->getManager();
  9828.     return $this->render('admin/mon_compte.html.twig', [
  9829.            'boutique' => $boutique,
  9830.            'userBoutiques' => $userBoutiques,
  9831.            'userBoutique' => $userBoutique
  9832.         ]);
  9833.     }
  9834.     /**
  9835.      * @Route("/{slug}/mot-de-passe", name="admin_mot_de_passe")
  9836.      * @return \Symfony\Component\HttpFoundation\Response
  9837.      */
  9838.     public function motDePasseAction(Request $request, UserPasswordHasherInterface $passwordHasher, Boutique $boutique)
  9839.     {
  9840.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  9841.            return $this->redirectToRoute('security_login');
  9842.         }
  9843.         $em = $this->getDoctrine()
  9844.                     ->getManager();
  9845.         
  9846.         $user = $this->getUser();
  9847.         $error = '';
  9848.         $ok_submission = '';
  9849.         $error_submission = '';
  9850.         $actuel = $user->getPassword();
  9851.         $hashed = '';
  9852.         if('POST' == $request->getMethod())
  9853.         {
  9854.             $motDePasseActuel = $request->request->get('motDePasseActuel');
  9855.             $nouveauMotDePasse = $request->request->get('nouveauMotDePasse');
  9856.             
  9857.             $repeterMotDePasse = $request->request->get('repeterMotDePasse'); 
  9858.             //$user->setPassword('');
  9859.             //$hashed = $passwordHasher->hashPassword($user, $motDePasseActuel);
  9860.             //if(  $hashed == $user->getPassword()){
  9861.                 $user->setPassword('');
  9862.                 $hashedPassword = $passwordHasher->hashPassword($user, $nouveauMotDePasse);
  9863.                 $user->setPassword($hashedPassword);
  9864.                 $ok_submission = 'Mot de passe changé';
  9865.             //}else{
  9866.             //    $error_submission = 'Ancien mot de passe incorrect';
  9867.             //}
  9868.             //Effacer l'ancien mot de passe
  9869.             
  9870.             
  9871.             $em->flush();
  9872.         }
  9873.         $userBoutique = $em->getRepository(UserBoutique::class)
  9874.                             ->findOneBy(
  9875.                                 array(
  9876.                                     'user' => $user,
  9877.                                     'boutique' => $boutique
  9878.                                 )
  9879.                             );
  9880.     return $this->render('admin/mot_de_passe.html.twig', [
  9881.            'boutique' => $boutique,
  9882.            'userBoutique' => $userBoutique,
  9883.            'ok_submission' => $ok_submission,
  9884.            'error_submission' => $error_submission,
  9885.            'hashed' => $hashed,
  9886.            'actuel' => $actuel
  9887.         ]);
  9888.     }
  9889.     
  9890.     
  9891.     
  9892.     public function getDomain()
  9893.     {
  9894.         $domaine = $_SERVER['HTTP_HOST'];
  9895.         $protocol = '';
  9896.         if($domaine == 'localhost' || $domaine == '127.0.0.1'){
  9897.             $domaine = $domaine.'/myinvoice-def/public';
  9898.         }
  9899.         if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  9900.             $protocol = 'https://';
  9901.         } else{
  9902.             $protocol = 'http://';
  9903.         }
  9904.         
  9905.         return $protocol.$domaine;
  9906.     }
  9907.     
  9908.     public function getNumero($type, $boutique)
  9909.     {
  9910.         $numero = '';
  9911.         $em = $this->getDoctrine()
  9912.                     ->getManager();
  9913.         $nombre = 0;
  9914.         if($type == 'deposit'){
  9915.             $nombre = $em->getRepository(FactureAcompte::class)
  9916.                     ->getNumero($type, $boutique->getId());
  9917.         } else{
  9918.             $nombre = $em->getRepository(Commande::class)
  9919.                     ->getNumero($type, $boutique->getId());
  9920.         
  9921.         }
  9922.         if(empty($nombre)){
  9923.             $nombre = 1 ;
  9924.         } else {
  9925.             $nombre = (int)$nombre[0]['nombre'];
  9926.             $nombre++;
  9927.         }
  9928.         
  9929.         
  9930.         
  9931.         switch($type){
  9932.             case 'invoice':
  9933.                 $numero .= $boutique->getSettings()->getLettreDebutFacture();
  9934.             break;
  9935.             
  9936.             case 'deposit':
  9937.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAcompte();
  9938.             break;
  9939.             case 'bill_credit':
  9940.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAvoir();
  9941.             break;
  9942.             
  9943.             case 'proposal':
  9944.                 $numero .= $boutique->getSettings()->getLettreDebutDevis();
  9945.             break;
  9946.         }
  9947.         
  9948.         if($boutique->getSettings()->getIncluAnnee()){
  9949.             $numero .= date('y');
  9950.         }
  9951.         
  9952.         $nombreDeZeroAAjouter = strlen((string)$nombre);
  9953.         
  9954.         $nombreDeZeroAAjouter =  $boutique->getSettings()->getNombreDeChiffre() - $nombreDeZeroAAjouter;
  9955.         
  9956.         for($i = 0; $i < $nombreDeZeroAAjouter; $i++){
  9957.             $numero .= '0';
  9958.         }
  9959.         
  9960.         $numero .= $nombre;
  9961.         
  9962.         return $numero;
  9963.         
  9964.     }
  9965.     
  9966.     function intervalleMois($datestr)
  9967.     {
  9968.        date_default_timezone_set (date_default_timezone_get());
  9969.         $dt = strtotime ($datestr);
  9970.        return array (
  9971.          "debut" => date ('Y-m-d', strtotime ('first day of this month', $dt)),
  9972.          "fin" => date ('Y-m-d', strtotime ('last day of this month', $dt))
  9973.        );
  9974.     }
  9975.     function intervalleSemaine($datestr) {
  9976.        date_default_timezone_set (date_default_timezone_get());
  9977.        $dt = strtotime ($datestr);
  9978.        return array (
  9979.          "debut" => date ('N', $dt) == 1 ? date ('Y-m-d', $dt) : date ('Y-m-d', strtotime ('last monday', $dt)),
  9980.          "fin" => date('N', $dt) == 7 ? date ('Y-m-d', $dt) : date ('Y-m-d', strtotime ('next sunday', $dt))
  9981.        );
  9982.     }
  9983.     
  9984.     public function gererFichierMultipleImportation($data, $boutique)
  9985.     {        
  9986.             $leRetour = false;
  9987.             $em = $this->getDoctrine()->getManager();
  9988.             
  9989.             $ex = pathinfo($data['name'])['extension'];
  9990.             $exA = array('csv');
  9991.             
  9992.             if (in_array(strtolower($ex), $exA)){
  9993.             } else{
  9994.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  9995.             }
  9996.             
  9997.             $name = time();
  9998.             $namePourRepertoire = $name;
  9999.             //hydratation des attributs de l'objet
  10000.             $domaine = $_SERVER['HTTP_HOST'];
  10001.             $protocol = '';
  10002.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  10003.                 $protocol = 'https://';
  10004.             } else{
  10005.                 $protocol = 'http://';
  10006.             }
  10007.             
  10008.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  10009.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  10010.             $url = $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  10011.             
  10012.             //deplacement (création de l'image original)
  10013.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  10014.             
  10015.             
  10016.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777, true))
  10017.             {
  10018.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  10019.             }
  10020.             
  10021.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  10022.             {
  10023.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  10024.             }
  10025.             
  10026.             $fileToHandle = fopen($url, 'r');
  10027.             $row = 1;
  10028.             while (($data = fgetcsv($fileToHandle, 10000, ",")) !== false) {
  10029.                 $num = count($data);
  10030.                 //echo "<p> $num champs à la ligne $row: <br /></p>\n";
  10031.                 $row++;
  10032.                 $categorie = $data[0];
  10033.                 $categorieProduit = $em->getRepository(CategorieProduit::class)
  10034.                                 ->findOneByNom($categorie);
  10035.                 if(null == $categorieProduit){
  10036.                     $categorieProduit = new CategorieProduit;
  10037.                     $categorieProduit->setNom($categorie);
  10038.                     $em->persist($categorieProduit);
  10039.                     $em->flush();
  10040.                 }
  10041.                 
  10042.                 $ref             = $data[1];
  10043.                 $nomProd         = $data[2];
  10044.                 $prix            = $data[3];
  10045.                 $stockDisponible = $data[4];
  10046.                 $stockDAlerte    = $data[5];
  10047.                 $stockDeSecurite = $data[6];
  10048.                 $stockMinimum    = $data[7];
  10049.                 $stockMaximum    = $data[8];
  10050.                 $stockOutil      = $data[9];
  10051.                 $coutDeStockage  = $data[10];
  10052.                 
  10053.                 $produit = $em->getRepository(Produit::class)
  10054.                                 ->findOneBy(
  10055.                                     array(
  10056.                                         'reference' => $ref,
  10057.                                         'nom' => $nomProd
  10058.                                     )
  10059.                                 );
  10060.                 if(null == $produit){
  10061.                     $produit = new Produit;
  10062.                     $produit->setCategorieProduit($categorieProduit);
  10063.                     $produit->setReference($ref);
  10064.                     $produit->setNom($nomProd);
  10065.                     
  10066.                     $prixActuel = new PrixProduit;
  10067.                     $prixActuel->setValeur($prix);
  10068.                     $produit->addPrix($prixActuel);
  10069.                     $produit->setPrixActuel($prixActuel);
  10070.                     $produit->setStockDisponible($stockDisponible);
  10071.                     $produit->setStockDAlerte($stockDAlerte);
  10072.                     $produit->setStockDeSecurite($stockDeSecurite);
  10073.                     $produit->setStockMinimum($stockMinimum);
  10074.                     $produit->setStockMaximum($stockMaximum);
  10075.                     $produit->setStockOutil($stockOutil);
  10076.                     $produit->setCoutDeStockage($coutDeStockage);
  10077.                     
  10078.                     $produit->setBoutique($boutique);
  10079.                     $em->persist($produit);
  10080.                     $em->flush();
  10081.                 }
  10082.                 
  10083.                 
  10084.             }
  10085.             $leRetour = true;
  10086.             fclose($fileToHandle);
  10087.             
  10088.             //$this->getDoctrine()->getManager()->flush();
  10089.             
  10090.         return $leRetour;
  10091.     }
  10092.     public function gererFichierMultiple($anyObject, $data, $fichierUnique = false)
  10093.     {
  10094.         $nbFichier = 0; 
  10095.         
  10096.         if($fichierUnique){
  10097.             $photo = new Photo;
  10098.                 $photo->setFile($data);
  10099.                 
  10100.                 
  10101.                 
  10102.                 $ex = pathinfo($data['name'])['extension'];
  10103.                 $exA = array('jpg', 'jpeg', 'png', 'gif');
  10104.                 
  10105.                 if (in_array(strtolower($ex), $exA)){
  10106.                 
  10107.                     $photo->setExtension($ex);
  10108.                 } else {
  10109.                     throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  10110.                 }
  10111.                 
  10112.                 $name = $anyObject->getId().time();
  10113.                 $namePourRepertoire = $name;
  10114.                 //hydratation des attributs de l'objet
  10115.                 $photo->setUrl($name.'.'.$photo->getExtension());
  10116.                 $photo->setAlt('Image de ');
  10117.                 $extension = $photo->getExtension();
  10118.                 //deplacement (création de l'image original)
  10119.                 //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  10120.                 
  10121.                 
  10122.                 if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original', 0777, true))
  10123.                 {
  10124.                     throw new \RuntimeException('Impossible de créer le dossier de destination');
  10125.                 }
  10126.                 
  10127.                 if (!move_uploaded_file($data['tmp_name'], $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension()))
  10128.                 {
  10129.                     throw new \RuntimeException('Désolé, une erreur s\'est producte.');
  10130.                 }
  10131.                 try{
  10132.                     $name = $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension();
  10133.                         $nvlleImgMenu = ( $ex =='jpg' || $ex == 'jpeg') ? imagecreatefromjpeg($name) : imagecreatefrompng($name);
  10134.                         
  10135.                         $miniatureMenu = imagecreatetruecolor(600, 600);
  10136.                         
  10137.                         $largeurNvlleImgMenu = imagesx($nvlleImgMenu);
  10138.                         $hauteurNvlleImgMenu = imagesy($nvlleImgMenu);
  10139.                         $largeurMiniatureMenu = imagesx($miniatureMenu);
  10140.                         $hauteurMiniatureMenu = imagesy($miniatureMenu);
  10141.                         
  10142.                         //fusion et generation des miniatures
  10143.                         
  10144.                         imagecopyresampled($miniatureMenu, $nvlleImgMenu, 0, 0, 0, 0, $largeurMiniatureMenu, $hauteurMiniatureMenu,
  10145.                                    $largeurNvlleImgMenu, $hauteurNvlleImgMenu);
  10146.                         
  10147.                         //deplacer les nouvelles images(miniatures) dans les repertoires correspondants
  10148.                         
  10149.                         if(!is_dir($photo->getUploadRootDir().'/featured/') && !mkdir($photo->getUploadRootDir().'/featured/', 0777, true)){
  10150.                             throw \RuntimeException('Impossible de créer le dossier de destination');
  10151.                         }
  10152.                         $name = $photo->getUploadRootDir().'/featured/'.$photo->getUrl();
  10153.                         if($extension == 'jpg' || $extension == 'jpeg'){
  10154.                             imagejpeg($miniatureMenu, $name, 95);
  10155.                         } else{
  10156.                             imagepng($miniatureMenu, $name, 9);
  10157.                         }
  10158.                         $host = $_SERVER['HTTP_HOST'];
  10159.                         if($host == '127.0.0.1'){
  10160.                             $host .= '/myinvoice-def/public';
  10161.                         }
  10162.                         $fromSecure = 'http://';
  10163.                         if( isset($_SERVER['HTTPS'] ) ){
  10164.                             $fromSecure = 'https://';
  10165.                         }
  10166.                         $photo->setUrl($fromSecure.$host.'/'.$photo->getUploadDir().'/featured/'.$photo->getUrl());
  10167.                     
  10168.                         //
  10169.                     } catch(Exception $e){
  10170.                     }
  10171.                 $this->getDoctrine()->getManager()->persist($photo);
  10172.                 $this->getDoctrine()->getManager()->flush();
  10173.                 $anyObject->setPhoto($photo);
  10174.         }else{
  10175.             $tableauFichier = $this->reArrayFiles($data);
  10176.             //var_dump($tableauFichier);
  10177.             $i = 0;
  10178.             foreach ($tableauFichier as $file)
  10179.             {
  10180.                 $i++;
  10181.             //print 'File Name: ' . $file['name'];
  10182.             //print 'File Type: ' . $file['type'];
  10183.             //print 'File Size: ' . $file['size'];
  10184.         
  10185.             
  10186.                 $photo = new VisitePhoto;
  10187.                 $photo->setFile($file);
  10188.                 
  10189.                 
  10190.                 
  10191.                 $ex = pathinfo($file['name'])['extension'];
  10192.                 $exA = array('jpg', 'jpeg', 'png', 'gif', 'webp', 'svg');
  10193.                 
  10194.                 if (in_array(strtolower($ex), $exA)){
  10195.                 
  10196.                     $photo->setExtension($ex);
  10197.                 } else {
  10198.                     throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  10199.                 }
  10200.                 
  10201.                 $name = $anyObject->getId().$i.time();
  10202.                 $namePourRepertoire = $name;
  10203.                 //hydratation des attributs de l'objet
  10204.                 $photo->setUrl($name.'.'.$photo->getExtension());
  10205.                 $photo->setAlt('Image de '.$anyObject->getNom());
  10206.                 $fromSecure = 'http://';
  10207.                         if( isset($_SERVER['HTTPS'] ) ){
  10208.                             $fromSecure = 'https://';
  10209.                         }
  10210.                 $host = $_SERVER['HTTP_HOST'];
  10211.                 
  10212.                 if($host == '127.0.0.1'){
  10213.                     $host .= '/myinvoice-def/public';
  10214.                 }
  10215.                 $photo->setUrl($fromSecure.$host.'/'.$photo->getUploadDir().'/original/'.$photo->getUrl());
  10216.                     
  10217.                 //deplacement (création de l'image original)
  10218.                 //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  10219.                 
  10220.                 $anyObject->addPhoto($photo);
  10221.                 if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original', 0777, true))
  10222.                 {
  10223.                     throw new \RuntimeException('Impossible de créer le dossier de destination');
  10224.                 }
  10225.                 
  10226.                 if (!move_uploaded_file($file['tmp_name'], $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension()))
  10227.                 {
  10228.                     throw new \RuntimeException('Désolé, une erreur s\'est producte.');
  10229.                 }
  10230.                 $this->getDoctrine()->getManager()->persist($photo);
  10231.             }
  10232.         }
  10233.         $this->getDoctrine()->getManager()->flush();
  10234.         
  10235.     }
  10236.     public function reArrayFiles($file_post)
  10237.     {
  10238.         $file_ary = array();
  10239.         $file_count = count($file_post['name']);
  10240.         $file_keys = array_keys($file_post);
  10241.         for ($i=0; $i<$file_count; $i++)
  10242.         {
  10243.             foreach ($file_keys as $key)
  10244.             {
  10245.                 $file_ary[$i][$key] = $file_post[$key][$i];
  10246.             }
  10247.         }
  10248.         return $file_ary;
  10249.     }
  10250.     
  10251.     public function gererFichierMultipleCustomerImportation($data, $boutique)
  10252.     {        
  10253.             $leRetour = false;
  10254.             $em = $this->getDoctrine()->getManager();
  10255.             
  10256.             $ex = pathinfo($data['name'])['extension'];
  10257.             $exA = array('csv');
  10258.             
  10259.             if (in_array(strtolower($ex), $exA)){
  10260.             } else{
  10261.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  10262.             }
  10263.             
  10264.             $name = time();
  10265.             $namePourRepertoire = $name;
  10266.             //hydratation des attributs de l'objet
  10267.             $domaine = $_SERVER['HTTP_HOST'];
  10268.             $protocol = '';
  10269.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  10270.                 $protocol = 'https://';
  10271.             } else{
  10272.                 $protocol = 'http://';
  10273.             }
  10274.             
  10275.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  10276.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  10277.             $url = $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  10278.             
  10279.             //deplacement (création de l'image original)
  10280.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  10281.             
  10282.             
  10283.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777, true))
  10284.             {
  10285.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  10286.             }
  10287.             
  10288.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  10289.             {
  10290.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  10291.             }
  10292.             
  10293.             $fileToHandle = fopen($url, 'r');
  10294.             $row = 1;
  10295.             while (($data = fgetcsv($fileToHandle, 10000, ",")) !== false) {
  10296.                 $num = count($data);
  10297.                 $row++;
  10298.                 
  10299.                 $nomClient    = $data[0];
  10300.                 $adresse      = $data[1];
  10301.                 $codePostal   = $data[2];
  10302.                 $nomPays      = $data[3];
  10303.                 $ville        = $data[4];
  10304.                 $email        = $data[5];
  10305.                 $telephone    = $data[6];
  10306.                 $soumisALaTVA = $data[7];
  10307.                 $codeTVA      = $data[8];
  10308.                 
  10309.                 $tier = $em->getRepository(Tiers::class)
  10310.                                 ->findOneBy(
  10311.                                     array(
  10312.                                     'boutique' => $boutique->getId(),
  10313.                                     'nom' => $nomClient
  10314.                                     )
  10315.                                 );
  10316.                 if(null == $tier){
  10317.                     $tier = new Tiers;
  10318.                     $tier->setNom($nomClient);
  10319.                     $tier->setAdresse($adresse);
  10320.                     $tier->setCodePostal($codePostal);
  10321.                     $tier->setEmail($email);
  10322.                     $tier->setTelephone($telephone);
  10323.                     $tier->setVille($ville);
  10324.                     $tier->setAssujettiALaTVA($soumisALaTVA);
  10325.                     $tier->setCodeTVA($codeTVA);
  10326.                     
  10327.                     $pays = $em->getRepository(Pays::class)
  10328.                                 ->findOneBy(
  10329.                                     array(
  10330.                                     'nom' => $nomPays
  10331.                                     )
  10332.                                 );
  10333.                     if (null == $pays){
  10334.                         $pays = $em->getRepository(Pays::class)
  10335.                                 ->findOneBy(
  10336.                                     array(
  10337.                                     'nomFr' => $nomPays
  10338.                                     )
  10339.                                 );
  10340.                         if(null == $pays){
  10341.                             $pays = new Pays;
  10342.                             $pays->setNom($nomPays);
  10343.                             $em->persist($pays);
  10344.                             $em->flush();
  10345.                         }
  10346.                     }
  10347.                     
  10348.                     $tier->setPays($pays);
  10349.                     $tier->setBoutique($boutique);
  10350.                     $em->persist($tier);
  10351.                     $em->flush();
  10352.                 }    
  10353.             }
  10354.             $leRetour = true;
  10355.             fclose($fileToHandle);
  10356.             
  10357.             //$this->getDoctrine()->getManager()->flush();
  10358.             
  10359.         return $leRetour;
  10360.     }
  10361.     public function getMois()
  10362.     {
  10363.         $mois = array(
  10364.             array(
  10365.                 'index' => 1,
  10366.                 'nom' => 'Janvier'
  10367.             ),
  10368.             array(
  10369.                 'index' => 2,
  10370.                 'nom' => 'Février'
  10371.             ),
  10372.             array(
  10373.                 'index' => 3,
  10374.                 'nom' => 'Mars'
  10375.             ),
  10376.             array(
  10377.                 'index' => 4,
  10378.                 'nom' => 'Avril'
  10379.             ),
  10380.             array(
  10381.                 'index' => 5,
  10382.                 'nom' => 'Mai'
  10383.             ),
  10384.             array(
  10385.                 'index' => 6,
  10386.                 'nom' => 'Juin'
  10387.             ),
  10388.             array(
  10389.                 'index' => 7,
  10390.                 'nom' => 'Juillet'
  10391.             ),
  10392.             array(
  10393.                 'index' => 8,
  10394.                 'nom' => 'Août'
  10395.             ),
  10396.             array(
  10397.                 'index' => 9,
  10398.                 'nom' => 'Septembre'
  10399.             ),
  10400.             array(
  10401.                 'index' => 10,
  10402.                 'nom' => 'Octobre'
  10403.             ),
  10404.             array(
  10405.                 'index' => 11,
  10406.                 'nom' => 'Novembre'
  10407.             ),
  10408.             array(
  10409.                 'index' => 12,
  10410.                 'nom' => 'Décembre'
  10411.             ),
  10412.         );
  10413.         return $mois;
  10414.     }
  10415.     public function getAnnee()
  10416.     {
  10417.         $actuel = date('Y');
  10418.         $annees = array();
  10419.         for($i = $actuel; $i >= 2020; $i--){
  10420.             array_push($annees, $i);
  10421.         }
  10422.         return $annees;
  10423.     }
  10424. }