<?php
namespace App\Entity;
use App\Repository\MonthlyCalculationRepository;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as Serializer;
#[ORM\Entity(repositoryClass: MonthlyCalculationRepository::class)]
#[ORM\HasLifecycleCallbacks]
#[Serializer\ExclusionPolicy('ALL')]
class MonthlyCalculation
{
public const API_SOGEC_ACTION = 'create';
public const API_SOGEC_CHANNEL = 'FI';
public const NON_COMPLIANT_DEFINITIVE = 'def';
public const NON_COMPLIANT_TEMPORARY = 'temp';
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
#[Serializer\SerializedName('participation_id')]
#[Serializer\Expose]
private ?int $id = null;
#[ORM\Column(type: 'integer')]
private ?int $year = null;
#[ORM\Column(type: 'integer')]
private ?int $month = null;
#[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'monthlyCalculations')]
#[ORM\JoinColumn(nullable: false)]
private ?User $user;
#[ORM\Column(type: 'integer')]
private ?int $exams = null;
#[ORM\Column(type: 'float')]
private ?float $euro = null;
#[ORM\Column(type: 'string', nullable: true)]
private ?string $num = null;
#[ORM\Column(type: 'boolean', nullable: true)]
private ?bool $isConform = null;
#[ORM\Column(type: 'json', nullable: true)]
private array $reasonNotConformity = [];
#[ORM\Column(type: 'string', length: 10, nullable: true)]
private ?string $nonConformityType = null;
#[ORM\Column(type: 'string', nullable: true)]
private ?string $financialStatus = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?\DateTimeInterface $financialDate = null;
#[ORM\Column(type: 'datetime')]
private ?\DateTimeInterface $createdAt = null;
#[ORM\Column(type: 'datetime')]
private ?\DateTimeInterface $updatedAt = null;
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $errno = null;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $errmsg = null;
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $InvoiceId = null;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $invoiceNumber = null;
#[Serializer\VirtualProperty]
#[Serializer\SerializedName('channel')]
#[Serializer\Groups(['global'])]
#[Serializer\Expose]
public function getApiSogecChannel(): string
{
return self::API_SOGEC_CHANNEL;
}
#[Serializer\VirtualProperty]
#[Serializer\SerializedName('action')]
#[Serializer\Groups(['global'])]
#[Serializer\Expose]
public function getApiSogecAction(): string
{
return self::API_SOGEC_ACTION;
}
#[Serializer\VirtualProperty]
#[Serializer\SerializedName('paiement_request')]
#[Serializer\Groups(['global'])]
#[Serializer\Expose]
public function isPaymentRequest(): int
{
return 1;
}
public function euroWithVAT(): float
{
return round($this->euro * 1.2, 2);
}
#[ORM\PrePersist]
#[ORM\PreUpdate]
public function updatedTimestamps(): void
{
$dateTimeNow = new \DateTime('now');
$this->setUpdatedAt($dateTimeNow);
if (null === $this->getCreatedAt()) {
$this->setCreatedAt($dateTimeNow);
}
}
public function getId(): ?int
{
return $this->id;
}
public function getYear(): ?int
{
return $this->year;
}
public function setYear(int $year): self
{
$this->year = $year;
return $this;
}
public function getMonth(): ?int
{
return $this->month;
}
public function getNamedMonth(): string
{
$months = [
1 => 'janvier',
2 => 'février',
3 => 'mars',
4 => 'avril',
5 => 'mai',
6 => 'juin',
7 => 'juillet',
8 => 'août',
9 => 'septembre',
10 => 'octobre',
11 => 'novembre',
12 => 'décembre',
];
return $months[$this->month];
}
public function setMonth(int $month): self
{
$this->month = $month;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getExams(): ?int
{
return $this->exams;
}
public function setExams(int $exams): self
{
$this->exams = $exams;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getUpdatedAt(): ?\DateTimeInterface
{
return $this->updatedAt;
}
public function setUpdatedAt(\DateTimeInterface $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
public function getEuro(): ?float
{
return $this->euro;
}
public function setEuro(float $euro): self
{
$this->euro = $euro;
return $this;
}
public function getNum(): ?string
{
return $this->num;
}
public function setNum(?string $num): self
{
$this->num = $num;
return $this;
}
public function getIsConform(): ?bool
{
return $this->isConform;
}
public function setIsConform(bool $isConform): self
{
$this->isConform = $isConform;
return $this;
}
public function getReasonNotConformity(): ?array
{
return $this->reasonNotConformity;
}
public function setReasonNotConformity(?array $reasonNotConformity): self
{
$this->reasonNotConformity = $reasonNotConformity;
return $this;
}
public function getNonConformityType(): ?string
{
return $this->nonConformityType;
}
public function setNonConformityType(?string $nonConformityType): self
{
$this->nonConformityType = $nonConformityType;
return $this;
}
public function getFinancialStatus(): ?string
{
return $this->financialStatus;
}
public function setFinancialStatus(?string $financialStatus): self
{
$this->financialStatus = $financialStatus;
return $this;
}
public function getFinancialDate(): ?\DateTimeInterface
{
return $this->financialDate;
}
public function setFinancialDate(?\DateTimeInterface $financialDate): self
{
$this->financialDate = $financialDate;
return $this;
}
public function getErrno(): ?int
{
return $this->errno;
}
public function setErrno(?int $errno): self
{
$this->errno = $errno;
return $this;
}
public function getErrmsg(): ?string
{
return $this->errmsg;
}
public function setErrmsg(?string $errmsg): self
{
$this->errmsg = $errmsg;
return $this;
}
public function getInvoiceId(): ?int
{
return $this->InvoiceId;
}
public function setInvoiceId(?int $InvoiceId): self
{
$this->InvoiceId = $InvoiceId;
return $this;
}
public function getInvoiceNumber(): ?string
{
return $this->invoiceNumber;
}
public function setInvoiceNumber(?string $invoiceNumber): self
{
$this->invoiceNumber = $invoiceNumber;
return $this;
}
}