<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use JsonSerializable;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* Class FacilityDetails
*
* @package App\Entity
* @ORM\Entity
* @ORM\Table(name="facility_details")
*/
class FacilityDetails implements JsonSerializable
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/* base information */
/* service information */
// todo: determine if this number ever changes to see if it needs to be a one to many relationship
/**
* @ORM\Column(type="string", length=128, nullable=true)
*/
private $serviceContractId; // ID generated by the service team, relates to service tickets
/**
* @ORM\Column(type="string", length=128, nullable=true)
*/
private $serviceSiteNumber; // ID generated by the service team, relates to service tickets
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $remoteAccessMethod; // if teamviewer then the previous property is true
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="facilityDetailsServiceAccountManager")
* @ORM\JoinTable(name="service_account_managers_facility_details")
*/
protected $serviceAccountManagerUser;
// todo: should this be a verification item?
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $isRemoteAccessAvailable = false;
/**
* @ORM\Column(type="string", length=200, nullable=true)
*/
private $areRemoteVisitsAllowed;
/**
* @ORM\Column(type="string", length=200, nullable=true)
*/
private $areSiteVisitsAllowed;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="facilityDetailsServiceCustomerManager")
* @ORM\JoinTable(name="service_customer_managers_facility_details")
*/
protected $serviceCustomerManagerUser;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $serviceNotes; // text
// remote access
// todo: should this be a verification item?
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $hasTeamviewerAccess; // bool
/**
* @ORM\Column(type="text", nullable=true)
*/
private $remoteAccessNotes; // text
/**
* @ORM\Column(type="string", length=128, nullable=true)
*/
private $remoteAccessAdministrator; // string - tec systems || customer
// tec IT
/**
* @ORM\Column(type="string", length=32, nullable=true)
*/
private $itType; // server || workstation
/**
* @ORM\Column(type="string", length=32, nullable=true)
*/
private $serverSoftware; // symmetre || ebi
/**
* @ORM\Column(type="string", length=32, nullable=true)
*/
private $symmetreEbiVersion; // string
/**
* @ORM\Column(type="string", length=128, nullable=true)
*/
private $symmetreEbiSystemNumber; // string
/**
* @ORM\Column(type="string", length=128, nullable=true)
*/
private $symmetreEbiRevision; // string
/**
* @ORM\Column(type="string", length=3, nullable=true)
*/
private $numberOfLicenses; // string
/**
* @ORM\Column(type="text", nullable=true)
*/
private $itNotes; // text
// graphics
// todo: should this be a verification item?
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $isFileReplicationConfigured = false; // bool
// todo: should this be a verification item?
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $isGitLoadedToMaster = false; // bool
/**
* @ORM\Column(type="text", nullable=true)
*/
private $graphicsNotes; // text
// general
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $dateAdded;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $dateModified;
/* ~~~~~~~~~~~~~~~~ OneToOne ~~~~~~~~~~~~~~~~ */
/**
* @ORM\OneToOne(targetEntity="App\Entity\Facility", mappedBy="facilityDetails")
*/
private $facility;
/* ~~~~~~~~~~~~~~~~ OneToMany ~~~~~~~~~~~~~~~~ */
/**
* @ORM\OneToMany(targetEntity="App\Entity\NetworkInstallation", mappedBy="facilityDetails", cascade={"persist"}, fetch="EXTRA_LAZY")
*/
private $networkInstallations;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Project", mappedBy="facilityDetails", cascade={"persist"}, fetch="EXTRA_LAZY")
*/
private $projects;
// todo: figure out how to store these users. Should they be in the users table with a flag for no access?
private $engineers;
/**
* @ORM\OneToMany(targetEntity="App\Entity\FacilityWorkstation", mappedBy="facilityDetails", cascade={"persist"}, fetch="EXTRA_LAZY")
*/
private $facilityWorkstations; // links to a FacilityWorkstation entity
/**
* @ORM\OneToMany(targetEntity="App\Entity\VerificationItem", mappedBy="facilityDetails", cascade={"persist"}, fetch="EXTRA_LAZY")
*/
private $verificationItems; // links to a VerificationItem entity (backup, script library, dropbox match, git loaded, etc.)
/* ~~~~~~~~~~~~~~~~ ManyToOne ~~~~~~~~~~~~~~~~ */
/* ~~~~~~~~~~~~~~~~ ManyToMany ~~~~~~~~~~~~~~~~ */
/**
* @ORM\ManyToMany(targetEntity="App\Entity\User", mappedBy="customerFacilityDetails", cascade={"persist"}, fetch="EXTRA_LAZY")
* @ORM\OrderBy({"name" = "ASC"})
*/
private $customerContacts;
public function __construct()
{
$this->dateAdded = new \DateTime();
$this->setDateModified();
$this->networkInstallaions = new ArrayCollection();
$this->projects = new ArrayCollection();
$this->engineers = new ArrayCollection();
$this->customerContacts = new ArrayCollection();
$this->facilityWorkstations = new ArrayCollection();
$this->verificationItems = new ArrayCollection();
}
public function __toString()
{
return (string) $this->baseProject->getName();
}
public function jsonSerialize()
{
return array(
'id'=> $this->id,
'serviceContractId' => $this->serviceContractId,
'hasTeamviewerAccess' => $this->hasTeamviewerAccess,
'remoteAccessMethod' => $this->remoteAccessMethod,
'remoteAccessAdministrator' => $this->remoteAccessAdministrator,
'itType' => $this->itType,
'symmetreEbiVersion' => $this->symmetreEbiVersion,
'symmetreEbiSystemNumber' => $this->symmetreEbiSystemNumber,
'symmetreEbiRevision' => $this->symmetreEbiRevision,
'itNotes' => $this->itNotes,
'graphicsNotes' => $this->graphicsNotes,
'serviceNotes' => $this->serviceNotes,
'remoteAccessNotes' => $this->remoteAccessNotes,
);
}
/**
* get id
*
* @return integer
*/
public function getId(): ?int
{
return $this->id;
}
/**
* set id
*
* @param integer $id
* @return FacilityDetails
*/
public function setId($id): FacilityDetails
{
$this->id = $id;
return $this;
}
/**
* @return string
*/
public function getServiceContractId(): ?string
{
return $this->serviceContractId;
}
/**
* @param mixed $serviceContractId
* @return FacilityDetails
*/
public function setServiceContractId($serviceContractId = null): FacilityDetails
{
$this->serviceContractId = $serviceContractId;
return $this;
}
/**
* @return string
*/
public function getServiceSiteNumber(): ?string
{
return $this->serviceSiteNumber;
}
/**
* @param mixed $serviceSiteNumber
* @return FacilityDetails
*/
public function setServiceSiteNumber($serviceSiteNumber = null): FacilityDetails
{
$this->serviceSiteNumber = $serviceSiteNumber;
return $this;
}
/**
* @return boolean
*/
public function getHasTeamviewerAccess(): ?bool
{
return $this->hasTeamviewerAccess;
}
/**
* @param boolean $hasTeamviewerAccess
* @return FacilityDetails
*/
public function setHasTeamviewerAccess(bool $hasTeamviewerAccess = null): FacilityDetails
{
$this->hasTeamviewerAccess = $hasTeamviewerAccess;
return $this;
}
/**
* @return string
*/
public function getRemoteAccessMethod(): ?string
{
return $this->remoteAccessMethod;
}
/**
* @param string $remoteAccessMethod
* @return FacilityDetails
*/
public function setRemoteAccessMethod(string $remoteAccessMethod = null): FacilityDetails
{
$this->remoteAccessMethod = $remoteAccessMethod;
return $this;
}
/**
* @return boolean
*/
public function getIsRemoteAccessAvailable(): ?bool
{
return $this->isRemoteAccessAvailable;
}
/**
* @param boolean $isRemoteAccessAvailable
* @return FacilityDetails
*/
public function setIsRemoteAccessAvailable(bool $isRemoteAccessAvailable = null): FacilityDetails
{
$this->isRemoteAccessAvailable = $isRemoteAccessAvailable;
return $this;
}
/**
* @return string
*/
public function getAreRemoteVisitsAllowed(): ?string
{
return $this->areRemoteVisitsAllowed;
}
/**
* @param string $areRemoteVisitsAllowed
* @return FacilityDetails
*/
public function setAreRemoteVisitsAllowed(string $areRemoteVisitsAllowed = null): FacilityDetails
{
$this->areRemoteVisitsAllowed = $areRemoteVisitsAllowed;
return $this;
}
/**
* @return string
*/
public function getAreSiteVisitsAllowed(): ?string
{
return $this->areSiteVisitsAllowed;
}
/**
* @param string $areSiteVisitsAllowed
* @return FacilityDetails
*/
public function setAreSiteVisitsAllowed(string $areSiteVisitsAllowed = null): FacilityDetails
{
$this->areSiteVisitsAllowed = $areSiteVisitsAllowed;
return $this;
}
/**
* @return string
*/
public function getServiceNotes(): ?string
{
return $this->serviceNotes;
}
/**
* @param string|null $serviceNotes
* @return FacilityDetails
*/
public function setServiceNotes(string $serviceNotes = null): FacilityDetails
{
$this->serviceNotes = $serviceNotes;
return $this;
}
/**
* @return mixed
*/
public function getRemoteAccessAdministrator()
{
return $this->remoteAccessAdministrator;
}
/**
* @param string $remoteAccessAdministrator
* @return FacilityDetails
*/
public function setRemoteAccessAdministrator(string $remoteAccessAdministrator = null): FacilityDetails
{
$this->remoteAccessAdministrator = $remoteAccessAdministrator;
return $this;
}
/**
* @return string
*/
public function getRemoteAccessNotes(): ?string
{
return $this->remoteAccessNotes;
}
/**
* @param string|null $remoteAccessNotes
* @return FacilityDetails
*/
public function setRemoteAccessNotes(string $remoteAccessNotes = null): FacilityDetails
{
$this->remoteAccessNotes = $remoteAccessNotes;
return $this;
}
/**
* @return string
*/
public function getItType(): ?string
{
return $this->itType;
}
/**
* @param string|null $itType
* @return FacilityDetails
*/
public function setItType(string $itType = null): FacilityDetails
{
$this->itType = $itType;
return $this;
}
/**
* @return string
*/
public function getServerSoftware(): ?string
{
return $this->serverSoftware;
}
/**
* @param string|null $serverSoftware
* @return FacilityDetails
*/
public function setServerSoftware(string $serverSoftware = null): FacilityDetails
{
$this->serverSoftware = $serverSoftware;
return $this;
}
/**
* @return string
*/
public function getSymmetreEbiVersion(): ?string
{
return $this->symmetreEbiVersion;
}
/**
* @param string $symmetreEbiVersion
* @return FacilityDetails
*/
public function setSymmetreEbiVersion(string $symmetreEbiVersion = null): FacilityDetails
{
$this->symmetreEbiVersion = $symmetreEbiVersion;
return $this;
}
/**
* @return string
*/
public function getSymmetreEbiSystemNumber(): ?string
{
return $this->symmetreEbiSystemNumber;
}
/**
* @param string $symmetreEbiSystemNumber
* @return FacilityDetails
*/
public function setSymmetreEbiSystemNumber(string $symmetreEbiSystemNumber = null): FacilityDetails
{
$this->symmetreEbiSystemNumber = $symmetreEbiSystemNumber;
return $this;
}
/**
* @return string
*/
public function getSymmetreEbiRevision(): ?string
{
return $this->symmetreEbiRevision;
}
/**
* @param string $symmetreEbiRevision
* @return FacilityDetails
*/
public function setSymmetreEbiRevision(string $symmetreEbiRevision = null): FacilityDetails
{
$this->symmetreEbiRevision = $symmetreEbiRevision;
return $this;
}
/**
* @return string
*/
public function getNumberOfLicenses(): ?string
{
return $this->numberOfLicenses;
}
/**
* @param string $numberOfLicenses
* @return FacilityDetails
*/
public function setNumberOfLicenses(string $numberOfLicenses = null): FacilityDetails
{
$this->numberOfLicenses = $numberOfLicenses;
return $this;
}
/**
* @return string
*/
public function getItNotes(): ?string
{
return $this->itNotes;
}
/**
* @param string|null $itNotes
* @return FacilityDetails
*/
public function setItNotes(string $itNotes = null): FacilityDetails
{
$this->itNotes = $itNotes;
return $this;
}
/**
* @return string
*/
public function getGraphicsNotes(): ?string
{
return $this->graphicsNotes;
}
/**
* @param string|null $graphicsNotes
* @return FacilityDetails
*/
public function setGraphicsNotes(string $graphicsNotes = null): FacilityDetails
{
$this->graphicsNotes = $graphicsNotes;
return $this;
}
/**
* @return boolean
*/
public function getIsFileReplicationConfigured(): ?bool
{
return $this->isFileReplicationConfigured;
}
/**
* @param boolean $isFileReplicationConfigured
* @return FacilityDetails
*/
public function setIsFileReplicationConfigured(bool $isFileReplicationConfigured = null): FacilityDetails
{
$this->isFileReplicationConfigured = $isFileReplicationConfigured;
return $this;
}
/**
* @return boolean
*/
public function getIsGitLoadedToMaster(): ?bool
{
return $this->isGitLoadedToMaster;
}
/**
* @param boolean $isGitLoadedToMaster
* @return FacilityDetails
*/
public function setIsGitLoadedToMaster(bool $isGitLoadedToMaster = null): FacilityDetails
{
$this->isGitLoadedToMaster = $isGitLoadedToMaster;
return $this;
}
/**
* @return \DateTime
*/
public function getDateAdded(): ?\DateTime
{
return $this->dateAdded;
}
/**
* @param \DateTime $dateAdded
* @return FacilityDetails
*/
public function setDateAdded(\DateTime $dateAdded): FacilityDetails
{
$this->dateAdded = $dateAdded;
return $this;
}
/**
* @return \DateTime
*/
public function getDateModified(): ?\DateTime
{
return $this->dateModified;
}
/**
* @param mixed $dateModified
* @return FacilityDetails
*/
public function setDateModified(\DateTime $dateModified = null): FacilityDetails
{
if( is_null( $dateModified ) ){
$this->dateModified = new \DateTime("now");
} else {
$this->dateModified = $dateModified;
}
return $this;
}
/* one to one methods */
/**
* @return Facility
*/
public function getFacility(): ?Facility
{
return $this->facility;
}
/**
* @param Facility $facility
* @return FacilityDetails
*/
public function setFacility(Facility $facility): FacilityDetails
{
$this->facility = $facility;
if( $facility->getFacilityDetails() !== $this ) {
$facility->setFacilityDetails($this);
}
return $this;
}
/**
* @return Project
*/
// public function getBaseProject(): ?Project
// {
// return $this->baseProject;
// }
/**
* @param Project $baseProject
* @return FacilityDetails
*/
// public function setBaseProject(Project $baseProject): FacilityDetails
// {
// $this->baseProject = $baseProject;
// return $this;
// }
// todo: figure out how to handle engineers, are they users?
/**
* @return mixed
*/
// public function getChiefEngineer()
// {
// return $this->chiefEngineer;
// }
/**
* @param mixed $chiefEngineer
* @return FacilityDetails
*/
// public function setChiefEngineer($chiefEngineer): FacilityDetails
// {
// $this->chiefEngineer = $chiefEngineer;
// return $this;
// }
/**
* @return User
*/
// public function getTecSystemsAccountManager(): ?User
// {
// return $this->tecSystemsAccountManager;
// }
/**
* @param User $tecSystemsAccountManager
* @return FacilityDetails
*/
// public function setTecSystemsAccountManager(User $tecSystemsAccountManager): FacilityDetails
// {
// $this->tecSystemsAccountManager = $tecSystemsAccountManager;
// return $this;
// }
/**
* @return User
*/
// public function getTecSystemsConstructionProjectManager(): ?User
// {
// return $this->tecSystemsConstructionProjectManager;
// }
/**
* @param User $tecSystemsConstructionProjectManager
* @return FacilityDetails
*/
// public function setTecSystemsConstructionProjectManager(User $tecSystemsConstructionProjectManager): FacilityDetails
// {
// $this->tecSystemsConstructionProjectManager = $tecSystemsConstructionProjectManager;
// return $this;
// }
/**
* @return User
*/
// public function getRemoteAccessSetupUser(): ?User
// {
// return $this->remoteAccessSetupUser;
// }
/**
* @param User $remoteAccessSetupUser
* @return FacilityDetails
*/
// public function setRemoteAccessSetupUser(User $remoteAccessSetupUser): FacilityDetails
// {
// $this->remoteAccessSetupUser = $remoteAccessSetupUser;
// return $this;
// }
/**
* @return User
*/
// public function getTransferToOfficeNasUser(): ?User
// {
// return $this->transferToOfficeNasUser;
// }
/**
* @param User $transferToOfficeNasUser
* @return FacilityDetails
*/
// public function setTransferToOfficeNasUser(User $transferToOfficeNasUser): FacilityDetails
// {
// $this->transferToOfficeNasUser = $transferToOfficeNasUser;
// return $this;
// }
/* one to many methods */
/**
* @return mixed
*/
public function getNetworkInstallations()
{
return $this->networkInstallations;
}
/**
* @param NetworkInstallation $networkInstallation
* @return FacilityDetails
*/
public function addNetworkInstallation(NetworkInstallation $networkInstallation): FacilityDetails
{
if (!$this->networkInstallations->contains($networkInstallation)) {
$this->networkInstallations[] = $networkInstallation;
$networkInstallation->setFacilityDetails($this);
}
return $this;
}
/**
* @param NetworkInstallation $networkInstallation
* @return FacilityDetails
*/
public function removeNetworkInstallation(NetworkInstallation $networkInstallation): FacilityDetails
{
if ($this->networkInstallations->contains($networkInstallation)) {
$this->networkInstallations->removeElement($networkInstallation);
// set the owning side to null (unless already changed)
if ($networkInstallation->getFacilityDetails() === $this) {
$networkInstallation->setFacilityDetails(null);
}
}
return $this;
}
/**
* @return mixed
*/
public function getProjects()
{
return $this->projects;
}
/**
* @param Project $project
* @return FacilityDetails
*/
public function addProject(Project $project): FacilityDetails
{
if (!$this->projects->contains($project)) {
$this->projects[] = $project;
$project->setFacilityDetails($this);
}
return $this;
}
/**
* @param Project $project
* @return FacilityDetails
*/
public function removeProject(Project $project): FacilityDetails
{
if ($this->projects->contains($project)) {
$this->projects->removeElement($project);
// set the owning side to null (unless already changed)
if ($project->getFacilityDetails() === $this) {
$project->setFacilityDetails(null);
}
}
return $this;
}
/**
* @return mixed
*/
public function getFacilityWorkstations()
{
return $this->facilityWorkstations;
}
/**
* @param FacilityWorkstation $facilityWorkstation
* @return FacilityDetails
*/
public function addFacilityWorkstation(FacilityWorkstation $facilityWorkstation): FacilityDetails
{
if (!$this->facilityWorkstations->contains($facilityWorkstation)) {
$this->facilityWorkstations[] = $facilityWorkstation;
$facilityWorkstation->setFacilityDetails($this);
}
return $this;
}
/**
* @param FacilityWorkstation $facilityWorkstation
* @return FacilityDetails
*/
public function removeFacilityWorkstation(FacilityWorkstation $facilityWorkstation): FacilityDetails
{
if ($this->facilityWorkstations->contains($facilityWorkstation)) {
$this->facilityWorkstations->removeElement($facilityWorkstation);
// set the owning side to null (unless already changed)
if ($facilityWorkstation->getFacilityDetails() === $this) {
$facilityWorkstation->setFacilityDetails(null);
}
}
return $this;
}
/**
* @return mixed
*/
public function getVerificationItems()
{
return $this->verificationItems;
}
/**
* @param VerificationItem $verificationItem
* @return FacilityDetails
*/
public function addVerificationItem(VerificationItem $verificationItem): FacilityDetails
{
if (!$this->verificationItems->contains($verificationItem)) {
$this->verificationItems[] = $verificationItem;
$verificationItem->setFacilityDetails($this);
}
return $this;
}
/**
* @param VerificationItem $verificationItem
* @return FacilityDetails
*/
public function removeVerificationItem(VerificationItem $verificationItem): FacilityDetails
{
if ($this->verificationItems->contains($verificationItem)) {
$this->verificationItems->removeElement($verificationItem);
// set the owning side to null (unless already changed)
if ($verificationItem->getFacilityDetails() === $this) {
$verificationItem->setFacilityDetails(null);
}
}
return $this;
}
/* many to many methods */
/**
* Get customerContacts
*
* @return mixed
*/
public function getCustomerContacts()
{
return $this->customerContacts;
}
/**
* Add customerContact
*
* @param \App\Entity\User $customerContact
*
* @return User
*/
public function addCustomerContact(\App\Entity\User $customerContact)
{
if (!$this->customerContacts->contains($customerContact)) {
$this->customerContacts[] = $customerContact;
$customerContact->addCustomerFacilityDetail($this);
}
return $this;
}
/**
* Remove customerContact
*
* @param \App\Entity\User $customerContact
* @return User
*/
public function removeCustomerContact(\App\Entity\User $customerContact)
{
if ($this->customerContacts->contains($customerContact)) {
$this->customerContacts->removeElement($customerContact);
// set the owning side to null (unless already changed)
if ($customerContact->getCustomerFacilityDetails()->contains( $this )) {
$customerContact->removeCustomerFacilityDetail($this);
}
}
return $this;
}
/* many to one methods */
/**
* Set serviceAccountManagerUser
*
* @param User|null $serviceAccountManagerUser
* @return FacilityDetails
*/
public function setServiceAccountManagerUser(\App\Entity\User $serviceAccountManagerUser = null): FacilityDetails
{
$this->serviceAccountManagerUser = $serviceAccountManagerUser;
return $this;
}
/**
* Get serviceAccountManagerUser
*
* @return User
*/
public function getServiceAccountManagerUser()
{
return $this->serviceAccountManagerUser;
}
/**
* Set serviceCustomerManagerUser
*
* @param User|null $serviceCustomerManagerUser
* @return FacilityDetails
*/
public function setServiceCustomerManagerUser(\App\Entity\User $serviceCustomerManagerUser = null): FacilityDetails
{
$this->serviceCustomerManagerUser = $serviceCustomerManagerUser;
return $this;
}
/**
* Get serviceCustomerManagerUser
*
* @return User
*/
public function getServiceCustomerManagerUser()
{
return $this->serviceCustomerManagerUser;
}
/* custom methods */
}