vendor/croisiland/common-bundle/src/Entity/Partner/Partner.php line 29

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Croisiland\CommonBundle\Entity\Partner;
  4. use Crea\ToolsBundle\Entity\Geographic\Address;
  5. use Crea\ToolsBundle\Entity\LifecycleUserIdentifierTrait;
  6. use Crea\ToolsBundle\Entity\StatefulTrait;
  7. use Croisiland\CommonBundle\Annotation\Partner\CreatePartnerFormValidator;
  8. use Croisiland\CommonBundle\Annotation\Partner\PartnerWebsiteManagementFormValidator;
  9. use Croisiland\CommonBundle\Annotation\Partner\UpdatePartnerFormValidator;
  10. use Croisiland\CommonBundle\Entity\Offer\Offer;
  11. use Croisiland\CommonBundle\Enum\PartnerWebServiceCodeEnum;
  12. use Croisiland\CommonBundle\Repository\Partner\PartnerRepository;
  13. use DateTimeInterface;
  14. use Doctrine\Common\Collections\ArrayCollection;
  15. use Doctrine\Common\Collections\Collection;
  16. use Doctrine\ORM\Mapping as ORM;
  17. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  18. use Symfony\Component\Security\Core\User\UserInterface;
  19. /**
  20. * @ORM\Entity(repositoryClass=PartnerRepository::class)
  21. * @PartnerWebsiteManagementFormValidator(groups={"partner_website_management_form_validator"})
  22. * @CreatePartnerFormValidator(groups={"create_partner_form_validator"})
  23. * @UpdatePartnerFormValidator(groups={"update_partner_form_validator"})
  24. */
  25. class Partner
  26. {
  27. use LifecycleUserIdentifierTrait;
  28. use StatefulTrait;
  29. /**
  30. * @ORM\Id
  31. *
  32. * @ORM\GeneratedValue
  33. *
  34. * @ORM\Column(type="integer")
  35. */
  36. protected ?int $id = null;
  37. /******** Propriété attenante a la DEFINITION DU PARTENAIRE ********/
  38. /**
  39. * Code d'identification programmatique du partenaire
  40. * @ORM\Column(type="string", length=255, nullable=true)
  41. */
  42. protected ?string $code = null;
  43. /**
  44. * Nom complet du partenaire
  45. * @ORM\Column(type="string", length=255)
  46. */
  47. protected ?string $name = null;
  48. /**
  49. * Nom court du partenaire
  50. * @ORM\Column(type="string", length=25)
  51. */
  52. protected ?string $shortName = null;
  53. /**
  54. * @ORM\Column(type="string", length=255, nullable=true)
  55. */
  56. protected ?string $logo = null;
  57. /**
  58. * Nombre de membres total du partenaire annoncé lors de la signature du contrat
  59. * @ORM\Column(type="integer", nullable=true)
  60. */
  61. protected ?int $size = null;
  62. /**
  63. * Nombre de membres ayant eu un contact avec Croisiland
  64. * @ORM\Column(type="integer", nullable=true)
  65. */
  66. protected ?int $currentSize = null;
  67. /**
  68. * @ORM\Column(type="string", length=255, nullable=true)
  69. */
  70. protected ?string $partnerSiteUrl = null;
  71. /**
  72. * @ORM\Column(type="string", length=255, nullable=true)
  73. */
  74. protected ?string $partnerSiteLogin = null;
  75. /**
  76. * @ORM\Column(type="string", length=255, nullable=true)
  77. */
  78. protected ?string $partnerSiteComment = null;
  79. /**
  80. * @ORM\Column(type="text", nullable=true)
  81. */
  82. protected ?string $comment = null;
  83. /******** Propriété attenante au CONTRAT ********/
  84. /**
  85. * TODO à convertir en Parameter
  86. * @ORM\Column(type="string", length=255, nullable=true)
  87. */
  88. protected ?string $type = null;
  89. /**
  90. * TODO à convertir en Parameter
  91. * @ORM\Column(type="string", length=255, nullable=true)
  92. */
  93. protected ?string $category = null;
  94. /**
  95. * Date de clôture du partenariat
  96. * @ORM\Column(type="datetime", nullable=true)
  97. */
  98. protected ?DateTimeInterface $closingDate = null;
  99. /**
  100. * Note de clôture du partenariat
  101. * @ORM\Column(type="text", nullable=true)
  102. */
  103. protected ?string $closingDateNote = null;
  104. /**
  105. * @ORM\Column(type="datetime", nullable=true)
  106. */
  107. protected ?DateTimeInterface $deactivationDate = null;
  108. /**
  109. * Propriété renommée de "payer" pour clarifier son utilité
  110. * @ORM\Column(type="boolean", options={"default":0})
  111. */
  112. protected bool $partnerPaysForBeneficiaries = false;
  113. /**
  114. * Comptabilité : CA N (année en cours)
  115. * @ORM\Column(type="float", nullable=true)
  116. */
  117. protected ?float $currentYearTurnover = null;
  118. /**
  119. * Comptabilité : CA N-1 (année précédente)
  120. * @ORM\Column(type="float", nullable=true)
  121. */
  122. protected ?float $previousYearTurnover = null;
  123. /******** Propriété attenante à la RELATION avec le partenaire ********/
  124. /**
  125. * date de début du partenariat
  126. * @ORM\Column(type="datetime", nullable=true)
  127. */
  128. protected ?\DateTimeInterface $partnershipStartedAt = null;
  129. /**
  130. * Pour la datatable afin de pouvoir trier les partenaires en fonction de la présence ou non d'un contact
  131. * @ORM\Column(type="boolean", options={"default":0})
  132. */
  133. protected bool $hasContacts = false;
  134. /**
  135. * TODO Transferer sur SULU
  136. * @ORM\Column(type="text", nullable=true)
  137. */
  138. protected ?string $commercialDescription = null;
  139. /**
  140. * TODO Transferer sur SULU
  141. * @ORM\Column(type="text", nullable=true)
  142. */
  143. protected ?string $conditions = null;
  144. /**
  145. * TODO Transferer sur SULU
  146. * @ORM\Column(type="text", nullable=true)
  147. */
  148. protected ?string $presentation = null;
  149. /**
  150. * TODO Transferer sur SULU
  151. * @ORM\Column(type="text", nullable=true)
  152. */
  153. protected ?string $photoPresentation = null;
  154. /**
  155. * TODO Transferer sur SULU
  156. * @ORM\Column(type="text", nullable=true)
  157. */
  158. protected ?string $videoPresentation = null;
  159. /**
  160. * @ORM\Column(type="string", length=255, nullable=true, enumType=PartnerWebServiceCodeEnum::class)
  161. */
  162. protected ?PartnerWebServiceCodeEnum $webService = null;
  163. /******** Relations attenantes aux OFFRES ET REMISES ********/
  164. /**
  165. * @var Collection<int, Offer>
  166. *
  167. * @ORM\ManyToMany(targetEntity=Offer::class, mappedBy="partners")
  168. */
  169. private Collection $offers;
  170. /**
  171. * @var Collection<int, PartnerCompanyDiscount>
  172. *
  173. * @ORM\OneToMany(targetEntity=PartnerCompanyDiscount::class, mappedBy="partner", orphanRemoval=true)
  174. */
  175. private Collection $partnerCompanyDiscounts;
  176. /**
  177. * @ORM\OneToOne(targetEntity=PartnerWebsite::class, mappedBy="partner", cascade={"persist", "remove"}, orphanRemoval=true)
  178. */
  179. private ?PartnerWebsite $website = null;
  180. public function __construct()
  181. {
  182. $this->offers = new ArrayCollection();
  183. $this->partnerCompanyDiscounts = new ArrayCollection();
  184. }
  185. public function getId(): int
  186. {
  187. return $this->id;
  188. }
  189. public function getCode(): ?string
  190. {
  191. return $this->code;
  192. }
  193. public function setCode(?string $code): self
  194. {
  195. $this->code = $code;
  196. return $this;
  197. }
  198. public function getName(): ?string
  199. {
  200. return $this->name;
  201. }
  202. public function setName(?string $name): self
  203. {
  204. $this->name = $name;
  205. return $this;
  206. }
  207. public function getShortName(): ?string
  208. {
  209. return $this->shortName;
  210. }
  211. public function setShortName(?string $shortName): self
  212. {
  213. $this->shortName = $shortName;
  214. return $this;
  215. }
  216. public function getLogo(): ?string
  217. {
  218. return $this->logo;
  219. }
  220. public function setLogo(?string $logo): self
  221. {
  222. $this->logo = $logo;
  223. return $this;
  224. }
  225. public function getSize(): ?int
  226. {
  227. return $this->size;
  228. }
  229. public function setSize(?int $size): self
  230. {
  231. $this->size = $size;
  232. return $this;
  233. }
  234. public function getCurrentSize(): ?int
  235. {
  236. return $this->currentSize;
  237. }
  238. public function setCurrentSize(?int $currentSize): self
  239. {
  240. $this->currentSize = $currentSize;
  241. return $this;
  242. }
  243. public function getPartnerSiteUrl(): ?string
  244. {
  245. return $this->partnerSiteUrl;
  246. }
  247. public function setPartnerSiteUrl(?string $partnerSiteUrl): self
  248. {
  249. $this->partnerSiteUrl = $partnerSiteUrl;
  250. return $this;
  251. }
  252. public function getPartnerSiteLogin(): ?string
  253. {
  254. return $this->partnerSiteLogin;
  255. }
  256. public function setPartnerSiteLogin(?string $partnerSiteLogin): self
  257. {
  258. $this->partnerSiteLogin = $partnerSiteLogin;
  259. return $this;
  260. }
  261. public function getPartnerSiteComment(): ?string
  262. {
  263. return $this->partnerSiteComment;
  264. }
  265. public function setPartnerSiteComment(?string $partnerSiteComment): self
  266. {
  267. $this->partnerSiteComment = $partnerSiteComment;
  268. return $this;
  269. }
  270. public function getComment(): ?string
  271. {
  272. return $this->comment;
  273. }
  274. public function setComment(?string $comment): self
  275. {
  276. $this->comment = $comment;
  277. return $this;
  278. }
  279. public function getType(): ?string
  280. {
  281. return $this->type;
  282. }
  283. public function setType(?string $type): self
  284. {
  285. $this->type = $type;
  286. return $this;
  287. }
  288. public function getCategory(): ?string
  289. {
  290. return $this->category;
  291. }
  292. public function setCategory(?string $category): self
  293. {
  294. $this->category = $category;
  295. return $this;
  296. }
  297. public function getClosingDate(): ?DateTimeInterface
  298. {
  299. return $this->closingDate;
  300. }
  301. public function setClosingDate(?DateTimeInterface $closingDate): self
  302. {
  303. $this->closingDate = $closingDate;
  304. return $this;
  305. }
  306. public function getClosingDateNote(): ?string
  307. {
  308. return $this->closingDateNote;
  309. }
  310. public function setClosingDateNote(?string $closingDateNote): self
  311. {
  312. $this->closingDateNote = $closingDateNote;
  313. return $this;
  314. }
  315. public function getDeactivationDate(): ?DateTimeInterface
  316. {
  317. return $this->deactivationDate;
  318. }
  319. public function setDeactivationDate(?DateTimeInterface $deactivationDate): self
  320. {
  321. $this->deactivationDate = $deactivationDate;
  322. return $this;
  323. }
  324. public function isPartnerPaysForBeneficiaries(): bool
  325. {
  326. return $this->partnerPaysForBeneficiaries;
  327. }
  328. public function setPartnerPaysForBeneficiaries(bool $partnerPaysForBeneficiaries): self
  329. {
  330. $this->partnerPaysForBeneficiaries = $partnerPaysForBeneficiaries;
  331. return $this;
  332. }
  333. public function getCurrentYearTurnover(): ?float
  334. {
  335. return $this->currentYearTurnover;
  336. }
  337. public function setCurrentYearTurnover(?float $currentYearTurnover): self
  338. {
  339. $this->currentYearTurnover = $currentYearTurnover;
  340. return $this;
  341. }
  342. public function getPreviousYearTurnover(): ?float
  343. {
  344. return $this->previousYearTurnover;
  345. }
  346. public function setPreviousYearTurnover(?float $previousYearTurnover): self
  347. {
  348. $this->previousYearTurnover = $previousYearTurnover;
  349. return $this;
  350. }
  351. public function getPartnershipStartedAt(): ?DateTimeInterface
  352. {
  353. return $this->partnershipStartedAt;
  354. }
  355. public function setPartnershipStartedAt(?DateTimeInterface $partnershipStartedAt): self
  356. {
  357. $this->partnershipStartedAt = $partnershipStartedAt;
  358. return $this;
  359. }
  360. public function isHasContacts(): bool
  361. {
  362. return $this->hasContacts;
  363. }
  364. public function setHasContacts(bool $hasContacts): self
  365. {
  366. $this->hasContacts = $hasContacts;
  367. return $this;
  368. }
  369. public function getCommercialDescription(): ?string
  370. {
  371. return $this->commercialDescription;
  372. }
  373. public function setCommercialDescription(?string $commercialDescription): self
  374. {
  375. $this->commercialDescription = $commercialDescription;
  376. return $this;
  377. }
  378. public function getConditions(): ?string
  379. {
  380. return $this->conditions;
  381. }
  382. public function setConditions(?string $conditions): self
  383. {
  384. $this->conditions = $conditions;
  385. return $this;
  386. }
  387. public function getPresentation(): ?string
  388. {
  389. return $this->presentation;
  390. }
  391. public function setPresentation(?string $presentation): self
  392. {
  393. $this->presentation = $presentation;
  394. return $this;
  395. }
  396. public function getPhotoPresentation(): ?string
  397. {
  398. return $this->photoPresentation;
  399. }
  400. public function setPhotoPresentation(?string $photoPresentation): self
  401. {
  402. $this->photoPresentation = $photoPresentation;
  403. return $this;
  404. }
  405. public function getVideoPresentation(): ?string
  406. {
  407. return $this->videoPresentation;
  408. }
  409. public function setVideoPresentation(?string $videoPresentation): self
  410. {
  411. $this->videoPresentation = $videoPresentation;
  412. return $this;
  413. }
  414. public function getWebService(): ?PartnerWebServiceCodeEnum
  415. {
  416. return $this->webService;
  417. }
  418. public function setWebService(?PartnerWebServiceCodeEnum $webService): self
  419. {
  420. $this->webService = $webService;
  421. return $this;
  422. }
  423. /**
  424. * @return Collection<int, Offer>
  425. */
  426. public function getOffers(): Collection
  427. {
  428. return $this->offers;
  429. }
  430. public function addOffer(Offer $offer): self
  431. {
  432. if (!$this->offers->contains($offer)) {
  433. $this->offers[] = $offer;
  434. $offer->addPartner($this);
  435. }
  436. return $this;
  437. }
  438. public function removeOffer(Offer $offer): self
  439. {
  440. if ($this->offers->removeElement($offer)) {
  441. $offer->removePartner($this);
  442. }
  443. return $this;
  444. }
  445. /**
  446. * @return Collection<int, PartnerCompanyDiscount>
  447. */
  448. public function getPartnerCompanyDiscounts(): Collection
  449. {
  450. return $this->partnerCompanyDiscounts;
  451. }
  452. public function addPartnerCompanyDiscount(PartnerCompanyDiscount $partnerCompanyDiscount): self
  453. {
  454. if (!$this->partnerCompanyDiscounts->contains($partnerCompanyDiscount)) {
  455. $this->partnerCompanyDiscounts[] = $partnerCompanyDiscount;
  456. $partnerCompanyDiscount->setPartner($this);
  457. }
  458. return $this;
  459. }
  460. public function removePartnerCompanyDiscount(PartnerCompanyDiscount $partnerCompanyDiscount): self
  461. {
  462. if ($this->partnerCompanyDiscounts->removeElement($partnerCompanyDiscount)) {
  463. // set the owning side to null (unless already changed)
  464. if ($partnerCompanyDiscount->getPartner() === $this) {
  465. $partnerCompanyDiscount->setPartner(null);
  466. }
  467. }
  468. return $this;
  469. }
  470. public function getWebsite(): ?PartnerWebsite
  471. {
  472. return $this->website;
  473. }
  474. public function setWebsite(?PartnerWebsite $website): self
  475. {
  476. if ($website !== null && $website->getPartner() !== $this) {
  477. $website->setPartner($this);
  478. }
  479. $this->website = $website;
  480. return $this;
  481. }
  482. }