<?php declare(strict_types=1); namespace Xentral\Modules\SubscriptionCycle; use Xentral\Modules\SubscriptionCycle\Data\SubscriptionCycleArticleData; use Xentral\Modules\SubscriptionCycle\Data\SubscriptionCycleAutoSubscriptionData; use Xentral\Modules\SubscriptionCycle\Exception\AutoSubscriptionNotFoundException; use Xentral\Modules\SubscriptionCycle\Exception\RuntimeException; use Xentral\Modules\SubscriptionCycle\Exception\ValidationFailedException; use Xentral\Modules\SubscriptionCycle\Service\SubscriptionCycleArticleService; use Xentral\Modules\SubscriptionCycle\Service\SubscriptionCycleAutoSubscriptionGateway; use Xentral\Modules\SubscriptionCycle\Service\SubscriptionCycleAutoSubscriptionService; use Xentral\Modules\SubscriptionCycle\Wrapper\BusinessLetterWrapper; final class AutoSubscriptionModule { /** @var SubscriptionCycleAutosubScriptionService $autosubscriptionService */ private $autoSubscriptionService; /** @var SubscriptionCycleAutoSubscriptionGateway $autosubscriptionGateway */ private $autoSubscriptionGateway; /** @var SubscriptionCycleArticleService $subscriptionCycleArticleService */ private $subscriptionCycleArticleService; /** @var BusinessLetterWrapper $businessLetterWrapper */ private $businessLetterWrapper; /** * @param SubscriptionCycleAutoSubscriptionService $autoSubscriptionService * @param SubscriptionCycleAutoSubscriptionGateway $autoSubscriptionGateway * @param SubscriptionCycleArticleService $subscriptionCycleArticleService * @param BusinessLetterWrapper $businessLetterWrapper */ public function __construct( SubscriptionCycleAutoSubscriptionService $autoSubscriptionService, SubscriptionCycleAutoSubscriptionGateway $autoSubscriptionGateway, SubscriptionCycleArticleService $subscriptionCycleArticleService, BusinessLetterWrapper $businessLetterWrapper ) { $this->autoSubscriptionService = $autoSubscriptionService; $this->autoSubscriptionGateway = $autoSubscriptionGateway; $this->subscriptionCycleArticleService = $subscriptionCycleArticleService; $this->businessLetterWrapper = $businessLetterWrapper; } /** * @param SubscriptionCycleAutoSubscriptionData $autosubscription * * @throws ValidationFailedException */ public function saveNewAutoSubscription(SubscriptionCycleAutoSubscriptionData $autosubscription): void { $this->autoSubscriptionService->create($autosubscription); } /** * @param SubscriptionCycleAutoSubscriptionData $autosubscription * * @throws ValidationFailedException * @throws AutoSubscriptionNotFoundException */ public function updateAutoSubscription(SubscriptionCycleAutoSubscriptionData $autosubscription): void { $this->autoSubscriptionService->edit($autosubscription); } /** * @param int $autoSubscriptionId * * @throws AutoSubscriptionNotFoundException * * @return SubscriptionCycleAutoSubscriptionData */ public function getAutoSubscriptionById(int $autoSubscriptionId): SubscriptionCycleAutoSubscriptionData { $autosubscription = $this->autoSubscriptionGateway->getById($autoSubscriptionId); return $autosubscription; } /** * @param int $autoSubscriptionId * * @throws AutoSubscriptionNotFoundException * @throws RuntimeException */ public function deleteAutoSubscriptionById(int $autoSubscriptionId): void { $this->autoSubscriptionService->removeById($autoSubscriptionId); } /** * @param int $docId */ public function createSubscription(int $docId): void { $data = $this->autoSubscriptionGateway->findAutoSubscriptionData($docId); if (!empty($data)) { foreach ($data as $d) { $subscriptionArticle = SubscriptionCycleArticleData::fromArray($d); $this->subscriptionCycleArticleService->create($subscriptionArticle); if ($d['prevent_auto_dispatch'] == 1) { $this->autoSubscriptionService->preventAutoDispatch($docId); } } $this->businessLetterWrapper->sendBusinessLetter($data, $docId); } } /** * @param int $docId * * @return bool */ public function hasDocAutoSubscription(int $docId): bool { $data = $this->autoSubscriptionGateway->findAutoSubscriptionData($docId); if (!empty($data)) { return true; } return false; } }