Skip to content

Commit

Permalink
Export skupin pro NSJ, deduplikace exportu uživatelů (#967)
Browse files Browse the repository at this point in the history
* export group skautis ids

* ignore phpstan bug

* ignore phpstan bug
  • Loading branch information
jan-stanek committed Apr 13, 2023
1 parent 71ac4bf commit 3c7d3a4
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 5 deletions.
15 changes: 15 additions & 0 deletions app/AdminModule/UsersModule/Components/TroopsGridControl.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@
namespace App\AdminModule\UsersModule\Components;

use App\Model\Acl\Role;
use App\Model\Enums\TroopApplicationState;
use App\Model\User\Commands\RemoveTroop;
use App\Model\User\Queries\TroopsByStateQuery;
use App\Model\User\Repositories\TroopRepository;
use App\Model\User\Troop;
use App\Services\CommandBus;
use App\Services\ExcelExportService;
use App\Services\QueryBus;
use App\Utils\Helpers;
use Doctrine\ORM\QueryBuilder;
use Exception;
Expand All @@ -34,6 +37,7 @@ class TroopsGridControl extends Control
private SessionSection $sessionSection;

public function __construct(
private QueryBus $queryBus,
private CommandBus $commandBus,
private Translator $translator,
private TroopRepository $troopRepository,
Expand Down Expand Up @@ -72,6 +76,8 @@ public function createComponentPatrolsGrid(string $name): DataGrid
$grid->addGroupAction('Export seznamu skupin')
->onSelect[] = [$this, 'groupExportTroops'];

$grid->addToolbarButton('exportNsjTroops', 'Export NSJ - skupiny');

$grid->addColumnText('name', 'Název')
->setSortable()
->setFilterText();
Expand Down Expand Up @@ -217,4 +223,13 @@ public function handleExportTroops(): void

$this->getPresenter()->sendResponse($response);
}

public function handleExportNsjTroops(): void
{
$troops = $this->queryBus->handle(new TroopsByStateQuery(TroopApplicationState::PAID));

$response = $this->excelExportService->exportNsjTroops($troops, 'nsj-skupiny.xlsx');

$this->getPresenter()->sendResponse($response);
}
}
85 changes: 80 additions & 5 deletions app/Services/ExcelExportService.php
Original file line number Diff line number Diff line change
Expand Up @@ -690,6 +690,51 @@ public function exportTroopsList(Collection $troops, string $filename): ExcelRes
return new ExcelResponse($this->spreadsheet, $filename);
}

/**
* @param Collection<int, Troop> $troops
*
* @throws Exception
*/
public function exportNsjTroops(Collection $troops, string $filename): ExcelResponse
{
$sheet = $this->spreadsheet->getSheet(0);

$row = 1;
$column = 1;

$sheet->setCellValue([$column, $row], $this->translator->translate('Název'));
$sheet->getStyle([$column, $row])->getFont()->setBold(true);
$sheet->getColumnDimensionByColumn($column)->setAutoSize(false);
$sheet->getColumnDimensionByColumn($column++)->setWidth(20);

$sheet->setCellValue([$column, $row], $this->translator->translate('Vedoucí - jméno'));
$sheet->getStyle([$column, $row])->getFont()->setBold(true);
$sheet->getColumnDimensionByColumn($column)->setAutoSize(false);
$sheet->getColumnDimensionByColumn($column++)->setWidth(30);

$sheet->setCellValue([$column, $row], $this->translator->translate('Vedoucí - userId'));
$sheet->getStyle([$column, $row])->getFont()->setBold(true);
$sheet->getColumnDimensionByColumn($column)->setAutoSize(false);
$sheet->getColumnDimensionByColumn($column++)->setWidth(20);

$sheet->setCellValue([$column, $row], $this->translator->translate('Vedoucí - personId'));
$sheet->getStyle([$column, $row])->getFont()->setBold(true);
$sheet->getColumnDimensionByColumn($column)->setAutoSize(false);
$sheet->getColumnDimensionByColumn($column++)->setWidth(20);

foreach ($troops as $troop) {
$row++;
$column = 1;

$sheet->setCellValue([$column++, $row], $troop->getName());
$sheet->setCellValue([$column++, $row], $troop->getLeader()->getDisplayName());
$sheet->setCellValue([$column++, $row], $troop->getLeader()->getSkautISUserId());
$sheet->setCellValue([$column++, $row], $troop->getLeader()->getSkautISPersonId());
}

return new ExcelResponse($this->spreadsheet, $filename);
}

/**
* @param Troop[] $troops
*/
Expand Down Expand Up @@ -811,13 +856,35 @@ public function exportNsjAttendees($troops, string $filename): ExcelResponse
$sheet->setCellValue([$column++, $row], $code);
}

$allUsers = new ArrayCollection();
$duplicitUsers = new ArrayCollection();
$exportedUsers = new ArrayCollection();

foreach ($troop->getConfirmedPatrols() as $patrol) {
foreach ($patrol->getUsersRoles() as $usersRole) {
$userId = $usersRole->getUser()->getId();

if ($allUsers->contains($userId)) {
$duplicitUsers->add($userId);
} else {
$allUsers->add($userId);
}
}
}

foreach ($troop->getConfirmedPatrols() as $patrol) {
$i = 0;

foreach ($patrol->getUsersRoles() as $usersRole) {
$user = $usersRole->getUser();
$i++;

if ($exportedUsers->contains($user->getId())) {
continue;
}

$exportedUsers->add($user->getId());

$row++;
$column = 1;

Expand All @@ -835,12 +902,20 @@ public function exportNsjAttendees($troops, string $filename): ExcelResponse
$sheet->setCellValue([$column++, $row], $user->getHealthInfo());
$sheet->setCellValue([$column++, $row], $usersRole->getRole()->getName());
$sheet->setCellValue([$column++, $row], $troop->getName());
$sheet->setCellValue([$column++, $row], $patrol->getName());

$code = substr($troop->getVariableSymbolText(), -4) . '-'
. substr($patrol->getName(), -2) . '-'
. str_pad((string) $i, 2, '0', STR_PAD_LEFT);
$sheet->setCellValue([$column++, $row], $code);
if ($duplicitUsers->contains($user->getId())) {
$sheet->setCellValue([$column++, $row], '');

$code = substr($troop->getVariableSymbolText(), -4) . '-00-00';
$sheet->setCellValue([$column++, $row], $code);
} else {
$sheet->setCellValue([$column++, $row], $patrol->getName());

$code = substr($troop->getVariableSymbolText(), -4) . '-'
. substr($patrol->getName(), -2) . '-'
. str_pad((string) $i, 2, '0', STR_PAD_LEFT);
$sheet->setCellValue([$column++, $row], $code);
}
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ parameters:
-
message: '#^Parameter \#1 \$translator of method Ublaboo\\DataGrid\\DataGrid::setTranslator\(\) expects Nette\\Localization\\ITranslator, Nette\\Localization\\Translator given.$#'
path: app/*/*GridControl.php
-
message: '#^If condition is always false.$#'
path: app/Services/ExcelExportService.php

services:
- class: CodeQuality\ObjectIdentityComparisonRule
Expand Down

0 comments on commit 3c7d3a4

Please sign in to comment.