<?php
declare(strict_types=1);
namespace Croisiland\CommonBundle\Entity\Itinerary;
use Crea\ToolsBundle\Entity\LifecycleUserIdentifierTrait;
use Croisiland\CommonBundle\Repository\Itinerary\ItinerarySegmentRepository;
use Croisiland\CommonBundle\Enum\SegmentTypeEnum;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=ItinerarySegmentRepository::class)
*/
class ItinerarySegment implements ItineraryPartInterface, ItinerarySegmentInterface
{
use LifecycleUserIdentifierTrait;
/**
* @ORM\Id
*
* @ORM\GeneratedValue
*
* @ORM\Column(type="integer")
*/
private ?int $id = null;
/**
* Le numéro d'ordre de segment doit commencer par 1 (port de départ) car il est utilisé en front pour l'affichage du numéro d'escale
* @ORM\Column(type="integer", nullable=true)
*/
private ?int $segmentOrder = null;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private ?int $dayNumber = null;
/**
* Delta en jours par rapport à la date de départ de la croisière
*
* @ORM\Column(type="integer", nullable=true)
*/
private ?int $dateDelta = null;
/**
* @ORM\Column(type="time", nullable=true)
*/
private ?\DateTimeInterface $arrivalTime = null;
/**
* @ORM\Column(type="time", nullable=true)
*/
private ?\DateTimeInterface $departureTime = null;
/**
* @ORM\Column(type="text", nullable=true)
*/
private ?string $description = null;
/**
* @ORM\ManyToOne(targetEntity=Itinerary::class, inversedBy="itinerarySegments")
*/
private ?Itinerary $itinerary = null;
/**
* @ORM\ManyToOne(targetEntity=Stopover::class, inversedBy="itinerarySegments")
* @ORM\JoinColumn(nullable=true)
*/
private ?Stopover $stopover = null;
/**
* @ORM\Column(type="string", enumType=SegmentTypeEnum::class)
*/
private SegmentTypeEnum $segmentType;
public function getId(): ?int
{
return $this->id;
}
public function getSegmentOrder(): ?int
{
return $this->segmentOrder;
}
public function setSegmentOrder(?int $segmentOrder): self
{
$this->segmentOrder = $segmentOrder;
return $this;
}
public function getDayNumber(): ?int
{
return $this->dayNumber;
}
public function setDayNumber(?int $dayNumber): self
{
$this->dayNumber = $dayNumber;
return $this;
}
public function getDateDelta(): ?int
{
return $this->dateDelta;
}
public function setDateDelta(?int $dateDelta): self
{
$this->dateDelta = $dateDelta;
return $this;
}
public function getArrivalTime(): ?\DateTimeInterface
{
return $this->arrivalTime;
}
public function setArrivalTime(?\DateTimeInterface $arrivalTime): self
{
$this->arrivalTime = $arrivalTime;
return $this;
}
public function getDepartureTime(): ?\DateTimeInterface
{
return $this->departureTime;
}
public function setDepartureTime(?\DateTimeInterface $departureTime): self
{
$this->departureTime = $departureTime;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getItinerary(): ?Itinerary
{
return $this->itinerary;
}
public function setItinerary(?Itinerary $itinerary): self
{
$this->itinerary = $itinerary;
return $this;
}
public function getStopover(): ?Stopover
{
return $this->stopover;
}
public function setStopover(?Stopover $stopover): self
{
$this->stopover = $stopover;
return $this;
}
public function getArrivalTimeInSeconds(): ?int
{
if (null === $this->getArrivalTime()) {
return null;
}
return ($this->getArrivalTime()->format('H') * 3600) + ($this->getArrivalTime()->format('i') * 60);
}
public function getDepartureTimeInSeconds(): ?int
{
if (null === $this->getDepartureTime()) {
return null;
}
return ($this->getDepartureTime()->format('H') * 3600) + ($this->getDepartureTime()->format('i') * 60);
}
public function getSegmentType(): ?SegmentTypeEnum
{
return $this->segmentType;
}
public function setSegmentType(SegmentTypeEnum $segmentType): self
{
$this->segmentType = $segmentType;
return $this;
}
}