src/Controller/PaypalController.php line 128

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\constants;
  4. use App\Entity\Notification;
  5. use App\Entity\PaymentForJobs;
  6. use App\Entity\PaymentForJobsMetadata;
  7. use App\Entity\PaymentForServices;
  8. use App\Entity\PaymentForServicesMetadata;
  9. use App\Entity\User;
  10. use App\Service\PaymentForJobsMetadataService;
  11. use Exception;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Session\Session;
  16. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. class PaypalController extends AbstractController
  19. {
  20.     /** @var PaymentForJobsMetadataService  */
  21.     private $pfjmService;
  22.     /** @var SessionInterface  */
  23.     private $session;
  24.     /**
  25.      * PaypalController constructor.
  26.      * @param PaymentForJobsMetadataService $pfjmService
  27.      * @param SessionInterface $session
  28.      */
  29.     public function __construct(PaymentForJobsMetadataService $pfjmServiceSessionInterface $session)
  30.     {
  31.         $this->pfjmService $pfjmService;
  32.         $this->session $session;
  33.     }
  34.     /**
  35.      * @param $type
  36.      * @return RedirectResponse
  37.      * @Route("/cancell/{type}", name="pago_cancelado")
  38.      */
  39.     public function pagoCancelado($type)
  40.     {
  41.         $this->session->set('_error_''Ha ocurrido un error al procesar su solicitud');
  42.         return $this->redirectToRoute('pricing_page', ['type' => $type]);
  43.     }
  44.     /**
  45.      * @param Request $request
  46.      * @return RedirectResponse
  47.      * @throws Exception
  48.      * @Route("/buypackage/{type}/{uuid}", name="buy_package")
  49.      */
  50.     public function buyPackage(Request $request$type$uuid)
  51.     {
  52.         /** @var User $currentUser */
  53.         $currentUser $this->getUser();
  54.         $em $this->getDoctrine()->getManager();
  55.         if ($type == 'job') {
  56.             /** @var PaymentForJobs $pack */
  57.             $pack $em->getRepository(PaymentForJobs::class)->findOneBy(array('uuid' => $uuid));
  58.             $currentUser->addPackageJob($pack);
  59.             $transaccion $request->query->get('transaccion');
  60.             $metadata = new PaymentForJobsMetadata();
  61.             $metadata
  62.                 ->setUser($currentUser)
  63.                 ->setPackage($pack)
  64.                 ->setDatePurchase(new \DateTime('now'))
  65.                 ->setActive(true)
  66.                 ->setTransaccion($transaccion)
  67.                 ->setCurrentPostCount(0);
  68.             $currentUser->addPaymentForJobsMetadata($metadata);
  69.             $pack->addPaymentForJobsMetadata($metadata);
  70.             $em->persist($metadata);
  71.             $notification = new Notification();
  72.             $notification->setDate(new \DateTime());
  73.             $notification->setType(constants::NOTIFICATION_PAYMENT_SUCCESS);
  74.             $notification->setContext("Pago efectuado satisfactoriamente");
  75.             $notification->setUser($currentUser);
  76.             $notification->setActive(true);
  77.             $em->persist($notification);
  78.             $em->flush();
  79.         } else {
  80.             /** @var PaymentForServices $pack */
  81.             $pack $em->getRepository(PaymentForServices::class)->findOneBy(array('uuid' => $uuid));
  82.             $currentUser->addPackageService($pack);
  83.             $metadata = new PaymentForServicesMetadata();
  84.             $metadata
  85.                 ->setUser($currentUser)
  86.                 ->setPackage($pack)
  87.                 ->setDatePurchase(new \DateTime('now'))
  88.                 ->setActive(true)
  89.                 ->setCurrentPostCount(0);
  90.             $currentUser->addPaymentForServicesMetadata($metadata);
  91.             $pack->addPaymentForServicesMetadata($metadata);
  92.             $em->persist($metadata);
  93.             $em->flush();
  94.             //TODO  proceder al pago con PayPal
  95.         }
  96.         return $this->redirectToRoute('dashboard');
  97.     }
  98.     /**
  99.      *  @Route("/test", name="test")
  100.      */
  101.     public function test()
  102.     {
  103.         $freePurshases $this->pfjmService->checkFreePack($this->getUser());
  104.         if (count($freePurshases) > 0) {
  105.             /** @var PaymentForJobsMetadata $meta */
  106.             $meta =  $freePurshases[0];
  107.             $intervalo = new \DateInterval('P1M');
  108.             $fecha $meta->getDatePurchase();
  109.             $fecha->add($intervalo);
  110.             if ($fecha > new \DateTime('now')) {
  111.                 echo 'OK';
  112.             }
  113.         }
  114.         die;
  115.     }
  116.     /**
  117.      * @param $packId
  118.      * @param $type
  119.      * @return RedirectResponse
  120.      * @throws Exception
  121.      * @Route("/buypackage/free/{packId}/{type}", name="buy_package_free")
  122.      */
  123.     public function buyPackageFree($packId$type)
  124.     {
  125.         $freePurshases $this->pfjmService->checkFreePack($this->getUser());
  126.         if (count($freePurshases) > 0) {
  127.             /** @var PaymentForJobsMetadata $meta */
  128.             $meta =  $freePurshases[0];
  129.             $intervalo = new \DateInterval('P1M');
  130.             $fecha $meta->getDatePurchase();
  131.             $fecha->add($intervalo);
  132.             if ($fecha > new \DateTime('now')) {
  133.                 $this->session->set('_error''Solo puede adquirir este paquete una vez cada 30 días');
  134.                 return $this->redirectToRoute('pricing_page', ['type' => $type]);
  135.             }
  136.         }
  137.         /** @var User $currentUser */
  138.         $currentUser $this->getUser();
  139.         $em $this->getDoctrine()->getManager();
  140.         if ($type === 'job') {
  141.             /** @var PaymentForJobs $pack */
  142.             $pack $em->getRepository(PaymentForJobs::class)->find($packId);
  143.             if ($pack === null || $pack->getPrice() !== 0  /*|| $currentUser->getBuyFreePackJob()*/){
  144.         
  145.                 return $this->redirectToRoute('pricing_page', ['type' => $type]);
  146.             }
  147.             $currentUser->addPackageJob($pack);
  148.             $metadata = new PaymentForJobsMetadata();
  149.             $metadata
  150.                 ->setUser($currentUser)
  151.                 ->setPackage($pack)
  152.                 ->setDatePurchase(new \DateTime('now'))
  153.                 ->setActive(true)
  154.                 ->setCurrentPostCount(0);
  155.             $currentUser->addPaymentForJobsMetadata($metadata);
  156.             $pack->addPaymentForJobsMetadata($metadata);
  157.         } else {
  158.             /** @var PaymentForServices $pack */
  159.             $pack $em->getRepository(PaymentForServices::class)->find($packId);
  160.             if ($pack === null || $pack->getPrice() !== || $currentUser->getBuyFreePackService())
  161.                 return $this->redirectToRoute('pricing_page', ['type' => $type]);
  162.             $currentUser->addPackageService($pack);
  163.             $metadata = new PaymentForServicesMetadata();
  164.             $metadata
  165.                 ->setUser($currentUser)
  166.                 ->setPackage($pack)
  167.                 ->setDatePurchase(new \DateTime('now'))
  168.                 ->setActive(true)
  169.                 ->setCurrentPostCount(0);
  170.             $currentUser->addPaymentForServicesMetadata($metadata);
  171.             $pack->addPaymentForServicesMetadata($metadata);
  172.         }
  173.         $em->persist($metadata);
  174.         $em->flush();
  175.         return $this->redirectToRoute('dashboard');
  176.     }
  177. }