src/Entity/ChannelUserData/Cursus/Internship.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\Entity\ChannelUserData\Cursus;
  3. use Nellapp\Bundle\SDKBundle\TrackData\Attribute\TrackEntity;
  4. use Nellapp\Bundle\SDKBundle\TrackData\Attribute\TrackFIeld;
  5. use App\Entity\Channel\Company;
  6. use App\Entity\ChannelUserData\AdminChannelUserData;
  7. use App\Entity\Common\Address;
  8. use App\Enum\ChannelUserData\Activity\CursusActivityTagEnum;
  9. use App\Repository\ChannelUserData\Cursus\InternshipRepository;
  10. use DateTimeImmutable;
  11. use DateTimeInterface;
  12. use Doctrine\ORM\Mapping as ORM;
  13. use DrosalysWeb\ObjectExtensions\Blame\Model\BlameInterface;
  14. use DrosalysWeb\ObjectExtensions\Blame\Model\BlameTrait;
  15. use DrosalysWeb\ObjectExtensions\Timestamp\Model\TimestampInterface;
  16. use DrosalysWeb\ObjectExtensions\Timestamp\Model\TimestampTrait;
  17. use Nellapp\Bundle\SDKBundle\Utils\NellappFormatService;
  18. use Symfony\Component\Validator\Constraints as Assert;
  19. #[
  20.     ORM\Entity(repositoryClassInternshipRepository::class),
  21.     ORM\Table(name'channel_user_data_cursus_internship'),
  22.     TrackEntity(
  23.         name'internship.entity.track_data.entity.name',
  24.         fieldGroups: [
  25.             'internship' => [
  26.                 'tags' => [ CursusActivityTagEnum::INTERNSHIP ]
  27.             ],
  28.         ],
  29.     ),
  30. ]
  31. class Internship implements TimestampInterfaceBlameInterface
  32. {
  33.     use TimestampTrait;
  34.     use BlameTrait;
  35.     public const START_DELAY '-1 weeks';
  36.     public const END_DELAY   '+2 weeks';
  37.     #[ORM\IdORM\GeneratedValue]
  38.     #[ORM\Column(type'integer')]
  39.     private ?int $id null;
  40.     #[ORM\ManyToOne(targetEntityAbstractCursus::class, inversedBy'internships')]
  41.     #[ORM\JoinColumn(nullablefalseonDelete"CASCADE")]
  42.     private ?AbstractCursus $cursus null;
  43.     #[ORM\Column(type'date')]
  44.     #[
  45.         Assert\NotBlank,
  46.     ]
  47.     #[TrackFIeld(name'internship.entity.startAt.label'fieldKey'internship', callable: 'format'callableParams: ['d/m/Y'])]
  48.     private ?DateTimeInterface $startAt null;
  49.     #[ORM\Column(type'date')]
  50.     #[
  51.         Assert\NotBlank,
  52.     ]
  53.     #[TrackFIeld(name'internship.entity.endAt.label'fieldKey'internship', callable: 'format'callableParams: ['d/m/Y'])]
  54.     private ?DateTimeInterface $endAt null;
  55.     #[ORM\Column(type'integer'nullabletrue)]
  56.     #[TrackFIeld(name'internship.entity.duration.label'fieldKey'internship', callable: 'formatDuration'callableClassNellappFormatService::class)]
  57.     #[Assert\GreaterThanOrEqual(value0)]
  58.     private ?int $duration null;
  59.     #[ORM\Embedded(class: Address::class)]
  60.     #[Assert\Valid()]
  61.     #[TrackFIeld(name'internship.entity.address.label'fieldKey'internship'embeddedFields: [
  62.         'address.street' => 'internship.entity.addressStreet.label',
  63.         'address.postCode' => 'internship.entity.addressPostCode.label',
  64.         'address.city' => 'internship.entity.addressCity.label',
  65.         'address.country' => 'internship.entity.addressCountry.label',
  66.     ])]
  67.     private ?Address $address null;
  68.     #[ORM\ManyToOne(targetEntityCompany::class, cascade: ['persist'], inversedBy'internships')]
  69.     #[ORM\JoinColumn(nullabletrueonDelete'SET NULL')]
  70.     #[TrackFIeld(name'internship.entity.company.label'fieldKey'internship')]
  71.     private ?Company $company null;
  72.     #[ORM\ManyToOne(targetEntityAdminChannelUserData::class, fetch'EAGER'inversedBy'internships')]
  73.     #[ORM\JoinColumn(nullabletrueonDelete'SET NULL')]
  74.     #[TrackFIeld(name'internship.entity.tutor.label'fieldKey'internship')]
  75.     private ?AdminChannelUserData $tutor null;
  76.     public function getId(): ?int
  77.     {
  78.         return $this->id;
  79.     }
  80.     public function getCursus(): ?AbstractCursus
  81.     {
  82.         return $this->cursus;
  83.     }
  84.     public function setCursus(?AbstractCursus $cursus): static
  85.     {
  86.         $this->cursus $cursus;
  87.         return $this;
  88.     }
  89.     public function getStartAt(): ?DateTimeInterface
  90.     {
  91.         return $this->startAt;
  92.     }
  93.     public function setStartAt(?DateTimeInterface $startAt): static
  94.     {
  95.         $this->startAt $startAt;
  96.         return $this;
  97.     }
  98.     public function getEndAt(): ?DateTimeInterface
  99.     {
  100.         return $this->endAt;
  101.     }
  102.     public function setEndAt(?DateTimeInterface $endAt): static
  103.     {
  104.         $this->endAt $endAt;
  105.         return $this;
  106.     }
  107.     public function isActiveWithDelays(): bool
  108.     {
  109.         $now = new DateTimeImmutable();
  110.         $start $this->getStartAt()?->modify(self::START_DELAY) ?? null;
  111.         $end $this->getEndAt()?->modify(self::END_DELAY) ?? null;
  112.         if ($start && $now $start) {
  113.             return false;
  114.         }
  115.         if ($end && $now $end) {
  116.             return false;
  117.         }
  118.         return true;
  119.     }
  120.     public function isEnded(): bool
  121.     {
  122.         return $this->endAt !==null && $this->endAt < new DateTimeImmutable();
  123.     }
  124.     public function isActive(): bool
  125.     {
  126.         return !$this->isEnded();
  127.     }
  128.     public function getDuration(): ?int
  129.     {
  130.         return $this->duration;
  131.     }
  132.     public function setDuration(?int $duration): static
  133.     {
  134.         $this->duration $duration;
  135.         return $this;
  136.     }
  137.     public function getAddress(): ?Address
  138.     {
  139.         return $this->address;
  140.     }
  141.     public function setAddress(?Address $address): static
  142.     {
  143.         $this->address $address;
  144.         return $this;
  145.     }
  146.     public function getCompany(): ?Company
  147.     {
  148.         return $this->company;
  149.     }
  150.     public function setCompany(?Company $company): static
  151.     {
  152.         $this->company $company;
  153.         return $this;
  154.     }
  155.     public function getTutor(): ?AdminChannelUserData
  156.     {
  157.         return $this->tutor;
  158.     }
  159.     public function setTutor(?AdminChannelUserData $tutor): static
  160.     {
  161.         $this->tutor $tutor;
  162.         return $this;
  163.     }
  164. }