<?php
namespace App\Entity;
use App\Service\Helper\DateTimeHelper;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Exception;
/**
* @ORM\Table(name="carts__carts", uniqueConstraints={@ORM\UniqueConstraint(name="guest_idx", columns={"guest_id"})})
* @ORM\Entity(repositoryClass="App\Repository\CartRepository")
*/
class Cart
{
use IdTrait;
/**
* @ORM\Column(name="created_at", type="datetime", nullable=false)
*/
private DateTime $createdAt;
/**
* @ORM\OneToOne(targetEntity="App\Entity\User", inversedBy="cart", cascade={"persist"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
*/
private ?User $user;
/**
* @ORM\Column(name="guest_id", type="string", nullable=true)
*/
private ?string $guestId;
/**
* @ORM\Column(name="first_name", type="string", nullable=true)
*/
private ?string $firstName = null;
/**
* @ORM\Column(name="last_name", type="string", nullable=true)
*/
private ?string $lastName = null;
/**
* @ORM\Column(name="father_name", type="string", nullable=true)
*/
private ?string $fatherName = null;
/**
* @ORM\Column(name="phone", type="string", nullable=true)
*/
private ?string $phone = null;
/**
* @var Collection|CartElement[]
*
* @ORM\OneToMany(targetEntity="App\Entity\CartElement", mappedBy="cart", cascade={"persist"})
*/
private $elements;
/**
* @ORM\Column(type="string", name="delivery_type", nullable=true)
*/
private ?string $deliveryType = null;
/**
* @ORM\Column(type="string", name="town", nullable=true)
*/
private ?string $town = null;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private ?int $postcode = null;
/**
* @ORM\Column(type="string", name="street", nullable=true)
*/
private ?string $street = null;
/**
* @ORM\Column(type="string", name="house", nullable=true)
*/
private ?string $house = null;
/**
* @ORM\Column(type="string", name="apartment", nullable=true)
*/
private ?string $apartment = null;
/**
* @ORM\Column(type="float", nullable=true)
*/
private ?float $longitude = null;
/**
* @ORM\Column(type="float", nullable=true)
*/
private ?float $latitude = null;
/**
* @ORM\Column(type="string", name="payment_type", nullable=true)
*/
private ?string $paymentType = null;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\TransportCompany")
* @ORM\JoinColumn(name="transport_company_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
*/
private ?TransportCompany $transportCompany = null;
/**
* @ORM\Column(name="comment", type="text", nullable=true)
*/
private ?string $comment;
/**
* @throws Exception
*/
public function __construct(User $user = null, $guestId = null)
{
$this->user = $user;
$this->guestId = $guestId;
$this->elements = new ArrayCollection();
$this->createdAt = DateTimeHelper::getNowDateTime();
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): Cart
{
$this->user = $user;
return $this;
}
public function getGuestId()
{
return $this->guestId;
}
public function setGuestId($guestId): Cart
{
$this->guestId = $guestId;
return $this;
}
public function getFirstName(): ?string
{
return $this->firstName;
}
public function setFirstName(?string $firstName): Cart
{
$this->firstName = $firstName;
return $this;
}
public function getLastName(): ?string
{
return $this->lastName;
}
public function setLastName(?string $lastName): Cart
{
$this->lastName = $lastName;
return $this;
}
public function getFatherName(): ?string
{
return $this->fatherName;
}
public function setFatherName(?string $fatherName): Cart
{
$this->fatherName = $fatherName;
return $this;
}
public function getPhone(): ?string
{
return $this->phone;
}
public function setPhone(?string $phone): Cart
{
$this->phone = $phone;
return $this;
}
/**
* @return Collection|CartElement[]
*/
public function getElements()
{
return $this->elements;
}
public function getDeliveryType(): ?string
{
return $this->deliveryType;
}
public function setDeliveryType(?string $deliveryType): Cart
{
$this->deliveryType = $deliveryType;
return $this;
}
public function getPaymentType(): ?string
{
return $this->paymentType;
}
public function setPaymentType(?string $paymentType): Cart
{
$this->paymentType = $paymentType;
return $this;
}
public function getComment(): ?string
{
return $this->comment;
}
public function setComment(?string $comment): Cart
{
$this->comment = $comment;
return $this;
}
public function getTown(): ?string
{
return $this->town;
}
public function setTown(?string $town): Cart
{
$this->town = $town;
return $this;
}
public function getPostcode(): ?int
{
return $this->postcode;
}
public function setPostcode(?int $postcode): Cart
{
$this->postcode = $postcode;
return $this;
}
public function getStreet(): ?string
{
return $this->street;
}
public function setStreet(?string $street): Cart
{
$this->street = $street;
return $this;
}
public function getHouse(): ?string
{
return $this->house;
}
public function setHouse(?string $house): Cart
{
$this->house = $house;
return $this;
}
public function getApartment(): ?string
{
return $this->apartment;
}
public function setApartment(?string $apartment): Cart
{
$this->apartment = $apartment;
return $this;
}
public function getLongitude(): ?float
{
return $this->longitude;
}
public function setLongitude(?float $longitude): Cart
{
$this->longitude = $longitude;
return $this;
}
public function getLatitude(): ?float
{
return $this->latitude;
}
public function setLatitude(?float $latitude): Cart
{
$this->latitude = $latitude;
return $this;
}
public function getTransportCompany(): ?TransportCompany
{
return $this->transportCompany;
}
public function setTransportCompany(?TransportCompany $transportCompany): Cart
{
$this->transportCompany = $transportCompany;
return $this;
}
public function getElementsPrice()
{
$price = 0;
foreach ($this->getElements() as $element) {
$price += $element->getPrice() * $element->getQuantity();
}
return $price;
}
}