orderStatusHistories = new ArrayCollection(); $this->orderPayments = new ArrayCollection(); $this->orderProducts = new ArrayCollection(); $this->creditHistories = new ArrayCollection(); $this->orderReductionCarts = new ArrayCollection(); $this->orderReductionCredits = new ArrayCollection(); $this->documents = new ArrayCollection(); } public function __toString() { if ($this->getValidationDate()) { return 'Commande du ' . $this->getValidationDate()->format('d/m/Y'); } else { return 'Commande #' . $this->getId(); } } public function countQuantities() { return self::countQuantitiesByOrderProducts($this->getOrderProducts()); } public static function countQuantitiesByOrderProducts($orderProducts = []) { $count = 0; foreach ($orderProducts as $orderProduct) { $count += $orderProduct->getQuantityOrder(); } return $count; } public function getOrderProductsByParentCategory() { $categoriesArray = []; foreach ($this->getOrderProducts() as $orderProduct) { $productCategories = $orderProduct->getProduct()->getProductFamily()->getProductCategories(); $category = $productCategories[0]->getParentCategory(); $labelCategory = $category->getTitle(); if (!isset($categoriesArray[$labelCategory])) { $categoriesArray[$labelCategory] = []; } $categoriesArray[$labelCategory][] = $orderProduct; } return $categoriesArray; } public function hasOrderProductAlreadyInCart($orderProductTest) { foreach ($this->getOrderProducts() as $orderProduct) { if ($orderProduct->getProduct() == $orderProductTest->getProduct()) { return $orderProduct; } } return false; } public function getOrderProductsByProductFamily($productFamily) { $arrayOrderProducts = []; foreach ($this->getOrderProducts() as $orderProduct) { if ($orderProduct->getProduct()->getProductFamily() == $productFamily) { $arrayOrderProducts[] = $orderProduct; } } return $arrayOrderProducts; } public function getQuantityOrderByProduct(ProductInterface $product, $byWeight = false) { $quantity = 0; $productFamily = $product->getProductFamily(); $behaviorCountStock = $productFamily->getBehaviorCountStock(); foreach ($this->getOrderProducts() as $orderProduct) { if ($orderProduct->getProduct()->getId() == $product->getId() || (($behaviorCountStock == ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_PRODUCT_FAMILY || $behaviorCountStock == ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_MEASURE) && $orderProduct->getProduct()->getProductFamily()->getId() == $productFamily->getId())) { if ($byWeight) { $quantity += $orderProduct->getQuantityOrder() * ($orderProduct->getQuantityProduct( ) / $orderProduct->getProduct()->getUnitInherited()->getCoefficient()); } else { $quantity += $orderProduct->getQuantityOrder(); } } } return $quantity; } public function getValidationDate(): ?\DateTimeInterface { return $this->validationDate; } public function setValidationDate(\DateTimeInterface $validationDate): self { $this->validationDate = $validationDate; return $this; } public function getDateCreated() { $orderStatusHistory = $this->getOrderStatusHistory(OrderStatusModel::ALIAS_WAITING_DELIVERY); if ($orderStatusHistory) { return $orderStatusHistory->getCreatedAt(); } return null; } public function getOrderStatusHistory($status) { $orderStatusHistories = $this->getOrderStatusHistories(); if (count($orderStatusHistories) > 0) { foreach ($orderStatusHistories as $orderStatusHistory) { if ($orderStatusHistory->getOrderStatus() == $status) { return $orderStatusHistory; } } } return null; } public function getUser(): ?UserInterface { return $this->user; } public function setUser(?UserInterface $user): self { $this->user = $user; return $this; } public function getInvoiceAddress(): ?AddressInterface { return $this->invoiceAddress; } public function setInvoiceAddress(?AddressInterface $invoiceAddress): self { $this->invoiceAddress = $invoiceAddress; return $this; } public function getInvoiceAddressText(): ?string { return $this->invoiceAddressText; } public function setInvoiceAddressText(string $invoiceAddressText): self { $this->invoiceAddressText = $invoiceAddressText; return $this; } public function getComment(): ?string { return $this->comment; } public function setComment(?string $comment): self { $this->comment = $comment; return $this; } public function getAutoPayment(): ?bool { return $this->autoPayment; } public function setAutoPayment(bool $autoPayment): self { $this->autoPayment = $autoPayment; return $this; } public function getMeanPayment(): ?string { return $this->meanPayment; } public function setMeanPayment(string $meanPayment): self { $this->meanPayment = $meanPayment; return $this; } /** * @return Collection|OrderStatusHistoryInterface[] */ public function getOrderStatusHistories(): Collection { return $this->orderStatusHistories; } public function addOrderStatusHistory(OrderStatusHistoryInterface $orderStatusHistory): self { if (!$this->orderStatusHistories->contains($orderStatusHistory)) { $this->orderStatusHistories[] = $orderStatusHistory; $orderStatusHistory->setOrderShop($this); } return $this; } public function removeOrderStatusHistory(OrderStatusHistoryInterface $orderStatusHistory): self { if ($this->orderStatusHistories->contains($orderStatusHistory)) { $this->orderStatusHistories->removeElement($orderStatusHistory); // set the owning side to null (unless already changed) if ($orderStatusHistory->getOrderShop() === $this) { $orderStatusHistory->setOrderShop(null); } } return $this; } /** * @return Collection|OrderPaymentInterface[] */ public function getOrderPayments($meanPayment = null): Collection { if ($meanPayment) { $orderPaymentsReturn = new ArrayCollection(); foreach ($this->orderPayments as $orderPayment) { if ($orderPayment->getMeanPayment() == $meanPayment) { $orderPaymentsReturn[] = $orderPayment; } } return $orderPaymentsReturn; } return $this->orderPayments; } public function addOrderPayment(OrderPaymentInterface $orderPayment): self { if (!$this->orderPayments->contains($orderPayment)) { $this->orderPayments[] = $orderPayment; $orderPayment->setOrderShop($this); } return $this; } public function removeOrderPayment(OrderPaymentInterface $orderPayment): self { if ($this->orderPayments->contains($orderPayment)) { $this->orderPayments->removeElement($orderPayment); // set the owning side to null (unless already changed) if ($orderPayment->getOrderShop() === $this) { $orderPayment->setOrderShop(null); } } return $this; } /** * @return Collection|OrderProductInterface[] */ public function getOrderProducts(): Collection { return $this->orderProducts; } public function addOrderProduct(OrderProductInterface $orderProduct): self { if (!$this->orderProducts->contains($orderProduct)) { $this->orderProducts[] = $orderProduct; $orderProduct->setOrderShop($this); } return $this; } public function removeOrderProduct(OrderProductInterface $orderProduct): self { if ($this->orderProducts->contains($orderProduct)) { $this->orderProducts->removeElement($orderProduct); // set the owning side to null (unless already changed) if ($orderProduct->getOrderShop() === $this) { $orderProduct->setOrderShop(null); } } return $this; } /** * @return Collection|CreditHistoryInterface[] */ public function getCreditHistories(): Collection { return $this->creditHistories; } public function addCreditHistory(CreditHistoryInterface $creditHistory): self { if (!$this->creditHistories->contains($creditHistory)) { $this->creditHistories[] = $creditHistory; $creditHistory->setOrderShop($this); } return $this; } public function removeCreditHistory(CreditHistoryInterface $creditHistory): self { if ($this->creditHistories->contains($creditHistory)) { $this->creditHistories->removeElement($creditHistory); // set the owning side to null (unless already changed) if ($creditHistory->getOrderShop() === $this) { $creditHistory->setOrderShop(null); } } return $this; } public function getVisitor(): ?VisitorInterface { return $this->visitor; } public function setVisitor(?VisitorInterface $visitor): self { $this->visitor = $visitor; return $this; } public function getDeliveryInfos(): ?string { return $this->deliveryInfos; } public function setDeliveryInfos(?string $deliveryInfos): self { $this->deliveryInfos = $deliveryInfos; return $this; } public function getOrderStatus(): ?OrderStatusInterface { return $this->orderStatus; } public function setOrderStatusProtected(?OrderStatusInterface $orderStatus): self { $this->orderStatus = $orderStatus; return $this; } /** * @return Collection|OrderReductionCartInterface[] */ public function getOrderReductionCarts(): Collection { return $this->orderReductionCarts; } public function addOrderReductionCart(OrderReductionCartInterface $orderReductionCart): self { if (!$this->orderReductionCarts->contains($orderReductionCart)) { $this->orderReductionCarts[] = $orderReductionCart; $orderReductionCart->setOrderShop($this); } return $this; } public function removeOrderReductionCart(OrderReductionCartInterface $orderReductionCart): self { if ($this->orderReductionCarts->contains($orderReductionCart)) { $this->orderReductionCarts->removeElement($orderReductionCart); // set the owning side to null (unless already changed) if ($orderReductionCart->getOrderShop() === $this) { $orderReductionCart->setOrderShop(null); } } return $this; } /** * @return Collection|OrderReductionCreditInterface[] */ public function getOrderReductionCredits(): Collection { return $this->orderReductionCredits; } public function addOrderReductionCredit(OrderReductionCreditInterface $orderReductionCredit): self { if (!$this->orderReductionCredits->contains($orderReductionCredit)) { $this->orderReductionCredits[] = $orderReductionCredit; $orderReductionCredit->setOrderShop($this); } return $this; } public function removeOrderReductionCredit(OrderReductionCreditInterface $orderReductionCredit): self { if ($this->orderReductionCredits->contains($orderReductionCredit)) { $this->orderReductionCredits->removeElement($orderReductionCredit); // set the owning side to null (unless already changed) if ($orderReductionCredit->getOrderShop() === $this) { $orderReductionCredit->setOrderShop(null); } } return $this; } /** * @return Collection|DocumentInterface[] */ public function getDocuments(): Collection { return $this->documents; } public function addDocument(DocumentInterface $document): self { if (!$this->documents->contains($document)) { $this->documents[] = $document; } return $this; } public function removeDocument(DocumentInterface $document): self { if ($this->documents->contains($document)) { $this->documents->removeElement($document); } return $this; } public function getDocumentInvoice(): DocumentInterface { foreach ($this->getDocuments() as $document) { if ($document->getType() == DocumentModel::TYPE_INVOICE) { return $document; } } return false; } /** * @return Collection|TicketInterface[] */ public function getTickets(): Collection { return $this->tickets; } public function addTicket(TicketInterface $ticket): self { if (!$this->tickets->contains($ticket)) { $this->tickets[] = $ticket; $ticket->setOrderShop($this); } return $this; } public function removeTicket(TicketInterface $ticket): self { if ($this->tickets->contains($ticket)) { $this->tickets->removeElement($ticket); // set the owning side to null (unless already changed) if ($ticket->getOrderShop() === $this) { $ticket->setOrderShop(null); } } return $this; } public function isValid() { if ($this->getOrderStatus() && in_array( $this->getOrderStatus()->getAlias(), OrderStatusModel::$statusAliasAsValid ) > 0) { return true; } return false; } public function isCart() { if ($this->getOrderStatus() && in_array( $this->getOrderStatus()->getAlias(), OrderStatusModel::$statusAliasAsCart ) > 0) { return true; } return false; } public function getSection(): ?SectionInterface { return $this->section; } public function setSection(?SectionInterface $section): self { $this->section = $section; return $this; } public function getCycleId(): ?int { return $this->cycleId; } public function setCycleId(?int $cycleId): self { $this->cycleId = $cycleId; return $this; } }