PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / trunk
Booking for Appointments and Events Calendar – Amelia vtrunk
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / src / Application / Commands / Bookable / Service / GetServiceDeleteEffectCommandHandler.php
ameliabooking / src / Application / Commands / Bookable / Service Last commit date
AddServiceCommand.php 6 months ago AddServiceCommandHandler.php 6 months ago DeleteServiceCommand.php 6 months ago DeleteServiceCommandHandler.php 3 months ago GetServiceCommand.php 6 months ago GetServiceCommandHandler.php 6 months ago GetServiceDeleteEffectCommand.php 1 year ago GetServiceDeleteEffectCommandHandler.php 3 months ago GetServicesCommand.php 6 months ago GetServicesCommandHandler.php 2 weeks ago UpdateServiceCommand.php 6 months ago UpdateServiceCommandHandler.php 6 months ago UpdateServiceStatusCommand.php 6 months ago UpdateServiceStatusCommandHandler.php 6 months ago UpdateServicesPositionsCommand.php 1 year ago UpdateServicesPositionsCommandHandler.php 1 year ago
GetServiceDeleteEffectCommandHandler.php
81 lines
1 <?php
2
3 namespace AmeliaBooking\Application\Commands\Bookable\Service;
4
5 use AmeliaBooking\Application\Common\Exceptions\AccessDeniedException;
6 use AmeliaBooking\Application\Services\Bookable\BookableApplicationService;
7 use AmeliaBooking\Domain\Collection\Collection;
8 use AmeliaBooking\Domain\Common\Exceptions\InvalidArgumentException;
9 use AmeliaBooking\Domain\Entity\Entities;
10 use AmeliaBooking\Application\Commands\CommandResult;
11 use AmeliaBooking\Application\Commands\CommandHandler;
12 use AmeliaBooking\Infrastructure\Common\Exceptions\QueryExecutionException;
13 use AmeliaBooking\Infrastructure\Repository\Bookable\Service\PackageRepository;
14 use Slim\Exception\ContainerValueNotFoundException;
15
16 /**
17 * Class GetServiceDeleteEffectCommandHandler
18 *
19 * @package AmeliaBooking\Application\Commands\Bookable\Service
20 */
21 class GetServiceDeleteEffectCommandHandler extends CommandHandler
22 {
23 /**
24 * @param GetServiceDeleteEffectCommand $command
25 *
26 * @return CommandResult
27 * @throws ContainerValueNotFoundException
28 * @throws AccessDeniedException
29 * @throws QueryExecutionException
30 * @throws InvalidArgumentException
31 */
32 public function handle(GetServiceDeleteEffectCommand $command)
33 {
34 if (!$command->getPermissionService()->currentUserCanRead(Entities::SERVICES)) {
35 throw new AccessDeniedException('You are not allowed to read services');
36 }
37
38 $result = new CommandResult();
39
40 /** @var PackageRepository $packageRepository */
41 $packageRepository = $this->container->get('domain.bookable.package.repository');
42
43 /** @var BookableApplicationService $bookableAS */
44 $bookableAS = $this->getContainer()->get('application.bookable.service');
45
46 $appointmentsCount = $bookableAS->getAppointmentsCountForServices([$command->getArg('id')]);
47
48 $messageKey = '';
49 $messageData = null;
50
51 if ($appointmentsCount['futureAppointments'] > 0) {
52 $messageKey = 'red_delete_service_effect_future';
53 $messageData = ['count' => $appointmentsCount['futureAppointments']];
54 } elseif ($appointmentsCount['packageAppointments']) {
55 $messageKey = 'red_delete_service_effect_package';
56 } elseif ($appointmentsCount['pastAppointments'] > 0) {
57 $messageKey = 'red_delete_service_effect_past';
58 $messageData = ['count' => $appointmentsCount['pastAppointments']];
59 }
60
61 /** @var Collection $packages */
62 $packages = $packageRepository->getByCriteria(['services' => [$command->getArg('id')]]);
63
64 if ($packages->length()) {
65 $messageKey = 'red_service_failed_to_be_deleted';
66 }
67
68 $result->setResult(CommandResult::RESULT_SUCCESS);
69 $result->setMessage('Successfully retrieved message.');
70 $result->setData(
71 [
72 'valid' => !$appointmentsCount['futureAppointments'] && !$packages->length(),
73 'messageKey' => $messageKey,
74 'messageData' => $messageData,
75 ]
76 );
77
78 return $result;
79 }
80 }
81