<?php
namespace App\Daikin\BaseBundle\Entity\EmergencyStock;
use App\Daikin\BaseBundle\Entity\SparePartsPart;
use App\Daikin\BaseBundle\Entity\User;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Class SparePartsOrder
* @package App\Daikin\BaseBundle\Entity
*
* @ORM\Entity(repositoryClass="App\Daikin\BaseBundle\Entity\EmergencyStock\OrderRepository")
* @ORM\Table(name="spare_order", indexes={@ORM\Index(name="search_open_idx", columns={"orderStatus", "lastAccess"})})
*/
class Order
{
const PRETTY_ID_PREFIX = 'DAN';
const STATUS_ORDERING = 'ordering';
const STATUS_CREATED = 'created';
/**
* @var integer
*
* @ORM\Id()
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime")
*/
private $created;
/**
* @var DeliveryAddress
*
* @ORM\ManyToOne(targetEntity="App\Daikin\BaseBundle\Entity\EmergencyStock\DeliveryAddress", cascade={"remove"})
* @ORM\JoinColumn(name="deliveryAddress_id")
*/
private $deliveryAddress;
/**
* @var OrderItem[]
*
* @ORM\OneToMany(targetEntity="App\Daikin\BaseBundle\Entity\EmergencyStock\OrderItem", mappedBy="order")
*/
private $orderItems;
/**
* @var string
*
* @ORM\Column(name="orderStatus", type="string")
*/
private $orderStatus;
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="App\Daikin\BaseBundle\Entity\User", inversedBy="orders")
* @ORM\JoinColumn()
*/
private $customer;
/**
* @var \DateTime
*
* @ORM\Column(name="lastAccess", type="datetime")
*/
private $lastAccess;
/**
* @var \DateTime
*
* @ORM\Column(name="desiredDeliveryDateTime", type="datetime", nullable=true)
*/
private $desiredDeliveryDateTime;
/**
* Order constructor.
*/
public function __construct()
{
$this->created = new \DateTime();
$this->lastAccess = new \DateTime();
$this->orderStatus = self::STATUS_ORDERING;
}
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @param int $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return \DateTime
*/
public function getCreated()
{
return $this->created;
}
/**
* @param \DateTime $created
*/
public function setCreated($created)
{
$this->created = $created;
}
/**
* @return DeliveryAddress
*/
public function getDeliveryAddress()
{
return $this->deliveryAddress;
}
/**
* @param DeliveryAddress $deliveryAddress
* @return Order
*/
public function setDeliveryAddress(DeliveryAddress $deliveryAddress)
{
$this->deliveryAddress = $deliveryAddress;
return $this;
}
/**
* @return User
*/
public function getCustomer()
{
return $this->customer;
}
/**
* @param User $customer
* @return Order
*/
public function setCustomer($customer)
{
$this->customer = $customer;
return $this;
}
/**
* @return OrderItem[]|ArrayCollection
*/
public function getOrderItems()
{
return $this->orderItems;
}
/**
* @param OrderItem[] $orderItems
*/
public function setOrderItems($orderItems)
{
$this->orderItems = $orderItems;
}
/**
* @param $orderItemId
* @return OrderItem|mixed|null
*/
public function getOrderItemById($orderItemId)
{
foreach ($this->getOrderItems() as $orderItem){
if ((int)$orderItem->getId() === (int)$orderItemId){
return $orderItem;
}
}
return null;
}
/**
* @return SparePartsPart[]|ArrayCollection
*/
public function getOrderItemsParts()
{
$parts = [];
foreach ($this->getOrderItems() as $orderItem) {
foreach ($orderItem->getParts() as $part) {
$parts[] = $part;
}
}
return $parts;
}
/**
* @return int[]
*/
public function getOrderItemsPrettyIds()
{
$res = [];
foreach ($this->getOrderItems() as $orderItem) {
$res[] = $orderItem->getPrettyId();
}
return $res;
}
/**
* @return string
*/
public function getOrderStatus()
{
return $this->orderStatus;
}
/**
* @param string $orderStatus
*/
public function setOrderStatus($orderStatus)
{
$this->orderStatus = $orderStatus;
}
/**
* @return string
*/
public function getPrettyId()
{
return self::PRETTY_ID_PREFIX.str_pad($this->getId(), 8, 0, STR_PAD_LEFT);
}
/**
* @return \DateTime
*/
public function getLastAccess()
{
return $this->lastAccess;
}
/**
* @param \DateTime $lastAccess
* @return Order
*/
public function setLastAccess($lastAccess)
{
$this->lastAccess = $lastAccess;
return $this;
}
/**
* @return \DateTime
*/
public function getDesiredDeliveryDateTime()
{
return $this->desiredDeliveryDateTime;
}
/**
* @param \DateTime $desiredDeliveryDateTime
* @return Order
*/
public function setDesiredDeliveryDateTime($desiredDeliveryDateTime)
{
$this->desiredDeliveryDateTime = $desiredDeliveryDateTime;
return $this;
}
/**
* @return int
*/
public function getAllPartsCount()
{
$cnt = 0;
foreach ($this->getOrderItems() as $orderItem) {
$cnt += $orderItem->getParts()->count();
}
return $cnt;
}
}