feat: import work hours from SaaS and exchange signed time sheet
This commit is contained in:
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(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user