src/Model/Shop/Ticket/TicketConsumerCategory.php line 19

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Elements.at New Media Solutions GmbH
  4.  *
  5.  */
  6. namespace App\Model\Shop\Ticket;
  7. use Carbon\Carbon;
  8. use Elements\Bundle\SkidataTicketingSwebBundle\Model\SkidataTicketProductInterface;
  9. use Elements\Bundle\TicketShopFrameworkBundle\Model\DataObject\TicketConsumerCategory as TSF_TicketConsumerCategory;
  10. use Pimcore\Model\DataObject\SkidataConsumerCategory;
  11. use Pimcore\Model\DataObject\SkidataProduct;
  12. /**
  13.  * @method ?TicketConsumerCategory getKidsOnSaturdayConsumer()
  14.  */
  15. class TicketConsumerCategory extends TSF_TicketConsumerCategory
  16. {
  17.     public function getTicketConsumerForStartDate(TicketProduct $ticketProductCarbon $startDatebool $ignoreSaturdayChild false): TicketConsumerCategory
  18.     {
  19.         return !$ignoreSaturdayChild && $this->useSaturdaySpecial($ticketProduct$startDate) ? $this->getKidsOnSaturdayConsumer() : $this;
  20.     }
  21.     /**
  22.      * @param TicketProduct $ticketProduct
  23.      * @param Carbon|null $orderStartDate
  24.      * @param bool $ignoreSaturdayChild
  25.      *
  26.      * @return null|string
  27.      */
  28.     public function getConsumerIdForTicket(
  29.         TicketProduct $ticketProduct,
  30.         Carbon $orderStartDate null,
  31.         bool $ignoreSaturdayChild false
  32.     ): ?string {
  33.         if ($skiDataProduct $ticketProduct->getSkidataProduct()) {
  34.             $supportedConsumerByProduct $this->getSupportedConsumer($skiDataProduct);
  35.             $consumer = !$ignoreSaturdayChild && $this->useSaturdaySpecial($ticketProduct$orderStartDate) ? $this->getKidsOnSaturdayConsumer() : $this;
  36.             foreach ($consumer->getSkidataConsumerCategories() as $item) {
  37.                 if (in_array($item->getId(), $supportedConsumerByProduct)) {
  38.                     return $item->getUuid();
  39.                 }
  40.             }
  41.         }
  42.         return null;
  43.     }
  44.     /**
  45.      * @param SkidataProduct $skiDataProduct
  46.      *
  47.      * @return int[]
  48.      */
  49.     protected function getSupportedConsumer(SkidataProduct $skiDataProduct): array
  50.     {
  51.         /** @phpstan-ignore-next-line */
  52.         return array_map(function (SkidataConsumerCategory $item) {
  53.             return $item->getId();
  54.         }, $skiDataProduct->getConsumerCategories());
  55.     }
  56.     /**
  57.      * @param TicketProduct $ticketProduct
  58.      * @param Carbon $date
  59.      *
  60.      * @return bool
  61.      */
  62.     public function useSaturdaySpecial(SkidataTicketProductInterface $ticketProductCarbon $date): bool
  63.     {
  64.         $kidsOnSaturdayConsumer $this->getKidsOnSaturdayConsumer();
  65.         if (!empty($kidsOnSaturdayConsumer) && $ticketProduct->getValidityValue() > 1) {
  66.             $skiDataProduct $ticketProduct->getSkidataProduct();
  67.             $haystack $this->getSupportedConsumer($skiDataProduct);
  68.             foreach ($kidsOnSaturdayConsumer->getSkidataConsumerCategories() as $item) {
  69.                 if (in_array($item->getId(), $haystack)) {
  70.                     $validityDate $date->copy()->subDay();
  71.                     for ($i 0$i $ticketProduct->getValidityValue(); $i++) {
  72.                         $validityDate->addDay();
  73.                         if ($validityDate->isSaturday()) {
  74.                             return true;
  75.                         }
  76.                     }
  77.                 }
  78.             }
  79.         }
  80.         return false;
  81.     }
  82. }