added API for handling work contract times (#4016)
This commit is contained in:
24
src/Model/Day.php
Normal file
24
src/Model/Day.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Kimai time-tracking app.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace App\Model;
|
||||
|
||||
use DateTimeInterface;
|
||||
|
||||
class Day
|
||||
{
|
||||
public function __construct(private DateTimeInterface $day)
|
||||
{
|
||||
}
|
||||
|
||||
public function getDay(): DateTimeInterface
|
||||
{
|
||||
return $this->day;
|
||||
}
|
||||
}
|
||||
54
src/Model/Month.php
Normal file
54
src/Model/Month.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Kimai time-tracking app.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace App\Model;
|
||||
|
||||
use DateTimeInterface;
|
||||
|
||||
class Month
|
||||
{
|
||||
/**
|
||||
* @var Day[]
|
||||
*/
|
||||
private array $days = [];
|
||||
|
||||
public function __construct(private \DateTimeInterface $month)
|
||||
{
|
||||
$date = new \DateTimeImmutable($this->month->format('Y-m-01 00:00:00'));
|
||||
$start = $date->format('m');
|
||||
while ($start === $date->format('m')) {
|
||||
$day = $this->createDay($date);
|
||||
$this->setDay($day);
|
||||
$date = $date->add(new \DateInterval('P1D'));
|
||||
}
|
||||
}
|
||||
|
||||
protected function createDay(\DateTimeInterface $day): Day
|
||||
{
|
||||
return new Day($day);
|
||||
}
|
||||
|
||||
public function getMonth(): DateTimeInterface
|
||||
{
|
||||
return $this->month;
|
||||
}
|
||||
|
||||
protected function setDay(Day $day): void
|
||||
{
|
||||
$this->days['_' . $day->getDay()->format('d')] = $day;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Day[]
|
||||
*/
|
||||
public function getDays(): array
|
||||
{
|
||||
return array_values($this->days);
|
||||
}
|
||||
}
|
||||
60
src/Model/Year.php
Normal file
60
src/Model/Year.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Kimai time-tracking app.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace App\Model;
|
||||
|
||||
use DateTimeInterface;
|
||||
|
||||
class Year
|
||||
{
|
||||
/**
|
||||
* @var Month[]
|
||||
*/
|
||||
private array $months = [];
|
||||
|
||||
public function __construct(private DateTimeInterface $month)
|
||||
{
|
||||
$monthDate = new \DateTimeImmutable();
|
||||
$monthDate = $monthDate->setDate((int) $this->month->format('Y'), 1, 1);
|
||||
$monthDate = $monthDate->setTime(1, 0);
|
||||
for ($i = 1; $i < 13; $i++) {
|
||||
$month = $this->createMonth($monthDate);
|
||||
$this->setMonth($month);
|
||||
$monthDate = $monthDate->add(new \DateInterval('P1M'));
|
||||
}
|
||||
}
|
||||
|
||||
protected function createMonth(\DateTimeInterface $month): Month
|
||||
{
|
||||
return new Month($month);
|
||||
}
|
||||
|
||||
public function getYear(): DateTimeInterface
|
||||
{
|
||||
return $this->month;
|
||||
}
|
||||
|
||||
protected function setMonth(Month $month): void
|
||||
{
|
||||
$this->months['_' . $month->getMonth()->format('m')] = $month;
|
||||
}
|
||||
|
||||
public function getMonth(\DateTimeInterface $month): Month
|
||||
{
|
||||
return $this->months['_' . $month->format('m')];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Month[]
|
||||
*/
|
||||
public function getMonths(): array
|
||||
{
|
||||
return array_values($this->months);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user