PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.6
Booking for Appointments and Events Calendar – Amelia v2.4.6
2.4.7 2.4.6 2.4.5 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 / DeleteServiceCommandHandler.php
ameliabooking / src / Application / Commands / Bookable / Service Last commit date
AddServiceCommand.php 7 months ago AddServiceCommandHandler.php 7 months ago DeleteServiceCommand.php 7 months ago DeleteServiceCommandHandler.php 4 weeks ago GetServiceCommand.php 7 months ago GetServiceCommandHandler.php 7 months ago GetServiceDeleteEffectCommand.php 1 year ago GetServiceDeleteEffectCommandHandler.php 4 weeks ago GetServicesCommand.php 7 months ago GetServicesCommandHandler.php 1 month ago UpdateServiceCommand.php 7 months ago UpdateServiceCommandHandler.php 7 months ago UpdateServiceStatusCommand.php 7 months ago UpdateServiceStatusCommandHandler.php 4 weeks ago UpdateServicesPositionsCommand.php 1 year ago UpdateServicesPositionsCommandHandler.php 1 year ago
DeleteServiceCommandHandler.php
107 lines
1 <?php
2
3 /**
4 * @copyright © Melograno Ventures. All rights reserved.
5 * @licence See LICENCE.md for license details.
6 */
7
8 namespace AmeliaBooking\Application\Commands\Bookable\Service;
9
10 use AmeliaBooking\Application\Commands\CommandHandler;
11 use AmeliaBooking\Application\Commands\CommandResult;
12 use AmeliaBooking\Application\Common\Exceptions\AccessDeniedException;
13 use AmeliaBooking\Application\Services\Bookable\AbstractPackageApplicationService;
14 use AmeliaBooking\Application\Services\Bookable\BookableApplicationService;
15 use AmeliaBooking\Domain\Common\Exceptions\InvalidArgumentException;
16 use AmeliaBooking\Domain\Entity\Bookable\Service\Service;
17 use AmeliaBooking\Domain\Entity\Entities;
18 use AmeliaBooking\Infrastructure\Common\Exceptions\QueryExecutionException;
19 use AmeliaBooking\Infrastructure\Repository\Bookable\Service\ServiceRepository;
20 use Slim\Exception\ContainerValueNotFoundException;
21
22 /**
23 * Class DeleteServiceCommandHandler
24 *
25 * @package AmeliaBooking\Application\Commands\Bookable\Service
26 */
27 class DeleteServiceCommandHandler extends CommandHandler
28 {
29 /**
30 * @param DeleteServiceCommand $command
31 *
32 * @return CommandResult
33 * @throws ContainerValueNotFoundException
34 * @throws InvalidArgumentException
35 * @throws QueryExecutionException
36 * @throws AccessDeniedException
37 */
38 public function handle(DeleteServiceCommand $command)
39 {
40 if (!$command->getPermissionService()->currentUserCanDelete(Entities::SERVICES)) {
41 throw new AccessDeniedException('You are not allowed to delete services.');
42 }
43
44 $result = new CommandResult();
45
46 $this->checkMandatoryFields($command);
47
48 /** @var BookableApplicationService $bookableApplicationService */
49 $bookableApplicationService = $this->getContainer()->get('application.bookable.service');
50
51 /** @var AbstractPackageApplicationService $packageApplicationService */
52 $packageApplicationService = $this->container->get('application.bookable.package');
53
54 $appointmentsCount = $bookableApplicationService->getAppointmentsCountForServices([$command->getArg('id')]);
55
56 if ($appointmentsCount['futureAppointments']) {
57 $result->setResult(CommandResult::RESULT_CONFLICT);
58 $result->setMessage('Could not delete service.');
59 $result->setData([]);
60
61 return $result;
62 }
63
64 /** @var array $packages */
65 $packages = $packageApplicationService->getPackagesArray(['services' => [$command->getArg('id')]]);
66
67 if ($packages && count($packages) > 0) {
68 $result->setResult(CommandResult::RESULT_CONFLICT);
69 $result->setMessage('Could not delete service.');
70 $result->setData([]);
71
72 return $result;
73 }
74
75 /** @var ServiceRepository $serviceRepository */
76 $serviceRepository = $this->container->get('domain.bookable.service.repository');
77
78 /** @var Service $service */
79 $service = $serviceRepository->getByCriteria(
80 ['services' => [$command->getArg('id')]]
81 )->getItem($command->getArg('id'));
82
83 $serviceRepository->beginTransaction();
84
85 do_action('amelia_before_service_deleted', $service->toArray());
86
87 if (!$bookableApplicationService->deleteService($service)) {
88 $serviceRepository->rollback();
89
90 $result->setResult(CommandResult::RESULT_ERROR);
91 $result->setMessage('Could not delete service.');
92
93 return $result;
94 }
95
96 $serviceRepository->commit();
97
98 do_action('amelia_after_service_deleted', $service->toArray());
99
100 $result->setResult(CommandResult::RESULT_SUCCESS);
101 $result->setMessage('Successfully deleted service.');
102 $result->setData([]);
103
104 return $result;
105 }
106 }
107