src/Entity/Order.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\OrderRepository;
  4. use DateTimeInterface;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\DBAL\Types\Types;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use JetBrains\PhpStorm\Pure;
  10. use Knp\DoctrineBehaviors\Contract\Entity\TimestampableInterface;
  11. use Knp\DoctrineBehaviors\Model\Timestampable\TimestampableTrait;
  12. use function Symfony\Component\String\u;
  13. #[ORM\Entity(repositoryClassOrderRepository::class)]
  14. #[ORM\Table(name'`order`')]
  15. class Order extends EntityStatus implements TimestampableInterface
  16. {
  17.     use TimestampableTrait;
  18.     public const STATUS_WAITING_PAYMENT 4;
  19.     public const STATUS_PAID 5;
  20.     public const STATUS_CANCELED 6;
  21.     public const STATUS_SHIPPED 7;
  22.     public const STATUS_TREATED 8;
  23.     public const TYPE_SHOP 1;
  24.     public const TYPE_COTISATION 2;
  25.     #[ORM\Id]
  26.     #[ORM\GeneratedValue]
  27.     #[ORM\Column]
  28.     private ?int $id null;
  29.     #[ORM\Column(length32)]
  30.     private ?string $number null;
  31.     #[ORM\ManyToOne(inversedBy'orders')]
  32.     #[ORM\JoinColumn(nullablefalse)]
  33.     private ?Entreprise $firm null;
  34.     #[ORM\Column(type'datetime')]
  35.     private ?DateTimeInterface $orderDate null;
  36.     #[ORM\Column]
  37.     private ?int $type self::TYPE_SHOP;
  38.     #[ORM\OneToMany(mappedBy'parentOrder'targetEntityOrderLine::class, cascade: ['persist''remove'], orphanRemovaltrue)]
  39.     private Collection $orderLines;
  40.     #[ORM\Column(nullabletrue)]
  41.     private ?float $totalAmount null;
  42.     #[ORM\Column(typeTypes::JSON)]
  43.     private array $billingAddress = [];
  44.     #[ORM\Column(typeTypes::JSON)]
  45.     private array $deliveryAddress = [];
  46.     #[ORM\Column(length255nullabletrue)]
  47.     private ?string $shippingNumber null;
  48.     #[ORM\OneToOne(mappedBy'parentOrder'cascade: ['persist''remove'])]
  49.     private ?Invoice $invoice null;
  50.     #[ORM\Column(length255nullabletrue)]
  51.     private ?string $invoiceNumber null;
  52.     #[ORM\Column(typeTypes::DATE_MUTABLEnullabletrue)]
  53.     private ?\DateTimeInterface $invoiceDate null;
  54.     #[ORM\OneToOne(mappedBy'associetedOrder'cascade: ['persist''remove'])]
  55.     private ?Cotisation $cotisation null;
  56.     #[ORM\ManyToOne]
  57.     #[ORM\JoinColumn(nullablefalse)]
  58.     private ?PaymentType $paymentType null;
  59.     #[ORM\Column(nullabletrue)]
  60.     private ?array $bankRequest = [];
  61.     #[ORM\OneToMany(mappedBy'associatedOrder'targetEntityBankResponse::class, cascade: ['persist''remove'], orphanRemovaltrue)]
  62.     private Collection $bankResponses;
  63.     #[ORM\ManyToOne(inversedBy'orders')]
  64.     private ?User $user null;
  65.     #[Pure]
  66.     public function __construct()
  67.     {
  68.         $this->orderLines = new ArrayCollection();
  69.         $this->bankResponses = new ArrayCollection();
  70.     }
  71.     public function getId(): ?int
  72.     {
  73.         return $this->id;
  74.     }
  75.     public function getNumber(): ?string
  76.     {
  77.         return $this->number;
  78.     }
  79.     public function setNumber(string $number): self
  80.     {
  81.         $this->number $number;
  82.         return $this;
  83.     }
  84.     public function getFirm(): ?Entreprise
  85.     {
  86.         return $this->firm;
  87.     }
  88.     public function setFirm(?Entreprise $firm): self
  89.     {
  90.         $this->firm $firm;
  91.         return $this;
  92.     }
  93.     public function getOrderDate(): ?DateTimeInterface
  94.     {
  95.         return $this->orderDate;
  96.     }
  97.     public function setOrderDate(?DateTimeInterface $orderDate): self
  98.     {
  99.         $this->orderDate $orderDate;
  100.         return $this;
  101.     }
  102.     public function getType(): ?int
  103.     {
  104.         return $this->type;
  105.     }
  106.     public function setType(int $type): self
  107.     {
  108.         $this->type $type;
  109.         return $this;
  110.     }
  111.     /**
  112.      * @return Collection<int, OrderLine>
  113.      */
  114.     public function getOrderLines(): Collection
  115.     {
  116.         return $this->orderLines;
  117.     }
  118.     public function addOrderLine(OrderLine $orderLine): self
  119.     {
  120.         if (!$this->orderLines->contains($orderLine)) {
  121.             $this->orderLines->add($orderLine);
  122.             $orderLine->setParentOrder($this);
  123.         }
  124.         return $this;
  125.     }
  126.     public function removeOrderLine(OrderLine $orderLine): self
  127.     {
  128.         if ($this->orderLines->removeElement($orderLine)) {
  129.             // set the owning side to null (unless already changed)
  130.             if ($orderLine->getParentOrder() === $this) {
  131.                 $orderLine->setParentOrder(null);
  132.             }
  133.         }
  134.         return $this;
  135.     }
  136.     public function getTotalAmount(): ?float
  137.     {
  138.         if($this->totalAmount === null) {
  139.             $this->totalAmount 0;
  140.             /** @var OrderLine $orderLine */
  141.             foreach($this->orderLines as $orderLine) {
  142.                 if($orderLine->getProduct()->getTag() === 'mapa_part') continue;
  143.                 $this->totalAmount += $orderLine->getTotalPrice();
  144.             }
  145.         }
  146.         return $this->totalAmount;
  147.     }
  148.     public function setTotalAmount(?float $totalAmount): self
  149.     {
  150.         $this->totalAmount $totalAmount;
  151.         return $this;
  152.     }
  153.     public function getBillingAddress(): array
  154.     {
  155.         return $this->billingAddress;
  156.     }
  157.     public function setBillingAddress(array $billingAddress): self
  158.     {
  159.         $this->billingAddress $billingAddress;
  160.         return $this;
  161.     }
  162.     public function getDeliveryAddress(): array
  163.     {
  164.         return $this->deliveryAddress;
  165.     }
  166.     public function setDeliveryAddress(array $deliveryAddress): self
  167.     {
  168.         $this->deliveryAddress $deliveryAddress;
  169.         return $this;
  170.     }
  171.     public function getShippingNumber(): ?string
  172.     {
  173.         return $this->shippingNumber;
  174.     }
  175.     public function setShippingNumber(?string $shippingNumber): self
  176.     {
  177.         $this->shippingNumber $shippingNumber;
  178.         return $this;
  179.     }
  180.     public function getInvoice(): ?Invoice
  181.     {
  182.         return $this->invoice;
  183.     }
  184.     public function setInvoice(Invoice $invoice): self
  185.     {
  186.         // set the owning side of the relation if necessary
  187.         if ($invoice->getParentOrder() !== $this) {
  188.             $invoice->setParentOrder($this);
  189.         }
  190.         $this->invoice $invoice;
  191.         return $this;
  192.     }
  193.     public function generateInvoiceNumber(): string{
  194.         return $this->invoiceNumber ?? (Date('Y') . '-' sprintf('%06d'$this->getId()));
  195.     }
  196.     public function getInvoiceNumber(): ?string
  197.     {
  198.         return $this->invoiceNumber;
  199.     }
  200.     public function setInvoiceNumber(?string $invoiceNumber): self
  201.     {
  202.         $this->invoiceNumber $invoiceNumber;
  203.         return $this;
  204.     }
  205.     public function getInvoiceDate(): ?\DateTimeInterface
  206.     {
  207.         return $this->invoiceDate;
  208.     }
  209.     public function setInvoiceDate(?\DateTimeInterface $invoiceDate): self
  210.     {
  211.         $this->invoiceDate $invoiceDate;
  212.         return $this;
  213.     }
  214.     public function getCotisation(): ?Cotisation
  215.     {
  216.         return $this->cotisation;
  217.     }
  218.     public function setCotisation(?Cotisation $cotisation): self
  219.     {
  220.         // unset the owning side of the relation if necessary
  221.         if ($cotisation === null && $this->cotisation !== null) {
  222.             $this->cotisation->setAssocietedOrder(null);
  223.         }
  224.         // set the owning side of the relation if necessary
  225.         if ($cotisation !== null && $cotisation->getAssocietedOrder() !== $this) {
  226.             $cotisation->setAssocietedOrder($this);
  227.         }
  228.         $this->cotisation $cotisation;
  229.         return $this;
  230.     }
  231.     public function getPaymentType(): ?PaymentType
  232.     {
  233.         return $this->paymentType;
  234.     }
  235.     public function setPaymentType(?PaymentType $paymentType): self
  236.     {
  237.         $this->paymentType $paymentType;
  238.         return $this;
  239.     }
  240.     public function getBankResponse(): ?array
  241.     {
  242.         /** @var BankResponse|null $bankResponse */
  243.         $bankResponse $this->bankResponses->last();
  244.         if (!$bankResponse){
  245.             return null;
  246.         }
  247.         return $bankResponse->getResponse() ?? null;
  248.     }
  249.     public function setBankResponse(?array $response): ?BankResponse
  250.     {
  251.         if(null !== $response){
  252.             $bankResponse = new BankResponse();
  253.             $bankResponse->setResponse($response);
  254.             $bankResponse->setAssociatedOrder($this);
  255.             return $bankResponse;
  256.         }
  257.         return null;
  258.     }
  259.     public function getBankRequest(): array
  260.     {
  261.         return $this->bankRequest;
  262.     }
  263.     public function setBankRequest(?array $bankRequest): self
  264.     {
  265.         $this->bankRequest $bankRequest;
  266.         return $this;
  267.     }
  268.     /**
  269.      * @return Collection<int, BankResponse>
  270.      */
  271.     public function getBankResponses(): Collection
  272.     {
  273.         return $this->bankResponses;
  274.     }
  275.     public function addBankResponse(BankResponse $bankResponse): self
  276.     {
  277.         if (!$this->bankResponses->contains($bankResponse)) {
  278.             $this->bankResponses->add($bankResponse);
  279.             $bankResponse->setAssociatedOrder($this);
  280.         }
  281.         return $this;
  282.     }
  283.     public function removeBankResponse(BankResponse $bankResponse): self
  284.     {
  285.         if ($this->bankResponses->removeElement($bankResponse)) {
  286.             // set the owning side to null (unless already changed)
  287.             if ($bankResponse->getAssociatedOrder() === $this) {
  288.                 $bankResponse->setAssociatedOrder(null);
  289.             }
  290.         }
  291.         return $this;
  292.     }
  293.     public function getUser(): ?User
  294.     {
  295.         return $this->user;
  296.     }
  297.     public function setUser(?User $user): self
  298.     {
  299.         $this->user $user;
  300.         return $this;
  301.     }
  302. }