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),