src/Controller/PaymentController.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Affectation;
  4. use App\Entity\Payment;
  5. use App\Entity\Piece;
  6. use App\Form\PaymentSearchType;
  7. use App\Form\PaymentType;
  8. use App\Repository\PaymentRepository;
  9. use App\Repository\PieceRepository;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Knp\Component\Pager\PaginatorInterface;
  15. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  16. /**
  17.  * @Route("/payment")
  18.  */
  19. class PaymentController extends AbstractController
  20. {
  21.     /**
  22.      * @Route("/", name="payment_index", methods={"GET|POST"})
  23.      * @Security("is_granted('ROLE_USER')")
  24.      */
  25.     public function index(PaymentRepository $paymentRepositoryRequest $requestPaginatorInterface $paginator): Response
  26.     {
  27.         $form $this->createForm(PaymentSearchType::class,null,['responsable'=>$this->getUser()]);
  28.         $form->handleRequest($request);
  29.         if ($form->isSubmitted()) {
  30.             $url $this->buildSearchUrl($request->request->all());
  31.             if (!empty($url)) {
  32.                 return $this->redirectToRoute('payment_index'$url);
  33.             }
  34.         }
  35.         $payments $paginator->paginate(
  36.             $paymentRepository->MyFindAll($request->query->all(),$this->getUser()), /* query NOT result */
  37.             $request->query->getInt('page'1)/* page number */20/* limit per page */
  38.         );
  39.         $totals $paymentRepository->getSumOperations($request->query->all(),$this->getUser());
  40.         return $this->render('payment/index.html.twig', [
  41.             'payments' => $payments,
  42.             'totals' => $totals,
  43.             'form' => $form->createView(),
  44.         ]);
  45.     }
  46.     /**
  47.      * @Route("/new", name="payment_new", methods={"GET","POST"})
  48.      * @Security("is_granted('ROLE_USER')")
  49.      */
  50.     public function new(Request $request): Response
  51.     {
  52.         $payment = new Payment();
  53.         $form $this->createForm(PaymentType::class, $payment, ['responsable'=>$this->getUser()]);
  54.         $form->handleRequest($request);
  55.         if ($form->isSubmitted() && $form->isValid()) {
  56.             $entityManager $this->getDoctrine()->getManager();
  57.             $payment->setUser($this->getUser());
  58.             $entityManager->persist($payment);
  59.             $entityManager->flush();
  60.             $this->addFlash("success""Paiement Ajouté avec succès");
  61.             return $this->redirectToRoute('payment_index');
  62.         }
  63.         return $this->render('payment/new.html.twig', [
  64.             'payment' => $payment,
  65.             'form' => $form->createView(),
  66.         ]);
  67.     }
  68.     /**
  69.      * @Route("/{id}/delete-confirmation", name="payment_delete_confirmation", methods={"GET"})
  70.      * @Security("is_granted('ROLE_SUPER_ADMIN')")
  71.      */
  72.     public function deleteConfirmation(Payment $payment): Response
  73.     {
  74.         return $this->render('payment/_delete_confirmation.html.twig', [
  75.             'payment' => $payment,
  76.         ]);
  77.     }
  78.     /**
  79.      * @Route("/{id}", name="payment_show", methods={"GET"})
  80.      * @Security("is_granted('ROLE_USER')")
  81.      */
  82.     public function show(Payment $payment): Response
  83.     {
  84.         if (
  85.             ($this->getUser()->isResponsable() && $payment->getClient()->getUser() != $this->getUser()) or
  86.             ($this->getUser()->isResponsable() && !$this->getUser()->canViewPayment($payment))
  87.         ) {
  88.             $this->addFlash("danger""Accès interdit");
  89.             return $this->redirectToRoute('accueil_back');
  90.         }
  91.         return $this->render('payment/show.html.twig', [
  92.             'payment' => $payment,
  93.         ]);
  94.     }
  95.     /**
  96.      * @Route("/{id}/edit", name="payment_edit", methods={"GET","POST"})
  97.      * @Security("is_granted('ROLE_USER')")
  98.      */
  99.     public function edit(Request $requestPayment $payment): Response
  100.     {
  101.         if (
  102.             ($this->getUser()->isResponsable() && $this->getParameter('param_title') == 'IRON-APP') or
  103.             ($this->getUser()->isResponsable() && $payment->getClient()->getUser() != $this->getUser()) or
  104.             ($this->getUser()->isResponsable() && !$this->getUser()->canViewPayment($payment))
  105.         ) {
  106.             $this->addFlash("danger""Accès interdit");
  107.             return $this->redirectToRoute('accueil_back');
  108.         }
  109.         $form $this->createForm(PaymentType::class, $payment, ['responsable'=>$this->getUser()]);
  110.         $form->handleRequest($request);
  111.         if ($form->isSubmitted() && $form->isValid()) {
  112.             $entityManager $this->getDoctrine()->getManager();
  113.             $entityManager->flush();
  114.             $this->addFlash("success""Paiement Modifié avec succès");
  115.             if($request->query->get('piece')){
  116.                 return $this->redirectToRoute('piece_show',['id'=>$request->query->get('piece')]);
  117.             }
  118.         }
  119.         return $this->render('payment/edit.html.twig', [
  120.             'payment' => $payment,
  121.             'form' => $form->createView(),
  122.         ]);
  123.     }
  124.     /**
  125.      * @Route("/{id}/affecter-payent", name="affect_payment_piece", methods={"POST"})
  126.      * @Security("is_granted('ROLE_USER')")
  127.      */
  128.     public function affectPayment(Piece $pieceRequest $request): Response
  129.     {
  130.         if (
  131.             ($this->getUser()->isResponsable() && $this->getParameter('param_title') == 'IRON-APP') or
  132.             ($this->getUser()->isResponsable() && $piece->getClient()->getUser() != $this->getUser()) or
  133.             ($this->getUser()->isResponsable() && !$this->getUser()->canViewInvoice($piece))
  134.         ) {
  135.             $this->addFlash("danger""Accès interdit");
  136.             return $this->redirectToRoute('accueil_back');
  137.         }
  138.         $data $request->request->all();
  139.         $type $data['type'];
  140.         $message '';
  141.         $em $this->getDoctrine()->getManager();
  142.         if($type == 'gift' or $type == 'affect'){
  143.             $amount = (float)$data['affectation'];
  144.             if($amount $piece->getSolde()){
  145.                 $message "Le montant d'affectation ne peut pas être supérieur au solde de la facture.";
  146.             }else{
  147.                 if($type == 'gift' and $amount 0.0001 $piece->getClient()->getAvailablePoints()){
  148.                     $message "Le montant d'affectation ne peut pas être supérieur aux points disponibles.";
  149.                 }elseif($type == 'affect' and !is_null($piece->getClient()->getNotAffectedPayement()) and $amount 0.0001 $piece->getClient()->getNotAffectedPayement()->getRest()){
  150.                     $message "Le montant d'affectation ne peut pas être supérieur au montant non affecté.";
  151.                 }
  152.             }
  153.             if($message != ''){
  154.                 $this->addFlash("danger"$message);
  155.                 return $this->redirectToRoute('piece_show',['id'=>$piece->getId(),'col'=>$type,'affectation'=>$amount]);
  156.             }
  157.             $affectation = new Affectation();
  158.             $affectation->setPiece($piece);
  159.             $affectation->setAmount($amount);
  160.             if($type == 'affect'){
  161.                 $affectation->setPayment($piece->getClient()->getNotAffectedPayement());
  162.                 $em->persist($affectation);
  163.                 $em->flush();
  164.             }else{
  165.                 $payment = new Payment();
  166.                 $payment->setClient($piece->getClient());
  167.                 $payment->setDate(new \DateTime('now'));
  168.                 $payment->setAmount($piece->getClient()->getAvailablePoints());
  169.                 $payment->setType(Payment::TYPE_GIFT);
  170.                 $affectation->setPayment($payment);
  171.                 $payment->addAffectation($affectation);
  172.                 $em->persist($payment);
  173.                 $em->flush();
  174.             }
  175.             $piece->setUpdatedAt(new \DateTime('now'));
  176.             $em->flush();
  177.             $this->addFlash("success""Nouvelle affecation ajoutée avec succès");
  178.             return $this->redirectToRoute('piece_show',['id'=>$piece->getId()]);
  179.         }elseif($type == 'new'){
  180.             if(empty($data['typePayment']) or empty($data['amountPayment']) or empty($data['datePayment'])){
  181.                 $message "Veuillez remplir toutes les données";
  182.             }elseif($piece->getSolde() < $data['amountPayment']){
  183.                 $message "Le montant du paiement ne peut pas être supérieur au solde de la facture";
  184.             }
  185.             if($message  != ''){
  186.                 $this->addFlash("danger"$message);
  187.                 return $this->redirectToRoute('piece_show',['id'=>$piece->getId(),'col'=>$type,'typePayment'=>$data['typePayment'],"amountPayment"=>$data['amountPayment'],"datePayment"=>$data['datePayment']]);
  188.             }
  189.             $payment = new Payment();
  190.             $payment->setClient($piece->getClient());
  191.             $payment->setDate(new \DateTime($data['datePayment']));
  192.             $payment->setAmount($data['amountPayment']);
  193.             $payment->setType($data['typePayment']);
  194.             $affectation = new Affectation();
  195.             $affectation->setPiece($piece);
  196.             $affectation->setAmount($data['amountPayment']);
  197.             $affectation->setPayment($payment);
  198.             $payment->addAffectation($affectation);
  199.             $em->persist($payment);
  200.             $em->flush();
  201.             $piece->setUpdatedAt(new \DateTime('now'));
  202.             $em->flush();
  203.             $this->addFlash("success""Nouveau paiement ajouté avec succès");
  204.             return $this->redirectToRoute('piece_show',['id'=>$piece->getId()]);
  205.         }
  206.     }
  207.     /**
  208.      * @Route("/{id}/delete-affectation", name="payment_delete_affectation", methods={"GET"})
  209.      * @Security("is_granted('ROLE_USER')")
  210.      */
  211.     public function deleteAffectation(Request $requestAffectation $affectationPieceRepository $pieceRepository): Response
  212.     {
  213.         if (
  214.             ($this->getUser()->isResponsable() && $this->getParameter('param_title') == 'IRON-APP') or
  215.             ($this->getUser()->isResponsable() && $affectation->getPayment()->getClient()->getUser() != $this->getUser()) or
  216.             ($this->getUser()->isResponsable() && !$this->getUser()->canViewPayment($affectation->getPayment()))
  217.         ) {
  218.             $this->addFlash("danger""Accès interdit");
  219.             return $this->redirectToRoute('accueil_back');
  220.         }
  221.         $pieceId $affectation->getPiece()->getId();
  222.         $entityManager $this->getDoctrine()->getManager();
  223.         $entityManager->remove($affectation);
  224.         $entityManager->flush();
  225.         $piece $pieceRepository->findOneById($pieceId);
  226.         $piece->setUpdatedAt(new \DateTime('now'));
  227.         $entityManager->flush();
  228.         $this->addFlash("success""Affectation supprimée avec succès");
  229.         return $this->redirectToRoute('piece_show',['id'=>$pieceId]);
  230.     }
  231.     /**
  232.      * @Route("/{id}/delete", name="payment_delete", methods={"DELETE"})
  233.      * @Security("is_granted('ROLE_SUPER_ADMIN')")
  234.      */
  235.     public function delete(Request $requestPayment $payment): Response
  236.     {
  237.         if ($this->isCsrfTokenValid('delete' $payment->getId(), $request->request->get('_token'))) {
  238.             $entityManager $this->getDoctrine()->getManager();
  239.             $entityManager->remove($payment);
  240.             $entityManager->flush();
  241.         }
  242.         $this->addFlash("success""Paiement supprimé avec succès");
  243.         return $this->redirectToRoute('payment_index');
  244.     }
  245.     private function buildSearchUrlPaymentLine($data)
  246.     {$url = [];
  247.         foreach ($data as $k => $v) {
  248.             if (isset($data['payment_line_search']['code']) && !empty($data['payment_line_search']['code'])) {
  249.                 $url['code'] = $data['payment_line_search']['code'];
  250.             }
  251.             if (isset($data['payment_line_search']['product']) && !empty($data['payment_line_search']['product'])) {
  252.                 $url['product'] = $data['payment_line_search']['product'];
  253.             }
  254.             if (isset($data['payment_line_search']['dateDu']) && !empty($data['payment_line_search']['dateDu'])) {
  255.                 $url['dateDu'] = $data['payment_line_search']['dateDu'];
  256.             }
  257.             if (isset($data['payment_line_search']['dateAu']) && !empty($data['payment_line_search']['dateAu'])) {
  258.                 $url['dateAu'] = $data['payment_line_search']['dateAu'];
  259.             }
  260.             if (isset($data['payment_line_search']['priceHTMin']) && !empty($data['payment_line_search']['priceHTMin'])) {
  261.                 $url['priceHTMin'] = $data['payment_line_search']['priceHTMin'];
  262.             }
  263.             if (isset($data['payment_line_search']['priceHTMax']) && !empty($data['payment_line_search']['priceHTMax'])) {
  264.                 $url['priceHTMax'] = $data['payment_line_search']['priceHTMax'];
  265.             }
  266.             if (isset($data['payment_line_search']['totalHTMin']) && !empty($data['payment_line_search']['totalHTMin'])) {
  267.                 $url['totalHTMin'] = $data['payment_line_search']['totalHTMin'];
  268.             }
  269.             if (isset($data['payment_line_search']['totalHTMax']) && !empty($data['payment_line_search']['totalHTMax'])) {
  270.                 $url['totalHTMax'] = $data['payment_line_search']['totalHTMax'];
  271.             }
  272.             if (isset($data['payment_line_search']['rabaisMin']) && !empty($data['payment_line_search']['rabaisMin'])) {
  273.                 $url['rabaisMin'] = $data['payment_line_search']['rabaisMin'];
  274.             }
  275.             if (isset($data['payment_line_search']['rabaisMax']) && !empty($data['payment_line_search']['rabaisMax'])) {
  276.                 $url['rabaisMax'] = $data['payment_line_search']['rabaisMax'];
  277.             }
  278.             if (isset($data['payment_line_search']['amountRabaisMin']) && !empty($data['payment_line_search']['amountRabaisMin'])) {
  279.                 $url['amountRabaisMin'] = $data['payment_line_search']['amountRabaisMin'];
  280.             }
  281.             if (isset($data['payment_line_search']['amountRabaisMax']) && !empty($data['payment_line_search']['amountRabaisMax'])) {
  282.                 $url['amountRabaisMax'] = $data['payment_line_search']['amountRabaisMax'];
  283.             }
  284.             if (isset($data['payment_line_search']['priceBuyHTMin']) && !empty($data['payment_line_search']['priceBuyHTMin'])) {
  285.                 $url['priceBuyHTMin'] = $data['payment_line_search']['priceBuyHTMin'];
  286.             }
  287.             if (isset($data['payment_line_search']['priceBuyHTMax']) && !empty($data['payment_line_search']['priceBuyHTMax'])) {
  288.                 $url['priceBuyHTMax'] = $data['payment_line_search']['priceBuyHTMax'];
  289.             }
  290.             if (isset($data['payment_line_search']['margeMin']) && !empty($data['payment_line_search']['margeMin'])) {
  291.                 $url['margeMin'] = $data['payment_line_search']['margeMin'];
  292.             }
  293.             if (isset($data['payment_line_search']['margeMax']) && !empty($data['payment_line_search']['margeMax'])) {
  294.                 $url['margeMax'] = $data['payment_line_search']['margeMax'];
  295.             }
  296.         }
  297.         return $url;
  298.     }
  299.     private function buildSearchUrl($data)
  300.     {
  301.         $url = [];
  302.         foreach ($data as $k => $v) {
  303.             if (isset($data['payment_search']['user']) && !empty($data['payment_search']['user'])) {
  304.                 $url['user'] = $data['payment_search']['user'];
  305.             }
  306.             if (isset($data['payment_search']['client']) && !empty($data['payment_search']['client'])) {
  307.                 $url['client'] = $data['payment_search']['client'];
  308.             }
  309.             if (isset($data['payment_search']['code']) && !empty($data['payment_search']['code'])) {
  310.                 $url['code'] = $data['payment_search']['code'];
  311.             }
  312.             if (isset($data['payment_search']['amountHTMin']) && !empty($data['payment_search']['amountHTMin'])) {
  313.                 $url['amountHTMin'] = $data['payment_search']['amountHTMin'];
  314.             }
  315.             if (isset($data['payment_search']['amountHTMax']) && !empty($data['payment_search']['amountHTMax'])) {
  316.                 $url['amountHTMax'] = $data['payment_search']['amountHTMax'];
  317.             }
  318.             if (isset($data['payment_search']['amountTVAMin']) && !empty($data['payment_search']['amountTVAMin'])) {
  319.                 $url['amountTVAMin'] = $data['payment_search']['amountTVAMin'];
  320.             }
  321.             if (isset($data['payment_search']['amountTVAMax']) && !empty($data['payment_search']['amountTVAMax'])) {
  322.                 $url['amountTVAMax'] = $data['payment_search']['amountTVAMax'];
  323.             }
  324.             if (isset($data['payment_search']['amountDiscountMin']) && !empty($data['payment_search']['amountDiscountMin'])) {
  325.                 $url['amountDiscountMin'] = $data['payment_search']['amountDiscountMin'];
  326.             }
  327.             if (isset($data['payment_search']['amountDiscountMax']) && !empty($data['payment_search']['amountDiscountMax'])) {
  328.                 $url['amountDiscountMax'] = $data['payment_search']['amountDiscountMax'];
  329.             }
  330.             if (isset($data['payment_search']['discountMin']) && !empty($data['payment_search']['discountMin'])) {
  331.                 $url['discountMin'] = $data['payment_search']['discountMin'];
  332.             }
  333.             if (isset($data['payment_search']['discountMax']) && !empty($data['payment_search']['discountMax'])) {
  334.                 $url['discountMax'] = $data['payment_search']['discountMax'];
  335.             }
  336.             if (isset($data['payment_search']['amountTTCMin']) && !empty($data['payment_search']['amountTTCMin'])) {
  337.                 $url['amountTTCMin'] = $data['payment_search']['amountTTCMin'];
  338.             }
  339.             if (isset($data['payment_search']['amountTTCMax']) && !empty($data['payment_search']['amountTTCMax'])) {
  340.                 $url['amountTTCMax'] = $data['payment_search']['amountTTCMax'];
  341.             }
  342.             if (isset($data['payment_search']['dateDu']) && !empty($data['payment_search']['dateDu'])) {
  343.                 $url['dateDu'] = $data['payment_search']['dateDu'];
  344.             }
  345.             if (isset($data['payment_search']['dateAu']) && !empty($data['payment_search']['dateAu'])) {
  346.                 $url['dateAu'] = $data['payment_search']['dateAu'];
  347.             }
  348.             if (isset($data['payment_search']['payer']) && !empty($data['payment_search']['payer'])) {
  349.                 $url['payer'] = $data['payment_search']['payer'];
  350.             }
  351.             if (isset($data['payment_search']['modePaiement']) && !empty($data['payment_search']['modePaiement'])) {
  352.                 $url['modePaiement'] = $data['payment_search']['modePaiement'];
  353.             }
  354.         }
  355.         return $url;
  356.     }
  357. }