Release 2.0.4 (#3883)

* fix column data truncated
* calculate internal rate from user
* show internal rate in timesheet listing
* Fixed: responsivenss and size of report start page icons
* fix: name display in dropdowns (and added tests)
* translate reload button
* fix invoice date might be in the past
* fail safe customer name handling
* translate invoice_date and invoice_date help
* prevent URLs like start=null
* prevent to reload select twice
This commit is contained in:
Kevin Papst
2023-03-02 14:04:06 +01:00
committed by GitHub
parent a8b972f8a5
commit 3f09a2674b
32 changed files with 409 additions and 77 deletions

View File

@@ -241,7 +241,14 @@ abstract class AbstractController extends BaseAbstractController implements Serv
return substr($query->getName(), 0, 50);
}
protected function handleSearch(FormInterface $form, Request $request): bool
/**
* @param FormInterface $form
* @param Request $request
* @param array<string> $filterParams parameter names, which should not be saved (neither session, nor database)
* @return bool
* @throws \Exception
*/
protected function handleSearch(FormInterface $form, Request $request, array $filterParams = []): bool
{
$data = $form->getData();
if (!($data instanceof BaseQuery)) {
@@ -339,7 +346,7 @@ abstract class AbstractController extends BaseAbstractController implements Serv
}
// these should NEVER be saved
$filter = ['setDefaultQuery', 'removeDefaultQuery', 'performSearch'];
$filter = array_merge(['setDefaultQuery', 'removeDefaultQuery', 'performSearch'], $filterParams);
foreach ($filter as $name) {
if (isset($params[$name])) {
unset($params[$name]);

View File

@@ -365,11 +365,15 @@ final class CustomerController extends AbstractController
#[IsGranted('view', 'customer')]
public function downloadVCard(Customer $customer): Response
{
if ($customer->getName() === null || \strlen($customer->getName()) === 0) {
throw new \Exception('Customer name cannot be null');
}
$vcard = new VCard();
$contact = $customer->getContact() ?? $customer->getName();
$contact = $customer->getContact();
if ($contact === null || \strlen($contact) === 0) {
$contact = 'Unknown';
$contact = $customer->getName();
}
$contact = explode(' ', $contact);

View File

@@ -81,10 +81,13 @@ final class InvoiceController extends AbstractController
$query = $this->getDefaultQuery();
$form = $this->getToolbarForm($query);
if ($this->handleSearch($form, $request)) {
if ($this->handleSearch($form, $request, ['invoiceDate'])) {
return $this->redirectToRoute('invoice');
}
// this can be deleted in the future, but for now invalid bookmarks exists, which contain an old invoice date
$query->setInvoiceDate($this->getDateTimeFactory()->createDateTime());
$models = [];
$total = 0;
$searched = false;
@@ -116,6 +119,8 @@ final class InvoiceController extends AbstractController
->add('template', InvoiceTemplateType::class)
->add('invoiceDate', DatePickerType::class, [
'required' => true,
'label' => 'invoice_date',
'help' => 'invoice_date.help'
])
->createView();
}

View File

@@ -88,6 +88,7 @@ abstract class TimesheetAbstractController extends AbstractController
if ($canSeeRate) {
$table->addColumn('hourlyRate', ['class' => 'text-end d-none text-nowrap']);
$table->addColumn('internalRate', ['class' => 'text-end text-nowrap']);
$table->addColumn('rate', ['class' => 'text-end text-nowrap']);
}
@@ -113,6 +114,7 @@ abstract class TimesheetAbstractController extends AbstractController
$page->setActionName($this->getActionName());
return $this->render('timesheet/index.html.twig', [
'view_rate' => $canSeeRate,
'page_setup' => $page,
'dataTable' => $table,
'action_single' => $this->getActionNameSingle(),