fix one-minute rounding bug in quick-entries (#3580)

* fix one-minute rounding bug for quick entries form
* allow to delete and create/update timesheets in one go
* prevent issues with negative durations
This commit is contained in:
Kevin Papst
2022-10-16 01:05:38 +02:00
committed by GitHub
parent a5556a0c63
commit 5fa10dfdf1
2 changed files with 21 additions and 18 deletions

View File

@@ -118,7 +118,10 @@ class QuickEntryController extends AbstractController
];
}
$beginTime = $factory->createDateTime($this->configuration->getTimesheetDefaultBeginTime())->format('H:i:s');
$defaultBegin = $factory->createDateTime($this->configuration->getTimesheetDefaultBeginTime());
$defaultHour = (int) $defaultBegin->format('H');
$defaultMinute = (int) $defaultBegin->format('i');
$defaultBegin->setTime($defaultHour, $defaultMinute, 0, 0);
// fill all rows and columns to make sure we do not have missing records
/** @var QuickEntryModel[] $models */
@@ -132,7 +135,7 @@ class QuickEntryController extends AbstractController
$tmp->setProject($row['project']);
$tmp->setActivity($row['activity']);
$tmp->setBegin(clone $day['day']);
$tmp->getBegin()->modify($beginTime);
$tmp->getBegin()->setTime($defaultHour, $defaultMinute, 0, 0);
$model->addTimesheet($tmp);
} else {
$model->addTimesheet($day['entry']);
@@ -147,7 +150,7 @@ class QuickEntryController extends AbstractController
$tmp = new Timesheet();
$tmp->setUser($user);
$tmp->setBegin(clone $day['day']);
$tmp->getBegin()->modify($beginTime);
$tmp->getBegin()->setTime($defaultHour, $defaultMinute, 0, 0);
$empty->addTimesheet($tmp);
}
@@ -161,7 +164,7 @@ class QuickEntryController extends AbstractController
$tmp = new Timesheet();
$tmp->setUser($user);
$tmp->setBegin(clone $day['day']);
$tmp->getBegin()->modify($beginTime);
$tmp->getBegin()->setTime($defaultHour, $defaultMinute, 0, 0);
$model->addTimesheet($tmp);
}
@@ -204,28 +207,28 @@ class QuickEntryController extends AbstractController
}
}
if ($this->isGranted('delete_own_timesheet') && \count($deleteTimesheets) > 0) {
try {
$saved = false;
if (\count($deleteTimesheets) > 0 && $this->isGranted('delete_own_timesheet')) {
$this->timesheetService->deleteMultipleTimesheets($deleteTimesheets);
return $this->redirectToRoute('quick_entry', ['begin' => $begin->format('Y-m-d')]);
} catch (\Exception $ex) {
$this->flashError('action.delete.error');
$this->logException($ex);
}
$saved = true;
}
if (\count($saveTimesheets) > 0) {
try {
$this->timesheetService->updateMultipleTimesheets($saveTimesheets);
$saved = true;
}
if ($saved) {
$this->flashSuccess('action.update.success');
return $this->redirectToRoute('quick_entry', ['begin' => $begin->format('Y-m-d')]);
}
} catch (\Exception $ex) {
$this->flashError('action.update.error');
$this->logException($ex);
}
}
}
return $this->render('quick-entry/index.html.twig', [
'days' => $week,

View File

@@ -81,7 +81,7 @@ class QuickEntryTimesheetType extends AbstractType
try {
if (null !== $duration) {
$end = clone $data->getBegin();
$end->modify('+ ' . $duration . ' seconds');
$end->modify('+ ' . abs($duration) . ' seconds');
$data->setEnd($end);
} else {
$data->setDuration(null);