<?php
/**
* Copyright (c) 2001-present X-Cart Holdings LLC. All rights reserved.
* See https://www.x-cart.com/license-agreement.html for license details.
*/
namespace XLite\Model;
use ApiPlatform\Core\Annotation as ApiPlatform;
use Doctrine\ORM\Mapping as ORM;
use XLite\API\Endpoint\OrderTrackingNumber\DTO\OrderTrackingNumberInput;
use XLite\API\Endpoint\OrderTrackingNumber\DTO\OrderTrackingNumberOutput;
use XLite\Controller\API\OrderTrackingNumber\DeleteOrderTrackingNumber;
/**
* Order tracking number
*
* @ORM\Entity
* @ORM\Table (name="order_tracking_number")
* @ApiPlatform\ApiResource(
* attributes={"pagination_enabled"=false},
* shortName="Tracking numbers",
* output=OrderTrackingNumberOutput::class,
* itemOperations={
* "get"={
* "method"="GET",
* "path"="/orders/{id}/tracking_number/{tracking_number_id}.{_format}",
* "identifiers"={"id", "tracking_number_id"},
* "requirements"={"id"="\d+", "tracking_number_id"="\d+"},
* "openapi_context"={
* "summary"="Retrieve tracking number from order",
* "parameters"={
* {"name"="id", "in"="path", "required"=true, "schema"={"type"="integer"}},
* {"name"="tracking_number_id", "in"="path", "required"=true, "schema"={"type"="integer"}},
* },
* },
* },
* "delete"={
* "method"="DELETE",
* "path"="/orders/{id}/tracking_number/{tracking_number_id}.{_format}",
* "identifiers"={"id", "tracking_number_id"},
* "requirements"={"id"="\d+", "tracking_number_id"="\d+"},
* "controller"=DeleteOrderTrackingNumber::class,
* "read"=false,
* "openapi_context"={
* "summary"="Delete tracking number from order",
* "parameters"={
* {"name"="id", "in"="path", "required"=true, "schema"={"type"="integer"}},
* {"name"="tracking_number_id", "in"="path", "required"=true, "schema"={"type"="integer"}},
* },
* },
* },
* },
* collectionOperations={
* "get"={
* "method"="GET",
* "path"="/orders/{id}/tracking_number.{_format}",
* "identifiers"={"id"},
* "requirements"={"id"="\d+"},
* "openapi_context"={
* "summary"="Retrieve a list of tracking numbers from an order",
* "parameters"={
* {"name"="id", "in"="path", "required"=true, "schema"={"type"="integer"}}
* }
* }
* },
* "post"={
* "method"="POST",
* "input"=OrderTrackingNumberInput::class,
* "path"="/orders/{id}/tracking_number.{_format}",
* "identifiers"={"id"},
* "requirements"={"id"="\d+"},
* "openapi_context"={
* "summary"="Add tracking number to order",
* "parameters"={
* {"name"="id", "in"="path", "required"=true, "schema"={"type"="integer"}}
* }
* }
* },
* "get_tracking_number_by_order_number"={
* "method"="GET",
* "path"="/orders/by_number/{orderNumber}/tracking_number.{_format}",
* "identifiers"={"orderNumber"},
* "requirements"={"orderNumber"="\w+"},
* "openapi_context"={
* "summary"="Retrieve a list of tracking numbers by order number",
* "parameters"={
* {"name"="orderNumber", "in"="path", "required"=true, "schema"={"type"="string"}},
* },
* },
* },
* }
* )
*/
class OrderTrackingNumber extends \XLite\Model\AEntity
{
/**
* Order tracking number unique id
*
* @var mixed
*
* @ORM\Id
* @ORM\GeneratedValue (strategy="AUTO")
* @ORM\Column (type="integer")
*/
protected $tracking_id;
/**
* Value
*
* @var string
*
* @ORM\Column (type="text")
*/
protected $value;
/**
* Order tracking creation date
*
* @var integer
*
* @ORM\Column (type="integer")
*/
protected $creationDate;
/**
* Relation to a order entity
*
* @var \XLite\Model\Order
*
* @ORM\ManyToOne (targetEntity="XLite\Model\Order", inversedBy="trackingNumbers", fetch="LAZY")
* @ORM\JoinColumn (name="order_id", referencedColumnName="order_id", onDelete="CASCADE")
*/
protected $order;
/**
* Get tracking_id
*
* @return integer
*/
public function getTrackingId()
{
return $this->tracking_id;
}
/**
* Set value
*
* @param string $value
* @return OrderTrackingNumber
*/
public function setValue($value)
{
if ($this->isChanged($value)) {
$this->setCreationDate();
}
$this->value = $value;
return $this;
}
/**
* Get value
*
* @return string
*/
public function getValue()
{
return $this->value;
}
/**
* Set order
*
* @param \XLite\Model\Order $order
* @return OrderTrackingNumber
*/
public function setOrder(\XLite\Model\Order $order = null)
{
$this->order = $order;
return $this;
}
/**
* Get order
*
* @return \XLite\Model\Order
*/
public function getOrder()
{
return $this->order;
}
/**
* Set creation date
*
* @return OrderTrackingNumber
*/
public function setCreationDate()
{
$this->creationDate = time();
return $this;
}
/**
* Get creation date
*
* @return creationDate
*/
public function getCreationDate()
{
return $this->creationDate;
}
/**
* Checks if the tracking number is changed
*
* @param string $value
* @return boolean
*/
private function isChanged($value)
{
return $this->value !== $value;
}
}