src/Entity/Sales/PaidPlacementsOrder.php line 17

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by simpson <simpsonwork@gmail.com>
  4.  * Date: 2019-05-06
  5.  * Time: 16:30
  6.  */
  7. namespace App\Entity\Sales;
  8. use App\Entity\Location\City;
  9. use App\Entity\Profile\Profile;
  10. use App\Repository\PaidPlacementsOrderRepository;
  11. use Doctrine\ORM\Mapping as ORM;
  12. #[ORM\Table(name'profile_paid_placements_order')]
  13. #[ORM\Entity(repositoryClassPaidPlacementsOrderRepository::class)]
  14. class PaidPlacementsOrder
  15. {
  16.     const ORDER_GROUP_ULTRA_VIP 1;
  17.     const ORDER_GROUP_VIP 10;
  18.     const ORDER_GROUP_STANDARD_APPROVED 50;
  19.     const ORDER_GROUP_STANDARD 60;
  20.     const ORDER_GROUP_WITHOUT_OWNER_APPROVED 100;
  21.     const ORDER_GROUP_WITHOUT_OWNER 120;
  22.     #[ORM\JoinColumn(name'city_id'referencedColumnName'id')]
  23.     #[ORM\Id]
  24.     #[ORM\OneToOne(targetEntityCity::class)]
  25.     protected City $city;
  26.     #[ORM\Id]
  27.     #[ORM\Column(name'order_group'type'smallint')]
  28.     protected int $orderGroup;
  29.     /**
  30.      * Время изменения статуса одной из анкет
  31.      */
  32.     #[ORM\Column(name'status_changed_at'type'datetimetz_immutable')]
  33.     protected \DateTimeImmutable $statusChangedAt;
  34.     /**
  35.      * Время последней ротации списка без изменения статусов
  36.      */
  37.     #[ORM\Column(name'rotated_at'type'datetimetz_immutable')]
  38.     protected \DateTimeImmutable $rotatedAt;
  39.     /** @var null|int[] */
  40.     #[ORM\Column(name'placement_order'type'simple_array'nullabletrue)]
  41.     protected ?array $placementOrder;
  42.     public function __construct(City $cityint $orderGroup\DateTimeImmutable $changedAt, array $placementOrder = [])
  43.     {
  44.         $this->city $city;
  45.         $this->orderGroup $orderGroup;
  46.         $this->statusChangedAt $changedAt;
  47.         $this->rotatedAt $changedAt;
  48.         $this->placementOrder $placementOrder;
  49.     }
  50.     public function placeAtFirstPosition(Profile $profile\DateTimeImmutable $changedAt): void
  51.     {
  52.         $this->removePlacement($profile);
  53.         $reordered $this->placementOrder;
  54.         array_unshift($reordered$profile->getId());
  55.         $this->placementOrder $reordered;
  56.         $this->statusChangedAt $changedAt;
  57.         $this->rotatedAt $changedAt;
  58.     }
  59.     public function removePlacement(Profile $profile): void
  60.     {
  61.         $key array_search($profile->getId(), $this->placementOrder);
  62.         if (false !== $key) {
  63.             $reordered $this->placementOrder;
  64.             unset($reordered[$key]);
  65.             $this->placementOrder $reordered;
  66.         }
  67.     }
  68.     public function rotatePlacements(\DateTimeImmutable $rotatedAt): void
  69.     {
  70.         $this->placementOrder $this->doRotate($this->placementOrder);
  71.         $this->rotatedAt $rotatedAt;
  72.     }
  73.     private function doRotate(array $placements): array
  74.     {
  75.         if (empty($placements)) {
  76.             return $placements;
  77.         }
  78.         $reordered $placements;
  79.         $lastPlacement array_pop($reordered);
  80.         array_unshift($reordered$lastPlacement);
  81.         return $reordered;
  82.     }
  83.     public function getStatusChangedAt(): \DateTimeImmutable
  84.     {
  85.         return $this->statusChangedAt;
  86.     }
  87.     public function getRotatedAt(): \DateTimeImmutable
  88.     {
  89.         return $this->rotatedAt;
  90.     }
  91.     /**
  92.      * @return null|int[]
  93.      */
  94.     public function getPlacementOrder(): ?array
  95.     {
  96.         return $this->placementOrder;
  97.     }
  98. }