src/Entity/Partner.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\PartnerRepository;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use Doctrine\ORM\PersistentCollection;
  8. use Gedmo\Mapping\Annotation as Gedmo;
  9. use Monolog\DateTimeImmutable;
  10. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  11. use function PHPUnit\Framework\objectEquals;
  12. use Symfony\Component\Serializer\Annotation\Groups;
  13. use Symfony\Component\Serializer\Annotation\MaxDepth;
  14. use Symfony\Component\Serializer\Serializer;
  15. use Symfony\Component\Serializer\Annotation\Ignore;
  16. /**
  17.  * @ORM\Entity(repositoryClass=PartnerRepository::class)
  18.  * @UniqueEntity(
  19.  *       fields={"company", "country"},
  20.  *       message="Partner already registered|Partner with combination (%s %s) is already registered"
  21.  *  )
  22.  */
  23. class Partner
  24. {
  25. //    // Certificate Document Subscriber
  26. //    // ________________________________________________________________________________________________________
  27. //
  28. //    private $serviceArgumentFileDirs = [];
  29. //
  30. //    # private $documentManagerController;
  31. //    private function getServiceArgumentFileDirs(): array { return $this->serviceArgumentFileDirs;  }
  32. //
  33. //    /**
  34. //     * @param $serviceArgumentFileFetchDir
  35. //     * Manage from EventSubscriber
  36. //     */
  37. //    public function setServiceArgumentFileDirs( $serviceArgumentFileFetchDir ): void {
  38. //        $this->serviceArgumentFileDirs = [
  39. //            "fetch" => $serviceArgumentFileFetchDir
  40. //        ];
  41. //    }
  42. //    // ________________________________________________________________________________________________________
  43.     /**
  44.      * @ORM\Id
  45.      * @ORM\GeneratedValue
  46.      * @ORM\Column(type="integer")
  47.      * @Groups({
  48.      *     "partner.list.base",
  49.      *     "partner.manage.base",
  50.      *     "worker.actually.activity",
  51.      *     "timesheet.for.stakeholder",
  52.      *     "partner.selected.project",
  53.      *
  54.      *     "partner.base",
  55.      *     "partner.core",
  56.      *
  57.      *     "partner@core",
  58.      *     "partner@base"
  59.      * })
  60.      */
  61.     private $id;
  62.     /**
  63.      * @ORM\Column(type="string", length=128)
  64.      * @Groups({
  65.      *     "partner.list.base",
  66.      *     "partner.manage.base",
  67.      *     "worker.actually.activity",
  68.      *     "timesheet.for.stakeholder",
  69.      *     "partner.selected.project",
  70.      *
  71.      *     "partner.base",
  72.      *     "partner.core",
  73.      *
  74.      *     "partner@core",
  75.      *     "partner@base",
  76.      *
  77.      * })
  78.      */
  79.     private $company;
  80.     /**
  81.      * @ORM\Column(type="string", unique=true, nullable=true)
  82.      * @Gedmo\Slug(fields={"company"})
  83.      * @Groups({
  84.      *     "partner.list.base",
  85.      *     "partner.manage.base",
  86.      *     "worker.actually.activity",
  87.      *     "partner.selected.project",
  88.      *
  89.      *     "partner@core",
  90.      *     "partner@base"
  91.      * })
  92.      */
  93.     private $slug;
  94.     /**
  95.      * @ORM\ManyToOne(targetEntity=Countries::class)
  96.      * @Groups({
  97.      *     "partner.list.base",
  98.      *     "partner.manage.base",
  99.      *
  100.      *     "partner@country"
  101.      * })
  102.      */
  103.     private $country;
  104.     /**
  105.      * @ORM\Column(type="string", length=255, nullable=true)
  106.      * @Groups({
  107.      *     "partner.list.base",
  108.      *     "partner.manage.base",
  109.      *
  110.      *     "partner@core"
  111.      * })
  112.      */
  113.     private $tel;
  114.     /**
  115.      * @ORM\Column(type="string", length=255, nullable=true)
  116.      * @Groups({
  117.      *     "partner.list.base",
  118.      *     "partner.manage.base",
  119.      *
  120.      *     "partner@core",
  121.      *
  122.      * })
  123.      */
  124.     private $company_logo;
  125.     /**
  126.      * ____________________________________________________________________________________________________
  127.      * @deprecated use Original Filed And Mutate is over Subscriber use company_logo instead
  128.      * Event Listener Prop
  129.      * This prop Update during event.listener
  130.      * @Groups({
  131.      *     "partner.list.base",
  132.      *     "partner.manage.base",
  133.      *     "partner@core",
  134.      *     "partner@base"
  135.      * })
  136.      */
  137.     private $logo_image_full_path;
  138.     /**
  139.      * @deprecated use Original Filed And Mutate is over Subscriber use company_logo instead
  140.      * Event Listener Prop
  141.      * This prop Update during event.listener
  142.      * @param string $logo_image_full_path
  143.      * @return Partner|null
  144.      */
  145.     public function setLogoImageFullPathstring $logo_image_full_path ): ?self {
  146.         $this->logo_image_full_path $logo_image_full_path// $this->getServiceArgumentFileDirs()['fetch'] . DIRECTORY_SEPARATOR . $this->getCompanyLogo();
  147.         return $this;
  148.     }
  149.     /**
  150.      * @deprecated use Original Filed And Mutate is over Subscriber use company_logo instead
  151.      * Event Listener Prop
  152.      */
  153.     public function getLogoImageFullPath(): ?string /* $this->getServiceArgumentFileDirs()['fetch'] . DIRECTORY_SEPARATOR . $this->getCompanyLogo(); */
  154.         return $this->logo_image_full_path;
  155.     }
  156.     //  ____________________________________________________________________________________________________
  157.     /**
  158.      * @ORM\OneToMany(targetEntity=ProjectStakeholders::class, mappedBy="partner", fetch="EXTRA_LAZY")
  159.      * @ORM\OrderBy({"id":"DESC"})
  160.      * @ORM\JoinColumn(onDelete="CASCADE")
  161.      * @Groups({
  162.      *     "partner.joined.projects",
  163.      *     "worker.join.to.project",
  164.      *     "worker.manage.selectable.stakeholder.projects",
  165.      *     "timesheet.for.partner",
  166.      *
  167.      *
  168.      *     "partner@project_stakeholders"
  169.      * })
  170.      */
  171.     private $project_stakeholders;
  172.     /**
  173.      * @ORM\OneToMany(targetEntity=WorkerActivities::class, mappedBy="partner", fetch="EXTRA_LAZY")
  174.      * @ORM\JoinColumn(onDelete="CASCADE")
  175.      * @Groups({
  176.      *     "partner.smart.active.employees",
  177.      *
  178.      *     "partner@worker_activities"
  179.      * })
  180.      */
  181.     private $worker_activities;
  182.     /**
  183.      * Ignore()
  184.      * @ORM\OneToMany(targetEntity=PartnerCertificates::class, mappedBy="partner", cascade={"persist", "remove"}, fetch="EXTRA_LAZY")
  185.      * @ORM\JoinColumn(onDelete="CASCADE")
  186.      * @Groups({
  187.      *     "partner.manage.base",
  188.      *
  189.      *     "partner@certificates"
  190.      * })
  191.      */
  192.     private $partner_certificates;
  193.     /**
  194.      * @ORM\Column(type="string", length=255, nullable=true)
  195.      * @Groups({
  196.      *     "partner.list.base",
  197.      *     "partner.manage.base",
  198.      *
  199.      *     "partner@core"
  200.      *
  201.      * })
  202.      */
  203.     private $city;
  204.     /**
  205.      * @ORM\OneToOne(targetEntity=Administrative::class, mappedBy="paired_partner", cascade={"persist", "remove"})
  206.      * @Groups({
  207.      *     "partner.manage.base",
  208.      *     "partner.list.base",
  209.      *     "worker.actually.activity",
  210.      *
  211.      *     "partner@administrative"
  212.      * })
  213.      */
  214.     private $administrative;
  215.     /**
  216.      * @ORM\Column(type="string", length=255, nullable=true)
  217.      * @Groups({
  218.      *      "partner@core"
  219.      *  })
  220.      */
  221.     private $email;
  222.     // ðŸ”¥ðŸ”¥ðŸ”¥ðŸ”¥ðŸ”¥ðŸ”¥ðŸ”¥
  223.     // TODO city, country yerine addresses lere relaion yap ve sunu ekle partner addresses isminde bi tablo adress ismi (Main, Depo etc...) conra bunu addresslere bagla
  224.     // ðŸ”¥ðŸ”¥ðŸ”¥ðŸ”¥ðŸ”¥ðŸ”¥ðŸ”¥
  225.     public function __construct()
  226.     {
  227.         $this->project_stakeholders = new ArrayCollection();
  228.         $this->worker_activities = new ArrayCollection();
  229.         $this->partner_certificates = new ArrayCollection();
  230.     }
  231.     public function getId(): ?int
  232.     {
  233.         return $this->id;
  234.     }
  235.     public function getCompany(): ?string
  236.     {
  237.         return $this->company;
  238.     }
  239.     public function setCompany(string $company): self
  240.     {
  241.         $this->company $company;
  242.         return $this;
  243.     }
  244.     public function getSlug(): ?string
  245.     {
  246.         return $this->slug;
  247.     }
  248.     public function setSlug(?string $slug): self
  249.     {
  250.         $this->slug $slug;
  251.         return $this;
  252.     }
  253.     public function getCountry(): ?Countries
  254.     {
  255.         return $this->country;
  256.     }
  257.     public function setCountry(?Countries $country): self
  258.     {
  259.         $this->country $country;
  260.         return $this;
  261.     }
  262.     public function getTel(): ?string
  263.     {
  264.         return $this->tel;
  265.     }
  266.     public function setTel(string $tel): self
  267.     {
  268.         $this->tel $tel;
  269.         return $this;
  270.     }
  271.     public function getCompanyLogo(): ?string
  272.     {
  273.         return $this->company_logo;
  274.     }
  275.     public function setCompanyLogo(?string $company_logo): self
  276.     {
  277.         $this->company_logo $company_logo;
  278.         return $this;
  279.     }
  280.     /**
  281.      * @return Collection<int, ProjectStakeholders>
  282.      */
  283.     public function getProjectStakeholders(): Collection
  284.     {
  285.         return $this->project_stakeholders;
  286.     }
  287.     /**
  288.      * @return Collection<int, WorkerActivities>
  289.      */
  290.     public function getWorkerActivities(): Collection
  291.     {
  292.         return new ArrayCollection($this->worker_activities->filter( function ( /**@var $workerActivity WorkerActivities*/ $workerActivity ){
  293.             return $workerActivity->getEntryAt() && ( is_null$workerActivity->getExitAt() ) || $workerActivity->getExitAt() > new DateTimeImmutable('now')) ;
  294.         })->getValues());
  295.     }
  296.     public function getAllWorkers(): Collection
  297.     {
  298.         return $this->worker_activities;
  299.     }
  300.     public function addWorkerActivity(WorkerActivities $workerActivity): self
  301.     {
  302.         if (!$this->worker_activities->contains($workerActivity)) {
  303.             $this->worker_activities[] = $workerActivity;
  304.             $workerActivity->setPartner($this);
  305.         }
  306.         return $this;
  307.     }
  308.     public function removeWorkerActivity(WorkerActivities $workerActivity): self
  309.     {
  310.         if ($this->worker_activities->removeElement($workerActivity)) {
  311.             // set the owning side to null (unless already changed)
  312.             if ($workerActivity->getPartner() === $this) {
  313.                 $workerActivity->setPartner(null);
  314.             }
  315.         }
  316.         return $this;
  317.     }
  318. /**
  319.  * @return Collection<int, PartnerCertificates>
  320.  */
  321. public function getPartnerCertificates(): Collection
  322. {
  323.     return $this->partner_certificates;
  324. }
  325. public function addPartnerCertificate(PartnerCertificates $partnerCertificate): self
  326. {
  327.     if (!$this->partner_certificates->contains($partnerCertificate)) {
  328.         $this->partner_certificates[] = $partnerCertificate;
  329.         $partnerCertificate->setPartner($this);
  330.     }
  331.     return $this;
  332. }
  333. public function removePartnerCertificate(PartnerCertificates $partnerCertificate): self
  334. {
  335.     if ($this->partner_certificates->removeElement($partnerCertificate)) {
  336.         // set the owning side to null (unless already changed)
  337.         if ($partnerCertificate->getPartner() === $this) {
  338.             $partnerCertificate->setPartner(null);
  339.         }
  340.     }
  341.     return $this;
  342. }
  343. public function getCity(): ?string
  344. {
  345.     return $this->city;
  346. }
  347. public function setCity(?string $city): self
  348. {
  349.     $this->city $city;
  350.     return $this;
  351. }
  352. public function getAdministrative(): ?Administrative
  353. {
  354.     return $this->administrative;
  355. }
  356. public function setAdministrative(Administrative $administrative): self
  357. {
  358.     // set the owning side of the relation if necessary
  359.     if ($administrative->getPairedPartner() !== $this) {
  360.         $administrative->setPairedPartner($this);
  361.     }
  362.     $this->administrative $administrative;
  363.     return $this;
  364. }
  365. public function getEmail(): ?string
  366. {
  367.     return $this->email;
  368. }
  369. public function setEmail(?string $email): self
  370. {
  371.     $this->email $email;
  372.     return $this;
  373. }
  374. }