| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- declare(strict_types=1);
- namespace App\Service\Shop;
- use App\ApiResources\Shop\NewStructureArtistPremiumTrialRequest;
- use App\Entity\Organization\Organization;
- use App\Enum\Organization\SettingsProductEnum;
- use App\Service\Dolibarr\DolibarrApiService;
- use App\Service\Dolibarr\DolibarrUtils;
- use App\Service\Utils\DatesUtils;
- use Doctrine\ORM\EntityManagerInterface;
- /**
- * Class Trial : Service contenant les manipulations associés aux périodes d'essai.
- */
- class Trial
- {
- public function __construct(
- private DatesUtils $datesUtils,
- private EntityManagerInterface $entityManager,
- private DolibarrApiService $dolibarrApiService,
- private DolibarrUtils $dolibarrUtils,
- ) {
- }
- /**
- * Retourne le décompte sur 30 jours du dernier lancement d'essai.
- *
- * @return int
- */
- public function getTrialCountdown(?\DateTimeInterface $trialStartDate)
- {
- if (empty($trialStartDate)) {
- return 0;
- }
- $daysSince = $this->datesUtils::daysSince($trialStartDate);
- if ($daysSince > 30) {
- return 0;
- }
- return 30 - $daysSince;
- }
- /**
- * Start an artist premium trial for an organization.
- *
- * @param Organization $organization The organization to start the trial for
- * @param NewStructureArtistPremiumTrialRequest $request The trial request data
- *
- * @throws \Doctrine\DBAL\Exception
- * @throws \JsonException
- */
- public function startArtistPremiumTrialForNewStructure(
- Organization $organization,
- NewStructureArtistPremiumTrialRequest $request
- ): void
- {
- // Update settings
- $settings = $organization->getSettings();
- $settings->setProductBeforeTrial($organization->getSettings()->getProduct());
- $settings->setTrialActive(true);
- $settings->setLastTrialStartDate(DatesUtils::new());
- $settings->setProduct(SettingsProductEnum::ARTIST_PREMIUM);
- $this->entityManager->persist($settings);
- $this->entityManager->flush();
- $dolibarrSocietyId = $this->dolibarrApiService->getSocietyId($organization->getId());
- // Create contract in dolibarr
- $dolibarrProductId = $this->dolibarrUtils->getProductId(
- SettingsProductEnum::ARTIST_PREMIUM, true
- );
- $contractId = $this->dolibarrApiService->createContract(
- $dolibarrSocietyId, $dolibarrProductId, true, 1
- );
- $this->dolibarrApiService->createContractLine($contractId, $dolibarrProductId, 1);
- // Maj le représentant commercial dans dolibarr
- $this->dolibarrUtils->updateSocietyCommercialsWithApi($dolibarrSocietyId);
- // Met à jour le produit dans Dolibarr
- $productName = $this->dolibarrUtils->getDolibarrProductName(SettingsProductEnum::ARTIST_PREMIUM, true);
- $this->dolibarrApiService->updateSocietyProduct($dolibarrSocietyId, $productName);
- // Ajoute une entrée aux actions commerciales dolibarr
- $message = sprintf(
- 'Action réalisé par : %s %s.<br>Fonction : %s<br>Mail:%s<br>Tel:%s',
- $request->getRepresentativeFirstName(),
- $request->getRepresentativeLastName(),
- $request->getRepresentativeFunction(),
- $request->getRepresentativeEmail(),
- $request->getRepresentativePhone()
- );
- $this->dolibarrUtils->addActionComm(
- $dolibarrSocietyId, 'Ouverture de la période d\'essai (nouvelle structure)', $message
- );
- }
- }
|