Release 2.0.26 (#4087)

- setting "rounding days" not required
- developer: added user pref for public holiday group (to be used by plugins)
- developer: added WorkingTimeYearEvent (to be used by plugins)
- user pref: cleanup work contract form and support more fields (to be used by plugins)
- code cleanup
- bump theme and composer packages
This commit is contained in:
Kevin Papst
2023-06-09 16:29:19 +02:00
committed by GitHub
parent 0663995d06
commit 6e781b59e2
22 changed files with 241 additions and 167 deletions

View File

@@ -15,6 +15,17 @@ use App\Model\Day as BaseDay;
final class Day extends BaseDay
{
private ?WorkingTime $workingTime = null;
/** @var array<string, int> */
private array $descriptions = [];
public function isLocked(): bool
{
if ($this->workingTime !== null && $this->workingTime->isApproved()) {
return true;
}
return false;
}
public function getWorkingTime(): ?WorkingTime
{
@@ -25,4 +36,20 @@ final class Day extends BaseDay
{
$this->workingTime = $workingTime;
}
/**
* @return array<string, int>
*/
public function getDescriptions(): array
{
return $this->descriptions;
}
/**
* Descriptions show up in the approval PDF and maybe in other places as well.
*/
public function addDescription(string $description, int $duration): void
{
$this->descriptions[$description] = $duration;
}
}

View File

@@ -14,11 +14,10 @@ use App\Model\Month as BaseMonth;
/**
* @method array<Day> getDays()
* @method Day getDay(\DateTimeInterface $date)
*/
final class Month extends BaseMonth
{
private ?bool $locked = null;
/**
* A month is only locked IF every day is approved.
* If there is even one day left open, the entire month is not locked.
@@ -27,16 +26,13 @@ final class Month extends BaseMonth
*/
public function isLocked(): bool
{
if ($this->locked === null) {
$this->locked = true;
foreach ($this->getDays() as $day) {
if ($day->getWorkingTime() !== null && !$day->getWorkingTime()->isApproved()) {
$this->locked = false;
}
foreach ($this->getDays() as $day) {
if (!$day->isLocked()) {
return false;
}
}
return $this->locked;
return true;
}
public function getLockDate(): ?\DateTimeInterface

View File

@@ -11,6 +11,7 @@ namespace App\WorkingTime;
use App\Entity\User;
use App\Entity\WorkingTime;
use App\Event\WorkingTimeYearEvent;
use App\Event\WorkingTimeYearSummaryEvent;
use App\Repository\TimesheetRepository;
use App\Repository\WorkingTimeRepository;
@@ -79,12 +80,15 @@ final class WorkingTimeService
}
}
$event = new WorkingTimeYearEvent($year);
$this->eventDispatcher->dispatch($event);
return $year;
}
public function getMonth(User $user, \DateTimeInterface $monthDate): Month
{
// TODO improve me, do not calculate the entire year for that
// uses the year, because that triggers the required events to collect all different working times
$year = $this->getYear($user, $monthDate);
return $year->getMonth($monthDate);