src/Entity/Bid.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Entity\User;
  4. use App\Entity\Vehicle;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use Gedmo\Mapping\Annotation as Gedmo;
  8. /**
  9.  * Simple bid entity.
  10.  *
  11.  * @ORM\Entity(repositoryClass="App\Repository\BidRepository")
  12.  *
  13.  * @ORM\Table(
  14.  *     name="auction_bid",
  15.  *     indexes={
  16.  *
  17.  *         @ORM\Index(columns={"amount"}),
  18.  *         @ORM\Index(columns={"created_at"}),
  19.  *         @ORM\Index(columns={"bidded_at"}),
  20.  *         @ORM\Index(columns={"timestamp"})
  21.  *     }
  22.  * )
  23.  *
  24.  * @ORM\HasLifecycleCallbacks
  25.  */
  26. class Bid
  27. {
  28.     public const ORIGIN_PI 'OA';
  29.     public const ORIGIN_LIVE 'Live';
  30.     public const ORIGIN_ROOM 'Salle';
  31.     public const ORIGIN_ONLINE 'Online';
  32.     public const ORIGIN_ANIMATION 'Animation';
  33.     public const ORIGIN_AFTERSALE 'Après-vente';
  34.     public const ORIGIN_INTERENCHERES 'Interenchères';
  35.     public const ORIGIN_BID_FOR_USER 'Pour un utilisateur';
  36.     public const STATUS_EXCEEDED 'Dépassé';
  37.     public const STATUS_RESERVE_NOT_MET 'Réserve non atteinte';
  38.     public const STATUS_WINNING 'Gagnant';
  39.     public const STATUS_AUCTION_NOT_STARTED 'Avant enchère';
  40.     /**
  41.      * @ORM\Id
  42.      *
  43.      * @ORM\Column(type="bigint")
  44.      *
  45.      * @ORM\GeneratedValue(strategy="AUTO")
  46.      */
  47.     protected $id;
  48.     /**
  49.      * @ORM\OneToOne(targetEntity="App\Entity\Bid")
  50.      *
  51.      * @ORM\JoinColumn(name="previousBid_id", referencedColumnName="id")
  52.      */
  53.     protected $previousBid;
  54.     /**
  55.      * Bidding user.
  56.      *
  57.      * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="bids", cascade={"persist"})
  58.      *
  59.      * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
  60.      */
  61.     protected $user;
  62.     /**
  63.      * @ORM\ManyToOne(targetEntity="App\Entity\Auction", inversedBy="bids", cascade={"persist"})
  64.      *
  65.      * @ORM\JoinColumn(name="auction_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
  66.      */
  67.     protected $auction;
  68.     /**
  69.      * @ORM\Column(type="decimal", precision=10, scale=2)
  70.      */
  71.     protected $amount;
  72.     /**
  73.      * @ORM\Column(type="boolean")
  74.      */
  75.     protected $paysVat;
  76.     /**
  77.      * @Gedmo\Timestampable(on="create")
  78.      *
  79.      * @ORM\Column(type="datetime", name="created_at")
  80.      */
  81.     protected $createdAt;
  82.     /**
  83.      * @Gedmo\Timestampable(on="update")
  84.      *
  85.      * @ORM\Column(type="datetime", name="bidded_at")
  86.      */
  87.     protected $biddedAt;
  88.     /**
  89.      * @ORM\Column(type="float")
  90.      */
  91.     protected $timestamp;
  92.     /**
  93.      * @ORM\Column(type="integer", name="paused_Ms")
  94.      */
  95.     protected $pausedMs 0;
  96.     /**
  97.      * @ORM\Column(type="string", nullable=true)
  98.      */
  99.     protected $origin;
  100.     public function __construct($user$amount)
  101.     {
  102.         if (null !== $user) {
  103.             $this->setUser($user);
  104.         }
  105.         $this->setAmount($amount);
  106.         $this->paysVat false;
  107.         $this->origin self::ORIGIN_ONLINE;
  108.     }
  109.     /**
  110.      * @return Bid
  111.      */
  112.     public static function createPurchasedBid(User $userBid $nextAuction $auction$pricePitch)
  113.     {
  114.         $surbid = new self($user$next->getAmount() + $pricePitch);
  115.         $surbid->setPrevious($next);
  116.         $surbid->setAuction($auction);
  117.         $surbid->setBiddedAt($next->getBiddedAt());
  118.         $surbid->setPausedMs($next->getPausedMs());
  119.         $surbid->setOrigin(self::ORIGIN_PI);
  120.         return $surbid;
  121.     }
  122.     /**
  123.      * @return int
  124.      */
  125.     public function getId()
  126.     {
  127.         return $this->id;
  128.     }
  129.     public function setPrevious(?Bid $previous null): void
  130.     {
  131.         $this->previousBid $previous;
  132.     }
  133.     /**
  134.      * Returns the bidder.
  135.      *
  136.      * @return User
  137.      */
  138.     public function getUser()
  139.     {
  140.         return $this->user;
  141.     }
  142.     /**
  143.      * Sets the bidder.
  144.      */
  145.     public function setUser(User $user): void
  146.     {
  147.         $this->user $user;
  148.     }
  149.     /**
  150.      * Returns the auction.
  151.      *
  152.      * @return Auction
  153.      */
  154.     public function getAuction()
  155.     {
  156.         return $this->auction;
  157.     }
  158.     /**
  159.      * Sets the auction.
  160.      */
  161.     public function setAuction(?Auction $auction null)
  162.     {
  163.         $this->auction $auction;
  164.         return $this;
  165.     }
  166.     public function getAmount()
  167.     {
  168.         return $this->amount;
  169.     }
  170.     public function setAmount($amount): void
  171.     {
  172.         $this->amount $amount;
  173.     }
  174.     public function getNextAmount()
  175.     {
  176.         return $this->amount $this->auction->getVehicle()->getSale()->getBidIncrement();
  177.     }
  178.     public function getPaysVat()
  179.     {
  180.         return $this->paysVat;
  181.     }
  182.     public function setPaysVat($paysVat): void
  183.     {
  184.         $this->paysVat $paysVat;
  185.     }
  186.     /**
  187.      * Return time of creation.
  188.      *
  189.      * @return \DateTime
  190.      */
  191.     public function getCreatedAt()
  192.     {
  193.         return $this->createdAt;
  194.     }
  195.     /**
  196.      * Set time of creation.
  197.      */
  198.     public function setCreatedAt(\DateTime $createdAt): void
  199.     {
  200.         $this->createdAt $createdAt;
  201.     }
  202.     /**
  203.      * Returns time of bidding.
  204.      *
  205.      * @return \DateTime
  206.      */
  207.     public function getBiddedAt()
  208.     {
  209.         return $this->biddedAt;
  210.     }
  211.     /**
  212.      * Sets time of bidding.
  213.      */
  214.     public function setBiddedAt(\DateTime $biddedAt): void
  215.     {
  216.         $this->biddedAt $biddedAt;
  217.     }
  218.     public function getTimestamp()
  219.     {
  220.         return $this->timestamp;
  221.     }
  222.     /**
  223.      * @ORM\PrePersist
  224.      *
  225.      * @ORM\PreUpdate
  226.      */
  227.     public function updateTimestamp(): void
  228.     {
  229.         [$msec$sec] = explode(' 'microtime());
  230.         $this->timestamp = (float) $msec + (float) $sec;
  231.     }
  232.     public function getPausedMs()
  233.     {
  234.         return $this->pausedMs;
  235.     }
  236.     public function setpausedMs($pausedMs)
  237.     {
  238.         $this->pausedMs $pausedMs;
  239.         return $this;
  240.     }
  241.     public function getOrigin()
  242.     {
  243.         return $this->origin;
  244.     }
  245.     public function setOrigin($origin): void
  246.     {
  247.         $this->origin $origin;
  248.     }
  249.     public function getStatus()
  250.     {
  251.         if ($this->getAuction()->getOpenedAt() > new \DateTime()) {
  252.             return self::STATUS_AUCTION_NOT_STARTED;
  253.         }
  254.         if ($this->getUser() === $this->getAuction()->getVehicle()->getWinner()) {
  255.             if (
  256.                 in_array($this->getVehicle()->getSale()->getSalingType(), [Sale::SALING_STATE_MIXEDSale::SALING_STATE_BUYOUT])
  257.                 && $this->getVehicle()->getBuyoutPrice() > 0
  258.                 && $this->getAmount() >= $this->getVehicle()->getBuyoutPrice()
  259.             ) {
  260.                 return self::STATUS_WINNING;
  261.             }
  262.             if ($this->getAmount() >= $this->getAuction()->getVehicle()->getReservePrice()) {
  263.                 return self::STATUS_WINNING;
  264.             }
  265.             return self::STATUS_RESERVE_NOT_MET;
  266.         }
  267.         return self::STATUS_EXCEEDED;
  268.     }
  269.     /**
  270.      * @return Vehicle
  271.      */
  272.     public function getVehicle()
  273.     {
  274.         return $this->auction->getVehicle();
  275.     }
  276. }