Fixes for invoice period in PEPPOL

This commit is contained in:
David Bomba
2026-01-12 08:52:43 +11:00
parent 2b5577f9da
commit a9a127f8a8
7 changed files with 42 additions and 14 deletions

View File

@@ -114,13 +114,19 @@ class RecurringInvoiceToInvoiceFactory
$end_date = $end_date->format('Y-m-d');
$einvoice = new \InvoiceNinja\EInvoice\Models\Peppol\Invoice();
// $einvoice = new \InvoiceNinja\EInvoice\Models\Peppol\Invoice();
// $ip = new \InvoiceNinja\EInvoice\Models\Peppol\PeriodType\InvoicePeriod();
// $ip->StartDate = new \DateTime($start_date);
// $ip->EndDate = new \DateTime($end_date);
// $einvoice->InvoicePeriod = [$ip];
$ip = new \InvoiceNinja\EInvoice\Models\Peppol\PeriodType\InvoicePeriod();
$ip->StartDate = new \DateTime($start_date);
$ip->EndDate = new \DateTime($end_date);
$einvoice->InvoicePeriod = [$ip];
// 2026-01-12 - To prevent storing datetime objects in the database, we manually build the InvoicePeriod object
$einvoice = new \stdClass();
$invoice_period = new \stdClass();
$invoice_period->StartDate = $start_date;
$invoice_period->EndDate = $end_date;
$einvoice->InvoicePeriod = [$invoice_period];
$stub = new \stdClass();
$stub->Invoice = $einvoice;

View File

@@ -48,6 +48,7 @@ class EInvoiceController extends BaseController
match ($request->entity) {
'invoices' => $data = $el->checkInvoice($request->getEntity()),
'recurring_invoices' => $data = $el->checkRecurringInvoice($request->getEntity()),
'clients' => $data = $el->checkClient($request->getEntity()),
'companies' => $data = $el->checkCompany($request->getEntity()),
default => $data['passes'] = false,

View File

@@ -17,8 +17,9 @@ use App\Models\Client;
use App\Models\Company;
use App\Models\Invoice;
use App\Http\Requests\Request;
use App\Services\EDocument\Standards\Validation\Peppol\EntityLevel;
use Illuminate\Validation\Rule;
use App\Models\RecurringInvoice;
use App\Services\EDocument\Standards\Validation\Peppol\EntityLevel;
class ValidateEInvoiceRequest extends Request
{
@@ -50,7 +51,7 @@ class ValidateEInvoiceRequest extends Request
$user = auth()->user();
return [
'entity' => 'required|bail|in:invoices,clients,companies',
'entity' => 'required|bail|in:invoices,recurring_invoices,clients,companies',
'entity_id' => ['required','bail', Rule::exists($this->entity, 'id')
->when($this->entity != 'companies', function ($q) use ($user) {
$q->where('company_id', $user->company()->id);
@@ -81,6 +82,7 @@ class ValidateEInvoiceRequest extends Request
match ($this->entity) {
'invoices' => $class = Invoice::class,
'recurring_invoices' => $class = RecurringInvoice::class,
'clients' => $class = Client::class,
'companies' => $class = Company::class,
default => $class = Invoice::class,

View File

@@ -1349,9 +1349,13 @@ class Peppol extends AbstractService
if (isset($this->invoice->e_invoice->Invoice->InvoicePeriod[0]) &&
isset($this->invoice->e_invoice->Invoice->InvoicePeriod[0]->StartDate) &&
isset($this->invoice->e_invoice->Invoice->InvoicePeriod[0]->EndDate)) {
$start_date = isset($this->invoice->e_invoice->Invoice->InvoicePeriod[0]->StartDate->date) ? $this->invoice->e_invoice->Invoice->InvoicePeriod[0]->StartDate->date :$this->invoice->e_invoice->Invoice->InvoicePeriod[0]->StartDate;
$end_date = isset($this->invoice->e_invoice->Invoice->InvoicePeriod[0]->EndDate->date) ? $this->invoice->e_invoice->Invoice->InvoicePeriod[0]->EndDate->date : $this->invoice->e_invoice->Invoice->InvoicePeriod[0]->EndDate;
$ip = new \InvoiceNinja\EInvoice\Models\Peppol\PeriodType\InvoicePeriod();
$ip->StartDate = new \DateTime($this->invoice->e_invoice->Invoice->InvoicePeriod[0]->StartDate);
$ip->EndDate = new \DateTime($this->invoice->e_invoice->Invoice->InvoicePeriod[0]->EndDate);
$ip->StartDate = new \DateTime($start_date);
$ip->EndDate = new \DateTime($end_date);
$this->p_invoice->InvoicePeriod = [$ip];
}

View File

@@ -15,6 +15,7 @@ namespace App\Services\EDocument\Standards\Validation;
use App\Models\Client;
use App\Models\Company;
use App\Models\Invoice;
use App\Models\RecurringInvoice;
interface EntityLevelInterface
{
@@ -24,4 +25,6 @@ interface EntityLevelInterface
public function checkInvoice(Invoice $invoice): array;
public function checkRecurringInvoice(RecurringInvoice $recurring_invoice): array;
}

View File

@@ -12,7 +12,7 @@
namespace App\Services\EDocument\Standards\Validation\Peppol;
use App\Exceptions\PeppolValidationException;
use XSLTProcessor;
use App\Models\Quote;
use App\Models\Client;
use App\Models\Credit;
@@ -20,11 +20,12 @@ use App\Models\Vendor;
use App\Models\Company;
use App\Models\Invoice;
use App\Models\PurchaseOrder;
use App\Services\EDocument\Standards\Peppol;
use App\Services\EDocument\Standards\Validation\XsltDocumentValidator;
use App\Services\EDocument\Standards\Validation\EntityLevelInterface;
use App\Models\RecurringInvoice;
use Illuminate\Support\Facades\App;
use XSLTProcessor;
use App\Services\EDocument\Standards\Peppol;
use App\Exceptions\PeppolValidationException;
use App\Services\EDocument\Standards\Validation\EntityLevelInterface;
use App\Services\EDocument\Standards\Validation\XsltDocumentValidator;
class EntityLevel implements EntityLevelInterface
{
@@ -124,6 +125,11 @@ class EntityLevel implements EntityLevelInterface
}
public function checkRecurringInvoice(RecurringInvoice $recurring_invoice): array
{
return ['passes' => true];
}
public function checkInvoice(Invoice $invoice): array
{
$this->init($invoice->client->locale());

View File

@@ -19,6 +19,7 @@ use App\Models\Vendor;
use App\Models\Company;
use App\Models\Invoice;
use App\Models\PurchaseOrder;
use App\Models\RecurringInvoice;
use Illuminate\Support\Facades\App;
use App\Services\EDocument\Standards\Validation\EntityLevelInterface;
@@ -84,6 +85,11 @@ class EntityLevel implements EntityLevelInterface
}
public function checkRecurringInvoice(RecurringInvoice $recurring_invoice): array
{
return ['passes' => true];
}
public function checkInvoice(Invoice $invoice): array
{