Split einvoice gateways

This commit is contained in:
David Bomba 2024-09-16 13:35:23 +10:00
parent 737e18aa42
commit bfbf7f5c6a
4 changed files with 72 additions and 17 deletions

View File

@ -28,6 +28,12 @@ interface MutatorInterface
public function setCompanySettings($company_settings): self; public function setCompanySettings($company_settings): self;
public function getClientSettings(): mixed;
public function getCompanySettings(): mixed;
public function getInvoice(): mixed;
// Country-specific methods // Country-specific methods
public function DE(): self; public function DE(): self;

View File

@ -12,11 +12,20 @@
namespace App\Services\EDocument\Gateway; namespace App\Services\EDocument\Gateway;
use App\Exceptions\PeppolValidationException; use App\Exceptions\PeppolValidationException;
use App\Services\EDocument\Gateway\MutatorInterface;
use App\Services\EDocument\Standards\Settings\PropertyResolver; use App\Services\EDocument\Standards\Settings\PropertyResolver;
use InvoiceNinja\EInvoice\Models\Peppol\IdentifierType\CustomerAssignedAccountID;
/**
* Class MutatorUtil
*
* Utility class for e-document mutations.
*/
class MutatorUtil class MutatorUtil
{ {
/**
* MutatorUtil constructor.
*/
public function __construct(public MutatorInterface $mutator) public function __construct(public MutatorInterface $mutator)
{ {
} }
@ -30,11 +39,13 @@ class MutatorUtil
*/ */
public function setPaymentMeans(bool $required = false): self public function setPaymentMeans(bool $required = false): self
{ {
$peppol = $this->mutator->getPeppol();
if(isset($this->mutator->p_invoice->PaymentMeans)) { if(isset($peppol->PaymentMeans)) {
return $this; return $this;
} elseif($paymentMeans = $this->getSetting('Invoice.PaymentMeans')) { } elseif($paymentMeans = $this->getSetting('Invoice.PaymentMeans')) {
$this->mutator->p_invoice->PaymentMeans = is_array($paymentMeans) ? $paymentMeans : [$paymentMeans]; $peppol->PaymentMeans = is_array($paymentMeans) ? $paymentMeans : [$paymentMeans];
$this->mutator->setPeppol($peppol);
return $this; return $this;
} }
@ -51,7 +62,7 @@ class MutatorUtil
*/ */
public function getClientSetting(string $property_path): mixed public function getClientSetting(string $property_path): mixed
{ {
return PropertyResolver::resolve($this->mutator->_client_settings, $property_path); return PropertyResolver::resolve($this->mutator->getClientSettings(), $property_path);
} }
/** /**
@ -62,7 +73,7 @@ class MutatorUtil
*/ */
public function getCompanySetting(string $property_path): mixed public function getCompanySetting(string $property_path): mixed
{ {
return PropertyResolver::resolve($this->mutator->_company_settings, $property_path); return PropertyResolver::resolve($this->mutator->getCompanySettings(), $property_path);
} }
/** /**
@ -76,11 +87,11 @@ class MutatorUtil
public function getSetting(string $property_path): mixed public function getSetting(string $property_path): mixed
{ {
if($prop_value = PropertyResolver::resolve($this->mutator->p_invoice, $property_path)) { if($prop_value = PropertyResolver::resolve($this->mutator->getPeppol(), $property_path)) {
return $prop_value; return $prop_value;
} elseif($prop_value = PropertyResolver::resolve($this->mutator->_client_settings, $property_path)) { } elseif($prop_value = PropertyResolver::resolve($this->mutator->getClientSettings(), $property_path)) {
return $prop_value; return $prop_value;
} elseif($prop_value = PropertyResolver::resolve($this->mutator->_company_settings, $property_path)) { } elseif($prop_value = PropertyResolver::resolve($this->mutator->getCompanySettings(), $property_path)) {
return $prop_value; return $prop_value;
} }
return null; return null;
@ -111,19 +122,23 @@ class MutatorUtil
*/ */
public function setCustomerAssignedAccountId(bool $required = false): self public function setCustomerAssignedAccountId(bool $required = false): self
{ {
$peppol = $this->mutator->getPeppol();
$invoice = $this->mutator->getInvoice();
//@phpstan-ignore-next-line //@phpstan-ignore-next-line
if(isset($this->mutator->p_invoice->AccountingCustomerParty->CustomerAssignedAccountID)) { if(isset($peppol->AccountingCustomerParty->CustomerAssignedAccountID)) {
return $this; return $this;
} elseif($customer_assigned_account_id = $this->getSetting('Invoice.AccountingCustomerParty.CustomerAssignedAccountID')) { } elseif($customer_assigned_account_id = $this->getSetting('Invoice.AccountingCustomerParty.CustomerAssignedAccountID')) {
$this->mutator->p_invoice->AccountingCustomerParty->CustomerAssignedAccountID = $customer_assigned_account_id; $peppol->AccountingCustomerParty->CustomerAssignedAccountID = $customer_assigned_account_id;
$this->mutator->setPeppol($peppol);
return $this; return $this;
} elseif(strlen($this->mutator->invoice->client->id_number ?? '') > 1) { } elseif(strlen($invoice->client->id_number ?? '') > 1) {
$customer_assigned_account_id = new CustomerAssignedAccountID(); $customer_assigned_account_id = new CustomerAssignedAccountID();
$customer_assigned_account_id->value = $this->mutator->invoice->client->id_number; $customer_assigned_account_id->value = $invoice->client->id_number;
$this->mutator->p_invoice->AccountingCustomerParty->CustomerAssignedAccountID = $customer_assigned_account_id; $peppol->AccountingCustomerParty->CustomerAssignedAccountID = $customer_assigned_account_id;
return $this; return $this;
} }

View File

@ -11,6 +11,7 @@
namespace App\Services\EDocument\Gateway\Qvalia; namespace App\Services\EDocument\Gateway\Qvalia;
use App\Services\EDocument\Gateway\MutatorUtil;
use App\Services\EDocument\Gateway\MutatorInterface; use App\Services\EDocument\Gateway\MutatorInterface;
class Mutator implements MutatorInterface class Mutator implements MutatorInterface
@ -24,8 +25,11 @@ class Mutator implements MutatorInterface
private $invoice; private $invoice;
private MutatorUtil $mutator_util;
public function __construct(public Qvalia $qvalia) public function __construct(public Qvalia $qvalia)
{ {
$this->mutator_util = new MutatorUtil($this);
} }
public function setInvoice($invoice): self public function setInvoice($invoice): self
@ -45,6 +49,16 @@ class Mutator implements MutatorInterface
return $this->p_invoice; return $this->p_invoice;
} }
public function getClientSettings(): mixed
{
return $this->_client_settings;
}
public function getCompanySettings(): mixed
{
return $this->_company_settings;
}
public function setClientSettings($client_settings): self public function setClientSettings($client_settings): self
{ {
$this->_client_settings = $client_settings; $this->_client_settings = $client_settings;
@ -57,6 +71,11 @@ class Mutator implements MutatorInterface
return $this; return $this;
} }
public function getInvoice(): mixed
{
return $this->invoice;
}
/** /**
* senderSpecificLevelMutators * senderSpecificLevelMutators
* *

View File

@ -19,13 +19,13 @@ use App\Services\EDocument\Gateway\Storecove\StorecoveRouter;
class Mutator implements MutatorInterface class Mutator implements MutatorInterface
{ {
public \InvoiceNinja\EInvoice\Models\Peppol\Invoice $p_invoice; private \InvoiceNinja\EInvoice\Models\Peppol\Invoice $p_invoice;
public ?\InvoiceNinja\EInvoice\Models\Peppol\Invoice $_client_settings; private ?\InvoiceNinja\EInvoice\Models\Peppol\Invoice $_client_settings;
public ?\InvoiceNinja\EInvoice\Models\Peppol\Invoice $_company_settings; private ?\InvoiceNinja\EInvoice\Models\Peppol\Invoice $_company_settings;
public $invoice; private $invoice;
private array $storecove_meta = []; private array $storecove_meta = [];
@ -94,6 +94,21 @@ class Mutator implements MutatorInterface
return $this; return $this;
} }
public function getClientSettings(): mixed
{
return $this->_client_settings;
}
public function getCompanySettings(): mixed
{
return $this->_company_settings;
}
public function getInvoice(): mixed
{
return $this->invoice;
}
/** /**
* senderSpecificLevelMutators * senderSpecificLevelMutators
* *