<?php
namespace App\Entity;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* GroupSession
*
* @ORM\Table(name="group_session")
* @ORM\Entity(repositoryClass="App\Repository\GroupSessionRepository")
*/
class GroupSession
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @Groups({"agenda-api"})
*/
private $id;
/**
* @var string|null
* @Groups({"agenda-api"})
*
* @ORM\Column(name="title", type="string", length=255, nullable=true, options={"default"="NULL"})
*/
private $title;
/**
* @var string|null
*
* @ORM\Column(name="picture", type="string", length=255, nullable=true, options={"default"="NULL"})
*/
private $picture;
/**
* @var \DateTime|null
*
* @ORM\Column(name="start_date", type="datetime", nullable=true, options={"default"="NULL"})
*/
private $startDate;
/**
* @var \DateTime|null
*
* @ORM\Column(name="end_date", type="datetime", nullable=true, options={"default"="NULL"})
*/
private $endDate;
/**
* @var string|null
*
* @ORM\Column(name="description", type="string", length=65535, nullable=true, options={"default"="NULL"})
*/
private $description;
/**
* @var string|null
*
* @ORM\Column(name="url", type="string", length=65535, nullable=true, options={"default"="NULL"})
*/
private $url;
/**
* @var float|null
*
* @ORM\Column(name="price", type="float", precision=10, scale=0, nullable=true, options={"default"="NULL"})
*/
private $price;
/**
* @var int|null
*
* @ORM\Column(name="group_max", type="integer", nullable=true)
*/
private $groupMax;
/**
* @var string|null
*
* @ORM\Column(name="location", type="string", length=255, nullable=true, options={"default"="NULL"})
*/
private $location;
/**
* @var bool|null
*
* @ORM\Column(name="open", type="boolean", nullable=true, options={"default"="NULL"})
*/
private $open = true;
/**
* @var Partner|null
*
* @ORM\ManyToOne(targetEntity="Partner")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="partner_id", referencedColumnName="id")
* })
*/
private $partner;
/**
* @var Collection
*
* @ORM\OneToMany(targetEntity="Reservation", mappedBy="groupSession")
*/
private $reservations;
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @param int $id
*/
public function setId(int $id): void
{
$this->id = $id;
}
/**
* @return string|null
*/
public function getTitle(): ?string
{
return $this->title;
}
/**
* @param string|null $title
*/
public function setTitle(?string $title): void
{
$this->title = $title;
}
/**
* @return string|null
*/
public function getPicture(): ?string
{
return $this->picture;
}
/**
* @param string|null $picture
*/
public function setPicture(?string $picture): void
{
$this->picture = $picture;
}
/**
* @return \DateTime|null
*/
public function getStartDate(): ?\DateTime
{
return $this->startDate;
}
/**
* @param \DateTime|null $startDate
*/
public function setStartDate(?\DateTime $startDate): void
{
$this->startDate = $startDate;
}
/**
* @return \DateTime|null
*/
public function getEndDate(): ?\DateTime
{
return $this->endDate;
}
/**
* @param \DateTime|null $endDate
*/
public function setEndDate(?\DateTime $endDate): void
{
$this->endDate = $endDate;
}
/**
* @return string|null
*/
public function getDescription(): ?string
{
return $this->description;
}
/**
* @param string|null $description
*/
public function setDescription(?string $description): void
{
$this->description = $description;
}
/**
* @return string|null
*/
public function getUrl(): ?string
{
return $this->url;
}
/**
* @param string|null $url
*/
public function setUrl(?string $url): void
{
$this->url = $url;
}
/**
* @return float|null
*/
public function getPrice(): ?float
{
return $this->price;
}
/**
* @param float|null $price
*/
public function setPrice(?float $price): void
{
$this->price = $price;
}
/**
* @return int|null
*/
public function getGroupMax(): ?int
{
return $this->groupMax;
}
/**
* @param int|null $groupMax
*/
public function setGroupMax(?int $groupMax): void
{
$this->groupMax = $groupMax;
}
/**
* @return string|null
*/
public function getLocation(): ?string
{
return $this->location;
}
/**
* @param string|null $location
*/
public function setLocation(?string $location): void
{
$this->location = $location;
}
/**
* @return bool|null
*/
public function getOpen(): ?bool
{
return $this->open;
}
/**
* @param bool|null $open
*/
public function setOpen(?bool $open): void
{
$this->open = $open;
}
/**
* @return Partner|null
*/
public function getPartner(): ?Partner
{
return $this->partner;
}
/**
* @param Partner|null $partner
*/
public function setPartner(?Partner $partner): void
{
$this->partner = $partner;
}
/**
* @return Collection|null
*/
public function getReservations(): ?Collection
{
return $this->reservations;
}
/**
* @param Collection|null $reservations
*/
public function setReservations(?Collection $reservations): void
{
$this->reservations = $reservations;
}
public function getReservationsWithoutCanceled()
{
if ($this->getReservations()) {
return $this->getReservations()->filter(function (Reservation $reservation) {
return $reservation->getCancelationDate() == null && !$reservation->getAbsent();
});
}
return [];
}
public function getNbReservations(): int
{
return count($this->getReservationsWithoutCanceled());
}
public function hasReservation(): bool
{
return $this->getNbReservations() > 0;
}
public function availablePlaces()
{
if ($this->getGroupMax()) {
return $this->getGroupMax() - $this->getNbReservations();
}
return null;
}
public function isReservable(): bool
{
if (!$this->getOpen()) {
return false;
}
if ($this->getGroupMax()) {
return $this->availablePlaces() > 0;
}
return true;
}
}