diff --git a/composer.json b/composer.json
index e87107f..591d4d8 100644
--- a/composer.json
+++ b/composer.json
@@ -1,7 +1,7 @@
{
"name": "mondu/shopware6-payment",
"description": "Mondu payment for Shopware 6",
- "version": "1.4.2",
+ "version": "1.4.3",
"type": "shopware-platform-plugin",
"license": "proprietary",
"authors": [
diff --git a/src/Components/PluginConfig/Service/ConfigService.php b/src/Components/PluginConfig/Service/ConfigService.php
index 273fbe2..7b286fe 100644
--- a/src/Components/PluginConfig/Service/ConfigService.php
+++ b/src/Components/PluginConfig/Service/ConfigService.php
@@ -166,6 +166,30 @@ public function setWebhooksSecret(string $secret = '')
return $this->systemConfigService->set('Mond1SW6.customConfig.webhooksSecret', $secret, $this->salesChannelId);
}
+ /**
+ * @param bool $requireInvoiceDocumentToShip
+ *
+ * @return void
+ */
+ public function setRequireInvoiceDocumentToShip(bool $requireInvoiceDocumentToShip): void
+ {
+ $this->systemConfigService->set(
+ 'Mond1SW6.customConfig.webhooksSecret',
+ $requireInvoiceDocumentToShip,
+ $this->salesChannelId
+ );
+ }
+
+ /**
+ * @return bool
+ */
+ public function isRequireInvoiceDocumentToShipEnabled(): bool
+ {
+ $config = $this->getPluginConfiguration();
+
+ return isset($config['requireInvoiceDocumentToShip']) && $config['requireInvoiceDocumentToShip'];
+ }
+
/**
* @param bool $val
*
diff --git a/src/Components/StateMachine/Subscriber/TransitionSubscriber.php b/src/Components/StateMachine/Subscriber/TransitionSubscriber.php
index 2a0b5c5..d222db0 100644
--- a/src/Components/StateMachine/Subscriber/TransitionSubscriber.php
+++ b/src/Components/StateMachine/Subscriber/TransitionSubscriber.php
@@ -108,11 +108,18 @@ private function shipOrder(OrderEntity $order, Context $context, OrderDataEntity
return;
}
- if ($this->configService->skipOrderStateValidation()) {
+ if (
+ $this->configService->skipOrderStateValidation() &&
+ !$this->configService->isRequireInvoiceDocumentToShipEnabled()
+ ) {
return;
}
- $invoiceData = $this->invoiceDataService->getInvoiceData($order, $context);
+ $invoiceData = $this->invoiceDataService->getInvoiceData(
+ $order,
+ $context,
+ $this->configService->isRequireInvoiceDocumentToShipEnabled()
+ );
try {
$invoice = $this->monduClient->setSalesChannelId($order->getSalesChannelId())->invoiceOrder(
diff --git a/src/Resources/config/config.xml b/src/Resources/config/config.xml
index ff5ab95..389b38f 100644
--- a/src/Resources/config/config.xml
+++ b/src/Resources/config/config.xml
@@ -56,6 +56,15 @@
Lorsque cette option est activée, il n'y aura pas de validations telles que la validation des factures lors du changement d'état d'une commande.
+
+ requireInvoiceDocumentToShip
+
+
+
+
+ 0
+ 0
+
orderTransactionState
diff --git a/src/Services/InvoiceServices/AbstractInvoiceDataService.php b/src/Services/InvoiceServices/AbstractInvoiceDataService.php
index c4ae307..ca46ed3 100644
--- a/src/Services/InvoiceServices/AbstractInvoiceDataService.php
+++ b/src/Services/InvoiceServices/AbstractInvoiceDataService.php
@@ -3,7 +3,6 @@
namespace Mondu\MonduPayment\Services\InvoiceServices;
use Mondu\MonduPayment\Components\Order\Util\DocumentUrlHelper;
-use Mondu\MonduPayment\Services\OrderServices\AbstractOrderAdditionalCostsService;
use Mondu\MonduPayment\Services\OrderServices\AbstractOrderDiscountService;
use Mondu\MonduPayment\Services\OrderServices\AbstractOrderLineItemsService;
use Mondu\MonduPayment\Services\OrderServices\AbstractOrderUtilsService;
@@ -25,8 +24,13 @@ abstract public function getDecorated(): AbstractInvoiceDataService;
* Get invoice data that is being sent to Mondu API
*
* @param OrderEntity $order
- * @param Context $context
+ * @param Context $context
+ * @param bool $isRequireInvoiceDocumentToShipEnabled
* @return array
*/
- abstract public function getInvoiceData(OrderEntity $order, Context $context): array;
+ abstract public function getInvoiceData(
+ OrderEntity $order,
+ Context $context,
+ bool $isRequireInvoiceDocumentToShipEnabled
+ ): array;
}
diff --git a/src/Services/InvoiceServices/InvoiceDataService.php b/src/Services/InvoiceServices/InvoiceDataService.php
index dd3bff0..e14b61b 100644
--- a/src/Services/InvoiceServices/InvoiceDataService.php
+++ b/src/Services/InvoiceServices/InvoiceDataService.php
@@ -13,14 +13,17 @@ public function getDecorated(): AbstractInvoiceDataService
throw new DecorationPatternException(self::class);
}
- public function getInvoiceData(OrderEntity $order, Context $context): array
- {
+ public function getInvoiceData(
+ OrderEntity $order,
+ Context $context,
+ bool $isRequireInvoiceDocumentToShipEnabled
+ ): array {
[ $invoiceNumber, $invoiceUrl ] = $this->getInvoiceNumberAndUrl($order, $context);
return [
'currency' => $this->orderUtilsService->getOrderCurrency($order),
- 'external_reference_id' => $invoiceNumber,
- 'invoice_url' => $invoiceUrl,
+ 'external_reference_id' => $isRequireInvoiceDocumentToShipEnabled ? $order->getId() : $invoiceNumber,
+ 'invoice_url' => $isRequireInvoiceDocumentToShipEnabled ? '' : $invoiceUrl,
'gross_amount_cents' => $this->orderUtilsService->priceToCents($order->getPrice()->getTotalPrice()),
'discount_cents' => $this->orderDiscountService->getOrderDiscountCents($order, $context),
'shipping_price_cents' => $this->orderUtilsService->getShippingPriceCents($order),