search and export from invoice archive (#2408)

This commit is contained in:
Kevin Papst
2021-03-10 01:50:27 +01:00
committed by GitHub
parent c34e9f576d
commit db1344573f
22 changed files with 544 additions and 72 deletions

View File

@@ -12,8 +12,12 @@ namespace App\Controller;
use App\Configuration\SystemConfiguration;
use App\Entity\Invoice;
use App\Entity\InvoiceTemplate;
use App\Export\Spreadsheet\AnnotatedObjectExporter;
use App\Export\Spreadsheet\Writer\BinaryFileResponseWriter;
use App\Export\Spreadsheet\Writer\XlsxWriter;
use App\Form\InvoiceDocumentUploadForm;
use App\Form\InvoiceTemplateForm;
use App\Form\Toolbar\InvoiceArchiveForm;
use App\Form\Toolbar\InvoiceToolbarForm;
use App\Form\Toolbar\InvoiceToolbarSimpleForm;
use App\Invoice\ServiceInvoice;
@@ -21,6 +25,7 @@ use App\Repository\InvoiceDocumentRepository;
use App\Repository\InvoiceRepository;
use App\Repository\InvoiceTemplateRepository;
use App\Repository\Query\BaseQuery;
use App\Repository\Query\InvoiceArchiveQuery;
use App\Repository\Query\InvoiceQuery;
use Exception;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
@@ -236,20 +241,48 @@ final class InvoiceController extends AbstractController
$invoice = $this->invoiceRepository->find($id);
}
$query = new InvoiceQuery();
$query->setOrderBy('date');
$query = new InvoiceArchiveQuery();
$query->setPage($page);
$query->setCurrentUser($this->getUser());
$form = $this->getArchiveToolbarForm($query);
$form->setData($query);
$form->submit($request->query->all(), false);
if (!$form->isValid()) {
$query->resetByFormError($form->getErrors());
}
$invoices = $this->invoiceRepository->getPagerfantaForQuery($query);
return $this->render('invoice/listing.html.twig', [
'entries' => $invoices,
'query' => $query,
'toolbarForm' => $form->createView(),
'download' => $invoice,
]);
}
/**
* @Route(path="/export", name="invoice_export", methods={"GET"})
*/
public function exportAction(Request $request, AnnotatedObjectExporter $exporter)
{
$query = new InvoiceArchiveQuery();
$query->setCurrentUser($this->getUser());
$form = $this->getArchiveToolbarForm($query);
$form->setData($query);
$form->submit($request->query->all(), false);
$entries = $this->invoiceRepository->getInvoicesForQuery($query);
$spreadsheet = $exporter->export(Invoice::class, $entries);
$writer = new BinaryFileResponseWriter(new XlsxWriter(), 'kimai-invoices');
return $writer->getFileResponse($spreadsheet);
}
/**
* @Route(path="/template/{page}", requirements={"page": "[1-9]\d*"}, defaults={"page": 1}, name="admin_invoice_template", methods={"GET", "POST"})
* @Security("is_granted('manage_invoice_template')")
@@ -415,6 +448,18 @@ final class InvoiceController extends AbstractController
]);
}
private function getArchiveToolbarForm(InvoiceArchiveQuery $query): FormInterface
{
return $this->createForm(InvoiceArchiveForm::class, $query, [
'action' => $this->generateUrl('admin_invoice_list', []),
'method' => 'GET',
'timezone' => $this->getDateTimeFactory()->getTimezone()->getName(),
'attr' => [
'id' => 'invoice-archive-form'
],
]);
}
private function createEditForm(InvoiceTemplate $template): FormInterface
{
if ($template->getId() === null) {