src/Controller/AdminController.php line 8302

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