<?php
namespace App\Entity;
use App\Entity\Building;
use App\Entity\PollOption;
use App\Entity\User;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Ignore;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* Flat
*
* @ORM\Table(
* name="flat",
* uniqueConstraints={@ORM\UniqueConstraint(
* name="uniq_user_id_building_id_display_flat_id",
* columns={"user_id","building_id","display_flat_id"})}
*
* )
* @ORM\Entity(repositoryClass="App\Repository\FlatRepository")
* @UniqueEntity(
* fields= {"user", "building", "displayFlatId"},
* errorPath="display_flat_id",
* message="Stambena jedinica sa ovom oznakom već postoji."
* )
*/
class Flat
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private int $id;
/**
* @Assert\Length(
* max = 11,
* maxMessage = "Broj stana treba da ima maksimalno {{ limit }} karaktera."
* )
*
* @ORM\Column(name="display_flat_id", type="string", length=32, nullable=false)
*/
private string $displayFlatId;
/**
* @Assert\Type(
* type="float",
* message="Vrednost {{ value }} nije validna. Očekivana je decimalna vrednost."
* )
* @ORM\Column(name="size", type="float", length=32, nullable=true, options={"default" : 0})
*/
private float|null $size;
/**
* @ORM\Column(name="owner_name", type="string", length=512, nullable=true)
*/
private string|null $ownerName;
/**
* @ORM\Column(name="owner_lastname", type="string", length=512, nullable=true)
*/
private string|null $ownerLastname;
/**
* @ORM\Column(name="owner_address", type="string", length=512, nullable=true)
*/
private string|null $ownerAddress;
/**
* @ORM\Column(name="owner_contact", type="string", length=512, nullable=true)
*/
private string|null $ownerContact = null;
/**
* @ORM\Column(name="owner_phone_number", type="string", nullable=true)
*/
private string|null $ownerPhoneNumber = null;
/**
* @ORM\Column(name="rent", type="boolean", nullable=true, options={"default" : false})
*/
private bool|null $rent;
/**
* @ORM\Column(name="debit", type="float", nullable=false, options={"default" : 0})
*/
private float $debit = 0.0;
/**
* @ORM\Column(name="previous_bill", type="float", nullable=true, options={"default" : 0})
*/
private float|null $previousBill = 0.0;
/**
* @ORM\Column(name="type", type="integer", nullable=true, options={"default" : 1})
*/
private int|null $type;
/**
* @ORM\Column(name="subType", type="integer", nullable=true, options={"default" : 1})
*/
private int|null $subType = null;
/**
* @ORM\Column(name="old_debit", type="float", nullable=true, options={"default" : 0})
*/
private float|null $oldDebit = 0.0;
/**
* @ORM\Column(name="comment", type="string", length=512, nullable=true)
*/
private string|null $comment;
/**
* @Assert\Type(
* type="integer",
* message="The value {{ value }} is not a valid {{ type }}."
* )
* @ORM\Column(name="members", type="integer", options={"default" = 1})
*/
private int $members;
/**
* @ORM\Column(name="created_at", type="datetime")
*/
private DateTime|null $createdAt = null;
/**
* @ORM\Column(name="updated_at", type="datetime")
*/
private DateTime|null $updatedAt;
/**
* @Assert\Length(
* max = 128,
* maxMessage = "Naziv firme treba da ima maksimalno {{ limit }} karaktera."
* )
* @ORM\Column(name="company_name", type="string", length=128, nullable=true)
*/
private string|null $companyName;
/**
* @ORM\Column(name="mat_id", type="string", length=64, nullable=true)
*/
private string|null $matId;
/**
* @ORM\Column(name="pib", type="string", length=64, nullable=true)
*/
private string|null $pib;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
* })
*/
#[Ignore]
private User $user;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Building", cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="building_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
* })
*/
#[Ignore]
private Building $building;
/**
* @Assert\Email(message = "'{{ value }}' nije validna email adresa.")
*
* @ORM\Column(name="owner_email", type="string", nullable=true)
*/
private string|null $ownerEmail = null;
/**
* @ORM\Column(name="email_can_be_used", type="boolean", options={"default" : true})
*/
private bool $emailCanBeUsed;
/**
* @ORM\Column(name="company_place", type="string", length=64, nullable=true)
*/
private string|null $companyPlace;
/**
* @ORM\Column(name="occupant", type="string", length=255, nullable=true)
*/
private string|null $occupant;
/**
* @Assert\Email(message = "'{{ value }}' nije validna email adresa.")
*
* @ORM\Column(name="occupantEmail", type="string", length=255, nullable=true)
*/
private string|null $occupantEmail;
/**
* @ORM\Column(name="archived", type="integer", nullable=true, options={"default" : 0})
*/
private int|null $archived;
/**
* @ORM\Column(name="archived_at", type="datetime", nullable=true)
*/
private DateTime $archivedAt;
/**
* @ORM\Column(name="bank_account", type="string", length=128, nullable=true)
*/
private string|null $bankAccount;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Flat", cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="current_flat", referencedColumnName="id", nullable=true, onDelete="CASCADE")
* })
*/
#[Ignore]
private Flat|null $currentFlat;
/**
* @var Collection<int, FlatWarning>
* @ORM\OneToMany(targetEntity="App\Entity\FlatWarning", mappedBy="flat")
*/
#[Ignore]
private Collection $flatWarnings;
/**
* @ORM\Column(name="createdBy", type="string", nullable=true)
*/
private string|null $createdBy;
/**
* @var Collection<int, PollOption>
* @ORM\ManyToMany(targetEntity="App\Entity\PollOption", mappedBy="pollOptionsFlats")
*/
#[Ignore]
private Collection $votedOptions;
/**
* @ORM\Column(name="eInvoice", type="boolean")
*/
private bool $eInvoice = false;
/**
* @ORM\Column(name="jbkjs", type="string", nullable=true)
*/
private string|null $jbkjs = null;
/**
* @ORM\Column(name="contract_number", type="string", nullable=true)
*/
private string|null $contractNumber = null;
/**
* @ORM\Column(name="order_number", type="string", nullable=true)
*/
private string|null $orderNumber = null;
/**
* @ORM\Column(name="object_code", type="string", nullable=true)
*/
private string|null $objectCode = null;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Resident", inversedBy="flats")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="resident_id", referencedColumnName="id", onDelete="SET NULL")
* })
*/
#[Ignore]
private Resident|null $resident;
/**
* @ORM\Column(name="print_bill", type="boolean")
*/
private bool $printBill = false;
/**
* @ORM\Column(name="old_debit_date", type="datetime", nullable=true)
*/
private DateTime|null $oldDebitDate = null;
/**
* @return string
*/
public function getCreatedBy(): string
{
return $this->createdBy;
}
/**
* @return string|null
*/
public function getOwnerEmail(): ?string
{
return $this->ownerEmail;
}
/**
* @param string|null $ownerEmail
*/
public function setOwnerEmail(?string $ownerEmail): void
{
$this->ownerEmail = $ownerEmail;
}
public function __construct()
{
if (empty($this->getDebit())) {
$this->setDebit(0.0);
}
$this->incrementCreatedAt();
$this->flatWarnings = new ArrayCollection();
$this->votedOptions = new ArrayCollection();
}
/**
* @param PollOption $option
*/
public function addPollOption(PollOption $option): void
{
$this->votedOptions[] = $option;
$option->addFlatVote($this);
}
public function removePollOption(PollOption $option): void
{
if (!$this->votedOptions->contains($option)) {
return;
}
$this->votedOptions->removeElement($option);
$option->removeFlatVote($this);
}
/**
* Get id
*
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @param string|null $ownerName
*
* @return $this
*/
public function setOwnerName(?string $ownerName): self
{
$this->ownerName = $ownerName;
return $this;
}
/**
* Get ownerName
*
* @return string|null
*/
public function getOwnerName(): ?string
{
return $this->ownerName;
}
/**
* @param string|null $ownerLastname
*
* @return $this
*/
public function setOwnerLastname(?string $ownerLastname): self
{
$this->ownerLastname = $ownerLastname;
return $this;
}
/**
* Get ownerLastname
*
* @return string|null
*/
public function getOwnerLastname(): ?string
{
return $this->ownerLastname;
}
/**
* @param string|null $ownerAddress
*
* @return $this
*/
public function setOwnerAddress(?string $ownerAddress): self
{
$this->ownerAddress = $ownerAddress;
return $this;
}
/**
* @return string|null
*/
public function getCompanyName(): ?string
{
return $this->companyName;
}
/**
* @param string|null $companyName
*/
public function setCompanyName(?string $companyName): void
{
$this->companyName = $companyName;
}
/**
* @return string|null
*/
public function getMatId(): ?string
{
return $this->matId;
}
/**
* @param string|null $matId
*/
public function setMatId(?string $matId): void
{
$this->matId = $matId;
}
/**
* @return string|null
*/
public function getPib(): ?string
{
return $this->pib;
}
/**
* @param string|null $pib
*/
public function setPib(?string $pib): void
{
$this->pib = $pib;
}
/**
* Get ownerContact
*
* @return string|null
*/
public function getOwnerContact(): ?string
{
return $this->ownerContact;
}
/**
* @param string|null $ownerContact
*
* @return $this
*/
public function setOwnerContact(?string $ownerContact): self
{
$this->ownerContact = $ownerContact;
return $this;
}
/**
* Get ownerAddress
*
* @return string|null
*/
public function getOwnerAddress(): ?string
{
return $this->ownerAddress;
}
/**
* @param bool|null $rent
*
* @return $this
*/
public function setRent(?bool $rent): self
{
$this->rent = $rent;
return $this;
}
/**
* @return bool|null
*/
public function getRent(): ?bool
{
return $this->rent;
}
/**
* @param float $debit
*
* @return $this
*/
public function setDebit(float $debit): self
{
$this->debit = $debit;
return $this;
}
/**
* @return float
*/
public function getDebit(): float
{
return $this->debit;
}
/**
* @param float|null $oldDebit
*
* @return $this
*/
public function setOldDebit(?float $oldDebit): self
{
$this->oldDebit = $oldDebit;
return $this;
}
/**
* @return float|null
*/
public function getOldDebit(): ?float
{
return $this->oldDebit;
}
/**
* @param float|null $previousBill
*
* @return $this
*/
public function setPreviousBill(?float $previousBill): self
{
$this->previousBill = $previousBill;
return $this;
}
/**
* @return float|null
*/
public function getPreviousBill(): ?float
{
return $this->previousBill;
}
/**
* Set size
*
* @param float|null $size
*
* @return Flat
*/
public function setSize(?float $size): Flat
{
$this->size = $size;
return $this;
}
/**
* Get size
*
* @return float|null
*/
public function getSize(): ?float
{
return $this->size;
}
/**
* Set comment
*
* @param string|null $comment
*
* @return Flat
*/
public function setComment(?string $comment): Flat
{
$this->comment = $comment;
return $this;
}
/**
* Get comment
*
* @return string|null
*/
public function getComment(): ?string
{
return $this->comment;
}
/**
* @param int $members
*
* @return $this
*/
public function setMembers(int $members): self
{
$this->members = $members;
return $this;
}
/**
* Get type
*
* @return int|null
*/
public function getType(): ?int
{
return $this->type;
}
/**
* @param int|null $type
*
* @return $this
*/
public function setType(?int $type): self
{
$this->type = $type;
return $this;
}
/**
* Get members
*
* @return int
*/
public function getMembers(): int
{
return $this->members;
}
/**
* @param string $displayFlatId
*
* @return $this
*/
public function setDisplayFlatId(string $displayFlatId): self
{
$this->displayFlatId = $displayFlatId;
return $this;
}
/**
* Get displayFlatId
*
* @return string
*/
public function getDisplayFlatId(): string
{
return $this->displayFlatId;
}
/**
* @return DateTime|null
*/
public function getCreatedAt(): ?DateTime
{
return $this->createdAt;
}
/**
* @return DateTime|null
*/
public function getUpdatedAt(): ?DateTime
{
return $this->updatedAt;
}
/**
* @ORM\PrePersist
*/
public function incrementCreatedAt(): void
{
if (null === $this->createdAt) {
$this->createdAt = new DateTime();
}
$this->updatedAt = new DateTime();
}
/**
* @ORM\PreUpdate
*/
public function incrementUpdatedAt(): void
{
$this->updatedAt = new DateTime();
}
/**
* Set createdAt
*
* @param DateTime $createdAt
*/
public function setCreatedAt(DateTime $createdAt): void
{
$this->createdAt = $createdAt;
}
/**
* Set updatedAt
*
* @param DateTime $updatedAt
*/
public function setUpdatedAt(DateTime $updatedAt): void
{
$this->updatedAt = $updatedAt;
}
/**
* @return User
*/
#[Ignore]
public function getUser(): User
{
return $this->user;
}
/**
* @param User $user
*/
#[Ignore]
public function setUser(User $user): void
{
$this->user = $user;
if (empty($this->createdBy)) {
$this->createdBy = $user->getCreatedByValue();
}
}
/**
* @return Building
*/
#[Ignore]
public function getBuilding(): Building
{
return $this->building;
}
/**
* @param Building $building
*/
#[Ignore]
public function setBuilding(Building $building): void
{
$this->building = $building;
}
/**
* @return bool
*/
public function getEmailCanBeUsed(): bool
{
return $this->emailCanBeUsed;
}
/**
* @param bool $emailCanBeUsed
*/
public function setEmailCanBeUsed(bool $emailCanBeUsed): void
{
$this->emailCanBeUsed = $emailCanBeUsed;
}
/**
* @return string|null
*/
public function getCompanyPlace(): ?string
{
return $this->companyPlace;
}
/**
* @param string|null $companyPlace
*/
public function setCompanyPlace(?string $companyPlace): void
{
$this->companyPlace = $companyPlace;
}
/**
* @return string|null
*/
public function getOccupant(): ?string
{
return $this->occupant;
}
/**
* @param string|null $occupant
*/
public function setOccupant(?string $occupant): void
{
$this->occupant = $occupant;
}
/**
* @return string|null
*/
public function getOccupantEmail(): ?string
{
return $this->occupantEmail;
}
/**
* @param string|null $occupantEmail
*/
public function setOccupantEmail(?string $occupantEmail): void
{
$this->occupantEmail = $occupantEmail;
}
/**
* @return int|null
*/
public function getArchived(): ?int
{
return $this->archived;
}
/**
* @param int|null $archived
*/
public function setArchived(?int $archived): void
{
$this->archived = $archived;
}
/**
* @return Flat|null
*/
#[Ignore]
public function getCurrentFlat(): ?Flat
{
return $this->currentFlat;
}
/**
* @param Flat|null $currentFlat
*/
#[Ignore]
public function setCurrentFlat(?Flat $currentFlat): void
{
$this->currentFlat = $currentFlat;
}
/**
* @return string|null
*/
public function getBankAccount(): ?string
{
return $this->bankAccount;
}
/**
* @param string|null $bankAccount
*/
public function setBankAccount(?string $bankAccount): void
{
$this->bankAccount = $bankAccount;
}
/**
* @return int|null
*/
public function getSubType(): ?int
{
return $this->subType;
}
/**
* @param int|null $subType
*/
public function setSubType(?int $subType): void
{
$this->subType = $subType;
}
/**
* Get owner name+lastName
*
* @return string
*/
public function getFullName(): string
{
return sprintf("%s %s", $this->getOwnerName(), $this->getOwnerLastname());
}
/**
* @return Collection<int, FlatWarning>
*/
#[Ignore]
public function getFlatWarnings(): Collection
{
return $this->flatWarnings;
}
/**
* @param Collection<int, FlatWarning> $flatWarnings
*/
#[Ignore]
public function setFlatWarnings(Collection $flatWarnings): void
{
$this->flatWarnings = $flatWarnings;
}
/**
* @return User
*/
#[Ignore]
public function getFlatUser(): User
{
return $this->user;
}
/**
* @param User $user
*/
#[Ignore]
public function setFlatUser(User $user): void
{
$this->user = $user;
}
/**
* @return DateTime
*/
public function getArchivedAt(): DateTime
{
return $this->archivedAt;
}
/**
* @param DateTime $archivedAt
*/
public function setArchivedAt(DateTime $archivedAt): void
{
$this->archivedAt = $archivedAt;
}
public function __toString()
{
return (string) $this->getDisplayFlatId();
}
/**
* @return Collection<int, PollOption>
*/
#[Ignore]
public function getvotedOptions(): Collection
{
return $this->votedOptions;
}
/**
* @param Collection<int, PollOption> $votedOptions
*/
#[Ignore]
public function setvotedOptions(Collection $votedOptions): void
{
$this->votedOptions = $votedOptions;
}
/**
* @return bool
*/
public function getEInvoice(): bool
{
return $this->eInvoice;
}
/**
* @param bool $eInvoice
*/
public function setEInvoice(bool $eInvoice): void
{
$this->eInvoice = $eInvoice;
}
/**
* @return string|null
*/
public function getJbkjs(): ?string
{
return $this->jbkjs;
}
/**
* @param string|null $jbkjs
*/
public function setJbkjs(?string $jbkjs): void
{
$this->jbkjs = $jbkjs;
}
/**
* @return Resident|null
*/
#[Ignore]
public function getResident(): ?Resident
{
return $this->resident;
}
/**
* @param Resident|null $resident
*/
#[Ignore]
public function setResident(?Resident $resident): void
{
$this->resident = $resident;
}
/**
* @return string|null
*/
public function getContractNumber(): ?string
{
return $this->contractNumber;
}
/**
* @param string|null $contractNumber
*/
public function setContractNumber(?string $contractNumber): void
{
$this->contractNumber = $contractNumber;
}
public function getOrderNumber(): ?string
{
return $this->orderNumber;
}
public function setOrderNumber(?string $orderNumber): void
{
$this->orderNumber = $orderNumber;
}
public function getObjectCode(): ?string
{
return $this->objectCode;
}
public function setObjectCode(?string $objectCode): void
{
$this->objectCode = $objectCode;
}
public function isPrintBill(): bool
{
return $this->printBill;
}
public function setPrintBill(bool $printBill): void
{
$this->printBill = $printBill;
}
public function getOwnerPhoneNumber(): ?string
{
return $this->ownerPhoneNumber;
}
public function setOwnerPhoneNumber(?string $ownerPhoneNumber): void
{
$this->ownerPhoneNumber = $ownerPhoneNumber;
}
public function getOldDebitDate(): ?DateTime
{
return $this->oldDebitDate;
}
public function setOldDebitDate(?DateTime $oldDebitDate): void
{
$this->oldDebitDate = $oldDebitDate;
}
}