src/Entity/PurchaseInstruction.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Entity\User;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use Gedmo\Mapping\Annotation as Gedmo;
  8. /**
  9.  * Purchase instruction for physical sales.
  10.  *
  11.  * @author Paweł Jędrzejewski <pjedrzejewski@diweb.pl>
  12.  *
  13.  * @ORM\Entity(repositoryClass="App\Repository\PurchaseInstructionRepository")
  14.  *
  15.  * @ORM\Table(
  16.  *     name="purchase_instruction",
  17.  *     indexes={
  18.  *
  19.  *         @ORM\Index(columns={"status"}),
  20.  *         @ORM\Index(columns={"created_at"}),
  21.  *         @ORM\Index(columns={"updated_at"}),
  22.  *         @ORM\Index(columns={"amount"})
  23.  *     }
  24.  * )
  25.  */
  26. class PurchaseInstruction
  27. {
  28.     public const CANCELED 'Annulé';
  29.     public const ACCEPTED 'Accepté';
  30.     public const REFUSED 'Refusé';
  31.     public const WON 'Gagné';
  32.     public const LOST 'Perdu';
  33.     public const ORIGIN_B2C 'B2C';
  34.     public const ORIGIN_B2B 'B2B';
  35.     /**
  36.      * @ORM\Id
  37.      *
  38.      * @ORM\Column(type="bigint")
  39.      *
  40.      * @ORM\GeneratedValue(strategy="AUTO")
  41.      */
  42.     protected $id;
  43.     /**
  44.      * Related vehicle.
  45.      *
  46.      * @ORM\ManyToOne(targetEntity="App\Entity\Vehicle", inversedBy="purchaseInstructions")
  47.      *
  48.      * @ORM\JoinColumn(name="vehicle_id", referencedColumnName="id")
  49.      */
  50.     protected $vehicle;
  51.     /**
  52.      * Related sale.
  53.      *
  54.      * @ORM\ManyToOne(targetEntity="App\Entity\Sale")
  55.      *
  56.      * @ORM\JoinColumn(name="sale_id", referencedColumnName="id")
  57.      */
  58.     protected $sale;
  59.     /**
  60.      * User.
  61.      *
  62.      * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="purchaseInstructions")
  63.      *
  64.      * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
  65.      */
  66.     protected $user;
  67.     /**
  68.      * Amount that user is willing to pay on physical sale for the related vehicle.
  69.      *
  70.      * @ORM\Column(type="decimal", precision=10, scale=2, nullable=true)
  71.      */
  72.     protected $amount;
  73.     /**
  74.      * Amount excluding tax.
  75.      *
  76.      * @ORM\Column(type="decimal", precision=10, scale=4, nullable=true)
  77.      */
  78.     protected $amountHT;
  79.     /**
  80.      * True if user is able to pay VAT tax, false otherwise.
  81.      *
  82.      * @ORM\Column(type="boolean", name="pays_vat")
  83.      */
  84.     protected $paysVat;
  85.     /**
  86.      * @Gedmo\Timestampable(on="create")
  87.      *
  88.      * @ORM\Column(type="datetime", name="created_at")
  89.      */
  90.     protected $createdAt;
  91.     /**
  92.      * @Gedmo\Timestampable(on="update")
  93.      *
  94.      * @ORM\Column(type="datetime", name="updated_at")
  95.      */
  96.     protected $updatedAt;
  97.     /**
  98.      * @ORM\Column(type="string")
  99.      */
  100.     protected $status;
  101.     /**
  102.      * @ORM\Column(type="string")
  103.      */
  104.     protected $origin;
  105.     /**
  106.      * Constructor.
  107.      */
  108.     public function __construct(Vehicle $vehicle, ?User $user null)
  109.     {
  110.         $this->vehicle $vehicle;
  111.         $this->sale $vehicle->getEvent()->getSale();
  112.         $this->user $user;
  113.         $this->amount $vehicle->getStartingPrice();
  114.         $this->paysVat false;
  115.         $this->status self::REFUSED;
  116.         $this->origin self::ORIGIN_B2C;
  117.     }
  118.     /**
  119.      * Get id.
  120.      *
  121.      * @return int
  122.      */
  123.     public function getId()
  124.     {
  125.         return $this->id;
  126.     }
  127.     /**
  128.      * Set id.
  129.      *
  130.      * @param int $id
  131.      */
  132.     public function setId($id): void
  133.     {
  134.         $this->id $id;
  135.     }
  136.     /**
  137.      * Return the vehicle.
  138.      *
  139.      * @return Vehicle
  140.      */
  141.     public function getVehicle()
  142.     {
  143.         return $this->vehicle;
  144.     }
  145.     /**
  146.      * Set the vehicle.
  147.      */
  148.     public function setVehicle(Vehicle $vehicle): void
  149.     {
  150.         $this->vehicle $vehicle;
  151.     }
  152.     /**
  153.      * Return the sale.
  154.      *
  155.      * @return Sale
  156.      */
  157.     public function getSale()
  158.     {
  159.         return $this->sale;
  160.     }
  161.     /**
  162.      * Set the sale.
  163.      */
  164.     public function setSale(Sale $sale): void
  165.     {
  166.         $this->sale $sale;
  167.     }
  168.     /**
  169.      * Get user.
  170.      *
  171.      * @return User
  172.      */
  173.     public function getUser()
  174.     {
  175.         return $this->user;
  176.     }
  177.     /**
  178.      * Set user.
  179.      */
  180.     public function setUser(?User $user null): void
  181.     {
  182.         $this->user $user;
  183.     }
  184.     /**
  185.      * Get purchase instruction amount.
  186.      *
  187.      * @return int
  188.      */
  189.     public function getAmount()
  190.     {
  191.         return intval($this->amount);
  192.     }
  193.     /**
  194.      * Set purchase instruction amount.
  195.      *
  196.      * @param int $amount
  197.      */
  198.     public function setAmount($amount): void
  199.     {
  200.         $this->amount $amount;
  201.     }
  202.     /**
  203.      * Get purchase instruction amount Excluding Tax.
  204.      *
  205.      * @return float
  206.      */
  207.     public function getAmountHT()
  208.     {
  209.         return (float) $this->amountHT;
  210.     }
  211.     /**
  212.      * Set purchase instruction amount Excluding Tax.
  213.      *
  214.      * @param float $amountHT
  215.      */
  216.     public function setAmountHT($amountHT): void
  217.     {
  218.         $this->amountHT $amountHT;
  219.     }
  220.     /**
  221.      * Check whether the user declares VAT tax payment.
  222.      *
  223.      * @return bool
  224.      */
  225.     public function getPaysVat()
  226.     {
  227.         return $this->paysVat;
  228.     }
  229.     /**
  230.      * Set whether the user declares VAT tax payment.
  231.      *
  232.      * @param bool $paysVat
  233.      */
  234.     public function setPaysVat($paysVat): void
  235.     {
  236.         $this->paysVat $paysVat;
  237.     }
  238.     /**
  239.      * Return time of creation.
  240.      *
  241.      * @return DateTime
  242.      */
  243.     public function getCreatedAt()
  244.     {
  245.         return $this->createdAt;
  246.     }
  247.     /**
  248.      * Set time of creation.
  249.      */
  250.     public function setCreatedAt(\DateTime $createdAt): void
  251.     {
  252.         $this->createdAt $createdAt;
  253.     }
  254.     /**
  255.      * Return time of update.
  256.      *
  257.      * @return DateTime
  258.      */
  259.     public function getUpdatedAt()
  260.     {
  261.         return $this->updatedAt;
  262.     }
  263.     /**
  264.      * Set time of update.
  265.      */
  266.     public function setUpdatedAt(\DateTime $updatedAt): void
  267.     {
  268.         $this->updatedAt $updatedAt;
  269.     }
  270.     /**
  271.      * Return status.
  272.      */
  273.     public function getStatus()
  274.     {
  275.         return $this->status;
  276.     }
  277.     /**
  278.      * Set status.
  279.      */
  280.     public function setStatus($status): void
  281.     {
  282.         $this->status $status;
  283.     }
  284.     /**
  285.      * Return origin.
  286.      */
  287.     public function getOrigin()
  288.     {
  289.         return $this->origin;
  290.     }
  291.     /**
  292.      * Set origin.
  293.      */
  294.     public function setOrigin($origin): void
  295.     {
  296.         $this->origin $origin;
  297.     }
  298.     public function getIsOutOfDate()
  299.     {
  300.         $startdate \DateTime::createFromFormat('d/m/Y H:i:s'sprintf('%s 00:00:00'$this->vehicle->getSale()->getStartDate()->format('d/m/Y')));
  301.         return new \DateTime() >= $startdate;
  302.     }
  303. }