Release 2.0.11 (#3932)

- added "today" as selector in date-range dropdown
- added feature to prevent auto-select of dropdowns with only one entry
- added hint that no changes were detected in batch update
- added negative invoice sums are possible (e.g. for credit notes)
- fix project list is expanded after submission
- fix invalid date parsing causes 500
- fix: prevent auto-select of activities in export and invoice form (in case only one global activity exists)
- fix team assignments for customer and project were not saved (using API now)
- fix form fieldset with legend styling (e.g. team project assignment)
- fix required meta-field were forced to have a value in batch update
- fix tomselect meta-field was not disabled in batch update
- fix unset internal rate is shown as 0
- fix one minute rounding problem in duration-only mode  with "now" being default time
- fix column width and label for duration-only mode
- tech debt: cleanup invoice template (remove invoice layout)
- tech debt: reorder for simpler comparison with invoice form
- possible BC for devs: remove unused methods from form trait
- bump composer packages (includes new translations for auth screens)
This commit is contained in:
Kevin Papst
2023-03-21 12:42:18 +01:00
committed by GitHub
parent 252652082d
commit 3a5d7a62de
41 changed files with 590 additions and 1288 deletions

View File

@@ -280,15 +280,19 @@ abstract class TimesheetAbstractController extends AbstractController
]);
}
protected function multiUpdate(Request $request)
protected function multiUpdate(Request $request): Response
{
$dto = new TimesheetMultiUpdateDTO();
// initial request from the listing posts a different form
$form = $this->getMultiUpdateActionForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$dto->setEntities($form->getData()->getEntities());
$data = $form->getData();
if ($data instanceof MultiUpdateTableDTO) {
$dto->setEntities($data->getEntities());
}
}
// using a new timesheet to make sure we ONLY use meta-fields which are registered via events
@@ -321,14 +325,14 @@ abstract class TimesheetAbstractController extends AbstractController
$dto->setEntities($timesheets);
if (\count($dto->getEntities()) === 0) {
if (\count($timesheets) === 0) {
return $this->redirectToRoute($this->getTimesheetRoute());
}
if ($form->isSubmitted() && $form->isValid()) {
/** @var Timesheet $timesheet */
$execute = false;
foreach ($dto->getEntities() as $timesheet) {
/** @var Timesheet $timesheet */
foreach ($timesheets as $timesheet) {
if ($dto->isReplaceTags()) {
foreach ($timesheet->getTags() as $tag) {
$timesheet->removeTag($tag);
@@ -391,13 +395,17 @@ abstract class TimesheetAbstractController extends AbstractController
if ($execute) {
try {
$this->service->updateMultipleTimesheets($dto->getEntities());
$this->service->updateMultipleTimesheets($timesheets);
$this->flashSuccess('action.update.success');
return $this->redirectToRoute($this->getTimesheetRoute());
} catch (\Exception $ex) {
$this->flashUpdateException($ex);
}
} else {
$this->flashSuccess(sprintf('No changes for %s entries detected.', \count($timesheets)));
return $this->redirectToRoute($this->getTimesheetRoute());
}
}