src/Controller/AdminController.php line 3108

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.         $actifsImmobilises $em->getRepository(EcritureComptable::class)
  3175.                                 ->bilanComptable($boutique'Immobilisations incorporelles'$dateDebut$dateFin);
  3176.          
  3177.         if($request->getMethod() == 'POST'){
  3178.             
  3179.             
  3180.         }
  3181.             $userBoutique $em->getRepository(UserBoutique::class)
  3182.                         ->findOneBy(
  3183.                             array(
  3184.                             'user' => $user->getId(),
  3185.                             'boutique' => $boutique->getId()
  3186.                             )
  3187.                         );
  3188.                         
  3189.         return $this->render('admin/etats_financiers.html.twig', [
  3190.            'boutique' => $boutique,
  3191.            'userBoutique' => $userBoutique,
  3192.            'intervalleDeDate' => $intervalleDeDate,
  3193.            'dateDebut' => $dateDebut,
  3194.            'dateFin' => $dateFin,
  3195.            'startMonth' => $startMonth,
  3196.            'intervalleMois' => $intervalleMois,
  3197.            'endMonth' => $endMonth,
  3198.            'startYear' => $startYear,
  3199.            'endYear' => $endYear,
  3200.            'chargeDExploitations' => $chargeDExploitations,
  3201.            'chargeFinancieres' => $chargeFinancieres,
  3202.            'chargeExceptionnelles' => $chargeExceptionnelles,
  3203.            'impotSurLeBenefice' => $impotSurLeBenefice,
  3204.            'venteDeMarchandise' => $venteDeMarchandise,
  3205.          
  3206.            'actifsImmobilises' => $actifsImmobilises
  3207.            
  3208.         ]);
  3209.     }
  3210.     
  3211.     
  3212.     /**
  3213.      * @Route("/{slug}/ecritures-comptable", name="admin_comptabilite_ecritures_comptable")
  3214.      * @return \Symfony\Component\HttpFoundation\Response
  3215.      */
  3216.     public function ecrituresEomptableAction(Request $requestBoutique $boutique)
  3217.     {
  3218.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3219.            return $this->redirectToRoute('security_login');
  3220.         }
  3221.         $em $this->getDoctrine()
  3222.                     ->getManager();
  3223.         
  3224.         $compte = new Compte;
  3225.         
  3226.         $user $this->getUser();
  3227.         $userBoutique $em->getRepository(UserBoutique::class)
  3228.                         ->findOneBy(
  3229.                             array(
  3230.                             'user' => $user->getId(),
  3231.                             'boutique' => $boutique->getId()
  3232.                             )
  3233.                         );
  3234.         $ecritureComptables $em->getRepository(EcritureComptable::class)
  3235.                                 ->findBy(
  3236.                                     array(
  3237.                                         'boutique' => $boutique->getId()
  3238.                                     ),
  3239.                                     array(
  3240.                                         'laDate' => 'ASC'
  3241.                                     )
  3242.                                 );
  3243.         
  3244.         if($request->getMethod() == 'POST'){
  3245.             $ecritureComptables = array();
  3246.             
  3247.         }
  3248.     
  3249.         return $this->render('admin/ecriture_comptables.html.twig', [
  3250.            'boutique' => $boutique,
  3251.            'ecritureComptables' => $ecritureComptables,
  3252.            'userBoutique' => $userBoutique
  3253.         ]);
  3254.     }
  3255.     /**
  3256.      * @Route("/{slug}/grand-livre", name="admin_comptabilite_grand_livre")
  3257.      * @return \Symfony\Component\HttpFoundation\Response
  3258.      */
  3259.     public function grandLivreAction(Request $requestBoutique $boutique)
  3260.     {
  3261.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3262.            return $this->redirectToRoute('security_login');
  3263.         }
  3264.         $em $this->getDoctrine()
  3265.                     ->getManager();
  3266.         
  3267.         $compte = new Compte;
  3268.         
  3269.         $user $this->getUser();
  3270.         $userBoutique $em->getRepository(UserBoutique::class)
  3271.                         ->findOneBy(
  3272.                             array(
  3273.                             'user' => $user->getId(),
  3274.                             'boutique' => $boutique->getId()
  3275.                             )
  3276.                         );
  3277.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  3278.         $dateDebut date('Y-01-01');
  3279.         $dateDebut = new \DateTime($dateDebut);
  3280.         $dateDebut->setTime(00);
  3281.         $dateFin date('Y-12-31');
  3282.         $dateFin = new \DateTime($dateFin);
  3283.         $dateFin->setTime(2359);
  3284.         
  3285.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  3286.         $startMonth $intervalleMois['debut'];
  3287.         $endMonth $intervalleMois['fin'];
  3288.         $ecritureComptables $em->getRepository(EcritureComptable::class)
  3289.                                 ->grandLivre($boutique->getId(), $dateDebut$dateFin);
  3290.         
  3291.         if($request->getMethod() == 'POST'){
  3292.             $ecritureComptables = array();
  3293.             
  3294.         }
  3295.     
  3296.         return $this->render('admin/grand_livre.html.twig', [
  3297.            'boutique' => $boutique,
  3298.            'ecritureComptables' => $ecritureComptables,
  3299.            'userBoutique' => $userBoutique
  3300.         ]);
  3301.     }
  3302.     
  3303.     /**
  3304.      * @Route("/{slug}/nouvelle-ecriture-comptable", name="admin_comptabilite_nouvelle_ecriture_comptable")
  3305.      * @return \Symfony\Component\HttpFoundation\Response
  3306.      */
  3307.     public function nouvelleEcritureEomptableAction(Request $requestBoutique $boutique)
  3308.     {
  3309.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3310.            return $this->redirectToRoute('security_login');
  3311.         }
  3312.         $em $this->getDoctrine()
  3313.                     ->getManager();
  3314.         
  3315.         $ecritureComptable = new EcritureComptable;
  3316.         
  3317.         $user $this->getUser();
  3318.         $userBoutique $em->getRepository(UserBoutique::class)
  3319.                         ->findOneBy(
  3320.                             array(
  3321.                             'user' => $user->getId(),
  3322.                             'boutique' => $boutique->getId()
  3323.                             )
  3324.                         );
  3325.         $form $this->createForm(EcritureComptableType::class, $ecritureComptable, array('boutique' => $boutique->getId()));
  3326.         
  3327.         $ok_soumission '';
  3328.         $error '';
  3329.         
  3330.         if($request->getMethod() == 'POST'){
  3331.             
  3332.                $form->handleRequest($request);
  3333.                if($form->isValid()){
  3334.                    $ecritureComptable->setBoutique($boutique);
  3335.                   $em->persist($ecritureComptable);
  3336.                   $em->flush();
  3337.         
  3338.                 $ok_soumission =" Votre message a été pris en compte";
  3339.                     
  3340.                 unset($ecritureComptable);
  3341.                 unset($form);
  3342.                 $ecritureComptable = new EcritureComptable;
  3343.                 
  3344.                 $form $this->createForm(EcritureComptableType::class, $ecritureComptable, array('boutique' => $boutique->getId()));
  3345.                     
  3346.                 } else {
  3347.                     $error =" Veillez corrigez vos erreurs";
  3348.                 }
  3349.         }
  3350.     
  3351.         return $this->render('admin/nouvelle_ecriture_comptable.html.twig', [
  3352.            'boutique' => $boutique,
  3353.            'form' => $form->createView(),
  3354.            'userBoutique' => $userBoutique
  3355.         ]);
  3356.     }
  3357.     
  3358.     
  3359.     
  3360.     /**
  3361.      * @Route("/{slug}/new-payment/{id}", name="admin.new_payment")
  3362.      * @return \Symfony\Component\HttpFoundation\Response
  3363.      */
  3364.     public function newPaymentAction(Request $request,  $slug$id)
  3365.     {
  3366.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3367.            return $this->redirectToRoute('security_login');
  3368.         }      
  3369.         $em $this->getDoctrine()
  3370.                     ->getManager();
  3371.         
  3372.         $boutique $em->getRepository(Boutique::class)
  3373.                     ->findOneBySlug($slug);
  3374.             
  3375.         $commande $em->getRepository(Commande::class)
  3376.                     ->findOneBy(
  3377.                         array(
  3378.                             'boutique' => $boutique->getId(),
  3379.                             'id' => $id
  3380.                         )
  3381.                     );
  3382.         $factures $em->getRepository(Commande::class)
  3383.                     ->facturesPourVersement($boutique->getId());
  3384.         
  3385.         $user $this->getUser();        
  3386.         $userBoutique $em->getRepository(UserBoutique::class)
  3387.                         ->findOneBy(
  3388.                             array(
  3389.                             'user' => $user->getId(),
  3390.                             'boutique' => $boutique->getId()
  3391.                             )
  3392.                         );
  3393.         $paymentMethods $em->getRepository(PaymentMethod::class)
  3394.                     ->findBy(
  3395.                         array(
  3396.                             'boutique' => $boutique->getId()
  3397.                         )
  3398.                     );
  3399.                     
  3400.         $ok_soumission '';
  3401.         $error '';
  3402.             
  3403.             
  3404.        return $this->render('admin/new_payment.html.twig', [
  3405.            'boutique' => $boutique,
  3406.            'commande' => $commande,
  3407.            'paymentMethods' => $paymentMethods,
  3408.            'factures' => $factures,
  3409.            'userBoutique' => $userBoutique
  3410.         ]);
  3411.     
  3412.    }
  3413.    /**
  3414.      * @Route("/{slug}/make-payment/{id}", name="admin_make_payment")
  3415.      * @return \Symfony\Component\HttpFoundation\Response
  3416.      */
  3417.     public function makePaymentAction(Request $request,  $slug$id 0)
  3418.     {
  3419.         /*
  3420.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3421.            return $this->redirectToRoute('security_login');
  3422.         }      
  3423.         */
  3424.         $em $this->getDoctrine()
  3425.                     ->getManager();
  3426.         
  3427.         $boutique $em->getRepository(Boutique::class)
  3428.                     ->findOneBySlug($slug);
  3429.         
  3430.         $commande $em->getRepository(Commande::class)
  3431.                     ->findOneBy(
  3432.                         array(
  3433.                             'boutique' => $boutique->getId(),
  3434.                             'id' => $id
  3435.                         )
  3436.                     );
  3437.         $factures $em->getRepository(Commande::class)
  3438.                     ->facturesPourVersement($boutique->getId());
  3439.         
  3440.         $user $this->getUser();
  3441.         
  3442.         
  3443.         $userBoutique $em->getRepository(UserBoutique::class)
  3444.                         ->findOneBy(
  3445.                             array(
  3446.                             'user' => $user->getId(),
  3447.                             'boutique' => $boutique->getId()
  3448.                             )
  3449.                         );
  3450.         $paymentMethods $em->getRepository(PaymentMethod::class)
  3451.                     ->findBy(
  3452.                         array(
  3453.                             'boutique' => $boutique->getId()
  3454.                         )
  3455.                     );
  3456.                     
  3457.         $ok_soumission '';
  3458.         $error '';
  3459.         
  3460.         
  3461.             $laDate $request->request->get('laDate'); 
  3462.             $frais = (float)$request->request->get('frais');
  3463.             $paymentMethod $request->request->get('paymentMethod');
  3464.             $montant = (float)$request->request->get('montant');
  3465.             $referencePaiement $request->request->get('referencePaiement');
  3466.             $commande $request->request->get('facture');
  3467.             
  3468.             $commande $em->getRepository(Commande::class)
  3469.                             ->findOneBy(
  3470.                                 array(
  3471.                                 'boutique' =>$boutique->getId(),
  3472.                                 'id' => $commande
  3473.                                 )
  3474.                             );
  3475.             
  3476.             if((float)$commande->getResteAPayer() < $montant || $montant == 0){
  3477.                 $this->addFlash(
  3478.                     'danger',
  3479.                     'Montant invalide '$montant
  3480.                 );
  3481.             } else{
  3482.                 $laDate = new \DateTime($laDate);
  3483.                 $payment = new Payment;
  3484.                 $payment->setLaDate($laDate);
  3485.                 $payment->setCommande($commande);
  3486.                 $payment->setBoutique($boutique);
  3487.                 $payment->setMontant($montant);
  3488.                 $payment->setReferencePaiement($referencePaiement);
  3489.                 $payment->setMoyenDePaiement($paymentMethod);
  3490.                 
  3491.                 $em->persist($payment);
  3492.                 
  3493.                 $commande->setMontantPaye($commande->getMontantPaye() + $montant);
  3494.                 $commande->setResteAPayer($commande->getResteAPayer() - $montant);
  3495.                 $em->flush();
  3496.                 
  3497.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  3498.                     $groupeEcritureComptable = new GroupeEcritureComptable;
  3499.                     $groupeEcritureComptable->setBoutique($boutique);
  3500.                     
  3501.                     $groupeEcritureComptable->setLibelleEcriture('Règlement client');
  3502.                     $groupeEcritureComptable->setDebit($montant);
  3503.                     $groupeEcritureComptable->setCredit($montant);
  3504.                     $groupeEcritureComptable->setLaDate($payment->getLaDate());
  3505.                     $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  3506.                     $groupeEcritureComptable->setAnnee($payment->getLaDate()->format('Y'));
  3507.                     $groupeEcritureComptable->setMois($payment->getLaDate()->format('m'));
  3508.                     $em->persist($groupeEcritureComptable);
  3509.                     $em->flush();
  3510.                 if($paymentMethod == 'check' || $paymentMethod == 'transfer'){
  3511.                     //Debit
  3512.                     
  3513.                     $ecritureComptable = new EcritureComptable;
  3514.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeBanque());
  3515.                     $ecritureComptable->setBoutique($boutique);
  3516.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3517.                     
  3518.                     $ecritureComptable->setLeJournal($leJournal);
  3519.                     $compte $em->getRepository(Compte::class)
  3520.                                 ->findOneByNumero('521'); //Banque
  3521.                     $compte->setSolde($compte->getSolde() + $montant);
  3522.                     $ecritureComptable->setCompte($compte);
  3523.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3524.                     $ecritureComptable->setDebit($montant);
  3525.                     $ecritureComptable->setSolde($compte->getSolde());
  3526.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3527.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3528.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3529.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3530.                     $em->persist($ecritureComptable);
  3531.                     //Credit
  3532.                     $ecritureComptable = new EcritureComptable;
  3533.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3534.                     $ecritureComptable->setBoutique($boutique);
  3535.                     
  3536.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeBanque());
  3537.                     $compte $em->getRepository(Compte::class)
  3538.                                 ->findOneByNumero('411'); //Client
  3539.                     $compte->setSolde($compte->getSolde() - $montant);
  3540.                     $ecritureComptable->setCompte($compte);
  3541.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3542.                     $ecritureComptable->setCredit($montant);
  3543.                     $ecritureComptable->setSolde($compte->getSolde());
  3544.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3545.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3546.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3547.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3548.                     $em->persist($ecritureComptable);
  3549.                 }
  3550.                 if($paymentMethod == 'cash'){
  3551.                     //Débit
  3552.                     $ecritureComptable = new EcritureComptable;
  3553.                     $ecritureComptable->setBoutique($boutique);
  3554.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3555.                     $leJournal $em->getRepository(JournalComptabilite::class)
  3556.                                     ->findOneBy(
  3557.                                         array(
  3558.                                         'boutique' => $boutique->getId(),
  3559.                                         'reference' => 'CA',
  3560.                                         'nom' => 'Caisse'
  3561.                                         )
  3562.                                     );
  3563.                     $groupeEcritureComptable->setLeJournal($leJournal);
  3564.                     $ecritureComptable->setLeJournal($leJournal);
  3565.                     $compte $em->getRepository(Compte::class)
  3566.                                 ->findOneByNumero('5711'); //caisse
  3567.                     $compte->setSolde($compte->getSolde() + $montant);
  3568.                     $ecritureComptable->setCompte($compte);
  3569.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3570.                     $ecritureComptable->setDebit($montant);
  3571.                     $ecritureComptable->setSolde($compte->getSolde());
  3572.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3573.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3574.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3575.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3576.                     $em->persist($ecritureComptable);
  3577.                     //Credit
  3578.                     $ecritureComptable = new EcritureComptable;
  3579.                     $ecritureComptable->setBoutique($boutique);
  3580.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3581.                     
  3582.                     $ecritureComptable->setLeJournal($leJournal);
  3583.                     $compte $em->getRepository(Compte::class)
  3584.                                 ->findOneByNumero('411'); //Client
  3585.                     $compte->setSolde($compte->getSolde() - $montant);
  3586.                     $ecritureComptable->setCompte($compte);
  3587.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3588.                     $ecritureComptable->setCredit($montant);
  3589.                     $ecritureComptable->setSolde($compte->getSolde());
  3590.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3591.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3592.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3593.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3594.                     $em->persist($ecritureComptable);
  3595.                 }
  3596.                 if($paymentMethod == 'card'){
  3597.                     $ecritureComptable = new EcritureComptable;
  3598.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3599.                     $ecritureComptable->setBoutique($boutique);
  3600.                     $leJournal $em->getRepository(JournalComptabilite::class)
  3601.                                     ->findOneBy(
  3602.                                         array(
  3603.                                         'boutique' => $boutique->getId(),
  3604.                                         'reference' => 'BQ',
  3605.                                         'nom' => 'Banque'
  3606.                                         )
  3607.                                     );
  3608.                     $ecritureComptable->setLeJournal($leJournal);
  3609.                     $groupeEcritureComptable->setLeJournal($leJournal);
  3610.                     $compte $em->getRepository(Compte::class)
  3611.                                 ->findOneByNumero('521'); //Banque
  3612.                     $compte->setSolde($compte->getSolde() + $montant $frais);
  3613.                     $ecritureComptable->setCompte($compte);
  3614.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3615.                     $ecritureComptable->setDebit($montant $frais);
  3616.                     $ecritureComptable->setSolde($compte->getSolde());
  3617.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3618.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3619.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3620.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3621.                     $em->persist($ecritureComptable);
  3622.                     if($frais 0){
  3623.                         $ecritureComptable = new EcritureComptable;
  3624.                         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3625.                         $ecritureComptable->setBoutique($boutique);
  3626.                         
  3627.                         $ecritureComptable->setLeJournal($leJournal);
  3628.                         $compte $em->getRepository(Compte::class)
  3629.                                     ->findOneByNumero('6315'); //Commissions sur cartes de crédit
  3630.                         $compte->setSolde($compte->getSolde() + $frais);
  3631.                         $ecritureComptable->setCompte($compte);
  3632.                         $ecritureComptable->setLibelleEcriture('Règlement client');
  3633.                         $ecritureComptable->setDebit($frais);
  3634.                         $ecritureComptable->setSolde($compte->getSolde());
  3635.                         $ecritureComptable->setLaDate($payment->getLaDate());
  3636.                         $ecritureComptable->setNumeroPiece($commande->getNumero());
  3637.                         $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3638.                         $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3639.                         $em->persist($ecritureComptable);
  3640.                     }
  3641.                     //Credit
  3642.                     $ecritureComptable = new EcritureComptable;
  3643.                     $ecritureComptable->setBoutique($boutique);
  3644.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3645.                     
  3646.                     $ecritureComptable->setLeJournal($leJournal);
  3647.                     $compte $em->getRepository(Compte::class)
  3648.                                 ->findOneByNumero('515'); //CARTES DE CREDIT A ENCAISSER
  3649.                     $compte->setSolde($compte->getSolde() - $montant );
  3650.                     $ecritureComptable->setCompte($compte);
  3651.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3652.                     $ecritureComptable->setCredit($montant);
  3653.                     $ecritureComptable->setSolde($compte->getSolde());
  3654.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3655.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3656.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3657.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3658.                     $em->persist($ecritureComptable);
  3659.                 }
  3660.                 if($paymentMethod == 'mobile-money'){
  3661.                     $ecritureComptable = new EcritureComptable;
  3662.                     $ecritureComptable->setBoutique($boutique);
  3663.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3664.                     $leJournal $em->getRepository(JournalComptabilite::class)
  3665.                                     ->findOneBy(
  3666.                                         array(
  3667.                                             'boutique' => $boutique->getId(),
  3668.                                         'reference' => 'CA',
  3669.                                         'nom' => 'Caisse'
  3670.                                         )
  3671.                                     );
  3672.                     $ecritureComptable->setLeJournal($leJournal);
  3673.                     $groupeEcritureComptable->setLeJournal($leJournal);
  3674.                     $compte $em->getRepository(Compte::class)
  3675.                                 ->findOneByNumero('5711'); //Caisse en monnaie nationale
  3676.                     $compte->setSolde($compte->getSolde() + $montant $frais);
  3677.                     $ecritureComptable->setCompte($compte);
  3678.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3679.                     $ecritureComptable->setDebit($montant $frais);
  3680.                     $ecritureComptable->setSolde($compte->getSolde());
  3681.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3682.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3683.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3684.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3685.                     $em->persist($ecritureComptable);
  3686.                     if($frais 0){
  3687.                         $ecritureComptable = new EcritureComptable;
  3688.                         $ecritureComptable->setBoutique($boutique);
  3689.                         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3690.                         
  3691.                         $ecritureComptable->setLeJournal($leJournal);
  3692.                         $compte $em->getRepository(Compte::class)
  3693.                                     ->findOneByNumero('6317'); //Frais sur instruments monnaie électronique
  3694.                         $compte->setSolde($compte->getSolde() + $frais);
  3695.                         $ecritureComptable->setCompte($compte);
  3696.                         $ecritureComptable->setLibelleEcriture('Règlement client');
  3697.                         $ecritureComptable->setDebit($frais);
  3698.                         $ecritureComptable->setSolde($compte->getSolde());
  3699.                         $ecritureComptable->setLaDate($payment->getLaDate());
  3700.                         $ecritureComptable->setNumeroPiece($commande->getNumero());
  3701.                         $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3702.                         $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3703.                         $em->persist($ecritureComptable);
  3704.                     }
  3705.                     //Credit
  3706.                     $ecritureComptable = new EcritureComptable;
  3707.                     $ecritureComptable->setBoutique($boutique);
  3708.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  3709.                     
  3710.                     $ecritureComptable->setLeJournal($leJournal);
  3711.                     $compte $em->getRepository(Compte::class)
  3712.                                 ->findOneByNumero('554'); //PORTE-MONNAIE ELECTRONIQUE
  3713.                     $compte->setSolde($compte->getSolde() - $montant);
  3714.                     $ecritureComptable->setCompte($compte);
  3715.                     $ecritureComptable->setLibelleEcriture('Règlement client');
  3716.                     $ecritureComptable->setCredit($montant);
  3717.                     $ecritureComptable->setSolde($compte->getSolde());
  3718.                     $ecritureComptable->setLaDate($payment->getLaDate());
  3719.                     $ecritureComptable->setNumeroPiece($commande->getNumero());
  3720.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  3721.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  3722.                     $em->persist($ecritureComptable);
  3723.                 }
  3724.                 } //Fin condition ecriture comptable automatique
  3725.                 $em->flush();
  3726.                  $this->addFlash(
  3727.                         'success',
  3728.                         'Enregistrement effectué'
  3729.                     );
  3730.             }
  3731.         
  3732.         
  3733.        return $this->render('admin/new_payment.html.twig', [
  3734.            'boutique' => $boutique,
  3735.            'commande' => $commande,
  3736.            'paymentMethods' => $paymentMethods,
  3737.            'factures' => $factures,
  3738.            'userBoutique' => $userBoutique
  3739.         ]);
  3740.     
  3741.    }
  3742.     
  3743.     
  3744.     
  3745.     //bill_credit
  3746.     /**
  3747.      * @Route("/{slug}/bill-credits", name="admin.bill_credits")
  3748.      * @return \Symfony\Component\HttpFoundation\Response
  3749.      */
  3750.     public function billCreditsActionRequest $requestBoutique $boutique)
  3751.     {
  3752.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3753.            return $this->redirectToRoute('security_login');
  3754.         }      
  3755.         $em $this->getDoctrine()
  3756.                     ->getManager();
  3757.     
  3758.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  3759.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  3760.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  3761.         
  3762.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  3763.         $startMonth $intervalleMois['debut'];
  3764.         $endMonth $intervalleMois['fin'];
  3765.         
  3766.         $billCredits  $em->getRepository(Commande::class)
  3767.                         ->commandeParDateEtType($boutique->getId(), 'bill_credit'$dateDebut$dateFin);
  3768.         
  3769.         $startYear date('Y-01-01');
  3770.         $endYear date('Y-12-31');
  3771.         $user $this->getUser();
  3772.         $userBoutique $em->getRepository(UserBoutique::class)
  3773.                         ->findOneBy(
  3774.                             array(
  3775.                             'user' => $user->getId(),
  3776.                             'boutique' => $boutique->getId()
  3777.                             )
  3778.                         );
  3779.         if('POST' == $request->getMethod()){
  3780.             $dateDebut $_POST['dateDebut'];
  3781.             $dateFin $_POST['dateFin'];
  3782.             
  3783.             $dateDebut = new \DateTime($dateDebut);
  3784.             $dateFin = new \DateTime($dateFin);
  3785.             
  3786.             $billCredits  $em->getRepository(Commande::class)
  3787.                         ->commandeParDateEtType($boutique->getId(), 'bill_credit'$dateDebut$dateFin);
  3788.             
  3789.             
  3790.             return $this->render('admin/bill_credits_table_content.html.twig', [
  3791.                'boutique' => $boutique,
  3792.                'billCredits' => $billCredits,
  3793.                'userBoutique' => $userBoutique
  3794.             ]);
  3795.             
  3796.         }
  3797.     
  3798.     
  3799.         return $this->render('admin/bill_credits.html.twig', [
  3800.            'boutique' => $boutique,
  3801.            'billCredits' => $billCredits,
  3802.            'dateDebut' => $dateDebut,
  3803.            'dateFin' => $dateFin,
  3804.            'startMonth' => $startMonth,
  3805.            'endMonth' => $endMonth,
  3806.            'startYear' => $startYear,
  3807.            'endYear' => $endYear,
  3808.            'userBoutique' => $userBoutique
  3809.         ]);
  3810.     }
  3811.     
  3812.     //Sales
  3813.     /**
  3814.      * @Route("/{slug}/proposals/new", name="admin.new_proposal")
  3815.      * @return \Symfony\Component\HttpFoundation\Response
  3816.      */
  3817.     public function newProposalsActionRequest $requestBoutique $boutique)
  3818.     {
  3819.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3820.            return $this->redirectToRoute('security_login');
  3821.         }  
  3822.         $em $this->getDoctrine()
  3823.                     ->getManager();
  3824.         
  3825.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  3826.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  3827.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  3828.         
  3829.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  3830.         $startMonth $intervalleMois['debut'];
  3831.         $endMonth $intervalleMois['fin'];
  3832.         
  3833.         $proposals  $em->getRepository(Commande::class)
  3834.                         ->commandeParDateEtType($boutique->getId(), 'proposal'$dateDebut$dateFin);
  3835.         
  3836.         $startYear date('Y-01-01');
  3837.         $endYear date('Y-12-31');
  3838.         $user $this->getUser();
  3839.         $userBoutique $em->getRepository(UserBoutique::class)
  3840.                         ->findOneBy(
  3841.                             array(
  3842.                             'user' => $user->getId(),
  3843.                             'boutique' => $boutique->getId()
  3844.                             )
  3845.                         );
  3846.         if('POST' == $request->getMethod()){
  3847.             $dateDebut $_POST['dateDebut'];
  3848.             $dateFin $_POST['dateFin'];
  3849.             
  3850.             $dateDebut = new \DateTime($dateDebut);
  3851.             $dateFin = new \DateTime($dateFin);
  3852.             
  3853.             $proposals  $em->getRepository(Commande::class)
  3854.                         ->commandeParDateEtType($boutique->getId(), 'proposal'$dateDebut$dateFin);
  3855.             
  3856.             
  3857.             return $this->render('admin/proposals_table_content.html.twig', [
  3858.                'boutique' => $boutique,
  3859.                'proposals' => $proposals
  3860.             ]);
  3861.             
  3862.         }
  3863.     
  3864.         return $this->render('admin/nouvelle_commande.html.twig', [
  3865.            'boutique' => $boutique,
  3866.            'proposals' => $proposals,
  3867.            'dateDebut' => $dateDebut,
  3868.            'dateFin' => $dateFin,
  3869.            'startMonth' => $startMonth,
  3870.            'endMonth' => $endMonth,
  3871.            'startYear' => $startYear,
  3872.            'endYear' => $endYear,
  3873.            'userBoutique' => $userBoutique
  3874.         ]);
  3875.     }
  3876.     
  3877.     //Sales
  3878.     /**
  3879.      * @Route("/{slug}/sales", name="admin.sales")
  3880.      * @return \Symfony\Component\HttpFoundation\Response
  3881.      */
  3882.     public function salesActionRequest $requestChiffreEnLettre $chiffreEnLettreBoutique $boutique$type 'Invoice')
  3883.     {
  3884.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3885.            return $this->redirectToRoute('security_login');
  3886.         }      
  3887.         $em $this->getDoctrine()
  3888.                     ->getManager();
  3889.         $produits  $em->getRepository(Produit::class)
  3890.                         ->findByBoutique($boutique);
  3891.         $modeleReglements $em->getRepository(ModeleReglement::class)
  3892.                                 ->findByBoutique($boutique);        
  3893.         $tiers $em->getRepository(Tiers::class)
  3894.                                 ->findByBoutique($boutique);        
  3895.         
  3896.         $user $this->getUser();
  3897.     
  3898.         $ok_soumission '';
  3899.         $error '';
  3900.         
  3901.         
  3902.         if($request->getMethod() == 'POST'){
  3903.             $typeFacture $_POST['typeFacture'];
  3904.             $modeleReglement $_POST['modeleReglement'];
  3905.             $client $_POST['client'];
  3906.             $dateCommande $_POST['dateCommande'];
  3907.             $montantHT $_POST['montantHT'];
  3908.             $montantTVA $_POST['montantTVA'];
  3909.             $montantTTC $_POST['montantTTC'];
  3910.             $listeProduits json_decode($_POST['listeProduits']);
  3911.             
  3912.             $commande = new Commande;
  3913.             $commande->setBoutique($boutique);
  3914.             $client $em->getRepository(Tiers::class)
  3915.                         ->findOneById($client);
  3916.             if(null !== $client){
  3917.                 
  3918.                 $commande->setTiers($client);
  3919.             }
  3920.             
  3921.             $laDate = new \DateTime($dateCommande);
  3922.             $commande->setLaDate($laDate);
  3923.             $commande->setTotalHT($montantHT);
  3924.             $commande->setTotalTVA($montantTVA);
  3925.             $commande->setTotalTTC($montantTTC);
  3926.             $montantlettre strtoupper($chiffreEnLettre->Conversion($montantTTC));
  3927.             $commande->setMontantEnLettre($montantlettre);
  3928.             $commande->setTypeFacture($typeFacture);
  3929.             $em->persist($commande);
  3930.             $em->flush();
  3931.             $produitCommandes = array();
  3932.             foreach($listeProduits as $listeProduit){
  3933.                 $listeProduit = (array)$listeProduit;
  3934.                 $leProduit $em->getRepository(Produit::class)->findOneById($listeProduit['idProduit']);
  3935.                 
  3936.                 $produitCommande = new ProduitCommande;
  3937.                 $produitCommande->setProduit($leProduit);
  3938.                 $produitCommande->setCommande($commande);
  3939.                 $produitCommande->setQuantite($listeProduit['quantite']);
  3940.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  3941.                 $produitCommande->setRemise($listeProduit['reduction']);
  3942.                 $produitCommande->setTotalHT($listeProduit['totalHT']);
  3943.                 $produitCommande->setTotalTVA($listeProduit['totalTVA']);
  3944.                 $produitCommande->setTotalTTC($listeProduit['totalTTC']);
  3945.                 $em->persist($produitCommande);
  3946.                 array_push($produitCommandes$produitCommande);
  3947.                 
  3948.             }
  3949.             $em->flush();
  3950.             return $this->render('admin/facture.html.twig', [
  3951.                    'boutique' => $boutique,
  3952.                    'commande' => $commande,
  3953.                    'typeFacture' => $typeFacture,
  3954.                    'client' => $client,
  3955.                    'produitCommandes' => $produitCommandes,
  3956.                    'listeProduit' => $listeProduit,
  3957.                    'montantHT' => $montantHT,
  3958.                    'montantTVA' => $montantTVA,
  3959.                    'montantTTC' => $montantTTC,
  3960.                    'userBoutique' => $userBoutique
  3961.                 ]);
  3962.             
  3963.             
  3964.         }
  3965.     
  3966.         return $this->render('admin/nouvelle_commande.html.twig', [
  3967.            'boutique' => $boutique,
  3968.            'produits' => $produits,
  3969.            'modeleReglements' => $modeleReglements,
  3970.            'tiers' => $tiers,
  3971.            'userBoutique' => $userBoutique
  3972.         ]);
  3973.     }
  3974.     
  3975.     //Vente
  3976.     /**
  3977.      * @Route("/{slug}/new-sale/{type}", name="admin.new_sale")
  3978.      * @return \Symfony\Component\HttpFoundation\Response
  3979.      */
  3980.     public function newSaleActionRequest $requestChiffreEnLettre $chiffreEnLettreBoutique $boutique$type 'invoice')
  3981.     {
  3982.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  3983.            return $this->redirectToRoute('security_login');
  3984.         }      
  3985.         
  3986.         $em $this->getDoctrine()
  3987.                     ->getManager();
  3988.         $produits  $em->getRepository(Produit::class)
  3989.                         ->findByBoutique($boutique);
  3990.         $modeleReglements $em->getRepository(ModeleReglement::class)
  3991.                                 ->findByBoutique($boutique);        
  3992.         $tiers $em->getRepository(Tiers::class)
  3993.                                 ->findByBoutique($boutique);        
  3994.         
  3995.         $user $this->getUser();
  3996.         $vehicules = array( 222328);
  3997.         
  3998.         $userBoutique $em->getRepository(UserBoutique::class)
  3999.                         ->findOneBy(
  4000.                             array(
  4001.                             'user' => $user->getId(),
  4002.                             'boutique' => $boutique->getId()
  4003.                             )
  4004.                         );
  4005.     
  4006.         $ok_soumission '';
  4007.         $error '';
  4008.         
  4009.         $editMode 'new';
  4010.         $responseFNE '';
  4011.         $natureFacture '';
  4012.         if($request->getMethod() == 'POST'){
  4013.             $typeFacture $_POST['typeFacture'];
  4014.             $modeleReglement $_POST['modeleReglement'];
  4015.             $client $_POST['client'];
  4016.             $moyenDePaiement $_POST['moyenDePaiement'];
  4017.             $clientFinalNom $_POST['clientFinalNom'];
  4018.             $clientFinalNumero $_POST['clientFinalNumero'];
  4019.             $dateCommande $_POST['dateCommande'];
  4020.             $montantHT = (float)$_POST['montantHT'];
  4021.             $remise =   (float)$_POST['remise'];
  4022.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  4023.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  4024.             $montantTVA = (float)$_POST['montantTVA'];
  4025.             $montantTTC = (float)$_POST['montantTTC'];
  4026.             $titreDocument $_POST['titreDocument'];
  4027.             $valableJusquAu $_POST['valableJusquAu'];
  4028.             $observation $_POST['observation'];
  4029.             $matriculeVehicule $_POST['matriculeVehicule'];
  4030.             $marqueVehicule $_POST['marqueVehicule'];
  4031.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  4032.             $listeProduits json_decode($_POST['listeProduits']);
  4033.             $natureFacture $_POST['natureFacture'];
  4034.             
  4035.             $commande = new Commande;
  4036.             $commande->setNatureFacture($natureFacture);
  4037.             $commande->setClientFinalNom($clientFinalNom);
  4038.             $commande->setClientFinalNumero($clientFinalNumero);
  4039.             $commande->setCreePar($user);
  4040.             $commande->setBoutique($boutique);
  4041.             $client $em->getRepository(Tiers::class)
  4042.                         ->findOneById($client);
  4043.             if(null !== $client){
  4044.                 
  4045.                 $commande->setTiers($client);
  4046.             }
  4047.             
  4048.             $laDate = new \DateTime($dateCommande);
  4049.             $commande->setLaDate($laDate);
  4050.             $commande->setMoyenDePaiement($moyenDePaiement);
  4051.             $commande->setMatriculeVehicule($matriculeVehicule);
  4052.             $commande->setMarqueVehicule($marqueVehicule);
  4053.             $commande->setKilometrageVehicule($kilometrageVehicule);
  4054.             
  4055.             $commande->setTotalHT($montantHT);
  4056.             $commande->setRemise($remise);
  4057.             $commande->setRemisePourcentage($remisePourcentage);
  4058.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  4059.             if($commande->getNatureFacture() == 'purchase'){
  4060.                 $commande->setTotalTVA(0);
  4061.                 $commande->setTotalTTC($totalHTApresRemise);
  4062.                 $commande->setResteAPayer($totalHTApresRemise);
  4063.             }else{
  4064.                 $commande->setTotalTVA($montantTVA);
  4065.                 $commande->setTotalTTC($montantTTC);
  4066.                 $commande->setResteAPayer($montantTTC);
  4067.             }
  4068.             $commande->setTitreDocument($titreDocument);
  4069.             $commande->setObservation($observation);
  4070.             if($valableJusquAu != ''){
  4071.                 $commande->setValableJusquAu(new \DateTime($valableJusquAu));
  4072.             }
  4073.             $montantlettre strtoupper($chiffreEnLettre->Conversion($commande->getTotalTTC()));
  4074.             $commande->setMontantEnLettre($montantlettre);
  4075.             $commande->setTypeFacture($type);
  4076.             
  4077.             if($commande->getNumero() == ''){
  4078.                 $commande->setNumero($this->getNumero($type$boutique));
  4079.             }
  4080.             
  4081.             $em->persist($commande);
  4082.             $em->flush();
  4083.             $produitCommandes = array();
  4084.             $coutDeRevientCommande 0;
  4085.             foreach($listeProduits as $listeProduit){
  4086.                 $listeProduit = (array)$listeProduit;
  4087.                 $idDuProduit $listeProduit['idProduit'];
  4088.                 
  4089.                 if($idDuProduit == ''){
  4090.                     //Produit inexistant, il faut le créer
  4091.                     $leProduit = new Produit;
  4092.                     $leProduit->setNom($listeProduit['nomProduit']);
  4093.                     $em->persist($leProduit);
  4094.                     $em->flush();
  4095.                     
  4096.                     //TVA
  4097.                     if($listeProduit['tva'] > 0){
  4098.                         $tva $em->getRepository(TVA::class)
  4099.                                     ->findOneBy(
  4100.                                         array(
  4101.                                             'boutique' => $boutique->getId(),
  4102.                                             'valeur'  => $listeProduit['tva']
  4103.                                         )
  4104.                                     );
  4105.                         if($tva == null){
  4106.                             $tva = new TVA;
  4107.                             $tva->setValeur($listeProduit['tva']);
  4108.                             $em->persist($tva);
  4109.                             $em->flush();
  4110.                         }
  4111.                         
  4112.                         $leProduit->setTva($tva);
  4113.                         
  4114.                     }else{
  4115.                         $tva $em->getRepository(TVA::class)
  4116.                                     ->findOneBy(
  4117.                                         array(
  4118.                                             'boutique' => $boutique->getId(),
  4119.                                             'estPrincipale'  => true
  4120.                                         )
  4121.                                     );
  4122.                         $leProduit->setTva($tva);
  4123.                     }
  4124.                     //Prix
  4125.                     $produitP = new PrixProduit;
  4126.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  4127.                     $leProduit->addPrix($produitP);
  4128.                     $leProduit->setPrixActuel($produitP);
  4129.                     $leProduit->setBoutique($boutique);
  4130.                     $em->persist($produitP);
  4131.                     $em->persist($leProduit);
  4132.                     $em->flush();
  4133.                     
  4134.                 } else{
  4135.                     $leProduit $em->getRepository(Produit::class)
  4136.                         ->findOneById($idDuProduit);
  4137.                 }
  4138.                 
  4139.                 
  4140.                 $produitCommande = new ProduitCommande;
  4141.                 $produitCommande->setProduit($leProduit);
  4142.                 $produitCommande->setCommande($commande);
  4143.                 $quantite = (float)$listeProduit['quantite'];
  4144.                 $produitCommande->setQuantite($quantite);
  4145.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  4146.                 $prixDeRevient = (float)$listeProduit['prixDeRevient'];
  4147.                 $produitCommande->setCoutDeRevient($prixDeRevient);
  4148.                 $totalCoutDeRevient $prixDeRevient $quantite;
  4149.                 $produitCommande->setTotalCoutDeRevient($totalCoutDeRevient);
  4150.                 $coutDeRevientCommande += $totalCoutDeRevient;
  4151.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  4152.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  4153.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  4154.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  4155.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  4156.                 
  4157.                 $produitCommande->setTva((float)$listeProduit['tva']);
  4158.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  4159.                 if($produitCommande->getProduit()->getTypeProduit() != null){
  4160.                     if($produitCommande->getProduit()->getTypeProduit()->getNomInterne() == 'produit'){
  4161.                         if($type == 'invoice'){
  4162.                             
  4163.                             
  4164.                             $leProduit->setStockDisponible($leProduit->getStockDisponible() - $produitCommande->getQuantite());
  4165.                         }
  4166.                     }
  4167.                 }
  4168.                 $em->persist($produitCommande);
  4169.                 array_push($produitCommandes$produitCommande);
  4170.                 
  4171.             } // Fin foreach($listeProduits as $listeProduit)
  4172.              
  4173.             $commande->setCoutDeRevient($coutDeRevientCommande);
  4174.             $em->flush();
  4175.             
  4176.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4177.             $content '';
  4178.             switch($type){
  4179.                 case 'invoice':
  4180.                     //Facture FNE qui
  4181.                     
  4182.                     if($boutique->getApiKeyFNE() != ''){
  4183.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  4184.                             $responseFNE $this->genererFactureFNE($boutique->getSlug(), $commande->getId(), $natureFacture);
  4185.                         }
  4186.                     
  4187.                     }
  4188.                     $commande->setEtat(Commande::ETAT_FACTURE_PROVISOIRE);
  4189.                     
  4190.                     $content $this->renderView('pdf/facture.html.twig', [
  4191.                         'boutique' => $boutique,
  4192.                         'facture' => $commande,
  4193.                         'produits' => $produitCommandes,
  4194.                         'natureFacture' => $natureFacture,
  4195.                         'vehicules' => $vehicules
  4196.                     ]);
  4197.                     
  4198.                     if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  4199.                         $this->genererEcritureComptableDeVente($boutique$commande);
  4200.                         //Ecriture comptable
  4201.                     }
  4202.                     $em->flush();
  4203.                     
  4204.                 break;
  4205.                 
  4206.                 case 'proposal':
  4207.                     $commande->setEtat(Commande::ETAT_DEVIS_PROVISOIRE);
  4208.                     
  4209.                     $content $this->renderView('pdf/devis.html.twig', [
  4210.                         'boutique' => $boutique,
  4211.                         'facture' => $commande,
  4212.                         'produits' => $produitCommandes,
  4213.                         'vehicules' => $vehicules
  4214.                     ]);
  4215.                 break;
  4216.                 
  4217.                 
  4218.                 case 'bill_credit':
  4219.                     
  4220.                     $content $this->renderView('pdf/facture_avoir.html.twig', [
  4221.                         'boutique' => $boutique,
  4222.                         'facture' => $commande,
  4223.                         'produits' => $produitCommandes,
  4224.                         'vehicules' => $vehicules
  4225.                     ]);
  4226.                     
  4227.                 break;
  4228.             }
  4229.             
  4230.             
  4231.             $pdf->writeHTML($content);
  4232.             $name $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(110000).'.pdf';
  4233.             $lienPhysique $commande->getUploadRootDir().$name;
  4234.                 
  4235.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4236.             $pdf->output($lienPhysique'F');
  4237.             
  4238.             $em->flush();
  4239.             
  4240.             return $this->render('admin/response_new_sale.html.twig', [
  4241.                    'boutique' => $boutique,
  4242.                    'commande' => $commande,
  4243.                    'responseFNE' => $responseFNE,
  4244.                    'vehicules' => $vehicules
  4245.                    
  4246.                 ]);
  4247.             
  4248.             
  4249.             /*
  4250.             return $this->render('admin/facture.html.twig', [
  4251.                    'boutique' => $boutique,
  4252.                    'commande' => $commande,
  4253.                    'typeFacture' => $typeFacture,
  4254.                    'client' => $client,
  4255.                    'produitCommandes' => $produitCommandes,
  4256.                    'listeProduit' => $listeProduit,
  4257.                    'montantHT' => $montantHT,
  4258.                    'montantTVA' => $montantTVA,
  4259.                    'montantTTC' => $montantTTC,
  4260.                    'userBoutique' => $userBoutique
  4261.                 ]);
  4262.             */
  4263.             
  4264.         }
  4265.     
  4266.         return $this->render('admin/nouvelle_commande.html.twig', [
  4267.            'boutique' => $boutique,
  4268.            'produits' => $produits,
  4269.            'modeleReglements' => $modeleReglements,
  4270.            'tiers' => $tiers,
  4271.            'editMode' => $editMode,
  4272.            'userBoutique' => $userBoutique,
  4273.            'responseFNE' => $responseFNE,
  4274.            'type' => $type,
  4275.            'vehicules' => $vehicules
  4276.           
  4277.         ]);
  4278.     }
  4279.     public function genererEcritureComptableDeVente($boutique$commande)
  4280.     {
  4281.         $em $this->getDoctrine()
  4282.                     ->getManager();
  4283.                     
  4284.         $groupeEcritureComptable = new GroupeEcritureComptable;
  4285.         $groupeEcritureComptable->setBoutique($boutique);
  4286.         $libelle 'Vente client';
  4287.         if($commande->getTiers() != null){
  4288.             $libelle 'Vente à ' $commande->getTiers()->getNom();
  4289.         }
  4290.         $groupeEcritureComptable->setLibelleEcriture($libelle);
  4291.         $groupeEcritureComptable->setDebit($commande->getTotalTTC());
  4292.         $groupeEcritureComptable->setCredit($commande->getTotalTTC());
  4293.         $groupeEcritureComptable->setLaDate($commande->getLaDate());
  4294.         $groupeEcritureComptable->setNumeroPiece($commande->getNumero());
  4295.         $groupeEcritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4296.         $groupeEcritureComptable->setMois($commande->getLaDate()->format('m'));
  4297.         $em->persist($groupeEcritureComptable);
  4298.         $em->flush();
  4299.         //Débit
  4300.         $ecritureComptable = new EcritureComptable;
  4301.         $ecritureComptable->setBoutique($boutique);
  4302.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4303.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4304.         $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4305.         $compteClient $em->getRepository(Compte::class)
  4306.                                     ->findOneBy(
  4307.                                         array(
  4308.                                             'numero' => '411',
  4309.                                             'boutique' =>$boutique->getId()
  4310.                                         )
  4311.                                     );
  4312.         $compteClient->setSolde($compteClient->getSolde() + $commande->getTotalTTC());
  4313.         $ecritureComptable->setCompte($compteClient);
  4314.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4315.         $nomClient '';
  4316.         if($commande->getTiers() != null){
  4317.             $nomClient =  ' à '.$commande->getTiers()->getNom();
  4318.         }
  4319.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4320.         $ecritureComptable->setDebit($commande->getTotalTTC());
  4321.         $ecritureComptable->setSolde($compteClient->getSolde());
  4322.         $ecritureComptable->setLaDate($commande->getLaDate());
  4323.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4324.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4325.                     
  4326.         $em->persist($ecritureComptable);
  4327.         $ecritureComptable = new EcritureComptable;
  4328.         $ecritureComptable->setBoutique($boutique);
  4329.         $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4330.         
  4331.         //Crédit
  4332.         $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4333.         $compte $em->getRepository(Compte::class)
  4334.                     ->findOneBy(
  4335.                         array(
  4336.                                 'numero' => '701',
  4337.                                 'boutique' => $boutique->getId()
  4338.                             )
  4339.                         );
  4340.         
  4341.         $compte->setSolde($compte->getSolde() - $commande->getTotalHTApresRemise() );
  4342.         $ecritureComptable->setCompte($compte);
  4343.         $ecritureComptable->setNumeroPiece($commande->getNumero());
  4344.                     
  4345.         $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4346.         $ecritureComptable->setCredit($commande->getTotalHTApresRemise());
  4347.         $ecritureComptable->setSolde($compte->getSolde());
  4348.         $ecritureComptable->setLaDate($commande->getLaDate());
  4349.         $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4350.         $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4351.                     
  4352.                     
  4353.         $em->persist($ecritureComptable);
  4354.         //TVA pour une entreprise qui facture la TVA
  4355.         if($commande->getTotalTVA() > 0){
  4356.             $ecritureComptable = new EcritureComptable;
  4357.             $ecritureComptable->setBoutique($boutique);
  4358.             $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  4359.                         
  4360.             $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  4361.             $compte $em->getRepository(Compte::class)
  4362.                             ->findOneBy(
  4363.                                 array(
  4364.                                     'numero' => '4431',
  4365.                                     'boutique' => $boutique->getId()
  4366.                                 )
  4367.                             );
  4368.             $compte->setSolde($compte->getSolde() - $commande->getTotalTVA() );
  4369.             $ecritureComptable->setCompte($compte);
  4370.             $ecritureComptable->setNumeroPiece($commande->getNumero());
  4371.                         
  4372.             $ecritureComptable->setLibelleEcriture('Vente'.$nomClient);
  4373.             $ecritureComptable->setCredit($commande->getTotalTVA());
  4374.             $ecritureComptable->setSolde($compte->getSolde());
  4375.             $ecritureComptable->setLaDate($commande->getLaDate());
  4376.             $ecritureComptable->setAnnee($commande->getLaDate()->format('Y'));
  4377.             $ecritureComptable->setMois($commande->getLaDate()->format('m'));
  4378.                     
  4379.                         
  4380.             $em->persist($ecritureComptable);
  4381.         }
  4382.         $em->flush();
  4383.     }
  4384.     
  4385.     /**
  4386.       * @Route("/{slug}/generer-facture-fne/{id}", name="admin_url_generer_facture_fne")
  4387.     */
  4388.     public function urlGenererFactureFNEAction(Request $request$slug$id)
  4389.     {
  4390.         
  4391.         $em $this->getDoctrine()
  4392.                     ->getManager();
  4393.         $boutique $em->getRepository(Boutique::class)
  4394.                         ->findOneBySlug($slug);
  4395.         $commande $em->getRepository(Commande::class)
  4396.                         ->findOneById($id);
  4397.         
  4398.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4399.                             ->findByCommande($commande);
  4400.         $reponse '';
  4401.         $vehicules = array( 222328);
  4402.         if($boutique->getApiKeyFNE() != ''){
  4403.             $reponse $this->genererFactureFNE($slug$id$commande->getNatureFacture());
  4404.             //$reponse = json_decode($reponse);
  4405.             if(isset($reponse['invoice']['id'])){
  4406.                 $commande->setIdFactureFNE($reponse['invoice']['id']);
  4407.             }
  4408.             if(isset($reponse['token'])){
  4409.                 $commande->seTtokenFNE($reponse['token']);
  4410.             }
  4411.             if(isset($reponse['balance_sticker'])){
  4412.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  4413.             }
  4414.             if(isset($reponse['balance_sticker'])){
  4415.                 $boutique->setSoldeTimbreFNE($reponse['balance_sticker']);
  4416.             }
  4417.             if(isset($reponse['balance_funds'])){
  4418.                 $boutique->setSoldeTimbreFNE($reponse['balance_funds']);
  4419.             }
  4420.             
  4421.             
  4422.             $em->flush();
  4423.         
  4424.         }
  4425.         
  4426.         $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'fr');
  4427.     
  4428.         $content $this->renderView('pdf/facture.html.twig', [
  4429.                     'boutique' => $boutique,
  4430.                     'facture' => $commande,
  4431.                     'produits' => $produitCommandes,
  4432.                     'natureFacture' => $commande->getNatureFacture(),
  4433.                     'vehicules' => $vehicules
  4434.                 ]);
  4435.         $pdf->writeHTML($content);
  4436.         $name $commande->getTypeFacture().$commande->getId().time().$boutique->getId().rand(110000).'.pdf';
  4437.         $lienPhysique $commande->getUploadRootDir().$name;
  4438.                 
  4439.         $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4440.         $pdf->output($lienPhysique'F');
  4441.         $em->flush();
  4442.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  4443.         return $this->render('admin/admin_generer_facture_fne.html.twig', [
  4444.            'boutique' => $boutique,
  4445.            'content' => $content,
  4446.            'userBoutique' => $userBoutique
  4447.         ]);
  4448.         
  4449.     }
  4450.     public function genererFactureFNE($slug$idCommande$invoiceType 'sale')
  4451.     {
  4452.         
  4453.         $em $this->getDoctrine()
  4454.                     ->getManager();
  4455.         $boutique $em->getRepository(Boutique::class)
  4456.                         ->findOneBySlug($slug);
  4457.         $commande $em->getRepository(Commande::class)
  4458.                         ->findOneById($idCommande);
  4459.         $user $this->getUser();
  4460.         $userBoutique $em->getRepository(UserBoutique::class)
  4461.                         ->findOneBy(
  4462.                             array(
  4463.                                 'user' => $user,
  4464.                                 'boutique' => $boutique
  4465.                             )
  4466.                         );
  4467.         $url $boutique->getUrlFNEDeBase().'/external/invoices/sign';
  4468.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4469.                                 ->findByCommande($commande);
  4470.                                 
  4471.         $globalCustomTaxes = array();
  4472.         
  4473.         $items = array();
  4474.         foreach($produitCommandes as $produitCommande){
  4475.             $tvas = array();
  4476.             $customTaxes = array();
  4477.             if($invoiceType == 'sale'){
  4478.                 if($produitCommande->getProduit()->getTVA() != null){
  4479.                     array_push($tvas$produitCommande->getProduit()->getTVA()->getLibelleInterne());
  4480.                     $nested = array(
  4481.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  4482.                         'amount' =>$produitCommande->getProduit()->getTVA()->getValeur()
  4483.                     );
  4484.                     $nested  json_encode($nested);
  4485.                     array_push($customTaxes$nested);
  4486.                 }
  4487.             }else{
  4488.                 array_push($tvas'TVAD');
  4489.                     $nested = array(
  4490.                         'name' => $produitCommande->getProduit()->getTVA()->getLibelleInterne(),
  4491.                         'amount' =>0
  4492.                     );
  4493.                     $nested  json_encode($nested);
  4494.                     array_push($customTaxes$nested);
  4495.             }
  4496.             
  4497.             
  4498.             
  4499.             $item = array(
  4500.                     //'taxes' => $tvas,
  4501.                     //'customTaxes' => $customTaxes,
  4502.                     'reference' => $produitCommande->getProduit()->getReference(),
  4503.                     'description' =>  $produitCommande->getProduit()->getNom(),
  4504.                     'quantity' => $produitCommande->getQuantite(),
  4505.                     'amount' => $produitCommande->getPrix(),
  4506.                     'discount' => $produitCommande->getRemisePourcentage(),
  4507.                     'measurementUnit' => $produitCommande->getProduit()->getUniteDeMesure()
  4508.             );
  4509.             if($invoiceType == 'sale'){
  4510.                 $item['taxes'] = $tvas;
  4511.             }
  4512.             array_push($items$item);
  4513.         }
  4514.         
  4515.         $clientNcc =  '';
  4516.         if($invoiceType == 'sale'){
  4517.             if($commande->getTiers() != null){
  4518.                 $clientNcc str_replace(' '''$commande->getTiers()->getCodeTVA());
  4519.             }
  4520.             
  4521.         }
  4522.         $template 'B2C';
  4523.         $clientCompanyName $commande->getClientFinalNom();
  4524.         $clientPhone str_replace(' '''$commande->getClientFinalNumero());
  4525.         $clientEmail '';
  4526.         if($commande->getTiers() != null){
  4527.             $template $commande->getTiers()->getTypeClient();
  4528.             $clientCompanyName $commande->getTiers()->getNom();
  4529.             $clientPhone str_replace(' '''$commande->getTiers()->getTelephone());
  4530.             $clientEmail $commande->getTiers()->getEmail();
  4531.         }
  4532.         $content = array(
  4533.             
  4534.             'invoiceType' => $invoiceType ,
  4535.             'paymentMethod'=> $commande->getMoyenDePaiement(),
  4536.             'template' => $template,
  4537.             'isRne' => false,
  4538.             'clientNcc' => $clientNcc,
  4539.             'clientCompanyName' => $clientCompanyName,
  4540.             'clientPhone' => $clientPhone,
  4541.             'clientEmail' => $clientEmail,
  4542.             'clientSellerName' => $user->getNomComplet(),
  4543.             'pointOfSale' => $userBoutique->getNomPointDeVenteFNE(),
  4544.             'establishment' =>  $userBoutique->getNomEtablissementFNE(),
  4545.             'commercialMessage' => $commande->getTitreDocument(),
  4546.             'footer' => 'Arrêtée la presente facture à la somme de '.$commande->getMontantEnLettre().' '.$boutique->getSettings()->getDevise(),
  4547.             //'foreignCurrency' => '',
  4548.             //'foreignCurrencyRate' => 0,
  4549.             'items' => $items,
  4550.             
  4551.             'discount' => $commande->getRemisePourcentage()
  4552.         );
  4553.         
  4554.         if($invoiceType == 'sale'){
  4555.             $content['customTaxes'] = $globalCustomTaxes;
  4556.         }
  4557.         
  4558.         $content json_encode($content);
  4559.         $ch curl_init($url);
  4560.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  4561.         curl_setopt($chCURLOPT_HTTPHEADER, ['Content-Type: application/json''Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  4562.         curl_setopt($chCURLOPT_POSTFIELDS$content);
  4563.         $serverOutput curl_exec($ch);
  4564.         curl_close($ch);
  4565.         
  4566.         $response = new JsonResponse;
  4567.         
  4568.         
  4569.         //$response->setContent(json_encode($serverOutput));
  4570.         //return $response;
  4571.         $serverOutput json_decode($serverOutputtrue);
  4572.         if(isset($serverOutput['invoice'])){
  4573.             $commande->setIdFactureFNE($serverOutput['invoice']['id']);
  4574.             $commande->seTtokenFNE($serverOutput['token']);
  4575.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4576.             if(isset($serverOutput['balance_funds'])){
  4577.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  4578.             }
  4579.             if(isset($serverOutput['balance_sticker'])){
  4580.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4581.             }
  4582.             
  4583.             
  4584.             //Mettre aussi les produitCommande Ajour pour d'eventuel facture d'avoir
  4585.             
  4586.             $itemsRetournes $serverOutput['invoice']['items'];
  4587.             foreach($itemsRetournes as $itemsRetourne){
  4588.                 $pro $em->getRepository(Produit::class)
  4589.                             ->findOneBy(
  4590.                                 array(
  4591.                                     'boutique' => $boutique,
  4592.                                     'nom' => $itemsRetourne['description'],
  4593.                                     'reference' => $itemsRetourne['reference']
  4594.                                 )
  4595.                             );
  4596.                 if($pro != null){
  4597.                     $proCom $em->getRepository(ProduitCommande::class)
  4598.                             ->findOneBy(
  4599.                                 array(
  4600.                                     'commande' => $commande->getId(),
  4601.                                     'produit' => $pro->getId()
  4602.                                 )
  4603.                             );
  4604.                     if($proCom != null){
  4605.                         $proCom->setIdProduitPourFactureDAvoirFNE($itemsRetourne['id']);
  4606.                         $em->persist($proCom);
  4607.                     }
  4608.                 
  4609.                 }
  4610.             }
  4611.             
  4612.             $em->flush();
  4613.         }
  4614.         return $serverOutput;
  4615.         
  4616.     }
  4617.     
  4618.     
  4619.     /**
  4620.       * @Route("/{slug}/url-generer-facture-d-avoir-fne/{id}", name="admin_url_generer_facture_d_avoir_fne")
  4621.     */
  4622.     public function urlGenererFactureDAvoirFNEAction(Request $requestChiffreEnLettre $chiffreEnLettre$slug$id)
  4623.     {
  4624.         
  4625.         $em $this->getDoctrine()
  4626.                     ->getManager();
  4627.         $boutique $em->getRepository(Boutique::class)
  4628.                         ->findOneBySlug($slug);
  4629.         $commande $em->getRepository(Commande::class)
  4630.                         ->findOneById($id);
  4631.         $user $this->getUser();
  4632.         $userBoutique $em->getRepository(UserBoutique::class)
  4633.                         ->findOneBy(
  4634.                             array(
  4635.                                 'user' => $user,
  4636.                                 'boutique' => $boutique
  4637.                             )
  4638.                         );
  4639.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4640.                                 ->findByCommande($commande);
  4641.         $reponse '';
  4642.         
  4643.         if($request->getMethod() == 'POST'){
  4644.                 
  4645.             $chiffreEnLettre = new ChiffreEnLettre;
  4646.             if($boutique->getApiKeyFNE() != ''){
  4647.                 $reponse $this->genererFactureDAvoirFNE($chiffreEnLettre$boutique->getSlug(), $commande->getId());
  4648.             }
  4649.         }
  4650.         
  4651.         
  4652.          return $this->render('admin/url_generer_facture_d_avoir_fne.html.twig', [
  4653.            'boutique' => $boutique,
  4654.            'reponse' => $reponse,
  4655.            'userBoutique' => $userBoutique,
  4656.            'produitCommandes' => $produitCommandes
  4657.         ]);
  4658.     }
  4659.     
  4660.     public function genererFactureDAvoirFNE(ChiffreEnLettre $chiffreEnLettre$slug$id)
  4661.     {
  4662.         
  4663.         $em $this->getDoctrine()
  4664.                     ->getManager();
  4665.         $boutique $em->getRepository(Boutique::class)
  4666.                         ->findOneBySlug($slug);
  4667.         $commande $em->getRepository(Commande::class)
  4668.                         ->findOneById($id);
  4669.         $user $this->getUser();
  4670.         $userBoutique $em->getRepository(UserBoutique::class)
  4671.                         ->findOneBy(
  4672.                             array(
  4673.                                 'user' => $user,
  4674.                                 'boutique' => $boutique
  4675.                             )
  4676.                         );
  4677.         $url $boutique->getUrlFNEDeBase().'/external/invoices/'.$commande->getIdFactureFNE().'/refund';
  4678.         
  4679.         $produitCommandes $em->getRepository(ProduitCommande::class)
  4680.                                 ->findByCommande($commande);
  4681.                                 
  4682.         
  4683.             
  4684.             $items = array();
  4685.             $avoir = new Commande;
  4686.             $avoir->setBoutique($boutique);
  4687.             $avoir->setTypeFacture('bill_credit');
  4688.             $avoir->setNumero($this->getNumero('bill_credit'$boutique));
  4689.             $avoir->setTiers($commande->getTiers());
  4690.             $avoir->setIdFactureDeBase($commande->getId());
  4691.             $em->persist($avoir);
  4692.             
  4693.             $em->flush();
  4694.             $avoirProduits = array();
  4695.             foreach($produitCommandes as $produitCommande){
  4696.                     $idProduitPourFactureDAvoirFNE $_POST['idProduit'.$produitCommande->getProduit()->getId()];
  4697.                     $quantiteRetournee = (float)$_POST['quantite'.$produitCommande->getProduit()->getId()];
  4698.                 if($quantiteRetournee && $quantiteRetournee <= $produitCommande->getQuantite()){
  4699.                     $item = array(
  4700.                             'id' => $idProduitPourFactureDAvoirFNE,
  4701.                             'quantity' => $quantiteRetournee,
  4702.                     );
  4703.                     
  4704.                     array_push($items$item);
  4705.                     $avoirProduit = new ProduitCommande;
  4706.                     $avoirProduit->setCommande($avoir);
  4707.                     $avoirProduit->setProduit($produitCommande->getProduit());
  4708.                     $avoirProduit->setQuantite($quantiteRetournee);
  4709.                     $avoirProduit->setPrix($produitCommande->getPrix());
  4710.                     $totalHt $quantiteRetournee $produitCommande->getPrix();
  4711.                     
  4712.                     $totalTVA =  $produitCommande->getTotalTva() * $quantiteRetournee/$produitCommande->getQuantite();
  4713.                     $totalTTC $totalHt $totalTVA;
  4714.                     $avoirProduit->setTotalHT($totalHt);
  4715.                     $avoirProduit->setTva($totalTVA);
  4716.                     $avoirProduit->setTotalTTC($totalTTC);
  4717.                     $em->persist($avoirProduit);
  4718.                     array_push($avoirProduits$avoirProduit);
  4719.                     $avoir->setTotalHT($avoir->getTotalHT()+ $totalHt);
  4720.                     $avoir->setTotalHTApresRemise($avoir->getTotalHTApresRemise() + $totalHt);
  4721.                     $avoir->setTotalTTC($avoir->getTotalTTC()+ $totalTTC);
  4722.                     $avoir->setTotalTVA($avoir->getTotalTVA()+ $totalTVA);
  4723.                 }
  4724.             }
  4725.             $avoir->setmontantEnLettre($chiffreEnLettre->Conversion($avoir->getTotalTTC()));
  4726.             $em->flush();
  4727.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4728.                 
  4729.                     
  4730.             $pdfContent $this->renderView('pdf/facture_avoir.html.twig', [
  4731.                         'boutique' => $boutique,
  4732.                         'facture' => $avoir,
  4733.                         'produits' => $avoirProduits,
  4734.                         'commandeDeBasse' => $commande
  4735.                 ]);
  4736.             $pdf->writeHTML($pdfContent);
  4737.             $name $avoir->getTypeFacture().$avoir->getId().time().$boutique->getId().rand(110000).'.pdf';
  4738.             $lienPhysique $avoir->getUploadRootDir().$name;
  4739.                 
  4740.             $avoir->setLienPDF($this->getDomain().'/pdf478njkp01/'.$name);
  4741.             $pdf->output($lienPhysique'F');
  4742.             // Fin facture PDF
  4743.             
  4744.             $em->flush();
  4745.             $content = array(
  4746.                 'id' => $commande->getIdFactureFNE(),
  4747.                 'items' => $items
  4748.             );
  4749.             
  4750.             
  4751.             $content json_encode($content);
  4752.             
  4753.             $ch curl_init($url);
  4754.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  4755.             curl_setopt($chCURLOPT_HTTPHEADER, ['Content-Type: application/json''Authorization: Bearer '.$boutique->getApiKeyFNE()]);
  4756.             curl_setopt($chCURLOPT_POSTFIELDS$content);
  4757.             $serverOutput curl_exec($ch);
  4758.             curl_close($ch);
  4759.             
  4760.             $response = new JsonResponse;
  4761.             
  4762.             
  4763.             //$response->setContent(json_encode($serverOutput));
  4764.             //return $response;
  4765.             $serverOutput json_decode($serverOutputtrue);
  4766.             //$commande->setIdFactureFNE($serverOutput['invoice']['id']);
  4767.             if(isset($serverOutput['token'])){
  4768.                 $avoir->seTtokenFNE($serverOutput['token']);
  4769.             }
  4770.             //$boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4771.             if(isset($serverOutput['balance_funds'])){
  4772.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_funds']);
  4773.             }
  4774.             if(isset($serverOutput['balance_sticker'])){
  4775.                 $boutique->setSoldeTimbreFNE($serverOutput['balance_sticker']);
  4776.             }
  4777.             
  4778.             
  4779.             $em->flush();
  4780.             return $serverOutput;
  4781.         
  4782.         
  4783.     }
  4784.     
  4785.     //Vente
  4786.     /**
  4787.      * @Route("/{slug}/change-sale-state/{type}/{id}/{state}", name="admin.change_sale_state")
  4788.      * @return \Symfony\Component\HttpFoundation\Response
  4789.      */
  4790.     public function changeSaleStateAction(Request $request$slug$type$id$state)
  4791.     {
  4792.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4793.            return $this->redirectToRoute('security_login');
  4794.         }
  4795.         
  4796.         $em $this->getDoctrine()
  4797.                     ->getManager();
  4798.                     
  4799.         $boutique  $em->getRepository(Boutique::class)
  4800.                         ->findOneBySlug($slug);
  4801.     
  4802.         $user $this->getUser();
  4803.         $userBoutique $em->getRepository(UserBoutique::class)
  4804.                         ->findOneBy(
  4805.                             array(
  4806.                             'user' => $user->getId(),
  4807.                             'boutique' => $boutique->getId()
  4808.                             )
  4809.                         );
  4810.         $commande  $em->getRepository(Commande::class)
  4811.                         ->findOneBy(
  4812.                             array(
  4813.                                 'boutique' => $boutique->getId(),
  4814.                                 'id' => $id
  4815.                         ));
  4816.         if($commande->getNumero() == ''){
  4817.             $commande->setNumero($this->getNumero($type$boutique));
  4818.         }
  4819.         $commande->setEtat($state);
  4820.         $em->flush();
  4821.         
  4822.         //Produit commande du devis
  4823.                     
  4824.         $produitCommandesDevis $em->getRepository(ProduitCommande::class)
  4825.                                 ->findByCommande($commande);
  4826.         //
  4827.         $produitCommandes = array();
  4828.         
  4829.         
  4830.         switch($type){
  4831.             case 'proposal':
  4832.                 
  4833.                     $facture = new  Commande;
  4834.                     $facture->setTypeFacture('invoice');
  4835.                     $facture->setNatureFacture('sale');
  4836.                     $facture->setEtat(Commande::ETAT_FACTURE_FINALISE);
  4837.                     $facture->setLaDate(new \DateTime());
  4838.                     $facture->setTotalHT($commande->getTotalHT());
  4839.                     $facture->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  4840.                     $facture->setTotalTVA($commande->getTotalTVA());
  4841.                     $facture->setTotalTTC($commande->getTotalTTC());
  4842.                     $facture->setResteAPayer($commande->getTotalTTC());
  4843.                     $facture->setCoutDeRevient($commande->getCoutDeRevient());
  4844.                     
  4845.                     $facture->setRemise($commande->getRemise());
  4846.                     $facture->setRemisePourcentage($commande->getRemisePourcentage());
  4847.                     $facture->setMontantEnLettre($commande->getMontantEnLettre());
  4848.                     $facture->setBoutique($commande->getBoutique());
  4849.                     $facture->setTiers($commande->getTiers());
  4850.                     $facture->setClientFinalNom($commande->getClientFinalNom());
  4851.                     $facture->setClientFinalNumero($commande->getClientFinalNumero());
  4852.                     
  4853.                     $facture->setNumero($this->getNumero('invoice'$boutique));
  4854.                     $em->persist($facture);
  4855.                     $em->flush();
  4856.                     $this->genererEcritureComptableDeVente($boutique$facture);
  4857.                     
  4858.                     if($boutique->getApiKeyFNE() != ''){
  4859.                         if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  4860.                             $responseFNE $this->genererFactureFNE($boutique->getSlug(), $facture->getId(), $facture->getNatureFacture());
  4861.                         }
  4862.                     
  4863.                     }
  4864.                     foreach($produitCommandesDevis as $produitCommandeDevis){
  4865.                         $prodCom = new ProduitCommande;
  4866.                         $prodCom->setProduit($produitCommandeDevis->getProduit());
  4867.                         $prodCom->setCommande($facture);
  4868.                         $prodCom->setQuantite($produitCommandeDevis->getQuantite());
  4869.                         $prodCom->setPrix($produitCommandeDevis->getPrix());
  4870.                         $prodCom->setRemise($produitCommandeDevis->getRemise());
  4871.                         $prodCom->setTotalHT($produitCommandeDevis->getTotalHT());
  4872.                         $prodCom->setTotalHTApresRemise($produitCommandeDevis->getTotalHTApresRemise());
  4873.                         $prodCom->setCoutDeRevient($produitCommandeDevis->getCoutDeRevient());
  4874.                         $prodCom->setTotalCoutDeRevient($produitCommandeDevis->getTotalCoutDeRevient());
  4875.                         
  4876.                         
  4877.                         $prodCom->setTotalTVA($produitCommandeDevis->getTotalTVA());
  4878.                         $prodCom->setTotalTTC($produitCommandeDevis->getTotalTTC());
  4879.                         $prodCom->setTva($produitCommandeDevis->getTva());
  4880.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  4881.                             $produitCommandeDevis->getProduit()->setStockDisponible($produitCommandeDevis->getProduit()->getStockDisponible() - $produitCommandeDevis->getQuantite());
  4882.                         }
  4883.                         if($produitCommandeDevis->getProduit()->getTypeProduit() == 'produit'){
  4884.                             if($type == 'invoice'){
  4885.                                 
  4886.                                 $produitVendu $em->getRepository(Produit::class)
  4887.                                                 ->findOneById($idDuProduit);
  4888.                                 $produitVendu->setStockDisponible($produitVendu->getStockDisponible() - $produitCommandeDevis->getQuantite());
  4889.                             }
  4890.                         }
  4891.                         $em->persist($prodCom);
  4892.                         array_push($produitCommandes$prodCom);
  4893.                     }
  4894.                     
  4895.                     $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4896.                     
  4897.                     $content $this->renderView('pdf/facture.html.twig', [
  4898.                         'boutique' => $boutique,
  4899.                         'facture' => $facture,
  4900.                         'produits' => $produitCommandes
  4901.                     ]);
  4902.                     
  4903.                     $pdf->writeHTML($content);
  4904.                     $lienPhysique $facture->getUploadRootDir().$facture->getTypeFacture().$facture->getId().'.pdf';
  4905.                 
  4906.                     $facture->setLienPDF($this->getDomain().'/pdf478njkp01/'.$facture->getTypeFacture().$facture->getId().'.pdf');
  4907.                     $pdf->output($lienPhysique'F');
  4908.                     
  4909.                     $commande->setEtat(Commande::ETAT_DEVIS_FINALISE);
  4910.                     $em->flush();
  4911.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  4912.             
  4913.             break;
  4914.             
  4915.             case 'invoice':
  4916.                     $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  4917.                     
  4918.                     $content $this->renderView('pdf/facture.html.twig', [
  4919.                         'boutique' => $boutique,
  4920.                         'facture' => $commande,
  4921.                         'produits' => $produitCommandes
  4922.                     ]);
  4923.                     
  4924.                     $pdf->writeHTML($content);
  4925.                     $lienPhysique $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  4926.                 
  4927.                     $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  4928.                     $commande->setEtat(Commande::ETAT_FACTURE_FINALISE);
  4929.                     $pdf->output($lienPhysique'F');
  4930.                     
  4931.                     $em->flush();
  4932.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  4933.             break;
  4934.         }
  4935.         
  4936.         
  4937.         return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  4938.         
  4939.     }
  4940.     
  4941.     
  4942.     /**
  4943.      * @Route("/{slug}/check-customer-vat-status", name="admin.check_customer_vat_status")
  4944.      * @return \Symfony\Component\HttpFoundation\Response
  4945.      */
  4946.     public function checkCustomerVATStatusAction(Request $request$slug)
  4947.     {
  4948.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4949.            return $this->redirectToRoute('security_login');
  4950.         }
  4951.         $em $this->getDoctrine()
  4952.                     ->getManager();
  4953.         $response = new JsonResponse;
  4954.         $response->headers->set('Access-Control-Allow-Origin''*');
  4955.         $response->headers->set('Content-Type''application/json');
  4956.         
  4957.         $boutique $em->getRepository(Boutique::class)
  4958.                                     ->findOneBySlug($slug);
  4959.                         
  4960.         $data = array();
  4961.         
  4962.         if($request->getMethod() == 'POST'){
  4963.             $id $_POST['id'];
  4964.             $customer  $em->getRepository(Tiers::class)
  4965.                         ->findOneBy(
  4966.                             array(
  4967.                                 'boutique' => $boutique->getId(),
  4968.                                 'id' => $id
  4969.                         ));
  4970.             
  4971.             $data = array(
  4972.                 "assujettiALaTVA" => $customer->getAssujettiALaTVA()
  4973.             );
  4974.         }
  4975.         
  4976.         $response->setContent(json_encode($data));
  4977.         return $response;
  4978.     }
  4979.     
  4980.     
  4981.     //Vente
  4982.     /**
  4983.      * @Route("/{slug}/edit-sale/{type}/{id}", name="admin.edit_sale")
  4984.      * @return \Symfony\Component\HttpFoundation\Response
  4985.      */
  4986.     public function editSaleAction(Request $requestChiffreEnLettre $chiffreEnLettre$slug$type$id)
  4987.     {
  4988.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  4989.            return $this->redirectToRoute('security_login');
  4990.         }  
  4991.         $em $this->getDoctrine()
  4992.                     ->getManager();
  4993.         $boutique  $em->getRepository(Boutique::class)
  4994.                         ->findOneBySlug($slug);
  4995.     
  4996.         $produits  $em->getRepository(Produit::class)
  4997.                         ->findByBoutique($boutique->getId());
  4998.     
  4999.         $commande  $em->getRepository(Commande::class)
  5000.                         ->findOneBy(
  5001.                             array(
  5002.                                 'boutique' => $boutique->getId(),
  5003.                                 'id' => $id
  5004.                         ));
  5005.         
  5006.         $ancienProduitCommandes  $em->getRepository(ProduitCommande::class)
  5007.                         ->findBy(
  5008.                             array(
  5009.                                 'commande' => $commande->getId()
  5010.                         ));
  5011.                         
  5012.         $modeleReglements $em->getRepository(ModeleReglement::class)
  5013.                                 ->findByBoutique($boutique);        
  5014.         $tiers $em->getRepository(Tiers::class)
  5015.                                 ->findByBoutique($boutique);        
  5016.         
  5017.         $user $this->getUser();
  5018.         $userBoutique $em->getRepository(UserBoutique::class)
  5019.                         ->findOneBy(
  5020.                             array(
  5021.                             'user' => $user->getId(),
  5022.                             'boutique' => $boutique->getId()
  5023.                             )
  5024.                         );
  5025.         $vehicules = array(1222328);
  5026.     
  5027.         $ok_soumission '';
  5028.         $error '';
  5029.         $editMode 'edit';
  5030.         if($request->getMethod() == 'POST'){
  5031.             $typeFacture $_POST['typeFacture'];
  5032.             $observation $_POST['observation'];
  5033.             $titreDocument $_POST['titreDocument'];
  5034.             $modeleReglement $_POST['modeleReglement'];
  5035.             $moyenDePaiement $_POST['moyenDePaiement'];
  5036.             $client $_POST['client'];
  5037.             $clientFinalNom $_POST['clientFinalNom'];
  5038.             $clientFinalNumero $_POST['clientFinalNumero'];
  5039.             $dateCommande $_POST['dateCommande'];
  5040.             
  5041.             $montantHT = (float)$_POST['montantHT'];
  5042.             $remise =   (float)$_POST['remise'];
  5043.             $remisePourcentage =  (float)$_POST['remisePourcentage'];
  5044.             $totalHTApresRemise =  (float)$_POST['totalHTApresRemise'];
  5045.             $montantTVA = (float)$_POST['montantTVA'];
  5046.             $montantTTC = (float)$_POST['montantTTC'];
  5047.             $matriculeVehicule $_POST['matriculeVehicule'];
  5048.             $marqueVehicule $_POST['marqueVehicule'];
  5049.             $kilometrageVehicule = (float)$_POST['kilometrageVehicule'];
  5050.             $listeProduits json_decode($_POST['listeProduits']);
  5051.             $client $em->getRepository(Tiers::class)
  5052.                         ->findOneById($client);
  5053.             if(null !== $client){
  5054.                 $commande->setTiers($client);
  5055.             }
  5056.             
  5057.             $laDate = new \DateTime($dateCommande);
  5058.             $commande->setLaDate($laDate);
  5059.             $commande->setTitreDocument($titreDocument);
  5060.             $commande->setObservation($observation);
  5061.             $commande->setModifiePar($user);
  5062.             $commande->setMoyenDePaiement($moyenDePaiement);
  5063.             $commande->setClientFinalNom($clientFinalNom);
  5064.             $commande->setClientFinalNumero($clientFinalNumero);
  5065.             
  5066.             $commande->setMatriculeVehicule($matriculeVehicule);
  5067.             $commande->setMarqueVehicule($marqueVehicule);
  5068.             $commande->setKilometrageVehicule($kilometrageVehicule);
  5069.             $commande->setTotalHT($montantHT);
  5070.             $commande->setRemise($remise);
  5071.             $commande->setRemisePourcentage($remisePourcentage);
  5072.             $commande->setTotalHTApresRemise($totalHTApresRemise);
  5073.             
  5074.             $commande->setTotalTVA($montantTVA);
  5075.             $commande->setTotalTTC($montantTTC);
  5076.             $commande->setResteAPayer($montantTTC);
  5077.             $montantlettre strtoupper($chiffreEnLettre->Conversion($montantTTC));
  5078.             $commande->setMontantEnLettre($montantlettre);
  5079.             $commande->setTypeFacture($type);
  5080.             if($commande->getNumero() == ''){
  5081.                 $commande->setNumero($this->getNumero($type$boutique));
  5082.             }
  5083.             $em->flush();
  5084.             
  5085.             //Supprimer les ancien ProduitCommande lié 
  5086.             foreach($ancienProduitCommandes as $ancienProduitCommande){
  5087.                 $em->remove($ancienProduitCommande);
  5088.             }
  5089.             $em->flush();
  5090.             $produitCommandes = array();
  5091.             $coutDeRevientCommande 0;
  5092.             foreach($listeProduits as $listeProduit){
  5093.                 $listeProduit = (array)$listeProduit;
  5094.                 $idDuProduit $listeProduit['idProduit'];
  5095.             
  5096.                 if($idDuProduit == ''){
  5097.                     //Produit inexistant, il faut le créer
  5098.                     $leProduit = new Produit;
  5099.                     $leProduit->setNom($listeProduit['nomProduit']);
  5100.                     $em->persist($leProduit);
  5101.                     
  5102.                     //TVA
  5103.                     if($listeProduit['tva'] > 0){
  5104.                         $tva $em->getRepository(TVA::class)
  5105.                                     ->findOneBy(
  5106.                                         array(
  5107.                                             'boutique' => $boutique->getId(),
  5108.                                             'valeur'  => $listeProduit['tva']
  5109.                                         )
  5110.                                     );
  5111.                         if($tva == null){
  5112.                             $tva = new TVA;
  5113.                             $tva->setValeur($listeProduit['tva']);
  5114.                             $em->persist($tva);
  5115.                             $em->flush();
  5116.                         }
  5117.                         
  5118.                         $leProduit->setTva($tva);
  5119.                         
  5120.                     }
  5121.                     //Prix
  5122.                     $produitP = new PrixProduit;
  5123.                     $produitP->setValeur($listeProduit['prixUnitaire']);
  5124.                     $produitP->setBoutique($boutique);
  5125.                     $leProduit->addPrix($produitP);
  5126.                     $leProduit->setPrixActuel($produitP);
  5127.                     $leProduit->setBoutique($boutique);
  5128.                     $em->persist($produitP);
  5129.                     $em->persist($leProduit);
  5130.                     $em->flush();
  5131.                     
  5132.                 } else{
  5133.                     $leProduit $em->getRepository(Produit::class)
  5134.                         ->findOneById($idDuProduit);
  5135.                 }
  5136.                 $produitCommande = new ProduitCommande;
  5137.                 $produitCommande->setProduit($leProduit);
  5138.                 $produitCommande->setCommande($commande);
  5139.                 $quantite = (float)$listeProduit['quantite'];
  5140.                 $produitCommande->setQuantite($quantite);
  5141.                 $produitCommande->setPrix((float)$listeProduit['prixUnitaire']);
  5142.                 $prixDeRevient = (float)$listeProduit['prixDeRevient'];
  5143.                 $produitCommande->setCoutDeRevient($prixDeRevient);
  5144.                 $totalCoutDeRevient $prixDeRevient $quantite;
  5145.                 $produitCommande->setTotalCoutDeRevient($totalCoutDeRevient);
  5146.                 $coutDeRevientCommande += $totalCoutDeRevient;
  5147.                 $produitCommande->setRemise((float)$listeProduit['reduction']);
  5148.                 $produitCommande->setMontantRemise((float)$listeProduit['montantReduction']);
  5149.                 $produitCommande->setTotalHT((float)$listeProduit['totalHT']);
  5150.                 $produitCommande->setTotalHTApresRemise((float)$listeProduit['totalHTApresRemise']);
  5151.                 
  5152.                 $produitCommande->setTotalTVA((float)$listeProduit['totalTVA']);
  5153.                 $produitCommande->setTva((float)$listeProduit['tva']);
  5154.                 $produitCommande->setTotalTTC((float)$listeProduit['totalTTC']);
  5155.                 $em->persist($produitCommande);
  5156.                 array_push($produitCommandes$produitCommande);
  5157.                 
  5158.             } //Fin boucle sur les produit
  5159.             $em->flush();
  5160.             $commande->setCoutDeRevient($coutDeRevientCommande);
  5161.             
  5162.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5163.             $content '';
  5164.             switch($type){
  5165.                 case 'invoice':    
  5166.                     $content $this->renderView('pdf/facture.html.twig', [
  5167.                         'boutique' => $boutique,
  5168.                         'facture' => $commande,
  5169.                         'produits' => $produitCommandes
  5170.                     ]);
  5171.                 break;
  5172.                 
  5173.                 case 'proposal':
  5174.                     $content $this->renderView('pdf/devis.html.twig', [
  5175.                         'boutique' => $boutique,
  5176.                         'facture' => $commande,
  5177.                         'produits' => $produitCommandes
  5178.                     ]);
  5179.                 break;
  5180.             }
  5181.             
  5182.             $pdf->writeHTML($content);
  5183.             $lienPhysique $commande->getUploadRootDir().$commande->getTypeFacture().$commande->getId().'.pdf';
  5184.                 
  5185.             $commande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$commande->getTypeFacture().$commande->getId().'.pdf');
  5186.             $pdf->output($lienPhysique'F');
  5187.             
  5188.             $em->flush();
  5189.             
  5190.             return $this->render('admin/response_new_sale.html.twig', [
  5191.                    'boutique' => $boutique,
  5192.                    'commande' => $commande,
  5193.                    'responseFNE' => '',
  5194.                    'vehicules' => $vehicules,
  5195.                    'typeFacture' => $typeFacture,
  5196.                    'client' => $client,
  5197.                    'produitCommandes' => $produitCommandes,
  5198.                    'listeProduit' => $listeProduit,
  5199.                    'montantHT' => $montantHT,
  5200.                    'montantTVA' => $montantTVA,
  5201.                    'montantTTC' => $montantTTC,
  5202.                    'userBoutique' => $userBoutique
  5203.                 ]);
  5204.             
  5205.         }
  5206.     
  5207.         return $this->render('admin/edit_sale.html.twig', [
  5208.            'boutique' => $boutique,
  5209.            'produits' => $produits,
  5210.            'modeleReglements' => $modeleReglements,
  5211.            'tiers' => $tiers,
  5212.            'editMode' => $editMode,
  5213.            'commande' => $commande,
  5214.            'ancienProduitCommandes' => $ancienProduitCommandes,
  5215.            'type' => $type,
  5216.            'userBoutique' => $userBoutique,
  5217.            'vehicules' => $vehicules
  5218.         ]);
  5219.     }
  5220.     /**
  5221.      * @Route("/{slug}/bon-de-livraison/{id}", name="admin.bon_de_livraison")
  5222.      * @return \Symfony\Component\HttpFoundation\Response
  5223.      */
  5224.     public function bonDeLivraisonAction(Request $request$slug$id)
  5225.     {
  5226.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5227.            return $this->redirectToRoute('security_login');
  5228.         }      
  5229.         $em $this->getDoctrine()
  5230.                     ->getManager();
  5231.         $boutique  $em->getRepository(Boutique::class)
  5232.                         ->findOneBySlug($slug);
  5233.     
  5234.         $user $this->getUser();
  5235.         $userBoutique $em->getRepository(UserBoutique::class)
  5236.                         ->findOneBy(
  5237.                             array(
  5238.                             'user' => $user->getId(),
  5239.                             'boutique' => $boutique->getId()
  5240.                             )
  5241.                         );
  5242.         $commande  $em->getRepository(Commande::class)
  5243.                         ->findOneBy(
  5244.                             array(
  5245.                                 'boutique' => $boutique->getId(),
  5246.                                 'id' => $id
  5247.                         ));
  5248.         
  5249.         
  5250.             
  5251.             return $this->render('admin/bon_de_livraison.html.twig', [
  5252.                 'boutique' => $boutique,
  5253.                 'facture' => $commande,
  5254.                 'userBoutique' => $userBoutique,
  5255.                 'commande' => $commande
  5256.             ]);
  5257.     }        
  5258.     /**
  5259.      * @Route("/{slug}/bon-de-livraison-avec-date/{id}", name="admin_bon_de_livraison_avec_date")
  5260.      * @return \Symfony\Component\HttpFoundation\Response
  5261.      */
  5262.     public function bonDeLivraisonAvecDateAction(Request $request$slug$id)
  5263.     {
  5264.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5265.            return $this->redirectToRoute('security_login');
  5266.         }      
  5267.         $em $this->getDoctrine()
  5268.                     ->getManager();
  5269.         $boutique  $em->getRepository(Boutique::class)
  5270.                         ->findOneBySlug($slug);
  5271.     
  5272.         $user $this->getUser();
  5273.         $userBoutique $em->getRepository(UserBoutique::class)
  5274.                         ->findOneBy(
  5275.                             array(
  5276.                             'user' => $user->getId(),
  5277.                             'boutique' => $boutique->getId()
  5278.                             )
  5279.                         );
  5280.         if($request->getMethod() == 'POST'){
  5281.         $dateDImpression $request->request->get('dateDImpression');
  5282.         $dateDImpression = new \DateTime($dateDImpression);
  5283.         $commande  $em->getRepository(Commande::class)
  5284.                         ->findOneBy(
  5285.                             array(
  5286.                                 'boutique' => $boutique->getId(),
  5287.                                 'id' => $id
  5288.                         ));
  5289.         
  5290.         $listeProduits  $em->getRepository(ProduitCommande::class)
  5291.                         ->findBy(
  5292.                             array(
  5293.                                 'commande' => $commande->getId()
  5294.                         ));
  5295.                 
  5296.             
  5297.             $produitCommandes = array();
  5298.             foreach($listeProduits as $listeProduit){
  5299.                 
  5300.                 array_push($produitCommandes$listeProduit);
  5301.                 
  5302.             }
  5303.             
  5304.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5305.             
  5306.             
  5307.             $content $this->renderView('pdf/bon_de_livraison.html.twig', [
  5308.                 'boutique' => $boutique,
  5309.                 'facture' => $commande,
  5310.                 'produits' => $produitCommandes,
  5311.                 'dateDImpression' => $dateDImpression
  5312.             ]);
  5313.             
  5314.             
  5315.             $pdf->writeHTML($content);
  5316.             $lienPhysique $commande->getUploadRootDir().'_bon_de_livraison_'.$commande->getId().'.pdf';
  5317.                 
  5318.             $pdf->output($lienPhysique'I');
  5319.             
  5320.             return $this->renderView('pdf/bon_de_livraison.html.twig', [
  5321.                 'boutique' => $boutique,
  5322.                 'facture' => $commande,
  5323.                 'produits' => $produitCommandes,
  5324.                 'dateDImpression' => $dateDImpression
  5325.             ]);
  5326.         }
  5327.     }        
  5328.     
  5329.     
  5330.     /**
  5331.      * @Route("/{slug}/duplicate-sale/{id}", name="admin.duplicate_sale")
  5332.      * @return \Symfony\Component\HttpFoundation\Response
  5333.      */
  5334.     public function duplicateSaleAction(Request $request$slug$id)
  5335.     {
  5336.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5337.            return $this->redirectToRoute('security_login');
  5338.         }      
  5339.         $em $this->getDoctrine()
  5340.                     ->getManager();
  5341.         $boutique  $em->getRepository(Boutique::class)
  5342.                         ->findOneBySlug($slug);
  5343.     
  5344.         $user $this->getUser();
  5345.         $userBoutique $em->getRepository(UserBoutique::class)
  5346.                         ->findOneBy(
  5347.                             array(
  5348.                             'user' => $user->getId(),
  5349.                             'boutique' => $boutique->getId()
  5350.                             )
  5351.                         );
  5352.         $commande  $em->getRepository(Commande::class)
  5353.                         ->findOneBy(
  5354.                             array(
  5355.                                 'boutique' => $boutique->getId(),
  5356.                                 'id' => $id
  5357.                         ));
  5358.         
  5359.         $listeProduits  $em->getRepository(ProduitCommande::class)
  5360.                         ->findBy(
  5361.                             array(
  5362.                                 'commande' => $commande->getId()
  5363.                         ));
  5364.                 
  5365.             $nouvelleCommande = new Commande;
  5366.             $nouvelleCommande->setBoutique($boutique);
  5367.             $nouvelleCommande->setTiers($commande->getTiers());
  5368.             
  5369.             $nouvelleCommande->setLaDate(new \DateTime());
  5370.             $nouvelleCommande->setTotalHT($commande->getTotalHT());
  5371.             $nouvelleCommande->setTotalHTApresRemise($commande->getTotalHTApresRemise());
  5372.             $nouvelleCommande->setRemise($commande->getRemise());
  5373.             $nouvelleCommande->setRemisePourcentage($commande->getRemisePourcentage());
  5374.             $nouvelleCommande->setTotalTVA($commande->getTotalTVA());
  5375.             $nouvelleCommande->setTotalAutreTaxe($commande->getTotalAutreTaxe());
  5376.             $nouvelleCommande->setTotalTTC($commande->getTotalTTC());
  5377.             $nouvelleCommande->setResteAPayer($commande->getTotalTTC());
  5378.             $nouvelleCommande->setTitreDocument($commande->getTitreDocument());
  5379.             $nouvelleCommande->setObservation($commande->getObservation());
  5380.             $nouvelleCommande->setValableJusquAu($commande->getValableJusquAu());
  5381.             $nouvelleCommande->setMontantEnLettre($commande->getMontantEnLettre());
  5382.             $nouvelleCommande->setTypeFacture($commande->getTypeFacture());
  5383.             $nouvelleCommande->setNatureFacture($commande->getNatureFacture());
  5384.             
  5385.             $nouvelleCommande->setNumero($this->getNumero($nouvelleCommande->getTypeFacture(), $boutique));
  5386.             $em->persist($nouvelleCommande);
  5387.             $em->flush();
  5388.             $produitCommandes = array();
  5389.             foreach($listeProduits as $listeProduit){
  5390.                 $produitCommande = new ProduitCommande;
  5391.                 $produitCommande->setProduit($listeProduit->getProduit());
  5392.                 $produitCommande->setCommande($nouvelleCommande);
  5393.                 $produitCommande->setQuantite($listeProduit->getQuantite());
  5394.                 $produitCommande->setPrix($listeProduit->getPrix());
  5395.                 $produitCommande->setRemise($listeProduit->getRemise());
  5396.                 $produitCommande->setRemisePourcentage($listeProduit->getRemisePourcentage());
  5397.                 $produitCommande->setTotalHT($listeProduit->getTotalHT());
  5398.                 $produitCommande->setTotalHTApresRemise($listeProduit->getTotalHTApresRemise());
  5399.                 $produitCommande->setTotalTVA($listeProduit->getTotalTVA());
  5400.                 $produitCommande->setAutreTaxe($listeProduit->getAutreTaxe());
  5401.                 $produitCommande->setTotalTTC($listeProduit->getTotalTTC());
  5402.                 $em->persist($produitCommande);
  5403.                 
  5404.                 array_push($produitCommandes$produitCommande);
  5405.                 
  5406.             }
  5407.             $em->flush();
  5408.             
  5409.             if($nouvelleCommande->getTypeFacture() == 'invoice'){
  5410.                     
  5411.                 if($boutique->getApiKeyFNE() != ''){
  5412.                     if($boutique->getSettings()->isGenererAutomatiquementFNE()){
  5413.                         $responseFNE $this->genererFactureFNE($boutique->getSlug(), $nouvelleCommande->getId(), $nouvelleCommande->getNatureFacture());
  5414.                     }
  5415.                     
  5416.                 }
  5417.                 $this->genererEcritureComptableDeVente($boutique$nouvelleCommande);
  5418.                     //Ecriture comptable
  5419.             }
  5420.             $pdf = new Html2Pdf('P'$boutique->getSettings()->getFormatPapierImpression(), 'en');
  5421.             $content '';
  5422.             switch($commande->getTypeFacture()){
  5423.                 case 'invoice':    
  5424.                     $content $this->renderView('pdf/facture.html.twig', [
  5425.                         'boutique' => $boutique,
  5426.                         'facture' => $nouvelleCommande,
  5427.                         'produits' => $produitCommandes
  5428.                     ]);
  5429.                 break;
  5430.                 
  5431.                 case 'proposal':
  5432.                     $content $this->renderView('pdf/devis.html.twig', [
  5433.                         'boutique' => $boutique,
  5434.                         'facture' => $nouvelleCommande,
  5435.                         'produits' => $produitCommandes
  5436.                     ]);
  5437.                 break;
  5438.             }
  5439.             
  5440.             $pdf->writeHTML($content);
  5441.             $lienPhysique $nouvelleCommande->getUploadRootDir().$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf';
  5442.                 
  5443.             $nouvelleCommande->setLienPDF($this->getDomain().'/pdf478njkp01/'.$nouvelleCommande->getTypeFacture().$nouvelleCommande->getId().'.pdf');
  5444.             $pdf->output($lienPhysique'F');
  5445.             
  5446.             $em->flush();
  5447.             
  5448.             switch($commande->getTypeFacture()){
  5449.                 case 'invoice':    
  5450.                     return $this->redirectToRoute('admin.invoices',  array('slug' => $boutique->getSlug()));
  5451.                 break;
  5452.                 
  5453.                 case 'proposal':
  5454.                     return $this->redirectToRoute('admin.proposals',  array('slug' => $boutique->getSlug()));
  5455.                 break;
  5456.                 
  5457.                 case 'bill_credit':
  5458.                     return $this->redirectToRoute('admin.bill_credits',  array('slug' => $boutique->getSlug()));
  5459.                 break;
  5460.                 
  5461.                 case 'deposit':
  5462.                     return $this->redirectToRoute('admin.deposits',  array('slug' => $boutique->getSlug()));
  5463.                 break;
  5464.             }
  5465.     }
  5466.     
  5467.     /**
  5468.      * @Route("/{slug}/delete-sale/{type}/{id}", name="admin.delete_sale")
  5469.      * @return \Symfony\Component\HttpFoundation\Response
  5470.   
  5471.     */
  5472.     public function deleteSaleAction(Request $request$slug$type$id)
  5473.     {
  5474.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5475.            return $this->redirectToRoute('security_login');
  5476.         }
  5477.         $em $this->getDoctrine()
  5478.                     ->getManager();
  5479.         
  5480.         $boutique $em->getRepository(Boutique::class)
  5481.                         ->findOneBySlug($slug);
  5482.         $user $this->getUser();
  5483.         $userBoutique $em->getRepository(UserBoutique::class)
  5484.                         ->findOneBy(
  5485.                             array(
  5486.                             'user' => $user->getId(),
  5487.                             'boutique' => $boutique->getId()
  5488.                             )
  5489.                         );
  5490.         $commande $em->getRepository(Commande::class)
  5491.                         ->findOneBy(
  5492.                             array(
  5493.                                 'boutique' => $boutique->getId(),
  5494.                                 'id' => $id
  5495.                             ));
  5496.         /*
  5497.         
  5498.         $produitCommandes = $em->getRepository(ProduitCommande::class)
  5499.                         ->findByCommande($commande->getId());
  5500.                         
  5501.         foreach($produitCommandes as $produitCommande){
  5502.             $em->remove($produitCommande);
  5503.         }
  5504.         $em->flush();
  5505.         
  5506.         $em->remove($commande);
  5507.         */
  5508.         
  5509.         
  5510.         $commande->setEstSupprime(true);
  5511.         $commande->setSupprimePar($user);
  5512.         $em->flush();
  5513.         
  5514.         switch($type){
  5515.             case 'invoice':
  5516.                 return $this->redirectToRoute('admin.invoices', array('slug' => $boutique->getSlug()));
  5517.             break;
  5518.             
  5519.             case 'bill_credit':
  5520.                 return $this->redirectToRoute('admin.bill_credits', array('slug' => $boutique->getSlug()));
  5521.             break;
  5522.             
  5523.             case 'proposal':
  5524.                 return $this->redirectToRoute('admin.proposals', array('slug' => $boutique->getSlug()));
  5525.             break;
  5526.         }
  5527.         
  5528.     }
  5529.     
  5530.     /**
  5531.      * @Route("/{slug}/product/list", name="admin.list_product")
  5532.      * @return \Symfony\Component\HttpFoundation\Response
  5533.     */
  5534.     public function listProductAction(Request $requestBoutique $boutique)
  5535.     {
  5536.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5537.            return $this->redirectToRoute('security_login');
  5538.         }
  5539.         $em $this->getDoctrine()
  5540.                     ->getManager();
  5541.         
  5542.         $produits $em->getRepository(Produit::class)
  5543.                         ->findBy(
  5544.                             array(
  5545.                                 'boutique' => $boutique->getId(),
  5546.                                 'estSupprime' => false
  5547.                             ),    
  5548.                             array(
  5549.                                 'nom' => 'ASC'
  5550.                             )
  5551.                         );
  5552.         $user $this->getUser();
  5553.         $userBoutique $em->getRepository(UserBoutique::class)
  5554.                         ->findOneBy(
  5555.                             array(
  5556.                             'user' => $user->getId(),
  5557.                             'boutique' => $boutique->getId()
  5558.                             )
  5559.                         );
  5560.         return $this->render('admin/liste_produit.html.twig', [
  5561.            'boutique' => $boutique,
  5562.            'produits' => $produits,
  5563.            'userBoutique' => $userBoutique
  5564.         ]);
  5565.     }
  5566.     
  5567.     /**
  5568.      * @Route("/{slug}/new-product", name="admin.new_product")
  5569.      * @return \Symfony\Component\HttpFoundation\Response
  5570.      */
  5571.     public function newProductAction(Request $requestBoutique $boutique)
  5572.     {
  5573.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5574.            return $this->redirectToRoute('security_login');
  5575.         }
  5576.         $em $this->getDoctrine()
  5577.                     ->getManager();
  5578.         
  5579.         $produit = new Produit;
  5580.         
  5581.         $user $this->getUser();
  5582.         $userBoutique $em->getRepository(UserBoutique::class)
  5583.                         ->findOneBy(
  5584.                             array(
  5585.                             'user' => $user->getId(),
  5586.                             'boutique' => $boutique->getId()
  5587.                             )
  5588.                         );
  5589.         $form $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  5590.         
  5591.         $ok_soumission '';
  5592.         $error '';
  5593.         
  5594.         if($request->getMethod() == 'POST'){
  5595.             
  5596.                $form->handleRequest($request);
  5597.                if($form->isValid()){
  5598.                  $em->persist($produit);
  5599.                    $em->flush();
  5600.                  
  5601.                    //Prix
  5602.                    $prix = (float)$_POST['prix'];
  5603.                    $produitP = new PrixProduit;
  5604.                    $produitP->setValeur($prix);
  5605.                    $produitP->setBoutique($boutique);
  5606.                    $produit->addPrix($produitP);
  5607.                    $produit->setPrixActuel($produitP);
  5608.                    $produit->setBoutique($boutique);
  5609.                   $em->persist($produitP);
  5610.                   
  5611.                   $em->flush();
  5612.                 
  5613.                 $ok_soumission =" Votre message a été pris en compte";
  5614.                     
  5615.                 unset($produit);
  5616.                 unset($form);
  5617.                 $produit = new Produit;
  5618.                 $form $this->createForm(ProduitType::class, $produit, array('boutique' => $boutique->getId()));
  5619.                     
  5620.                 } else {
  5621.                     $error =" Veillez corrigez vos erreurs";
  5622.                 }
  5623.         }
  5624.     
  5625.         return $this->render('admin/nouveau_produit.html.twig', [
  5626.            'boutique' => $boutique,
  5627.            'form' => $form->createView(),
  5628.            'userBoutique' => $userBoutique
  5629.         ]);
  5630.     }
  5631.     
  5632.     /**
  5633.      * @Route("/{slug}/product/edit/{id}", name="admin.edit_product")
  5634.      * @return \Symfony\Component\HttpFoundation\Response
  5635.     */
  5636.     public function edtProductAction(Request $request$slug$id)
  5637.     {
  5638.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5639.            return $this->redirectToRoute('security_login');
  5640.         }
  5641.         $em $this->getDoctrine()
  5642.                     ->getManager();
  5643.         
  5644.         $boutique $em->getRepository(Boutique::class)
  5645.                         ->findOneBySlug($slug);
  5646.         
  5647.         $produit $em->getRepository(Produit::class)
  5648.                         ->findOneBy(
  5649.                             array(
  5650.                             'boutique' => $boutique->getId(),
  5651.                             'id' => $id
  5652.                             )
  5653.                         );
  5654.         
  5655.         $user $this->getUser();
  5656.         $userBoutique $em->getRepository(UserBoutique::class)
  5657.                         ->findOneBy(
  5658.                             array(
  5659.                             'user' => $user->getId(),
  5660.                             'boutique' => $boutique->getId()
  5661.                             )
  5662.                         );
  5663.         $form $this->createForm(ProduitEditType::class, $produit, array('boutique' => $boutique->getId()));
  5664.         
  5665.         $ok_soumission '';
  5666.         $error '';
  5667.         
  5668.         if($request->getMethod() == 'POST'){
  5669.             
  5670.                $form->handleRequest($request);
  5671.                if($form->isValid()){
  5672.                    //Prix
  5673.                     $prix = (float)$_POST['prix'];
  5674.                     if($prix && $produit->getPrixActuel()->getValeur() != $prix){
  5675.                         $produit->getPrixActuel()->setValeur($prix);
  5676.                         $produitP = new PrixProduit;
  5677.                        $produitP->setValeur($prix);
  5678.                        $produit->addPrix($produitP);
  5679.                        $produit->setPrixActuel($produitP);
  5680.                        $produit->setBoutique($boutique);
  5681.                       $em->persist($produitP);
  5682.                         
  5683.                     }
  5684.                     $em->flush();
  5685.                     $ok_soumission =" Votre message a été pris en compte";
  5686.                 } else {
  5687.                     $error =" Veillez corrigez vos erreurs";
  5688.                 }
  5689.         }
  5690.     
  5691.         return $this->render('admin/edit_product.html.twig', [
  5692.            'boutique' => $boutique,
  5693.            'form' => $form->createView(),
  5694.            'produit' => $produit,
  5695.            'userBoutique' => $userBoutique
  5696.         ]);
  5697.     }
  5698.     
  5699.     //Produit/Service
  5700.     /**
  5701.      * @Route("/{slug}/delete-product/{id}", name="admin.delete_product")
  5702.      * @return \Symfony\Component\HttpFoundation\Response
  5703.      */
  5704.     public function deleteProductAction(Request $request,  $slug$id)
  5705.     { 
  5706.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5707.            return $this->redirectToRoute('security_login');
  5708.         }
  5709.         $em $this->getDoctrine()
  5710.                     ->getManager();
  5711.         $boutique $em->getRepository(Boutique::class)
  5712.                         ->findOneBySlug($slug);
  5713.         
  5714.         $product $em->getRepository(Produit::class)
  5715.                         ->findOneBy(
  5716.                         array(
  5717.                             'boutique' => $boutique->getId(),
  5718.                             'id' => $id
  5719.                         )
  5720.                         );
  5721.         if(null !== $product){
  5722.             
  5723.             $product->setEstSupprime(true);
  5724.             $em->flush();
  5725.         }
  5726.         return $this->redirectToRoute('admin.list_product', array('slug' => $boutique->getSlug()));
  5727.     
  5728.     }
  5729.     
  5730.     /**
  5731.      * @Route("/{slug}/product-category/list", name="admin.category_product")
  5732.      * @return \Symfony\Component\HttpFoundation\Response
  5733.     */
  5734.     public function listeCategoryProductAction(Request $requestBoutique $boutique)
  5735.     {
  5736.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5737.            return $this->redirectToRoute('security_login');
  5738.         }
  5739.         $em $this->getDoctrine()
  5740.                     ->getManager();
  5741.         
  5742.         $categories $em->getRepository(CategorieProduit::class)
  5743.                         ->findByBoutique($boutique);
  5744.         $user $this->getUser();
  5745.         $userBoutique $em->getRepository(UserBoutique::class)
  5746.                         ->findOneBy(
  5747.                             array(
  5748.                             'user' => $user->getId(),
  5749.                             'boutique' => $boutique->getId()
  5750.                             )
  5751.                         );
  5752.         return $this->render('admin/category_product.html.twig', [
  5753.            'categories' => $categories,
  5754.            'boutique' => $boutique,
  5755.            'userBoutique' => $userBoutique
  5756.         ]);
  5757.     }
  5758.     
  5759.     //Produit/Service
  5760.     /**
  5761.      * @Route("/{slug}/new-product-category", name="admin.new_product_category")
  5762.      * @return \Symfony\Component\HttpFoundation\Response
  5763.      */
  5764.     public function newProductCategoryAction(Request $requestBoutique $boutique)
  5765.     {
  5766.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5767.            return $this->redirectToRoute('security_login');
  5768.         }      
  5769.         $em $this->getDoctrine()
  5770.                     ->getManager();
  5771.         
  5772.         $categorie = new CategorieProduit;
  5773.         $form $this->createForm(CategorieProduitType::class, $categorie);
  5774.         
  5775.         $ok_soumission '';
  5776.         $error '';
  5777.         $user $this->getUser();
  5778.         $userBoutique $em->getRepository(UserBoutique::class)
  5779.                         ->findOneBy(
  5780.                             array(
  5781.                             'user' => $user->getId(),
  5782.                             'boutique' => $boutique->getId()
  5783.                             )
  5784.                         );
  5785.         if($request->getMethod() == 'POST'){
  5786.             
  5787.                $form->handleRequest($request);
  5788.                if($form->isValid()){
  5789.                    $categorie->setBoutique($boutique);
  5790.                   $em->persist($categorie);
  5791.                   $em->flush();
  5792.         
  5793.                 $ok_soumission =" Votre message a été pris en compte";
  5794.                     
  5795.                 unset($categorie);
  5796.                 unset($form);
  5797.                 $categorie = new CategorieProduit;
  5798.                 
  5799.                 $form $this->createForm(CategorieProduitType::class, $categorie);
  5800.                     
  5801.                 } else {
  5802.                     $error =" Veillez corrigez vos erreurs";
  5803.                 }
  5804.         }
  5805.     
  5806.         return $this->render('admin/new_product_category.html.twig', [
  5807.            'boutique' => $boutique,
  5808.            'form' => $form->createView(),
  5809.            'userBoutique' => $userBoutique
  5810.         ]);
  5811.     }
  5812.     
  5813.     
  5814.     //Produit/Service
  5815.     /**
  5816.      * @Route("/{slug}/edit-product-category/{id}", name="admin.edit_product_category")
  5817.      * @return \Symfony\Component\HttpFoundation\Response
  5818.      */
  5819.     public function editProductCategoryAction(Request $request$slug$id)
  5820.     { 
  5821.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5822.            return $this->redirectToRoute('security_login');
  5823.         }
  5824.         $em $this->getDoctrine()
  5825.                     ->getManager();
  5826.         
  5827.         $user $this->getUser();
  5828.         
  5829.         $categorie $em->getRepository(CategorieProduit::class)
  5830.                         ->findOneById($id);
  5831.         $boutique $em->getRepository(Boutique::class)
  5832.                         ->findOneBySlug($slug);
  5833.         $userBoutique $em->getRepository(UserBoutique::class)
  5834.                         ->findOneBy(
  5835.                             array(
  5836.                             'user' => $user->getId(),
  5837.                             'boutique' => $boutique->getId()
  5838.                             )
  5839.                         );
  5840.         $form $this->createForm(CategorieProduitEditType::class, $categorie);
  5841.         
  5842.         $ok_soumission '';
  5843.         $error '';
  5844.         
  5845.         if($request->getMethod() == 'POST'){
  5846.             
  5847.                $form->handleRequest($request);
  5848.                if($form->isValid()){
  5849.                   $em->flush();
  5850.         
  5851.                 $ok_soumission =" Votre message a été pris en compte";    
  5852.                 } else {
  5853.                     $error =" Veillez corrigez vos erreurs";
  5854.                 }
  5855.         }
  5856.     
  5857.         return $this->render('admin/edit_product_category.html.twig', [
  5858.            'boutique' => $boutique,
  5859.            'categorie' => $categorie,
  5860.            'form' => $form->createView(),
  5861.            'userBoutique' => $userBoutique
  5862.         ]);
  5863.     }
  5864.     
  5865.     //Produit/Service
  5866.     /**
  5867.      * @Route("/{slug}/delete-product-category/{id}", name="admin.delete_product_category")
  5868.      * @return \Symfony\Component\HttpFoundation\Response
  5869.      */
  5870.     public function deleteProductCategoryAction(Request $request,  $slug$id)
  5871.     { 
  5872.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5873.            return $this->redirectToRoute('security_login');
  5874.         }
  5875.         $em $this->getDoctrine()
  5876.                     ->getManager();
  5877.         $boutique $em->getRepository(Boutique::class)
  5878.                         ->findOneBySlug($slug);
  5879.                         
  5880.         $categorie $em->getRepository(CategorieProduit::class)
  5881.                         ->findOneBy(
  5882.                         array(
  5883.                             'boutique' => $boutique->getId(),
  5884.                             'id' => $id
  5885.                         )
  5886.                         );
  5887.         if(null !== $categorie){
  5888.             $em->remove($categorie);
  5889.             $em->flush();
  5890.         }
  5891.         return $this->redirectToRoute('admin.category_product', array('slug' => $boutique->getSlug()));
  5892.         
  5893.         
  5894.     }
  5895.     /**
  5896.      * @Route("/{slug}/tax/list", name="admin.list_tax")
  5897.      * @return \Symfony\Component\HttpFoundation\Response
  5898.      */
  5899.     public function listTaxAction(Request $requestBoutique $boutique)
  5900.     {    
  5901.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5902.            return $this->redirectToRoute('security_login');
  5903.         }
  5904.         $em $this->getDoctrine()
  5905.                     ->getManager();
  5906.         
  5907.         $taxes $em->getRepository(TVA::class)
  5908.                         ->findByBoutique($boutique);
  5909.         $user $this->getUser();
  5910.         $userBoutique $em->getRepository(UserBoutique::class)
  5911.                         ->findOneBy(
  5912.                             array(
  5913.                             'user' => $user->getId(),
  5914.                             'boutique' => $boutique->getId()
  5915.                             )
  5916.                         );
  5917.         return $this->render('admin/liste_tva.html.twig', [
  5918.            'boutique' => $boutique,
  5919.            'taxes' => $taxes,
  5920.            'userBoutique' => $userBoutique
  5921.         ]);
  5922.     }
  5923.     
  5924.     /**
  5925.      * @Route("/{slug}/new-tax", name="admin.new_tax")
  5926.      * @return \Symfony\Component\HttpFoundation\Response
  5927.      */
  5928.     public function newTaxAction(Request $requestBoutique $boutique)
  5929.     {
  5930.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5931.            return $this->redirectToRoute('security_login');
  5932.         }
  5933.         $em $this->getDoctrine()
  5934.                     ->getManager();
  5935.         
  5936.         $tva = new TVA;
  5937.         
  5938.         $user $this->getUser();
  5939.         $userBoutique $em->getRepository(UserBoutique::class)
  5940.                         ->findOneBy(
  5941.                             array(
  5942.                             'user' => $user->getId(),
  5943.                             'boutique' => $boutique->getId()
  5944.                             )
  5945.                         );
  5946.         $form $this->createForm(TVAType::class, $tva);
  5947.         
  5948.         $ok_soumission '';
  5949.         $error '';
  5950.         
  5951.         if($request->getMethod() == 'POST'){
  5952.             
  5953.                $form->handleRequest($request);
  5954.                if($form->isValid()){
  5955.                    $tva->setBoutique($boutique);
  5956.                   $em->persist($tva);
  5957.                   $em->flush();
  5958.         
  5959.                 $ok_soumission =" Votre message a été pris en compte";
  5960.                     
  5961.                 unset($tva);
  5962.                 unset($form);
  5963.                 $tva = new TVA;
  5964.                 
  5965.                 $form $this->createForm(TVAType::class, $tva);
  5966.                     
  5967.                 } else {
  5968.                     $error =" Veillez corrigez vos erreurs";
  5969.                 }
  5970.         }
  5971.     
  5972.         return $this->render('admin/nouvelle_tva.html.twig', [
  5973.            'boutique' => $boutique,
  5974.            'form' => $form->createView(),
  5975.            'userBoutique' => $userBoutique
  5976.         ]);
  5977.     }
  5978.     
  5979.     /**
  5980.      * @Route("/{slug}/edit-tax/{tva}", name="admin.edit_tax")
  5981.      * @return \Symfony\Component\HttpFoundation\Response
  5982.      */
  5983.     public function editTaxAction(Request $request$slug$tva)
  5984.     {
  5985.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  5986.            return $this->redirectToRoute('security_login');
  5987.         }
  5988.         $em $this->getDoctrine()
  5989.                     ->getManager();
  5990.         
  5991.         $boutique $em->getRepository(Boutique::class)
  5992.                         ->findOneBySlug($slug);
  5993.                         
  5994.         $tva $em->getRepository(TVA::class)
  5995.                         ->findOneBy(
  5996.                         array(
  5997.                             'boutique' => $boutique->getId(),
  5998.                             'id' => $tva
  5999.                         )
  6000.                         );
  6001.         
  6002.         $user $this->getUser();
  6003.         $userBoutique $em->getRepository(UserBoutique::class)
  6004.                         ->findOneBy(
  6005.                             array(
  6006.                             'user' => $user->getId(),
  6007.                             'boutique' => $boutique->getId()
  6008.                             )
  6009.                         );
  6010.         $userBoutique $em->getRepository(UserBoutique::class)
  6011.                         ->findOneBy(
  6012.                             array(
  6013.                             'user' => $user->getId(),
  6014.                             'boutique' => $boutique->getId()
  6015.                             )
  6016.                         );
  6017.         $form $this->createForm(TVAEditType::class, $tva);
  6018.         
  6019.         $ok_soumission '';
  6020.         $error '';
  6021.         
  6022.         if($request->getMethod() == 'POST'){
  6023.             
  6024.                $form->handleRequest($request);
  6025.                if($form->isValid()){
  6026.                   $em->flush();
  6027.         
  6028.                 $ok_soumission =" Votre message a été pris en compte";
  6029.                     
  6030.                     
  6031.                 } else {
  6032.                     $error =" Veillez corrigez vos erreurs";
  6033.                 }
  6034.         }
  6035.     
  6036.         return $this->render('admin/edit_tax.html.twig', [
  6037.            'boutique' => $boutique,
  6038.            'tva' => $tva,
  6039.            'form' => $form->createView(),
  6040.            'userBoutique' => $userBoutique
  6041.         ]);
  6042.     }
  6043.     
  6044.     /**
  6045.      * @Route("/{slug}/delete-tax/{id}", name="admin.delete_tax")
  6046.      * @return \Symfony\Component\HttpFoundation\Response
  6047.      */
  6048.     public function deleteTaxAction(Request $request$slugTVA $tva)
  6049.     {
  6050.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6051.            return $this->redirectToRoute('security_login');
  6052.         }
  6053.         $em $this->getDoctrine()
  6054.                     ->getManager();
  6055.         $boutique $em->getRepository(Boutique::class)
  6056.                         ->findOneBySlug($slug);
  6057.         
  6058.         $tva $em->getRepository(TVA::class)
  6059.                         ->findOneBy(
  6060.                         array(
  6061.                             'boutique' => $boutique->getId(),
  6062.                             'id' => $tva
  6063.                         )
  6064.                         );
  6065.         if(null !== $tva){
  6066.             $em->remove($tva);
  6067.             $em->flush();
  6068.         }
  6069.         return $this->redirectToRoute('admin.list_tax', array('slug' => $boutique->getSlug()));
  6070.     }
  6071.     
  6072.     /**
  6073.      * @Route("/{slug}/payment-method/list", name="admin.payment_methods")
  6074.      * @return \Symfony\Component\HttpFoundation\Response
  6075.      */
  6076.     public function paymentMethodsAction(Request $requestBoutique $boutique)
  6077.     {
  6078.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6079.            return $this->redirectToRoute('security_login');
  6080.         }
  6081.         $em $this->getDoctrine()
  6082.                     ->getManager();
  6083.         
  6084.         $paymentMethods $em->getRepository(PaymentMethod::class)
  6085.                         ->findByBoutique($boutique);
  6086.         $user $this->getUser();
  6087.         $userBoutique $em->getRepository(UserBoutique::class)
  6088.                         ->findOneBy(
  6089.                             array(
  6090.                             'user' => $user->getId(),
  6091.                             'boutique' => $boutique->getId()
  6092.                             )
  6093.                         );
  6094.         return $this->render('admin/payment_methods.html.twig', [
  6095.            'boutique' => $boutique,
  6096.            'paymentMethods' => $paymentMethods,
  6097.            'userBoutique' => $userBoutique
  6098.         ]);
  6099.     }
  6100.     
  6101.     /**
  6102.      * @Route("/{slug}/payment-method/new", name="admin.new_payment_method")
  6103.      * @return \Symfony\Component\HttpFoundation\Response
  6104.      */
  6105.     public function newPaymentMethodAction(Request $requestBoutique $boutique)
  6106.     {
  6107.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6108.            return $this->redirectToRoute('security_login');
  6109.         }
  6110.         $em $this->getDoctrine()
  6111.                     ->getManager();
  6112.         
  6113.         $paymentMethod = new PaymentMethod;
  6114.         
  6115.         $user $this->getUser();
  6116.         $userBoutique $em->getRepository(UserBoutique::class)
  6117.                         ->findOneBy(
  6118.                             array(
  6119.                             'user' => $user->getId(),
  6120.                             'boutique' => $boutique->getId()
  6121.                             )
  6122.                         );
  6123.         $form $this->createForm(PaymentMethodType::class, $paymentMethod);
  6124.         
  6125.         $ok_soumission '';
  6126.         $error '';
  6127.         
  6128.         if($request->getMethod() == 'POST'){
  6129.             
  6130.                $form->handleRequest($request);
  6131.                if($form->isValid()){
  6132.                    $paymentMethod->setBoutique($boutique);
  6133.                   $em->persist($paymentMethod);
  6134.                   $em->flush();
  6135.         
  6136.                 $ok_soumission =" Votre message a été pris en compte";
  6137.                     
  6138.                 $paymentMethod = new PaymentMethod;
  6139.                 
  6140.                 $form $this->createForm(PaymentMethodType::class, $paymentMethod);
  6141.                     
  6142.                 } else {
  6143.                     $error =" Veillez corrigez vos erreurs";
  6144.                 }
  6145.         }
  6146.     
  6147.         return $this->render('admin/new_payment_method.html.twig', [
  6148.            'boutique' => $boutique,
  6149.            'form' => $form->createView(),
  6150.            'userBoutique' => $userBoutique
  6151.         ]);
  6152.     }
  6153.     
  6154.     /**
  6155.      * @Route("/{slug}/payment-method/edit/{paymentMethod}", name="admin.edit_payment_method")
  6156.      * @return \Symfony\Component\HttpFoundation\Response
  6157.      */
  6158.     public function editPaymentMethodAction(Request $request,  $slug$paymentMethod)
  6159.     {
  6160.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6161.            return $this->redirectToRoute('security_login');
  6162.         }
  6163.         $em $this->getDoctrine()
  6164.                     ->getManager();
  6165.         
  6166.         $boutique $em->getRepository(Boutique::class)
  6167.                     ->findOneBySlug($slug);
  6168.         $user $this->getUser();
  6169.         $userBoutique $em->getRepository(UserBoutique::class)
  6170.                         ->findOneBy(
  6171.                             array(
  6172.                             'user' => $user->getId(),
  6173.                             'boutique' => $boutique->getId()
  6174.                             )
  6175.                         );
  6176.         $paymentMethod $em->getRepository(PaymentMethod::class)
  6177.                     ->findOneBy(
  6178.                         array(
  6179.                             'boutique' => $boutique->getId(),
  6180.                             'id' => $paymentMethod
  6181.                         )
  6182.                     );
  6183.         
  6184.         $form $this->createForm(PaymentMethodEditType::class, $paymentMethod);
  6185.         
  6186.         $ok_soumission '';
  6187.         $error '';
  6188.         
  6189.         if($request->getMethod() == 'POST'){
  6190.             
  6191.                $form->handleRequest($request);
  6192.                if($form->isValid()){
  6193.                   $em->flush();
  6194.         
  6195.                 $ok_soumission =" Votre message a été pris en compte";
  6196.                     
  6197.                     
  6198.                 } else {
  6199.                     $error =" Veillez corrigez vos erreurs";
  6200.                 }
  6201.         }
  6202.     
  6203.         return $this->render('admin/edit_payment_method.html.twig', [
  6204.            'boutique' => $boutique,
  6205.            'paymentMethod' => $paymentMethod,
  6206.            'form' => $form->createView(),
  6207.            'userBoutique' => $userBoutique
  6208.         ]);
  6209.     }
  6210.     
  6211.     /**
  6212.      * @Route("/{slug}/payment-method/delete/{id}", name="admin.delete_payment_method")
  6213.      * @return \Symfony\Component\HttpFoundation\Response
  6214.      */
  6215.     public function deletePaymentMethodAction(Request $request$slug$id)
  6216.     {
  6217.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6218.            return $this->redirectToRoute('security_login');
  6219.         }
  6220.         $em $this->getDoctrine()
  6221.                     ->getManager();
  6222.         $boutique $em->getRepository(Boutique::class)
  6223.                         ->findOneBySlug($slug);
  6224.                         
  6225.         $paymentMethod $em->getRepository(PaymentMethod::class)
  6226.                         ->findOneBy(
  6227.                         array(
  6228.                             'boutique' => $boutique->getId(),
  6229.                             'id' => $id
  6230.                         )
  6231.                         );
  6232.         if(null !== $paymentMethod){
  6233.             $em->remove($paymentMethod);
  6234.             $em->flush();
  6235.         }
  6236.         return $this->redirectToRoute('admin.payment_methods', array('slug' => $boutique->getSlug()));
  6237.     }
  6238.     
  6239.     /**
  6240.      * @Route("/{slug}/expensives/list", name="admin.expensives")
  6241.      * @return \Symfony\Component\HttpFoundation\Response
  6242.      */
  6243.     public function expensivesAction(Request $requestBoutique $boutique)
  6244.     {
  6245.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6246.            return $this->redirectToRoute('security_login');
  6247.         }
  6248.         $em $this->getDoctrine()
  6249.                     ->getManager();
  6250.         
  6251.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  6252.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  6253.         $dateDebut->setTime(00);
  6254.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  6255.         $dateFin->setTime(2359);
  6256.         
  6257.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  6258.         $startMonth $intervalleMois['debut'];
  6259.         $endMonth $intervalleMois['fin'];
  6260.         
  6261.         $expensives  $em->getRepository(Expensive::class)
  6262.                         ->depenseParDate($boutique->getId(), $dateDebut$dateFin);
  6263.         
  6264.         $startYear date('Y-01-01');
  6265.         $endYear date('Y-12-31');
  6266.         $user $this->getUser();
  6267.         $userBoutique $em->getRepository(UserBoutique::class)
  6268.                         ->findOneBy(
  6269.                             array(
  6270.                             'user' => $user->getId(),
  6271.                             'boutique' => $boutique->getId()
  6272.                             )
  6273.                         );
  6274.         if('POST' == $request->getMethod()){
  6275.             $dateDebut $_POST['dateDebut'];
  6276.             $dateFin $_POST['dateFin'];
  6277.             
  6278.             $dateDebut = new \DateTime($dateDebut);
  6279.             $dateFin = new \DateTime($dateFin);
  6280.             
  6281.             $expensives $em->getRepository(Expensive::class)
  6282.                         ->depenseParDate($boutique->getId(), $dateDebut$dateFin);
  6283.             
  6284.             
  6285.             return $this->render('admin/expensives_table_content.html.twig', [
  6286.                'boutique' => $boutique,
  6287.                'expensives' => $expensives,
  6288.                'userBoutique' => $userBoutique
  6289.             ]);
  6290.         }
  6291.         
  6292.             
  6293.         return $this->render('admin/expensives.html.twig', [
  6294.            'boutique' => $boutique,
  6295.            'expensives' => $expensives,
  6296.            'userBoutique' => $userBoutique,
  6297.            'intervalleDeDate' => $intervalleDeDate,
  6298.            'dateDebut' => $dateDebut,
  6299.            'dateFin' => $dateFin,
  6300.            'startMonth' => $startMonth,
  6301.            'intervalleMois' => $intervalleMois,
  6302.            'endMonth' => $endMonth,
  6303.            'startYear' => $startYear,
  6304.            'endYear' => $endYear
  6305.            
  6306.         ]);
  6307.     }
  6308.     
  6309.     /**
  6310.      * @Route("/{slug}/expensives/new", name="admin.new_expensive")
  6311.      * @return \Symfony\Component\HttpFoundation\Response
  6312.      */
  6313.     public function newExpensiveAction(Request $requestBoutique $boutique)
  6314.     {
  6315.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6316.            return $this->redirectToRoute('security_login');
  6317.         }
  6318.         $em $this->getDoctrine()
  6319.                     ->getManager();
  6320.         
  6321.         $expensive = new Expensive;
  6322.         
  6323.         $user $this->getUser();
  6324.         $userBoutique $em->getRepository(UserBoutique::class)
  6325.                         ->findOneBy(
  6326.                             array(
  6327.                             'user' => $user->getId(),
  6328.                             'boutique' => $boutique->getId()
  6329.                             )
  6330.                         );
  6331.         $form $this->createForm(ExpensiveType::class, $expensive, array('boutique' => $boutique->getId()));
  6332.         
  6333.         $ok_soumission '';
  6334.         $error '';
  6335.         $laDate '';
  6336.         if($request->getMethod() == 'POST'){
  6337.             
  6338.                $form->handleRequest($request);
  6339.                if($form->isValid()){
  6340.                 $data $form->getData();
  6341.                    $expensive->setBoutique($boutique);
  6342.                    $expensive->setCreePar($user);
  6343.                   $em->persist($expensive);
  6344.                   $em->flush();
  6345.         
  6346.                 $ok_soumission =" Votre message a été pris en compte";
  6347.                     
  6348.                 $moyenDePaiement $request->request->get('moyenDePaiement');
  6349.                 $expensive->setMoyenDePaiement($moyenDePaiement);
  6350.                 if($boutique->getSettings()->isGenererAutomatiquementEcrituresComptabilite()){
  6351.                 $libelle 'Règlement fournisseur';
  6352.                 if($expensive->getTiers() != null){
  6353.                     $libelle $libelle' '$expensive->getTiers()->getNom();
  6354.                 }
  6355.                 $groupeEcritureComptable = new GroupeEcritureComptable;
  6356.                 $groupeEcritureComptable->setBoutique($boutique);
  6357.                 $groupeEcritureComptable->setLibelleEcriture($libelle);
  6358.                 $groupeEcritureComptable->setDebit($data->getMontant());
  6359.                 $groupeEcritureComptable->setCredit($data->getMontant());
  6360.                 $groupeEcritureComptable->setLaDate($data->getLaDate());
  6361.                 $groupeEcritureComptable->setNumeroPiece($data->getPiece());
  6362.                 $groupeEcritureComptable->setAnnee($data->getLaDate()->format('Y'));
  6363.                 $groupeEcritureComptable->setMois($data->getLaDate()->format('m'));
  6364.                 $em->persist($groupeEcritureComptable);
  6365.                 $em->flush();
  6366.                     
  6367.                 //Ecriture comptable
  6368.                 
  6369.                 //$ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeVente());
  6370.                 if($moyenDePaiement == 'cash' || $moyenDePaiement == 'mobile-money'){
  6371.                     //Debit
  6372.                     
  6373.                     
  6374.                     $groupeEcritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6375.                     $ecritureComptable = new EcritureComptable;
  6376.                     
  6377.                     $ecritureComptable->setBoutique($boutique);
  6378.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6379.                     
  6380.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6381.                     $compte $em->getRepository(Compte::class)
  6382.                                 ->findOneBy(
  6383.                                     array(
  6384.                                         'boutique' => $boutique,
  6385.                                         'numero' => '5711' //Caisse
  6386.                                     )    
  6387.                                 ); 
  6388.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  6389.                     $ecritureComptable->setCompte($compte);
  6390.                     $ecritureComptable->setLibelleEcriture($libelle);
  6391.                     $ecritureComptable->setCredit($data->getMontant());
  6392.                     $ecritureComptable->setSolde($compte->getSolde());
  6393.                     $ecritureComptable->setLaDate($data->getLaDate());
  6394.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6395.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6396.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6397.                     $em->persist($ecritureComptable);
  6398.                     //Debit
  6399.                     $ecritureComptable = new EcritureComptable;
  6400.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6401.                     $ecritureComptable->setBoutique($boutique);
  6402.                     
  6403.                     $ecritureComptable->setLeJournal($boutique->getSettings()->getJournalDeCaisse());
  6404.                     $compte $em->getRepository(Compte::class)
  6405.                                 ->findOneBy(
  6406.                                     array(
  6407.                                         'boutique' => $boutique,
  6408.                                         'numero' => '658'
  6409.                                     )    
  6410.                                 ); //Charge divers
  6411.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  6412.                     $ecritureComptable->setCompte($compte);
  6413.                     $ecritureComptable->setLibelleEcriture($libelle);
  6414.                     $ecritureComptable->setDebit($data->getMontant());
  6415.                     $ecritureComptable->setSolde($compte->getSolde());
  6416.                     $ecritureComptable->setLaDate($data->getLaDate());
  6417.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6418.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6419.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6420.                     $em->persist($ecritureComptable);
  6421.                 }else{
  6422.                     $leJournal $boutique->getSettings()->getJournalDeBanque();
  6423.                     
  6424.                     $groupeEcritureComptable->setLeJournal($leJournal);
  6425.                     $ecritureComptable = new EcritureComptable;
  6426.                     
  6427.                     $ecritureComptable->setBoutique($boutique);
  6428.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6429.                     
  6430.                     $ecritureComptable->setLeJournal($leJournal);
  6431.                     $compte $em->getRepository(Compte::class)
  6432.                                 ->findOneBy(
  6433.                                     array(
  6434.                                         'boutique' => $boutique,
  6435.                                         'numero' => '521'
  6436.                                     )    
  6437.                                 ); //Banque
  6438.                     $compte->setSolde($compte->getSolde() - $data->getMontant());
  6439.                     $ecritureComptable->setCompte($compte);
  6440.                     $ecritureComptable->setLibelleEcriture($libelle);
  6441.                     $ecritureComptable->setCredit($data->getMontant());
  6442.                     $ecritureComptable->setSolde($compte->getSolde());
  6443.                     $ecritureComptable->setLaDate($data->getLaDate());
  6444.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6445.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6446.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6447.                     $em->persist($ecritureComptable);
  6448.                     //Debit
  6449.                     $ecritureComptable = new EcritureComptable;
  6450.                     $ecritureComptable->setGroupeEcritureComptable($groupeEcritureComptable);
  6451.                     $ecritureComptable->setBoutique($boutique);
  6452.                     
  6453.                     $ecritureComptable->setLeJournal($leJournal);
  6454.                     $compte $em->getRepository(Compte::class)
  6455.                                 ->findOneBy(
  6456.                                     array(
  6457.                                         'boutique' => $boutique,
  6458.                                         'numero' => '658'
  6459.                                     )    
  6460.                                 ); //Charge divers
  6461.                     $compte->setSolde($compte->getSolde() + $data->getMontant());
  6462.                     $ecritureComptable->setCompte($compte);
  6463.                     $ecritureComptable->setLibelleEcriture($libelle);
  6464.                     $ecritureComptable->setDebit($data->getMontant());
  6465.                     $ecritureComptable->setSolde($compte->getSolde());
  6466.                     $ecritureComptable->setLaDate($data->getLaDate());
  6467.                     $ecritureComptable->setNumeroPiece($data->getPiece());
  6468.                     $ecritureComptable->setAnnee($ecritureComptable->getLaDate()->format('Y'));
  6469.                     $ecritureComptable->setMois($ecritureComptable->getLaDate()->format('m'));
  6470.                     $em->persist($ecritureComptable);
  6471.                 }
  6472.                 }
  6473.                 $em->flush();
  6474.                 $expensive = new Expensive;
  6475.                 
  6476.                 $form $this->createForm(ExpensiveType::class, $expensive);
  6477.                     
  6478.                 } else {
  6479.                     $error =" Veillez corrigez vos erreurs";
  6480.                 }
  6481.         }
  6482.     
  6483.         return $this->render('admin/new_expensive.html.twig', [
  6484.            'boutique' => $boutique,
  6485.            'form' => $form->createView(),
  6486.            'userBoutique' => $userBoutique
  6487.         ]);
  6488.     }
  6489.     
  6490.     /**
  6491.      * @Route("/{slug}/expensive/edit/{id}", name="admin.edit_expensive")
  6492.      * @return \Symfony\Component\HttpFoundation\Response
  6493.      */
  6494.     public function editExpensivesAction(Request $request,  $slug$id)
  6495.     {
  6496.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6497.            return $this->redirectToRoute('security_login');
  6498.         }
  6499.         $em $this->getDoctrine()
  6500.                     ->getManager();
  6501.         
  6502.         $boutique $em->getRepository(Boutique::class)
  6503.                     ->findOneBySlug($slug);
  6504.         $user $this->getUser();
  6505.         $userBoutique $em->getRepository(UserBoutique::class)
  6506.                         ->findOneBy(
  6507.                             array(
  6508.                             'user' => $user->getId(),
  6509.                             'boutique' => $boutique->getId()
  6510.                             )
  6511.                         );
  6512.         $expensive $em->getRepository(Expensive::class)
  6513.                     ->findOneBy(
  6514.                         array(
  6515.                             'boutique' => $boutique->getId(),
  6516.                             'id' => $id
  6517.                         )
  6518.                     );
  6519.         
  6520.         $form $this->createForm(ExpensiveEditType::class, $expensive, array('boutique' => $boutique->getId()));
  6521.         
  6522.         $ok_soumission '';
  6523.         $error '';
  6524.         
  6525.         if($request->getMethod() == 'POST'){
  6526.             
  6527.                $form->handleRequest($request);
  6528.                if($form->isValid()){
  6529.                 $expensive->setModifiePar($user);
  6530.                   $em->flush();
  6531.         
  6532.                 $ok_soumission =" Votre message a été pris en compte";
  6533.                     
  6534.                     
  6535.                 } else {
  6536.                     $error =" Veillez corrigez vos erreurs";
  6537.                 }
  6538.         }
  6539.     
  6540.         return $this->render('admin/edit_expensive.html.twig', [
  6541.            'boutique' => $boutique,
  6542.            'expensive' => $expensive,
  6543.            'form' => $form->createView(),
  6544.            'userBoutique' => $userBoutique
  6545.         ]);
  6546.     }
  6547.     
  6548.     /**
  6549.      * @Route("/{slug}/expensive/delete/{id}", name="admin.delete_expensive")
  6550.      * @return \Symfony\Component\HttpFoundation\Response
  6551.      */
  6552.     public function deleteExpensiveAction(Request $request$slug$id)
  6553.     {
  6554.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6555.            return $this->redirectToRoute('security_login');
  6556.         }
  6557.         $em $this->getDoctrine()
  6558.                     ->getManager();
  6559.         $boutique $em->getRepository(Boutique::class)
  6560.                         ->findOneBySlug($slug);
  6561.         $user $this->getUser();
  6562.                         
  6563.         $expensive $em->getRepository(Expensive::class)
  6564.                         ->findOneBy(
  6565.                         array(
  6566.                             'boutique' => $boutique->getId(),
  6567.                             'id' => $id
  6568.                         )
  6569.                         );
  6570.         if(null !== $expensive){
  6571.             $expensive->setEstSupprime(true);
  6572.             $expensive->setSupprimePar($user);
  6573.             //$em->remove($expensive);
  6574.             $em->flush();
  6575.         }
  6576.         return $this->redirectToRoute('admin.expensives', array('slug' => $boutique->getSlug()));
  6577.     }
  6578.     /**
  6579.      * @Route("/{slug}/categorie-depense/list", name="admin_categorie_depenses")
  6580.      * @return \Symfony\Component\HttpFoundation\Response
  6581.      */
  6582.     public function categorieDepenseAction(Request $requestBoutique $boutique)
  6583.     {
  6584.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6585.            return $this->redirectToRoute('security_login');
  6586.         }
  6587.         $em $this->getDoctrine()
  6588.                     ->getManager();
  6589.         
  6590.         $categorieDepenses  $em->getRepository(CategorieDepense::class)
  6591.                         ->findBy(
  6592.                             array(
  6593.                                 'boutique' => $boutique->getId()
  6594.                             )    
  6595.                         );
  6596.         
  6597.         $user $this->getUser();
  6598.         $userBoutique $em->getRepository(UserBoutique::class)
  6599.                         ->findOneBy(
  6600.                             array(
  6601.                             'user' => $user->getId(),
  6602.                             'boutique' => $boutique->getId()
  6603.                             )
  6604.                         );
  6605.         
  6606.         
  6607.             
  6608.         return $this->render('admin/categorie_depenses.html.twig', [
  6609.            'boutique' => $boutique,
  6610.            'userBoutique' => $userBoutique,
  6611.            'categorieDepenses' => $categorieDepenses
  6612.            
  6613.         ]);
  6614.     }
  6615.     
  6616.     /**
  6617.      * @Route("/{slug}/categorie-depense/nouveau", name="admin_nouvelle_categorie_dedepense")
  6618.      * @return \Symfony\Component\HttpFoundation\Response
  6619.      */
  6620.     public function nouvelleCategorieDepenseAction(Request $requestBoutique $boutique)
  6621.     {
  6622.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6623.            return $this->redirectToRoute('security_login');
  6624.         }
  6625.         $em $this->getDoctrine()
  6626.                     ->getManager();
  6627.         
  6628.         $categorieDepense = new CategorieDepense;
  6629.         
  6630.         $user $this->getUser();
  6631.         $userBoutique $em->getRepository(UserBoutique::class)
  6632.                         ->findOneBy(
  6633.                             array(
  6634.                             'user' => $user->getId(),
  6635.                             'boutique' => $boutique->getId()
  6636.                             )
  6637.                         );
  6638.         $form $this->createForm(CategorieDepenseType::class, $categorieDepense);
  6639.         
  6640.         $ok_soumission '';
  6641.         
  6642.         if($request->getMethod() == 'POST'){
  6643.             
  6644.                $form->handleRequest($request);
  6645.                if($form->isValid()){
  6646.                 $categorieDepense->setBoutique($boutique);
  6647.                   $em->persist($categorieDepense);
  6648.                   $em->flush();
  6649.         
  6650.                 $ok_soumission =" Votre message a été pris en compte";
  6651.                     
  6652.                 $categorieDepense = new CategorieDepense;
  6653.                 
  6654.                 $form $this->createForm(CategorieDepenseType::class, $categorieDepense);
  6655.                     
  6656.                 } else {
  6657.                     $error =" Veillez corrigez vos erreurs";
  6658.                 }
  6659.         }
  6660.     
  6661.         return $this->render('admin/nouvelle_categorie_depense.html.twig', [
  6662.            'boutique' => $boutique,
  6663.            'form' => $form->createView(),
  6664.            'userBoutique' => $userBoutique
  6665.         ]);
  6666.     }
  6667.     
  6668.     /**
  6669.      * @Route("/{slug}/categorie-depense/modifier/{id}", name="admin_modifier_categorie_depense")
  6670.      * @return \Symfony\Component\HttpFoundation\Response
  6671.      */
  6672.     public function modifierCategorieDepenseAction(Request $request,  $slug$id)
  6673.     {
  6674.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6675.            return $this->redirectToRoute('security_login');
  6676.         }
  6677.         $em $this->getDoctrine()
  6678.                     ->getManager();
  6679.         
  6680.         $boutique $em->getRepository(Boutique::class)
  6681.                     ->findOneBySlug($slug);
  6682.         $user $this->getUser();
  6683.         $userBoutique $em->getRepository(UserBoutique::class)
  6684.                         ->findOneBy(
  6685.                             array(
  6686.                             'user' => $user->getId(),
  6687.                             'boutique' => $boutique->getId()
  6688.                             )
  6689.                         );
  6690.         $categorieDepense $em->getRepository(CategorieDepense::class)
  6691.                     ->findOneBy(
  6692.                         array(
  6693.                             'boutique' => $boutique->getId(),
  6694.                             'id' => $id
  6695.                         )
  6696.                     );
  6697.         
  6698.         $form $this->createForm(CategorieDepenseEditType::class, $categorieDepense);
  6699.         
  6700.         $ok_soumission '';
  6701.         $error '';
  6702.         
  6703.         if($request->getMethod() == 'POST'){
  6704.             
  6705.                $form->handleRequest($request);
  6706.                if($form->isValid()){
  6707.                 
  6708.                   $em->flush();
  6709.         
  6710.                 $ok_soumission =" Votre message a été pris en compte";
  6711.                     
  6712.                     
  6713.                 } else {
  6714.                     $error =" Veillez corrigez vos erreurs";
  6715.                 }
  6716.         }
  6717.     
  6718.         return $this->render('admin/modifier_categorie_depense.html.twig', [
  6719.            'boutique' => $boutique,
  6720.            'categorieDepense' => $categorieDepense,
  6721.            'form' => $form->createView(),
  6722.            'userBoutique' => $userBoutique
  6723.         ]);
  6724.     }
  6725.     
  6726.     /**
  6727.      * @Route("/{slug}/categorie-depense/supprimer/{id}", name="admin_supprimer_categorie_depense")
  6728.      * @return \Symfony\Component\HttpFoundation\Response
  6729.      */
  6730.     public function supprimerCategorieDepenseAction(Request $request$slug$id)
  6731.     {
  6732.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6733.            return $this->redirectToRoute('security_login');
  6734.         }
  6735.         $em $this->getDoctrine()
  6736.                     ->getManager();
  6737.         $boutique $em->getRepository(Boutique::class)
  6738.                         ->findOneBySlug($slug);
  6739.         $user $this->getUser();
  6740.                         
  6741.         $categorieDepense $em->getRepository(CategorieDepense::class)
  6742.                         ->findOneBy(
  6743.                         array(
  6744.                             'boutique' => $boutique->getId(),
  6745.                             'id' => $id
  6746.                         )
  6747.                         );
  6748.         if(null !== $categorieDepense){
  6749.             
  6750.             $em->remove($categorieDepense);
  6751.             $em->flush();
  6752.         }
  6753.         return $this->redirectToRoute('admin_categorie_depenses', array('slug' => $boutique->getSlug()));
  6754.     }
  6755.     
  6756.     
  6757.     /**
  6758.      * @Route("/{slug}/third/list", name="admin.liste_tiers")
  6759.      * @return \Symfony\Component\HttpFoundation\Response
  6760.      */
  6761.     public function listeTiersAction(Request $requestBoutique $boutique)
  6762.     {
  6763.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6764.            return $this->redirectToRoute('security_login');
  6765.         }
  6766.         $em $this->getDoctrine()
  6767.                     ->getManager();
  6768.         
  6769.         $tiers $em->getRepository(Tiers::class)
  6770.                     ->findBy(
  6771.                         array(
  6772.                             'boutique' => $boutique->getId(),
  6773.                             'estSupprime' => false
  6774.                             
  6775.                         ),
  6776.                         array(
  6777.                             'nom' => 'ASC'
  6778.                         )
  6779.                         );
  6780.         $user $this->getUser();
  6781.         $userBoutique $em->getRepository(UserBoutique::class)
  6782.                         ->findOneBy(
  6783.                             array(
  6784.                             'user' => $user->getId(),
  6785.                             'boutique' => $boutique->getId()
  6786.                             )
  6787.                         );
  6788.         return $this->render('admin/liste_tiers.html.twig', [
  6789.            'boutique' => $boutique,
  6790.            'tiers' => $tiers,
  6791.            'userBoutique' => $userBoutique
  6792.         ]);
  6793.     }
  6794.     
  6795.     //Service
  6796.     
  6797.     /**
  6798.      * @Route("/{slug}/new-third", name="admin.new_third")
  6799.      * @return \Symfony\Component\HttpFoundation\Response
  6800.      */
  6801.     public function newThirdAction(Request $requestBoutique $boutique)
  6802.     {
  6803.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6804.            return $this->redirectToRoute('security_login');
  6805.         }
  6806.         $em $this->getDoctrine()
  6807.                     ->getManager();
  6808.         
  6809.         $tiers = new Tiers;
  6810.         $form $this->createForm(TiersType::class, $tiers);
  6811.         
  6812.         $user $this->getUser();
  6813.         $userBoutique $em->getRepository(UserBoutique::class)
  6814.                         ->findOneBy(
  6815.                             array(
  6816.                             'user' => $user->getId(),
  6817.                             'boutique' => $boutique->getId()
  6818.                             )
  6819.                         );
  6820.         
  6821.         $ok_soumission '';
  6822.         $error '';
  6823.         
  6824.         if($request->getMethod() == 'POST'){
  6825.             
  6826.                $form->handleRequest($request);
  6827.                if($form->isValid()){
  6828.                    $tiers->setBoutique($boutique);
  6829.                    $tiers->setCreePar($user);
  6830.                   $em->persist($tiers);
  6831.                   $em->flush();
  6832.         
  6833.                 $ok_soumission =" Votre message a été pris en compte";
  6834.                 $tiers = new Tiers;
  6835.                 
  6836.                 $form $this->createForm(TiersType::class, $tiers);
  6837.                     
  6838.                 } else {
  6839.                     $error =" Veillez corrigez vos erreurs";
  6840.                 }
  6841.         }
  6842.         return $this->render('admin/nouveau_tiers.html.twig', [
  6843.            'boutique' => $boutique,
  6844.            'form' => $form->createView(),
  6845.            'userBoutique' => $userBoutique
  6846.         ]);
  6847.     }
  6848.     /**
  6849.      * @Route("/{slug}/edit-third/{third}", name="admin.edit_third")
  6850.      * @return \Symfony\Component\HttpFoundation\Response
  6851.      */
  6852.     public function editThirdAction(Request $requestBoutique $boutique$third)
  6853.     {
  6854.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6855.            return $this->redirectToRoute('security_login');
  6856.         }
  6857.         $em $this->getDoctrine()
  6858.                     ->getManager();
  6859.                     
  6860.         $user $this->getUser();
  6861.         $userBoutique $em->getRepository(UserBoutique::class)
  6862.                         ->findOneBy(
  6863.                             array(
  6864.                             'user' => $user->getId(),
  6865.                             'boutique' => $boutique->getId()
  6866.                             )
  6867.                         );
  6868.         $third $em->getRepository(Tiers::class)
  6869.                     ->findOneById($third);
  6870.         $form $this->createForm(TiersEditType::class, $third);
  6871.         
  6872.         $ok_soumission '';
  6873.         $error '';
  6874.         
  6875.         if($request->getMethod() == 'POST'){
  6876.             
  6877.                $form->handleRequest($request);
  6878.                if($form->isValid()){
  6879.                     $third->setModifiePar($user);
  6880.                   $em->flush();
  6881.         
  6882.                 $ok_soumission =" Votre message a été pris en compte";
  6883.                     
  6884.                 } else {
  6885.                     $error =" Veillez corrigez vos erreurs";
  6886.                 }
  6887.         }
  6888.         return $this->render('admin/edit_third.html.twig', [
  6889.            'boutique' => $boutique,
  6890.            'form' => $form->createView(),
  6891.            'third' => $third,
  6892.            'userBoutique' => $userBoutique
  6893.         ]);
  6894.     }
  6895.     /**
  6896.      * @Route("/{slug}/delete-third/{third}", name="admin.delete_third")
  6897.      * @return \Symfony\Component\HttpFoundation\Response
  6898.      */
  6899.     public function deleteThirdAction(Request $requestBoutique $boutique$third)
  6900.     {
  6901.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6902.            return $this->redirectToRoute('security_login');
  6903.         }
  6904.         $em $this->getDoctrine()
  6905.                     ->getManager();
  6906.         $user $this->getUser();
  6907.         $third $em->getRepository(Tiers::class)
  6908.                     ->findOneById($third);
  6909.                     
  6910.         if(null != $third){
  6911.             $third->setEstSupprime(true);
  6912.             $third->setSupprimePar($user);
  6913.             $em->flush();
  6914.         }
  6915.         
  6916.         return $this->redirectToRoute('admin.liste_tiers', array('slug' => $boutique->getSlug()));
  6917.     }
  6918.     /**
  6919.      * @Route("/{slug}/statistics", name="admin.statistics")
  6920.      * @return \Symfony\Component\HttpFoundation\Response
  6921.      */
  6922.     public function statisticsAction(Request $requestBoutique $boutique)
  6923.     {
  6924.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6925.            return $this->redirectToRoute('security_login');
  6926.         }
  6927.         $em $this->getDoctrine()
  6928.                     ->getManager();
  6929.         
  6930.         $tiers $em->getRepository(Tiers::class)
  6931.                     ->findByBoutique($boutique);
  6932.         $user $this->getUser();
  6933.         $userBoutique $em->getRepository(UserBoutique::class)
  6934.                         ->findOneBy(
  6935.                             array(
  6936.                             'user' => $user->getId(),
  6937.                             'boutique' => $boutique->getId()
  6938.                             )
  6939.                         );
  6940.                         
  6941.         return $this->render('admin/statistics.html.twig', [
  6942.            'boutique' => $boutique,
  6943.            'tiers' => $tiers,
  6944.            'userBoutique' => $userBoutique
  6945.         ]);
  6946.     }
  6947.     
  6948.     /**
  6949.      * @Route("/{slug}/promotions", name="admin.promotions")
  6950.      * @return \Symfony\Component\HttpFoundation\Response
  6951.      */
  6952.     public function promotionsAction(Request $requestBoutique $boutique)
  6953.     {
  6954.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6955.            return $this->redirectToRoute('security_login');
  6956.         }
  6957.         $em $this->getDoctrine()
  6958.                     ->getManager();
  6959.         
  6960.         $tiers $em->getRepository(Tiers::class)
  6961.                     ->findByBoutique($boutique);
  6962.         $user $this->getUser();
  6963.         $userBoutique $em->getRepository(UserBoutique::class)
  6964.                         ->findOneBy(
  6965.                             array(
  6966.                             'user' => $user->getId(),
  6967.                             'boutique' => $boutique->getId()
  6968.                             )
  6969.                         );
  6970.         return $this->render('admin/liste_tiers.html.twig', [
  6971.            'boutique' => $boutique,
  6972.            'tiers' => $tiers,
  6973.            'userBoutique' => $userBoutique
  6974.         ]);
  6975.     }
  6976.     
  6977.     /**
  6978.      * @Route("/{slug}/new-payment-patern", name="admin.new_payment_patern")
  6979.      * @return \Symfony\Component\HttpFoundation\Response
  6980.      */
  6981.     public function newPayementPaternMethodAction(Request $requestBoutique $boutique)
  6982.     {
  6983.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  6984.            return $this->redirectToRoute('security_login');
  6985.         }
  6986.         $em $this->getDoctrine()
  6987.                     ->getManager();
  6988.         
  6989.         $modeleReglement = new ModeleReglement;
  6990.         $form $this->createForm(ModeleReglementType::class, $modeleReglement);
  6991.         
  6992.         $ok_soumission '';
  6993.         $error '';
  6994.         $user $this->getUser();
  6995.         $userBoutique $em->getRepository(UserBoutique::class)
  6996.                         ->findOneBy(
  6997.                             array(
  6998.                             'user' => $user->getId(),
  6999.                             'boutique' => $boutique->getId()
  7000.                             )
  7001.                         );
  7002.         if($request->getMethod() == 'POST'){
  7003.             
  7004.                $form->handleRequest($request);
  7005.                if($form->isValid()){
  7006.                    $modeleReglement->setBoutique($boutique);
  7007.                   $em->persist($modeleReglement);
  7008.                   $em->flush();
  7009.         
  7010.                 $ok_soumission =" Votre message a été pris en compte";
  7011.                     
  7012.                 unset($modeleReglement);
  7013.                 unset($form);
  7014.                 $modeleReglement = new ModeleReglement;
  7015.                 
  7016.                 $form $this->createForm(ModeleReglementType::class, $modeleReglement);
  7017.                     
  7018.                 } else {
  7019.                     $error =" Veillez corrigez vos erreurs";
  7020.                 }
  7021.         }
  7022.         return $this->render('admin/nouveau_modele_reglement.html.twig', [
  7023.            'boutique' => $boutique
  7024.            'form' => $form->createView(),
  7025.            'userBoutique' => $userBoutique
  7026.         ]);
  7027.     }
  7028.     
  7029.     /**
  7030.      * @Route("/{slug}/payment-patern/list", name="admin.list_payment_patern")
  7031.      * @return \Symfony\Component\HttpFoundation\Response
  7032.      */
  7033.     public function listeModeleReglementAction(Request $requestBoutique $boutique)
  7034.     {
  7035.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7036.            return $this->redirectToRoute('security_login');
  7037.         }
  7038.         $em $this->getDoctrine()
  7039.                     ->getManager();
  7040.         
  7041.         $modeleReglements $em->getRepository(ModeleReglement::class)
  7042.                     ->findByBoutique($boutique);
  7043.         $user $this->getUser();
  7044.         $userBoutique $em->getRepository(UserBoutique::class)
  7045.                         ->findOneBy(
  7046.                             array(
  7047.                             'user' => $user->getId(),
  7048.                             'boutique' => $boutique->getId()
  7049.                             )
  7050.                         );
  7051.                         
  7052.         return $this->render('admin/liste_modele_reglement.html.twig', [
  7053.            'boutique' => $boutique,
  7054.            'modeleReglements' => $modeleReglements,
  7055.            'userBoutique' => $userBoutique
  7056.         ]);
  7057.     }
  7058.     
  7059.     /**
  7060.      * @Route("/{slug}/send-document-mail/{id}", name="admin.send_document_mail")
  7061.      * @return \Symfony\Component\HttpFoundation\Response
  7062.      */
  7063.     public function sendDocumentMailAction(Request $request, \Swift_Mailer $mailer$slug$id)
  7064.     {
  7065.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7066.            return $this->redirectToRoute('security_login');
  7067.         }
  7068.         $em $this->getDoctrine()
  7069.                     ->getManager();
  7070.         $boutique $em->getRepository(Boutique::class)
  7071.                         ->findOneBySlug($slug);
  7072.         $user $this->getUser();
  7073.         $userBoutique $em->getRepository(UserBoutique::class)
  7074.                         ->findOneBy(
  7075.                             array(
  7076.                             'user' => $user->getId(),
  7077.                             'boutique' => $boutique->getId()
  7078.                             )
  7079.                         );        
  7080.         $commande $em->getRepository(Commande::class)
  7081.                     ->findOneBy(
  7082.                         array(
  7083.                         'boutique' => $boutique->getId(),
  7084.                         'id' => $id
  7085.                         )
  7086.                     );
  7087.         
  7088.         $appName $this->getParameter('app_name');
  7089.         if('POST'== $request->getMethod()){
  7090.             $from $_POST['from'];
  7091.             $to $_POST['to_mail'];
  7092.             $subject $_POST['subject'];
  7093.             $contenu $_POST['message'];
  7094.             $sendAttachment = (bool)$_POST['send_attachment'];
  7095.             
  7096.             $message = (new \Swift_Message($subject))
  7097.             ->setFrom([$from  => $appName])
  7098.             ->setTo([$to])
  7099.             ->setBody(
  7100.                 $this->renderView(
  7101.                 'admin/document_email.html.twig',
  7102.                 [
  7103.                 'message' => $contenu
  7104.                 ]
  7105.                 ),
  7106.             'text/html'
  7107.             );
  7108.             if($sendAttachment){
  7109.                 $message->attach(\Swift_Attachment::fromPath($commande->getLienPDF()));
  7110.             }
  7111.             
  7112.             $mailer->send($message);
  7113.             
  7114.         }
  7115.         
  7116.         return $this->render('admin/send_document_mail.html.twig', [
  7117.            'boutique' => $boutique,
  7118.            'commande' => $commande,
  7119.            'userBoutique' => $userBoutique
  7120.         ]);
  7121.     }
  7122.     
  7123.     
  7124.     /**
  7125.      * @Route("/{slug}/nombre-commande-en-retard", name="admin.nombre_commande_en_retard")
  7126.      * @return \Symfony\Component\HttpFoundation\Response
  7127.      */
  7128.     public function nombreCommandeEnRetard(Request $requestBoutique $boutique)
  7129.     {
  7130.         $em $this->getDoctrine()
  7131.                     ->getManager();
  7132.         $nombreCommandeEnRetard $em->getRepository(Commande::class)
  7133.                         -> nombreCommandeEnRetard($boutique->getId());
  7134.                         
  7135.         $nombreCommandeEnRetard count($nombreCommandeEnRetard);
  7136.         $user $this->getUser();
  7137.         $userBoutique $em->getRepository(UserBoutique::class)
  7138.                         ->findOneBy(
  7139.                             array(
  7140.                             'user' => $user->getId(),
  7141.                             'boutique' => $boutique->getId()
  7142.                             )
  7143.                         );
  7144.         return $this->render('admin/nombre_commande_en_retard.html.twig', [
  7145.            'boutique' => $boutique,
  7146.            'nombreCommandeEnRetard' => $nombreCommandeEnRetard,
  7147.            'userBoutique' => $userBoutique
  7148.         ]);
  7149.     }
  7150.     
  7151.     /**
  7152.      * @Route("/{slug}/liste-commande-en-retard", name="admin.liste_commande_en_retard")
  7153.      * @return \Symfony\Component\HttpFoundation\Response
  7154.      */
  7155.     public function listeCommandeEnRetard(Request $requestBoutique $boutique)
  7156.     {
  7157.         $em $this->getDoctrine()
  7158.                     ->getManager();
  7159.         $nombreCommandeEnRetards $em->getRepository(Commande::class)
  7160.                         -> nombreCommandeEnRetard($boutique->getId());
  7161.                         
  7162.         $user $this->getUser();
  7163.         $userBoutique $em->getRepository(UserBoutique::class)
  7164.                         ->findOneBy(
  7165.                             array(
  7166.                             'user' => $user->getId(),
  7167.                             'boutique' => $boutique->getId()
  7168.                             )
  7169.                         );
  7170.         
  7171.         return $this->render('admin/liste_commande_en_retard.html.twig', [
  7172.            'boutique' => $boutique,
  7173.            'nombreCommandeEnRetards' => $nombreCommandeEnRetards,
  7174.            'userBoutique' => $userBoutique
  7175.         ]);
  7176.     }
  7177.     
  7178.     /**
  7179.      * @Route("/{slug}/my-invoices", name="admin.my_invoices")
  7180.      * @return \Symfony\Component\HttpFoundation\Response
  7181.      */
  7182.     public function myInvoicesAction(Request $requestBoutique $boutique)
  7183.     {
  7184.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7185.            return $this->redirectToRoute('security_login');
  7186.         }
  7187.         $em $this->getDoctrine()
  7188.                     ->getManager();
  7189.                     
  7190.         
  7191.                         
  7192.         $toutesLesValiditeServices $em->getRepository(ValiditeService::class)
  7193.                     ->toutesLesValiditeService($boutique->getId());
  7194.                     
  7195.         
  7196.         $user $this->getUser();
  7197.         $userBoutique $em->getRepository(UserBoutique::class)
  7198.                         ->findOneBy(
  7199.                             array(
  7200.                             'user' => $user->getId(),
  7201.                             'boutique' => $boutique->getId()
  7202.                             )
  7203.                         );
  7204.                         
  7205.         return $this->render('admin/my_invoices.html.twig', [
  7206.            'toutesLesValiditeServices' => $toutesLesValiditeServices,
  7207.            'boutique' => $boutique,
  7208.            'userBoutique' => $userBoutique
  7209.         ]);
  7210.     }
  7211.     
  7212.     /**
  7213.      * @Route("/{slug}/my-tickets/{id}", name="admin.my_tickets")
  7214.      * @return \Symfony\Component\HttpFoundation\Response
  7215.      */
  7216.     public function myTicketsAction(Request $request$slug$id)
  7217.     {
  7218.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7219.            return $this->redirectToRoute('security_login');
  7220.         }
  7221.         $em $this->getDoctrine()
  7222.                     ->getManager();
  7223.                     
  7224.         $boutique $em->getRepository(Boutique::class)
  7225.                         ->findOneBySlug($slug);
  7226.         $user $this->getUser();
  7227.         $userBoutique $em->getRepository(UserBoutique::class)
  7228.                         ->findOneBy(
  7229.                             array(
  7230.                             'user' => $user->getId(),
  7231.                             'boutique' => $boutique->getId()
  7232.                             )
  7233.                         );
  7234.         
  7235.         $tickets $em->getRepository(Ticket::class)
  7236.                         ->findBy(
  7237.                             array(
  7238.                                 'boutique'=>$boutique->getId(),
  7239.                                 'user' => $user->getId()
  7240.                             )
  7241.                         );
  7242.         
  7243.         return $this->render('admin/my_tickets.html.twig', [
  7244.            'boutique' => $boutique,
  7245.            'tickets'  => $tickets,
  7246.            'userBoutique' => $userBoutique
  7247.         ]);
  7248.     }
  7249.     
  7250.     /**
  7251.      * @Route("/{slug}/new-ticket", name="admin.new_ticket")
  7252.      * @return \Symfony\Component\HttpFoundation\Response
  7253.      */
  7254.     public function newTicketAction(Request $request$slug)
  7255.     {
  7256.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7257.            return $this->redirectToRoute('security_login');
  7258.         }
  7259.         $em $this->getDoctrine()
  7260.                     ->getManager();
  7261.                     
  7262.         $boutique $em->getRepository(Boutique::class)
  7263.                         ->findOneBySlug($slug);
  7264.         $user $this->getUser();
  7265.         
  7266.         $ticket = new Ticket;
  7267.         
  7268.         $user $this->getUser();
  7269.         $userBoutique $em->getRepository(UserBoutique::class)
  7270.                         ->findOneBy(
  7271.                             array(
  7272.                             'user' => $user->getId(),
  7273.                             'boutique' => $boutique->getId()
  7274.                             )
  7275.                         );
  7276.         $form $this->createForm(TicketType::class, $ticket);
  7277.         
  7278.         $ok_soumission '';
  7279.         $error '';
  7280.         
  7281.         if($request->getMethod() == 'POST'){
  7282.             
  7283.                $form->handleRequest($request);
  7284.                if($form->isValid()){
  7285.                    $ticket->setBoutique($boutique);
  7286.                    $ticket->setUser($user);
  7287.                    
  7288.                   $em->persist($ticket);
  7289.                   $em->flush();
  7290.                   
  7291.                 return $this->redirectToRoute('admin.display_ticket', array('slug' => $boutique->getSlug(), 'id' => $ticket->getId()));
  7292.                 $ok_soumission =" Votre message a été pris en compte";
  7293.                     
  7294.                 $ticket = new Ticket;
  7295.                 
  7296.                 $form $this->createForm(TicketType::class, $ticket);
  7297.                     
  7298.                 } else {
  7299.                     $error =" Veillez corrigez vos erreurs";
  7300.                 }
  7301.         }
  7302.         
  7303.         return $this->render('admin/new_ticket.html.twig', [
  7304.            'boutique' => $boutique,
  7305.            'form' => $form->createView(),
  7306.            'userBoutique' => $userBoutique
  7307.         ]);
  7308.     }
  7309.     
  7310.     /**
  7311.      * @Route("/{slug}/display-ticket/{id}", name="admin.display_ticket")
  7312.      * @return \Symfony\Component\HttpFoundation\Response
  7313.      */
  7314.     public function displayTicketAction(Request $request$slug$id)
  7315.     {
  7316.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7317.            return $this->redirectToRoute('security_login');
  7318.         }
  7319.         $em $this->getDoctrine()
  7320.                     ->getManager();
  7321.                     
  7322.         $boutique $em->getRepository(Boutique::class)
  7323.                         ->findOneBySlug($slug);
  7324.         $user $this->getUser();
  7325.         $userBoutique $em->getRepository(UserBoutique::class)
  7326.                         ->findOneBy(
  7327.                             array(
  7328.                             'user' => $user->getId(),
  7329.                             'boutique' => $boutique->getId()
  7330.                             )
  7331.                         );
  7332.         
  7333.         $ticket $em->getRepository(Ticket::class)
  7334.                     ->findOneBy(
  7335.                         array(
  7336.                             'boutique' => $boutique->getId(),
  7337.                             'id' => $id
  7338.                         )
  7339.                     );
  7340.         $commentaires $em->getRepository(CommentaireTicket::class)
  7341.                             ->findByTicket($ticket->getId());
  7342.         $commentaireTicket = new CommentaireTicket;
  7343.         
  7344.         $user $this->getUser();
  7345.         $form $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  7346.         
  7347.         $ok_soumission '';
  7348.         $error '';
  7349.         
  7350.         if($request->getMethod() == 'POST'){
  7351.             
  7352.                $form->handleRequest($request);
  7353.                if($form->isValid()){
  7354.                    
  7355.                    $commentaireTicket->setTicket($ticket);
  7356.                    $commentaireTicket->setUser($user);
  7357.                    
  7358.                   $em->persist($commentaireTicket);
  7359.                   $em->flush();
  7360.                 
  7361.                 $commentaires $em->getRepository(CommentaireTicket::class)
  7362.                             ->findByTicket($ticket->getId());
  7363.                 $ok_soumission =" Votre message a été pris en compte";
  7364.                     
  7365.                 $commentaireTicket = new CommentaireTicket;
  7366.                 
  7367.                 $form $this->createForm(CommentaireTicketType::class, $commentaireTicket);
  7368.                     
  7369.                 } else {
  7370.                     $error =" Veillez corrigez vos erreurs";
  7371.                 }
  7372.         }
  7373.         
  7374.         return $this->render('admin/display_ticket.html.twig', [
  7375.            'boutique' => $boutique,
  7376.            'ticket' => $ticket,
  7377.            'form' => $form->createView(),
  7378.            'commentaires' => $commentaires,
  7379.            'userBoutique' => $userBoutique
  7380.         ]);
  7381.     }
  7382.     
  7383.     /**
  7384.      * @Route("/{slug}/close-ticket/{id}", name="admin.close_ticket")
  7385.      * @return \Symfony\Component\HttpFoundation\Response
  7386.      */
  7387.     public function closeTicketAction(Request $request$slug$id)
  7388.     {
  7389.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7390.            return $this->redirectToRoute('security_login');
  7391.         }
  7392.         $em $this->getDoctrine()
  7393.                     ->getManager();
  7394.                     
  7395.         $boutique $em->getRepository(Boutique::class)
  7396.                         ->findOneBySlug($slug);
  7397.         
  7398.         $ticket $em->getRepository(Ticket::class)
  7399.                     ->findOneBy(
  7400.                         array(
  7401.                             'boutique' => $boutique->getId(),
  7402.                             'id' => $id
  7403.                         )
  7404.                     );
  7405.         
  7406.         if(null !== $ticket){
  7407.             $ticket->setLesCommentairesSontFermes(true);
  7408.             $em->flush();
  7409.         }
  7410.         
  7411.         return $this->redirectToRoute('admin.display_ticket',array('slug'=>$boutique->getSlug(), 'id'=>$ticket->getId()));
  7412.     }
  7413.     
  7414.     
  7415.     /**
  7416.      * @Route("/{slug}/delete-ticket/{id}", name="admin.delete_ticket")
  7417.      * @return \Symfony\Component\HttpFoundation\Response
  7418.      */
  7419.     public function deleteTicketAction(Request $request$slug$id)
  7420.     {
  7421.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7422.            return $this->redirectToRoute('security_login');
  7423.         }
  7424.         $em $this->getDoctrine()
  7425.                     ->getManager();
  7426.                     
  7427.         $boutique $em->getRepository(Boutique::class)
  7428.                         ->findOneBySlug($slug);
  7429.         $user $this->getUser();
  7430.         
  7431.         
  7432.         $ok_soumission '';
  7433.         $error '';
  7434.         
  7435.         $ticket $em->getRepository(Ticket::class)
  7436.                     ->findOneBy(
  7437.                         array(
  7438.                             'boutique' => $boutique->getId(),
  7439.                             'id' => $id
  7440.                         )
  7441.                     );
  7442.         if(null !== $ticket){
  7443.             $commentaireTickets $em->getRepository(CommentaireTicket::class)
  7444.                                     ->findByTicket($ticket->getId());
  7445.             foreach($commentaireTickets as $commentaireTicket)
  7446.             {
  7447.                 $em->remove($commentaireTicket);
  7448.             }
  7449.             $em->remove($ticket);
  7450.             $em->flush();
  7451.         }
  7452.         
  7453.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  7454.     }
  7455.     
  7456.     
  7457.     /**
  7458.      * @Route("/{slug}/delete-commentaire-ticket/{id}", name="admin.delete_commentaire_ticket")
  7459.      * @return \Symfony\Component\HttpFoundation\Response
  7460.      */
  7461.     public function deleteCommentaireTicketAction(Request $request$slug$id)
  7462.     {
  7463.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7464.            return $this->redirectToRoute('security_login');
  7465.         }
  7466.         $em $this->getDoctrine()
  7467.                     ->getManager();
  7468.                     
  7469.         $boutique $em->getRepository(Boutique::class)
  7470.                         ->findOneBySlug($slug);
  7471.         $user $this->getUser();
  7472.     
  7473.         $commentaireTicket $em->getRepository(CommentaireTicket::class)
  7474.                     ->findOneById($id);
  7475.                     
  7476.         if(null !== $commentaireTicket){
  7477.             
  7478.             $em->remove($commentaireTicket);
  7479.             $em->flush();
  7480.         }
  7481.         
  7482.         return $this->redirectToRoute('admin.my_tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  7483.     }
  7484.     
  7485.     /**
  7486.      * @Route("/{slug}/liste-produit-lors-commande", name="admin.liste_produit_lors_commande")
  7487.      * @return \Symfony\Component\HttpFoundation\Response
  7488.      */
  7489.     public function listeProduitLorsCommandeAction(Request $requestBoutique $boutique)
  7490.     {
  7491.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7492.            return $this->redirectToRoute('security_login');
  7493.         }
  7494.         
  7495.         $em $this->getDoctrine()
  7496.                     ->getManager();
  7497.                     
  7498.         $produits $em->getRepository(Produit::class)
  7499.                         ->findBy(
  7500.                             array(
  7501.                                 'boutique' => $boutique->getId(),
  7502.                                 'estSupprime' => false
  7503.                             )    
  7504.                         );
  7505.         $user $this->getUser();
  7506.         $userBoutique $em->getRepository(UserBoutique::class)
  7507.                         ->findOneBy(
  7508.                             array(
  7509.                             'user' => $user->getId(),
  7510.                             'boutique' => $boutique->getId()
  7511.                             )
  7512.                         );
  7513.         
  7514.         
  7515.         return $this->render('admin/liste_produit_lors_commande.html.twig', [
  7516.            'boutique' => $boutique,
  7517.            'produits' => $produits,
  7518.            'userBoutique' => $userBoutique
  7519.         ]);
  7520.     }
  7521.     
  7522.     /**
  7523.      * @Route("/{slug}/stock-management", name="admin.stock_management")
  7524.      * @return \Symfony\Component\HttpFoundation\Response
  7525.      */
  7526.     public function stockManagementAction(Request $requestBoutique $boutique)
  7527.     {
  7528.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7529.            return $this->redirectToRoute('security_login');
  7530.         }
  7531.         $em $this->getDoctrine()
  7532.                     ->getManager();
  7533.                     
  7534.         $produits $em->getRepository(Produit::class)
  7535.                         ->findByBoutique($boutique->getId());
  7536.         $user $this->getUser();
  7537.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  7538.         
  7539.         
  7540.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  7541.         $startMonth $intervalleMois['debut'];
  7542.         $endMonth $intervalleMois['fin'];
  7543.         
  7544.         $dateDebut = new \DateTime($startMonth);
  7545.         $dateFin = new \DateTime($endMonth);
  7546.         $startYear date('Y-01-01');
  7547.         $endYear date('Y-12-31');
  7548.         $user $this->getUser();
  7549.         
  7550.         $userBoutique $em->getRepository(UserBoutique::class)
  7551.                         ->findOneBy(
  7552.                             array(
  7553.                             'user' => $user->getId(),
  7554.                             'boutique' => $boutique->getId()
  7555.                             )
  7556.                         );
  7557.         
  7558.         $stockEntries  $em->getRepository(EntreeDeStock::class)
  7559.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7560.         $produitVendus  $em->getRepository(ProduitCommande::class)
  7561.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice'$dateDebut$dateFin);
  7562.         if('POST' == $request->getMethod()){
  7563.             $dateDebut $_POST['dateDebut'];
  7564.             $dateFin $_POST['dateFin'];
  7565.             
  7566.             $dateDebut = new \DateTime($dateDebut);
  7567.             $dateFin = new \DateTime($dateFin);
  7568.             
  7569.             $stockEntries  $em->getRepository(EntreeDeStock::class)
  7570.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7571.             
  7572.             return $this->render('admin/entries_table_content.html.twig', [
  7573.                'boutique' => $boutique,
  7574.                'stockEntries' => $stockEntries,
  7575.                'userBoutique' => $userBoutique
  7576.             ]);
  7577.             
  7578.         }
  7579.         
  7580.         return $this->render('admin/stock_management.html.twig', [
  7581.            'boutique' => $boutique,
  7582.            'produits' => $produits,
  7583.            'userBoutique' => $userBoutique,
  7584.            'dateDebut' => $dateDebut,
  7585.            'dateFin' => $dateFin,
  7586.            'startMonth' => $startMonth,
  7587.            'endMonth' => $endMonth,
  7588.            'startYear' => $startYear,
  7589.            'endYear' => $endYear,
  7590.            'stockEntries' => $stockEntries,
  7591.            'produitVendus' => $produitVendus
  7592.         ]);
  7593.     }
  7594.     
  7595.     /**
  7596.      * @Route("/{slug}/nouvel-inventaire", name="admin_nouvel_inventaire")
  7597.      * @return \Symfony\Component\HttpFoundation\Response
  7598.      */
  7599.     public function nouvelInventaireAction(Request $requestBoutique $boutique)
  7600.     {
  7601.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7602.            return $this->redirectToRoute('security_login');
  7603.         }
  7604.         $em $this->getDoctrine()
  7605.                     ->getManager();
  7606.                     
  7607.         $produits $em->getRepository(Produit::class)
  7608.                         ->findByBoutique($boutique->getId());
  7609.         $user $this->getUser();
  7610.         $intervalleDeDate  $this->intervalleSemaine(date('Y-m-d'));
  7611.         $dateDebut = new \DateTime($intervalleDeDate['debut']);
  7612.         $dateFin = new \DateTime($intervalleDeDate['fin']);
  7613.         
  7614.         $intervalleMois $this->intervalleMois(date('Y-m-d'));
  7615.         $startMonth $intervalleMois['debut'];
  7616.         $endMonth $intervalleMois['fin'];
  7617.         
  7618.         $startYear date('Y-01-01');
  7619.         $endYear date('Y-12-31');
  7620.         $user $this->getUser();
  7621.         
  7622.         $userBoutique $em->getRepository(UserBoutique::class)
  7623.                         ->findOneBy(
  7624.                             array(
  7625.                             'user' => $user->getId(),
  7626.                             'boutique' => $boutique->getId()
  7627.                             )
  7628.                         );
  7629.         
  7630.         $stockEntries  $em->getRepository(EntreeDeStock::class)
  7631.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7632.         $produits $em->getRepository(Produit::class)
  7633.                         ->findBy(
  7634.                             array(
  7635.                                 'boutique' => $boutique->getId() 
  7636.                             ),
  7637.                             array(
  7638.                                 'nom' => 'ASC'
  7639.                             )
  7640.                         );
  7641.         if('POST' == $request->getMethod()){
  7642.             $dateDebut $_POST['dateDebut'];
  7643.             $dateFin $_POST['dateFin'];
  7644.             
  7645.             $dateDebut = new \DateTime($dateDebut);
  7646.             $dateFin = new \DateTime($dateFin);
  7647.             
  7648.             $stockEntries  $em->getRepository(EntreeDeStock::class)
  7649.                         ->entreeParDateEtType($boutique->getId(),  $dateDebut$dateFin);
  7650.             
  7651.             return $this->render('admin/entries_table_content.html.twig', [
  7652.                'boutique' => $boutique,
  7653.                'stockEntries' => $stockEntries
  7654.             ]);
  7655.             
  7656.         }
  7657.         
  7658.         return $this->render('admin/nouvel_inventaire.html.twig', [
  7659.            'boutique' => $boutique,
  7660.            'produits' => $produits,
  7661.            'userBoutique' => $userBoutique,
  7662.            'dateDebut' => $dateDebut,
  7663.            'dateFin' => $dateFin,
  7664.            'startMonth' => $startMonth,
  7665.            'endMonth' => $endMonth,
  7666.            'startYear' => $startYear,
  7667.            'endYear' => $endYear,
  7668.            'stockEntries' => $stockEntries,
  7669.            'produits' => $produits
  7670.         ]);
  7671.     }
  7672.     /**
  7673.      * @Route("/{slug}/payer-entree-de-stock/{id}", name="admin_payer_entree_de_stock")
  7674.      * @return \Symfony\Component\HttpFoundation\Response
  7675.      */
  7676.     public function payerEntreeDeSTockAction(Request $request,  $slug$id)
  7677.     {
  7678.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7679.            return $this->redirectToRoute('security_login');
  7680.         }
  7681.         $em $this->getDoctrine()
  7682.                     ->getManager();
  7683.         $entreeDeStock $em->getRepository(EntreeDeStock::class)
  7684.                                 ->findOneById($id);    
  7685.                                 
  7686.         $boutique $em->getRepository(Boutique::class)
  7687.                                 ->findOneBySlug($slug);    
  7688.         
  7689.                     
  7690.         $user $this->getUser();
  7691.         $userBoutique $em->getRepository(UserBoutique::class)
  7692.                         ->findOneBy(
  7693.                             array(
  7694.                             'user' => $user->getId(),
  7695.                             'boutique' => $boutique->getId()
  7696.                             )
  7697.                         );
  7698.         
  7699.         if($request->getMethod() == 'POST'){
  7700.             
  7701.             $montant = (float)$_POST['montant'];
  7702.             $moyenDePaiement $_POST['moyenDePaiement'];
  7703.             
  7704.             
  7705.             $depense = new Expensive;
  7706.             $depense->setBoutique($boutique);
  7707.             $depense->setMontant($montant);
  7708.             $categorieDepense $em->getRepository(CategorieDepense::class)
  7709.                                 ->findOneBy(
  7710.                                     array(
  7711.                                         'boutique' => $boutique,
  7712.                                         'nom' => 'ACHAT DE MARCHANDISES'
  7713.                                     )
  7714.                                 );
  7715.             
  7716.             $depense->setCategorieDepense($categorieDepense);
  7717.         
  7718.             $em->persist($depense);
  7719.             $entreeDeStock->setResteAPayer($entreeDeStock->getResteAPayer() - $montant);
  7720.             $entreeDeStock->setMontantPaye($entreeDeStock->getMontantPaye() + $montant);
  7721.             $em->flush();
  7722.             
  7723.         }
  7724.     
  7725.         return $this->render('admin/payer_entree_de_stock.html.twig', [
  7726.            'boutique' => $boutique,
  7727.            'userBoutique' => $userBoutique,
  7728.            
  7729.            'entreeDeStock' => $entreeDeStock
  7730.         ]);
  7731.     }
  7732.     /**
  7733.      * @Route("/{slug}/new-stock-entry", name="admin.new_stock_entry")
  7734.      * @return \Symfony\Component\HttpFoundation\Response
  7735.      */
  7736.     public function newStockEntryAction(Request $requestBoutique $boutique)
  7737.     {
  7738.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7739.            return $this->redirectToRoute('security_login');
  7740.         }
  7741.         $em $this->getDoctrine()
  7742.                     ->getManager();
  7743.         $tiers $em->getRepository(Tiers::class)
  7744.                                 ->findByBoutique($boutique);        
  7745.         
  7746.                     
  7747.         $produits $em->getRepository(Produit::class)
  7748.                         ->findByBoutique($boutique->getId());
  7749.         $user $this->getUser();
  7750.         $userBoutique $em->getRepository(UserBoutique::class)
  7751.                         ->findOneBy(
  7752.                             array(
  7753.                             'user' => $user->getId(),
  7754.                             'boutique' => $boutique->getId()
  7755.                             )
  7756.                         );
  7757.         $editMode'new';
  7758.         
  7759.         if($request->getMethod() == 'POST'){
  7760.             
  7761.             $dateCommande $_POST['dateCommande'];
  7762.             $tiers $_POST['tiers'];
  7763.             
  7764.             $tiers $em->getRepository(Tiers::class)
  7765.                         ->findOneById($tiers);
  7766.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  7767.             $autreFrais =  (float)$_POST['autreFrais'];
  7768.             $listeProduits json_decode($_POST['listeProduits']);
  7769.             
  7770.             $entreeDeStock = new EntreeDeStock;
  7771.             $entreeDeStock->setBoutique($boutique);
  7772.         
  7773.             $laDate = new \DateTime($dateCommande);
  7774.             $entreeDeStock->setLaDate($laDate);
  7775.         
  7776.             $em->persist($entreeDeStock);
  7777.             $em->flush();
  7778.             $produitCommandes = array();
  7779.             $sousTotal 0;
  7780.             foreach($listeProduits as $listeProduit){
  7781.                 $listeProduit = (array)$listeProduit;
  7782.                 $idDuProduit $listeProduit['idProduit'];
  7783.                 
  7784.                 $leProduit $em->getRepository(Produit::class)
  7785.                         ->findOneById($idDuProduit);
  7786.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  7787.                 
  7788.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  7789.                 $produitEntreeDeStock->setProduit($leProduit);
  7790.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  7791.                 $produitEntreeDeStock->setQuantite((float)$listeProduit['quantite']);
  7792.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  7793.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  7794.                 
  7795.                 $sousTotal += (float)$listeProduit['sousTotal'];
  7796.                 $em->persist($produitEntreeDeStock);
  7797.             }
  7798.             $entreeDeStock->setTotalAchat($sousTotal);
  7799.             $entreeDeStock->setFraisDeTransport($fraisDeTransport);
  7800.             $entreeDeStock->setAutreFrais($autreFrais);
  7801.             $entreeDeStock->setNetPaye($autreFrais $sousTotal);
  7802.             $entreeDeStock->setResteAPayer($sousTotal $autreFrais);
  7803.             $entreeDeStock->setTiers($tiers);
  7804.             
  7805.             $em->flush();
  7806.             
  7807.         }
  7808.     
  7809.         return $this->render('admin/new_stock_entry.html.twig', [
  7810.            'boutique' => $boutique,
  7811.            'produits' => $produits,
  7812.            'userBoutique' => $userBoutique,
  7813.            'editMode' => $editMode,
  7814.            'tiers' => $tiers
  7815.         ]);
  7816.     }
  7817.     
  7818.     /**
  7819.      * @Route("/{slug}/edit-stock-entry/{id}", name="admin.edit_stock_entry")
  7820.      * @return \Symfony\Component\HttpFoundation\Response
  7821.      */
  7822.     public function editStockEntryAction(Request $request$slug$id)
  7823.     {
  7824.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7825.            return $this->redirectToRoute('security_login');
  7826.         }      
  7827.         $em $this->getDoctrine()
  7828.                     ->getManager();
  7829.         $boutique  $em->getRepository(Boutique::class)
  7830.                         ->findOneBySlug($slug);
  7831.         $tiers $em->getRepository(Tiers::class)
  7832.                     ->findByBoutique($boutique);
  7833.     
  7834.         $produits  $em->getRepository(Produit::class)
  7835.                         ->findByBoutique($boutique->getId());
  7836.     
  7837.         $entreeDeStock  $em->getRepository(EntreeDeStock::class)
  7838.                         ->findOneBy(
  7839.                             array(
  7840.                                 'boutique' => $boutique->getId(),
  7841.                                 'id' => $id
  7842.                         ));
  7843.         
  7844.         $ancienProduitEntreeDeStocks  $em->getRepository(ProduitEntreeDeStock::class)
  7845.                         ->findBy(
  7846.                             array(
  7847.                                 'entreeDeStock' => $entreeDeStock->getId()
  7848.                         ));
  7849.                         
  7850.         $user $this->getUser();
  7851.         $userBoutique $em->getRepository(UserBoutique::class)
  7852.                         ->findOneBy(
  7853.                             array(
  7854.                             'user' => $user->getId(),
  7855.                             'boutique' => $boutique->getId()
  7856.                             )
  7857.                         );
  7858.     
  7859.         $ok_soumission '';
  7860.         $error '';
  7861.         $editMode 'edit';
  7862.         if($request->getMethod() == 'POST'){
  7863.             $dateCommande $_POST['dateCommande'];
  7864.             $listeProduits json_decode($_POST['listeProduits']);
  7865.             
  7866.             $tiers $_POST['tiers'];
  7867.             
  7868.             $tiers $em->getRepository(Tiers::class)
  7869.                         ->findOneById($tiers);
  7870.             $fraisDeTransport =  (float)$_POST['fraisDeTransport'];
  7871.             $autreFrais =  (float)$_POST['autreFrais'];
  7872.             $em->flush();
  7873.             
  7874.             //Supprimer les ancien ProduitCommande lié 
  7875.             foreach($ancienProduitEntreeDeStocks as $ancienProduitEntreeDeStock){
  7876.                 $em->remove($ancienProduitEntreeDeStock);
  7877.                 
  7878.                 $leProduit $em->getRepository(Produit::class)
  7879.                         ->findOneById($ancienProduitEntreeDeStock->getProduit()->getId());
  7880.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() - $ancienProduitEntreeDeStock->getQuantite());
  7881.             }
  7882.             $em->flush();
  7883.             $produitEntreeDeStocks = array();
  7884.             $sousTotal 0;
  7885.             foreach($listeProduits as $listeProduit){
  7886.                 $listeProduit = (array)$listeProduit;
  7887.                 $idDuProduit $listeProduit['idProduit'];
  7888.                 
  7889.                 $leProduit $em->getRepository(Produit::class)
  7890.                         ->findOneById($idDuProduit);
  7891.                 $leProduit->setStockDisponible($leProduit->getStockDisponible() + $listeProduit['quantite']);
  7892.         
  7893.                 
  7894.                 $produitEntreeDeStock = new ProduitEntreeDeStock;
  7895.                 $produitEntreeDeStock->setProduit($leProduit);
  7896.                 $produitEntreeDeStock->setEntreeDeStock($entreeDeStock);
  7897.                 $produitEntreeDeStock->setQuantite($listeProduit['quantite']);
  7898.                 
  7899.                 $produitEntreeDeStock->setPrixDAchat((float)$listeProduit['prixDAchat']);
  7900.                 $produitEntreeDeStock->setSousTotal((float)$listeProduit['sousTotal']);
  7901.                 
  7902.                 $sousTotal += (float)$listeProduit['sousTotal'];
  7903.                 $em->persist($produitEntreeDeStock);
  7904.             }
  7905.             
  7906.             $entreeDeStock->setTotalAchat($sousTotal);
  7907.             $entreeDeStock->setFraisDeTransport($fraisDeTransport);
  7908.             $entreeDeStock->setAutreFrais($autreFrais);
  7909.             $entreeDeStock->setNetPaye($autreFrais $sousTotal);
  7910.             $entreeDeStock->setResteAPayer($sousTotal $autreFrais);
  7911.             $entreeDeStock->setTiers($tiers);
  7912.             $em->flush();
  7913.         }
  7914.     
  7915.         return $this->render('admin/edit_stock_entry.html.twig', [
  7916.            'boutique' => $boutique,
  7917.            'produits' => $produits,
  7918.            'editMode' => $editMode,
  7919.            'entreeDeStock' => $entreeDeStock,
  7920.            'ancienProduitEntreeDeStocks' => $ancienProduitEntreeDeStocks,
  7921.            'userBoutique' => $userBoutique,
  7922.            'tiers' => $tiers
  7923.         ]);
  7924.     }
  7925.     
  7926.     
  7927.     /**
  7928.      * @Route("/{slug}/delete-stock-entry/{id}", name="admin.delete_stock_entry")
  7929.      * @return \Symfony\Component\HttpFoundation\Response
  7930.      */
  7931.     public function deleteStockEntryAction(Request $request,  $slug$id)
  7932.     {
  7933.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7934.            return $this->redirectToRoute('security_login');
  7935.         }  
  7936.         $em $this->getDoctrine()
  7937.                     ->getManager();
  7938.         
  7939.         $boutique  $em->getRepository(Boutique::class)
  7940.                         ->findOneBySlug($slug);
  7941.         
  7942.         $user $this->getUser();
  7943.         $userBoutique $em->getRepository(UserBoutique::class)
  7944.                         ->findOneBy(
  7945.                             array(
  7946.                             'user' => $user->getId(),
  7947.                             'boutique' => $boutique->getId()
  7948.                             )
  7949.                         );
  7950.         $entreeDeStock  $em->getRepository(EntreeDeStock::class)
  7951.                         ->findOneBy(
  7952.                             array(
  7953.                                 'boutique' => $boutique->getId(),
  7954.                                 'id' => $id
  7955.                             )
  7956.                         );
  7957.         
  7958.         if(null != $entreeDeStock){
  7959.             $produitEntreeDeStocks $em->getRepository(ProduitEntreeDeStock::class)
  7960.                                         ->findBy(
  7961.                                             array(
  7962.                                                 'entreeDeStock' => $entreeDeStock->getId()
  7963.                                             )
  7964.                                         );
  7965.             foreach($produitEntreeDeStocks as $produitEntreeDeStock){
  7966.                 $em->remove($produitEntreeDeStock);
  7967.                 $produit $em->getRepository(Produit::class)
  7968.                                 ->findOneById($produitEntreeDeStock->getProduit()->getId());
  7969.                 $produit->setStockDisponible($produit->getStockDisponible() - $produitEntreeDeStock->getQuantite());
  7970.             }
  7971.             $em->flush();
  7972.             
  7973.             $em->remove($entreeDeStock);
  7974.             $em->flush();
  7975.         }
  7976.         return $this->redirectToRoute('admin.stock_management', array('slug' => $boutique->getSlug()));
  7977.     }
  7978.     /**
  7979.      * @Route("/{slug}/produits-vendus", name="admin_produits_vendus")
  7980.      * @return \Symfony\Component\HttpFoundation\Response
  7981.      */
  7982.     public function produitsVendusActionRequest $requestBoutique $boutique)
  7983.     {
  7984.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  7985.            return $this->redirectToRoute('security_login');
  7986.         }
  7987.         
  7988.         $em $this->getDoctrine()
  7989.                     ->getManager();
  7990.         
  7991.         $userBoutique $em->getRepository(UserBoutique::class)
  7992.                         ->findOneBy(
  7993.                             array(
  7994.                             'user' => $this->getUser()->getId(),
  7995.                             'boutique' => $boutique->getId()
  7996.                             )
  7997.                         );
  7998.         
  7999.         if('POST' == $request->getMethod()){
  8000.             $dateDebut $_POST['dateDebut'];
  8001.             $dateFin $_POST['dateFin'];
  8002.             
  8003.             $dateDebut = new \DateTime($dateDebut);
  8004.             $dateDebut->setTime(00);
  8005.             $dateFin = new \DateTime($dateFin);
  8006.             $dateFin->setTime(2359);
  8007.             
  8008.             $produitsVendus  $em->getRepository(ProduitCommande::class)
  8009.                         ->produitVenduSurUnePeriode($boutique->getId(), 'invoice'$dateDebut$dateFin);
  8010.             
  8011.             
  8012.             return $this->render('admin/produits_vendus.html.twig', [
  8013.                'boutique' => $boutique,
  8014.                'produitsVendus' => $produitsVendus
  8015.             ]);
  8016.             
  8017.         }
  8018.         
  8019.         return $this->render('admin/sortie_de_stock.html.twig', [
  8020.            'boutique' => $boutique,
  8021.            'dateDebut' => $dateDebut,
  8022.            'dateFin' => $dateFin,
  8023.            'userBoutique' => $userBoutique,
  8024.            'typeFacture' => $typeFacture
  8025.         ]);
  8026.     }
  8027.     
  8028.     /**
  8029.      * @Route("/{slug}/import-products", name="admin.import_products")
  8030.      * @return \Symfony\Component\HttpFoundation\Response
  8031.      */
  8032.     public function importProductsAction(Request $requestBoutique $boutique)
  8033.     {
  8034.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8035.            return $this->redirectToRoute('security_login');
  8036.         }
  8037.         $em $this->getDoctrine()
  8038.                     ->getManager();
  8039.                     
  8040.         $user $this->getUser();
  8041.         
  8042.         $userBoutique $em->getRepository(UserBoutique::class)
  8043.                         ->findOneBy(
  8044.                             array(
  8045.                             'user' => $user->getId(),
  8046.                             'boutique' => $boutique->getId()
  8047.                             )
  8048.                         );
  8049.         
  8050.         $error '';
  8051.         $success '';
  8052.         if('POST' == $request->getMethod()){
  8053.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  8054.             {
  8055.                 
  8056.             
  8057.                 $em->flush();
  8058.                 if ($this->gererFichierMultipleImportation($_FILES['fichier'], $boutique)){
  8059.                     $success 'success';
  8060.                 } else{
  8061.                     $error 'error';
  8062.                 }
  8063.                 
  8064.             }
  8065.         }
  8066.         
  8067.         return $this->render('admin/import_products.html.twig', [
  8068.            'boutique' => $boutique,
  8069.            'userBoutique' => $userBoutique,
  8070.            'error' => $error,
  8071.            'success' => $success
  8072.         ]);
  8073.     }
  8074.     
  8075.     /**
  8076.      * @Route("/{slug}/import-customers", name="admin.import_customers")
  8077.      * @return \Symfony\Component\HttpFoundation\Response
  8078.      */
  8079.     public function importCustomersAction(Request $requestBoutique $boutique)
  8080.     {
  8081.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8082.            return $this->redirectToRoute('security_login');
  8083.         }
  8084.         $em $this->getDoctrine()
  8085.                     ->getManager();
  8086.                     
  8087.         $user $this->getUser();
  8088.         
  8089.         $userBoutique $em->getRepository(UserBoutique::class)
  8090.                         ->findOneBy(
  8091.                             array(
  8092.                             'user' => $user->getId(),
  8093.                             'boutique' => $boutique->getId()
  8094.                             )
  8095.                         );
  8096.         
  8097.         $error '';
  8098.         $success '';
  8099.         if('POST' == $request->getMethod()){
  8100.             if(isset($_FILES['fichier']) && $_FILES['fichier']['error'] == 0)
  8101.             {
  8102.                 
  8103.             
  8104.                 $em->flush();
  8105.                 if ($this->gererFichierMultipleCustomerImportation($_FILES['fichier'], $boutique)){
  8106.                     $success 'success';
  8107.                 } else{
  8108.                     $error 'error';
  8109.                 }
  8110.                 
  8111.             }
  8112.         }
  8113.         
  8114.         return $this->render('admin/import_customers.html.twig', [
  8115.            'boutique' => $boutique,
  8116.            'userBoutique' => $userBoutique,
  8117.            'error' => $error,
  8118.            'success' => $success
  8119.         ]);
  8120.     }
  8121.     
  8122.     /**
  8123.      * @Route("/{slug}/ajout-utilisateur-employe", name="admin_ajout_utilisateur_employe")
  8124.      * @return \Symfony\Component\HttpFoundation\Response
  8125.      */
  8126.     public function ajoutUtilisateurEmployeAction(Request $requestBoutique $boutique)
  8127.     {
  8128.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8129.            return $this->redirectToRoute('security_login');
  8130.         }
  8131.         $em $this->getDoctrine()
  8132.                     ->getManager();
  8133.                     
  8134.         $droits DroitUtilisateur::getDroits();
  8135.         $userBoutiques $em->getRepository(UserBoutique::class)
  8136.                         ->findBy(
  8137.                             array(
  8138.                                 'boutique' => $boutique->getId(),
  8139.                                 'estParti' => false
  8140.                             )    
  8141.                         );
  8142.         $user $this->getUser();
  8143.         $userBoutique $em->getRepository(UserBoutique::class)
  8144.                         ->findOneBy(
  8145.                             array(
  8146.                             'user' => $user->getId(),
  8147.                             'boutique' => $boutique->getId()
  8148.                             )
  8149.                         );
  8150.         
  8151.         return $this->render('admin/ajout_utilisateur_employe.html.twig', [
  8152.            'boutique' => $boutique,
  8153.            'userBoutiques' => $userBoutiques,
  8154.            'userBoutique' => $userBoutique,
  8155.            'droits' => $droits
  8156.            
  8157.         ]);
  8158.     }
  8159.     /**
  8160.      * @Route("/{slug}/users", name="admin.users")
  8161.      * @return \Symfony\Component\HttpFoundation\Response
  8162.      */
  8163.     public function usersAction(Request $requestBoutique $boutique)
  8164.     {
  8165.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8166.            return $this->redirectToRoute('security_login');
  8167.         }
  8168.         $em $this->getDoctrine()
  8169.                     ->getManager();
  8170.                     
  8171.         $userBoutiques $em->getRepository(UserBoutique::class)
  8172.                         ->findByBoutique($boutique->getId());
  8173.         $user $this->getUser();
  8174.         $userBoutique $em->getRepository(UserBoutique::class)
  8175.                         ->findOneBy(
  8176.                             array(
  8177.                             'user' => $user->getId(),
  8178.                             'boutique' => $boutique->getId()
  8179.                             )
  8180.                         );
  8181.         
  8182.         return $this->render('admin/users.html.twig', [
  8183.            'boutique' => $boutique,
  8184.            'userBoutiques' => $userBoutiques,
  8185.            'userBoutique' => $userBoutique,
  8186.            
  8187.         ]);
  8188.     }
  8189.     
  8190.     /**
  8191.      * @Route("/{slug}/add-user", name="admin.add_user")
  8192.      * @return \Symfony\Component\HttpFoundation\Response
  8193.      */
  8194.     public function addUserAction(Request $request, \Swift_Mailer $mailerBoutique $boutique)
  8195.     {
  8196.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8197.            return $this->redirectToRoute('security_login');
  8198.         }
  8199.         $em $this->getDoctrine()
  8200.                     ->getManager();
  8201.                     
  8202.         $userBoutiques $em->getRepository(UserBoutique::class)
  8203.                         ->findByBoutique($boutique->getId());
  8204.         $user $this->getUser();
  8205.         $userBoutique $em->getRepository(UserBoutique::class)
  8206.                         ->findOneBy(
  8207.                             array(
  8208.                             'user' => $user->getId(),
  8209.                             'boutique' => $boutique->getId()
  8210.                             )
  8211.                         );
  8212.         $appName $this->getParameter('app_name');
  8213.         
  8214.     
  8215.         if('POST' == $request->getMethod()){
  8216.             $email $_POST['email'];
  8217.             $role $_POST['role'];
  8218.             
  8219.             $requeteAjoutBoutique  = new RequeteAjoutBoutique;
  8220.             
  8221.             $requeteAjoutBoutique->setRole($role);
  8222.             $requeteAjoutBoutique->setEmail($email);
  8223.             $requeteAjoutBoutique->setBoutique($boutique);
  8224.             
  8225.             $em->persist($requeteAjoutBoutique);
  8226.             $em->flush();
  8227.             
  8228.             //Envoi de mail
  8229.             $message = (new \Swift_Message('Welcome to '.$appName))
  8230.             ->setFrom(['no-reply-myinvoice@assiemail.com'  => $appName])
  8231.             ->setTo([$email])
  8232.             ->setBody(
  8233.                 $this->renderView(
  8234.                 'admin/requete_ajout_boutique_email.html.twig',
  8235.                 [
  8236.                     'appName' => $appName,
  8237.                     'role' => $role,
  8238.                     'boutique' => $boutique
  8239.                 ]
  8240.                 ),
  8241.             'text/html'
  8242.             );
  8243.             
  8244.             $mailer->send($message);
  8245.         }
  8246.         
  8247.         return $this->render('admin/users.html.twig', [
  8248.            'boutique' => $boutique,
  8249.            'userBoutiques' => $userBoutiques,
  8250.            'userBoutique' => $userBoutique
  8251.         ]);
  8252.     }
  8253.     /**
  8254.      * @Route("/{slug}/mon-compte", name="admin_mon_compte")
  8255.      * @return \Symfony\Component\HttpFoundation\Response
  8256.      */
  8257.     public function monCompteAction(Request $requestBoutique $boutique)
  8258.     {
  8259.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8260.            return $this->redirectToRoute('security_login');
  8261.         }
  8262.         $em $this->getDoctrine()
  8263.                     ->getManager();
  8264.     return $this->render('admin/mon_compte.html.twig', [
  8265.            'boutique' => $boutique,
  8266.            'userBoutiques' => $userBoutiques,
  8267.            'userBoutique' => $userBoutique
  8268.         ]);
  8269.     }
  8270.     /**
  8271.      * @Route("/{slug}/mot-de-passe", name="admin_mot_de_passe")
  8272.      * @return \Symfony\Component\HttpFoundation\Response
  8273.      */
  8274.     public function motDePasseAction(Request $requestUserPasswordHasherInterface $passwordHasherBoutique $boutique)
  8275.     {
  8276.         if(!$this->isGranted('IS_AUTHENTICATED_FULLY')){
  8277.            return $this->redirectToRoute('security_login');
  8278.         }
  8279.         $em $this->getDoctrine()
  8280.                     ->getManager();
  8281.         
  8282.         $user $this->getUser();
  8283.         $error '';
  8284.         $ok_submission '';
  8285.         $error_submission '';
  8286.         $actuel $user->getPassword();
  8287.         $hashed '';
  8288.         if('POST' == $request->getMethod())
  8289.         {
  8290.             $motDePasseActuel $request->request->get('motDePasseActuel');
  8291.             $nouveauMotDePasse $request->request->get('nouveauMotDePasse');
  8292.             
  8293.             $repeterMotDePasse $request->request->get('repeterMotDePasse'); 
  8294.             //$user->setPassword('');
  8295.             //$hashed = $passwordHasher->hashPassword($user, $motDePasseActuel);
  8296.             //if(  $hashed == $user->getPassword()){
  8297.                 $user->setPassword('');
  8298.                 $hashedPassword $passwordHasher->hashPassword($user$nouveauMotDePasse);
  8299.                 $user->setPassword($hashedPassword);
  8300.                 $ok_submission 'Mot de passe changé';
  8301.             //}else{
  8302.             //    $error_submission = 'Ancien mot de passe incorrect';
  8303.             //}
  8304.             //Effacer l'ancien mot de passe
  8305.             
  8306.             
  8307.             $em->flush();
  8308.         }
  8309.         $userBoutique $em->getRepository(UserBoutique::class)
  8310.                             ->findOneBy(
  8311.                                 array(
  8312.                                     'user' => $user,
  8313.                                     'boutique' => $boutique
  8314.                                 )
  8315.                             );
  8316.     return $this->render('admin/mot_de_passe.html.twig', [
  8317.            'boutique' => $boutique,
  8318.            'userBoutique' => $userBoutique,
  8319.            'ok_submission' => $ok_submission,
  8320.            'error_submission' => $error_submission,
  8321.            'hashed' => $hashed,
  8322.            'actuel' => $actuel
  8323.         ]);
  8324.     }
  8325.     
  8326.     
  8327.     
  8328.     public function getDomain()
  8329.     {
  8330.         $domaine $_SERVER['HTTP_HOST'];
  8331.         $protocol '';
  8332.         if($domaine == 'localhost' || $domaine == '127.0.0.1'){
  8333.             $domaine $domaine.'/myinvoice-def/public';
  8334.         }
  8335.         if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  8336.             $protocol 'https://';
  8337.         } else{
  8338.             $protocol 'http://';
  8339.         }
  8340.         
  8341.         return $protocol.$domaine;
  8342.     }
  8343.     
  8344.     public function getNumero($type$boutique)
  8345.     {
  8346.         $numero '';
  8347.         $em $this->getDoctrine()
  8348.                     ->getManager();
  8349.         $nombre 0;
  8350.         if($type == 'deposit'){
  8351.             $nombre $em->getRepository(FactureAcompte::class)
  8352.                     ->getNumero($type$boutique->getId());
  8353.         } else{
  8354.             $nombre $em->getRepository(Commande::class)
  8355.                     ->getNumero($type$boutique->getId());
  8356.         
  8357.         }
  8358.         if(empty($nombre)){
  8359.             $nombre ;
  8360.         } else {
  8361.             $nombre = (int)$nombre[0]['nombre'];
  8362.             $nombre++;
  8363.         }
  8364.         
  8365.         
  8366.         
  8367.         switch($type){
  8368.             case 'invoice':
  8369.                 $numero .= $boutique->getSettings()->getLettreDebutFacture();
  8370.             break;
  8371.             
  8372.             case 'deposit':
  8373.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAcompte();
  8374.             break;
  8375.             case 'bill_credit':
  8376.                 $numero .= $boutique->getSettings()->getLettreDebutFactureAvoir();
  8377.             break;
  8378.             
  8379.             case 'proposal':
  8380.                 $numero .= $boutique->getSettings()->getLettreDebutDevis();
  8381.             break;
  8382.         }
  8383.         
  8384.         if($boutique->getSettings()->getIncluAnnee()){
  8385.             $numero .= date('y');
  8386.         }
  8387.         
  8388.         $nombreDeZeroAAjouter strlen((string)$nombre);
  8389.         
  8390.         $nombreDeZeroAAjouter =  $boutique->getSettings()->getNombreDeChiffre() - $nombreDeZeroAAjouter;
  8391.         
  8392.         for($i 0$i $nombreDeZeroAAjouter$i++){
  8393.             $numero .= '0';
  8394.         }
  8395.         
  8396.         $numero .= $nombre;
  8397.         
  8398.         return $numero;
  8399.         
  8400.     }
  8401.     
  8402.     function intervalleMois($datestr)
  8403.     {
  8404.        date_default_timezone_set (date_default_timezone_get());
  8405.         $dt strtotime ($datestr);
  8406.        return array (
  8407.          "debut" => date ('Y-m-d'strtotime ('first day of this month'$dt)),
  8408.          "fin" => date ('Y-m-d'strtotime ('last day of this month'$dt))
  8409.        );
  8410.     }
  8411.     function intervalleSemaine($datestr) {
  8412.        date_default_timezone_set (date_default_timezone_get());
  8413.        $dt strtotime ($datestr);
  8414.        return array (
  8415.          "debut" => date ('N'$dt) == date ('Y-m-d'$dt) : date ('Y-m-d'strtotime ('last monday'$dt)),
  8416.          "fin" => date('N'$dt) == date ('Y-m-d'$dt) : date ('Y-m-d'strtotime ('next sunday'$dt))
  8417.        );
  8418.     }
  8419.     
  8420.     public function gererFichierMultipleImportation($data$boutique)
  8421.     {        
  8422.             $leRetour false;
  8423.             $em $this->getDoctrine()->getManager();
  8424.             
  8425.             $ex pathinfo($data['name'])['extension'];
  8426.             $exA = array('csv');
  8427.             
  8428.             if (in_array(strtolower($ex), $exA)){
  8429.             } else{
  8430.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  8431.             }
  8432.             
  8433.             $name time();
  8434.             $namePourRepertoire $name;
  8435.             //hydratation des attributs de l'objet
  8436.             $domaine $_SERVER['HTTP_HOST'];
  8437.             $protocol '';
  8438.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  8439.                 $protocol 'https://';
  8440.             } else{
  8441.                 $protocol 'http://';
  8442.             }
  8443.             
  8444.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  8445.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  8446.             $url $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  8447.             
  8448.             //deplacement (création de l'image original)
  8449.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  8450.             
  8451.             
  8452.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777true))
  8453.             {
  8454.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  8455.             }
  8456.             
  8457.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  8458.             {
  8459.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  8460.             }
  8461.             
  8462.             $fileToHandle fopen($url'r');
  8463.             $row 1;
  8464.             while (($data fgetcsv($fileToHandle10000",")) !== false) {
  8465.                 $num count($data);
  8466.                 //echo "<p> $num champs à la ligne $row: <br /></p>\n";
  8467.                 $row++;
  8468.                 $categorie $data[0];
  8469.                 $categorieProduit $em->getRepository(CategorieProduit::class)
  8470.                                 ->findOneByNom($categorie);
  8471.                 if(null == $categorieProduit){
  8472.                     $categorieProduit = new CategorieProduit;
  8473.                     $categorieProduit->setNom($categorie);
  8474.                     $em->persist($categorieProduit);
  8475.                     $em->flush();
  8476.                 }
  8477.                 
  8478.                 $ref             $data[1];
  8479.                 $nomProd         $data[2];
  8480.                 $prix            $data[3];
  8481.                 $stockDisponible $data[4];
  8482.                 $stockDAlerte    $data[5];
  8483.                 $stockDeSecurite $data[6];
  8484.                 $stockMinimum    $data[7];
  8485.                 $stockMaximum    $data[8];
  8486.                 $stockOutil      $data[9];
  8487.                 $coutDeStockage  $data[10];
  8488.                 
  8489.                 $produit $em->getRepository(Produit::class)
  8490.                                 ->findOneBy(
  8491.                                     array(
  8492.                                         'reference' => $ref,
  8493.                                         'nom' => $nomProd
  8494.                                     )
  8495.                                 );
  8496.                 if(null == $produit){
  8497.                     $produit = new Produit;
  8498.                     $produit->setCategorieProduit($categorieProduit);
  8499.                     $produit->setReference($ref);
  8500.                     $produit->setNom($nomProd);
  8501.                     
  8502.                     $prixActuel = new PrixProduit;
  8503.                     $prixActuel->setValeur($prix);
  8504.                     $produit->addPrix($prixActuel);
  8505.                     $produit->setPrixActuel($prixActuel);
  8506.                     $produit->setStockDisponible($stockDisponible);
  8507.                     $produit->setStockDAlerte($stockDAlerte);
  8508.                     $produit->setStockDeSecurite($stockDeSecurite);
  8509.                     $produit->setStockMinimum($stockMinimum);
  8510.                     $produit->setStockMaximum($stockMaximum);
  8511.                     $produit->setStockOutil($stockOutil);
  8512.                     $produit->setCoutDeStockage($coutDeStockage);
  8513.                     
  8514.                     $produit->setBoutique($boutique);
  8515.                     $em->persist($produit);
  8516.                     $em->flush();
  8517.                 }
  8518.                 
  8519.                 
  8520.             }
  8521.             $leRetour true;
  8522.             fclose($fileToHandle);
  8523.             
  8524.             //$this->getDoctrine()->getManager()->flush();
  8525.             
  8526.         return $leRetour;
  8527.     }
  8528.     
  8529.     public function gererFichierMultipleCustomerImportation($data$boutique)
  8530.     {        
  8531.             $leRetour false;
  8532.             $em $this->getDoctrine()->getManager();
  8533.             
  8534.             $ex pathinfo($data['name'])['extension'];
  8535.             $exA = array('csv');
  8536.             
  8537.             if (in_array(strtolower($ex), $exA)){
  8538.             } else{
  8539.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  8540.             }
  8541.             
  8542.             $name time();
  8543.             $namePourRepertoire $name;
  8544.             //hydratation des attributs de l'objet
  8545.             $domaine $_SERVER['HTTP_HOST'];
  8546.             $protocol '';
  8547.             if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  8548.                 $protocol 'https://';
  8549.             } else{
  8550.                 $protocol 'http://';
  8551.             }
  8552.             
  8553.             //$url = $protocol.$domaine.'myinvoice-def/uploads/img/'.$name.'.'.$ex;
  8554.             //$url = $protocol.$domaine.'/uploads/img/'.$name.'.'.$ex;
  8555.             $url $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex;
  8556.             
  8557.             //deplacement (création de l'image original)
  8558.             //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  8559.             
  8560.             
  8561.             if(!is_dir($boutique->getLogo()->getUploadRootDir()) && !mkdir($boutique->getLogo()->getUploadRootDir(), 0777true))
  8562.             {
  8563.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  8564.             }
  8565.             
  8566.             if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/'.$name.'.'.$ex))
  8567.             {
  8568.                 throw new \RuntimeException('Désolé, une erreur s\'est produite.');
  8569.             }
  8570.             
  8571.             $fileToHandle fopen($url'r');
  8572.             $row 1;
  8573.             while (($data fgetcsv($fileToHandle10000",")) !== false) {
  8574.                 $num count($data);
  8575.                 $row++;
  8576.                 
  8577.                 $nomClient    $data[0];
  8578.                 $adresse      $data[1];
  8579.                 $codePostal   $data[2];
  8580.                 $nomPays      $data[3];
  8581.                 $ville        $data[4];
  8582.                 $email        $data[5];
  8583.                 $telephone    $data[6];
  8584.                 $soumisALaTVA $data[7];
  8585.                 $codeTVA      $data[8];
  8586.                 
  8587.                 $tier $em->getRepository(Tiers::class)
  8588.                                 ->findOneBy(
  8589.                                     array(
  8590.                                     'boutique' => $boutique->getId(),
  8591.                                     'nom' => $nomClient
  8592.                                     )
  8593.                                 );
  8594.                 if(null == $tier){
  8595.                     $tier = new Tiers;
  8596.                     $tier->setNom($nomClient);
  8597.                     $tier->setAdresse($adresse);
  8598.                     $tier->setCodePostal($codePostal);
  8599.                     $tier->setEmail($email);
  8600.                     $tier->setTelephone($telephone);
  8601.                     $tier->setVille($ville);
  8602.                     $tier->setAssujettiALaTVA($soumisALaTVA);
  8603.                     $tier->setCodeTVA($codeTVA);
  8604.                     
  8605.                     $pays $em->getRepository(Pays::class)
  8606.                                 ->findOneBy(
  8607.                                     array(
  8608.                                     'nom' => $nomPays
  8609.                                     )
  8610.                                 );
  8611.                     if (null == $pays){
  8612.                         $pays $em->getRepository(Pays::class)
  8613.                                 ->findOneBy(
  8614.                                     array(
  8615.                                     'nomFr' => $nomPays
  8616.                                     )
  8617.                                 );
  8618.                         if(null == $pays){
  8619.                             $pays = new Pays;
  8620.                             $pays->setNom($nomPays);
  8621.                             $em->persist($pays);
  8622.                             $em->flush();
  8623.                         }
  8624.                     }
  8625.                     
  8626.                     $tier->setPays($pays);
  8627.                     $tier->setBoutique($boutique);
  8628.                     $em->persist($tier);
  8629.                     $em->flush();
  8630.                 }    
  8631.             }
  8632.             $leRetour true;
  8633.             fclose($fileToHandle);
  8634.             
  8635.             //$this->getDoctrine()->getManager()->flush();
  8636.             
  8637.         return $leRetour;
  8638.     }
  8639.     public function getMois()
  8640.     {
  8641.         $mois = array(
  8642.             array(
  8643.                 'index' => 1,
  8644.                 'nom' => 'Janvier'
  8645.             ),
  8646.             array(
  8647.                 'index' => 2,
  8648.                 'nom' => 'Février'
  8649.             ),
  8650.             array(
  8651.                 'index' => 3,
  8652.                 'nom' => 'Mars'
  8653.             ),
  8654.             array(
  8655.                 'index' => 4,
  8656.                 'nom' => 'Avril'
  8657.             ),
  8658.             array(
  8659.                 'index' => 5,
  8660.                 'nom' => 'Mai'
  8661.             ),
  8662.             array(
  8663.                 'index' => 6,
  8664.                 'nom' => 'Juin'
  8665.             ),
  8666.             array(
  8667.                 'index' => 7,
  8668.                 'nom' => 'Juillet'
  8669.             ),
  8670.             array(
  8671.                 'index' => 8,
  8672.                 'nom' => 'Août'
  8673.             ),
  8674.             array(
  8675.                 'index' => 9,
  8676.                 'nom' => 'Septembre'
  8677.             ),
  8678.             array(
  8679.                 'index' => 10,
  8680.                 'nom' => 'Octobre'
  8681.             ),
  8682.             array(
  8683.                 'index' => 11,
  8684.                 'nom' => 'Novembre'
  8685.             ),
  8686.             array(
  8687.                 'index' => 12,
  8688.                 'nom' => 'Décembre'
  8689.             ),
  8690.         );
  8691.         return $mois;
  8692.     }
  8693.     public function getAnnee()
  8694.     {
  8695.         $actuel date('Y');
  8696.         $annees = array();
  8697.         for($i $actuel$i >= 2020$i--){
  8698.             array_push($annees$i);
  8699.         }
  8700.         return $annees;
  8701.     }
  8702. }