src/Entity/WorkExperience.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Core\Annotation\ApiFilter;
  4. use ApiPlatform\Core\Annotation\ApiResource;
  5. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
  6. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  7. use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Gedmo\Timestampable\Traits\TimestampableEntity;
  10. use Symfony\Component\Serializer\Annotation\Groups;
  11. use Symfony\Component\Validator\Constraints as Assert;
  12. use Symfony\Component\Validator\Context\ExecutionContextInterface;
  13. /**
  14.  * @ORM\Entity(repositoryClass="App\Repository\WorkExperienceRepository")
  15.  * @ORM\HasLifecycleCallbacks()
  16.  */
  17. #[ApiResource(
  18.     attributes: ['security' => "is_granted('ROLE_USER')"],
  19.     normalizationContext: ['groups' => ['workExperience:read']],
  20.     denormalizationContext: ['groups' => ['workExperience:write']],
  21.     collectionOperations: ['get''post' => ['security' => "is_granted('ROLE_ADMIN')"]],
  22.     itemOperations: ['get''put' => ['security' => "is_granted('ROLE_ADMIN') or object.owner == user"]],
  23. )]
  24. #[ApiFilter(SearchFilter::class, properties: ['id''title' => 'partial''companyName' => 'partial'])]
  25. #[ApiFilter(PropertyFilter::class)]
  26. #[ApiFilter(OrderFilter::class, properties: ['id''title''companyName'], arguments: ['orderParameterName' => 'order'])]
  27. class WorkExperience
  28. {
  29.     use TimestampableEntity;
  30.     /**
  31.      * @ORM\Id()
  32.      * @ORM\GeneratedValue()
  33.      * @ORM\Column(type="integer")
  34.      */
  35.     private $id;
  36.     /**
  37.      * @ORM\Column(type="string", length=128, nullable=true)
  38.      * @Assert\Length(max=128)
  39.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  40.      */
  41.     private $title;
  42.     /**
  43.      * @ORM\Column(type="string", name="company_name", length=128, nullable=true)
  44.      * @Assert\NotBlank(groups={"Edition-Step2"})
  45.      * @Assert\Length(max=128)
  46.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  47.      */
  48.     private $companyName null;
  49.     /**
  50.      * @ORM\Column(type="string", length=128, nullable=true)
  51.      * @Assert\Length(max=128)
  52.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  53.      */
  54.     private $companyLocation;
  55.     /**
  56.      * @ORM\Column(type="date", nullable=false)
  57.      * @Assert\NotNull(groups={"Edition-Step2"})
  58.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  59.      */
  60.     private $dateFrom;
  61.     /**
  62.      * @ORM\Column(type="date", nullable=true)
  63.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  64.      */
  65.     private $dateTo;
  66.     /**
  67.      * @ORM\Column(type="datetime", nullable=true)
  68.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  69.      */
  70.     private $rehireDate;
  71.     /**
  72.      * @ORM\Column(type="date", nullable=true)
  73.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  74.      */
  75.     private $latestHireDate;
  76.     private $workOnGoing;
  77.     /**
  78.      * @ORM\Column(type="string", length=64, nullable=true)
  79.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  80.      */
  81.     private $phoneCompany;
  82.     /**
  83.      * @ORM\Column(type="string", length=50, nullable=true)
  84.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  85.      */
  86.     private $employeeStatus;
  87.     /**
  88.      * @ORM\Column(type="string", length=20, nullable=true)
  89.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  90.      */
  91.     private $salary;
  92.     /**
  93.      * @ORM\ManyToOne(targetEntity="App\Entity\VirtualOffice")
  94.      * @ORM\JoinColumn(nullable=true)
  95.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  96.      */
  97.     private $virtualOffice;
  98.     /**
  99.      * @ORM\Column(type="string", length=256, nullable=true)
  100.      * @Groups({"workExperience:read", "workExperience:write"})
  101.      */
  102.     private $virtualOfficeOther;
  103.     /**
  104.      * @ORM\Column(type="integer", length=50, nullable=true)
  105.      */
  106.     private $deploymentId 0;
  107.     /**
  108.      * @ORM\ManyToOne(targetEntity=SalaryRange::class, inversedBy="workExperiences")
  109.      * @ORM\JoinColumn(nullable=true, name="salary_range_id", referencedColumnName="id", onDelete="SET NULL")
  110.      */
  111.     private $salaryRange;
  112.     /**
  113.      * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="workExperiences")
  114.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  115.      * @Assert\NotNull()
  116.      */
  117.     private $user;
  118.     /**
  119.      * @ORM\ManyToOne(targetEntity="App\Entity\Company")
  120.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  121.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  122.      */
  123.     private $company;
  124.     /**
  125.      * @ORM\ManyToOne(targetEntity="App\Entity\Department")
  126.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  127.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  128.      */
  129.     private $department;
  130.     /**
  131.      * @ORM\ManyToOne(targetEntity="App\Entity\Division")
  132.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  133.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  134.      */
  135.     private $division;
  136.     /**
  137.      * @ORM\ManyToOne(targetEntity="App\Entity\Position")
  138.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  139.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  140.      */
  141.     private $position;
  142.     /**
  143.      * @ORM\ManyToOne(targetEntity="App\Entity\DivisionHead")
  144.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  145.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  146.      */
  147.     private $divisionHead;
  148.     /**
  149.      * @ORM\ManyToOne(targetEntity="App\Entity\PyramidHead")
  150.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  151.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  152.      */
  153.     private $pyramidHead;
  154.     /**
  155.      * @ORM\ManyToOne(targetEntity="App\Entity\Region")
  156.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  157.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  158.      */
  159.     private $region;
  160.     /**
  161.      * @ORM\ManyToOne(targetEntity="App\Entity\City")
  162.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  163.      * @Groups({"workExperience:read", "workExperience:write","user:item","user:list","user:write"})
  164.      */
  165.     private $city;
  166.     public function getId(): ?int
  167.     {
  168.         return $this->id;
  169.     }
  170.     public function getTitle(): ?string
  171.     {
  172.         return $this->title;
  173.     }
  174.     public function setTitle(?string $title): self
  175.     {
  176.         $this->title $title;
  177.         return $this;
  178.     }
  179.     public function getCompanyName(): ?string
  180.     {
  181.         return $this->companyName;
  182.     }
  183.     public function setCompanyName(?string $companyName): self
  184.     {
  185.         $this->companyName $companyName;
  186.         return $this;
  187.     }
  188.     public function getCompanyLocation(): ?string
  189.     {
  190.         return $this->companyLocation;
  191.     }
  192.     public function setCompanyLocation(?string $companyLocation): self
  193.     {
  194.         $this->companyLocation $companyLocation;
  195.         return $this;
  196.     }
  197.     public function getDateFrom(): ?\DateTime
  198.     {
  199.         return $this->dateFrom;
  200.     }
  201.     public function setDateFrom(?\DateTime $dateFrom): self
  202.     {
  203.         $this->dateFrom $dateFrom;
  204.         return $this;
  205.     }
  206.     public function getDateTo(): ?\DateTime
  207.     {
  208.         return $this->dateTo;
  209.     }
  210.     public function setDateTo(?\DateTime $dateTo): self
  211.     {
  212.         $this->dateTo $dateTo;
  213.         return $this;
  214.     }
  215.     public function getRehireDate(): ?\DateTime
  216.     {
  217.         return $this->rehireDate;
  218.     }
  219.     public function setRehireDate(?\DateTime $rehireDate): self
  220.     {
  221.         $this->rehireDate $rehireDate;
  222.         return $this;
  223.     }
  224.     public function getLatestHireDate(): ?\DateTime
  225.     {
  226.         return $this->latestHireDate;
  227.     }
  228.     public function setLatestHireDate(?\DateTime $latestHireDate): self
  229.     {
  230.         $this->latestHireDate $latestHireDate;
  231.         return $this;
  232.     }
  233.     public function getPhoneCompany(): ?string
  234.     {
  235.         return $this->phoneCompany;
  236.     }
  237.     public function setPhoneCompany(?string $phoneCompany): self
  238.     {
  239.         $this->phoneCompany $phoneCompany;
  240.         return $this;
  241.     }
  242.     public function getEmployeeStatus(): ?string
  243.     {
  244.         return $this->employeeStatus;
  245.     }
  246.     public function setEmployeeStatus(?string $employeeStatus): self
  247.     {
  248.         $this->employeeStatus $employeeStatus;
  249.         return $this;
  250.     }
  251.     public function getSalary(): ?string
  252.     {
  253.         return $this->salary;
  254.     }
  255.     public function setSalary(?string $salary): self
  256.     {
  257.         $this->salary $salary;
  258.         return $this;
  259.     }
  260.     public function getDeploymentId(): ?int
  261.     {
  262.         return $this->deploymentId;
  263.     }
  264.     public function setDeploymentId(?int $deploymentId): self
  265.     {
  266.         $this->deploymentId $deploymentId;
  267.         return $this;
  268.     }
  269.     public function getRegion(): ?Region
  270.     {
  271.         return $this->region;
  272.     }
  273.     public function setRegion(?Region $region): self
  274.     {
  275.         $this->region $region;
  276.         return $this;
  277.     }
  278.     public function getVirtualOffice(): ?VirtualOffice
  279.     {
  280.         return $this->virtualOffice;
  281.     }
  282.     public function setVirtualOffice(?VirtualOffice $virtualOffice): self
  283.     {
  284.         $this->virtualOffice $virtualOffice;
  285.         return $this;
  286.     }
  287.     public function getVirtualOfficeOther(): ?string
  288.     {
  289.         return $this->virtualOfficeOther;
  290.     }
  291.     public function setVirtualOfficeOther(?string $virtualOfficeOther): self
  292.     {
  293.         $this->virtualOfficeOther $virtualOfficeOther;
  294.         return $this;
  295.     }
  296.     public function getSalaryRange(): ?SalaryRange
  297.     {
  298.         return $this->salaryRange;
  299.     }
  300.     public function setSalaryRange(?SalaryRange $salaryRange): self
  301.     {
  302.         $this->salaryRange $salaryRange;
  303.         return $this;
  304.     }
  305.     public function getUser(): ?User
  306.     {
  307.         return $this->user;
  308.     }
  309.     public function setUser(?User $user): self
  310.     {
  311.         $this->user $user;
  312.         return $this;
  313.     }
  314.     public function __toString()
  315.     {
  316.         return $this->title . (($this->companyName) ? ' @ ' $this->companyName '');
  317.     }
  318.     public function getWorkOnGoing(): ?bool
  319.     {
  320.         return $this->workOnGoing;
  321.     }
  322.     public function setWorkOnGoing(bool $workOnGoing): self
  323.     {
  324.         $this->workOnGoing $workOnGoing;
  325.         // field not mapped, to trigger Doctrine Listener
  326.         $this->updatedAt = new \DateTime();
  327.         return $this;
  328.     }
  329.     public function getCompany(): ?Company
  330.     {
  331.         return $this->company;
  332.     }
  333.     public function setCompany(?Company $company): self
  334.     {
  335.         $this->company $company;
  336.         return $this;
  337.     }
  338.     public function getDepartment(): ?Department
  339.     {
  340.         return $this->department;
  341.     }
  342.     public function setDepartment(?Department $department): self
  343.     {
  344.         $this->department $department;
  345.         return $this;
  346.     }
  347.     public function getPosition(): ?Position
  348.     {
  349.         return $this->position;
  350.     }
  351.     public function setPosition(?Position $position): self
  352.     {
  353.         $this->position $position;
  354.         return $this;
  355.     }
  356.     public function getDivision(): ?Division
  357.     {
  358.         return $this->division;
  359.     }
  360.     public function setDivision(?Division $division): self
  361.     {
  362.         $this->division $division;
  363.         return $this;
  364.     }
  365.     public function getDivisionHead(): ?DivisionHead
  366.     {
  367.         return $this->divisionHead;
  368.     }
  369.     public function setDivisionHead(?DivisionHead $divisionHead): self
  370.     {
  371.         $this->divisionHead $divisionHead;
  372.         return $this;
  373.     }
  374.     public function getPyramidHead(): ?PyramidHead
  375.     {
  376.         return $this->pyramidHead;
  377.     }
  378.     public function setPyramidHead(?PyramidHead $pyramidHead): self
  379.     {
  380.         $this->pyramidHead $pyramidHead;
  381.         return $this;
  382.     }
  383.     public function getCity(): ?City
  384.     {
  385.         return $this->city;
  386.     }
  387.     public function setCity(?City $city): self
  388.     {
  389.         $this->city $city;
  390.         return $this;
  391.     }
  392.     /**
  393.      * @Assert\Callback(groups={"Edition-Step2"})
  394.      */
  395.     public function validateDatesBound(ExecutionContextInterface $context$payload)
  396.     {
  397.         if (null !== $this->dateFrom && !$this->getWorkOnGoing() && $this->dateFrom $this->dateTo) {
  398.             $context->buildViolation('The start date can not be greater than the end date')
  399.                 ->atPath('dateFrom')
  400.                 ->addViolation();
  401.         }
  402.     }
  403. }