src/Entity/Order.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Service\Helper\DateTimeHelper;
  4. use App\Service\Helper\Generator;
  5. use DateTime;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Exception;
  10. /**
  11.  * @ORM\Table(name="orders__orders")
  12.  * @ORM\Entity(repositoryClass="App\Repository\OrderRepository")
  13.  */
  14. class Order
  15. {
  16.     const PAYMENT_TYPE_ONLINE 'online';
  17.     const PAYMENT_TYPE_BOX_OFFICE 'box_office';
  18.     use IdTrait;
  19.     /**
  20.      * @ORM\Column(name="created_at", type="datetime", nullable=false)
  21.      */
  22.     private DateTime $createdAt;
  23.     /**
  24.      * @ORM\ManyToOne(targetEntity="App\Entity\User")
  25.      * @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
  26.      */
  27.     private User $user;
  28.     /**
  29.      * @ORM\Column(name="crm_order_id", type="integer", nullable=true)
  30.      */
  31.     private ?int $crmOrderId;
  32.     /**
  33.      * @ORM\Column(name="first_name", type="string", nullable=true)
  34.      */
  35.     private ?string $firstName null;
  36.     /**
  37.      * @ORM\Column(name="last_name", type="string", nullable=true)
  38.      */
  39.     private ?string $lastName null;
  40.     /**
  41.      * @ORM\Column(name="father_name", type="string", nullable=true)
  42.      */
  43.     private ?string $fatherName null;
  44.     /**
  45.      * @ORM\Column(name="phone", type="string", nullable=true)
  46.      */
  47.     private ?string $phone null;
  48.     /**
  49.      * @var Collection|OrderElement[]
  50.      *
  51.      * @ORM\OneToMany(targetEntity="App\Entity\OrderElement", mappedBy="order", cascade={"persist"})
  52.      */
  53.     private $elements;
  54.     /**
  55.      * @ORM\Column(type="string", name="delivery_type", nullable=true)
  56.      */
  57.     private ?string $deliveryType null;
  58.     /**
  59.      * @ORM\Column(type="string", name="town", nullable=true)
  60.      */
  61.     private ?string $town null;
  62.     /**
  63.      * @ORM\Column(type="integer", nullable=true)
  64.      */
  65.     private ?int $postcode null;
  66.     /**
  67.      * @ORM\Column(type="string", name="street", nullable=true)
  68.      */
  69.     private ?string $street null;
  70.     /**
  71.      * @ORM\Column(type="string", name="house", nullable=true)
  72.      */
  73.     private ?string $house null;
  74.     /**
  75.      * @ORM\Column(type="string", name="apartment", nullable=true)
  76.      */
  77.     private ?string $apartment null;
  78.     /**
  79.      * @ORM\Column(type="float", nullable=true)
  80.      */
  81.     private ?float $longitude null;
  82.     /**
  83.      * @ORM\Column(type="float", nullable=true)
  84.      */
  85.     private ?float $latitude null;
  86.     /**
  87.      * @ORM\Column(type="string", name="payment_type", nullable=true)
  88.      */
  89.     private ?string $paymentType null;
  90.     /**
  91.      * @ORM\Column(name="comment", type="text", nullable=true)
  92.      */
  93.     private ?string $comment;
  94.     /**
  95.      * @ORM\Column(name="hash", type="string", unique=true)
  96.      */
  97.     private string $hash;
  98.     /**
  99.      * @ORM\ManyToOne(targetEntity="App\Entity\TransportCompany")
  100.      * @ORM\JoinColumn(name="transport_company_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
  101.      */
  102.     private ?TransportCompany $transportCompany null;
  103.     /**
  104.      * @var Collection|SberbankAcquiringOrder[]
  105.      *
  106.      * @ORM\OneToMany(targetEntity="App\Entity\SberbankAcquiringOrder", mappedBy="order", cascade={"persist"})
  107.      */
  108.     private $sberbankAcquiringOrders;
  109.     /**
  110.      * @ORM\Column(name="confirmed_date", type="datetime", nullable=true)
  111.      */
  112.     private ?DateTime $confirmedDate null;
  113.     /**
  114.      * @ORM\Column(name="collected_date", type="datetime", nullable=true)
  115.      */
  116.     private ?DateTime $collectedDate null;
  117.     /**
  118.      * @ORM\Column(name="issued_date", type="datetime", nullable=true)
  119.      */
  120.     private ?DateTime $issuedDate null;
  121.     /**
  122.      * @ORM\Column(name="canceled_date", type="datetime", nullable=true)
  123.      */
  124.     private ?DateTime $canceledDate null;
  125.     /**
  126.      * @throws Exception
  127.      */
  128.     public function __construct(?int $crmOrderIdUser $user)
  129.     {
  130.         $this->crmOrderId $crmOrderId;
  131.         $this->user $user;
  132.         $this->createdAt DateTimeHelper::getNowDateTime();
  133.         $this->hash Generator::generateOrderHash();
  134.         $this->elements = new ArrayCollection();
  135.         $this->sberbankAcquiringOrders = new ArrayCollection();
  136.     }
  137.     public function getCreatedAt(): DateTime
  138.     {
  139.         return $this->createdAt;
  140.     }
  141.     public function getCrmOrderId(): ?int
  142.     {
  143.         return $this->crmOrderId;
  144.     }
  145.     public function getUser(): User
  146.     {
  147.         return $this->user;
  148.     }
  149.     public function setUser(User $user): Order
  150.     {
  151.         $this->user $user;
  152.         return $this;
  153.     }
  154.     public function getFirstName(): ?string
  155.     {
  156.         return $this->firstName;
  157.     }
  158.     public function setFirstName(?string $firstName): Order
  159.     {
  160.         $this->firstName $firstName;
  161.         return $this;
  162.     }
  163.     public function getLastName(): ?string
  164.     {
  165.         return $this->lastName;
  166.     }
  167.     public function setLastName(?string $lastName): Order
  168.     {
  169.         $this->lastName $lastName;
  170.         return $this;
  171.     }
  172.     public function getFatherName(): ?string
  173.     {
  174.         return $this->fatherName;
  175.     }
  176.     public function setFatherName(?string $fatherName): Order
  177.     {
  178.         $this->fatherName $fatherName;
  179.         return $this;
  180.     }
  181.     public function getPhone(): ?string
  182.     {
  183.         return $this->phone;
  184.     }
  185.     public function setPhone(?string $phone): Order
  186.     {
  187.         $this->phone $phone;
  188.         return $this;
  189.     }
  190.     /**
  191.      * @return Collection|OrderElement[]
  192.      */
  193.     public function getElements()
  194.     {
  195.         return $this->elements;
  196.     }
  197.     public function addElement(OrderElement $orderElement): Order
  198.     {
  199.         if(!$this->getElements()->contains($orderElement)) $this->elements->add($orderElement);
  200.         return $this;
  201.     }
  202.     public function getDeliveryType(): ?string
  203.     {
  204.         return $this->deliveryType;
  205.     }
  206.     public function setDeliveryType(?string $deliveryType): Order
  207.     {
  208.         $this->deliveryType $deliveryType;
  209.         return $this;
  210.     }
  211.     public function getPaymentType(): ?string
  212.     {
  213.         return $this->paymentType;
  214.     }
  215.     public function setPaymentType(?string $paymentType): Order
  216.     {
  217.         $this->paymentType $paymentType;
  218.         return $this;
  219.     }
  220.     public function getComment(): ?string
  221.     {
  222.         return $this->comment;
  223.     }
  224.     public function setComment(?string $comment): Order
  225.     {
  226.         $this->comment $comment;
  227.         return $this;
  228.     }
  229.     public function getTown(): ?string
  230.     {
  231.         return $this->town;
  232.     }
  233.     public function setTown(?string $town): Order
  234.     {
  235.         $this->town $town;
  236.         return $this;
  237.     }
  238.     public function getPostcode(): ?int
  239.     {
  240.         return $this->postcode;
  241.     }
  242.     public function setPostcode(?int $postcode): Order
  243.     {
  244.         $this->postcode $postcode;
  245.         return $this;
  246.     }
  247.     public function getStreet(): ?string
  248.     {
  249.         return $this->street;
  250.     }
  251.     public function setStreet(?string $street): Order
  252.     {
  253.         $this->street $street;
  254.         return $this;
  255.     }
  256.     public function getHouse(): ?string
  257.     {
  258.         return $this->house;
  259.     }
  260.     public function setHouse(?string $house): Order
  261.     {
  262.         $this->house $house;
  263.         return $this;
  264.     }
  265.     public function getApartment(): ?string
  266.     {
  267.         return $this->apartment;
  268.     }
  269.     public function setApartment(?string $apartment): Order
  270.     {
  271.         $this->apartment $apartment;
  272.         return $this;
  273.     }
  274.     public function getLongitude(): ?float
  275.     {
  276.         return $this->longitude;
  277.     }
  278.     public function setLongitude(?float $longitude): Order
  279.     {
  280.         $this->longitude $longitude;
  281.         return $this;
  282.     }
  283.     public function getLatitude(): ?float
  284.     {
  285.         return $this->latitude;
  286.     }
  287.     public function setLatitude(?float $latitude): Order
  288.     {
  289.         $this->latitude $latitude;
  290.         return $this;
  291.     }
  292.     public function getHash(): string
  293.     {
  294.         return $this->hash;
  295.     }
  296.     public function getTransportCompany(): ?TransportCompany
  297.     {
  298.         return $this->transportCompany;
  299.     }
  300.     public function setTransportCompany(?TransportCompany $transportCompany): Order
  301.     {
  302.         $this->transportCompany $transportCompany;
  303.         return $this;
  304.     }
  305.     public function setConfirmedDate(?DateTime $confirmedDate): Order
  306.     {
  307.         $this->confirmedDate $confirmedDate;
  308.         return $this;
  309.     }
  310.     public function getConfirmedDate(): ?DateTime
  311.     {
  312.         return $this->confirmedDate;
  313.     }
  314.     public function setCollectedDate(?DateTime $collectedDate): Order
  315.     {
  316.         $this->collectedDate $collectedDate;
  317.         return $this;
  318.     }
  319.     public function setIssuedDate(?DateTime $issuedDate): Order
  320.     {
  321.         $this->issuedDate $issuedDate;
  322.         return $this;
  323.     }
  324.     public function getCanceledDate(): ?DateTime
  325.     {
  326.         return $this->canceledDate;
  327.     }
  328.     /**
  329.      * @return SberbankAcquiringOrder[]|Collection
  330.      */
  331.     public function getSberbankAcquiringOrders(): array|Collection
  332.     {
  333.         return $this->sberbankAcquiringOrders;
  334.     }
  335.     public function getElementsPrice(): int
  336.     {
  337.         $price 0;
  338.         foreach ($this->getElements() as $element) {
  339.             $price += $element->getPrice() * $element->getQuantity();
  340.         }
  341.         return $price;
  342.     }
  343.     public function getPaymentAmount(): int
  344.     {
  345.         $paymentAmount 0;
  346.         foreach ($this->getSberbankAcquiringOrders() as $sberbankAcquiringOrder) {
  347.             if($sberbankAcquiringOrder->getStatus() !== SberbankAcquiringOrder::STATUS_SUCCESS) continue;
  348.             $paymentAmount += $sberbankAcquiringOrder->getAmount();
  349.         }
  350.         return $paymentAmount;
  351.     }
  352.     public function isPayed(): bool
  353.     {
  354.         return $this->getElementsPrice() === $this->getPaymentAmount();
  355.     }
  356. }