feat: import work hours from SaaS and exchange signed time sheet

This commit is contained in:
fromme committed 2026-09-26 12:13:59 +02:00
1 parent 7cf39850e6
commit 1a7c272414
73 files changed
+10488 -72

No files matched your search

@@ -0,0 +1,56 @@
<?php
namespace App\Service\Common;
use App\Enum\WorkMonthStatus;
use App\Model\AbstractFilterDto;
use App\Model\WorkMonthFilterDto;
class WorkMonthFilterHandler extends AbstractFilterHandler
{
protected string $namespace = 'filter:work_month';
protected string $modelClass = WorkMonthFilterDto::class;
public function getFilterSettings(): WorkMonthFilterDto
{
$filterDto = new $this->modelClass();
if (null === $data = $this->getSession()->get($this->namespace)) {
return $filterDto;
}
$filterDto
->setTeamerName($data['teamer_name'] ?? null)
->setIncludeApproved((bool) ($data['include_approved'] ?? false))
->setIncludeMismatchedOnly((bool) ($data['include_mismatched_only'] ?? false))
;
if (null !== ($period = $data['period'] ?? null)) {
$filterDto->setPeriod(new \DateTimeImmutable($period));
}
// tryFrom rather than from: a status dropped from the enum must not fatal a session
// written before it went away.
$statuses = array_filter(array_map(
static fn (string $value) => WorkMonthStatus::tryFrom($value),
$data['statuses'] ?? [],
));
return $filterDto->setStatuses(array_values($statuses));
}
protected function saveFilterSettings(AbstractFilterDto $filterDto): void
{
/* @var WorkMonthFilterDto $filterDto */
$this->getSession()->set($this->namespace, [
'teamer_name' => $filterDto->getTeamerName(),
'period' => $filterDto->getPeriod()?->format('Y-m-d'),
'statuses' => array_map(
static fn (WorkMonthStatus $status) => $status->value,
$filterDto->getStatuses(),
),
'include_approved' => $filterDto->isIncludeApproved(),
'include_mismatched_only' => $filterDto->isIncludeMismatchedOnly(),
]);
}
}