From 9a2eabecc94727373075e1d76c9de141e8d8f452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Stan=C4=9Bk?= Date: Mon, 26 Dec 2022 09:43:38 +0100 Subject: [PATCH] =?UTF-8?q?Maz=C3=A1n=C3=AD=20skupin=20a=20dru=C5=BEin=20(?= =?UTF-8?q?#941)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * remove groups * format --- .../Components/PatrolsGridControl.php | 40 +++++++++++---- .../Components/TroopsGridControl.php | 51 ++++++++++--------- .../Commands/Handlers/RemovePatrolHandler.php | 38 ++++++++++++++ .../Commands/Handlers/RemoveTroopHandler.php | 45 ++++++++++++++++ app/Model/User/Commands/RemovePatrol.php | 19 +++++++ app/Model/User/Commands/RemoveTroop.php | 19 +++++++ .../User/Repositories/PatrolRepository.php | 6 +++ .../User/Repositories/TroopRepository.php | 6 +++ 8 files changed, 188 insertions(+), 36 deletions(-) create mode 100644 app/Model/User/Commands/Handlers/RemovePatrolHandler.php create mode 100644 app/Model/User/Commands/Handlers/RemoveTroopHandler.php create mode 100644 app/Model/User/Commands/RemovePatrol.php create mode 100644 app/Model/User/Commands/RemoveTroop.php diff --git a/app/AdminModule/UsersModule/Components/PatrolsGridControl.php b/app/AdminModule/UsersModule/Components/PatrolsGridControl.php index d1d2449c3..9ae6e4a8b 100644 --- a/app/AdminModule/UsersModule/Components/PatrolsGridControl.php +++ b/app/AdminModule/UsersModule/Components/PatrolsGridControl.php @@ -4,9 +4,12 @@ namespace App\AdminModule\UsersModule\Components; +use App\Model\User\Commands\RemovePatrol; use App\Model\User\Patrol; use App\Model\User\Repositories\PatrolRepository; +use App\Services\CommandBus; use App\Utils\Helpers; +use Nette\Application\AbortException; use Nette\Application\UI\Control; use Nette\Localization\Translator; use Nette\Utils\Html; @@ -24,8 +27,9 @@ class PatrolsGridControl extends Control { public function __construct( + private CommandBus $commandBus, private Translator $translator, - private PatrolRepository $repository + private PatrolRepository $patrolRepository ) { } @@ -49,7 +53,7 @@ public function createComponentPatrolsGrid(string $name): DataGrid { $grid = new DataGrid($this, $name); $grid->setTranslator($this->translator); - $grid->setDataSource($this->repository->createQueryBuilder('p')->where('p.confirmed = true')); + $grid->setDataSource($this->patrolRepository->createQueryBuilder('p')->where('p.confirmed = true')); $grid->setDefaultSort(['displayName' => 'ASC']); $grid->setColumnsHideable(); $grid->setItemsPerPageList([25, 50, 100, 250, 500]); @@ -78,21 +82,35 @@ public function createComponentPatrolsGrid(string $name): DataGrid }) ->setSortable(); - $grid->addColumnText('userRoles', 'Počet osob') + $grid->addColumnNumber('userRoles', 'Počet osob') ->setRenderer(static fn (Patrol $p) => count($p->getUsersRoles())); // je to správné číslo? // $grid->addAction('detail', 'admin.common.detail', 'Patrols:detail') // destinace // ->setClass('btn btn-xs btn-primary'); -// $grid->addAction('delete', '', 'delete!') -// ->setIcon('trash') -// ->setTitle('admin.common.delete') -// ->setClass('btn btn-xs btn-danger') -// ->addAttributes([ -// 'data-toggle' => 'confirmation', -// 'data-content' => $this->translator->translate('admin.users.users_delete_confirm'), -// ]); + $grid->addAction('delete', '', 'delete!') + ->setIcon('trash') + ->setTitle('admin.common.delete') + ->setClass('btn btn-xs btn-danger') + ->addAttributes([ + 'data-toggle' => 'confirmation', + 'data-content' => $this->translator->translate('Opravdu chcete družinu odstranit?'), + ]); return $grid; } + + /** + * Zpracuje odstranění družiny. + * + * @throws AbortException + */ + public function handleDelete(int $id): void + { + $patrol = $this->patrolRepository->findById($id); + $this->commandBus->handle(new RemovePatrol($patrol)); + $p = $this->getPresenter(); + $p->flashMessage('Družina byla úspěšně odstraněna.', 'success'); + $p->redirect('this'); + } } diff --git a/app/AdminModule/UsersModule/Components/TroopsGridControl.php b/app/AdminModule/UsersModule/Components/TroopsGridControl.php index c64587342..f02f24d6e 100644 --- a/app/AdminModule/UsersModule/Components/TroopsGridControl.php +++ b/app/AdminModule/UsersModule/Components/TroopsGridControl.php @@ -5,8 +5,10 @@ namespace App\AdminModule\UsersModule\Components; use App\Model\Acl\Role; +use App\Model\User\Commands\RemoveTroop; use App\Model\User\Repositories\TroopRepository; use App\Model\User\Troop; +use App\Services\CommandBus; use App\Utils\Helpers; use Doctrine\ORM\QueryBuilder; use Nette\Application\AbortException; @@ -27,8 +29,9 @@ class TroopsGridControl extends Control { public function __construct( + private CommandBus $commandBus, private Translator $translator, - private TroopRepository $repository + private TroopRepository $troopRepository ) { } @@ -52,7 +55,7 @@ public function createComponentPatrolsGrid(string $name): DataGrid { $grid = new DataGrid($this, $name); $grid->setTranslator($this->translator); - $grid->setDataSource($this->repository->createQueryBuilder('p')); + $grid->setDataSource($this->troopRepository->createQueryBuilder('p')); $grid->setDefaultSort(['displayName' => 'ASC']); $grid->setColumnsHideable(); $grid->setItemsPerPageList([25, 50, 100, 250, 500]); @@ -135,33 +138,31 @@ public function createComponentPatrolsGrid(string $name): DataGrid $grid->addAction('detail', 'admin.common.detail', 'Troops:detail') ->setClass('btn btn-xs btn-primary'); -// $grid->addAction('delete', '', 'delete!') -// ->setIcon('trash') -// ->setTitle('admin.common.delete') -// ->setClass('btn btn-xs btn-danger') -// ->addAttributes([ -// 'data-toggle' => 'confirmation', -// 'data-content' => $this->translator->translate('admin.users.users_delete_confirm'), -// ]); + $grid->addAction('delete', '', 'delete!') + ->setIcon('trash') + ->setTitle('admin.common.delete') + ->setClass('btn btn-xs btn-danger') + ->addAttributes([ + 'data-toggle' => 'confirmation', + 'data-content' => $this->translator->translate('Opravdu chcete skupinu odstranit?'), + ]); return $grid; } -// /** -// * Zpracuje odstranění externí skupiny. -// * -// * @throws AbortException -// */ -// public function handleDelete(int $id): void -// { -// $rec = $this->repository->findById($id); -// -// $this->repository->remove($rec); -// -// $p = $this->getPresenter(); -// $p->flashMessage('Skupina smazána.', 'success'); -// $p->redirect('this'); -// } + /** + * Zpracuje odstranění skupiny. + * + * @throws AbortException + */ + public function handleDelete(int $id): void + { + $troop = $this->troopRepository->findById($id); + $this->commandBus->handle(new RemoveTroop($troop)); + $p = $this->getPresenter(); + $p->flashMessage('Skupina byla úspěšně odstraněna.', 'success'); + $p->redirect('this'); + } /** * Vygeneruje potvrzení o přijetí platby. diff --git a/app/Model/User/Commands/Handlers/RemovePatrolHandler.php b/app/Model/User/Commands/Handlers/RemovePatrolHandler.php new file mode 100644 index 000000000..05767f7de --- /dev/null +++ b/app/Model/User/Commands/Handlers/RemovePatrolHandler.php @@ -0,0 +1,38 @@ +em->wrapInTransaction(function () use ($command): void { + foreach ($command->getPatrol()->getUsersRoles() as $userRole) { + $user = $userRole->getUser(); + $this->userGroupRoleRepository->remove($userRole); + if ($user->getRoles()->isEmpty() && $user->getGroupRoles()->isEmpty()) { + $this->userRepository->remove($user); + } + } + + $this->patrolRepository->remove($command->getPatrol()); + }); + } +} diff --git a/app/Model/User/Commands/Handlers/RemoveTroopHandler.php b/app/Model/User/Commands/Handlers/RemoveTroopHandler.php new file mode 100644 index 000000000..6b707bafe --- /dev/null +++ b/app/Model/User/Commands/Handlers/RemoveTroopHandler.php @@ -0,0 +1,45 @@ +em->wrapInTransaction(function () use ($command): void { + foreach ($command->getTroop()->getPatrols() as $patrol) { + $this->commandBus->handle(new RemovePatrol($patrol)); + } + + foreach ($command->getTroop()->getUsersRoles() as $userRole) { + $user = $userRole->getUser(); + $this->userGroupRoleRepository->remove($userRole); + if ($user->getRoles()->isEmpty() && $user->getGroupRoles()->isEmpty()) { + $this->userRepository->remove($user); + } + } + + $this->troopRepository->remove($command->getTroop()); + }); + } +} diff --git a/app/Model/User/Commands/RemovePatrol.php b/app/Model/User/Commands/RemovePatrol.php new file mode 100644 index 000000000..f59e78218 --- /dev/null +++ b/app/Model/User/Commands/RemovePatrol.php @@ -0,0 +1,19 @@ +patrol; + } +} diff --git a/app/Model/User/Commands/RemoveTroop.php b/app/Model/User/Commands/RemoveTroop.php new file mode 100644 index 000000000..40f2df601 --- /dev/null +++ b/app/Model/User/Commands/RemoveTroop.php @@ -0,0 +1,19 @@ +troop; + } +} diff --git a/app/Model/User/Repositories/PatrolRepository.php b/app/Model/User/Repositories/PatrolRepository.php index b162dd7bb..2c18d0a6c 100644 --- a/app/Model/User/Repositories/PatrolRepository.php +++ b/app/Model/User/Repositories/PatrolRepository.php @@ -33,4 +33,10 @@ public function save(Patrol $patrol): void $this->em->persist($patrol); $this->em->flush(); } + + public function remove(Patrol $patrol): void + { + $this->em->remove($patrol); + $this->em->flush(); + } } diff --git a/app/Model/User/Repositories/TroopRepository.php b/app/Model/User/Repositories/TroopRepository.php index 25fdc84e4..5ca5ecc1d 100644 --- a/app/Model/User/Repositories/TroopRepository.php +++ b/app/Model/User/Repositories/TroopRepository.php @@ -132,4 +132,10 @@ public function save(Troop $troop): void $this->em->persist($troop); $this->em->flush(); } + + public function remove(Troop $troop): void + { + $this->em->remove($troop); + $this->em->flush(); + } }