<?php
namespace App\Entity\Legacy;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Roothirsch\CoreBundle\UserAware\UserAwareInterface;
use Roothirsch\CoreBundle\UserAware\UserAwareTrait;
use Roothirsch\ShopBundle\API\Filter\EstimateNotEmptyFilter;
/**
* @ORM\Entity
* @ORM\Table(name="legacy_estimate")
* @ApiResource(
* itemOperations={
* "order"={"method"="PUT", "path"="/estimates/{id}/order", "requirements"={"id"=".+"}},
* "get",
* "put",
* "delete"
* },
* collectionOperations={
* "duplicate"={"method"="POST", "path"="/estimates/{id}/duplicate", "requirements"={"id"=".+"}},
* "get",
* "post"
* }
* )
* @ApiFilter(OrderFilter::class, properties={"updated", "created", "reference", "comisson", "netTotal"}, arguments={"orderParameterName"="order"})
* @ApiFilter(SearchFilter::class, properties={"status": "exact"})
* @ApiFilter(EstimateNotEmptyFilter::class)
*/
class Estimate implements UserAwareInterface
{
use UserAwareTrait;
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $status = 'draft';
/**
* @ORM\Column(type="string", nullable=true)
*/
private $customer;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $reference;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $address;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $contactPerson;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $comission;
/**
* @ORM\Column(type="boolean")
*/
private $applyDiscount = true;
/**
* @ORM\Column(type="boolean")
*/
private $applyMwst = false;
/**
* @ORM\Column(type="float")
*/
private $customerDiscount = 0;
/**
* @ORM\Column(type="json_array")
*/
private $items = [];
/**
* @ORM\Column(type="float")
*/
private $netTotal = 0;
/**
* @ORM\Column(type="string")
*/
private $currency = 'chf';
/**
* @ORM\Column(type="string", nullable=true)
*/
private $description;
/**
* @var \DateTime
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="integer")
*/
private $created;
/**
* @var \DateTime
*
* @Gedmo\Timestampable(on="update")
* @ORM\Column(type="integer")
*/
private $updated;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime", nullable=true)
*/
private $orderedAt;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $orderNumber;
/**
* @var \DateTime
* @ORM\Column(type="date", nullable=true)
*/
private $deliveryDate;
/**
* @var string
* @ORM\Column(type="string", nullable=true)
*/
private $deliveryType = 'abholung';
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Company", cascade={"persist"}, fetch="EAGER")
* @ORM\JoinColumn(onDelete="SET NULL")
*/
private $distributor;
/**
* @ORM\Column(type="boolean")
*/
private $hideAddressInSelector = false;
/**
* @var array
* @ORM\Column(type="json_array")
*/
private $files = [];
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return mixed
*/
public function getStatus()
{
return $this->status;
}
/**
* @param mixed $status
*/
public function setStatus($status)
{
$this->status = $status;
}
/**
* @return mixed
*/
public function getCustomer()
{
return $this->customer;
}
/**
* @param mixed $customer
*/
public function setCustomer($customer)
{
$this->customer = $customer;
}
/**
* @return mixed
*/
public function getAddress()
{
return $this->address;
}
/**
* @param mixed $address
*/
public function setAddress($address)
{
$this->address = $address;
}
/**
* @return mixed
*/
public function getContactPerson()
{
return $this->contactPerson;
}
/**
* @param mixed $contactPerson
*/
public function setContactPerson($contactPerson)
{
$this->contactPerson = $contactPerson;
}
/**
* @return mixed
*/
public function getComission()
{
return $this->comission;
}
/**
* @param mixed $comission
*/
public function setComission($comission)
{
$this->comission = $comission;
}
/**
* @return mixed
*/
public function getApplyDiscount()
{
return $this->applyDiscount;
}
/**
* @param mixed $applyDiscount
*/
public function setApplyDiscount($applyDiscount)
{
$this->applyDiscount = $applyDiscount;
}
/**
* @return mixed
*/
public function getCustomerDiscount()
{
return $this->customerDiscount;
}
/**
* @param mixed $customerDiscount
*/
public function setCustomerDiscount($customerDiscount)
{
$this->customerDiscount = $customerDiscount;
}
/**
* @return mixed
*/
public function getItems()
{
return $this->items;
}
/**
* @param mixed $items
*/
public function setItems($items)
{
$this->items = $items;
}
/**
* @return mixed
*/
public function getReference()
{
return $this->reference;
}
/**
* @param mixed $reference
*/
public function setReference($reference)
{
$this->reference = $reference;
}
/**
* @return \DateTime
*/
public function getCreated()
{
return $this->created;
}
/**
* @param \DateTime $created
*/
public function setCreated($created)
{
$this->created = $created;
}
/**
* @return \DateTime
*/
public function getUpdated()
{
return $this->updated;
}
/**
* @param \DateTime $updated
*/
public function setUpdated($updated)
{
$this->updated = $updated;
}
/**
* @return mixed
*/
public function getNetTotal()
{
return $this->netTotal;
}
/**
* @param mixed $netTotal
*/
public function setNetTotal($netTotal)
{
$this->netTotal = $netTotal;
}
/**
* @return mixed
*/
public function getCurrency()
{
return $this->currency;
}
/**
* @param mixed $currency
*/
public function setCurrency($currency)
{
$this->currency = $currency;
}
/**
* @return mixed
*/
public function getDescription()
{
return $this->description;
}
/**
* @param mixed $description
*/
public function setDescription($description)
{
$this->description = $description;
}
/**
* @return mixed
*/
public function getApplyMwst()
{
return $this->applyMwst;
}
/**
* @param mixed $applyMwst
*/
public function setApplyMwst($applyMwst)
{
$this->applyMwst = $applyMwst;
}
/**
* @return \DateTime
*/
public function getDeliveryDate()
{
return $this->deliveryDate;
}
/**
* @param \DateTime $deliveryDate
*/
public function setDeliveryDate($deliveryDate)
{
$this->deliveryDate = $deliveryDate;
}
/**
* @return mixed
*/
public function getOrderNumber()
{
return $this->orderNumber;
}
/**
* @param mixed $orderNumber
*/
public function setOrderNumber($orderNumber)
{
$this->orderNumber = $orderNumber;
}
/**
* @return mixed
*/
public function getDistributor()
{
return $this->distributor;
}
/**
* @param mixed $distributor
*/
public function setDistributor($distributor)
{
$this->distributor = $distributor;
}
/**
* @return string
*/
public function getDeliveryType()
{
return $this->deliveryType;
}
/**
* @param string $deliveryType
*/
public function setDeliveryType($deliveryType)
{
$this->deliveryType = $deliveryType;
}
/**
* @return \DateTime
*/
public function getOrderedAt()
{
return $this->orderedAt;
}
/**
* @param \DateTime $orderedAt
*/
public function setOrderedAt($orderedAt)
{
$this->orderedAt = $orderedAt;
}
/**
* @return mixed
*/
public function getHideAddressInSelector()
{
return $this->hideAddressInSelector;
}
/**
* @param mixed $hideAddressInSelector
*/
public function setHideAddressInSelector($hideAddressInSelector)
{
$this->hideAddressInSelector = $hideAddressInSelector;
}
/**
* @return array
*/
public function getFiles()
{
return $this->files ?? [];
}
/**
* @param array $files
*
* @return Estimate
*/
public function setFiles($files)
{
$this->files = $files;
return $this;
}
public function isEmpty() {
foreach($this->items as $item) {
if (isset($item['state']) && $item['state'] == 'added') {
return false;
}
}
return true;
}
}