<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Annotation\ApiSubresource;
use App\Controller\Referral\DeleteReferral;
use App\Controller\Referral\SubmitReferral;
use App\Controller\Referral\CopyReferral;
use App\Controller\ReferralDocument\UploadReferralDocument;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints\Type;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @ApiResource(iri = "http://schema.org/Thing", collectionOperations = {
"get" = {
"access_control" = "is_granted('ROLE_USER')",
"method" = "GET",
"normalization_context" = {
"groups" = {
"output"
}
},
"denormalization_context" = {
"groups" = {
"input"
}
}
},
"post" = {
"access_control" = "is_granted('ROLE_USER')",
"method" = "POST",
"normalization_context" = {
"groups" = {
"output"
}
},
"denormalization_context" = {
"groups" = {
"input"
}
}
},
"generate_report"={
"access_control"="is_granted('ROLE_USER')",
"method"="POST",
"path"="/referrals/generate-report",
"controller"="App\Controller\Referral\ReferralReportController::generateReport",
"denormalization_context"={"groups"={"generate_report"}},
"normalization_context"={"groups"={"output"}},
}
}, itemOperations = {
"delete" = {
"access_control" = "is_granted('IS_OWNER', object) or is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')",
"controller" = DeleteReferral::class,
"normalization_context" = {
"groups" = {
"output"
}
},
"denormalization_context" = {
"groups" = {
"input"
}
}
},
"get" = {
"access_control" = "is_granted('IS_OWNER', object) or is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')",
"method" = "GET",
"normalization_context" = {
"groups" = {
"output"
}
},
"denormalization_context" = {
"groups" = {
"input"
}
}
},
"put" = {
"access_control" = "is_granted('IS_OWNER', object) or is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')",
"method" = "PUT",
"normalization_context" = {
"groups" = {
"output"
}
},
"denormalization_context" = {
"groups" = {
"input"
}
}
},
"submit_referral" = {
"access_control" = "is_granted('IS_OWNER', object) or is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')",
"method" = "POST",
"path" = "/referrals/{id}/submit",
"controller" = SubmitReferral::class,
"normalization_context" = {
"groups" = {
"output"
}
},
"denormalization_context" = {
"groups" = {
"input"
}
}
},
"copy_referral" = {
"access_control" = "is_granted('IS_OWNER', object) or is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')",
"method" = "POST",
"path" = "/referrals/{id}/copy",
"controller" = CopyReferral::class,
"normalization_context" = {
"groups" = {
"output"
}
},
"denormalization_context" = {
"groups" = {
"input"
}
}
},
"post_referral_document" = {
"access_control" = "is_granted('IS_OWNER', object)",
"method" = "POST",
"path" = "/referrals/{id}/referral_documents",
"controller" = UploadReferralDocument::class,
"deserialize" = false,
"normalization_context" = {
"groups" = {
"output"
}
},
"denormalization_context" = {
"groups" = {
"input"
}
},
"openapi_context" = {
"requestBody" = {
"content" = {
"multipart/form-data" = {
"schema" = {
"type" = "object",
"properties" = {
"file" = {
"type" = "string",
"format" = "binary",
}
}
}
}
}
}
}
}
}, attributes = {
"filters" = {
"referral.search_filter",
"referral.order_filter",
"referral.date_filter",
"referral.not_equals_filter",
"referral.childName_filter",
"referral.referrerName_filter",
"referral.createdByName_filter",
"referral.null_filter"
},
"normalization_context" = {
"groups" = {
""
}
},
"denormalization_context" = {
"groups" = {
""
}
},
"pagination_items_per_page" = 10,
"pagination_client_items_per_page" = true
})*
* @see http://schema.org/Thing Documentation on Schema.org
*/
class Referral extends AbstractTimestamp
{
const STATUS_DRAFT = 'Draft';
const STATUS_SUBMITTED = 'Submitted';
const STATUS_RECEIVED = 'Received';
const STATUS_PROCESSED = 'Processed';
const STATUS_ELIGIBLE = 'Eligible';
const STATUS_NOT_ELIGIBLE = 'Not Eligible';
const STATUS_REJECTED = 'Rejected';
const STATUS_UNABLE_TO_CONTACT = 'Unable to Contact';
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
* @Groups({"output"})
*
* @var int|null
*/
protected $id;
/**
* @ORM\Column(type="boolean", nullable=true)
*
* @var bool|null
*/
protected $disabled;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"output", "input"})
*
* @var bool|null
*/
protected $familyApproval;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"output", "input"})
*
* @var bool|null
*/
protected $hasBeenCopied;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"output", "input"})
*
* @var bool|null
*/
protected $isCAPTA;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"output", "input"})
*
* @var bool|null
*/
protected $isAudiologistScreening;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"output", "input"})
*
* @var bool|null
*/
protected $isHospitalBirth;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"output", "input"})
*
* @var bool|null
*/
protected $isHispanicChild;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({"output", "input"})
*
* @var int|null
*/
protected $childParentConsent;
/**
* @ORM\Column(type="string", length=100, nullable=true)
* @Groups({"output", "input"})
*
* @var string|null
*/
protected $submissionId;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Groups({"output", "input"})
*
* @var \DateTimeInterface|null
*
* @Assert\Type("\DateTimeInterface")
*/
protected $submissionDate;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Groups({"output"})
*
* @var \DateTimeInterface|null
*
* @Assert\Type("\DateTimeInterface")
*/
protected $statusUpdatedAt;
/**
* @ORM\Column(type="string", length=100, nullable=false)
* @Groups({"output", "input"})
*
* @var string|null
*/
protected $status;
/**
* @ORM\Column(type="string", length=2000, nullable=true)
* @Groups({"output", "input"})
*
* @var string|null
*/
protected $additionalDetails;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({"output"})
*
* @var string|null
*/
protected $comments;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({"output"})
*
* @var string|null
*/
protected $serviceCoordinator;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({"output"})
*
* @var string|null
*/
protected $serviceCoordinatorEs;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({"output"})
*
* @var string|null
*/
protected $eligibilityDetermination;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({"output"})
*
* @var string|null
*/
protected $eligibilityDeterminationEs;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({"output"})
*
* @var string|null
*/
protected $statusDetails;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({"output"})
*
* @var string|null
*/
protected $statusDetailsEs;
/**
* @ORM\Column(type="string", length=100, nullable=true)
* @Groups({"output", "input"})
*
* @var string|null
*/
protected $referrerFirstName;
/**
* @ORM\Column(type="string", length=100, nullable=true)
* @Groups({"output", "input"})
*
* @var string|null
*/
protected $referrerMiddleName;
/**
* @ORM\Column(type="string", length=100, nullable=true)
* @Groups({"output", "input"})
*
* @var string|null
*/
protected $referrerLastName;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({"output", "input"})
*
* @var int|null
*/
protected $gestationalAgeInDays;
/**
* @ORM\Column(type="string", length=100, nullable=true)
* @Groups({"output", "input"})
*
* @var string|null
*/
protected $familyNeedsInterpreter;
/**
* @ORM\Column(type="string", length=100, nullable=true)
* @Groups({"output", "input"})
*
* @var string|null
*/
protected $childInFosterCare;
/**
* @ORM\Column(type="string", length=1000, nullable=true)
* @Groups({"output", "input"})
*
* @var string|null
*/
protected $referralSourceOther;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Groups({"output", "input"})
*
* @var \DateTimeInterface|null
*
* @Assert\Type("\DateTimeInterface")
*/
protected $failedScreeningDate;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"output", "input"})
*
* @var string|null
*/
protected $otherMedicalCondition;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Lookup")
* @ORM\JoinColumn(referencedColumnName="id")
* @Groups({"output", "input"})
*
* @var Lookup|null
*/
protected $referrerRelationship;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Lookup")
* @ORM\JoinColumn(referencedColumnName="id")
* @Groups({"output", "input"})
*
* @var Lookup|null
*/
protected $referrerPrefix;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Lookup")
* @ORM\JoinColumn(referencedColumnName="id")
* @Groups({"output", "input"})
*
* @var Lookup|null
*/
protected $referrerSuffix;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Lookup")
* @ORM\JoinColumn(referencedColumnName="id")
* @Groups({"output", "input"})
*
* @var Lookup|null
*/
protected $gender;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Lookup")
* @ORM\JoinColumn(referencedColumnName="id")
* @Groups({"output", "input"})
*
* @var Lookup|null
*/
protected $primaryLanguage;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Lookup")
* @ORM\JoinColumn(referencedColumnName="id")
* @Groups({"output", "input"})
*
* @var Lookup|null
*/
protected $familyPrimaryLanguage;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Address")
* @ORM\JoinColumn(referencedColumnName="id")
* @Groups({"output", "input"})
*
* @var Address|null
*/
protected $address;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Child", inversedBy="referrals")
* @Groups({"output", "input"})
* @ORM\JoinColumn(referencedColumnName="id")
* @var Child|null
*/
protected $child;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Adult", mappedBy="referral")
* @ORM\JoinColumn(referencedColumnName="id")
* @Groups({"output"})
*
* @var Collection<Adult>
*
* @Assert\NotNull
*/
protected $adults;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
* @Groups({"output"})
*
* @var User|null
*/
protected $createdBy;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\PhoneNumber")
* @ORM\JoinColumn(referencedColumnName="id")
* @Groups({"output", "input"})
*
* @var PhoneNumber|null
*/
protected $referrerPhoneNumber;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ReferralDocument", mappedBy="referral")
* @ORM\JoinColumn(referencedColumnName="id")
* @ApiSubresource
* @Groups({"output"})
*
* @var Collection<ReferralDocument>
*
* @Assert\NotNull
*/
protected $referralDocuments;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Lookup")
* @ORM\JoinTable(name="referral_lookup",
* joinColumns={@ORM\JoinColumn(name="referral_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="lookup_id", referencedColumnName="id")}
* )
* @Groups({"input", "output"})
*
* @var Collection<Lookup>|null
*/
protected $referralReasons;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Lookup")
* @ORM\JoinTable(name="referral_race",
* joinColumns={@ORM\JoinColumn(name="referral_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="lookup_id", referencedColumnName="id")}
* )
* @Groups({"input", "output"})
*
* @var Collection<Lookup>|null
*/
protected $races;
/**
* @ORM\OneToMany(targetEntity="App\Entity\AuthenticationToken", mappedBy="referral")
* @ORM\JoinColumn(referencedColumnName="id")
*
* @var Collection<AuthenticationToken>
*
* @Assert\NotNull
*/
protected $authenticationTokens;
public function __construct()
{
$this->adults = new ArrayCollection();
$this->referralDocuments = new ArrayCollection();
$this->referralReasons = new ArrayCollection();
$this->races = new ArrayCollection();
$this->authenticationTokens = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function setDisabled(?bool $disabled): self
{
$this->disabled = $disabled;
return $this;
}
public function getDisabled(): ?bool
{
return $this->disabled;
}
public function setFamilyApproval(?bool $familyApproval): self
{
$this->familyApproval = $familyApproval;
return $this;
}
public function getFamilyApproval(): ?bool
{
return $this->familyApproval;
}
public function setIsCAPTA(?bool $isCAPTA): self
{
$this->isCAPTA = $isCAPTA;
return $this;
}
public function getIsCAPTA(): ?bool
{
return $this->isCAPTA;
}
public function setIsAudiologistScreening(?bool $isAudiologistScreening): self
{
$this->isAudiologistScreening = $isAudiologistScreening;
return $this;
}
public function getIsAudiologistScreening(): ?bool
{
return $this->isAudiologistScreening;
}
public function setIsHospitalBirth(?bool $isHospitalBirth): self
{
$this->isHospitalBirth = $isHospitalBirth;
return $this;
}
public function getIsHospitalBirth(): ?bool
{
return $this->isHospitalBirth;
}
public function sethasBeenCopied(?bool $hasBeenCopied): self
{
$this->hasBeenCopied = $hasBeenCopied;
return $this;
}
public function gethasBeenCopied(): ?bool
{
return $this->hasBeenCopied;
}
public function setIsHispanicChild(?bool $isHispanicChild): self
{
$this->isHispanicChild = $isHispanicChild;
return $this;
}
public function getIsHispanicChild(): ?bool
{
return $this->isHispanicChild;
}
public function setChildParentConsent(?int $childParentConsent): self
{
$this->childParentConsent = $childParentConsent;
return $this;
}
public function getChildParentConsent(): ?int
{
return $this->childParentConsent;
}
public function setSubmissionId(?string $submissionId): self
{
$this->submissionId = $submissionId;
return $this;
}
public function getSubmissionId(): ?string
{
return $this->submissionId;
}
public function setSubmissionDate(?\DateTimeInterface $submissionDate): self
{
$this->submissionDate = $submissionDate;
return $this;
}
public function getSubmissionDate(): ?\DateTimeInterface
{
return $this->submissionDate;
}
public function setStatusUpdatedAt(?\DateTimeInterface $statusUpdatedAt): self
{
$this->statusUpdatedAt = $statusUpdatedAt;
return $this;
}
public function getStatusUpdatedAt(): ?\DateTimeInterface
{
return $this->statusUpdatedAt;
}
public function setStatus(?string $status): self
{
$this->status = $status;
return $this;
}
public function getStatus(): ?string
{
return $this->status;
}
public function setAdditionalDetails(?string $additionalDetails): self
{
$this->additionalDetails = $additionalDetails;
return $this;
}
public function getAdditionalDetails(): ?string
{
return $this->additionalDetails;
}
public function setComments(?string $comments): self
{
$this->comments = $comments;
return $this;
}
public function getComments(): ?string
{
return $this->comments;
}
public function setServiceCoordinator(?string $serviceCoordinator): self
{
$this->serviceCoordinator = $serviceCoordinator;
return $this;
}
public function getServiceCoordinator(): ?string
{
return $this->serviceCoordinator;
}
public function setServiceCoordinatorEs(?string $serviceCoordinatorEs): self
{
$this->serviceCoordinatorEs = $serviceCoordinatorEs;
return $this;
}
public function getServiceCoordinatorEs(): ?string
{
return $this->serviceCoordinatorEs;
}
public function setEligibilityDetermination(?string $eligibilityDetermination): self
{
$this->eligibilityDetermination = $eligibilityDetermination;
return $this;
}
public function getEligibilityDetermination(): ?string
{
return $this->eligibilityDetermination;
}
public function setEligibilityDeterminationEs(?string $eligibilityDeterminationEs): self
{
$this->eligibilityDeterminationEs = $eligibilityDeterminationEs;
return $this;
}
public function getEligibilityDeterminationEs(): ?string
{
return $this->eligibilityDeterminationEs;
}
public function setStatusDetails(?string $statusDetails): self
{
$this->statusDetails = $statusDetails;
return $this;
}
public function getStatusDetails(): ?string
{
return $this->statusDetails;
}
public function setStatusDetailsEs(?string $statusDetailsEs): self
{
$this->statusDetailsEs = $statusDetailsEs;
return $this;
}
public function getStatusDetailsEs(): ?string
{
return $this->statusDetailsEs;
}
public function setReferrerFirstName(?string $referrerFirstName): self
{
$this->referrerFirstName = $referrerFirstName;
return $this;
}
public function getReferrerFirstName(): ?string
{
return $this->referrerFirstName;
}
public function setReferrerMiddleName(?string $referrerMiddleName): self
{
$this->referrerMiddleName = $referrerMiddleName;
return $this;
}
public function getReferrerMiddleName(): ?string
{
return $this->referrerMiddleName;
}
public function setReferrerLastName(?string $referrerLastName): self
{
$this->referrerLastName = $referrerLastName;
return $this;
}
public function getReferrerLastName(): ?string
{
return $this->referrerLastName;
}
public function setGestationalAgeInDays(?int $gestationalAgeInDays): self
{
$this->gestationalAgeInDays = $gestationalAgeInDays;
return $this;
}
public function getGestationalAgeInDays(): ?int
{
return $this->gestationalAgeInDays;
}
public function setFamilyNeedsInterpreter(?string $familyNeedsInterpreter): self
{
$this->familyNeedsInterpreter = $familyNeedsInterpreter;
return $this;
}
public function getFamilyNeedsInterpreter(): ?string
{
return $this->familyNeedsInterpreter;
}
public function setChildInFosterCare(?string $childInFosterCare): self
{
$this->childInFosterCare = $childInFosterCare;
return $this;
}
public function getChildInFosterCare(): ?string
{
return $this->childInFosterCare;
}
public function setReferralSourceOther(?string $referralSourceOther): self
{
$this->referralSourceOther = $referralSourceOther;
return $this;
}
public function getReferralSourceOther(): ?string
{
return $this->referralSourceOther;
}
public function setFailedScreeningDate(?\DateTimeInterface $failedScreeningDate): self
{
$this->failedScreeningDate = $failedScreeningDate;
return $this;
}
public function getFailedScreeningDate(): ?\DateTimeInterface
{
return $this->failedScreeningDate;
}
public function setOtherMedicalCondition(?string $otherMedicalCondition): self
{
$this->otherMedicalCondition = $otherMedicalCondition;
return $this;
}
public function getOtherMedicalCondition(): ?string
{
return $this->otherMedicalCondition;
}
public function setReferrerRelationship(?Lookup $referrerRelationship): self
{
$this->referrerRelationship = $referrerRelationship;
return $this;
}
public function getReferrerRelationship(): ?Lookup
{
return $this->referrerRelationship;
}
public function setReferrerPrefix(?Lookup $referrerPrefix): self
{
$this->referrerPrefix = $referrerPrefix;
return $this;
}
public function getReferrerPrefix(): ?Lookup
{
return $this->referrerPrefix;
}
public function setReferrerSuffix(?Lookup $referrerSuffix): self
{
$this->referrerSuffix = $referrerSuffix;
return $this;
}
public function getReferrerSuffix(): ?Lookup
{
return $this->referrerSuffix;
}
public function setGender(?Lookup $gender): self
{
$this->gender = $gender;
return $this;
}
public function getGender(): ?Lookup
{
return $this->gender;
}
public function setPrimaryLanguage(?Lookup $primaryLanguage): self
{
$this->primaryLanguage = $primaryLanguage;
return $this;
}
public function getPrimaryLanguage(): ?Lookup
{
return $this->primaryLanguage;
}
public function setFamilyPrimaryLanguage(?Lookup $familyPrimaryLanguage): self
{
$this->familyPrimaryLanguage = $familyPrimaryLanguage;
return $this;
}
public function getFamilyPrimaryLanguage(): ?Lookup
{
return $this->familyPrimaryLanguage;
}
public function setAddress(?Address $address): self
{
$this->address = $address;
return $this;
}
public function getAddress(): ?Address
{
return $this->address;
}
public function setChild(?Child $child): self
{
$this->child = $child;
return $this;
}
public function getChild(): ?Child
{
return $this->child;
}
public function addAdult(Adult $adult): self
{
$this->adults[] = $adult;
return $this;
}
public function removeAdult(Adult $adult): self
{
$this->adults->removeElement($adult);
return $this;
}
public function getAdults(): Collection
{
return $this->adults;
}
public function setReferrerPhoneNumber(?PhoneNumber $referrerPhoneNumber): self
{
$this->referrerPhoneNumber = $referrerPhoneNumber;
return $this;
}
public function getReferrerPhoneNumber(): ?PhoneNumber
{
return $this->referrerPhoneNumber;
}
public function addReferralDocument(ReferralDocument $referralDocument): self
{
$this->referralDocuments[] = $referralDocument;
return $this;
}
public function removeReferralDocument(ReferralDocument $referralDocument): self
{
$this->referralDocuments->removeElement($referralDocument);
return $this;
}
public function getReferralDocuments(): Collection
{
return $this->referralDocuments;
}
public function addReferralReason(Lookup $referralReason): self
{
$this->referralReasons[] = $referralReason;
return $this;
}
public function removeReferralReason(Lookup $referralReason): self
{
$this->referralReasons->removeElement($referralReason);
return $this;
}
public function getReferralReasons(): Collection
{
return $this->referralReasons;
}
public function addRace(Lookup $race): self
{
$this->races[] = $race;
return $this;
}
public function removeRace(Lookup $race): self
{
$this->races->removeElement($race);
return $this;
}
public function getRaces(): Collection
{
return $this->races;
}
public function addAuthenticationToken(AuthenticationToken $authenticationToken): self
{
$this->authenticationTokens[] = $authenticationToken;
return $this;
}
public function removeAuthenticationToken(AuthenticationToken $authenticationToken): self
{
$this->authenticationTokens->removeElement($authenticationToken);
return $this;
}
public function getAuthenticationTokens(): Collection
{
return $this->authenticationTokens;
}
}