src/Modules/VoucherCart/Service/VoucherService.php line 50

  1. <?php
  2. namespace App\Modules\VoucherCart\Service;
  3. use Symfony\Component\Routing\RouterInterface;
  4. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. use App\Common\Modules\Voucher\Service\VoucherService as CommonVoucherService;
  7. use App\Modules\User\Entity\User;
  8. use App\Admin\Modules\Voucher\Service\VoucherPackageService as AdminVoucherPackageService;
  9. use App\Admin\Modules\Voucher\Service\VoucherPackageTemplateService as AdminVoucherPackageTemplateService;
  10. use App\Admin\Modules\Voucher\Entity\VoucherPackage;
  11. use App\Admin\Modules\Voucher\Entity\VoucherPackageVoucher;
  12. use App\Admin\Modules\AmountVoucherSettings\Entity\AmountVoucherSettings;
  13. use App\Modules\VoucherCart\Entity\VoucherOrderVoucher;
  14. class VoucherService
  15. {
  16.     private $_router;
  17.     private $_doctrine;
  18.     private $_commonVoucherService;
  19.     private $_adminVoucherPackageService;
  20.     private $_adminVoucherPackageTemplateService;
  21.     private $_adminUser;
  22.     
  23.     public function __construct(
  24.             RouterInterface $router,
  25.             ManagerRegistry $doctrine,
  26.             CommonVoucherService $commonVoucherService,
  27.             AdminVoucherPackageService $adminVoucherPackageService,
  28.             AdminVoucherPackageTemplateService $adminVoucherPackageTemplateService)
  29.     {
  30.         $this->_router $router;
  31.         $this->_doctrine $doctrine;
  32.         $this->_commonVoucherService $commonVoucherService;
  33.         $this->_adminVoucherPackageService $adminVoucherPackageService;
  34.         $this->_adminVoucherPackageTemplateService $adminVoucherPackageTemplateService;
  35.     }
  36.     
  37.     public function getAdminUser()
  38.     {
  39.         return $this->_adminUser;
  40.     }
  41.     
  42.     public function setAdminUser(User $user)
  43.     {
  44.         $this->_adminUser $user;
  45.     }    
  46.     
  47.     public function setAdminUserByAlias($alias)
  48.     {
  49.         $this->_adminUser $this->_doctrine->getRepository(User::class)->createQueryBuilder('t')
  50.                 ->join('t.admin''admin')
  51.                 ->where('t.type=:type')
  52.                 ->andWhere('t.isActive=1')
  53.                 ->andWhere('admin.alias=:alias')
  54.                 ->setParameters([
  55.                     ':type' => User::TYPE_ADMIN,
  56.                     ':alias' => $alias
  57.                 ])
  58.                 ->getQuery()
  59.                 ->getOneOrNullResult();
  60.         return $this->_adminUser true false;
  61.     }
  62.     
  63.     public function getUrl($route, array $params = array(), $isAbsolute false)
  64.     {
  65.         $params['adminAlias'] = $this->getAdminUser()->getAdmin()->getAlias();
  66.         $params['phpsid'] = session_id();
  67.         return $this->_router->generate($route$params$isAbsolute UrlGeneratorInterface::ABSOLUTE_URL UrlGeneratorInterface::ABSOLUTE_PATH);
  68.     }    
  69.     
  70.     public function getVoucherSettingsData(bool $throwException truebool $refresh false)
  71.     {
  72.         $data $this->_getVoucherSettingsData($refresh);
  73.         
  74.         if (!$data && $throwException)
  75.             throw new \Exception('Voucher niedostÄ™ny.');
  76.         
  77.         return $data;
  78.     }
  79.     
  80.     private static $_voucherSettingsData;
  81.     private function _getVoucherSettingsData(bool $refresh)
  82.     {
  83.         if (!self::$_voucherSettingsData || $refresh)
  84.         {
  85.             if (!$refresh && self::$_voucherSettingsData === false)
  86.                 return;
  87.             
  88.             $adminUser $this->getAdminUser();
  89.             
  90.             if (!$adminUser ||
  91.                     !$adminUser->getAdmin() ||
  92.                     !$adminUser->getAdmin()->getAvailableVoucherCount())
  93.             {
  94.                 self::$_voucherSettingsData false;
  95.                 
  96.                 return;
  97.             }
  98.             
  99.             $settings $this->_doctrine->getRepository(AmountVoucherSettings::class)->findOneBy(['adminUser' => $this->getAdminUser()]);
  100.             if (!$settings ||
  101.                     !$settings->getPackage() ||
  102.                     $settings->getPackage()->getVoucherType() != VoucherPackage::VOUCHER_TYPE_AMOUNT ||
  103.                     !count($settings->getAmounts()))
  104.             {
  105.                 self::$_voucherSettingsData false;
  106.  
  107.                 return;
  108.             }
  109.             self::$_voucherSettingsData = array(
  110.                 'entity' => $settings,
  111.                 'image_url' => null,
  112.                 'max_quantity' => $adminUser->getAdmin()->getAvailableVoucherCount()
  113.             );
  114.             // zdjecie vouchera
  115.             
  116.             self::$_voucherSettingsData['image_url'] = $this->_adminVoucherPackageService->getSaleImageUrl($settings->getPackage());
  117.             
  118.             if (self::$_voucherSettingsData['image_url'] == '')
  119.             {
  120.                 $templateData $this->_adminVoucherPackageTemplateService->getTemplateByName($settings->getPackage()->getTemplateName(), $adminUser);
  121.                 if (!$templateData)
  122.                 {
  123.                     self::$_voucherSettingsData false;
  124.                     return;
  125.                 }
  126.                 
  127.                 self::$_voucherSettingsData['image_url'] = $templateData['image_url'];
  128.             }
  129.         }
  130.         
  131.         return self::$_voucherSettingsData;
  132.     }
  133.     
  134.     public function addIndividualVoucherFromOrder(VoucherOrderVoucher $orderVoucher)
  135.     {
  136.         if (!$orderVoucher->getPackage())
  137.             return false;
  138.         
  139.         for ($i 0$i $orderVoucher->getQuantity(); $i++)
  140.         {
  141.             $voucher = new VoucherPackageVoucher();
  142.             $voucher->setAmValue($orderVoucher->getValue());
  143.             $this->_commonVoucherService->prepareIndividual($voucher, [
  144.                     'package' => $orderVoucher->getPackage(),
  145.                     'admin_user' => $orderVoucher->getPackage()->getAddedByUser(),
  146.                     'email' => $orderVoucher->getOrder()->getEmail(),
  147.                 ], false);
  148.             $orderVoucher->addPackageVoucher($voucher);
  149.         }
  150.         $em $this->_doctrine->getManager();
  151.         $em->persist($orderVoucher);
  152.         $em->flush();
  153.         
  154.         return true;
  155.     }
  156. }