<?php
namespace App\Entity;
use App\Dto\ShoppingCart;
use App\Repository\OrderRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
/**
* @ORM\Entity(repositoryClass=OrderRepository::class)
*
* @ORM\Table(name="`order`")
*
* @ORM\HasLifecycleCallbacks()
*/
class Order {
use MetaTrait;
public const STATUS_CANCELLED = -1;
public const STATUS_NEW = 0;
public const STATUS_PENDING = 1;
public const STATUS_SCHEDULED = 2;
public const STATUS_DONE = 3;
/**
* @ORM\Id
*
* @ORM\GeneratedValue
*
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="orders")
*
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity=Tenant::class, inversedBy="orders")
*
* @ORM\JoinColumn(nullable=false)
*/
private $tenant;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $shoppingCart;
/**
* @ORM\Column(type="boolean")
*/
private $terms;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $careFacility;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $invoiceStreet;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $invoiceHouseNumber;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $invoiceZip;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $invoiceCity;
/**
* @ORM\Column(type="smallint")
*/
private $status;
/**
* @ORM\Column(type="float", nullable=true)
*/
private $totalPrice;
/**
* @ORM\Column(type="float", nullable=true)
*/
private $totalRecurringPrice;
/**
* @ORM\Column(type="string", length=255)
*/
private $orderNumber;
/**
* @ORM\Column(type="string", length=255)
*/
private $kimRegId;
/**
* @ORM\Column(type="string", length=255)
*/
private $externalOrderId;
public function getId(): ?int {
return $this->id;
}
public function getUser(): ?User {
return $this->user;
}
public function setUser(?User $user): self {
$this->user = $user;
return $this;
}
public function getTenant(): ?Tenant {
return $this->tenant;
}
public function setTenant(?Tenant $tenant): self {
$this->tenant = $tenant;
return $this;
}
public function getShoppingCart(): ?ShoppingCart {
$serializer = new Serializer(
[new ObjectNormalizer(null, null, null, null, null, null, [AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function($object) {
return $object->getId();
}])],
[new JsonEncoder()]
);
return $serializer->deserialize(
$this->shoppingCart,
ShoppingCart::class,
'json'
);
}
public function setShoppingCart(?ShoppingCart $shoppingCart): self {
$serializer = new Serializer(
[new ObjectNormalizer(null, null, null, null, null, null, [AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function($object) {
return $object->getId();
}])],
[new JsonEncoder()]
);
$this->shoppingCart = $serializer->serialize(
$shoppingCart,
'json'
);
return $this;
}
public function getTerms(): ?bool {
return $this->terms;
}
public function setTerms(bool $terms): self {
$this->terms = $terms;
return $this;
}
public function getCareFacility(): ?string {
return $this->careFacility;
}
public function setCareFacility(?string $careFacility): self {
$this->careFacility = $careFacility;
return $this;
}
public function getInvoiceStreet(): ?string {
return $this->invoiceStreet;
}
public function setInvoiceStreet(?string $invoiceStreet): self {
$this->invoiceStreet = $invoiceStreet;
return $this;
}
public function getInvoiceHouseNumber(): ?string {
return $this->invoiceHouseNumber;
}
public function setInvoiceHouseNumber(string $invoiceHouseNumber): self {
$this->invoiceHouseNumber = $invoiceHouseNumber;
return $this;
}
public function getInvoiceZip(): ?int {
return $this->invoiceZip;
}
public function setInvoiceZip(int $invoiceZip): self {
$this->invoiceZip = $invoiceZip;
return $this;
}
public function getInvoiceCity(): ?string {
return $this->invoiceCity;
}
public function setInvoiceCity(string $invoiceCity): self {
$this->invoiceCity = $invoiceCity;
return $this;
}
/**
* @ORM\PrePersist
*/
public function setDefaults(): self {
return $this
->setCreatedAt(new \DateTime())
;
}
/**
* @ORM\PreUpdate
*/
public function setModified(): self {
return $this
->setModifiedAt(new \DateTime())
;
}
public function getStatus(): ?int {
return $this->status;
}
public function setStatus(int $status): self {
$this->status = $status;
return $this;
}
public function getTotalPrice(): ?float {
return $this->totalPrice;
}
public function setTotalPrice(float $totalPrice): self {
$this->totalPrice = $totalPrice;
return $this;
}
public function getTotalRecurringPrice(): ?float {
return $this->totalRecurringPrice;
}
public function setTotalRecurringPrice(?float $totalRecurringPrice): self {
$this->totalRecurringPrice = $totalRecurringPrice;
return $this;
}
public function getOrderNumber(): ?string {
return $this->orderNumber;
}
public function setOrderNumber(string $orderNumber): self {
$this->orderNumber = $orderNumber;
return $this;
}
public function getInvoiceAddress() {
return $this->getInvoiceStreet() . ' ' . $this->getInvoiceHouseNumber() . ' ' . $this->getInvoiceZip() . ' ' . $this->getInvoiceCity();
}
public function getExternalOrderId(): ?string {
return $this->externalOrderId;
}
public function setExternalOrderId(string $externalOrderId): self {
$this->externalOrderId = $externalOrderId;
return $this;
}
public function getKimRegId(): ?string {
return $this->kimRegId;
}
public function setKimRegId(string $kimRegId): self {
$this->kimRegId = $kimRegId;
return $this;
}
}