src/EventSubscriber/PaymentSubscriber.php line 87

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\BankTransfert;
  4. use App\Event\EventData;
  5. use App\Entity\User;
  6. use App\Entity\Orders;
  7. use App\Entity\OrderInvoice;
  8. use App\Entity\OrderInvoiceLine;
  9. use App\Entity\PaiedProduct;
  10. use App\Entity\OrderingProduct;
  11. use App\Entity\OrderingProductLine;
  12. use App\Manager\OrderManager ;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Doctrine\ORM\EntityManager;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpKernel\Kernel;
  18. use Symfony\Component\DependencyInjection\ContainerInterface ;
  19. class PaymentSubscriber implements EventSubscriberInterface 
  20. {
  21.     private $orderManager ;
  22.     
  23.     protected $entityManager;
  24.     
  25.     protected $mangoPayService;
  26.     
  27.     protected $urlGenerator;
  28.     
  29.     protected $container;
  30.     
  31.     public function __construct(EntityManagerInterface $_entityManagerOrderManager $_orderManager,
  32.             ContainerInterface $_container) {
  33.         // Let the parent handle construction. 
  34.         $this->entityManager $_entityManager;
  35.         $this->orderManager $_orderManager;
  36.         $this->container $_container;
  37.     }
  38.     
  39.     /**
  40.      * List of event
  41.      *
  42.      * @return array
  43.      */
  44.     public static function getSubscribedEvents()
  45.     {
  46.         // un evennement invoice.payment_succeeded a été lancé
  47.         return array(
  48.             EventData::ON_EVENT_MANGOPAY_PAYMENT_CREATED => array(
  49.                 array('onMangopayPaymentCreated'1)
  50.             ),
  51.             EventData::ON_EVENT_MANGOPAY_PAYIN_NORMAL_SUCCEEDED => array(
  52.                 array('onMangopayPayInSucceded'1)
  53.             ),
  54.             EventData::ON_EVENT_MANGOPAY_PAYOUT_NORMAL_SUCCEEDED => array(
  55.                 array('onMangopayPayOutSucceded'1),
  56.                 array('onMangopayPayOutSuccededBankTransfert'1)
  57.             ),
  58.             
  59.         );
  60.     }
  61.     /**
  62.      * On mangopay payment created
  63.      * @param EventData $event
  64.      */
  65.     public function onMangopayPaymentCreated(EventData $event)
  66.     {
  67.         $datas $event->getData();
  68.         $user $datas['user'] ;
  69.         $payIn $datas['payIn'] ;
  70.         $payInId $payIn->Id ;
  71.         
  72.         $this->orderManager->createOrder($user$payInId) ;
  73.         
  74.         return true ;
  75.     }
  76.     
  77.     /**
  78.      * On mangopay payIn succeded
  79.      * @param EventData $event
  80.      */
  81.     public function onMangopayPayInSucceded(EventData $event)
  82.     {
  83.         $datas $event->getData();
  84.         $transactionId $datas['RessourceId'] ;
  85.         
  86.         $orders $this->entityManager->getRepository(Orders::class)->findOneBy(['transaction' => $transactionId]) ;
  87.         if(!empty($orders)){
  88.             
  89.             $orders->setStatus(true) ;
  90.             $datePayed = new \DateTime() ;
  91.             $orders->setDatePayed($datePayed) ;
  92.             $this->save($orders);
  93.             //Generation de order invoice
  94.             $orderInvoice = new OrderInvoice() ;
  95.             $orderInvoice->setStudent($orders->getStudent()) ;
  96.             $orderInvoice->setOrders($orders) ;
  97.             $orderInvoice->setNumber($orders->getNum()) ;
  98.             $orderInvoice->setTotalPaidTaxExcl($orders->getPriceHt()) ;
  99.             $orderInvoice->setTotalPaidTaxIncl($orders->getPriceTtc()) ;
  100.             $orderInvoice->setStatus(true) ;
  101.             $this->save($orderInvoice);
  102.             
  103.             //Generation de order invoice line
  104.             $orderLines $this->orderManager->getOrderLine($orders) ;
  105.             foreach($orderLines as $orderLine){
  106.                 $orderInvoiceLine = new OrderInvoiceLine() ;
  107.                 $orderInvoiceLine->setOrderInvoice($orderInvoice) ;
  108.                 $orderInvoiceLine->setOrderLine($orderLine) ;
  109.                 $orderInvoiceLine->setPriceHt($orderLine->getPriceHt()) ;
  110.                 $orderInvoiceLine->setStatus(true) ;
  111.                 $this->save($orderInvoiceLine);
  112.                 //Enregitrement de chaque produit dans product paid
  113.                 $paiedProduct = new PaiedProduct() ;
  114.                 $paiedProduct->setOrderProduct($orders) ;
  115.                 $paiedProduct->setUser($orders->getStudent()) ;
  116.                 $paiedProduct->setProduct($orderLine->getProduct()) ;
  117.                 $this->save($paiedProduct) ;
  118.                 //Enregistrement des produita acheter des etudiant par enseignant pour faciliter la recuperation des fees
  119.                 //Verification orderingProduct
  120.                 $product $orderLine->getProduct() ;
  121.                 $teacher $product->getTeacher() ;
  122.                 $orderingProduct $this->entityManager->getRepository(OrderingProduct::class)->findOneBy(['dateCurrent' => $datePayed->format('Y-m'), 'teacher' => $teacher]) ;
  123.                 if(empty($orderingProduct)){
  124.                     
  125.                     $orderingProduct = new OrderingProduct();
  126.                     $orderingProduct->setTeacher($teacher) ;
  127.                     $billingNumber $this->orderManager->getPayOutBillingNumber() ;
  128.                     $orderingProduct->setNum($billingNumber) ;
  129.                     $orderingProduct->setDateCurrent($datePayed->format('Y-m')) ;
  130.                     $orderingProduct->setStatus(false) ;
  131.                     $this->save($orderingProduct) ;
  132.                 }
  133.                 
  134.                 //Verification si l'etudiant a dejaà acheté le cours
  135.                 $orderingProductLine $this->entityManager->getRepository(OrderingProductLine::class)->findOneBy(['student' => $orders->getStudent(), 'product' => $product'teacher' => $product->getTeacher()]) ;
  136.                 if(empty($orderingProductLine)){
  137.                     $orderingProductLine = new OrderingProductLine();
  138.                     $orderingProductLine->setTeacher($product->getTeacher()) ;
  139.                     $orderingProductLine->setStudent($orders->getStudent()) ;
  140.                     $orderingProductLine->setProduct($product) ;
  141.                     $orderingProductLine->setDatePayed($datePayed) ;
  142.                     $orderingProductLine->setPrice($orderLine->getPriceHt()) ;
  143.                     $orderingProductLine->setNum($orders->getNum()) ;
  144.                     $orderingProductLine->setOrders($orders) ;
  145.                     $orderingProductLine->setOrderingProduct($orderingProduct) ;
  146.                     $this->save($orderingProductLine) ;
  147.                 }
  148.                 
  149.             }
  150.             //Generation de facture PDF 
  151.             $this->orderManager->generateBilling($orders) ;
  152.             //Generation envoie mail à l'etudiant pour confirmation de son payement
  153.             $this->orderManager->sendMailOrderPayment($orders) ;
  154.         }
  155.         
  156.         return true ;
  157.     }
  158.     
  159.     /**
  160.      * On mangopay payOut succeded
  161.      * @param EventData $event
  162.      */
  163.     public function onMangopayPayOutSucceded(EventData $event)
  164.     {
  165.         $datas $event->getData();
  166.         $transactionId $datas['RessourceId'] ;
  167.         
  168.         $orderingProduct $this->entityManager->getRepository(OrderingProduct::class)->findOneBy(['transaction' => $transactionId]) ;
  169.         if(!empty($orderingProduct)){
  170.             
  171.             $orderingProduct->setStatus(true) ;
  172.             $datePayed = new \DateTime() ;
  173.             $orderingProduct->setDatePayed($datePayed) ;
  174.             $this->save($orderingProduct);
  175.             
  176.             //Generation de PDF
  177.             $this->orderManager->generatePayoutBilling($orderingProduct) ;
  178.             
  179.             //Envoie mail à l'enseignant
  180.             $this->orderManager->sendMailPayOut($orderingProduct) ;
  181.         }
  182.         
  183.         return true ;
  184.     }
  185.     /**
  186.      * On mangopay payOut succeded for admin
  187.      * @param EventData $event
  188.      */
  189.     public function onMangopayPayOutSuccededBankTransfert(EventData $event)
  190.     {
  191.         $datas $event->getData();
  192.         $transactionId $datas['RessourceId'] ;
  193.         $bankTransfert $this->entityManager->getRepository(BankTransfert::class)->findOneBy(['transactionId' => $transactionId]) ;
  194.         if(!empty($bankTransfert)){
  195.             $bankTransfert->setStatus(true) ;
  196.             $this->save($bankTransfert);
  197.         }
  198.         return true ;
  199.     }
  200.     
  201.     /**
  202.      * SAve object
  203.      * @param type $_object
  204.      * @return type
  205.      */
  206.     public function save($_object){
  207.         $this->entityManager->persist($_object);
  208.         $this->entityManager->flush();
  209.         
  210.         return $_object ;
  211.     }
  212. }