src/Entity/OrderElement.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Service\Helper\DateTimeHelper;
  4. use DateTime;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use Exception;
  8. /**
  9.  * Class OrderElement
  10.  *
  11.  * @ORM\Table(name="orders__elements")
  12.  * @ORM\Entity(repositoryClass="App\Repository\OrderElementRepository")
  13.  */
  14. class OrderElement
  15. {
  16.     use IdTrait;
  17.     /**
  18.      * @ORM\Column(name="created_at", type="datetime", nullable=false)
  19.      */
  20.     private DateTime $createdAt;
  21.     /**
  22.      * @ORM\ManyToOne(targetEntity="App\Entity\Order", cascade={"persist"})
  23.      * @ORM\JoinColumn(name="order_id", referencedColumnName="id", onDelete="CASCADE")
  24.      */
  25.     private Order $order;
  26.     /**
  27.      * @ORM\ManyToOne(targetEntity="App\Entity\Item")
  28.      * @ORM\JoinColumn(name="item_id", referencedColumnName="id", onDelete="CASCADE", nullable=true)
  29.      */
  30.     private ?Item $item;
  31.     /**
  32.      * @ORM\ManyToOne(targetEntity="User")
  33.      * @ORM\JoinColumn(name="searcher_user_id", referencedColumnName="id", onDelete="SET NULL", nullable=true)
  34.      */
  35.     private ?User $searcherUser null;
  36.     /**
  37.      * @ORM\ManyToOne(targetEntity="SupplierWarehouseItem")
  38.      * @ORM\JoinColumn(name="supplier_item_id", referencedColumnName="id", onDelete="CASCADE", nullable=true)
  39.      */
  40.     private ?SupplierWarehouseItem $supplierItem;
  41.     /**
  42.      * @var ArrayCollection|ItemTransaction[]
  43.      * @ORM\OneToMany(targetEntity="ItemTransaction", mappedBy="orderElement")
  44.      */
  45.     private $itemTransactions;
  46.     /**
  47.      * @var ArrayCollection|PaymentOrderElement[]
  48.      * @ORM\OneToMany(targetEntity="PaymentOrderElement", mappedBy="orderElement")
  49.      */
  50.     private $payments;
  51.     /**
  52.      * @ORM\Column(name="quantity", type="integer")
  53.      */
  54.     private int $quantity;
  55.     /**
  56.      * @ORM\Column(name="price", type="integer")
  57.      */
  58.     private int $price;
  59.     /**
  60.      * @ORM\Column(name="crm_spare_id", type="integer", nullable=true)
  61.      */
  62.     private ?int $crmSpareId null;
  63.     /**
  64.      * @throws Exception
  65.      */
  66.     public function __construct(Order $order, ?Item $item, ?SupplierWarehouseItem $supplierItemint $quantityint $price)
  67.     {
  68.         $this->order $order;
  69.         $this->item $item;
  70.         $this->supplierItem $supplierItem;
  71.         $this->quantity $quantity;
  72.         $this->price $price;
  73.         $this->createdAt DateTimeHelper::getNowDateTime();
  74.         $this->itemTransactions = new ArrayCollection();
  75.         $this->payments = new ArrayCollection();
  76.     }
  77.     public function getCreatedAt(): DateTime
  78.     {
  79.         return $this->createdAt;
  80.     }
  81.     public function getOrder(): Order
  82.     {
  83.         return $this->order;
  84.     }
  85.     public function getItem(): ?Item
  86.     {
  87.         return $this->item;
  88.     }
  89.     public function getItemProduct(): ?Product
  90.     {
  91.         if($this->item) return $this->item->getProduct();
  92.         return $this->supplierItem?->getProduct();
  93.     }
  94.     public function getItemWarehouse(): ?Warehouse
  95.     {
  96.         return $this->getItem()?->getWarehouse();
  97.     }
  98.     public function getQuantity(): int
  99.     {
  100.         return $this->quantity;
  101.     }
  102.     public function getPrice(): int
  103.     {
  104.         return $this->price;
  105.     }
  106.     public function setQuantity(int $quantity): OrderElement
  107.     {
  108.         $this->quantity $quantity;
  109.         return $this;
  110.     }
  111.     public function getSearcherUser(): ?User
  112.     {
  113.         return $this->searcherUser;
  114.     }
  115.     public function setSearcherUser(?User $searcherUser): OrderElement
  116.     {
  117.         $this->searcherUser $searcherUser;
  118.         return $this;
  119.     }
  120.     public function addPaymentOrder(PaymentOrderElement $paymentOrderElement): OrderElement
  121.     {
  122.         if(!$this->payments->contains($paymentOrderElement)) $this->payments->add($paymentOrderElement);
  123.         return $this;
  124.     }
  125.     /**
  126.      * @return PaymentOrderElement[]|ArrayCollection
  127.      */
  128.     public function getPayments()
  129.     {
  130.         return $this->payments;
  131.     }
  132.     public function getCrmSpareId(): ?int
  133.     {
  134.         return $this->crmSpareId;
  135.     }
  136.     public function setCrmSpareId(?int $crmSpareId): OrderElement
  137.     {
  138.         $this->crmSpareId $crmSpareId;
  139.         return $this;
  140.     }
  141.     public function getConfirmItemTransaction(): ?ItemTransaction
  142.     {
  143.         foreach ($this->itemTransactions as $itemTransaction) {
  144.             if($itemTransaction->getReason() === ItemTransaction::REASON_CONFIRM_ORDER) return $itemTransaction;
  145.         }
  146.         return null;
  147.     }
  148.     public function getRefundItemTransaction(): ?ItemTransaction
  149.     {
  150.         foreach ($this->itemTransactions as $itemTransaction) {
  151.             if($itemTransaction->getReason() === ItemTransaction::REASON_REFUND_ORDER_ELEMENT) return $itemTransaction;
  152.         }
  153.         return null;
  154.     }
  155.     public function getStringInfo(): string
  156.     {
  157.         return $this->getItemProduct()
  158.             ? $this->getItemProduct()->getDescription()
  159.             . ' ' $this->getItemProduct()->getBrandName()
  160.             . ' / ' mb_strtoupper($this->getItemProduct()->getArticleSearch())
  161.             : ''
  162.             ;
  163.     }
  164. }