<?php
namespace App\Entity;
use App\Entity\Traits\TimestampableTrait;
use App\Repository\SatisfactionClientSurveyRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: SatisfactionClientSurveyRepository::class)]
class SatisfactionClientSurvey
{
use TimestampableTrait;
#[ORM\Id, ORM\GeneratedValue, ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private string $title;
#[ORM\ManyToMany(targetEntity: Collaborator::class)]
private Collection $collaborators;
#[ORM\OneToMany(mappedBy: 'survey', targetEntity: SatisfactionClientQuestion::class, cascade: ['persist', 'remove'])]
private Collection $questions;
#[ORM\OneToMany(mappedBy: 'survey', targetEntity: SatisfactionClientSurveyResponse::class, cascade: ['remove'])]
private Collection $responses;
#[ORM\ManyToOne(targetEntity: AccountingFirm::class, inversedBy: 'satisfactionClientSurveys')]
#[ORM\JoinColumn(nullable: false)]
private AccountingFirm $accountingFirm;
#[ORM\OneToOne(targetEntity: MailingTask::class, inversedBy: 'survey', cascade: ['persist', 'remove'])]
private ?MailingTask $mailingTask = null;
#[ORM\Column(type:'boolean')]
private bool $sent;
#[ORM\ManyToOne(targetEntity: User::class, inversedBy:'survey')]
#[ORM\JoinColumn(nullable: false)]
private User $user;
#[ORM\ManyToOne(targetEntity: EmailingClientCampaign::class)]
private $emailing;
private int $countMail = 0;
public function __construct()
{
$this->collaborators = new ArrayCollection();
$this->questions = new ArrayCollection();
$this->responses = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function setTitle(string $title): SatisfactionClientSurvey
{
$this->title = $title;
return $this;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setResponses(Collection $responses): SatisfactionClientSurvey
{
$this->responses = $responses;
return $this;
}
public function addResponse(SatisfactionClientAnswer $response): SatisfactionClientSurvey{
$this->responses->add($response);
return $this;
}
public function getResponses(): Collection
{
return $this->responses;
}
public function getAccountingFirm(): AccountingFirm
{
return $this->accountingFirm;
}
public function setAccountingFirm( AccountingFirm $accountingFirm): SatisfactionClientSurvey
{
$this->accountingFirm = $accountingFirm;
return $this;
}
public function getQuestions(): Collection
{
return $this->questions;
}
public function setQuestions(Collection $questions): SatisfactionClientSurvey{
$this->questions = $questions;
return $this;
}
public function addQuestion(SatisfactionClientQuestion $question): SatisfactionClientSurvey {
if (!$this->questions->contains($question)) {
$this->questions->add($question);
$question->setSurvey($this);
}
return $this;
}
public function addCollaborator(Collaborator $collaborator): SatisfactionClientSurvey {
if (!$this->collaborators->contains($collaborator)) {
$this->collaborators->add($collaborator);
$collaborator->addSurvey($this);
}
return $this;
}
public function removeCollaborator(Collaborator $collaborator): SatisfactionClientSurvey {
if ($this->collaborators->contains($collaborator)) {
$this->collaborators->removeElement($collaborator);
$collaborator->removeSurvey($this);
}
return $this;
}
public function getCollaborators(): Collection {
return $this->collaborators;
}
public function setCollaborators(Collection $collaborators): SatisfactionClientSurvey {
$this->collaborators = $collaborators;
return $this;
}
public function getClientMails(): Collection {
$clientMail = new ArrayCollection();
foreach($this->collaborators as $collaborator) {
$mailParCollab = $collaborator->getClientEmails();
$clientMail->add($mailParCollab);
}
return $clientMail;
}
public function isSent(): bool {
return $this->sent;
}
public function setSent(bool $sent): SatisfactionClientSurvey {
$this->sent = $sent;
return $this;
}
public function getCountMail(): int {
return $this->countMail;
}
public function setCountMail(int $countMail): SatisfactionClientSurvey {
$this->countMail = $countMail;
return $this;
}
public function getMailingTask(): ?MailingTask {
return $this->mailingTask;
}
public function setMailingTask(?MailingTask $mailingTask): SatisfactionClientSurvey {
$this->mailingTask = $mailingTask;
return $this;
}
public function getUser(){
return $this->user;
}
public function setUser(User $user): SatisfactionClientSurvey {
$this->user = $user;
return $this;
}
public function getEmailing(): ?EmailingClientCampaign
{
return $this->emailing;
}
public function setEmailing(?EmailingClientCampaign $emailing): self
{
$this->emailing = $emailing;
return $this;
}
}