<?php
namespace App\Entity;
use App\Repository\FilmProjectRepository;
use App\String\Constant;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\Exclude;
use JMS\Serializer\Annotation\MaxDepth;
#[ORM\Entity(repositoryClass: FilmProjectRepository::class)]
class FilmProject
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private $id;
#[MaxDepth(1)]
#[ORM\OneToMany(mappedBy: 'filmProject', targetEntity: FilmProjectMember::class, cascade: ['persist', 'remove'])]
private $filmProjectMembers;
#[MaxDepth(1)]
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private $title;
#[MaxDepth(1)]
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private $productionStage;
#[MaxDepth(1)]
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private $productionType;
#[MaxDepth(1)]
#[ORM\OneToOne(mappedBy: 'filmProject', targetEntity: FilmProjectDetails::class, cascade: ['persist', 'remove'])]
private $filmProjectDetails;
#[MaxDepth(1)]
#[ORM\OneToOne(mappedBy: 'filmProject', targetEntity: FilmProjectStoryImpact::class, cascade: ['persist', 'remove'])]
private $filmProjectStoryImpact;
#[MaxDepth(1)]
#[ORM\OneToOne(mappedBy: 'filmProject', targetEntity: FilmProjectTimeline::class, cascade: ['persist', 'remove'])]
private $filmProjectTimeline;
#[MaxDepth(1)]
#[ORM\OneToOne(mappedBy: 'filmProject', targetEntity: FilmProjectFunding::class, cascade: ['persist', 'remove'])]
private $filmProjectFunding;
#[MaxDepth(1)]
#[ORM\Column(type: 'string', length: 255)]
private $status;
#[MaxDepth(1)]
#[Exclude()]
#[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'filmProjects')]
private $owner;
#[MaxDepth(1)]
#[Exclude()]
#[ORM\OneToOne(targetEntity: OrderDetails::class, cascade: ['persist', 'remove'])]
private $orderDetails;
#[MaxDepth(1)]
#[ORM\OneToOne(targetEntity: FilmProjectMember::class, cascade: ['persist', 'remove'] )]
private $filmProjectAdmin;
#[MaxDepth(1)]
#[ORM\OneToOne(targetEntity: FilmProjectMember::class, cascade: ['persist', 'remove'])]
private $filmProjectProducer;
#[MaxDepth(1)]
#[ORM\OneToOne(targetEntity: FilmProjectMember::class, cascade: ['persist', 'remove'])]
private $filmProjectDirector;
#[MaxDepth(1)]
#[ORM\Column(type: 'integer', nullable: true)]
private $wordpressId;
#[MaxDepth(1)]
#[ORM\Column(length: 255, nullable: true)]
private ?string $wordpressStatus = null;
#[MaxDepth(1)]
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private $salesforceId;
#[MaxDepth(1)]
#[ORM\Column(type: 'text', nullable: true)]
private $note;
#[MaxDepth(1)]
#[ORM\Column(type: 'integer', nullable: true)]
private $resubmitCount;
#[MaxDepth(1)]
#[ORM\ManyToOne(targetEntity: Product::class, inversedBy: 'filmProjects')]
private $product;
#[MaxDepth(1)]
#[ORM\Column(type: 'datetime', nullable: true)]
private $createdAt;
#[MaxDepth(1)]
#[ORM\Column(type: 'datetime', nullable: true)]
private $modifiedAt;
#[MaxDepth(1)]
#[ORM\OneToMany(mappedBy: 'filmProject', targetEntity: Donation::class, cascade: ['persist', 'remove'])]
private $donations;
#[MaxDepth(1)]
#[ORM\Column(type: 'float', nullable: true)]
private $totalDonation;
#[MaxDepth(1)]
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private $trackingOptionId;
#[Exclude()]
#[ORM\OneToOne(mappedBy: 'filmProject', targetEntity: FilmProjectOriginal::class, cascade: ['persist', 'remove'])]
private $filmProjectOriginal;
#[Exclude()]
#[ORM\ManyToMany(targetEntity: User::class, mappedBy: 'followedFilmProjects')]
private $users;
#[Exclude()]
#[ORM\OneToMany(mappedBy: 'filmProject', targetEntity: FilmProjectUpdate::class, cascade: ['persist', 'remove'])]
private Collection $filmProjectUpdates;
#[Exclude()]
#[ORM\OneToMany(mappedBy: 'filmProject', targetEntity: FilmProjectImage::class, cascade: ['persist', 'remove'])]
private Collection $filmProjectImages;
#[Exclude()]
#[ORM\OneToMany(mappedBy: 'filmProject', targetEntity: FilmProjectSponsor::class, cascade: ['persist', 'remove'])]
private Collection $filmProjectSponsors;
#[ORM\Column(nullable: true)]
private ?int $tabActive = null;
#[ORM\Column(nullable: true)]
private ?bool $isHideDonationBox = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $wordpressPassword = null;
#[ORM\Column(nullable: true)]
private ?int $oldWordpressId = null;
#[ORM\Column(nullable: true)]
private ?bool $isDafCore = null;
#[ORM\Column(nullable: true)]
private ?bool $isDafProgram = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $xeroId = null;
#[ORM\OneToMany(mappedBy: 'filmProject', targetEntity: FilmProjectChangeHistory::class)]
private Collection $filmProjectChangeHistories;
#[ORM\OneToMany(mappedBy: 'filmProject', targetEntity: FilmProjectProgressReport::class)]
private Collection $filmProjectProgressReports;
#[ORM\ManyToOne(inversedBy: 'recurringFilmProjects')]
private ?Product $recurringProduct = null;
#[ORM\Column(nullable: true)]
private ?bool $isProgressReportActive = null;
public function __construct()
{
$this->filmProjectMembers = new ArrayCollection();
$this->donations = new ArrayCollection();
$this->users = new ArrayCollection();
$this->filmProjectUpdates = new ArrayCollection();
$this->filmProjectImages = new ArrayCollection();
$this->filmProjectSponsors = new ArrayCollection();
$this->filmProjectChangeHistories = new ArrayCollection();
$this->filmProjectProgressReports = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
/**
* @return Collection<int, FilmProjectMember>
*/
public function getFilmProjectMembers(): Collection
{
return $this->filmProjectMembers;
}
public function addFilmProjectMember(FilmProjectMember $filmProjectMember): self
{
if (!$this->filmProjectMembers->contains($filmProjectMember)) {
$this->filmProjectMembers[] = $filmProjectMember;
$filmProjectMember->setFilmProject($this);
}
return $this;
}
public function removeFilmProjectMember(FilmProjectMember $filmProjectMember): self
{
if ($this->filmProjectMembers->removeElement($filmProjectMember)) {
// set the owning side to null (unless already changed)
if ($filmProjectMember->getFilmProject() === $this) {
$filmProjectMember->setFilmProject(null);
}
}
return $this;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(?string $title): self
{
$this->title = $title;
return $this;
}
public function getProductionStage(): ?string
{
return $this->productionStage;
}
public function setProductionStage(?string $productionStage): self
{
$this->productionStage = $productionStage;
return $this;
}
public function getProductionStageWordpress(): ?string
{
if ($this->productionStage == 'Post-Production') {
return 'Post-production';
} elseif ($this->productionStage == 'Film Complete') {
return 'Film Completed';
}
return $this->productionStage;
}
public function getProductionType(): ?string
{
return $this->productionType;
}
public function setProductionType(?string $productionType): self
{
$this->productionType = $productionType;
return $this;
}
public function getFilmProjectDetails(): ?FilmProjectDetails
{
return $this->filmProjectDetails;
}
public function setFilmProjectDetails(?FilmProjectDetails $filmProjectDetails): self
{
// unset the owning side of the relation if necessary
if ($filmProjectDetails === null && $this->filmProjectDetails !== null) {
$this->filmProjectDetails->setFilmProject(null);
}
// set the owning side of the relation if necessary
if ($filmProjectDetails !== null && $filmProjectDetails->getFilmProject() !== $this) {
$filmProjectDetails->setFilmProject($this);
}
$this->filmProjectDetails = $filmProjectDetails;
return $this;
}
public function getFilmProjectStoryImpact(): ?FilmProjectStoryImpact
{
return $this->filmProjectStoryImpact;
}
public function setFilmProjectStoryImpact(?FilmProjectStoryImpact $filmProjectStoryImpact): self
{
// unset the owning side of the relation if necessary
if ($filmProjectStoryImpact === null && $this->filmProjectStoryImpact !== null) {
$this->filmProjectStoryImpact->setFilmProject(null);
}
// set the owning side of the relation if necessary
if ($filmProjectStoryImpact !== null && $filmProjectStoryImpact->getFilmProject() !== $this) {
$filmProjectStoryImpact->setFilmProject($this);
}
$this->filmProjectStoryImpact = $filmProjectStoryImpact;
return $this;
}
public function getFilmProjectTimeline(): ?FilmProjectTimeline
{
return $this->filmProjectTimeline;
}
public function setFilmProjectTimeline(?FilmProjectTimeline $filmProjectTimeline): self
{
// unset the owning side of the relation if necessary
if ($filmProjectTimeline === null && $this->filmProjectTimeline !== null) {
$this->filmProjectTimeline->setFilmProject(null);
}
// set the owning side of the relation if necessary
if ($filmProjectTimeline !== null && $filmProjectTimeline->getFilmProject() !== $this) {
$filmProjectTimeline->setFilmProject($this);
}
$this->filmProjectTimeline = $filmProjectTimeline;
return $this;
}
public function getFilmProjectFunding(): ?FilmProjectFunding
{
return $this->filmProjectFunding;
}
public function setFilmProjectFunding(?FilmProjectFunding $filmProjectFunding): self
{
// unset the owning side of the relation if necessary
if ($filmProjectFunding === null && $this->filmProjectFunding !== null) {
$this->filmProjectFunding->setFilmProject(null);
}
// set the owning side of the relation if necessary
if ($filmProjectFunding !== null && $filmProjectFunding->getFilmProject() !== $this) {
$filmProjectFunding->setFilmProject($this);
}
$this->filmProjectFunding = $filmProjectFunding;
return $this;
}
public function getStatus(): ?string
{
return $this->status;
}
public function setStatus(string $status): self
{
$this->status = $status;
return $this;
}
public function getOwner(): ?User
{
return $this->owner;
}
public function setOwner(?User $owner): self
{
$this->owner = $owner;
return $this;
}
public function getOrder()
{
return 'not set';
}
public function getOrderDetails(): ?OrderDetails
{
return $this->orderDetails;
}
public function setOrderDetails(?OrderDetails $orderDetails): self
{
$this->orderDetails = $orderDetails;
return $this;
}
public function getFilmProjectAdmin(): ?FilmProjectMember
{
return $this->filmProjectAdmin;
}
public function setFilmProjectAdmin(?FilmProjectMember $filmProjectAdmin): self
{
$this->filmProjectAdmin = $filmProjectAdmin;
return $this;
}
public function getFilmProjectProducer(): ?FilmProjectMember
{
return $this->filmProjectProducer;
}
public function setFilmProjectProducer(?FilmProjectMember $filmProjectProducer): self
{
$this->filmProjectProducer = $filmProjectProducer;
return $this;
}
public function getFilmProjectDirector(): ?FilmProjectMember
{
return $this->filmProjectDirector;
}
public function setFilmProjectDirector(?FilmProjectMember $filmProjectDirector): self
{
$this->filmProjectDirector = $filmProjectDirector;
return $this;
}
public function getWordpressId(): ?int
{
return $this->wordpressId;
}
public function setWordpressId(?int $wordpressId): self
{
$this->wordpressId = $wordpressId;
return $this;
}
public function getSalesforceId(): ?string
{
return $this->salesforceId;
}
public function setSalesforceId(?string $salesforceId): self
{
$this->salesforceId = $salesforceId;
return $this;
}
public function getNote(): ?string
{
return $this->note;
}
public function setNote(?string $note): self
{
$this->note = $note;
return $this;
}
public function getResubmitCount(): ?int
{
return $this->resubmitCount;
}
public function setResubmitCount(?int $resubmitCount): self
{
$this->resubmitCount = $resubmitCount;
return $this;
}
public function getProduct(): ?Product
{
return $this->product;
}
public function setProduct(?Product $product): self
{
$this->product = $product;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(?\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getModifiedAt(): ?\DateTimeInterface
{
return $this->modifiedAt;
}
public function setModifiedAt(?\DateTimeInterface $modifiedAt): self
{
$this->modifiedAt = $modifiedAt;
return $this;
}
/**
* @return Collection<int, Donation>
*/
public function getDonations(): Collection
{
return $this->donations;
}
public function addDonation(Donation $donation): self
{
if (!$this->donations->contains($donation)) {
$this->donations[] = $donation;
$donation->setFilmProject($this);
}
return $this;
}
public function removeDonation(Donation $donation): self
{
if ($this->donations->removeElement($donation)) {
// set the owning side to null (unless already changed)
if ($donation->getFilmProject() === $this) {
$donation->setFilmProject(null);
}
}
return $this;
}
public function getTotalDonation(): ?float
{
return $this->totalDonation;
}
public function setTotalDonation(?float $totalDonation): self
{
$this->totalDonation = $totalDonation;
return $this;
}
// Add other functionalities below
public function addTotalDonation(float $amount): self
{
$this->totalDonation += $amount;
return $this;
}
public function reduceTotalDonation(float $amount): self
{
$this->totalDonation -= $amount;
return $this;
}
public function toString()
{
if ($this->title) {
return $this->title;
}
return '';
}
public function __toString()
{
return $this->toString();
}
public function getTrackingOptionId(): ?string
{
return $this->trackingOptionId;
}
public function setTrackingOptionId(?string $trackingOptionId): self
{
$this->trackingOptionId = $trackingOptionId;
return $this;
}
public function getFilmProjectOriginal(): ?FilmProjectOriginal
{
return $this->filmProjectOriginal;
}
public function setFilmProjectOriginal(?FilmProjectOriginal $filmProjectOriginal): self
{
// unset the owning side of the relation if necessary
if ($filmProjectOriginal === null && $this->filmProjectOriginal !== null) {
$this->filmProjectOriginal->setFilmProject(null);
}
// set the owning side of the relation if necessary
if ($filmProjectOriginal !== null && $filmProjectOriginal->getFilmProject() !== $this) {
$filmProjectOriginal->setFilmProject($this);
}
$this->filmProjectOriginal = $filmProjectOriginal;
return $this;
}
/**
* @return Collection<int, User>
*/
public function getUsers(): Collection
{
return $this->users;
}
public function addUser(User $user): self
{
if (!$this->users->contains($user)) {
$this->users[] = $user;
$user->addFollowedFilmProject($this);
}
return $this;
}
public function removeUser(User $user): self
{
if ($this->users->removeElement($user)) {
$user->removeFollowedFilmProject($this);
}
return $this;
}
/**
* @return Collection<int, FilmProjectUpdate>
*/
public function getFilmProjectUpdates(): Collection
{
return $this->filmProjectUpdates;
}
public function addFilmProjectUpdate(FilmProjectUpdate $filmProjectUpdate): self
{
if (!$this->filmProjectUpdates->contains($filmProjectUpdate)) {
$this->filmProjectUpdates->add($filmProjectUpdate);
$filmProjectUpdate->setFilmProject($this);
}
return $this;
}
public function removeFilmProjectUpdate(FilmProjectUpdate $filmProjectUpdate): self
{
if ($this->filmProjectUpdates->removeElement($filmProjectUpdate)) {
// set the owning side to null (unless already changed)
if ($filmProjectUpdate->getFilmProject() === $this) {
$filmProjectUpdate->setFilmProject(null);
}
}
return $this;
}
public function getWordpressUrl(): string
{
$url = '';
if ($this->wordpressId) {
$url = Constant::WORDPRESS_URL . '?page_id='. $this->wordpressId;
}
return $url;
}
public function getWordpressDraftUrl(): string
{
$url = '';
if ($this->wordpressId) {
$url = Constant::WORDPRESS_URL . '/admin-dashboard?redirect_to='. urlencode("/?post_type=project&p="). $this->wordpressId;
}
return $url;
}
public function getFundingStatus(): string
{
$fundingStatus = '-';
$currentFunding = 0;
if ($this->totalDonation) {
$currentFunding = '$'. number_format($this->totalDonation / 100, 2, '.', ',');
}
if ($this->filmProjectFunding) {
if ($this->filmProjectFunding->getFundraisingGoal()) {
$goal = $this->filmProjectFunding->getFundraisingGoal() / 100;
$goal = '$'. number_format($goal, 2, '.', ',');
$fundingStatus = $currentFunding .' / '. $goal;
} else {
return $fundingStatus;
}
}
return $fundingStatus;
}
public function getWordpressStatus(): ?string
{
return $this->wordpressStatus;
}
public function setWordpressStatus(?string $wordpressStatus): self
{
$this->wordpressStatus = $wordpressStatus;
return $this;
}
public function teamMemberRole()
{
$role = 'testing';
return $role;
}
/**
* @return Collection<int, FilmProjectImage>
*/
public function getFilmProjectImages(): Collection
{
return $this->filmProjectImages;
}
public function addFilmProjectImage(FilmProjectImage $filmProjectImage): self
{
if (!$this->filmProjectImages->contains($filmProjectImage)) {
$this->filmProjectImages->add($filmProjectImage);
$filmProjectImage->setFilmProject($this);
}
return $this;
}
public function removeFilmProjectImage(FilmProjectImage $filmProjectImage): self
{
if ($this->filmProjectImages->removeElement($filmProjectImage)) {
// set the owning side to null (unless already changed)
if ($filmProjectImage->getFilmProject() === $this) {
$filmProjectImage->setFilmProject(null);
}
}
return $this;
}
/**
* @return Collection<int, FilmProjectSponsor>
*/
public function getFilmProjectSponsors(): Collection
{
return $this->filmProjectSponsors;
}
public function addFilmProjectSponsor(FilmProjectSponsor $filmProjectSponsor): self
{
if (!$this->filmProjectSponsors->contains($filmProjectSponsor)) {
$this->filmProjectSponsors->add($filmProjectSponsor);
$filmProjectSponsor->setFilmProject($this);
}
return $this;
}
public function removeFilmProjectSponsor(FilmProjectSponsor $filmProjectSponsor): self
{
if ($this->filmProjectSponsors->removeElement($filmProjectSponsor)) {
// set the owning side to null (unless already changed)
if ($filmProjectSponsor->getFilmProject() === $this) {
$filmProjectSponsor->setFilmProject(null);
}
}
return $this;
}
/**
* Returning all project team members
*
* @return array
*/
public function getAllMembers(): array
{
$filmProjectTeam = [];
$filmAdmin = $this->getFilmProjectAdmin();
$filmProducer = $this->getFilmProjectProducer();
$filmDirector = $this->getFilmProjectDirector();
$filmProjectTeam = [$filmAdmin, $filmProducer, $filmDirector];
foreach($this->getFilmProjectMembers() as $filmProjectMember) {
array_push($filmProjectTeam, $filmProjectMember);
}
return $filmProjectTeam;
}
public function getTabActive(): ?int
{
return $this->tabActive;
}
public function setTabActive(?int $tabActive): self
{
$this->tabActive = $tabActive;
return $this;
}
public function isIsHideDonationBox(): ?bool
{
return $this->isHideDonationBox;
}
public function setIsHideDonationBox(?bool $isHideDonationBox): self
{
$this->isHideDonationBox = $isHideDonationBox;
return $this;
}
public function getWordpressPassword(): ?string
{
return $this->wordpressPassword;
}
public function setWordpressPassword(?string $wordpressPassword): self
{
$this->wordpressPassword = $wordpressPassword;
return $this;
}
public function getOldWordpressId(): ?int
{
return $this->oldWordpressId;
}
public function setOldWordpressId(?int $oldWordpressId): self
{
$this->oldWordpressId = $oldWordpressId;
return $this;
}
public function isIsDafCore(): ?bool
{
return $this->isDafCore;
}
public function setIsDafCore(?bool $isDafCore): self
{
$this->isDafCore = $isDafCore;
return $this;
}
public function isIsDafProgram(): ?bool
{
return $this->isDafProgram;
}
public function setIsDafProgram(?bool $isDafProgram): self
{
$this->isDafProgram = $isDafProgram;
return $this;
}
public function getXeroId(): ?string
{
return $this->xeroId;
}
public function setXeroId(?string $xeroId): static
{
$this->xeroId = $xeroId;
return $this;
}
/**
* @return Collection<int, FilmProjectChangeHistory>
*/
public function getFilmProjectChangeHistories(): Collection
{
return $this->filmProjectChangeHistories;
}
public function addFilmProjectChangeHistory(FilmProjectChangeHistory $filmProjectChangeHistory): static
{
if (!$this->filmProjectChangeHistories->contains($filmProjectChangeHistory)) {
$this->filmProjectChangeHistories->add($filmProjectChangeHistory);
$filmProjectChangeHistory->setFilmProject($this);
}
return $this;
}
public function removeFilmProjectChangeHistory(FilmProjectChangeHistory $filmProjectChangeHistory): static
{
if ($this->filmProjectChangeHistories->removeElement($filmProjectChangeHistory)) {
// set the owning side to null (unless already changed)
if ($filmProjectChangeHistory->getFilmProject() === $this) {
$filmProjectChangeHistory->setFilmProject(null);
}
}
return $this;
}
/**
* @return Collection<int, FilmProjectProgressReport>
*/
public function getFilmProjectProgressReports(): Collection
{
return $this->filmProjectProgressReports;
}
public function addFilmProjectProgressReport(FilmProjectProgressReport $filmProjectProgressReport): static
{
if (!$this->filmProjectProgressReports->contains($filmProjectProgressReport)) {
$this->filmProjectProgressReports->add($filmProjectProgressReport);
$filmProjectProgressReport->setFilmProject($this);
}
return $this;
}
public function removeFilmProjectProgressReport(FilmProjectProgressReport $filmProjectProgressReport): static
{
if ($this->filmProjectProgressReports->removeElement($filmProjectProgressReport)) {
// set the owning side to null (unless already changed)
if ($filmProjectProgressReport->getFilmProject() === $this) {
$filmProjectProgressReport->setFilmProject(null);
}
}
return $this;
}
public function getProgressReportStatus() {
$progressReports = $this->filmProjectProgressReports;
$currentYear = (int) date('Y');
foreach ($progressReports as $progressReport) {
$progressReportYear = (int) ($progressReport->getCreatedAt())->format('Y');
if ($currentYear === $progressReportYear && $progressReport->getStatus() == 'completed') {
return true;
}
}
return false;
}
public function getProgressReportStatusUpdate() {
$progressReports = $this->filmProjectProgressReports;
$currentYear = (int) date('Y');
if ($progressReports->isEmpty()) {
return 'not_available';
}
foreach ($progressReports as $progressReport) {
$progressReportYear = (int) ($progressReport->getCreatedAt())->format('Y');
if ($currentYear === $progressReportYear && $progressReport->getStatus() != 'completed' && $progressReport->isIsDraft() ) {
return 'in_progress';
}
if ($currentYear === $progressReportYear && $progressReport->getStatus() == 'completed') {
return 'complete';
}
}
return 'not_complete';
}
public function getRecurringProduct(): ?Product
{
return $this->recurringProduct;
}
public function setRecurringProduct(?Product $recurringProduct): static
{
$this->recurringProduct = $recurringProduct;
return $this;
}
public function getProgressReportUrl(): ?string
{
$currentYear = (int) date('Y');
$progressReportUrl = '/progress-report/'. $currentYear .'?projectId=' . $this->id;
$html = '<div class="d-flex align-items-center "><a href="'. $progressReportUrl .'" target="_blank" class="btn btn-primary">View Progress Report</a></div>';
return $html;
}
public function isIsProgressReportActive(): ?bool
{
return $this->isProgressReportActive;
}
public function setIsProgressReportActive(?bool $isProgressReportActive): static
{
$this->isProgressReportActive = $isProgressReportActive;
return $this;
}
}