You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
5.4KB

  1. <?php
  2. namespace domain\Producer\Producer;
  3. use common\helpers\Souke;
  4. use common\helpers\Password;
  5. use common\helpers\Upload;
  6. use common\helpers\Url;
  7. use domain\User\User\User;
  8. use domain\User\UserProducer\UserProducer;
  9. use domain\User\UserProducer\UserProducerBuilder;
  10. use domain\User\UserProducer\UserProducerRepository;
  11. use domain\_\AbstractBuilder;
  12. class ProducerBuilder extends AbstractBuilder
  13. {
  14. protected ProducerRepository $producerRepository;
  15. protected UserProducerRepository $userProducerRepository;
  16. protected UserProducerBuilder $userProducerBuilder;
  17. protected ProducerSolver $producerSolver;
  18. public function loadDependencies(): void
  19. {
  20. $this->producerRepository = $this->loadService(ProducerRepository::class);
  21. $this->userProducerRepository = $this->loadService(UserProducerRepository::class);
  22. $this->userProducerBuilder = $this->loadService(UserProducerBuilder::class);
  23. $this->producerSolver = $this->loadService(ProducerSolver::class);
  24. }
  25. public function instanciateProducer(): Producer
  26. {
  27. $producer = new Producer();
  28. $producer->order_deadline = Producer::ORDER_DEADLINE_DEFAULT;
  29. $producer->order_delay = Producer::ORDER_DELAY_DEFAULT;
  30. return $producer;
  31. }
  32. public function initProducer(Producer $producer): void
  33. {
  34. $this->initProducerSlug($producer);
  35. $this->initProducerCode($producer);
  36. }
  37. public function initProducerSlug(Producer $producer): void
  38. {
  39. $cptSlug = 0 ;
  40. do {
  41. $slug = Url::slugify($producer->name) ;
  42. if($cptSlug) {
  43. $slug .= $cptSlug ;
  44. }
  45. $producer->slug = $slug ;
  46. $cptSlug ++ ;
  47. } while($this->producerRepository->findOneProducerBySlug($producer->slug)) ;
  48. }
  49. public function initProducerCode(Producer $producer): void
  50. {
  51. $producer->code = Password::generate();
  52. }
  53. /**
  54. * Lie un utilisateur à un producteur.
  55. */
  56. public function addUser(User $user, Producer $producer, bool $bookmark = true, bool $newsletter = true): UserProducer
  57. {
  58. $userProducer = $this->userProducerBuilder->createUserProducerIfNotExist($user, $producer, $bookmark, $newsletter);
  59. if (!$userProducer->getActive()) {
  60. $userProducer->setActive(true);
  61. }
  62. $this->update($userProducer);
  63. return $userProducer;
  64. }
  65. public function updateOpendistribVersion(Producer $producer): void
  66. {
  67. $versionsArray = Souke::getVersions();
  68. $producer->latest_version_opendistrib = reset($versionsArray);
  69. $this->update($producer);
  70. }
  71. public function savePrivateKeyStripe($filename, $value)
  72. {
  73. if (strlen($value) > 0) {
  74. $handle = fopen($filename, "w");
  75. fwrite($handle, $value);
  76. fclose($handle);
  77. }
  78. }
  79. public function savePrivateKeyApiStripe(Producer $producer): void
  80. {
  81. $this->savePrivateKeyStripe(
  82. $this->producerSolver->getFilenamePrivateKeyApiStripe($producer),
  83. $producer->option_stripe_private_key
  84. );
  85. }
  86. public function savePrivateKeyEndpointStripe(Producer $producer): void
  87. {
  88. $this->savePrivateKeyStripe(
  89. $this->producerSolver->getFilenamePrivateKeyEndpointStripe($producer),
  90. $producer->option_stripe_endpoint_secret
  91. );
  92. }
  93. public function savePrivateKeysStripe(Producer $producer)
  94. {
  95. $this->savePrivateKeyApiStripe($producer);
  96. $this->savePrivateKeyEndpointStripe($producer);
  97. $producer->option_stripe_private_key = '';
  98. $producer->option_stripe_endpoint_secret = '';
  99. $producer->save();
  100. }
  101. public function initOptionsDatesBeforeSave(Producer $producer): void
  102. {
  103. $this->initOptionsDatesBeforeSaveByField($producer, 'option_dashboard_date_start');
  104. $this->initOptionsDatesBeforeSaveByField($producer, 'option_dashboard_date_end');
  105. $this->initOptionsDatesBeforeSaveByField($producer, 'option_leave_period_start');
  106. $this->initOptionsDatesBeforeSaveByField($producer, 'option_leave_period_end');
  107. }
  108. public function initOptionsDatesDisplay(Producer $producer): void
  109. {
  110. $this->initOptionsDatesDisplayByField($producer, 'option_dashboard_date_start');
  111. $this->initOptionsDatesDisplayByField($producer, 'option_dashboard_date_end');
  112. $this->initOptionsDatesDisplayByField($producer, 'option_leave_period_start');
  113. $this->initOptionsDatesDisplayByField($producer, 'option_leave_period_end');
  114. }
  115. private function initOptionsDatesBeforeSaveByField(Producer $producer, string $field): void
  116. {
  117. if ($producer->$field && strlen($producer->$field)) {
  118. $producer->$field = date(
  119. 'Y-m-d',
  120. strtotime(str_replace('/', '-', $producer->$field))
  121. );
  122. }
  123. }
  124. private function initOptionsDatesDisplayByField(Producer $producer, string $field): void
  125. {
  126. if (strlen($producer->$field)) {
  127. $producer->$field = date('d/m/Y', strtotime($producer->$field));
  128. }
  129. }
  130. public function processUploadImage(Producer $producer, string $name, string $filenameOld = null, bool $deleteImage = false)
  131. {
  132. Upload::uploadFile($producer, $name.'File', $name, $filenameOld);
  133. if ($deleteImage) {
  134. $producer->$name = '';
  135. $producer->save();
  136. }
  137. }
  138. }