<?php
namespace EADPlataforma\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use EADPlataforma\Validator\Constraints as EADAssert;
use EADPlataforma\Enum\ExamUserAnswerEnum;
use EADPlataforma\Util\StringUtil;
use \DateTime;
/**
* ExamUserAnswer
*
* @ORM\Table(name="exam_user_answer", indexes={
* @ORM\Index(name="fk_exam_user_answers_exam_user_id", columns={"exam_user_id"}),
* @ORM\Index(name="fk_exam_user_answers_question_id", columns={"question_id"}),
* @ORM\Index(name="fk_exam_user_answers_user_delete_id", columns={"user_delete_id"})
* })
*
* @ORM\Entity(repositoryClass="EADPlataforma\Repository\ExamUserAnswerRepository")
*/
class ExamUserAnswer
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @Assert\NotBlank(
* message = "Deleted not informed"
* )
*
* @Assert\Choice(
* choices = {
* ExamUserAnswerEnum::ITEM_NO_DELETED,
* ExamUserAnswerEnum::ITEM_ON_TRASH,
* ExamUserAnswerEnum::ITEM_DELETED
* },
* message = "Delete Option Invalid"
* )
*
* @var int
*
* @ORM\Column(name="deleted", type="integer", nullable=false, options={"default"="0"})
*/
private $deleted = ExamUserAnswerEnum::ITEM_NO_DELETED;
/**
* @Assert\NotBlank(
* message = "Answered not informed"
* )
*
* @var int
*
* @ORM\Column(name="answered", type="integer", nullable=false, options={"default"="0"})
*/
private $answered = ExamUserAnswerEnum::NO;
/**
* @Assert\NotBlank(
* message = "Evaluated not informed"
* )
*
* @var int
*
* @ORM\Column(name="evaluated", type="integer", nullable=false, options={"default"="0"})
*/
private $evaluated = ExamUserAnswerEnum::NO;
/**
* @Assert\NotBlank(
* message = "Grade not informed"
* )
*
* @var string
*
* @ORM\Column(name="grade", type="decimal", precision=10, scale=2, nullable=false, options={"default"="0"})
*/
private $grade = ExamUserAnswerEnum::NO;
/**
* @var string|null
*
* @ORM\Column(name="answer", type="text", length=0, nullable=true)
*/
private $answer;
/**
* @var string|null
*
* @ORM\Column(name="note", type="text", length=0, nullable=true)
*/
private $note;
/**
* @Assert\NotBlank(
* message = "Question not informed"
* )
*
* @Assert\Valid
*
* @var \Question
*
* @ORM\ManyToOne(targetEntity="Question")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="question_id", referencedColumnName="id", nullable=false)
* })
*/
private $question;
/**
* @Assert\NotBlank(
* message = "Exam User not informed"
* )
*
* @Assert\Valid
*
* @var \ExamUser
*
* @ORM\ManyToOne(targetEntity="ExamUser")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="exam_user_id", referencedColumnName="id", nullable=false)
* })
*/
private $examUser;
/**
* @Assert\Valid
*
* @var \EADPlataforma\Entity\User
*
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_delete_id", referencedColumnName="id", nullable=true)
* })
*/
private $userDelete;
/**
* @Assert\Choice(
* choices = {
* ExamUserAnswerEnum::INDIVIDUAL,
* ExamUserAnswerEnum::CASCADE
* },
* message = "Type Delete Invalid"
* )
*
* @var int
*
* @ORM\Column(name="type_delete", type="integer", nullable=true)
*/
private $typeDelete;
/**
* @EADAssert\DateTimeEAD(
* message = "Date Delete Invalid"
* )
*
* @var \DateTime|null
*
* @ORM\Column(name="date_delete", type="datetime", nullable=true)
*/
private $dateDelete;
public function getId(): ?int
{
return $this->id;
}
public function getAnswered(): ?string
{
return $this->answered;
}
public function setAnswered(?string $answered): self
{
$this->answered = $answered;
return $this;
}
public function getEvaluated(): ?int
{
return $this->evaluated;
}
public function setEvaluated(?int $evaluated): self
{
$this->evaluated = $evaluated;
return $this;
}
public function getGrade()
{
return $this->grade;
}
public function setGrade($grade): self
{
$this->grade = $grade;
return $this;
}
public function getAnswer(): ?string
{
return $this->answer;
}
public function setAnswer(?string $answer): self
{
$this->answer = $answer;
return $this;
}
public function getNote(): ?string
{
return StringUtil::encodeStringStatic($this->note);
}
public function setNote(?string $note): self
{
$this->note = $note;
return $this;
}
public function getQuestion(): ?Question
{
return $this->question;
}
public function setQuestion(?Question $question): self
{
$this->question = $question;
return $this;
}
public function getExamUser(): ?ExamUser
{
return $this->examUser;
}
public function setExamUser(?ExamUser $examUser): self
{
$this->examUser = $examUser;
return $this;
}
public function getUserDelete(): ?User
{
return $this->userDelete;
}
public function setUserDelete(?User $userDelete): self
{
$this->userDelete = $userDelete;
return $this;
}
public function getDateDelete($dateFormat = 'Y-m-d H:i:s')
{
if($this->dateDelete){
return $this->dateDelete->format($dateFormat);
}
return $this->dateDelete;
}
public function setDateDelete($dateDelete): self
{
if(!empty($dateDelete)){
$dateDelete = DateTime::createFromFormat('Y-m-d H:i:s', $dateDelete);
}
$this->dateDelete = $dateDelete;
return $this;
}
public function individual(): self
{
$this->typeDelete = ExamUserAnswerEnum::INDIVIDUAL;
return $this;
}
public function cascade(): self
{
$this->typeDelete = ExamUserAnswerEnum::CASCADE;
return $this;
}
public function isOnTrash(): bool
{
return ($this->deleted == ExamUserAnswerEnum::ITEM_ON_TRASH);
}
public function isDeleted(): bool
{
return ($this->deleted == ExamUserAnswerEnum::ITEM_DELETED);
}
public function restore(): self
{
$this->deleted = ExamUserAnswerEnum::ITEM_NO_DELETED;
return $this;
}
public function trash(): self
{
$this->deleted = ExamUserAnswerEnum::ITEM_ON_TRASH;
return $this;
}
public function delete(): self
{
$this->deleted = ExamUserAnswerEnum::ITEM_DELETED;
return $this;
}
public function toReturn(){
$data = [
"id" => $this->id,
"deleted" => $this->deleted,
"answered" => $this->answered,
"evaluated" => $this->evaluated,
"grade" => $this->grade,
"answer" => $this->answer,
"note" => $this->getNote(),
"question" => ($this->question ? $this->question->getId() : null ),
"examUser" => ($this->examUser ? $this->examUser->getId() : null ),
"userDelete" => ( $this->userDelete ? $this->userDelete->getId() : null ),
"typeDelete" => $this->typeDelete,
"dateDelete" => $this->getDateDelete()
];
return $data;
}
}