src/Controller/AdminController.php line 3047

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