Add invoice period review workflow (#336)

Improve the superuser invoice-period review API, stale-preview protection, queue visibility, review blockers, and e-conomic eligibility.
This commit is contained in:
Jeppe B
2026-08-02 19:20:50 +02:00
committed by GitHub
parent 1e0e051775
commit c795df4aad
16 changed files with 1377 additions and 39 deletions
@@ -11,6 +11,7 @@ use classes\economic_v2_line_normalizer;
use classes\economic_v2_revenue_statistics_service;
use classes\invoice_store;
use classes\invoice_collection_bulk_action_service;
use classes\invoice_collection_bulk_action_conflict;
use classes\invoicing_period_utils;
use classes\response;
use classes\router;
@@ -818,6 +819,8 @@ class orderInvoicesRoute
(int)$user->id,
$locale
);
} catch (invoice_collection_bulk_action_conflict $e) {
$response->error($e->getMessage(), 409);
} catch (\Throwable $e) {
$response->error($e->getMessage(), 400);
}
@@ -865,15 +868,11 @@ class orderInvoicesRoute
$collected_order_invoices = (new collected_order_invoices_o())->select((int)self::getParameter('id'));
$collected_order_invoices->requireSelected();
try {
$this->assertCollectedInvoiceCanBeExportedToEconomic($collected_order_invoices);
invoice_collection_bulk_action_service::assertCollectionCanQueueEconomic($collected_order_invoices);
} catch (\Throwable $e) {
$response->error($e->getMessage(), 400);
}
if ($collected_order_invoices->booked_invoice_id->value() !== null) {
$response->error('Invoice has already been booked', 400);
}
if (!$this->isEconomicTransferQueueAvailable()) {
try {
$result = $this->exportCollectedInvoiceSynchronously($collected_order_invoices, $send_as_is);
@@ -2736,8 +2735,7 @@ class orderInvoicesRoute
*/
private function assertCollectedInvoiceCanBeExportedToEconomic(collected_order_invoices_o $collected_order_invoices): void
{
$collected_order_invoices->requireSelected();
(new economic())->assertCustomerNumberIsNotDraft((int)$collected_order_invoices->customer_number->value());
invoice_collection_bulk_action_service::assertCollectionCanQueueEconomic($collected_order_invoices);
}
private function requireCollectedInvoiceBulkActionPermission(string $action): void