64 lines
2.0 KiB
PHP
64 lines
2.0 KiB
PHP
<?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\Export\Renderer;
|
|
|
|
use App\Entity\Timesheet;
|
|
|
|
trait RendererTrait
|
|
{
|
|
/**
|
|
* @param Timesheet[] $timesheets
|
|
* @return array
|
|
*/
|
|
protected function calculateSummary(array $timesheets)
|
|
{
|
|
$summary = [];
|
|
|
|
foreach ($timesheets as $timesheet) {
|
|
$id = $timesheet->getProject()->getCustomer()->getId() . '_' . $timesheet->getProject()->getId();
|
|
$activityId = $timesheet->getActivity()->getId();
|
|
|
|
if (!isset($summary[$id])) {
|
|
$summary[$id] = [
|
|
'customer' => $timesheet->getProject()->getCustomer()->getName(),
|
|
'project' => $timesheet->getProject()->getName(),
|
|
'activities' => [],
|
|
'currency' => $timesheet->getProject()->getCustomer()->getCurrency(),
|
|
'rate' => 0,
|
|
'duration' => 0,
|
|
];
|
|
}
|
|
|
|
if (!isset($summary[$id]['activities'][$activityId])) {
|
|
$summary[$id]['activities'][$activityId] = [
|
|
'activity' => $timesheet->getActivity()->getName(),
|
|
'currency' => $timesheet->getProject()->getCustomer()->getCurrency(),
|
|
'rate' => 0,
|
|
'duration' => 0,
|
|
];
|
|
}
|
|
|
|
$duration = $timesheet->getDuration();
|
|
if (null === $duration) {
|
|
$duration = 0;
|
|
}
|
|
|
|
$summary[$id]['rate'] += $timesheet->getRate();
|
|
$summary[$id]['duration'] += $duration;
|
|
$summary[$id]['activities'][$activityId]['rate'] += $timesheet->getRate();
|
|
$summary[$id]['activities'][$activityId]['duration'] += $duration;
|
|
}
|
|
|
|
asort($summary);
|
|
|
|
return $summary;
|
|
}
|
|
}
|