From 50eee867dcf7880f2bbc41eb5515ae093c4546c0 Mon Sep 17 00:00:00 2001 From: Drew Rowan Date: Tue, 26 Nov 2024 10:15:06 +0100 Subject: [PATCH] Release 6.1.10 --- CHANGELOG.md | 11 + CHANGELOG_de-DE.md | 11 + README.md | 6 +- composer.json | 124 +++--- docs/en/documentation.html | 2 +- .../Refund/Controller/RefundController.php | 223 ++++++---- src/Core/Api/Refund/Service/RefundService.php | 414 ++++++++++-------- .../Controller/AccountOrderController.php | 229 +++++----- src/Core/Util/Payload/RefundPayload.php | 265 ++++++----- src/PostFinanceCheckoutPayment.php | 9 + .../api/postfinancecheckout-refund.service.js | 32 +- .../index.html.twig | 31 ++ .../index.js | 101 +++++ .../index.html.twig | 16 + .../index.js | 94 ++++ .../index.html.twig | 11 +- .../index.js | 4 +- .../index.html.twig | 85 ++-- .../postfinancecheckout-order-detail/index.js | 160 ++++++- .../snippet/de-DE.json | 7 +- .../snippet/en-GB.json | 8 +- .../snippet/fr-FR.json | 7 +- .../snippet/it-IT.json | 7 +- .../post-finance-checkout-payment.js | 1 - .../services/core/storefront/account.xml | 1 + .../js/post-finance-checkout-payment.js | 2 +- 26 files changed, 1220 insertions(+), 641 deletions(-) create mode 100644 src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-partial/index.html.twig create mode 100644 src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-partial/index.js create mode 100644 src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-selected/index.html.twig create mode 100644 src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-selected/index.js delete mode 100644 src/Resources/app/storefront/dist/storefront/js/post-finance-checkout-payment/post-finance-checkout-payment.js diff --git a/CHANGELOG.md b/CHANGELOG.md index a52119e..ead1fb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +# 6.1.10 +- Multiple/bulk refund for line item. +- Partial line item refund. +- Fixed refund by line item option. +- Composer dependencies are managed by Shopware system + +# 6.1.9 +- Prevents calling a non existing method in webhook invocation. +- Prevents error if delivery data is empty +- Refactored composer.json, completing its require section. + # 6.1.8 - Implemented key signing - Tax rate adjustment when products have different tax rates diff --git a/CHANGELOG_de-DE.md b/CHANGELOG_de-DE.md index f1c49f9..7e2f3c9 100644 --- a/CHANGELOG_de-DE.md +++ b/CHANGELOG_de-DE.md @@ -1,3 +1,14 @@ +# 6.1.10 +- Mehrfache/gesammelte Rückerstattung für Einzelposten. +- Teilweise Rückerstattung von Einzelposten. +- Fehler bei der Rückerstattung durch die Option Einzelposten behoben. +- Composer-Abhängigkeiten werden vom Shopware-System verwaltet + +# 6.1.9 +- Verhindert das Aufrufen einer nicht existierenden Methode bei der Webhook-Ausführung. +- Verhindert einen Fehler, wenn Lieferdaten leer sind. +- Composer.json überarbeitet und den Abschnitt "require" vervollständigt. + # 6.1.8 - Schlüsselsignatur implementiert - Steuersatzanpassung, wenn Produkte unterschiedliche Steuersätze haben diff --git a/README.md b/README.md index ec78ed9..a18f588 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ The preferred method is via [composer](https://getcomposer.org). Follow the [installation instructions](https://getcomposer.org/doc/00-intro.md) if you do not already have composer installed. -Once composer is installed, execute the following command in your project root to install this library: +Once composer is installed, execute the following command from the shop root to install the plugin: ```bash composer require postfinancecheckout/shopware-6 @@ -53,6 +53,8 @@ Uncompress the zip file you download, and include the autoloader in your project ```bash # unzip to ShopwareInstallDir/custom/plugins/PostFinanceCheckoutPayment +# For versions 6.1.10 and older, the SDK is installed automatically when installing the plugin in the shop, so you don't need to +# run the following command. composer require postfinancecheckout/sdk 4.6.0 php bin/console plugin:refresh php bin/console plugin:install --activate --clearCache PostFinanceCheckoutPayment @@ -71,7 +73,7 @@ tail -f var/log/postfinancecheckout_payment*.log ## Documentation -[Documentation](https://plugin-documentation.postfinance-checkout.ch/pfpayments/shopware-6/6.1.9/docs/en/documentation.html) +[Documentation](https://plugin-documentation.postfinance-checkout.ch/pfpayments/shopware-6/6.1.10/docs/en/documentation.html) ## License diff --git a/composer.json b/composer.json index 04e2696..da7095e 100644 --- a/composer.json +++ b/composer.json @@ -1,63 +1,63 @@ { - "authors": [ - { - "homepage": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html", - "name": "PostFinance Checkout" - } - ], - "autoload": { - "psr-4": { - "PostFinanceCheckoutPayment\\": "src/" - } - }, - "description": "PostFinanceCheckout integration for Shopware 6", - "extra": { - "copyright": "(c) by PostFinance Checkout", - "description": { - "de-DE": "PostFinanceCheckout integration f\u00fcr Shopware 6", - "en-GB": "PostFinanceCheckout integration for Shopware 6", - "fr-FR": "Int\u00e9gration de PostFinanceCheckout pour Shopware 6", - "it-IT": "Integrazione PostFinanceCheckout per Shopware" - }, - "label": { - "de-DE": "PostFinanceCheckout Produkte f\u00fcr Shopware 6", - "en-GB": "PostFinanceCheckout Products for Shopware 6", - "fr-FR": "PostFinanceCheckout Produits for Shopware 6", - "it-IT": "PostFinanceCheckout Prodotti per Shopware 6" - }, - "manufacturerLink": { - "de-DE": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html", - "en-GB": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html", - "fr-FR": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html", - "it-IT": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html" - }, - "supportLink": { - "de-DE": "https://www.postfinance.ch/en/business/support.html", - "en-GB": "https://www.postfinance.ch/en/business/support.html", - "fr-FR": "https://www.postfinance.ch/en/business/support.html", - "it-IT": "https://www.postfinance.ch/en/business/support.html" - }, - "shopware-plugin-class": "PostFinanceCheckoutPayment\\PostFinanceCheckoutPayment" - }, - "homepage": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html/", - "keywords": [ - "PostFinance Checkout", - "payment", - "php", - "shopware" - ], - "license": "Apache-2.0", - "name": "postfinancecheckout/shopware-6", - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "php": ">=8.2", - "shopware/core": "6.6.*", - "shopware/administration": "~6.6.0", - "shopware/storefront": "6.6.*", - "postfinancecheckout/sdk": "4.6.0" - }, - "type": "shopware-platform-plugin", - "version": "6.1.9" -} \ No newline at end of file + "authors": [ + { + "homepage": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html", + "name": "PostFinance Checkout" + } + ], + "autoload": { + "psr-4": { + "PostFinanceCheckoutPayment\\": "src/" + } + }, + "description": "PostFinanceCheckout integration for Shopware 6", + "extra": { + "copyright": "(c) by PostFinance Checkout", + "description": { + "de-DE": "PostFinanceCheckout integration für Shopware 6", + "en-GB": "PostFinanceCheckout integration for Shopware 6", + "fr-FR": "Intégration de PostFinanceCheckout pour Shopware 6", + "it-IT": "Integrazione PostFinanceCheckout per Shopware" + }, + "label": { + "de-DE": "PostFinanceCheckout Produkte für Shopware 6", + "en-GB": "PostFinanceCheckout Products for Shopware 6", + "fr-FR": "PostFinanceCheckout Produits for Shopware 6", + "it-IT": "PostFinanceCheckout Prodotti per Shopware 6" + }, + "manufacturerLink": { + "de-DE": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html", + "en-GB": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html", + "fr-FR": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html", + "it-IT": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html" + }, + "supportLink": { + "de-DE": "https://www.postfinance.ch/en/business/support.html", + "en-GB": "https://www.postfinance.ch/en/business/support.html", + "fr-FR": "https://www.postfinance.ch/en/business/support.html", + "it-IT": "https://www.postfinance.ch/en/business/support.html" + }, + "shopware-plugin-class": "PostFinanceCheckoutPayment\\PostFinanceCheckoutPayment" + }, + "homepage": "https://postfinance.ch/en/business/products/e-commerce/postfinance-checkout-all-in-one.html/", + "keywords": [ + "PostFinance Checkout", + "payment", + "php", + "shopware" + ], + "license": "Apache-2.0", + "name": "postfinancecheckout/shopware-6", + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "shopware/core": "~6.6.0", + "shopware/administration": "~6.6.0", + "shopware/storefront":"~6.6.0", + "postfinancecheckout/sdk": "^4.0.0" + }, + "type": "shopware-platform-plugin", + "version": "6.1.10" +} diff --git a/docs/en/documentation.html b/docs/en/documentation.html index 38ce5aa..359d7b3 100644 --- a/docs/en/documentation.html +++ b/docs/en/documentation.html @@ -23,7 +23,7 @@

Documentation

  • - + Source
  • diff --git a/src/Core/Api/Refund/Controller/RefundController.php b/src/Core/Api/Refund/Controller/RefundController.php index 8d2cf1d..8d16137 100644 --- a/src/Core/Api/Refund/Controller/RefundController.php +++ b/src/Core/Api/Refund/Controller/RefundController.php @@ -7,13 +7,14 @@ use Shopware\Core\Framework\Log\Package; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\{ - HttpFoundation\Request, - HttpFoundation\Response, - Routing\Attribute\Route,}; + HttpFoundation\Request, + HttpFoundation\Response, + Routing\Attribute\Route, +}; use PostFinanceCheckoutPayment\Core\{ - Api\Refund\Service\RefundService, - Settings\Service\SettingsService}; - + Api\Refund\Service\RefundService, + Settings\Service\SettingsService +}; /** * Class RefundController @@ -23,96 +24,126 @@ */ #[Package('sales-channel')] #[Route(defaults: ['_routeScope' => ['api']])] -class RefundController extends AbstractController { - - /** - * @var \PostFinanceCheckoutPayment\Core\Api\Refund\Service\RefundService - */ - protected $refundService; - - /** - * @var \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService - */ - protected $settingsService; - - /** - * @var \Psr\Log\LoggerInterface - */ - protected $logger; - - /** - * RefundController constructor. - * - * @param \PostFinanceCheckoutPayment\Core\Api\Refund\Service\RefundService $refundService - * @param \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService $settingsService - */ - public function __construct(RefundService $refundService, SettingsService $settingsService) - { - $this->settingsService = $settingsService; - $this->refundService = $refundService; - } - - /** - * @param \Psr\Log\LoggerInterface $logger - * @internal - * @required - * - */ - public function setLogger(LoggerInterface $logger): void - { - $this->logger = $logger; - } - - /** - * @param \Symfony\Component\HttpFoundation\Request $request - * @param \Shopware\Core\Framework\Context $context - * @return \Symfony\Component\HttpFoundation\Response - * @throws \PostFinanceCheckout\Sdk\ApiException - * @throws \PostFinanceCheckout\Sdk\Http\ConnectionException - * @throws \PostFinanceCheckout\Sdk\VersioningException - */ +class RefundController extends AbstractController +{ + /** + * @var \PostFinanceCheckoutPayment\Core\Api\Refund\Service\RefundService + */ + protected $refundService; + + /** + * @var \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService + */ + protected $settingsService; + + /** + * @var \Psr\Log\LoggerInterface + */ + protected $logger; + + /** + * RefundController constructor. + * + * @param \PostFinanceCheckoutPayment\Core\Api\Refund\Service\RefundService $refundService + * @param \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService $settingsService + */ + public function __construct(RefundService $refundService, SettingsService $settingsService) + { + $this->settingsService = $settingsService; + $this->refundService = $refundService; + } + + /** + * @param \Psr\Log\LoggerInterface $logger + * @internal + * @required + * + */ + public function setLogger(LoggerInterface $logger): void + { + $this->logger = $logger; + } + + /** + * @param \Symfony\Component\HttpFoundation\Request $request + * @param \Shopware\Core\Framework\Context $context + * @return \Symfony\Component\HttpFoundation\Response + * @throws \PostFinanceCheckout\Sdk\ApiException + * @throws \PostFinanceCheckout\Sdk\Http\ConnectionException + * @throws \PostFinanceCheckout\Sdk\VersioningException + */ #[Route("/api/_action/postfinancecheckout/refund/create-refund/", - name: "api.action.postfinancecheckout.refund.create-refund", - methods: ['POST'])] - public function createRefund(Request $request, Context $context): Response - { - $salesChannelId = $request->request->get('salesChannelId'); - $transactionId = $request->request->get('transactionId'); - $quantity = (int) $request->request->get('quantity'); - $lineItemId = $request->request->get('lineItemId'); - - $settings = $this->settingsService->getSettings($salesChannelId); - $apiClient = $settings->getApiClient(); - - $transaction = $apiClient->getTransactionService()->read($settings->getSpaceId(), $transactionId); - $this->refundService->create($transaction, $context, $lineItemId, $quantity); - - return new Response(null, Response::HTTP_NO_CONTENT); - } - - /** - * @param \Symfony\Component\HttpFoundation\Request $request - * @param \Shopware\Core\Framework\Context $context - * @return \Symfony\Component\HttpFoundation\Response - * @throws \PostFinanceCheckout\Sdk\ApiException - * @throws \PostFinanceCheckout\Sdk\Http\ConnectionException - * @throws \PostFinanceCheckout\Sdk\VersioningException - */ + name: "api.action.postfinancecheckout.refund.create-refund", + methods: ['POST'])] + public function createRefund(Request $request, Context $context): Response + { + $salesChannelId = $request->request->get('salesChannelId'); + $transactionId = $request->request->get('transactionId'); + $quantity = (int)$request->request->get('quantity'); + $lineItemId = $request->request->get('lineItemId'); + + $settings = $this->settingsService->getSettings($salesChannelId); + $apiClient = $settings->getApiClient(); + + $transaction = $apiClient->getTransactionService()->read($settings->getSpaceId(), $transactionId); + $refund = $this->refundService->create($transaction, $context, $lineItemId, $quantity); + if ($refund === null) { + return new Response('Refund was not created. Please check the refund amound or if the item was not refunded before', Response::HTTP_BAD_REQUEST); + } + + return new Response(null, Response::HTTP_NO_CONTENT); + } + + /** + * @param \Symfony\Component\HttpFoundation\Request $request + * @param \Shopware\Core\Framework\Context $context + * @return \Symfony\Component\HttpFoundation\Response + * @throws \PostFinanceCheckout\Sdk\ApiException + * @throws \PostFinanceCheckout\Sdk\Http\ConnectionException + * @throws \PostFinanceCheckout\Sdk\VersioningException + */ #[Route("/api/_action/postfinancecheckout/refund/create-refund-by-amount/", - name: "api.action.postfinancecheckout.refund.create.refund.by.amount", - methods: ['POST'])] - public function createRefundByAmount(Request $request, Context $context): Response - { - $salesChannelId = $request->request->get('salesChannelId'); - $transactionId = $request->request->get('transactionId'); - $refundableAmount = $request->request->get('refundableAmount'); - - $settings = $this->settingsService->getSettings($salesChannelId); - $apiClient = $settings->getApiClient(); - - $transaction = $apiClient->getTransactionService()->read($settings->getSpaceId(), $transactionId); - $this->refundService->createRefundByAmount($transaction, $refundableAmount, $context); - - return new Response(null, Response::HTTP_NO_CONTENT); - } + name: "api.action.postfinancecheckout.refund.create.refund.by.amount", + methods: ['POST'])] + public function createRefundByAmount(Request $request, Context $context): Response + { + $salesChannelId = $request->request->get('salesChannelId'); + $transactionId = $request->request->get('transactionId'); + $refundableAmount = $request->request->get('refundableAmount'); + + $settings = $this->settingsService->getSettings($salesChannelId); + $apiClient = $settings->getApiClient(); + + $transaction = $apiClient->getTransactionService()->read($settings->getSpaceId(), $transactionId); + $this->refundService->createRefundByAmount($transaction, $refundableAmount, $context); + + return new Response(null, Response::HTTP_NO_CONTENT); + } + + /** + * @param \Symfony\Component\HttpFoundation\Request $request + * @param \Shopware\Core\Framework\Context $context + * @return \Symfony\Component\HttpFoundation\Response + * @throws \PostFinanceCheckout\Sdk\ApiException + * @throws \PostFinanceCheckout\Sdk\Http\ConnectionException + * @throws \PostFinanceCheckout\Sdk\VersioningException + */ + #[Route("/api/_action/postfinancecheckout/refund/create-partial-refund/", + name: "api.action.postfinancecheckout.refund.create.partial.refund", + methods: ['POST'])] + public function createPartialRefund(Request $request, Context $context): Response + { + $salesChannelId = $request->request->get('salesChannelId'); + $transactionId = $request->request->get('transactionId'); + $refundableAmount = $request->request->get('refundableAmount'); + $lineItemId = $request->request->get('lineItemId'); + + $settings = $this->settingsService->getSettings($salesChannelId); + $apiClient = $settings->getApiClient(); + + $transaction = $apiClient->getTransactionService()->read($settings->getSpaceId(), $transactionId); + $this->refundService->createPartialRefund($transaction, $context, $lineItemId, $refundableAmount); + + return new Response(null, Response::HTTP_NO_CONTENT); + } } diff --git a/src/Core/Api/Refund/Service/RefundService.php b/src/Core/Api/Refund/Service/RefundService.php index 453d3f8..2746346 100644 --- a/src/Core/Api/Refund/Service/RefundService.php +++ b/src/Core/Api/Refund/Service/RefundService.php @@ -5,21 +5,21 @@ use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; use Shopware\Core\{ - Framework\Context, - Framework\DataAbstractionLayer\Search\Criteria, - Framework\DataAbstractionLayer\Search\Filter\EqualsFilter, - Framework\Uuid\Uuid + Framework\Context, + Framework\DataAbstractionLayer\Search\Criteria, + Framework\DataAbstractionLayer\Search\Filter\EqualsFilter, + Framework\Uuid\Uuid }; use PostFinanceCheckout\Sdk\{ - Model\Refund, - Model\Transaction + Model\Refund, + Model\Transaction }; use PostFinanceCheckoutPayment\Core\{ - Api\Refund\Entity\RefundEntity, - Api\Transaction\Entity\TransactionEntity, - Api\Transaction\Entity\TransactionEntityDefinition, - Settings\Service\SettingsService, - Util\Payload\RefundPayload + Api\Refund\Entity\RefundEntity, + Api\Transaction\Entity\TransactionEntity, + Api\Transaction\Entity\TransactionEntityDefinition, + Settings\Service\SettingsService, + Util\Payload\RefundPayload }; /** @@ -27,182 +27,218 @@ * * @package PostFinanceCheckoutPayment\Core\Api\Refund\Service */ -class RefundService { - - /** - * @var \Psr\Container\ContainerInterface - */ - protected $container; - - /** - * @var \Psr\Log\LoggerInterface - */ - private $logger; - - /** - * @var \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService - */ - private $settingsService; - - /** - * RefundService constructor. - * - * @param \Psr\Container\ContainerInterface $container - * @param \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService $settingsService - */ - public function __construct(ContainerInterface $container, SettingsService $settingsService) - { - $this->container = $container; - $this->settingsService = $settingsService; - } - - /** - * @param \Psr\Log\LoggerInterface $logger - * - * @internal - * @required - * - */ - public function setLogger(LoggerInterface $logger): void - { - $this->logger = $logger; - } - - - /** - * The pay function will be called after the customer completed the order. - * Allows to process the order and store additional information. - * - * A redirect to the url will be performed - * - * @param \PostFinanceCheckout\Sdk\Model\Transaction $transaction - * @param string|null $lineItemId - * @param int $quantity - * @param \Shopware\Core\Framework\Context $context - * - * @return \PostFinanceCheckout\Sdk\Model\Refund|null - * @throws \Exception - */ - public function create(Transaction $transaction, Context $context, ?string $lineItemId, int $quantity): ?Refund - { - try { - $transactionEntity = $this->getTransactionEntityByTransactionId($transaction->getId(), $context); - $settings = $this->settingsService->getSettings($transactionEntity->getSalesChannel()->getId()); - $apiClient = $settings->getApiClient(); - $refundPayloadClass = new RefundPayload(); - $refundPayloadClass->setLogger($this->logger); - - $refundPayload = $refundPayloadClass->get($transaction, $lineItemId, $quantity); - - if (!is_null($refundPayload)) { - $refund = $apiClient->getRefundService()->refund($settings->getSpaceId(), $refundPayload); - $this->upsert($refund, $context); - return $refund; - } - } catch (\Exception $exception) { - $this->logger->critical($exception->getMessage()); - } - return null; - } - - /** - * The pay function will be called after the customer completed the order. - * Allows to process the order and store additional information. - * - * A redirect to the url will be performed - * - * @param \PostFinanceCheckout\Sdk\Model\Transaction $transaction - * @param float $refundableAmount - * @param \Shopware\Core\Framework\Context $context - * - * @return \PostFinanceCheckout\Sdk\Model\Refund|null - * @throws \Exception - */ - public function createRefundByAmount(Transaction $transaction, float $refundableAmount, Context $context): ?Refund - { - try { - $transactionEntity = $this->getTransactionEntityByTransactionId($transaction->getId(), $context); - $settings = $this->settingsService->getSettings($transactionEntity->getSalesChannel()->getId()); - $apiClient = $settings->getApiClient(); - $refundPayloadClass = new RefundPayload(); - $refundPayloadClass->setLogger($this->logger); - - $refundPayload = $refundPayloadClass->getByAmount($transaction, $refundableAmount); - - if (!is_null($refundPayload)) { - $refund = $apiClient->getRefundService()->refund($settings->getSpaceId(), $refundPayload); - $this->upsert($refund, $context); - return $refund; - } - } catch (\Exception $exception) { - $this->logger->critical($exception->getMessage()); - } - return null; - } - - /** - * Get transaction entity by PostFinanceCheckout transaction id - * - * @param int $transactionId - * @param \Shopware\Core\Framework\Context $context - * - * @return \PostFinanceCheckoutPayment\Core\Api\Transaction\Entity\TransactionEntity - */ - public function getTransactionEntityByTransactionId(int $transactionId, Context $context): TransactionEntity - { - return $this->container->get(TransactionEntityDefinition::ENTITY_NAME . '.repository') - ->search( - (new Criteria())->addFilter(new EqualsFilter('transactionId', $transactionId)), - $context - ) - ->first(); - } - - /** - * Persist PostFinanceCheckout transaction - * - * @param \Shopware\Core\Framework\Context $context - * @param \PostFinanceCheckout\Sdk\Model\Refund $refund - */ - public function upsert(Refund $refund, Context $context): void - { - $refundEntity = $this->getByRefundId($refund->getId(), $context); - $id = is_null($refundEntity) ? Uuid::randomHex() : $refundEntity->getId(); - try { - - $data = [ - 'id' => $id, - 'data' => json_decode(strval($refund), true), - 'refundId' => $refund->getId(), - 'spaceId' => $refund->getLinkedSpaceId(), - 'state' => $refund->getState(), - 'transactionId' => $refund->getTransaction()->getId(), - ]; - - $data = array_filter($data); - $this->container->get('postfinancecheckout_refund.repository')->upsert([$data], $context); - - } catch (\Exception $exception) { - $this->logger->critical(__CLASS__ . ' : ' . __FUNCTION__ . ' : ' . $exception->getMessage()); - } - } - - /** - * Get refund entity by PostFinanceCheckout refund id - * - * @param int $refundId - * @param \Shopware\Core\Framework\Context $context - * - * @return \PostFinanceCheckoutPayment\Core\Api\Refund\Entity\RefundEntity|null - */ - public function getByRefundId(int $refundId, Context $context): ?RefundEntity - { - return $this->container->get('postfinancecheckout_refund.repository') - ->search( - (new Criteria())->addFilter(new EqualsFilter('refundId', $refundId)), - $context - ) - ->first(); - } - +class RefundService +{ + + /** + * @var \Psr\Container\ContainerInterface + */ + protected $container; + + /** + * @var \Psr\Log\LoggerInterface + */ + private $logger; + + /** + * @var \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService + */ + private $settingsService; + + /** + * RefundService constructor. + * + * @param \Psr\Container\ContainerInterface $container + * @param \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService $settingsService + */ + public function __construct(ContainerInterface $container, SettingsService $settingsService) + { + $this->container = $container; + $this->settingsService = $settingsService; + } + + /** + * @param \Psr\Log\LoggerInterface $logger + * + * @internal + * @required + * + */ + public function setLogger(LoggerInterface $logger): void + { + $this->logger = $logger; + } + + /** + * The pay function will be called after the customer completed the order. + * Allows to process the order and store additional information. + * + * A redirect to the url will be performed + * + * @param \PostFinanceCheckout\Sdk\Model\Transaction $transaction + * @param string|null $lineItemId + * @param int $quantity + * @param \Shopware\Core\Framework\Context $context + * + * @return \PostFinanceCheckout\Sdk\Model\Refund|null + * @throws \Exception + */ + public function create(Transaction $transaction, Context $context, ?string $lineItemId, int $quantity): ?Refund + { + try { + $transactionEntity = $this->getTransactionEntityByTransactionId($transaction->getId(), $context); + $settings = $this->settingsService->getSettings($transactionEntity->getSalesChannel()->getId()); + $apiClient = $settings->getApiClient(); + $refundPayloadClass = new RefundPayload(); + $refundPayloadClass->setLogger($this->logger); + + $refundPayload = $refundPayloadClass->get($transaction, $lineItemId, $quantity); + + if (!is_null($refundPayload)) { + $refund = $apiClient->getRefundService()->refund($settings->getSpaceId(), $refundPayload); + $this->upsert($refund, $context); + return $refund; + } + } catch (\Exception $exception) { + $this->logger->critical($exception->getMessage()); + } + return null; + } + + /** + * The pay function will be called after the customer completed the order. + * Allows to process the order and store additional information. + * + * A redirect to the url will be performed + * + * @param \PostFinanceCheckout\Sdk\Model\Transaction $transaction + * @param float $refundableAmount + * @param \Shopware\Core\Framework\Context $context + * + * @return \PostFinanceCheckout\Sdk\Model\Refund|null + * @throws \Exception + */ + public function createRefundByAmount(Transaction $transaction, float $refundableAmount, Context $context): ?Refund + { + try { + $transactionEntity = $this->getTransactionEntityByTransactionId($transaction->getId(), $context); + $settings = $this->settingsService->getSettings($transactionEntity->getSalesChannel()->getId()); + $apiClient = $settings->getApiClient(); + $refundPayloadClass = new RefundPayload(); + $refundPayloadClass->setLogger($this->logger); + + $refundPayload = $refundPayloadClass->getByAmount($transaction, $refundableAmount); + + if (!is_null($refundPayload)) { + $refund = $apiClient->getRefundService()->refund($settings->getSpaceId(), $refundPayload); + $this->upsert($refund, $context); + return $refund; + } + } catch (\Exception $exception) { + $this->logger->critical($exception->getMessage()); + } + return null; + } + + /** + * The pay function will be called after the customer completed the order. + * Allows to process the order and store additional information. + * + * A redirect to the url will be performed + * + * @param \PostFinanceCheckout\Sdk\Model\Transaction $transaction + * @param \Shopware\Core\Framework\Context $context + * @param string $lineItemId + * @param float $amount + * + * @return \PostFinanceCheckout\Sdk\Model\Refund|null + * @throws \Exception + */ + public function createPartialRefund(Transaction $transaction, Context $context, string $lineItemId, float $amount): ?Refund + { + try { + $transactionEntity = $this->getTransactionEntityByTransactionId($transaction->getId(), $context); + $settings = $this->settingsService->getSettings($transactionEntity->getSalesChannel()->getId()); + $apiClient = $settings->getApiClient(); + $refundPayloadClass = new RefundPayload(); + $refundPayloadClass->setLogger($this->logger); + + $refundPayload = $refundPayloadClass->getForPartial($transaction, $lineItemId, $amount); + + if (!is_null($refundPayload)) { + $refund = $apiClient->getRefundService()->refund($settings->getSpaceId(), $refundPayload); + $this->upsert($refund, $context); + return $refund; + } + } catch (\Exception $exception) { + $this->logger->critical($exception->getMessage()); + } + return null; + } + + /** + * Get transaction entity by PostFinanceCheckout transaction id + * + * @param int $transactionId + * @param \Shopware\Core\Framework\Context $context + * + * @return \PostFinanceCheckoutPayment\Core\Api\Transaction\Entity\TransactionEntity + */ + public function getTransactionEntityByTransactionId(int $transactionId, Context $context): TransactionEntity + { + return $this->container->get(TransactionEntityDefinition::ENTITY_NAME . '.repository') + ->search( + (new Criteria())->addFilter(new EqualsFilter('transactionId', $transactionId)), + $context + ) + ->first(); + } + + /** + * Persist PostFinanceCheckout transaction + * + * @param \Shopware\Core\Framework\Context $context + * @param \PostFinanceCheckout\Sdk\Model\Refund $refund + */ + public function upsert(Refund $refund, Context $context): void + { + $refundEntity = $this->getByRefundId($refund->getId(), $context); + $id = is_null($refundEntity) ? Uuid::randomHex() : $refundEntity->getId(); + try { + + $data = [ + 'id' => $id, + 'data' => json_decode(strval($refund), true), + 'refundId' => $refund->getId(), + 'spaceId' => $refund->getLinkedSpaceId(), + 'state' => $refund->getState(), + 'transactionId' => $refund->getTransaction()->getId(), + ]; + + $data = array_filter($data); + $this->container->get('postfinancecheckout_refund.repository')->upsert([$data], $context); + + } catch (\Exception $exception) { + $this->logger->critical(__CLASS__ . ' : ' . __FUNCTION__ . ' : ' . $exception->getMessage()); + } + } + + /** + * Get refund entity by PostFinanceCheckout refund id + * + * @param int $refundId + * @param \Shopware\Core\Framework\Context $context + * + * @return \PostFinanceCheckoutPayment\Core\Api\Refund\Entity\RefundEntity|null + */ + public function getByRefundId(int $refundId, Context $context): ?RefundEntity + { + return $this->container->get('postfinancecheckout_refund.repository') + ->search( + (new Criteria())->addFilter(new EqualsFilter('refundId', $refundId)), + $context + ) + ->first(); + } + } diff --git a/src/Core/Storefront/Account/Controller/AccountOrderController.php b/src/Core/Storefront/Account/Controller/AccountOrderController.php index 31ee562..683702a 100644 --- a/src/Core/Storefront/Account/Controller/AccountOrderController.php +++ b/src/Core/Storefront/Account/Controller/AccountOrderController.php @@ -4,126 +4,127 @@ use Psr\Log\LoggerInterface; use Shopware\Core\{ - Checkout\Cart\Exception\CustomerNotLoggedInException, - Checkout\Customer\CustomerEntity, - PlatformRequest, - System\SalesChannel\SalesChannelContext}; + Checkout\Cart\Exception\CustomerNotLoggedInException, + Checkout\Customer\CustomerEntity, + PlatformRequest, + System\SalesChannel\SalesChannelContext +}; use Shopware\Storefront\Controller\StorefrontController; use Shopware\Core\Framework\Log\Package; use Symfony\Component\{ - HttpFoundation\HeaderUtils, - HttpFoundation\RequestStack, - HttpFoundation\Response, - Routing\Attribute\Route, - Security\Core\Exception\AccessDeniedException}; + HttpFoundation\HeaderUtils, + HttpFoundation\RequestStack, + HttpFoundation\Response, + Routing\Attribute\Route, + Security\Core\Exception\AccessDeniedException +}; use PostFinanceCheckoutPayment\Core\{ - Api\Transaction\Service\TransactionService, - Settings\Service\SettingsService}; + Api\Transaction\Service\TransactionService, + Settings\Service\SettingsService +}; #[Package('storefront')] #[Route(defaults: ['_routeScope' => ['storefront']])] -class AccountOrderController extends StorefrontController { - - /** - * @var \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService - */ - protected $settingsService; - - /** - * @var \Psr\Log\LoggerInterface - */ - protected $logger; - - /** - * @var \PostFinanceCheckoutPayment\Core\Api\Transaction\Service\TransactionService - */ - protected $transactionService; - - /** - * AccountOrderController constructor. - * @param \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService $settingsService - * @param \PostFinanceCheckoutPayment\Core\Api\Transaction\Service\TransactionService $transactionService - */ - public function __construct(SettingsService $settingsService, TransactionService $transactionService) - { - $this->settingsService = $settingsService; - $this->transactionService = $transactionService; - } - - /** - * @param \Psr\Log\LoggerInterface $logger - * @internal - * @required - * - */ - public function setLogger(LoggerInterface $logger): void - { - $this->logger = $logger; - } - - - /** - * Download invoice document - * - * @param string $orderId - * @param \Shopware\Core\System\SalesChannel\SalesChannelContext $salesChannelContext - * @return \Symfony\Component\HttpFoundation\Response - * - * @throws \PostFinanceCheckout\Sdk\ApiException - * @throws \PostFinanceCheckout\Sdk\Http\ConnectionException - * @throws \PostFinanceCheckout\Sdk\VersioningException - */ +class AccountOrderController extends StorefrontController +{ + /** + * @var \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService + */ + protected $settingsService; + + /** + * @var \Psr\Log\LoggerInterface + */ + protected $logger; + + /** + * @var \PostFinanceCheckoutPayment\Core\Api\Transaction\Service\TransactionService + */ + protected $transactionService; + + /** + * @var RequestStack + */ + protected $requestStack; + + /** + * AccountOrderController constructor. + * @param \PostFinanceCheckoutPayment\Core\Settings\Service\SettingsService $settingsService + * @param \PostFinanceCheckoutPayment\Core\Api\Transaction\Service\TransactionService $transactionService + * @param RequestStack $requestStack + */ + public function __construct(SettingsService $settingsService, TransactionService $transactionService, RequestStack $requestStack) + { + $this->settingsService = $settingsService; + $this->transactionService = $transactionService; + $this->requestStack = $requestStack; + } + + /** + * @param \Psr\Log\LoggerInterface $logger + * @internal + * @required + * + */ + public function setLogger(LoggerInterface $logger): void + { + $this->logger = $logger; + } + + /** + * Download invoice document + * + * @param string $orderId + * @param \Shopware\Core\System\SalesChannel\SalesChannelContext $salesChannelContext + * @return \Symfony\Component\HttpFoundation\Response + * + * @throws \PostFinanceCheckout\Sdk\ApiException + * @throws \PostFinanceCheckout\Sdk\Http\ConnectionException + * @throws \PostFinanceCheckout\Sdk\VersioningException + */ #[Route("/postfinancecheckout/account/order/download/invoice/document/{orderId}", - name: "frontend.postfinancecheckout.account.order.download.invoice.document", - methods: ['GET'])] - public function downloadInvoiceDocument(string $orderId, SalesChannelContext $salesChannelContext): Response - { - $customer = $this->getLoggedInCustomer(); - $settings = $this->settingsService->getSettings($salesChannelContext->getSalesChannel()->getId()); - $transactionEntity = $this->transactionService->getByOrderId($orderId, $salesChannelContext->getContext()); - if (strcasecmp($customer->getCustomerNumber(), $transactionEntity->getData()['customerId']) != 0) { - throw new AccessDeniedException(); - } - $invoiceDocument = $settings->getApiClient()->getTransactionService()->getInvoiceDocument($settings->getSpaceId(), $transactionEntity->getTransactionId()); - $forceDownload = true; - $filename = preg_replace('/[\x00-\x1F\x7F-\xFF]/', '_', $invoiceDocument->getTitle()) . '.pdf'; - $disposition = HeaderUtils::makeDisposition( - $forceDownload ? HeaderUtils::DISPOSITION_ATTACHMENT : HeaderUtils::DISPOSITION_INLINE, - $filename, - $filename - ); - $response = new Response(base64_decode($invoiceDocument->getData())); - $response->headers->set('Content-Type', $invoiceDocument->getMimeType()); - $response->headers->set('Content-Disposition', $disposition); - - return $response; - } - - /** - * - * @return \Shopware\Core\Checkout\Customer\CustomerEntity - */ - protected function getLoggedInCustomer(): CustomerEntity - { - /** @var RequestStack $requestStack */ - $requestStack = $this->get('request_stack'); - $request = $requestStack->getCurrentRequest(); - - if (!$request) { - throw new CustomerNotLoggedInException(); - } - - /** @var SalesChannelContext|null $context */ - $context = $request->attributes->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT); - - if ( - $context - && $context->getCustomer() - && $context->getCustomer()->getGuest() === false - ) { - return $context->getCustomer(); - } - - throw new CustomerNotLoggedInException(); - } + name: "frontend.postfinancecheckout.account.order.download.invoice.document", + methods: ['GET'])] + public function downloadInvoiceDocument(string $orderId, SalesChannelContext $salesChannelContext): Response + { + $customer = $this->getLoggedInCustomer(); + $settings = $this->settingsService->getSettings($salesChannelContext->getSalesChannel()->getId()); + $transactionEntity = $this->transactionService->getByOrderId($orderId, $salesChannelContext->getContext()); + if (strcasecmp($customer->getCustomerNumber(), $transactionEntity->getData()['customerId']) != 0) { + throw new AccessDeniedException(); + } + $invoiceDocument = $settings->getApiClient()->getTransactionService()->getInvoiceDocument($settings->getSpaceId(), $transactionEntity->getTransactionId()); + $forceDownload = true; + $filename = preg_replace('/[\x00-\x1F\x7F-\xFF]/', '_', $invoiceDocument->getTitle()) . '.pdf'; + $disposition = HeaderUtils::makeDisposition( + $forceDownload ? HeaderUtils::DISPOSITION_ATTACHMENT : HeaderUtils::DISPOSITION_INLINE, + $filename, + $filename + ); + $response = new Response(base64_decode($invoiceDocument->getData())); + $response->headers->set('Content-Type', $invoiceDocument->getMimeType()); + $response->headers->set('Content-Disposition', $disposition); + + return $response; + } + + /** + * @return CustomerEntity + */ + protected function getLoggedInCustomer(): CustomerEntity + { + $request = $this->requestStack->getCurrentRequest(); + + if (!$request) { + throw new CustomerNotLoggedInException(); + } + + $context = $request->attributes->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT); + + if ($context && $context->getCustomer() && $context->getCustomer()->getGuest() === false) { + return $context->getCustomer(); + } + + throw new CustomerNotLoggedInException(); + } } diff --git a/src/Core/Util/Payload/RefundPayload.php b/src/Core/Util/Payload/RefundPayload.php index 238a33f..e393abb 100644 --- a/src/Core/Util/Payload/RefundPayload.php +++ b/src/Core/Util/Payload/RefundPayload.php @@ -3,11 +3,12 @@ namespace PostFinanceCheckoutPayment\Core\Util\Payload; use PostFinanceCheckout\Sdk\{ - Model\LineItem, - Model\RefundCreate, - Model\RefundType, - Model\Transaction, - Model\TransactionState}; + Model\LineItem, + Model\RefundCreate, + Model\RefundType, + Model\Transaction, + Model\TransactionState +}; use PostFinanceCheckoutPayment\Core\Util\Exception\InvalidPayloadException; /** @@ -15,106 +16,156 @@ * * @package PostFinanceCheckoutPayment\Core\Util\Payload */ -class RefundPayload extends AbstractPayload { - - /** - * @param \PostFinanceCheckout\Sdk\Model\Transaction $transaction - * @param string $lineItemId - * @param int $quantity - * @return \PostFinanceCheckout\Sdk\Model\RefundCreate|null - * @throws \Exception - */ - public function get(Transaction $transaction, string $lineItemId, int $quantity): ?RefundCreate - { - $lineItem = $this->findLineItemByUniqueId($transaction['line_items'], $lineItemId); - - if ($lineItem === null) { - $errorMessage = sprintf('Line item doesn\'t exist: %s', $lineItemId); - $this->logger->critical($errorMessage); - throw new InvalidPayloadException($errorMessage); - } - - $price = 0; - - // If refund the whole line item - if ($quantity === 0) { - $quantity = $lineItem['quantity']; - $price = $lineItem['unit_price_including_tax']; - } - - $amount = floatval($quantity * $lineItem['unit_price_including_tax']); - - if ( - ($transaction->getState() == TransactionState::FULFILL) && - ($amount <= floatval($transaction->getAuthorizationAmount())) - ) { - $reduction = new \PostFinanceCheckout\Sdk\Model\LineItemReductionCreate(); - $reduction->setLineItemUniqueId($lineItem['unique_id']); - $reduction->setQuantityReduction($quantity); - $reduction->setUnitPriceReduction($price); - - $refund = (new RefundCreate()) - ->setReductions([$reduction]) - ->setTransaction($transaction->getId()) - ->setMerchantReference($this->fixLength($transaction->getMerchantReference(), 100)) - ->setExternalId($this->fixLength(uniqid('refund_', true), 100)) - /** @noinspection PhpParamsInspection */ - ->setType(RefundType::MERCHANT_INITIATED_ONLINE); - - if (!$refund->valid()) { - $this->logger->critical('Refund payload invalid:', $refund->listInvalidProperties()); - throw new InvalidPayloadException('Refund payload invalid:' . json_encode($refund->listInvalidProperties())); - } - - return $refund; - } - - return null; - } - - /** - * @param \PostFinanceCheckout\Sdk\Model\Transaction $transaction - * @param float $amount - * @return \PostFinanceCheckout\Sdk\Model\RefundCreate|null - * @throws \Exception - */ - public function getByAmount(Transaction $transaction, float $amount): ?RefundCreate - { - if ( - ($transaction->getState() == TransactionState::FULFILL) && - ($amount <= floatval($transaction->getAuthorizationAmount())) - ) { - $refund = (new RefundCreate()) - ->setAmount(self::round($amount)) - ->setTransaction($transaction->getId()) - ->setMerchantReference($this->fixLength($transaction->getMerchantReference(), 100)) - ->setExternalId($this->fixLength(uniqid('refund_', true), 100)) - ->setType(RefundType::MERCHANT_INITIATED_ONLINE); - - if (!$refund->valid()) { - $this->logger->critical('Refund payload invalid:', $refund->listInvalidProperties()); - throw new InvalidPayloadException('Refund payload invalid:' . json_encode($refund->listInvalidProperties())); - } - - return $refund; - } - - return null; - } - - /** - * @param array $lineItems - * @param string $uniqueId - * @return LineItem|null - */ - private function findLineItemByUniqueId(array $lineItems, string $uniqueId): ?LineItem - { - $lineItems = \array_values( - \array_filter($lineItems, function ($item) use ($uniqueId) { - return $item['unique_id'] === $uniqueId; - }) - ); - - return $lineItems[0] ?? null; - } +class RefundPayload extends AbstractPayload +{ + + /** + * @param \PostFinanceCheckout\Sdk\Model\Transaction $transaction + * @param string $lineItemId + * @param int $quantity + * @return \PostFinanceCheckout\Sdk\Model\RefundCreate|null + * @throws \Exception + */ + public function get(Transaction $transaction, string $lineItemId, int $quantity): ?RefundCreate + { + $lineItem = $this->findLineItemByUniqueId($transaction['line_items'], $lineItemId); + + if ($lineItem === null) { + $errorMessage = sprintf('Line item doesn\'t exist: %s', $lineItemId); + $this->logger->critical($errorMessage); + throw new InvalidPayloadException($errorMessage); + } + + $price = 0; + + // If refund the whole line item + if ($quantity === 0) { + $quantity = $lineItem['quantity']; + $price = $lineItem['unit_price_including_tax']; + } + + $amount = floatval($quantity * $lineItem['unit_price_including_tax']); + + if ( + ($transaction->getState() == TransactionState::FULFILL) && + ($amount <= floatval($transaction->getAuthorizationAmount())) + ) { + $reduction = new \PostFinanceCheckout\Sdk\Model\LineItemReductionCreate(); + $reduction->setLineItemUniqueId($lineItem['unique_id']); + $reduction->setQuantityReduction($quantity); + $reduction->setUnitPriceReduction($price); + + $refund = (new RefundCreate()) + ->setReductions([$reduction]) + ->setTransaction($transaction->getId()) + ->setMerchantReference($this->fixLength($transaction->getMerchantReference(), 100)) + ->setExternalId($this->fixLength(uniqid('refund_', true), 100)) + /** @noinspection PhpParamsInspection */ + ->setType(RefundType::MERCHANT_INITIATED_ONLINE); + + if (!$refund->valid()) { + $this->logger->critical('Refund payload invalid:', $refund->listInvalidProperties()); + throw new InvalidPayloadException('Refund payload invalid:' . json_encode($refund->listInvalidProperties())); + } + + return $refund; + } + + return null; + } + + /** + * @param \PostFinanceCheckout\Sdk\Model\Transaction $transaction + * @param float $amount + * @return \PostFinanceCheckout\Sdk\Model\RefundCreate|null + * @throws \Exception + */ + public function getByAmount(Transaction $transaction, float $amount): ?RefundCreate + { + if ( + ($transaction->getState() == TransactionState::FULFILL) && + ($amount <= floatval($transaction->getAuthorizationAmount())) + ) { + $refund = (new RefundCreate()) + ->setAmount(self::round($amount)) + ->setTransaction($transaction->getId()) + ->setMerchantReference($this->fixLength($transaction->getMerchantReference(), 100)) + ->setExternalId($this->fixLength(uniqid('refund_', true), 100)) + ->setType(RefundType::MERCHANT_INITIATED_ONLINE); + + if (!$refund->valid()) { + $this->logger->critical('Refund payload invalid:', $refund->listInvalidProperties()); + throw new InvalidPayloadException('Refund payload invalid:' . json_encode($refund->listInvalidProperties())); + } + + return $refund; + } + + return null; + } + + /** + * @param \PostFinanceCheckout\Sdk\Model\Transaction $transaction + * @param string $lineItemId + * @param int $quantity + * @return \PostFinanceCheckout\Sdk\Model\RefundCreate|null + * @throws \Exception + */ + public function getForPartial(Transaction $transaction, string $lineItemId, float $amount): ?RefundCreate + { + $lineItem = $this->findLineItemByUniqueId($transaction['line_items'], $lineItemId); + + if ($lineItem === null) { + $errorMessage = sprintf('Line item doesn\'t exist: %s', $lineItemId); + $this->logger->critical($errorMessage); + throw new InvalidPayloadException($errorMessage); + } + + $unitPrice = floatval($lineItem['unit_price_including_tax']); + $quantityAvailable = intval($lineItem['quantity']); + $totalItemAmount = $unitPrice * $quantityAvailable; + + if ( + ($transaction->getState() == TransactionState::FULFILL) && + ($amount <= $totalItemAmount) + ) { + $reduction = new \PostFinanceCheckout\Sdk\Model\LineItemReductionCreate(); + $reduction->setLineItemUniqueId($lineItemId); + $reduction->setQuantityReduction(0); + $reduction->setUnitPriceReduction($amount / $quantityAvailable); + + $refund = (new RefundCreate()) + ->setReductions([$reduction]) + ->setTransaction($transaction->getId()) + ->setMerchantReference($this->fixLength($transaction->getMerchantReference(), 100)) + ->setExternalId($this->fixLength(uniqid('refund_', true), 100)) + /** @noinspection PhpParamsInspection */ + ->setType(RefundType::MERCHANT_INITIATED_ONLINE); + + if (!$refund->valid()) { + $this->logger->critical('Refund payload invalid:', $refund->listInvalidProperties()); + throw new InvalidPayloadException('Refund payload invalid:' . json_encode($refund->listInvalidProperties())); + } + + return $refund; + } + + return null; + } + + /** + * @param array $lineItems + * @param string $uniqueId + * @return LineItem|null + */ + private function findLineItemByUniqueId(array $lineItems, string $uniqueId): ?LineItem + { + $lineItems = \array_values( + \array_filter($lineItems, function ($item) use ($uniqueId) { + return $item['unique_id'] === $uniqueId; + }) + ); + + return $lineItems[0] ?? null; + } } diff --git a/src/PostFinanceCheckoutPayment.php b/src/PostFinanceCheckoutPayment.php index ae722d7..7752f4d 100644 --- a/src/PostFinanceCheckoutPayment.php +++ b/src/PostFinanceCheckoutPayment.php @@ -124,4 +124,13 @@ public function enrichPrivileges(): array ], ]; } + + /** + * {@inheritdoc} + */ + public function executeComposerCommands(): bool + { + // The plugin needs the SDK to be installed via composer. + return true; + } } diff --git a/src/Resources/app/administration/src/core/service/api/postfinancecheckout-refund.service.js b/src/Resources/app/administration/src/core/service/api/postfinancecheckout-refund.service.js index d0f70cb..ff71806 100644 --- a/src/Resources/app/administration/src/core/service/api/postfinancecheckout-refund.service.js +++ b/src/Resources/app/administration/src/core/service/api/postfinancecheckout-refund.service.js @@ -75,6 +75,36 @@ class PostFinanceCheckoutRefundService extends ApiService { return ApiService.handleResponse(response); }); } + + /** + * Refund a transaction + * + * @param {String} salesChannelId + * @param {int} transactionId + * @param {float} refundableAmount + * @param {String} lineItemId + * @return {*} + */ + createPartialRefund(salesChannelId, transactionId, refundableAmount, lineItemId) { + + const headers = this.getBasicHeaders(); + const apiRoute = `${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/refund/create-partial-refund/`; + + return this.httpClient.post( + apiRoute, + { + salesChannelId: salesChannelId, + transactionId: transactionId, + refundableAmount: refundableAmount, + lineItemId: lineItemId + }, + { + headers: headers + } + ).then((response) => { + return ApiService.handleResponse(response); + }); + } } -export default PostFinanceCheckoutRefundService; \ No newline at end of file +export default PostFinanceCheckoutRefundService; diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-partial/index.html.twig b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-partial/index.html.twig new file mode 100644 index 0000000..6b1d1b3 --- /dev/null +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-partial/index.html.twig @@ -0,0 +1,31 @@ +{% block postfinancecheckout_order_action_refund_partial %} + + + {% block postfinancecheckout_order_action_refund_amount_partial %} + + + +
    + {{ $tc('postfinancecheckout-order.refundAction.maxAvailableAmountToRefund') }}: + {{ this.$parent.$parent.itemRefundableAmount }} +
    + {% endblock %} + + {% block postfinancecheckout_order_action_refund_confirm_button_partial %} + + {% endblock %} + + +
    +{% endblock %} diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-partial/index.js b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-partial/index.js new file mode 100644 index 0000000..923e50a --- /dev/null +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-partial/index.js @@ -0,0 +1,101 @@ +/* global Shopware */ + +import template from './index.html.twig'; + +const {Component, Mixin, Filter, Utils} = Shopware; + +Component.register('postfinancecheckout-order-action-refund-partial', { + template, + + inject: ['PostFinanceCheckoutRefundService'], + + mixins: [ + Mixin.getByName('notification') + ], + + props: { + transactionData: { + type: Object, + required: true + }, + + orderId: { + type: String, + required: true + } + }, + + data() { + return { + isLoading: true, + currency: this.transactionData.transactions[0].currency, + refundAmount: 0.00, + }; + }, + + computed: { + dateFilter() { + return Filter.getByName('date'); + } + }, + + created() { + this.createdComponent(); + }, + + methods: { + createdComponent() { + this.isLoading = false; + this.currency = this.transactionData.transactions[0].currency; + this.refundAmount = this.$parent.$parent.itemRefundableAmount; + }, + + createPartialRefund(itemUniqueId) { + this.isLoading = true; + this.PostFinanceCheckoutRefundService.createPartialRefund( + this.transactionData.transactions[0].metaData.salesChannelId, + this.transactionData.transactions[0].id, + this.refundAmount, + itemUniqueId + ).then(() => { + this.createNotificationSuccess({ + title: this.$tc('postfinancecheckout-order.refundAction.successTitle'), + message: this.$tc('postfinancecheckout-order.refundAction.successMessage') + }); + this.isLoading = false; + this.$emit('modal-close'); + this.$nextTick(() => { + this.$router.replace(`${this.$route.path}?hash=${Utils.createId()}`); + }); + }).catch((errorResponse) => { + try { + this.createNotificationError({ + title: errorResponse.response.data.errors[0].title, + message: errorResponse.response.data.errors[0].detail, + autoClose: false + }); + } catch (e) { + this.createNotificationError({ + title: errorResponse.title, + message: errorResponse.message, + autoClose: false + }); + } finally { + this.isLoading = false; + this.$emit('modal-close'); + this.$nextTick(() => { + this.$router.replace(`${this.$route.path}?hash=${Utils.createId()}`); + }); + } + }); + } + }, + + watch: { + refundAmount(newValue) { + if (newValue !== null) { + this.refundAmount = Math.round(newValue * 100) / 100; + } + } + } +}); diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-selected/index.html.twig b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-selected/index.html.twig new file mode 100644 index 0000000..351cf9c --- /dev/null +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-selected/index.html.twig @@ -0,0 +1,16 @@ +{% block postfinancecheckout_order_action_refund_selected %} + + + {% block postfinancecheckout_order_action_refund_confirm_button_selected %} + + {% endblock %} + + + +{% endblock %} diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-selected/index.js b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-selected/index.js new file mode 100644 index 0000000..bfd8b2a --- /dev/null +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund-selected/index.js @@ -0,0 +1,94 @@ +/* global Shopware */ + +import template from './index.html.twig'; + +const {Component, Mixin, Filter, Utils} = Shopware; + +Component.register('postfinancecheckout-order-action-refund-selected', { + template, + + inject: ['PostFinanceCheckoutRefundService'], + + mixins: [ + Mixin.getByName('notification') + ], + + props: { + transactionData: { + type: Object, + required: true + }, + + orderId: { + type: String, + required: true + } + }, + + data() { + return { + isLoading: true, + currency: this.transactionData.transactions[0].currency, + refundAmount: 0, + refundableAmount: 0, + }; + }, + + computed: { + dateFilter() { + return Filter.getByName('date'); + } + }, + + created() { + this.createdComponent(); + }, + + methods: { + createdComponent() { + this.isLoading = false; + this.currency = this.transactionData.transactions[0].currency; + this.refundAmount = Number(this.transactionData.transactions[0].amountIncludingTax); + this.refundableAmount = Number(this.transactionData.transactions[0].amountIncludingTax); + }, + + refundSelected() { + this.isLoading = true; + this.PostFinanceCheckoutRefundService.createRefundByAmount( + this.transactionData.transactions[0].metaData.salesChannelId, + this.transactionData.transactions[0].id, + this.refundAmount + ).then(() => { + this.createNotificationSuccess({ + title: this.$tc('postfinancecheckout-order.refundAction.successTitle'), + message: this.$tc('postfinancecheckout-order.refundAction.successMessage') + }); + this.isLoading = false; + this.$emit('modal-close'); + this.$nextTick(() => { + this.$router.replace(`${this.$route.path}?hash=${Utils.createId()}`); + }); + }).catch((errorResponse) => { + try { + this.createNotificationError({ + title: errorResponse.response.data.errors[0].title, + message: errorResponse.response.data.errors[0].detail, + autoClose: false + }); + } catch (e) { + this.createNotificationError({ + title: errorResponse.title, + message: errorResponse.message, + autoClose: false + }); + } finally { + this.isLoading = false; + this.$emit('modal-close'); + this.$nextTick(() => { + this.$router.replace(`${this.$route.path}?hash=${Utils.createId()}`); + }); + } + }); + } + } +}); diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund/index.html.twig b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund/index.html.twig index f975a8c..7702916 100644 --- a/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund/index.html.twig +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund/index.html.twig @@ -5,15 +5,16 @@ {% block postfinancecheckout_order_action_refund_amount %} - +
    {{ $tc('postfinancecheckout-order.refundAction.maxAvailableItemsToRefund') }}: - {{ this.$parent.$parent.refundableQuantity }} + {{ this.$parent.$parent.itemRefundableQuantity }}
    {% endblock %} diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund/index.js b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund/index.js index 5569628..33490e7 100644 --- a/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund/index.js +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/component/postfinancecheckout-order-action-refund/index.js @@ -27,8 +27,7 @@ Component.register('postfinancecheckout-order-action-refund', { data() { return { - refundQuantity: 1, - transactionData: {}, + refundQuantity: 0, isLoading: true, currentLineItem: '', }; @@ -47,6 +46,7 @@ Component.register('postfinancecheckout-order-action-refund', { methods: { createdComponent() { this.isLoading = false; + this.refundQuantity = 1; }, refund() { diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/page/postfinancecheckout-order-detail/index.html.twig b/src/Resources/app/administration/src/module/postfinancecheckout-order/page/postfinancecheckout-order-detail/index.html.twig index 72e40ee..7b3e9f1 100644 --- a/src/Resources/app/administration/src/module/postfinancecheckout-order/page/postfinancecheckout-order-detail/index.html.twig +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/page/postfinancecheckout-order-detail/index.html.twig @@ -81,37 +81,57 @@ {% endblock %} {% block postfinancecheckout_order_transaction_line_items_card %} - - + {% endblock %} {% block postfinancecheckout_order_transaction_refunds_card %} @@ -129,6 +149,15 @@ {% endblock %} + {% block postfinancecheckout_order_actions_modal_refund_partial %} + + + {% endblock %} {% block postfinancecheckout_order_actions_modal_refund %} { - if (this.refundLineItem[reduction.lineItemUniqueId] === undefined) { - this.refundLineItem[reduction.lineItemUniqueId] = reduction.quantityReduction; - } else { - this.refundLineItem[reduction.lineItemUniqueId] += reduction.quantityReduction; - } + if (reduction.quantityReduction > 0) { + if (this.refundLineItemQuantity[reduction.lineItemUniqueId] === undefined) { + this.refundLineItemQuantity[reduction.lineItemUniqueId] = reduction.quantityReduction; + } else { + this.refundLineItemQuantity[reduction.lineItemUniqueId] += reduction.quantityReduction; + } + } + if (reduction.unitPriceReduction > 0) { + if (this.refundLineItemAmount[reduction.lineItemUniqueId] === undefined) { + this.refundLineItemAmount[reduction.lineItemUniqueId] = reduction.unitPriceReduction; + } else { + this.refundLineItemAmount[reduction.lineItemUniqueId] += reduction.unitPriceReduction; + } + } }); + }); PostFinanceCheckoutTransaction.transactions[0].lineItems.forEach((lineItem) => { + if (!lineItem.id) { + lineItem.id = lineItem.uniqueId; + } + + lineItem.itemRefundedAmount = parseFloat(this.refundLineItemAmount[lineItem.uniqueId] || 0) * parseInt(lineItem.quantity); + lineItem.amountIncludingTax = parseFloat(lineItem.amountIncludingTax) || 0; + + lineItem.itemRefundedQuantity = parseInt(this.refundLineItemQuantity[lineItem.uniqueId]) || 0; + lineItem.refundableAmount = parseFloat( + (lineItem.amountIncludingTax - lineItem.itemRefundedAmount).toFixed(2) + ); lineItem.amountIncludingTax = Utils.format.currency( lineItem.amountIncludingTax, @@ -225,8 +260,9 @@ Component.register('postfinancecheckout-order-detail', { totalAmountTemp = parseFloat(parseFloat(totalAmountTemp) + parseFloat(lineItem.unitPriceIncludingTax * lineItem.quantity)); lineItem.refundableQuantity = parseInt( - parseInt(lineItem.quantity) - parseInt(this.refundLineItem[lineItem.uniqueId] || 0) + parseInt(lineItem.quantity) - parseInt(this.refundLineItemQuantity[lineItem.uniqueId] || 0) ); + }); this.lineItems = PostFinanceCheckoutTransaction.transactions[0].lineItems; @@ -234,6 +270,7 @@ Component.register('postfinancecheckout-order-detail', { this.transaction = this.transactionData.transactions[0]; this.refundAmount = Number(this.transactionData.transactions[0].amountIncludingTax); this.refundableAmount = parseFloat(parseFloat(totalAmountTemp) - parseFloat(refundsAmountTemp)); + }).catch((errorResponse) => { try { this.createNotificationError({ @@ -279,14 +316,16 @@ Component.register('postfinancecheckout-order-detail', { refunds: [] }; this.lineItems = []; - this.refundLineItem = []; + this.refundLineItemQuantity = []; + this.refundLineItemAmount = []; this.isLoading = true; }, - spawnModal(modalType, lineItemId, refundableQuantity) { + spawnModal(modalType, lineItemId, refundableQuantity, itemRefundableAmount) { this.modalType = modalType; this.currentLineItem = lineItemId; - this.refundableQuantity = refundableQuantity; + this.itemRefundableQuantity = refundableQuantity; + this.itemRefundableAmount = !isNaN(itemRefundableAmount) ? Math.round(itemRefundableAmount * 100) / 100 : 0; }, closeModal() { @@ -305,11 +344,11 @@ Component.register('postfinancecheckout-order-detail', { title: this.$tc('postfinancecheckout-order.refundAction.successTitle'), message: this.$tc('postfinancecheckout-order.refundAction.successMessage') }); - this.isLoading = false; - this.$emit('modal-close'); - this.$nextTick(() => { - this.$router.replace(`${this.$route.path}?hash=${Utils.createId()}`); - }); + this.isLoading = false; + this.$emit('modal-close'); + this.$nextTick(() => { + this.$router.replace(`${this.$route.path}?hash=${Utils.createId()}`); + }); }).catch((errorResponse) => { try { this.createNotificationError({ @@ -320,17 +359,90 @@ Component.register('postfinancecheckout-order-detail', { } catch (e) { this.createNotificationError({ title: errorResponse.title, - message: errorResponse.message, + message: errorResponse.response.data, autoClose: false }); } finally { - this.isLoading = false; - this.$emit('modal-close'); - this.$nextTick(() => { - this.$router.replace(`${this.$route.path}?hash=${Utils.createId()}`); - }); + this.isLoading = false; + this.$emit('modal-close'); + this.$nextTick(() => { + this.$router.replace(`${this.$route.path}?hash=${Utils.createId()}`); + }); } }); - } + }, + isSelectable(item) { + return item.refundableQuantity > 0 && item.refundableAmount > 0 && item.itemRefundedAmount == 0 && item.itemRefundedQuantity == 0; + }, + onSelectionChanged(selection) { + this.selectedItems = Object.values(selection); + }, + onPerformBulkAction() { + if (this.selectedItems.length) { + // Set isLoading to true to show the loader + this.isLoading = true; + + // Force the DOM to update before proceeding with the asynchronous operations + this.$nextTick(() => { + const refundPromises = this.selectedItems.map((item) => { + return this.lineItemRefundBulk(item.uniqueId); // Simulated refund action with delay + }); + + // Wait for all refund promises to complete + Promise.all(refundPromises) + .then(() => { + // Once all promises are resolved, hide the loader and close the modal + this.isLoading = false; + this.$emit('modal-close'); + this.$nextTick(() => { + this.$router.replace(`${this.$route.path}?hash=${Utils.createId()}`); + }); + }) + .catch((error) => { + // Handle any errors during the refund process + this.createNotificationError({ + title: 'Error', + message: 'Something went wrong with the refunds', + autoClose: false + }); + this.isLoading = false; // Ensure the loader is hidden even on error + }); + }); + } + }, + lineItemRefundBulk(lineItemId) { + return new Promise((resolve, reject) => { + this.PostFinanceCheckoutRefundService.createRefund( + this.transactionData.transactions[0].metaData.salesChannelId, + this.transactionData.transactions[0].id, + 0, + lineItemId + ) + .then(() => { + this.createNotificationSuccess({ + title: this.$tc('postfinancecheckout-order.refundAction.successTitle'), + message: this.$tc('postfinancecheckout-order.refundAction.successMessage') + }); + resolve(); + }) + .catch((errorResponse) => { + try { + this.createNotificationError({ + title: errorResponse.response.data.errors[0].title, + message: errorResponse.response.data.errors[0].detail, + autoClose: false + }); + } catch (e) { + this.createNotificationError({ + title: errorResponse.title, + message: errorResponse.response.data, + autoClose: false + }); + } finally { + reject(); + } + }); + }); + }, } }); diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/de-DE.json b/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/de-DE.json index 737129b..1799eba 100644 --- a/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/de-DE.json +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/de-DE.json @@ -8,7 +8,9 @@ "refund": "Eine neue Rückerstattung erstellen", "void": "Genehmigung annullieren", "refund-whole-line-item": "Gesamte Werbebuchung erstatten", - "refund-line-item-by-quantity": "Rückerstattung nach Menge" + "refund-line-item-by-quantity": "Rückerstattung nach Menge", + "refund-line-item-selected": "Rückerstattung auswählen", + "refund-line-item-parial": "Teilweise Rückerstattung" } }, "captureAction": { @@ -74,7 +76,8 @@ }, "successMessage": "Ihre Rückerstattung war erfolgreich", "successTitle": "Erfolg", - "maxAvailableItemsToRefund": "Maximal Verfügbare Artikel zum Erstatten" + "maxAvailableItemsToRefund": "Maximal Verfügbare Artikel zum Erstatten", + "maxAvailableAmountToRefund": "Maximal verfügbarer Erstattungsbetrag" }, "transactionHistory": { "cardTitle": "Einzelheiten", diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/en-GB.json b/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/en-GB.json index 39fe55b..55a6bba 100644 --- a/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/en-GB.json +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/en-GB.json @@ -8,7 +8,10 @@ "refund": "Create a new refund", "void": "Cancel authorization", "refund-whole-line-item": "Refund whole line item", - "refund-line-item-by-quantity": "Refund by quantity" + "refund-line-item-by-quantity": "Refund by quantity", + "refund-line-item-selected": "Rembourser sélectionnés", + "refund-line-item-selected": "Refund selected", + "refund-line-item-parial": "Partial refund" } }, "captureAction": { @@ -74,7 +77,8 @@ }, "successMessage": "Your refund was successful.", "successTitle": "Success", - "maxAvailableItemsToRefund": "Maximum available items to refund" + "maxAvailableItemsToRefund": "Maximum available items to refund", + "maxAvailableAmountToRefund": "Maximum available amount to refund" }, "transactionHistory": { "cardTitle": "Details", diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/fr-FR.json b/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/fr-FR.json index fcf02e4..4f45add 100644 --- a/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/fr-FR.json +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/fr-FR.json @@ -8,7 +8,9 @@ "refund": "Créer un nouveau remboursement", "void": "Annulez l'autorisation", "refund-whole-line-item": "Remboursement de la ligne entière", - "refund-line-item-by-quantity": "Remboursement par quantité" + "refund-line-item-by-quantity": "Remboursement par quantité", + "refund-line-item-selected": "Rembourser sélectionnés", + "refund-line-item-parial": "Remboursement partiel" } }, "captureAction": { @@ -74,7 +76,8 @@ }, "successMessage": "Votre remboursement a été effectué avec succès.", "successTitle": "Succès", - "maxAvailableItemsToRefund": "Nombre maximum d'articles disponibles pour le remboursement" + "maxAvailableItemsToRefund": "Nombre maximum d'articles disponibles pour le remboursement", + "maxAvailableAmountToRefund": "Montant maximal disponible pour le remboursement" }, "transactionHistory": { "cardTitle": "Détails", diff --git a/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/it-IT.json b/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/it-IT.json index 30b91ba..68d4989 100644 --- a/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/it-IT.json +++ b/src/Resources/app/administration/src/module/postfinancecheckout-order/snippet/it-IT.json @@ -8,7 +8,9 @@ "refund": "Crea un nuovo rimborso", "void": "Annulla autorizzazione", "refund-whole-line-item": "Rimborso intera riga", - "refund-line-item-by-quantity": "Rimborso per quantità" + "refund-line-item-by-quantity": "Rimborso per quantità", + "refund-line-item-selected": "Rimborso selezionati", + "refund-line-item-parial": "Rimborso parziale" } }, "captureAction": { @@ -74,7 +76,8 @@ }, "successMessage": "Il tuo rimborso è andato a buon fine.", "successTitle": "Successo", - "maxAvailableItemsToRefund": "Numero massimo di articoli disponibili da rimborsare" + "maxAvailableItemsToRefund": "Numero massimo di articoli disponibili da rimborsare", + "maxAvailableAmountToRefund": "Importo massimo disponibile per il rimborso" }, "transactionHistory": { "cardTitle": "Dettagli", diff --git a/src/Resources/app/storefront/dist/storefront/js/post-finance-checkout-payment/post-finance-checkout-payment.js b/src/Resources/app/storefront/dist/storefront/js/post-finance-checkout-payment/post-finance-checkout-payment.js deleted file mode 100644 index 0f4fc12..0000000 --- a/src/Resources/app/storefront/dist/storefront/js/post-finance-checkout-payment/post-finance-checkout-payment.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e={857:e=>{var t=function(e){var t;return!!e&&"object"==typeof e&&"[object RegExp]"!==(t=Object.prototype.toString.call(e))&&"[object Date]"!==t&&e.$$typeof!==r},r="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function n(e,t){return!1!==t.clone&&t.isMergeableObject(e)?a(Array.isArray(e)?[]:{},e,t):e}function i(e,t,r){return e.concat(t).map(function(e){return n(e,r)})}function s(e){return Object.keys(e).concat(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(t){return Object.propertyIsEnumerable.call(e,t)}):[])}function o(e,t){try{return t in e}catch(e){return!1}}function a(e,r,l){(l=l||{}).arrayMerge=l.arrayMerge||i,l.isMergeableObject=l.isMergeableObject||t,l.cloneUnlessOtherwiseSpecified=n;var c,u,d=Array.isArray(r);return d!==Array.isArray(e)?n(r,l):d?l.arrayMerge(e,r,l):(u={},(c=l).isMergeableObject(e)&&s(e).forEach(function(t){u[t]=n(e[t],c)}),s(r).forEach(function(t){(!o(e,t)||Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))&&(o(e,t)&&c.isMergeableObject(r[t])?u[t]=(function(e,t){if(!t.customMerge)return a;var r=t.customMerge(e);return"function"==typeof r?r:a})(t,c)(e[t],r[t],c):u[t]=n(r[t],c))}),u)}a.all=function(e,t){if(!Array.isArray(e))throw Error("first argument should be an array");return e.reduce(function(e,r){return a(e,r,t)},{})},e.exports=a}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}(()=>{r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t}})(),(()=>{r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}})(),(()=>{r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{var e=r(857),t=r.n(e);class n{static ucFirst(e){return e.charAt(0).toUpperCase()+e.slice(1)}static lcFirst(e){return e.charAt(0).toLowerCase()+e.slice(1)}static toDashCase(e){return e.replace(/([A-Z])/g,"-$1").replace(/^-/,"").toLowerCase()}static toLowerCamelCase(e,t){let r=n.toUpperCamelCase(e,t);return n.lcFirst(r)}static toUpperCamelCase(e,t){return t?e.split(t).map(e=>n.ucFirst(e.toLowerCase())).join(""):n.ucFirst(e.toLowerCase())}static parsePrimitive(e){try{return/^\d+(.|,)\d+$/.test(e)&&(e=e.replace(",",".")),JSON.parse(e)}catch(t){return e.toString()}}}class i{static isNode(e){return"object"==typeof e&&null!==e&&(e===document||e===window||e instanceof Node)}static hasAttribute(e,t){if(!i.isNode(e))throw Error("The element must be a valid HTML Node!");return"function"==typeof e.hasAttribute&&e.hasAttribute(t)}static getAttribute(e,t){let r=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(r&&!1===i.hasAttribute(e,t))throw Error('The required property "'.concat(t,'" does not exist!'));if("function"!=typeof e.getAttribute){if(r)throw Error("This node doesn't support the getAttribute function!");return}return e.getAttribute(t)}static getDataAttribute(e,t){let r=!(arguments.length>2)||void 0===arguments[2]||arguments[2],s=t.replace(/^data(|-)/,""),o=n.toLowerCamelCase(s,"-");if(!i.isNode(e)){if(r)throw Error("The passed node is not a valid HTML Node!");return}if(void 0===e.dataset){if(r)throw Error("This node doesn't support the dataset attribute!");return}let a=e.dataset[o];if(void 0===a){if(r)throw Error('The required data attribute "'.concat(t,'" does not exist on ').concat(e,"!"));return a}return n.parsePrimitive(a)}static querySelector(e,t){let r=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(r&&!i.isNode(e))throw Error("The parent node is not a valid HTML Node!");let n=e.querySelector(t)||!1;if(r&&!1===n)throw Error('The required element "'.concat(t,'" does not exist in parent node!'));return n}static querySelectorAll(e,t){let r=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(r&&!i.isNode(e))throw Error("The parent node is not a valid HTML Node!");let n=e.querySelectorAll(t);if(0===n.length&&(n=!1),r&&!1===n)throw Error('At least one item of "'.concat(t,'" must exist in parent node!'));return n}static getFocusableElements(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.body;return e.querySelectorAll('\n input:not([tabindex^="-"]):not([disabled]):not([type="hidden"]),\n select:not([tabindex^="-"]):not([disabled]),\n textarea:not([tabindex^="-"]):not([disabled]),\n button:not([tabindex^="-"]):not([disabled]),\n a[href]:not([tabindex^="-"]):not([disabled]),\n [tabindex]:not([tabindex^="-"]):not([disabled])\n ')}static getFirstFocusableElement(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.body;return this.getFocusableElements(e)[0]}static getLastFocusableElement(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,t=this.getFocusableElements(e);return t[t.length-1]}}class s{publish(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=new CustomEvent(e,{detail:t,cancelable:r});return this.el.dispatchEvent(n),n}subscribe(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=this,i=e.split("."),s=r.scope?t.bind(r.scope):t;if(r.once&&!0===r.once){let t=s;s=function(r){n.unsubscribe(e),t(r)}}return this.el.addEventListener(i[0],s),this.listeners.push({splitEventName:i,opts:r,cb:s}),!0}unsubscribe(e){let t=e.split(".");return this.listeners=this.listeners.reduce((e,r)=>([...r.splitEventName].sort().toString()===t.sort().toString()?this.el.removeEventListener(r.splitEventName[0],r.cb):e.push(r),e),[]),!0}reset(){return this.listeners.forEach(e=>{this.el.removeEventListener(e.splitEventName[0],e.cb)}),this.listeners=[],!0}get el(){return this._el}set el(e){this._el=e}get listeners(){return this._listeners}set listeners(e){this._listeners=e}constructor(e=document){this._el=e,e.$emitter=this,this._listeners=[]}}class o{init(){throw Error('The "init" method for the plugin "'.concat(this._pluginName,'" is not defined.'))}update(){}_init(){this._initialized||(this.init(),this._initialized=!0)}_update(){this._initialized&&this.update()}_mergeOptions(e){let r=n.toDashCase(this._pluginName),s=i.getDataAttribute(this.el,"data-".concat(r,"-config"),!1),o=i.getAttribute(this.el,"data-".concat(r,"-options"),!1),a=[this.constructor.options,this.options,e];s&&a.push(window.PluginConfigManager.get(this._pluginName,s));try{o&&a.push(JSON.parse(o))}catch(e){throw console.error(this.el),Error('The data attribute "data-'.concat(r,'-options" could not be parsed to json: ').concat(e.message))}return t().all(a.filter(e=>e instanceof Object&&!(e instanceof Array)).map(e=>e||{}))}_registerInstance(){window.PluginManager.getPluginInstancesFromElement(this.el).set(this._pluginName,this),window.PluginManager.getPlugin(this._pluginName,!1).get("instances").push(this)}_getPluginName(e){return e||(e=this.constructor.name),e}constructor(e,t={},r=!1){if(!i.isNode(e))throw Error("There is no valid element given.");this.el=e,this.$emitter=new s(this.el),this._pluginName=this._getPluginName(r),this.options=this._mergeOptions(t),this._initialized=!1,this._registerInstance(),this._init()}}class a{get(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"application/json",n=this._createPreparedRequest("GET",e,r);return this._sendRequest(n,null,t)}post(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"application/json";n=this._getContentType(t,n);let i=this._createPreparedRequest("POST",e,n);return this._sendRequest(i,t,r)}delete(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"application/json";n=this._getContentType(t,n);let i=this._createPreparedRequest("DELETE",e,n);return this._sendRequest(i,t,r)}patch(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"application/json";n=this._getContentType(t,n);let i=this._createPreparedRequest("PATCH",e,n);return this._sendRequest(i,t,r)}abort(){if(this._request)return this._request.abort()}setErrorHandlingInternal(e){this._errorHandlingInternal=e}_registerOnLoaded(e,t){t&&(!0===this._errorHandlingInternal?(e.addEventListener("load",()=>{t(e.responseText,e)}),e.addEventListener("abort",()=>{console.warn("the request to ".concat(e.responseURL," was aborted"))}),e.addEventListener("error",()=>{console.warn("the request to ".concat(e.responseURL," failed with status ").concat(e.status))}),e.addEventListener("timeout",()=>{console.warn("the request to ".concat(e.responseURL," timed out"))})):e.addEventListener("loadend",()=>{t(e.responseText,e)}))}_sendRequest(e,t,r){return this._registerOnLoaded(e,r),e.send(t),e}_getContentType(e,t){return e instanceof FormData&&(t=!1),t}_createPreparedRequest(e,t,r){return this._request=new XMLHttpRequest,this._request.open(e,t),this._request.setRequestHeader("X-Requested-With","XMLHttpRequest"),r&&this._request.setRequestHeader("Content-type",r),this._request}constructor(){this._request=null,this._errorHandlingInternal=!1}}class l extends o{init(){this._client=new a(window.accessKey)}}l.options={payment_method_tabs:"ul.postfinancecheckout-payment-panel li",payment_method_iframe_prefix:"iframe_payment_method_",payment_method_iframe_class:".postfinancecheckout-payment-iframe",payment_method_handler_name:"postfinancecheckout_payment_handler",payment_method_handler_prefix:"postfinancecheckout_handler_",payment_method_handler_status:'input[name="postfinancecheckout_payment_handler_validation_status"]',payment_form:"confirmOrderForm"};let c=l;window.PluginManager.register("PostFinanceCheckoutCheckoutPlugin",c,"[data-postfinancecheckout-checkout-plugin]")})()})(); \ No newline at end of file diff --git a/src/Resources/config/services/core/storefront/account.xml b/src/Resources/config/services/core/storefront/account.xml index 482ad5d..d155fa1 100644 --- a/src/Resources/config/services/core/storefront/account.xml +++ b/src/Resources/config/services/core/storefront/account.xml @@ -9,6 +9,7 @@ + diff --git a/src/Resources/public/administration/js/post-finance-checkout-payment.js b/src/Resources/public/administration/js/post-finance-checkout-payment.js index 550c569..945995f 100644 --- a/src/Resources/public/administration/js/post-finance-checkout-payment.js +++ b/src/Resources/public/administration/js/post-finance-checkout-payment.js @@ -1 +1 @@ -(function(){var e={531:function(){},203:function(){},297:function(){Shopware.Service("privileges").addPrivilegeMappingEntry({category:"permissions",parent:"postfinancecheckout",key:"postfinancecheckout",roles:{viewer:{privileges:["sales_channel:read","sales_channel_payment_method:read","system_config:read"],dependencies:[]},editor:{privileges:["sales_channel:update","sales_channel_payment_method:create","sales_channel_payment_method:update","system_config:update","system_config:create","system_config:delete"],dependencies:["postfinancecheckout.viewer"]}}}),Shopware.Service("privileges").addPrivilegeMappingEntry({category:"permissions",parent:null,key:"sales_channel",roles:{viewer:{privileges:["sales_channel_payment_method:read"]},editor:{privileges:["payment_method:update"]},creator:{privileges:["payment_method:create","shipping_method:create","delivery_time:create"]},deleter:{privileges:["payment_method:delete"]}}})},771:function(e,t,n){var a=n(531);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[e.id,a,""]]),a.locals&&(e.exports=a.locals),n(346).Z("1c6c9aee",a,!0,{})},687:function(e,t,n){var a=n(203);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[e.id,a,""]]),a.locals&&(e.exports=a.locals),n(346).Z("791b2f94",a,!0,{})},346:function(e,t,n){"use strict";function a(e,t){for(var n=[],a={},i=0;in.parts.length&&(a.parts.length=n.parts.length)}else{for(var s=[],i=0;i\n {{ $tc(\'postfinancecheckout-order.header\') }}\n\n{% endblock %}\n\n{% block sw_order_detail_actions_slot_smart_bar_actions %}\n\n{% endblock %}\n',data(){return{isPostFinanceCheckoutPayment:!1}},computed:{isEditable(){return!this.isPostFinanceCheckoutPayment||"postfinancecheckout.order.detail"!==this.$route.name},showTabs(){return!0}},watch:{orderId:{deep:!0,handler(){if(!this.orderId){this.setIsPostFinanceCheckoutPayment(null);return}let e=this.repositoryFactory.create("order"),n=new a(1,1);n.addAssociation("transactions"),e.get(this.orderId,t.api,n).then(e=>{if(e.amountTotal<=0||e.transactions.length<=0||!e.transactions[0].paymentMethodId){this.setIsPostFinanceCheckoutPayment(null);return}let t=e.transactions[0].paymentMethodId;null!=t&&this.setIsPostFinanceCheckoutPayment(t)})},immediate:!0}},methods:{setIsPostFinanceCheckoutPayment(e){e&&this.repositoryFactory.create("payment_method").get(e,t.api).then(e=>{this.isPostFinanceCheckoutPayment="handler_postfinancecheckoutpayment_postfinancecheckoutpaymenthandler"===e.formattedHandlerIdentifier})}}});let{Component:i,Mixin:o,Filter:s,Utils:r}=Shopware;i.register("postfinancecheckout-order-action-completion",{template:'{% block postfinancecheckout_order_action_completion %}\n\n\n {% block postfinancecheckout_order_action_completion_amount %}\n \n \n {% endblock %}\n\n {% block postfinancecheckout_order_action_completion_confirm_button %}\n \n {% endblock %}\n\n \n\n{% endblock %}\n',inject:["PostFinanceCheckoutTransactionCompletionService"],mixins:[o.getByName("notification")],props:{transactionData:{type:Object,required:!0}},data(){return{isLoading:!0,isCompletion:!1}},computed:{dateFilter(){return s.getByName("date")}},created(){this.createdComponent()},methods:{createdComponent(){this.isLoading=!1},completion(){this.isCompletion&&(this.isLoading=!0,this.PostFinanceCheckoutTransactionCompletionService.createTransactionCompletion(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.captureAction.successTitle"),message:this.$tc("postfinancecheckout-order.captureAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${r.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.message,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${r.createId()}`)})}}))}}});let{Component:c,Mixin:l,Filter:d,Utils:u}=Shopware;c.register("postfinancecheckout-order-action-refund",{template:'{% block postfinancecheckout_order_action_refund %}\n\n\n {% block postfinancecheckout_order_action_refund_amount %}\n\n \n \n\n
    \n {{ $tc(\'postfinancecheckout-order.refundAction.maxAvailableItemsToRefund\') }}:\n {{ this.$parent.$parent.refundableQuantity }}\n
    \n {% endblock %}\n\n {% block postfinancecheckout_order_action_refund_confirm_button %}\n \n {% endblock %}\n\n \n
    \n{% endblock %}\n',inject:["PostFinanceCheckoutRefundService"],mixins:[l.getByName("notification")],props:{transactionData:{type:Object,required:!0},orderId:{type:String,required:!0}},data(){return{refundQuantity:1,transactionData:{},isLoading:!0,currentLineItem:""}},computed:{dateFilter(){return d.getByName("date")}},created(){this.createdComponent()},methods:{createdComponent(){this.isLoading=!1},refund(){this.isLoading=!0,this.PostFinanceCheckoutRefundService.createRefund(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id,this.refundQuantity,this.$parent.$parent.currentLineItem).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.refundAction.successTitle"),message:this.$tc("postfinancecheckout-order.refundAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${u.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.message,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${u.createId()}`)})}})}}});let{Component:p,Mixin:h,Filter:m,Utils:f}=Shopware;p.register("postfinancecheckout-order-action-refund-by-amount",{template:'{% block postfinancecheckout_order_action_refund_by_amount %}\n\n\n {% block postfinancecheckout_order_action_refund_amount_by_amount %}\n \n
    \n {% endblock %}\n\n {% block postfinancecheckout_order_action_refund_confirm_button_by_amount %}\n \n {% endblock %}\n\n \n\n{% endblock %}\n',inject:["PostFinanceCheckoutRefundService"],mixins:[h.getByName("notification")],props:{transactionData:{type:Object,required:!0},orderId:{type:String,required:!0}},data(){return{isLoading:!0,currency:this.transactionData.transactions[0].currency,refundAmount:0,refundableAmount:0}},computed:{dateFilter(){return m.getByName("date")}},created(){this.createdComponent()},methods:{createdComponent(){this.isLoading=!1,this.currency=this.transactionData.transactions[0].currency,this.refundAmount=Number(this.transactionData.transactions[0].amountIncludingTax),this.refundableAmount=Number(this.transactionData.transactions[0].amountIncludingTax)},refundByAmount(){this.isLoading=!0,this.PostFinanceCheckoutRefundService.createRefundByAmount(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id,this.refundAmount).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.refundAction.successTitle"),message:this.$tc("postfinancecheckout-order.refundAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${f.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.message,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${f.createId()}`)})}})}}});let{Component:g,Mixin:k,Filter:_,Utils:b}=Shopware;g.register("postfinancecheckout-order-action-void",{template:'{% block postfinancecheckout_order_action_void %}\n\n\n {% block postfinancecheckout_order_action_void_amount %}\n \n \n {% endblock %}\n\n {% block postfinancecheckout_order_action_void_confirm_button %}\n \n {% endblock %}\n\n \n\n{% endblock %}\n',inject:["PostFinanceCheckoutTransactionVoidService"],mixins:[k.getByName("notification")],props:{transactionData:{type:Object,required:!0}},data(){return{isLoading:!0,isVoid:!1}},computed:{dateFilter(){return _.getByName("date")},lineItemColumns(){return[{property:"uniqueId",label:this.$tc("postfinancecheckout-order.refund.types.uniqueId"),rawData:!1,allowResize:!0,primary:!0,width:"auto"},{property:"name",label:this.$tc("postfinancecheckout-order.refund.types.name"),rawData:!0,allowResize:!0,sortable:!0,width:"auto"},{property:"quantity",label:this.$tc("postfinancecheckout-order.refund.types.quantity"),rawData:!0,allowResize:!0,width:"auto"},{property:"amountIncludingTax",label:this.$tc("postfinancecheckout-order.refund.types.amountIncludingTax"),rawData:!0,allowResize:!0,inlineEdit:"string",width:"auto"},{property:"type",label:this.$tc("postfinancecheckout-order.refund.types.type"),rawData:!0,allowResize:!0,sortable:!0,width:"auto"},{property:"taxAmount",label:this.$tc("postfinancecheckout-order.refund.types.taxAmount"),rawData:!0,allowResize:!0,width:"auto"}]}},created(){this.createdComponent()},methods:{createdComponent(){this.isLoading=!1,this.currency=this.transactionData.transactions[0].currency,this.refundableAmount=this.transactionData.transactions[0].amountIncludingTax,this.refundAmount=this.transactionData.transactions[0].amountIncludingTax},voidPayment(){this.isVoid&&(this.isLoading=!0,this.PostFinanceCheckoutTransactionVoidService.createTransactionVoid(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.voidAction.successTitle"),message:this.$tc("postfinancecheckout-order.voidAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${b.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.message,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${b.createId()}`)})}}))}}}),n(687);let{Component:C,Mixin:I,Filter:y,Context:w,Utils:v}=Shopware,E=Shopware.Data.Criteria;C.register("postfinancecheckout-order-detail",{template:'{% block postfinancecheckout_order_detail %}\n
    \n
    \n \n \n \n {% block postfinancecheckout_order_transaction_history_card %}\n \n \n\n \n {% endblock %}\n {% block postfinancecheckout_order_transaction_line_items_card %}\n \n \n \n {% endblock %}\n {% block postfinancecheckout_order_transaction_refunds_card %}\n \n \n\n \n {% endblock %}\n {% block postfinancecheckout_order_actions_modal_refund %}\n \n \n {% endblock %}\n {% block postfinancecheckout_order_actions_modal_refund_by_amount %}\n \n \n {% endblock %}\n {% block postfinancecheckout_order_actions_modal_completion%}\n \n \n {% endblock %}\n {% block postfinancecheckout_order_actions_modal_void %}\n \n \n {% endblock %}\n
    \n \n
    \n{% endblock %}\n',inject:["PostFinanceCheckoutTransactionService","PostFinanceCheckoutRefundService","repositoryFactory"],mixins:[I.getByName("notification")],data(){return{transactionData:{transactions:[],refunds:[]},transaction:{},lineItems:[],refundableQuantity:0,isLoading:!0,orderId:"",currency:"",modalType:"",refundAmount:0,refundableAmount:0,currentLineItem:"",refundLineItem:[]}},metaInfo(){return{title:this.$tc("postfinancecheckout-order.header")}},computed:{dateFilter(){return y.getByName("date")},relatedResourceColumns(){return[{property:"paymentMethodName",label:this.$tc("postfinancecheckout-order.transactionHistory.types.payment_method"),rawData:!0},{property:"state",label:this.$tc("postfinancecheckout-order.transactionHistory.types.state"),rawData:!0},{property:"currency",label:this.$tc("postfinancecheckout-order.transactionHistory.types.currency"),rawData:!0},{property:"authorized_amount",label:this.$tc("postfinancecheckout-order.transactionHistory.types.authorized_amount"),rawData:!0},{property:"id",label:this.$tc("postfinancecheckout-order.transactionHistory.types.transaction"),rawData:!0},{property:"customerId",label:this.$tc("postfinancecheckout-order.transactionHistory.types.customer"),rawData:!0}]},lineItemColumns(){return[{property:"uniqueId",label:this.$tc("postfinancecheckout-order.lineItem.types.uniqueId"),rawData:!0,visible:!1,primary:!0},{property:"name",label:this.$tc("postfinancecheckout-order.lineItem.types.name"),rawData:!0},{property:"quantity",label:this.$tc("postfinancecheckout-order.lineItem.types.quantity"),rawData:!0},{property:"amountIncludingTax",label:this.$tc("postfinancecheckout-order.lineItem.types.amountIncludingTax"),rawData:!0},{property:"type",label:this.$tc("postfinancecheckout-order.lineItem.types.type"),rawData:!0},{property:"taxAmount",label:this.$tc("postfinancecheckout-order.lineItem.types.taxAmount"),rawData:!0},{property:"refundableQuantity",rawData:!0,visible:!1}]},refundColumns(){return[{property:"id",label:this.$tc("postfinancecheckout-order.refund.types.id"),rawData:!0,visible:!0,primary:!0},{property:"amount",label:this.$tc("postfinancecheckout-order.refund.types.amount"),rawData:!0},{property:"state",label:this.$tc("postfinancecheckout-order.refund.types.state"),rawData:!0},{property:"createdOn",label:this.$tc("postfinancecheckout-order.refund.types.createdOn"),rawData:!0}]}},watch:{$route(){this.resetDataAttributes(),this.createdComponent()}},created(){this.createdComponent()},methods:{createdComponent(){this.orderId=this.$route.params.id;let e=this.repositoryFactory.create("order"),t=new E(1,1);t.addAssociation("transactions"),t.getAssociation("transactions").addSorting(E.sort("createdAt","DESC")),e.get(this.orderId,w.api,t).then(e=>{this.order=e,this.isLoading=!1;var t=0,n=0;let a=e.transactions[0].customFields.postfinancecheckout_transaction_id;this.PostFinanceCheckoutTransactionService.getTransactionData(e.salesChannelId,a).then(e=>{this.currency=e.transactions[0].currency,e.transactions[0].authorized_amount=v.format.currency(e.transactions[0].authorizationAmount,this.currency),e.refunds.forEach(e=>{n=parseFloat(parseFloat(n)+parseFloat(e.amount)),e.amount=v.format.currency(e.amount,this.currency),e.reductions.forEach(e=>{void 0===this.refundLineItem[e.lineItemUniqueId]?this.refundLineItem[e.lineItemUniqueId]=e.quantityReduction:this.refundLineItem[e.lineItemUniqueId]+=e.quantityReduction})}),e.transactions[0].lineItems.forEach(e=>{e.amountIncludingTax=v.format.currency(e.amountIncludingTax,this.currency),e.taxAmount=v.format.currency(e.taxAmount,this.currency),t=parseFloat(parseFloat(t)+parseFloat(e.unitPriceIncludingTax*e.quantity)),e.refundableQuantity=parseInt(parseInt(e.quantity)-parseInt(this.refundLineItem[e.uniqueId]||0))}),this.lineItems=e.transactions[0].lineItems,this.transactionData=e,this.transaction=this.transactionData.transactions[0],this.refundAmount=Number(this.transactionData.transactions[0].amountIncludingTax),this.refundableAmount=parseFloat(parseFloat(t)-parseFloat(n))}).catch(e=>{try{this.createNotificationError({title:this.$tc("postfinancecheckout-order.paymentDetails.error.title"),message:e.message,autoClose:!1})}catch(t){this.createNotificationError({title:this.$tc("postfinancecheckout-order.paymentDetails.error.title"),message:e.message,autoClose:!1})}finally{this.isLoading=!1}})})},downloadPackingSlip(){window.open(this.PostFinanceCheckoutTransactionService.getPackingSlip(this.transaction.metaData.salesChannelId,this.transaction.id),"_blank")},downloadInvoice(){window.open(this.PostFinanceCheckoutTransactionService.getInvoiceDocument(this.transaction.metaData.salesChannelId,this.transaction.id),"_blank")},resetDataAttributes(){this.transactionData={transactions:[],refunds:[]},this.lineItems=[],this.refundLineItem=[],this.isLoading=!0},spawnModal(e,t,n){this.modalType=e,this.currentLineItem=t,this.refundableQuantity=n},closeModal(){this.modalType=""},lineItemRefund(e){this.isLoading=!0,this.PostFinanceCheckoutRefundService.createRefund(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id,0,e).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.refundAction.successTitle"),message:this.$tc("postfinancecheckout-order.refundAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${v.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.message,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${v.createId()}`)})}})}}});var F=JSON.parse('{"postfinancecheckout-order":{"buttons":{"label":{"completion":"Abschluss","download-invoice":"Rechnung herunterladen","download-packing-slip":"Packzettel herunterladen","refund":"Eine neue R\xfcckerstattung erstellen","void":"Genehmigung annullieren","refund-whole-line-item":"Gesamte Werbebuchung erstatten","refund-line-item-by-quantity":"R\xfcckerstattung nach Menge"}},"captureAction":{"button":{"text":"Zahlung erfassen"},"currentAmount":"Betrag","isFinal":"Dies ist die endg\xfcltige Verbuchung","maxAmount":"Maximaler Betrag","successMessage":"Ihre Verbuchung war erfolgreich","successTitle":"Erfolg"},"general":{"title":"Bestellungen"},"header":"PostFinanceCheckout Payment","lineItem":{"cardTitle":"Einzelposten","types":{"amountIncludingTax":"Betrag","name":"Name","quantity":"Anzahl","taxAmount":"Steuern","type":"Typ","uniqueId":"Eindeutige ID"}},"modal":{"title":{"capture":"Erfassen","refund":"Neue Gutschrift","void":"Autorisierung aufheben"}},"paymentDetails":{"cardTitle":"Zahlung","error":{"title":"Fehler beim Abrufen von Zahlungsdetails von PostFinanceCheckout"}},"refund":{"cardTitle":"Gutschriften","refundAmount":{"label":"Gutschriftsbetrag"},"refundQuantity":{"label":"Refund Menge"},"types":{"amount":"Betrag","createdOn":"Erstellt am","id":"ID","state":"Staat"}},"refundAction":{"confirmButton":{"text":"Ausf\xfchren"},"refundAmount":{"label":"Betrag","placeholder":"Einen Betrag eingeben"},"successMessage":"Ihre R\xfcckerstattung war erfolgreich","successTitle":"Erfolg","maxAvailableItemsToRefund":"Maximal Verf\xfcgbare Artikel zum Erstatten"},"transactionHistory":{"cardTitle":"Einzelheiten","types":{"authorized_amount":"Autorisierter Betrag","currency":"W\xe4hrung","customer":"Kunde","payment_method":"Zahlungsweise","state":"Staat","transaction":"Transaktion"},"customerId":"Customer ID","customerName":"Customer Name","creditCardHolder":"Kreditkarteninhaber","paymentMethod":"Zahlungsart","paymentMethodBrand":"Marke der Zahlungsmethode","PseudoCreditCardNumber":"Pseudo-Kreditkartennummer","CardExpire":"Karte verf\xe4llt"},"voidAction":{"confirm":{"button":{"cancel":"Nein","confirm":"Autorisierung aufheben"},"message":"Wollen Sie diese Zahlung wirklich stornieren?"},"successMessage":"Die Zahlung wurde erfolgreich annulliert","successTitle":"Erfolg"}}}'),S=JSON.parse('{"postfinancecheckout-order":{"buttons":{"label":{"completion":"Complete","download-invoice":"Download Invoice","download-packing-slip":"Download Packing Slip","refund":"Create a new refund","void":"Cancel authorization","refund-whole-line-item":"Refund whole line item","refund-line-item-by-quantity":"Refund by quantity"}},"captureAction":{"button":{"text":"Capture payment"},"currentAmount":"Amount","isFinal":"This is final capture","maxAmount":"Maximum amount","successMessage":"Your capture was successful.","successTitle":"Success"},"general":{"title":"Orders"},"header":"PostFinanceCheckout Payment","lineItem":{"cardTitle":"Line Items","types":{"amountIncludingTax":"Amount","name":"Name","quantity":"Quantity","taxAmount":"Taxes","type":"Type","uniqueId":"Unique ID"}},"modal":{"title":{"capture":"Capture","refund":"New refund","void":"Cancel authorization"}},"paymentDetails":{"cardTitle":"Payment","error":{"title":"Error fetching payment details from PostFinanceCheckout"}},"refund":{"cardTitle":"Refunds","refundAmount":{"label":"Refund Amount"},"refundQuantity":{"label":"Refund Quantity"},"types":{"amount":"Amount","createdOn":"Created On","id":"ID","state":"State"}},"refundAction":{"confirmButton":{"text":"Execute"},"refundAmount":{"label":"Amount","placeholder":"Enter a amount"},"successMessage":"Your refund was successful.","successTitle":"Success","maxAvailableItemsToRefund":"Maximum available items to refund"},"transactionHistory":{"cardTitle":"Details","types":{"authorized_amount":"Authorized Amount","currency":"Currency","customer":"Customer","payment_method":"Payment Method","state":"State","transaction":"Transaction"},"customerId":"Customer ID","customerName":"Customer Name","creditCardHolder":"Credit Card Holder","paymentMethod":"Payment Method","paymentMethodBrand":"Payment Method Brand","PseudoCreditCardNumber":"Pseudo Credit Card Number","CardExpire":"Card Expire"},"voidAction":{"confirm":{"button":{"cancel":"No","confirm":"Cancel authorization"},"message":"Do you really want to cancel this payment?"},"successMessage":"The payment was successfully voided.","successTitle":"Success"}}}'),T=JSON.parse('{"postfinancecheckout-order":{"buttons":{"label":{"completion":"Termin\xe9e","download-invoice":"T\xe9l\xe9charger la facture","download-packing-slip":"T\xe9l\xe9charger le bordereau d\'exp\xe9dition","refund":"Cr\xe9er un nouveau remboursement","void":"Annulez l\'autorisation","refund-whole-line-item":"Remboursement de la ligne enti\xe8re","refund-line-item-by-quantity":"Remboursement par quantit\xe9"}},"captureAction":{"button":{"text":"Capture du paiement"},"currentAmount":"Montant","isFinal":"C\'est la capture finale","maxAmount":"Montant maximal","successMessage":"Votre capture a \xe9t\xe9 r\xe9ussie.","successTitle":"Succ\xe8s"},"general":{"title":"Commandes"},"header":"PostFinanceCheckout Paiement","lineItem":{"cardTitle":"Articles de ligne","types":{"amountIncludingTax":"Montant","name":"Nom","quantity":"Quantit\xe9","taxAmount":"Taxes","type":"Type","uniqueId":"ID unique"}},"modal":{"title":{"capture":"Capture","refund":"Nouveau remboursement","void":"Annulez l\'autorisation"}},"paymentDetails":{"cardTitle":"Paiement","error":{"title":"Erreur dans la r\xe9cup\xe9ration des d\xe9tails du paiement \xe0 partir de PostFinanceCheckout"}},"refund":{"cardTitle":"Remboursements","refundAmount":{"label":"Montant du remboursement"},"refundQuantity":{"label":"Quantit\xe9 \xe0 rembourser"},"types":{"amount":"Montant","createdOn":"Cr\xe9\xe9 le","id":"ID","state":"\xc9tat"}},"refundAction":{"confirmButton":{"text":"Ex\xe9cutez"},"refundAmount":{"label":"Montant","placeholder":"Entrez un montant"},"successMessage":"Votre remboursement a \xe9t\xe9 effectu\xe9 avec succ\xe8s.","successTitle":"Succ\xe8s","maxAvailableItemsToRefund":"Nombre maximum d\'articles disponibles pour le remboursement"},"transactionHistory":{"cardTitle":"D\xe9tails","types":{"authorized_amount":"Montant autoris\xe9","currency":"Monnaie","customer":"Client","payment_method":"Mode de paiement","state":"\xc9tat","transaction":"Transaction"},"customerId":"Customer ID","customerName":"Customer Name","creditCardHolder":"Titulaire de la carte de cr\xe9dit","paymentMethod":"Mode de paiement","paymentMethodBrand":"Marque du mode de paiement","PseudoCreditCardNumber":"Pseudo num\xe9ro de carte de cr\xe9dit","CardExpire":"La carte expire"},"voidAction":{"confirm":{"button":{"cancel":"Non","confirm":"Annulez l\'autorisation"},"message":"Voulez-vous vraiment annuler ce paiement?"},"successMessage":"Le paiement a \xe9t\xe9 annul\xe9 avec succ\xe8s.","successTitle":"Succ\xe8s"}}}'),P=JSON.parse('{"postfinancecheckout-order":{"buttons":{"label":{"completion":"Completato","download-invoice":"Scarica fattura","download-packing-slip":"Scarica distinta di imballaggio","refund":"Crea un nuovo rimborso","void":"Annulla autorizzazione","refund-whole-line-item":"Rimborso intera riga","refund-line-item-by-quantity":"Rimborso per quantit\xe0"}},"captureAction":{"button":{"text":"Cattura pagamento"},"currentAmount":"Importo","isFinal":"Questa \xe8 la cattura finale","maxAmount":"Importo massimo","successMessage":"La tua cattura ha avuto successo.","successTitle":"Successo"},"general":{"title":"Ordini"},"header":"Pagamento PostFinanceCheckout","lineItem":{"cardTitle":"Articoli di linea","types":{"amountIncludingTax":"Importo","name":"Nome","quantity":"Quantit\xe0","taxAmount":"Tasse","type":"Tipo","uniqueId":"ID unico"}},"modal":{"title":{"capture":"Cattura","refund":"Nuovo rimborso","void":"Annulla autorizzazione"}},"paymentDetails":{"cardTitle":"Pagamento","error":{"title":"Errore nel recupero dei dettagli del pagamento da PostFinanceCheckout"}},"refund":{"cardTitle":"Rimborsi","refundAmount":{"label":"Importo del rimborso"},"refundQuantity":{"label":"Quantit\xe0 di rimborso"},"types":{"amount":"Importo","createdOn":"Creato il","id":"ID","state":"Stato"}},"refundAction":{"confirmButton":{"text":"Esegui"},"refundAmount":{"label":"Importo","placeholder":"Inserisci un importo"},"successMessage":"Il tuo rimborso \xe8 andato a buon fine.","successTitle":"Successo","maxAvailableItemsToRefund":"Numero massimo di articoli disponibili da rimborsare"},"transactionHistory":{"cardTitle":"Dettagli","types":{"authorized_amount":"Importo autorizzato","currency":"Valuta","customer":"Cliente","payment_method":"Metodo di pagamento","state":"Stato","transaction":"Transazione"},"customerId":"Customer ID","customerName":"Customer Name","creditCardHolder":"Proprietario della carta di credito","paymentMethod":"Metodo di pagamento","paymentMethodBrand":"Metodo di pagamento Marca","PseudoCreditCardNumber":"Numero di carta di credito pseudo","CardExpire":"La carta scade"},"voidAction":{"confirm":{"button":{"cancel":"No","confirm":"Annulla autorizzazione"},"message":"Vuoi davvero annullare questo pagamento?"},"successMessage":"Il pagamento \xe8 stato annullato con successo.","successTitle":"Successo"}}}');let{Module:N}=Shopware;N.register("postfinancecheckout-order",{type:"plugin",name:"PostFinanceCheckout",title:"postfinancecheckout-order.general.title",description:"postfinancecheckout-order.general.descriptionTextModule",version:"1.0.1",targetVersion:"1.0.1",color:"#2b52ff",snippets:{"de-DE":F,"en-GB":S,"fr-FR":T,"it-IT":P},routeMiddleware(e,t){"sw.order.detail"===t.name&&t.children.push({component:"postfinancecheckout-order-detail",name:"postfinancecheckout.order.detail",isChildren:!0,path:"/sw/order/postfinancecheckout/detail/:id"}),e(t)}}),n(297);let D="PostFinanceCheckoutPayment.config";var A={CONFIG_DOMAIN:D,CONFIG_APPLICATION_KEY:D+".applicationKey",CONFIG_EMAIL_ENABLED:D+".emailEnabled",CONFIG_INTEGRATION:D+".integration",CONFIG_LINE_ITEM_CONSISTENCY_ENABLED:D+".lineItemConsistencyEnabled",CONFIG_SPACE_ID:D+".spaceId",CONFIG_SPACE_VIEW_ID:D+".spaceViewId",CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED:D+".storefrontInvoiceDownloadEnabled",CONFIG_USER_ID:D+".userId",CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED:D+".storefrontWebhooksUpdateEnabled",CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED:D+".storefrontPaymentsUpdateEnabled"};let{Component:O,Mixin:x}=Shopware;O.register("postfinancecheckout-settings",{template:'{% block postfinancecheckout_settings %}\n\n\n {% block postfinancecheckout_settings_header %}\n \n {% endblock %}\n\n {% block postfinancecheckout_settings_actions %}\n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content %}\n \n {% endblock %}\n\n{% endblock %}',inject:["acl","PostFinanceCheckoutConfigurationService"],mixins:[x.getByName("notification"),x.getByName("sw-inline-snippet")],data(){return{config:{},isLoading:!1,isTesting:!1,isSaveSuccessful:!1,applicationKeyFilled:!1,applicationKeyErrorState:!1,spaceIdFilled:!1,spaceIdErrorState:!1,userIdFilled:!1,userIdErrorState:!1,isSetDefaultPaymentSuccessful:!1,isSettingDefaultPaymentMethods:!1,configIntegrationDefaultValue:"iframe",configEmailEnabledDefaultValue:!0,configLineItemConsistencyEnabledDefaultValue:!0,configStorefrontInvoiceDownloadEnabledEnabledDefaultValue:!0,configStorefrontWebhooksUpdateEnabledDefaultValue:!0,configStorefrontPaymentsUpdateEnabledDefaultValue:!0,...A}},props:{isLoading:{type:Boolean,required:!0}},metaInfo(){return{title:this.$createTitle()}},created(){this.$on("check-api-connection-event",this.onCheckApiConnection)},beforeDestroy(){this.$off("check-api-connection-event",this.onCheckApiConnection)},watch:{config:{handler(e){let t=this.$refs.configComponent.allConfigs.null;null===this.$refs.configComponent.selectedSalesChannelId?(this.applicationKeyFilled=!!this.config[this.CONFIG_APPLICATION_KEY],this.spaceIdFilled=!!this.config[this.CONFIG_SPACE_ID],this.userIdFilled=!!this.config[this.CONFIG_USER_ID],this.CONFIG_INTEGRATION in this.config||(this.config[this.CONFIG_INTEGRATION]=this.configIntegrationDefaultValue),this.CONFIG_EMAIL_ENABLED in this.config||(this.config[this.CONFIG_EMAIL_ENABLED]=this.configEmailEnabledDefaultValue),this.CONFIG_LINE_ITEM_CONSISTENCY_ENABLED in this.config||(this.config[this.CONFIG_LINE_ITEM_CONSISTENCY_ENABLED]=this.configLineItemConsistencyEnabledDefaultValue),this.CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED in this.config||(this.config[this.CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED]=this.configStorefrontInvoiceDownloadEnabledEnabledDefaultValue),this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED in this.config||(this.config[this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED]=this.configStorefrontWebhooksUpdateEnabledDefaultValue),this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED in this.config||(this.config[this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED]=this.configStorefrontPaymentsUpdateEnabledDefaultValue)):(this.applicationKeyFilled=!!this.config[this.CONFIG_APPLICATION_KEY]||!!t[this.CONFIG_APPLICATION_KEY],this.spaceIdFilled=!!this.config[this.CONFIG_SPACE_ID]||!!t[this.CONFIG_SPACE_ID],this.userIdFilled=!!this.config[this.CONFIG_USER_ID]||!!t[this.CONFIG_USER_ID],this.CONFIG_INTEGRATION in this.config&&this.CONFIG_INTEGRATION in t||(this.config[this.CONFIG_INTEGRATION]=this.configIntegrationDefaultValue),this.CONFIG_EMAIL_ENABLED in this.config&&this.CONFIG_EMAIL_ENABLED in t||(this.config[this.CONFIG_EMAIL_ENABLED]=this.configEmailEnabledDefaultValue),this.CONFIG_LINE_ITEM_CONSISTENCY_ENABLED in this.config&&this.CONFIG_LINE_ITEM_CONSISTENCY_ENABLED in t||(this.config[this.CONFIG_LINE_ITEM_CONSISTENCY_ENABLED]=this.configLineItemConsistencyEnabledDefaultValue),this.CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED in this.config&&this.CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED in t||(this.config[this.CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED]=this.configStorefrontInvoiceDownloadEnabledEnabledDefaultValue),this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED in this.config&&this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED in t||(this.config[this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED]=this.configStorefrontWebhooksUpdateEnabledDefaultValue),this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED in this.config&&this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED in t||(this.config[this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED]=this.configStorefrontPaymentsUpdateEnabledDefaultValue)),this.$emit("salesChannelChanged"),this.$emit("update:value",e)},deep:!0}},methods:{checkTextFieldInheritance(e){return"string"!=typeof e||e.length<=0},checkNumberFieldInheritance(e){return"number"!=typeof e||e.length<=0},checkBoolFieldInheritance(e){return"boolean"!=typeof e},getInheritValue(e){return null==this.selectedSalesChannelId?this.actualConfigData[e]:this.allConfigs.null[e]},onSave(){if(!(this.spaceIdFilled&&this.userIdFilled&&this.applicationKeyFilled)){this.setErrorStates();return}this.save()},save(){this.isLoading=!0,this.$refs.configComponent.save().then(e=>{e&&(this.config=e),this.registerWebHooks(),this.synchronizePaymentMethodConfiguration(),this.installOrderDeliveryStates()}).catch(e=>{console.error("Error:",e),this.isLoading=!1})},registerWebHooks(){if(!1===this.config[this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED])return!1;this.PostFinanceCheckoutConfigurationService.registerWebHooks(this.$refs.configComponent.selectedSalesChannelId).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-settings.settingForm.titleSuccess"),message:this.$tc("postfinancecheckout-settings.settingForm.messageWebHookUpdated")})}).catch(e=>{this.createNotificationError({title:this.$tc("postfinancecheckout-settings.settingForm.titleError"),message:this.$tc("postfinancecheckout-settings.settingForm.messageWebHookError")}),this.isLoading=!1,console.error("Error:",e)})},synchronizePaymentMethodConfiguration(){if(!1===this.config[this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED])return!1;this.PostFinanceCheckoutConfigurationService.synchronizePaymentMethodConfiguration(this.$refs.configComponent.selectedSalesChannelId).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-settings.settingForm.titleSuccess"),message:this.$tc("postfinancecheckout-settings.settingForm.messagePaymentMethodConfigurationUpdated")}),this.isLoading=!1}).catch(e=>{this.createNotificationError({title:this.$tc("postfinancecheckout-settings.settingForm.titleError"),message:this.$tc("postfinancecheckout-settings.settingForm.messagePaymentMethodConfigurationError")}),this.isLoading=!1,console.error("Error:",e)})},installOrderDeliveryStates(){this.PostFinanceCheckoutConfigurationService.installOrderDeliveryStates().then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-settings.settingForm.titleSuccess"),message:this.$tc("postfinancecheckout-settings.settingForm.messageOrderDeliveryStateUpdated")}),this.isLoading=!1}).catch(()=>{this.createNotificationError({title:this.$tc("postfinancecheckout-settings.settingForm.titleError"),message:this.$tc("postfinancecheckout-settings.settingForm.messageOrderDeliveryStateError")}),this.isLoading=!1})},onSetPaymentMethodDefault(){this.isSettingDefaultPaymentMethods=!0,this.PostFinanceCheckoutConfigurationService.setPostFinanceCheckoutAsSalesChannelPaymentDefault(this.$refs.configComponent.selectedSalesChannelId).then(()=>{this.isSettingDefaultPaymentMethods=!1,this.isSetDefaultPaymentSuccessful=!0,this.createNotificationSuccess({title:this.$tc("postfinancecheckout-settings.settingForm.titleSuccess"),message:this.$tc("postfinancecheckout-settings.salesChannelCard.messageDefaultPaymentUpdated")})})},setErrorStates(){let e={code:1,detail:this.$tc("postfinancecheckout-settings.messageNotBlank")};this.spaceIdFilled||(this.spaceIdErrorState=e),this.userIdFilled||(this.userIdErrorState=e),this.applicationKeyFilled||(this.applicationKeyErrorState=e)},onCheckApiConnection(e){let{spaceId:t,userId:n,applicationKey:a}=e;this.isTesting=!0,this.PostFinanceCheckoutConfigurationService.checkApiConnection(t,n,a).then(e=>{200===e.result?this.createNotificationSuccess({title:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.title"),message:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.successMessage")}):this.createNotificationError({title:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.title"),message:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.errorMessage")}),this.isTesting=!1}).catch(()=>{this.createNotificationError({title:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.title"),message:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.errorMessage")}),this.isTesting=!1})}}});let{Component:$,Mixin:L}=Shopware;$.register("sw-postfinancecheckout-credentials",{template:'{% block postfinancecheckout_settings_content_card_channel_config_credentials %}\n \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container %}\n \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings %}\n
    \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_space_id %}\n \n \n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_user_id %}\n \n \n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_application_key %}\n \n \n \n {% endblock %}\n
    \n {% endblock %}\n\n \n \n {{ $tc(\'postfinancecheckout-settings.settingForm.credentials.button.label\') }}\n \n \n\n
    \n {% endblock %}\n \n\n{% endblock %}\n',name:"PostFinanceCheckoutCredentials",inject:["acl"],mixins:[L.getByName("notification")],props:{actualConfigData:{type:Object,required:!0},allConfigs:{type:Object,required:!0},selectedSalesChannelId:{required:!0},spaceIdFilled:{type:Boolean,required:!0},spaceIdErrorState:{required:!0},userIdFilled:{type:Boolean,required:!0},userIdErrorState:{required:!0},applicationKeyFilled:{type:Boolean,required:!0},applicationKeyErrorState:{required:!0},isLoading:{type:Boolean,required:!0},isTesting:{type:Boolean,required:!1}},data(){return{...A}},methods:{checkTextFieldInheritance(e){return"string"!=typeof e||e.length<=0},checkNumberFieldInheritance(e){return"number"!=typeof e||e.length<=0},checkBoolFieldInheritance(e){return"boolean"!=typeof e},emitCheckApiConnectionEvent(){let e={spaceId:this.actualConfigData[A.CONFIG_SPACE_ID],userId:this.actualConfigData[A.CONFIG_USER_ID],applicationKey:this.actualConfigData[A.CONFIG_APPLICATION_KEY]};this.$emit("check-api-connection-event",e)}}});let{Component:M,Mixin:B}=Shopware;M.register("sw-postfinancecheckout-options",{template:'{% block postfinancecheckout_settings_content_card_channel_config_options %}\n \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container %}\n \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings %}\n
    \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_space_view_id %}\n \n \n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_integration %}\n \n \n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_line_item_consistency_enabled %}\n \n \n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_email_enabled %}\n \n \n \n {% endblock %}\n
    \n {% endblock %}\n
    \n {% endblock %}\n
    \n\n{% endblock %}\n',name:"PostFinanceCheckoutOptions",mixins:[B.getByName("notification")],props:{actualConfigData:{type:Object,required:!0},allConfigs:{type:Object,required:!0},selectedSalesChannelId:{required:!0},isLoading:{type:Boolean,required:!0}},data(){return{...A}},computed:{integrationOptions(){return[{id:"iframe",name:this.$tc("postfinancecheckout-settings.settingForm.options.integration.options.iframe")},{id:"payment_page",name:this.$tc("postfinancecheckout-settings.settingForm.options.integration.options.payment_page")}]}},methods:{checkTextFieldInheritance(e){return"string"!=typeof e||e.length<=0},checkNumberFieldInheritance(e){return"number"!=typeof e||e.length<=0},checkBoolFieldInheritance(e){return"boolean"!=typeof e}}});let{Component:R}=Shopware;R.register("sw-postfinancecheckout-settings-icon",{template:'{% block postfinancecheckout_settings_icon %}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n \n{% endblock %}\n'});let{Component:G,Mixin:z}=Shopware;G.register("sw-postfinancecheckout-storefront-options",{template:'\n \n
    \n \n \n \n
    \n
    \n
    \n\n',name:"PostFinanceCheckoutStorefrontOptions",mixins:[z.getByName("notification")],props:{actualConfigData:{type:Object,required:!0},allConfigs:{type:Object,required:!0},selectedSalesChannelId:{required:!0},isLoading:{type:Boolean,required:!0}},data(){return{...A}},methods:{checkTextFieldInheritance(e){return"string"!=typeof e||e.length<=0},checkNumberFieldInheritance(e){return"number"!=typeof e||e.length<=0},checkBoolFieldInheritance(e){return"boolean"!=typeof e}}});let{Component:V,Mixin:U}=Shopware;V.register("sw-postfinancecheckout-advanced-options",{template:'\n \n
    \n \n \n \n\n \n \n \n
    \n
    \n
    \n\n',name:"PostFinanceCheckoutAdvancedOptions",inject:["acl"],mixins:[U.getByName("notification")],props:{actualConfigData:{type:Object,required:!0},allConfigs:{type:Object,required:!0},selectedSalesChannelId:{required:!0},isLoading:{type:Boolean,required:!0}},data(){return{...A}},methods:{checkTextFieldInheritance(e){return"string"!=typeof e||e.length<=0},checkNumberFieldInheritance(e){return"number"!=typeof e||e.length<=0},checkBoolFieldInheritance(e){return"boolean"!=typeof e}}});var q=JSON.parse('{"sw-privileges":{"permissions":{"parents":{"postfinancecheckout":"PostFinanceCheckout plugin"},"postfinancecheckout":{"label":"PostFinanceCheckout berechtigungen"}}},"postfinancecheckout-settings":{"general":{"descriptionTextModule":"PostFinanceCheckout-Einstellungen","mainMenuItemGeneral":"PostFinanceCheckout"},"header":"PostFinanceCheckout","messageNotBlank":"Dieser Wert sollte nicht leer sein.","salesChannelCard":{"button":{"description":"Klicken Sie auf diese Schaltfl\xe4che, um PostFinanceCheckout als Standard-Zahlungsabwickler im ausgew\xe4hlten Vertriebskanal festzulegen","label":"PostFinanceCheckout als Standard-Zahlungsabwickler festlegen"},"messageDefaultPaymentError":"PostFinanceCheckout als Standard-Zahlungsabwickler konnte nicht festgelegt werden..","messageDefaultPaymentUpdated":"PostFinanceCheckout als Standard-Zahlungsabwickler wurde festgelegt."},"settingForm":{"credentials":{"applicationKey":{"label":"Application Key","tooltipText":"Der Anwendungsschl\xfcssel wird verwendet, um dieses Plugin mit der API PostFinanceCheckout zu authentifizieren."},"cardTitle":"Anmeldedaten","spaceId":{"label":"Space ID","tooltipText":"Die Space ID wird verwendet, um dieses Plugin mit der API PostFinanceCheckout zu authentifizieren."},"userId":{"label":"User ID","tooltipText":"Die Benutzer-ID wird verwendet, um dieses Plugin mit der PostFinanceCheckout-API zu authentifizieren."},"button":{"description":"Klicken Sie auf diese Schaltfl\xe4che, um die PostFinanceCheckout API zu testen","label":"API Verbindung testen"},"alert":{"title":"API-Test","successMessage":"Die Verbindung wurde erfolgreich getestet.","errorMessage":"Die Verbindung ist fehlgeschlagen. Versuchen Sie es erneut."}},"messageSaveSuccess":"PostFinanceCheckout-Einstellungen wurden gespeichert.","messageOrderDeliveryStateError":"PostFinanceCheckout OrderDeliveryState konnte nicht gespeichert werden.","messageOrderDeliveryStateUpdated":"PostFinanceCheckout OrderDeliveryState wurde aktualisiert.","messagePaymentMethodConfigurationError":"PostFinanceCheckout PaymentMethodConfiguration konnte nicht gespeichert werden. Bitte \xfcberpr\xfcfen Sie Ihre Anmeldedaten.","messagePaymentMethodConfigurationUpdated":"PostFinanceCheckout PaymentMethodConfiguration wurde registriert.","messageWebHookError":"PostFinanceCheckout WebHook konnte nicht gespeichert werden. Bitte \xfcberpr\xfcfen Sie Ihre Zugangsdaten.","messageWebHookUpdated":"PostFinanceCheckout WebHook wurde aktualisiert.","options":{"cardTitle":"Optionen","emailEnabled":{"label":"Auftragsbest\xe4tigung per E-Mail senden","tooltipText":"Wenn diese Einstellung aktiviert ist, erhalten Ihre Kunden eine E-Mail von Ihrem Gesch\xe4ft, wenn die Zahlung ihrer Bestellung autorisiert ist."},"integration":{"label":"Integration","options":{"iframe":"Iframe","payment_page":"Payment Page"},"tooltipText":"Integration"},"lineItemConsistencyEnabled":{"label":"Konsistenz der Einzelposten","tooltipText":"Wenn diese Option aktiviert ist, stimmen die Summen der Einzelposten in PostFinanceCheckoutPayment immer mit der Shopware-Bestellsumme \xfcberein."},"spaceViewId":{"label":"Space View ID","tooltipText":"Space View ID"}},"save":"Speichern","storefrontOptions":{"cardTitle":"Storefront-Optionen","invoiceDownloadEnabled":{"label":"Rechnung Download","tooltipText":"Wenn diese Einstellung aktiviert ist, k\xf6nnen Ihre Kunden Auftragsrechnungen von PostFinanceCheckout herunterladen."}},"advancedOptions":{"cardTitle":"Erweiterte-Optionen","webhooksUpdateEnabled":{"label":"Webhooks-Update","tooltipText":"Wenn diese Einstellung aktiviert ist, wird das Webhook-Update ausgel\xf6st, wenn Sie die Einstellungen speichern"},"paymentsUpdateEnabled":{"label":"Payments-Update","tooltipText":"Wenn diese Einstellung aktiviert ist, wird die Aktualisierung der Zahlungsmethoden ausgel\xf6st, wenn Sie die Einstellungen speichern"}},"titleError":"Fehler","titleSuccess":"Erfolg"}}}'),H=JSON.parse('{"sw-privileges":{"permissions":{"parents":{"postfinancecheckout":"PostFinanceCheckout plugin"},"postfinancecheckout":{"label":"PostFinanceCheckout permissions"}}},"postfinancecheckout-settings":{"general":{"descriptionTextModule":"PostFinanceCheckout settings","mainMenuItemGeneral":"PostFinanceCheckout"},"header":"PostFinanceCheckout","messageNotBlank":"This value should not be blank.","salesChannelCard":{"button":{"description":"Click this button to set PostFinanceCheckout as default payment handler in the selected SalesChannel","label":"Set PostFinanceCheckout as default payment handler"},"messageDefaultPaymentError":"PostFinanceCheckout as default payment could not be set.","messageDefaultPaymentUpdated":"PostFinanceCheckout as default payment has been set."},"settingForm":{"credentials":{"applicationKey":{"label":"Application Key","tooltipText":"The Application Key is used to authenticate this plugin with the PostFinanceCheckout API."},"cardTitle":"Credentials","spaceId":{"label":"Space ID","tooltipText":"The space ID is used to authenticate this plugin with the PostFinanceCheckout API."},"userId":{"label":"User ID","tooltipText":"The user ID is used to authenticate this plugin with the PostFinanceCheckout API."},"button":{"description":"Click this button to test the PostFinanceCheckout API","label":"API connection test"},"alert":{"title":"API Test","successMessage":"The connection was successfully tested.","errorMessage":"The connection was failed. Try it again."}},"messageSaveSuccess":"PostFinanceCheckout settings have been saved.","messageOrderDeliveryStateError":"PostFinanceCheckout OrderDeliveryState could not be saved.","messageOrderDeliveryStateUpdated":"PostFinanceCheckout OrderDeliveryState has been updated.","messagePaymentMethodConfigurationError":"PostFinanceCheckout PaymentMethodConfiguration could not be saved. Please check your credentials.","messagePaymentMethodConfigurationUpdated":"PostFinanceCheckout PaymentMethodConfiguration has been registered.","messageWebHookError":"PostFinanceCheckout WebHook could not be saved. Please check your credentials.","messageWebHookUpdated":"PostFinanceCheckout WebHook has been updated.","options":{"cardTitle":"Options","emailEnabled":{"label":"Send order confirmation email","tooltipText":"If this setting is enabled your customers will receive an email from your store when their order payment is authorised"},"integration":{"label":"Integration","options":{"iframe":"Iframe","payment_page":"Payment Page"},"tooltipText":"Integration"},"lineItemConsistencyEnabled":{"label":"Line item consistency","tooltipText":"If this option is enabled line item totals in PostFinanceCheckoutPayment will always match Shopware order total"},"spaceViewId":{"label":"Space View ID","tooltipText":"Space View ID"}},"save":"Save","storefrontOptions":{"cardTitle":"Storefront Options","invoiceDownloadEnabled":{"label":"Invoice Download","tooltipText":"If this setting is enabled your customers will be able to download order invoices from PostFinanceCheckout"}},"advancedOptions":{"cardTitle":"Advanced Options","webhooksUpdateEnabled":{"label":"Webhooks Update","tooltipText":"If this setting is enabled webhook update will be triggered when you save settings"},"paymentsUpdateEnabled":{"label":"Payments Update","tooltipText":"If this setting is enabled payment methods update will be triggered when you save settings"}},"titleError":"Error","titleSuccess":"Success"}}}'),W=JSON.parse('{"sw-privileges":{"permissions":{"parents":{"postfinancecheckout":"PostFinanceCheckout brancher"},"postfinancecheckout":{"label":"PostFinanceCheckout autorisations"}}},"postfinancecheckout-settings":{"general":{"descriptionTextModule":"Param\xe8tres de PostFinanceCheckout","mainMenuItemGeneral":"PostFinanceCheckout"},"header":"PostFinanceCheckout","messageNotBlank":"Cette valeur ne doit pas \xeatre vide.","salesChannelCard":{"button":{"description":"Cliquez sur ce bouton pour d\xe9finir PostFinanceCheckout comme gestionnaire de paiement par d\xe9faut dans le canal de vente s\xe9lectionn\xe9.","label":"D\xe9finir PostFinanceCheckout comme gestionnaire de paiement par d\xe9faut"},"messageDefaultPaymentError":"PostFinanceCheckout comme paiement par d\xe9faut n\'a pas pu \xeatre d\xe9fini.","messageDefaultPaymentUpdated":"PostFinanceCheckout comme paiement par d\xe9faut a \xe9t\xe9 d\xe9fini."},"settingForm":{"credentials":{"applicationKey":{"label":"Application Key","tooltipText":"La cl\xe9 d\'application est utilis\xe9e pour authentifier ce plugin avec l\'API."},"cardTitle":"R\xe9f\xe9rences","spaceId":{"label":"Space ID","tooltipText":"L\'ID de l\'espace est utilis\xe9 pour authentifier ce plugin avec l\'API PostFinanceCheckout.."},"userId":{"label":"User ID","tooltipText":"L\'ID utilisateur est utilis\xe9 pour authentifier ce plugin avec l\'API PostFinanceCheckout."},"button":{"description":"Cliquez sur ce bouton pour tester l\'API PostFinanceCheckout.","label":"Test de connexion \xe0 l\'API"},"alert":{"title":"Test API","successMessage":"La connexion a \xe9t\xe9 test\xe9e avec succ\xe8s.","errorMessage":"La connexion a \xe9chou\xe9. R\xe9essayez."}},"messageSaveSuccess":"Les param\xe8tres de PostFinanceCheckout ont \xe9t\xe9 enregistr\xe9s.","messageOrderDeliveryStateError":"Les param\xe8tres de PostFinanceCheckout OrderDeliveryState n\'ont pas pu \xeatre enregistr\xe9s.","messageOrderDeliveryStateUpdated":"PostFinanceCheckout OrderDeliveryState a \xe9t\xe9 mis \xe0 jour.","messagePaymentMethodConfigurationError":"PostFinanceCheckout PaymentMethodConfiguration n\'a pas pu \xeatre enregistr\xe9. Veuillez v\xe9rifier vos informations d\'identification.","messagePaymentMethodConfigurationUpdated":"PostFinanceCheckout PaymentMethodConfiguration a \xe9t\xe9 enregistr\xe9.","messageWebHookError":"PostFinanceCheckout WebHook n\'a pas pu \xeatre enregistr\xe9. Veuillez v\xe9rifier vos informations d\'identification.","messageWebHookUpdated":"PostFinanceCheckout WebHook a \xe9t\xe9 mis \xe0 jour.","options":{"cardTitle":"Options","emailEnabled":{"label":"Envoyer un e-mail de confirmation de commande","tooltipText":"If this setting is enabled your customers will receive an email from your store when their order payment is authorised"},"integration":{"label":"Integration","options":{"iframe":"Iframe","payment_page":"Page de paiement"},"tooltipText":"Integration"},"lineItemConsistencyEnabled":{"label":"Coh\xe9rence des postes de ligne","tooltipText":"Si cette option est activ\xe9e, les totaux des articles dans PostFinanceCheckoutPayment correspondront toujours au total de la commande Shopware."},"spaceViewId":{"label":"Space View ID","tooltipText":"Space View ID"}},"save":"Enregistrer","storefrontOptions":{"cardTitle":"Storefront Options","invoiceDownloadEnabled":{"label":"T\xe9l\xe9chargement de facture","tooltipText":"Si ce param\xe8tre est activ\xe9, vos clients pourront t\xe9l\xe9charger les factures de commande depuis PostFinanceCheckout"}},"advancedOptions":{"cardTitle":"Options avanc\xe9es","webhooksUpdateEnabled":{"label":"Mise \xe0 jour des webhooks","tooltipText":"Si ce param\xe8tre est activ\xe9, la mise \xe0 jour des webhooks sera d\xe9clench\xe9e lorsque vous enregistrerez les param\xe8tres."},"paymentsUpdateEnabled":{"label":"Mise \xe0 jour des paiements","tooltipText":"Si ce param\xe8tre est activ\xe9, la mise \xe0 jour des m\xe9thodes de paiement sera d\xe9clench\xe9e lorsque vous enregistrez les param\xe8tres."}},"titleError":"Erreur","titleSuccess":"Succ\xe8s"}}}'),K=JSON.parse('{"sw-privileges":{"permissions":{"parents":{"postfinancecheckout":"PostFinanceCheckout brancher"},"postfinancecheckout":{"label":"PostFinanceCheckout autorisations"}}},"postfinancecheckout-settings":{"general":{"descriptionTextModule":"Impostazioni PostFinanceCheckout","mainMenuItemGeneral":"PostFinanceCheckout"},"header":"PostFinanceCheckout","messageNotBlank":"Questo valore non dovrebbe essere vuoto.","salesChannelCard":{"button":{"description":"Fai clic su questo pulsante per impostare PostFinanceCheckout come gestore di pagamento predefinito nel SalesChannel selezionato","label":"Imposta PostFinanceCheckout come gestore di pagamento predefinito"},"messageDefaultPaymentError":"Non \xe8 stato possibile impostare PostFinanceCheckout come pagamento predefinito.","messageDefaultPaymentUpdated":"PostFinanceCheckout come pagamento predefinito \xe8 stato impostato."},"settingForm":{"credentials":{"applicationKey":{"label":"Chiave di applicazione","tooltipText":"La chiave dell\'applicazione \xe8 usata per autenticare questo plugin con l\'API PostFinanceCheckout."},"cardTitle":"Credenziali","spaceId":{"label":"ID spazio","tooltipText":"L\'ID dello spazio \xe8 usato per autenticare questo plugin con l\'API PostFinanceCheckout."},"userId":{"label":"ID utente","tooltipText":"L\'ID utente \xe8 usato per autenticare questo plugin con l\'API PostFinanceCheckout."},"button":{"description":"Fare clic su questo pulsante per testare l\'API PostFinanceCheckout.","label":"Test di connessione API"},"alert":{"title":"Test API","successMessage":"La connessione \xe8 stata testata con successo.","errorMessage":"La connessione \xe8 fallita. Riprovare."}},"messageSaveSuccess":"Le impostazioni di PostFinanceCheckout sono state salvate.","messageOrderDeliveryStateError":"PostFinanceCheckout OrderDeliveryState non pu\xf2 essere salvato.","messageOrderDeliveryStateUpdated":"PostFinanceCheckout OrderDeliveryState \xe8 stato aggiornato.","messagePaymentMethodConfigurationError":"PostFinanceCheckout PaymentMethodConfiguration non pu\xf2 essere salvato. Per favore controlla le tue credenziali.","messagePaymentMethodConfigurationUpdated":"PostFinanceCheckout PaymentMethodConfiguration \xe8 stato registrato.","messageWebHookError":"PostFinanceCheckout WebHook non pu\xf2 essere salvato. Per favore controlla le tue credenziali.","messageWebHookUpdated":"PostFinanceCheckout WebHook \xe8 stato aggiornato.","options":{"cardTitle":"Opzioni","emailEnabled":{"label":"Invia email di conferma dell\'ordine","tooltipText":"Se questa impostazione \xe8 abilitata i tuoi clienti riceveranno un\'email dal tuo negozio quando il pagamento del loro ordine sar\xe0 autorizzato"},"integration":{"label":"Integrazione","options":{"iframe":"Iframe","payment_page":"Pagina di pagamento"},"tooltipText":"Integrazione"},"lineItemConsistencyEnabled":{"label":"Coerenza dell\'elemento linea","tooltipText":"Se questa opzione \xe8 abilitata i totali degli articoli in PostFinanceCheckoutPayment corrisponderanno sempre al totale dell\'ordine Shopware"},"spaceViewId":{"label":"ID della vista spazio","tooltipText":"ID della vista spaziale"}},"save":"Salva","storefrontOptions":{"cardTitle":"Opzioni vetrina","invoiceDownloadEnabled":{"label":"Scaricamento fattura","tooltipText":"Se questa impostazione \xe8 abilitata i tuoi clienti potranno scaricare le fatture degli ordini da PostFinanceCheckout"}},"advancedOptions":{"cardTitle":"Opzioni avanzate","webhooksUpdateEnabled":{"label":"Aggiornamento webhooks","tooltipText":"Se questa impostazione \xe8 abilitata l\'aggiornamento dei webhook sar\xe0 attivato quando si salvano le impostazioni"},"paymentsUpdateEnabled":{"label":"Aggiornamento pagamenti","tooltipText":"Se questa impostazione \xe8 abilitata l\'aggiornamento dei metodi di pagamento verr\xe0 attivato quando si salvano le impostazioni"}},"titleError":"Errore","titleSuccess":"Successo"}}}');let{Module:Y}=Shopware;Y.register("postfinancecheckout-settings",{type:"plugin",name:"PostFinanceCheckout",title:"postfinancecheckout-settings.general.descriptionTextModule",description:"postfinancecheckout-settings.general.descriptionTextModule",color:"#28d8ff",icon:"default-action-settings",version:"1.0.1",targetVersion:"1.0.1",snippets:{"de-DE":q,"en-GB":H,"fr-FR":W,"it-IT":K},routes:{index:{component:"postfinancecheckout-settings",path:"index",meta:{parentPath:"sw.settings.index",privilege:"postfinancecheckout.viewer"},props:{default:e=>({hash:e.params.hash})}}},settingsItem:{group:"plugins",to:"postfinancecheckout.settings.index",iconComponent:"sw-postfinancecheckout-settings-icon",backgroundEnabled:!0,privilege:"postfinancecheckout.viewer"}});let j=Shopware.Classes.ApiService;var Q=class extends j{constructor(e,t,n="postfinancecheckout"){super(e,t,n)}registerWebHooks(e=null){let t=this.getBasicHeaders(),n=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/configuration/register-web-hooks`;return this.httpClient.post(n,{salesChannelId:e},{headers:t}).then(e=>j.handleResponse(e))}checkApiConnection(e=null,t=null,n=null){let a=this.getBasicHeaders(),i=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/configuration/check-api-connection`;return this.httpClient.post(i,{spaceId:e,userId:t,applicationId:n},{headers:a}).then(e=>j.handleResponse(e))}setPostFinanceCheckoutAsSalesChannelPaymentDefault(e=null){let t=this.getBasicHeaders(),n=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/configuration/set-postfinancecheckout-as-sales-channel-payment-default`;return this.httpClient.post(n,{salesChannelId:e},{headers:t}).then(e=>j.handleResponse(e))}synchronizePaymentMethodConfiguration(e=null){let t=this.getBasicHeaders(),n=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/configuration/synchronize-payment-method-configuration`;return this.httpClient.post(n,{salesChannelId:e},{headers:t}).then(e=>j.handleResponse(e))}installOrderDeliveryStates(){let e=this.getBasicHeaders(),t=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/configuration/install-order-delivery-states`;return this.httpClient.post(t,{},{headers:e}).then(e=>j.handleResponse(e))}};let Z=Shopware.Classes.ApiService;var J=class extends Z{constructor(e,t,n="postfinancecheckout"){super(e,t,n)}createRefund(e,t,n,a){let i=this.getBasicHeaders(),o=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/refund/create-refund/`;return this.httpClient.post(o,{salesChannelId:e,transactionId:t,quantity:n,lineItemId:a},{headers:i}).then(e=>Z.handleResponse(e))}createRefundByAmount(e,t,n){let a=this.getBasicHeaders(),i=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/refund/create-refund-by-amount/`;return this.httpClient.post(i,{salesChannelId:e,transactionId:t,refundableAmount:n},{headers:a}).then(e=>Z.handleResponse(e))}};let X=Shopware.Classes.ApiService;var ee=class extends X{constructor(e,t,n="postfinancecheckout"){super(e,t,n)}getTransactionData(e,t){let n=this.getBasicHeaders(),a=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/transaction/get-transaction-data/`;return this.httpClient.post(a,{salesChannelId:e,transactionId:t},{headers:n}).then(e=>X.handleResponse(e))}getInvoiceDocument(e,t){return`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/transaction/get-invoice-document/${e}/${t}`}getPackingSlip(e,t){return`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/transaction/get-packing-slip/${e}/${t}`}};let et=Shopware.Classes.ApiService;var en=class extends et{constructor(e,t,n="postfinancecheckout"){super(e,t,n)}createTransactionCompletion(e,t){let n=this.getBasicHeaders(),a=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/transaction-completion/create-transaction-completion/`;return this.httpClient.post(a,{salesChannelId:e,transactionId:t},{headers:n}).then(e=>et.handleResponse(e))}};let ea=Shopware.Classes.ApiService;var ei=class extends ea{constructor(e,t,n="postfinancecheckout"){super(e,t,n)}createTransactionVoid(e,t){let n=this.getBasicHeaders(),a=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/transaction-void/create-transaction-void/`;return this.httpClient.post(a,{salesChannelId:e,transactionId:t},{headers:n}).then(e=>ea.handleResponse(e))}};let{Application:eo}=Shopware;eo.addServiceProvider("PostFinanceCheckoutConfigurationService",e=>new Q(eo.getContainer("init").httpClient,e.loginService)),eo.addServiceProvider("PostFinanceCheckoutRefundService",e=>new J(eo.getContainer("init").httpClient,e.loginService)),eo.addServiceProvider("PostFinanceCheckoutTransactionService",e=>new ee(eo.getContainer("init").httpClient,e.loginService)),eo.addServiceProvider("PostFinanceCheckoutTransactionCompletionService",e=>new en(eo.getContainer("init").httpClient,e.loginService)),eo.addServiceProvider("PostFinanceCheckoutTransactionVoidService",e=>new ei(eo.getContainer("init").httpClient,e.loginService))}()})(); \ No newline at end of file +(function(){var e={544:function(){},166:function(){},360:function(){Shopware.Service("privileges").addPrivilegeMappingEntry({category:"permissions",parent:"postfinancecheckout",key:"postfinancecheckout",roles:{viewer:{privileges:["sales_channel:read","sales_channel_payment_method:read","system_config:read"],dependencies:[]},editor:{privileges:["sales_channel:update","sales_channel_payment_method:create","sales_channel_payment_method:update","system_config:update","system_config:create","system_config:delete"],dependencies:["postfinancecheckout.viewer"]}}}),Shopware.Service("privileges").addPrivilegeMappingEntry({category:"permissions",parent:null,key:"sales_channel",roles:{viewer:{privileges:["sales_channel_payment_method:read"]},editor:{privileges:["payment_method:update"]},creator:{privileges:["payment_method:create","shipping_method:create","delivery_time:create"]},deleter:{privileges:["payment_method:delete"]}}})},62:function(e,t,n){var a=n(544);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[e.id,a,""]]),a.locals&&(e.exports=a.locals),n(346).Z("40f59bd0",a,!0,{})},880:function(e,t,n){var a=n(166);a.__esModule&&(a=a.default),"string"==typeof a&&(a=[[e.id,a,""]]),a.locals&&(e.exports=a.locals),n(346).Z("6b556694",a,!0,{})},346:function(e,t,n){"use strict";function a(e,t){for(var n=[],a={},i=0;in.parts.length&&(a.parts.length=n.parts.length)}else{for(var s=[],i=0;i\n {{ $tc(\'postfinancecheckout-order.header\') }}\n\n{% endblock %}\n\n{% block sw_order_detail_actions_slot_smart_bar_actions %}\n\n{% endblock %}\n',data(){return{isPostFinanceCheckoutPayment:!1}},computed:{isEditable(){return!this.isPostFinanceCheckoutPayment||"postfinancecheckout.order.detail"!==this.$route.name},showTabs(){return!0}},watch:{orderId:{deep:!0,handler(){if(!this.orderId){this.setIsPostFinanceCheckoutPayment(null);return}let e=this.repositoryFactory.create("order"),n=new a(1,1);n.addAssociation("transactions"),e.get(this.orderId,t.api,n).then(e=>{if(e.amountTotal<=0||e.transactions.length<=0||!e.transactions[0].paymentMethodId){this.setIsPostFinanceCheckoutPayment(null);return}let t=e.transactions[0].paymentMethodId;null!=t&&this.setIsPostFinanceCheckoutPayment(t)})},immediate:!0}},methods:{setIsPostFinanceCheckoutPayment(e){e&&this.repositoryFactory.create("payment_method").get(e,t.api).then(e=>{this.isPostFinanceCheckoutPayment="handler_postfinancecheckoutpayment_postfinancecheckoutpaymenthandler"===e.formattedHandlerIdentifier})}}});let{Component:i,Mixin:o,Filter:s,Utils:r}=Shopware;i.register("postfinancecheckout-order-action-completion",{template:'{% block postfinancecheckout_order_action_completion %}\n\n\n {% block postfinancecheckout_order_action_completion_amount %}\n \n \n {% endblock %}\n\n {% block postfinancecheckout_order_action_completion_confirm_button %}\n \n {% endblock %}\n\n \n\n{% endblock %}\n',inject:["PostFinanceCheckoutTransactionCompletionService"],mixins:[o.getByName("notification")],props:{transactionData:{type:Object,required:!0}},data(){return{isLoading:!0,isCompletion:!1}},computed:{dateFilter(){return s.getByName("date")}},created(){this.createdComponent()},methods:{createdComponent(){this.isLoading=!1},completion(){this.isCompletion&&(this.isLoading=!0,this.PostFinanceCheckoutTransactionCompletionService.createTransactionCompletion(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.captureAction.successTitle"),message:this.$tc("postfinancecheckout-order.captureAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${r.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.message,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${r.createId()}`)})}}))}}});let{Component:c,Mixin:l,Filter:d,Utils:u}=Shopware;c.register("postfinancecheckout-order-action-refund",{template:'{% block postfinancecheckout_order_action_refund %}\n\n\n {% block postfinancecheckout_order_action_refund_amount %}\n\n \n \n\n
    \n {{ $tc(\'postfinancecheckout-order.refundAction.maxAvailableItemsToRefund\') }}:\n {{ this.$parent.$parent.itemRefundableQuantity }}\n
    \n {% endblock %}\n\n {% block postfinancecheckout_order_action_refund_confirm_button %}\n \n {% endblock %}\n\n \n
    \n{% endblock %}\n',inject:["PostFinanceCheckoutRefundService"],mixins:[l.getByName("notification")],props:{transactionData:{type:Object,required:!0},orderId:{type:String,required:!0}},data(){return{refundQuantity:0,isLoading:!0,currentLineItem:""}},computed:{dateFilter(){return d.getByName("date")}},created(){this.createdComponent()},methods:{createdComponent(){this.isLoading=!1,this.refundQuantity=1},refund(){this.isLoading=!0,this.PostFinanceCheckoutRefundService.createRefund(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id,this.refundQuantity,this.$parent.$parent.currentLineItem).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.refundAction.successTitle"),message:this.$tc("postfinancecheckout-order.refundAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${u.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.message,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${u.createId()}`)})}})}}});let{Component:p,Mixin:h,Filter:m,Utils:f}=Shopware;p.register("postfinancecheckout-order-action-refund-partial",{template:'{% block postfinancecheckout_order_action_refund_partial %}\n\n\n {% block postfinancecheckout_order_action_refund_amount_partial %}\n \n \n\n
    \n {{ $tc(\'postfinancecheckout-order.refundAction.maxAvailableAmountToRefund\') }}:\n {{ this.$parent.$parent.itemRefundableAmount }}\n
    \n {% endblock %}\n\n {% block postfinancecheckout_order_action_refund_confirm_button_partial %}\n \n {% endblock %}\n\n \n
    \n{% endblock %}\n',inject:["PostFinanceCheckoutRefundService"],mixins:[h.getByName("notification")],props:{transactionData:{type:Object,required:!0},orderId:{type:String,required:!0}},data(){return{isLoading:!0,currency:this.transactionData.transactions[0].currency,refundAmount:0}},computed:{dateFilter(){return m.getByName("date")}},created(){this.createdComponent()},methods:{createdComponent(){this.isLoading=!1,this.currency=this.transactionData.transactions[0].currency,this.refundAmount=this.$parent.$parent.itemRefundableAmount},createPartialRefund(e){this.isLoading=!0,this.PostFinanceCheckoutRefundService.createPartialRefund(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id,this.refundAmount,e).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.refundAction.successTitle"),message:this.$tc("postfinancecheckout-order.refundAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${f.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.message,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${f.createId()}`)})}})}},watch:{refundAmount(e){null!==e&&(this.refundAmount=Math.round(100*e)/100)}}});let{Component:g,Mixin:k,Filter:b,Utils:_}=Shopware;g.register("postfinancecheckout-order-action-refund-by-amount",{template:'{% block postfinancecheckout_order_action_refund_by_amount %}\n\n\n {% block postfinancecheckout_order_action_refund_amount_by_amount %}\n \n \n {% endblock %}\n\n {% block postfinancecheckout_order_action_refund_confirm_button_by_amount %}\n \n {% endblock %}\n\n \n\n{% endblock %}\n',inject:["PostFinanceCheckoutRefundService"],mixins:[k.getByName("notification")],props:{transactionData:{type:Object,required:!0},orderId:{type:String,required:!0}},data(){return{isLoading:!0,currency:this.transactionData.transactions[0].currency,refundAmount:0,refundableAmount:0}},computed:{dateFilter(){return b.getByName("date")}},created(){this.createdComponent()},methods:{createdComponent(){this.isLoading=!1,this.currency=this.transactionData.transactions[0].currency,this.refundAmount=Number(this.transactionData.transactions[0].amountIncludingTax),this.refundableAmount=Number(this.transactionData.transactions[0].amountIncludingTax)},refundByAmount(){this.isLoading=!0,this.PostFinanceCheckoutRefundService.createRefundByAmount(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id,this.refundAmount).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.refundAction.successTitle"),message:this.$tc("postfinancecheckout-order.refundAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${_.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.message,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${_.createId()}`)})}})}}});let{Component:I,Mixin:C,Filter:y,Utils:w}=Shopware;I.register("postfinancecheckout-order-action-void",{template:'{% block postfinancecheckout_order_action_void %}\n\n\n {% block postfinancecheckout_order_action_void_amount %}\n \n \n {% endblock %}\n\n {% block postfinancecheckout_order_action_void_confirm_button %}\n \n {% endblock %}\n\n \n\n{% endblock %}\n',inject:["PostFinanceCheckoutTransactionVoidService"],mixins:[C.getByName("notification")],props:{transactionData:{type:Object,required:!0}},data(){return{isLoading:!0,isVoid:!1}},computed:{dateFilter(){return y.getByName("date")},lineItemColumns(){return[{property:"uniqueId",label:this.$tc("postfinancecheckout-order.refund.types.uniqueId"),rawData:!1,allowResize:!0,primary:!0,width:"auto"},{property:"name",label:this.$tc("postfinancecheckout-order.refund.types.name"),rawData:!0,allowResize:!0,sortable:!0,width:"auto"},{property:"quantity",label:this.$tc("postfinancecheckout-order.refund.types.quantity"),rawData:!0,allowResize:!0,width:"auto"},{property:"amountIncludingTax",label:this.$tc("postfinancecheckout-order.refund.types.amountIncludingTax"),rawData:!0,allowResize:!0,inlineEdit:"string",width:"auto"},{property:"type",label:this.$tc("postfinancecheckout-order.refund.types.type"),rawData:!0,allowResize:!0,sortable:!0,width:"auto"},{property:"taxAmount",label:this.$tc("postfinancecheckout-order.refund.types.taxAmount"),rawData:!0,allowResize:!0,width:"auto"}]}},created(){this.createdComponent()},methods:{createdComponent(){this.isLoading=!1,this.currency=this.transactionData.transactions[0].currency,this.refundableAmount=this.transactionData.transactions[0].amountIncludingTax,this.refundAmount=this.transactionData.transactions[0].amountIncludingTax},voidPayment(){this.isVoid&&(this.isLoading=!0,this.PostFinanceCheckoutTransactionVoidService.createTransactionVoid(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.voidAction.successTitle"),message:this.$tc("postfinancecheckout-order.voidAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${w.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.message,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${w.createId()}`)})}}))}}}),n(880);let{Component:v,Mixin:E,Filter:F,Context:S,Utils:T}=Shopware,P=Shopware.Data.Criteria;v.register("postfinancecheckout-order-detail",{template:'{% block postfinancecheckout_order_detail %}\n
    \n
    \n \n \n \n {% block postfinancecheckout_order_transaction_history_card %}\n \n \n\n \n {% endblock %}\n {% block postfinancecheckout_order_transaction_line_items_card %}\n \n \n \n {% endblock %}\n {% block postfinancecheckout_order_transaction_refunds_card %}\n \n \n\n \n {% endblock %}\n {% block postfinancecheckout_order_actions_modal_refund_partial %}\n \n \n {% endblock %}\n {% block postfinancecheckout_order_actions_modal_refund %}\n \n \n {% endblock %}\n {% block postfinancecheckout_order_actions_modal_refund_by_amount %}\n \n \n {% endblock %}\n {% block postfinancecheckout_order_actions_modal_completion%}\n \n \n {% endblock %}\n {% block postfinancecheckout_order_actions_modal_void %}\n \n \n {% endblock %}\n
    \n \n
    \n{% endblock %}\n',inject:["PostFinanceCheckoutTransactionService","PostFinanceCheckoutRefundService","repositoryFactory"],mixins:[E.getByName("notification")],data(){return{transactionData:{transactions:[],refunds:[]},transaction:{},lineItems:[],refundableQuantity:0,itemRefundableQuantity:0,isLoading:!0,orderId:"",currency:"",modalType:"",refundAmount:0,refundableAmount:0,itemRefundedAmount:0,itemRefundedQuantity:0,itemRefundableAmount:0,currentLineItem:"",refundLineItemQuantity:[],refundLineItemAmount:[],selectedItems:[]}},metaInfo(){return{title:this.$tc("postfinancecheckout-order.header")}},computed:{dateFilter(){return F.getByName("date")},relatedResourceColumns(){return[{property:"paymentMethodName",label:this.$tc("postfinancecheckout-order.transactionHistory.types.payment_method"),rawData:!0},{property:"state",label:this.$tc("postfinancecheckout-order.transactionHistory.types.state"),rawData:!0},{property:"currency",label:this.$tc("postfinancecheckout-order.transactionHistory.types.currency"),rawData:!0},{property:"authorized_amount",label:this.$tc("postfinancecheckout-order.transactionHistory.types.authorized_amount"),rawData:!0},{property:"id",label:this.$tc("postfinancecheckout-order.transactionHistory.types.transaction"),rawData:!0},{property:"customerId",label:this.$tc("postfinancecheckout-order.transactionHistory.types.customer"),rawData:!0}]},lineItemColumns(){return[{property:"id",rawData:!0,visible:!1,primary:!0},{property:"uniqueId",label:this.$tc("postfinancecheckout-order.lineItem.types.uniqueId"),rawData:!0,visible:!1,primary:!0},{property:"name",label:this.$tc("postfinancecheckout-order.lineItem.types.name"),rawData:!0},{property:"quantity",label:this.$tc("postfinancecheckout-order.lineItem.types.quantity"),rawData:!0},{property:"amountIncludingTax",label:this.$tc("postfinancecheckout-order.lineItem.types.amountIncludingTax"),rawData:!0},{property:"type",label:this.$tc("postfinancecheckout-order.lineItem.types.type"),rawData:!0},{property:"taxAmount",label:this.$tc("postfinancecheckout-order.lineItem.types.taxAmount"),rawData:!0},{property:"refundableQuantity",rawData:!0,visible:!1}]},refundColumns(){return[{property:"id",label:this.$tc("postfinancecheckout-order.refund.types.id"),rawData:!0,visible:!0,primary:!0},{property:"amount",label:this.$tc("postfinancecheckout-order.refund.types.amount"),rawData:!0},{property:"state",label:this.$tc("postfinancecheckout-order.refund.types.state"),rawData:!0},{property:"createdOn",label:this.$tc("postfinancecheckout-order.refund.types.createdOn"),rawData:!0}]}},watch:{$route(){this.resetDataAttributes(),this.createdComponent()}},created(){this.createdComponent()},methods:{createdComponent(){this.orderId=this.$route.params.id;let e=this.repositoryFactory.create("order"),t=new P(1,1);t.addAssociation("transactions"),t.getAssociation("transactions").addSorting(P.sort("createdAt","DESC")),e.get(this.orderId,S.api,t).then(e=>{this.order=e,this.isLoading=!1;var t=0,n=0;let a=e.transactions[0].customFields.postfinancecheckout_transaction_id;this.PostFinanceCheckoutTransactionService.getTransactionData(e.salesChannelId,a).then(e=>{this.currency=e.transactions[0].currency,e.transactions[0].authorized_amount=T.format.currency(e.transactions[0].authorizationAmount,this.currency),e.refunds.forEach(e=>{n=parseFloat(parseFloat(n)+parseFloat(e.amount)),e.amount=T.format.currency(e.amount,this.currency),e.reductions.forEach(e=>{e.quantityReduction>0&&(void 0===this.refundLineItemQuantity[e.lineItemUniqueId]?this.refundLineItemQuantity[e.lineItemUniqueId]=e.quantityReduction:this.refundLineItemQuantity[e.lineItemUniqueId]+=e.quantityReduction),e.unitPriceReduction>0&&(void 0===this.refundLineItemAmount[e.lineItemUniqueId]?this.refundLineItemAmount[e.lineItemUniqueId]=e.unitPriceReduction:this.refundLineItemAmount[e.lineItemUniqueId]+=e.unitPriceReduction)})}),e.transactions[0].lineItems.forEach(e=>{e.id||(e.id=e.uniqueId),e.itemRefundedAmount=parseFloat(this.refundLineItemAmount[e.uniqueId]||0)*parseInt(e.quantity),e.amountIncludingTax=parseFloat(e.amountIncludingTax)||0,e.itemRefundedQuantity=parseInt(this.refundLineItemQuantity[e.uniqueId])||0,e.refundableAmount=parseFloat((e.amountIncludingTax-e.itemRefundedAmount).toFixed(2)),e.amountIncludingTax=T.format.currency(e.amountIncludingTax,this.currency),e.taxAmount=T.format.currency(e.taxAmount,this.currency),t=parseFloat(parseFloat(t)+parseFloat(e.unitPriceIncludingTax*e.quantity)),e.refundableQuantity=parseInt(parseInt(e.quantity)-parseInt(this.refundLineItemQuantity[e.uniqueId]||0))}),this.lineItems=e.transactions[0].lineItems,this.transactionData=e,this.transaction=this.transactionData.transactions[0],this.refundAmount=Number(this.transactionData.transactions[0].amountIncludingTax),this.refundableAmount=parseFloat(parseFloat(t)-parseFloat(n))}).catch(e=>{try{this.createNotificationError({title:this.$tc("postfinancecheckout-order.paymentDetails.error.title"),message:e.message,autoClose:!1})}catch(t){this.createNotificationError({title:this.$tc("postfinancecheckout-order.paymentDetails.error.title"),message:e.message,autoClose:!1})}finally{this.isLoading=!1}})})},downloadPackingSlip(){window.open(this.PostFinanceCheckoutTransactionService.getPackingSlip(this.transaction.metaData.salesChannelId,this.transaction.id),"_blank")},downloadInvoice(){window.open(this.PostFinanceCheckoutTransactionService.getInvoiceDocument(this.transaction.metaData.salesChannelId,this.transaction.id),"_blank")},resetDataAttributes(){this.transactionData={transactions:[],refunds:[]},this.lineItems=[],this.refundLineItemQuantity=[],this.refundLineItemAmount=[],this.isLoading=!0},spawnModal(e,t,n,a){this.modalType=e,this.currentLineItem=t,this.itemRefundableQuantity=n,this.itemRefundableAmount=isNaN(a)?0:Math.round(100*a)/100},closeModal(){this.modalType=""},lineItemRefund(e){this.isLoading=!0,this.PostFinanceCheckoutRefundService.createRefund(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id,0,e).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.refundAction.successTitle"),message:this.$tc("postfinancecheckout-order.refundAction.successMessage")}),this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${T.createId()}`)})}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.response.data,autoClose:!1})}finally{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${T.createId()}`)})}})},isSelectable(e){return e.refundableQuantity>0&&e.refundableAmount>0&&0==e.itemRefundedAmount&&0==e.itemRefundedQuantity},onSelectionChanged(e){this.selectedItems=Object.values(e)},onPerformBulkAction(){this.selectedItems.length&&(this.isLoading=!0,this.$nextTick(()=>{Promise.all(this.selectedItems.map(e=>this.lineItemRefundBulk(e.uniqueId))).then(()=>{this.isLoading=!1,this.$emit("modal-close"),this.$nextTick(()=>{this.$router.replace(`${this.$route.path}?hash=${T.createId()}`)})}).catch(e=>{this.createNotificationError({title:"Error",message:"Something went wrong with the refunds",autoClose:!1}),this.isLoading=!1})}))},lineItemRefundBulk(e){return new Promise((t,n)=>{this.PostFinanceCheckoutRefundService.createRefund(this.transactionData.transactions[0].metaData.salesChannelId,this.transactionData.transactions[0].id,0,e).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-order.refundAction.successTitle"),message:this.$tc("postfinancecheckout-order.refundAction.successMessage")}),t()}).catch(e=>{try{this.createNotificationError({title:e.response.data.errors[0].title,message:e.response.data.errors[0].detail,autoClose:!1})}catch(t){this.createNotificationError({title:e.title,message:e.response.data,autoClose:!1})}finally{n()}})})}}});var A=JSON.parse('{"postfinancecheckout-order":{"buttons":{"label":{"completion":"Abschluss","download-invoice":"Rechnung herunterladen","download-packing-slip":"Packzettel herunterladen","refund":"Eine neue R\xfcckerstattung erstellen","void":"Genehmigung annullieren","refund-whole-line-item":"Gesamte Werbebuchung erstatten","refund-line-item-by-quantity":"R\xfcckerstattung nach Menge","refund-line-item-selected":"R\xfcckerstattung ausw\xe4hlen","refund-line-item-parial":"Teilweise R\xfcckerstattung"}},"captureAction":{"button":{"text":"Zahlung erfassen"},"currentAmount":"Betrag","isFinal":"Dies ist die endg\xfcltige Verbuchung","maxAmount":"Maximaler Betrag","successMessage":"Ihre Verbuchung war erfolgreich","successTitle":"Erfolg"},"general":{"title":"Bestellungen"},"header":"PostFinanceCheckout Payment","lineItem":{"cardTitle":"Einzelposten","types":{"amountIncludingTax":"Betrag","name":"Name","quantity":"Anzahl","taxAmount":"Steuern","type":"Typ","uniqueId":"Eindeutige ID"}},"modal":{"title":{"capture":"Erfassen","refund":"Neue Gutschrift","void":"Autorisierung aufheben"}},"paymentDetails":{"cardTitle":"Zahlung","error":{"title":"Fehler beim Abrufen von Zahlungsdetails von PostFinanceCheckout"}},"refund":{"cardTitle":"Gutschriften","refundAmount":{"label":"Gutschriftsbetrag"},"refundQuantity":{"label":"Refund Menge"},"types":{"amount":"Betrag","createdOn":"Erstellt am","id":"ID","state":"Staat"}},"refundAction":{"confirmButton":{"text":"Ausf\xfchren"},"refundAmount":{"label":"Betrag","placeholder":"Einen Betrag eingeben"},"successMessage":"Ihre R\xfcckerstattung war erfolgreich","successTitle":"Erfolg","maxAvailableItemsToRefund":"Maximal Verf\xfcgbare Artikel zum Erstatten","maxAvailableAmountToRefund":"Maximal verf\xfcgbarer Erstattungsbetrag"},"transactionHistory":{"cardTitle":"Einzelheiten","types":{"authorized_amount":"Autorisierter Betrag","currency":"W\xe4hrung","customer":"Kunde","payment_method":"Zahlungsweise","state":"Staat","transaction":"Transaktion"},"customerId":"Customer ID","customerName":"Customer Name","creditCardHolder":"Kreditkarteninhaber","paymentMethod":"Zahlungsart","paymentMethodBrand":"Marke der Zahlungsmethode","PseudoCreditCardNumber":"Pseudo-Kreditkartennummer","CardExpire":"Karte verf\xe4llt"},"voidAction":{"confirm":{"button":{"cancel":"Nein","confirm":"Autorisierung aufheben"},"message":"Wollen Sie diese Zahlung wirklich stornieren?"},"successMessage":"Die Zahlung wurde erfolgreich annulliert","successTitle":"Erfolg"}}}'),N=JSON.parse('{"postfinancecheckout-order":{"buttons":{"label":{"completion":"Complete","download-invoice":"Download Invoice","download-packing-slip":"Download Packing Slip","refund":"Create a new refund","void":"Cancel authorization","refund-whole-line-item":"Refund whole line item","refund-line-item-by-quantity":"Refund by quantity","refund-line-item-selected":"Refund selected","refund-line-item-parial":"Partial refund"}},"captureAction":{"button":{"text":"Capture payment"},"currentAmount":"Amount","isFinal":"This is final capture","maxAmount":"Maximum amount","successMessage":"Your capture was successful.","successTitle":"Success"},"general":{"title":"Orders"},"header":"PostFinanceCheckout Payment","lineItem":{"cardTitle":"Line Items","types":{"amountIncludingTax":"Amount","name":"Name","quantity":"Quantity","taxAmount":"Taxes","type":"Type","uniqueId":"Unique ID"}},"modal":{"title":{"capture":"Capture","refund":"New refund","void":"Cancel authorization"}},"paymentDetails":{"cardTitle":"Payment","error":{"title":"Error fetching payment details from PostFinanceCheckout"}},"refund":{"cardTitle":"Refunds","refundAmount":{"label":"Refund Amount"},"refundQuantity":{"label":"Refund Quantity"},"types":{"amount":"Amount","createdOn":"Created On","id":"ID","state":"State"}},"refundAction":{"confirmButton":{"text":"Execute"},"refundAmount":{"label":"Amount","placeholder":"Enter a amount"},"successMessage":"Your refund was successful.","successTitle":"Success","maxAvailableItemsToRefund":"Maximum available items to refund","maxAvailableAmountToRefund":"Maximum available amount to refund"},"transactionHistory":{"cardTitle":"Details","types":{"authorized_amount":"Authorized Amount","currency":"Currency","customer":"Customer","payment_method":"Payment Method","state":"State","transaction":"Transaction"},"customerId":"Customer ID","customerName":"Customer Name","creditCardHolder":"Credit Card Holder","paymentMethod":"Payment Method","paymentMethodBrand":"Payment Method Brand","PseudoCreditCardNumber":"Pseudo Credit Card Number","CardExpire":"Card Expire"},"voidAction":{"confirm":{"button":{"cancel":"No","confirm":"Cancel authorization"},"message":"Do you really want to cancel this payment?"},"successMessage":"The payment was successfully voided.","successTitle":"Success"}}}'),D=JSON.parse('{"postfinancecheckout-order":{"buttons":{"label":{"completion":"Termin\xe9e","download-invoice":"T\xe9l\xe9charger la facture","download-packing-slip":"T\xe9l\xe9charger le bordereau d\'exp\xe9dition","refund":"Cr\xe9er un nouveau remboursement","void":"Annulez l\'autorisation","refund-whole-line-item":"Remboursement de la ligne enti\xe8re","refund-line-item-by-quantity":"Remboursement par quantit\xe9","refund-line-item-selected":"Rembourser s\xe9lectionn\xe9s","refund-line-item-parial":"Remboursement partiel"}},"captureAction":{"button":{"text":"Capture du paiement"},"currentAmount":"Montant","isFinal":"C\'est la capture finale","maxAmount":"Montant maximal","successMessage":"Votre capture a \xe9t\xe9 r\xe9ussie.","successTitle":"Succ\xe8s"},"general":{"title":"Commandes"},"header":"PostFinanceCheckout Paiement","lineItem":{"cardTitle":"Articles de ligne","types":{"amountIncludingTax":"Montant","name":"Nom","quantity":"Quantit\xe9","taxAmount":"Taxes","type":"Type","uniqueId":"ID unique"}},"modal":{"title":{"capture":"Capture","refund":"Nouveau remboursement","void":"Annulez l\'autorisation"}},"paymentDetails":{"cardTitle":"Paiement","error":{"title":"Erreur dans la r\xe9cup\xe9ration des d\xe9tails du paiement \xe0 partir de PostFinanceCheckout"}},"refund":{"cardTitle":"Remboursements","refundAmount":{"label":"Montant du remboursement"},"refundQuantity":{"label":"Quantit\xe9 \xe0 rembourser"},"types":{"amount":"Montant","createdOn":"Cr\xe9\xe9 le","id":"ID","state":"\xc9tat"}},"refundAction":{"confirmButton":{"text":"Ex\xe9cutez"},"refundAmount":{"label":"Montant","placeholder":"Entrez un montant"},"successMessage":"Votre remboursement a \xe9t\xe9 effectu\xe9 avec succ\xe8s.","successTitle":"Succ\xe8s","maxAvailableItemsToRefund":"Nombre maximum d\'articles disponibles pour le remboursement","maxAvailableAmountToRefund":"Montant maximal disponible pour le remboursement"},"transactionHistory":{"cardTitle":"D\xe9tails","types":{"authorized_amount":"Montant autoris\xe9","currency":"Monnaie","customer":"Client","payment_method":"Mode de paiement","state":"\xc9tat","transaction":"Transaction"},"customerId":"Customer ID","customerName":"Customer Name","creditCardHolder":"Titulaire de la carte de cr\xe9dit","paymentMethod":"Mode de paiement","paymentMethodBrand":"Marque du mode de paiement","PseudoCreditCardNumber":"Pseudo num\xe9ro de carte de cr\xe9dit","CardExpire":"La carte expire"},"voidAction":{"confirm":{"button":{"cancel":"Non","confirm":"Annulez l\'autorisation"},"message":"Voulez-vous vraiment annuler ce paiement?"},"successMessage":"Le paiement a \xe9t\xe9 annul\xe9 avec succ\xe8s.","successTitle":"Succ\xe8s"}}}'),O=JSON.parse('{"postfinancecheckout-order":{"buttons":{"label":{"completion":"Completato","download-invoice":"Scarica fattura","download-packing-slip":"Scarica distinta di imballaggio","refund":"Crea un nuovo rimborso","void":"Annulla autorizzazione","refund-whole-line-item":"Rimborso intera riga","refund-line-item-by-quantity":"Rimborso per quantit\xe0","refund-line-item-selected":"Rimborso selezionati","refund-line-item-parial":"Rimborso parziale"}},"captureAction":{"button":{"text":"Cattura pagamento"},"currentAmount":"Importo","isFinal":"Questa \xe8 la cattura finale","maxAmount":"Importo massimo","successMessage":"La tua cattura ha avuto successo.","successTitle":"Successo"},"general":{"title":"Ordini"},"header":"Pagamento PostFinanceCheckout","lineItem":{"cardTitle":"Articoli di linea","types":{"amountIncludingTax":"Importo","name":"Nome","quantity":"Quantit\xe0","taxAmount":"Tasse","type":"Tipo","uniqueId":"ID unico"}},"modal":{"title":{"capture":"Cattura","refund":"Nuovo rimborso","void":"Annulla autorizzazione"}},"paymentDetails":{"cardTitle":"Pagamento","error":{"title":"Errore nel recupero dei dettagli del pagamento da PostFinanceCheckout"}},"refund":{"cardTitle":"Rimborsi","refundAmount":{"label":"Importo del rimborso"},"refundQuantity":{"label":"Quantit\xe0 di rimborso"},"types":{"amount":"Importo","createdOn":"Creato il","id":"ID","state":"Stato"}},"refundAction":{"confirmButton":{"text":"Esegui"},"refundAmount":{"label":"Importo","placeholder":"Inserisci un importo"},"successMessage":"Il tuo rimborso \xe8 andato a buon fine.","successTitle":"Successo","maxAvailableItemsToRefund":"Numero massimo di articoli disponibili da rimborsare","maxAvailableAmountToRefund":"Importo massimo disponibile per il rimborso"},"transactionHistory":{"cardTitle":"Dettagli","types":{"authorized_amount":"Importo autorizzato","currency":"Valuta","customer":"Cliente","payment_method":"Metodo di pagamento","state":"Stato","transaction":"Transazione"},"customerId":"Customer ID","customerName":"Customer Name","creditCardHolder":"Proprietario della carta di credito","paymentMethod":"Metodo di pagamento","paymentMethodBrand":"Metodo di pagamento Marca","PseudoCreditCardNumber":"Numero di carta di credito pseudo","CardExpire":"La carta scade"},"voidAction":{"confirm":{"button":{"cancel":"No","confirm":"Annulla autorizzazione"},"message":"Vuoi davvero annullare questo pagamento?"},"successMessage":"Il pagamento \xe8 stato annullato con successo.","successTitle":"Successo"}}}');let{Module:x}=Shopware;x.register("postfinancecheckout-order",{type:"plugin",name:"PostFinanceCheckout",title:"postfinancecheckout-order.general.title",description:"postfinancecheckout-order.general.descriptionTextModule",version:"1.0.1",targetVersion:"1.0.1",color:"#2b52ff",snippets:{"de-DE":A,"en-GB":N,"fr-FR":D,"it-IT":O},routeMiddleware(e,t){"sw.order.detail"===t.name&&t.children.push({component:"postfinancecheckout-order-detail",name:"postfinancecheckout.order.detail",isChildren:!0,path:"/sw/order/postfinancecheckout/detail/:id"}),e(t)}}),n(360);let $="PostFinanceCheckoutPayment.config";var L={CONFIG_DOMAIN:$,CONFIG_APPLICATION_KEY:$+".applicationKey",CONFIG_EMAIL_ENABLED:$+".emailEnabled",CONFIG_INTEGRATION:$+".integration",CONFIG_LINE_ITEM_CONSISTENCY_ENABLED:$+".lineItemConsistencyEnabled",CONFIG_SPACE_ID:$+".spaceId",CONFIG_SPACE_VIEW_ID:$+".spaceViewId",CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED:$+".storefrontInvoiceDownloadEnabled",CONFIG_USER_ID:$+".userId",CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED:$+".storefrontWebhooksUpdateEnabled",CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED:$+".storefrontPaymentsUpdateEnabled"};let{Component:R,Mixin:M}=Shopware;R.register("postfinancecheckout-settings",{template:'{% block postfinancecheckout_settings %}\n\n\n {% block postfinancecheckout_settings_header %}\n \n {% endblock %}\n\n {% block postfinancecheckout_settings_actions %}\n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content %}\n \n {% endblock %}\n\n{% endblock %}',inject:["acl","PostFinanceCheckoutConfigurationService"],mixins:[M.getByName("notification"),M.getByName("sw-inline-snippet")],data(){return{config:{},isLoading:!1,isTesting:!1,isSaveSuccessful:!1,applicationKeyFilled:!1,applicationKeyErrorState:!1,spaceIdFilled:!1,spaceIdErrorState:!1,userIdFilled:!1,userIdErrorState:!1,isSetDefaultPaymentSuccessful:!1,isSettingDefaultPaymentMethods:!1,configIntegrationDefaultValue:"iframe",configEmailEnabledDefaultValue:!0,configLineItemConsistencyEnabledDefaultValue:!0,configStorefrontInvoiceDownloadEnabledEnabledDefaultValue:!0,configStorefrontWebhooksUpdateEnabledDefaultValue:!0,configStorefrontPaymentsUpdateEnabledDefaultValue:!0,...L}},props:{isLoading:{type:Boolean,required:!0}},metaInfo(){return{title:this.$createTitle()}},created(){this.$on("check-api-connection-event",this.onCheckApiConnection)},beforeDestroy(){this.$off("check-api-connection-event",this.onCheckApiConnection)},watch:{config:{handler(e){let t=this.$refs.configComponent.allConfigs.null;null===this.$refs.configComponent.selectedSalesChannelId?(this.applicationKeyFilled=!!this.config[this.CONFIG_APPLICATION_KEY],this.spaceIdFilled=!!this.config[this.CONFIG_SPACE_ID],this.userIdFilled=!!this.config[this.CONFIG_USER_ID],this.CONFIG_INTEGRATION in this.config||(this.config[this.CONFIG_INTEGRATION]=this.configIntegrationDefaultValue),this.CONFIG_EMAIL_ENABLED in this.config||(this.config[this.CONFIG_EMAIL_ENABLED]=this.configEmailEnabledDefaultValue),this.CONFIG_LINE_ITEM_CONSISTENCY_ENABLED in this.config||(this.config[this.CONFIG_LINE_ITEM_CONSISTENCY_ENABLED]=this.configLineItemConsistencyEnabledDefaultValue),this.CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED in this.config||(this.config[this.CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED]=this.configStorefrontInvoiceDownloadEnabledEnabledDefaultValue),this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED in this.config||(this.config[this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED]=this.configStorefrontWebhooksUpdateEnabledDefaultValue),this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED in this.config||(this.config[this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED]=this.configStorefrontPaymentsUpdateEnabledDefaultValue)):(this.applicationKeyFilled=!!this.config[this.CONFIG_APPLICATION_KEY]||!!t[this.CONFIG_APPLICATION_KEY],this.spaceIdFilled=!!this.config[this.CONFIG_SPACE_ID]||!!t[this.CONFIG_SPACE_ID],this.userIdFilled=!!this.config[this.CONFIG_USER_ID]||!!t[this.CONFIG_USER_ID],this.CONFIG_INTEGRATION in this.config&&this.CONFIG_INTEGRATION in t||(this.config[this.CONFIG_INTEGRATION]=this.configIntegrationDefaultValue),this.CONFIG_EMAIL_ENABLED in this.config&&this.CONFIG_EMAIL_ENABLED in t||(this.config[this.CONFIG_EMAIL_ENABLED]=this.configEmailEnabledDefaultValue),this.CONFIG_LINE_ITEM_CONSISTENCY_ENABLED in this.config&&this.CONFIG_LINE_ITEM_CONSISTENCY_ENABLED in t||(this.config[this.CONFIG_LINE_ITEM_CONSISTENCY_ENABLED]=this.configLineItemConsistencyEnabledDefaultValue),this.CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED in this.config&&this.CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED in t||(this.config[this.CONFIG_STOREFRONT_INVOICE_DOWNLOAD_ENABLED]=this.configStorefrontInvoiceDownloadEnabledEnabledDefaultValue),this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED in this.config&&this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED in t||(this.config[this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED]=this.configStorefrontWebhooksUpdateEnabledDefaultValue),this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED in this.config&&this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED in t||(this.config[this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED]=this.configStorefrontPaymentsUpdateEnabledDefaultValue)),this.$emit("salesChannelChanged"),this.$emit("update:value",e)},deep:!0}},methods:{checkTextFieldInheritance(e){return"string"!=typeof e||e.length<=0},checkNumberFieldInheritance(e){return"number"!=typeof e||e.length<=0},checkBoolFieldInheritance(e){return"boolean"!=typeof e},getInheritValue(e){return null==this.selectedSalesChannelId?this.actualConfigData[e]:this.allConfigs.null[e]},onSave(){if(!(this.spaceIdFilled&&this.userIdFilled&&this.applicationKeyFilled)){this.setErrorStates();return}this.save()},save(){this.isLoading=!0,this.$refs.configComponent.save().then(e=>{e&&(this.config=e),this.registerWebHooks(),this.synchronizePaymentMethodConfiguration(),this.installOrderDeliveryStates()}).catch(e=>{console.error("Error:",e),this.isLoading=!1})},registerWebHooks(){if(!1===this.config[this.CONFIG_STOREFRONT_WEBHOOKS_UPDATE_ENABLED])return!1;this.PostFinanceCheckoutConfigurationService.registerWebHooks(this.$refs.configComponent.selectedSalesChannelId).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-settings.settingForm.titleSuccess"),message:this.$tc("postfinancecheckout-settings.settingForm.messageWebHookUpdated")})}).catch(e=>{this.createNotificationError({title:this.$tc("postfinancecheckout-settings.settingForm.titleError"),message:this.$tc("postfinancecheckout-settings.settingForm.messageWebHookError")}),this.isLoading=!1,console.error("Error:",e)})},synchronizePaymentMethodConfiguration(){if(!1===this.config[this.CONFIG_STOREFRONT_PAYMENTS_UPDATE_ENABLED])return!1;this.PostFinanceCheckoutConfigurationService.synchronizePaymentMethodConfiguration(this.$refs.configComponent.selectedSalesChannelId).then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-settings.settingForm.titleSuccess"),message:this.$tc("postfinancecheckout-settings.settingForm.messagePaymentMethodConfigurationUpdated")}),this.isLoading=!1}).catch(e=>{this.createNotificationError({title:this.$tc("postfinancecheckout-settings.settingForm.titleError"),message:this.$tc("postfinancecheckout-settings.settingForm.messagePaymentMethodConfigurationError")}),this.isLoading=!1,console.error("Error:",e)})},installOrderDeliveryStates(){this.PostFinanceCheckoutConfigurationService.installOrderDeliveryStates().then(()=>{this.createNotificationSuccess({title:this.$tc("postfinancecheckout-settings.settingForm.titleSuccess"),message:this.$tc("postfinancecheckout-settings.settingForm.messageOrderDeliveryStateUpdated")}),this.isLoading=!1}).catch(()=>{this.createNotificationError({title:this.$tc("postfinancecheckout-settings.settingForm.titleError"),message:this.$tc("postfinancecheckout-settings.settingForm.messageOrderDeliveryStateError")}),this.isLoading=!1})},onSetPaymentMethodDefault(){this.isSettingDefaultPaymentMethods=!0,this.PostFinanceCheckoutConfigurationService.setPostFinanceCheckoutAsSalesChannelPaymentDefault(this.$refs.configComponent.selectedSalesChannelId).then(()=>{this.isSettingDefaultPaymentMethods=!1,this.isSetDefaultPaymentSuccessful=!0,this.createNotificationSuccess({title:this.$tc("postfinancecheckout-settings.settingForm.titleSuccess"),message:this.$tc("postfinancecheckout-settings.salesChannelCard.messageDefaultPaymentUpdated")})})},setErrorStates(){let e={code:1,detail:this.$tc("postfinancecheckout-settings.messageNotBlank")};this.spaceIdFilled||(this.spaceIdErrorState=e),this.userIdFilled||(this.userIdErrorState=e),this.applicationKeyFilled||(this.applicationKeyErrorState=e)},onCheckApiConnection(e){let{spaceId:t,userId:n,applicationKey:a}=e;this.isTesting=!0,this.PostFinanceCheckoutConfigurationService.checkApiConnection(t,n,a).then(e=>{200===e.result?this.createNotificationSuccess({title:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.title"),message:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.successMessage")}):this.createNotificationError({title:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.title"),message:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.errorMessage")}),this.isTesting=!1}).catch(()=>{this.createNotificationError({title:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.title"),message:this.$tc("postfinancecheckout-settings.settingForm.credentials.alert.errorMessage")}),this.isTesting=!1})}}});let{Component:B,Mixin:G}=Shopware;B.register("sw-postfinancecheckout-credentials",{template:'{% block postfinancecheckout_settings_content_card_channel_config_credentials %}\n \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container %}\n \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings %}\n
    \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_space_id %}\n \n \n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_user_id %}\n \n \n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_application_key %}\n \n \n \n {% endblock %}\n
    \n {% endblock %}\n\n \n \n {{ $tc(\'postfinancecheckout-settings.settingForm.credentials.button.label\') }}\n \n \n\n
    \n {% endblock %}\n \n\n{% endblock %}\n',name:"PostFinanceCheckoutCredentials",inject:["acl"],mixins:[G.getByName("notification")],props:{actualConfigData:{type:Object,required:!0},allConfigs:{type:Object,required:!0},selectedSalesChannelId:{required:!0},spaceIdFilled:{type:Boolean,required:!0},spaceIdErrorState:{required:!0},userIdFilled:{type:Boolean,required:!0},userIdErrorState:{required:!0},applicationKeyFilled:{type:Boolean,required:!0},applicationKeyErrorState:{required:!0},isLoading:{type:Boolean,required:!0},isTesting:{type:Boolean,required:!1}},data(){return{...L}},methods:{checkTextFieldInheritance(e){return"string"!=typeof e||e.length<=0},checkNumberFieldInheritance(e){return"number"!=typeof e||e.length<=0},checkBoolFieldInheritance(e){return"boolean"!=typeof e},emitCheckApiConnectionEvent(){let e={spaceId:this.actualConfigData[L.CONFIG_SPACE_ID],userId:this.actualConfigData[L.CONFIG_USER_ID],applicationKey:this.actualConfigData[L.CONFIG_APPLICATION_KEY]};this.$emit("check-api-connection-event",e)}}});let{Component:z,Mixin:q}=Shopware;z.register("sw-postfinancecheckout-options",{template:'{% block postfinancecheckout_settings_content_card_channel_config_options %}\n \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container %}\n \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings %}\n
    \n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_space_view_id %}\n \n \n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_integration %}\n \n \n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_line_item_consistency_enabled %}\n \n \n \n {% endblock %}\n\n {% block postfinancecheckout_settings_content_card_channel_config_credentials_card_container_settings_email_enabled %}\n \n \n \n {% endblock %}\n
    \n {% endblock %}\n
    \n {% endblock %}\n
    \n\n{% endblock %}\n',name:"PostFinanceCheckoutOptions",mixins:[q.getByName("notification")],props:{actualConfigData:{type:Object,required:!0},allConfigs:{type:Object,required:!0},selectedSalesChannelId:{required:!0},isLoading:{type:Boolean,required:!0}},data(){return{...L}},computed:{integrationOptions(){return[{id:"iframe",name:this.$tc("postfinancecheckout-settings.settingForm.options.integration.options.iframe")},{id:"payment_page",name:this.$tc("postfinancecheckout-settings.settingForm.options.integration.options.payment_page")}]}},methods:{checkTextFieldInheritance(e){return"string"!=typeof e||e.length<=0},checkNumberFieldInheritance(e){return"number"!=typeof e||e.length<=0},checkBoolFieldInheritance(e){return"boolean"!=typeof e}}});let{Component:U}=Shopware;U.register("sw-postfinancecheckout-settings-icon",{template:'{% block postfinancecheckout_settings_icon %}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n \n{% endblock %}\n'});let{Component:V,Mixin:H}=Shopware;V.register("sw-postfinancecheckout-storefront-options",{template:'\n \n
    \n \n \n \n
    \n
    \n
    \n\n',name:"PostFinanceCheckoutStorefrontOptions",mixins:[H.getByName("notification")],props:{actualConfigData:{type:Object,required:!0},allConfigs:{type:Object,required:!0},selectedSalesChannelId:{required:!0},isLoading:{type:Boolean,required:!0}},data(){return{...L}},methods:{checkTextFieldInheritance(e){return"string"!=typeof e||e.length<=0},checkNumberFieldInheritance(e){return"number"!=typeof e||e.length<=0},checkBoolFieldInheritance(e){return"boolean"!=typeof e}}});let{Component:W,Mixin:K}=Shopware;W.register("sw-postfinancecheckout-advanced-options",{template:'\n \n
    \n \n \n \n\n \n \n \n
    \n
    \n
    \n\n',name:"PostFinanceCheckoutAdvancedOptions",inject:["acl"],mixins:[K.getByName("notification")],props:{actualConfigData:{type:Object,required:!0},allConfigs:{type:Object,required:!0},selectedSalesChannelId:{required:!0},isLoading:{type:Boolean,required:!0}},data(){return{...L}},methods:{checkTextFieldInheritance(e){return"string"!=typeof e||e.length<=0},checkNumberFieldInheritance(e){return"number"!=typeof e||e.length<=0},checkBoolFieldInheritance(e){return"boolean"!=typeof e}}});var Q=JSON.parse('{"sw-privileges":{"permissions":{"parents":{"postfinancecheckout":"PostFinanceCheckout plugin"},"postfinancecheckout":{"label":"PostFinanceCheckout berechtigungen"}}},"postfinancecheckout-settings":{"general":{"descriptionTextModule":"PostFinanceCheckout-Einstellungen","mainMenuItemGeneral":"PostFinanceCheckout"},"header":"PostFinanceCheckout","messageNotBlank":"Dieser Wert sollte nicht leer sein.","salesChannelCard":{"button":{"description":"Klicken Sie auf diese Schaltfl\xe4che, um PostFinanceCheckout als Standard-Zahlungsabwickler im ausgew\xe4hlten Vertriebskanal festzulegen","label":"PostFinanceCheckout als Standard-Zahlungsabwickler festlegen"},"messageDefaultPaymentError":"PostFinanceCheckout als Standard-Zahlungsabwickler konnte nicht festgelegt werden..","messageDefaultPaymentUpdated":"PostFinanceCheckout als Standard-Zahlungsabwickler wurde festgelegt."},"settingForm":{"credentials":{"applicationKey":{"label":"Application Key","tooltipText":"Der Anwendungsschl\xfcssel wird verwendet, um dieses Plugin mit der API PostFinanceCheckout zu authentifizieren."},"cardTitle":"Anmeldedaten","spaceId":{"label":"Space ID","tooltipText":"Die Space ID wird verwendet, um dieses Plugin mit der API PostFinanceCheckout zu authentifizieren."},"userId":{"label":"User ID","tooltipText":"Die Benutzer-ID wird verwendet, um dieses Plugin mit der PostFinanceCheckout-API zu authentifizieren."},"button":{"description":"Klicken Sie auf diese Schaltfl\xe4che, um die PostFinanceCheckout API zu testen","label":"API Verbindung testen"},"alert":{"title":"API-Test","successMessage":"Die Verbindung wurde erfolgreich getestet.","errorMessage":"Die Verbindung ist fehlgeschlagen. Versuchen Sie es erneut."}},"messageSaveSuccess":"PostFinanceCheckout-Einstellungen wurden gespeichert.","messageOrderDeliveryStateError":"PostFinanceCheckout OrderDeliveryState konnte nicht gespeichert werden.","messageOrderDeliveryStateUpdated":"PostFinanceCheckout OrderDeliveryState wurde aktualisiert.","messagePaymentMethodConfigurationError":"PostFinanceCheckout PaymentMethodConfiguration konnte nicht gespeichert werden. Bitte \xfcberpr\xfcfen Sie Ihre Anmeldedaten.","messagePaymentMethodConfigurationUpdated":"PostFinanceCheckout PaymentMethodConfiguration wurde registriert.","messageWebHookError":"PostFinanceCheckout WebHook konnte nicht gespeichert werden. Bitte \xfcberpr\xfcfen Sie Ihre Zugangsdaten.","messageWebHookUpdated":"PostFinanceCheckout WebHook wurde aktualisiert.","options":{"cardTitle":"Optionen","emailEnabled":{"label":"Auftragsbest\xe4tigung per E-Mail senden","tooltipText":"Wenn diese Einstellung aktiviert ist, erhalten Ihre Kunden eine E-Mail von Ihrem Gesch\xe4ft, wenn die Zahlung ihrer Bestellung autorisiert ist."},"integration":{"label":"Integration","options":{"iframe":"Iframe","payment_page":"Payment Page"},"tooltipText":"Integration"},"lineItemConsistencyEnabled":{"label":"Konsistenz der Einzelposten","tooltipText":"Wenn diese Option aktiviert ist, stimmen die Summen der Einzelposten in PostFinanceCheckoutPayment immer mit der Shopware-Bestellsumme \xfcberein."},"spaceViewId":{"label":"Space View ID","tooltipText":"Space View ID"}},"save":"Speichern","storefrontOptions":{"cardTitle":"Storefront-Optionen","invoiceDownloadEnabled":{"label":"Rechnung Download","tooltipText":"Wenn diese Einstellung aktiviert ist, k\xf6nnen Ihre Kunden Auftragsrechnungen von PostFinanceCheckout herunterladen."}},"advancedOptions":{"cardTitle":"Erweiterte-Optionen","webhooksUpdateEnabled":{"label":"Webhooks-Update","tooltipText":"Wenn diese Einstellung aktiviert ist, wird das Webhook-Update ausgel\xf6st, wenn Sie die Einstellungen speichern"},"paymentsUpdateEnabled":{"label":"Payments-Update","tooltipText":"Wenn diese Einstellung aktiviert ist, wird die Aktualisierung der Zahlungsmethoden ausgel\xf6st, wenn Sie die Einstellungen speichern"}},"titleError":"Fehler","titleSuccess":"Erfolg"}}}'),j=JSON.parse('{"sw-privileges":{"permissions":{"parents":{"postfinancecheckout":"PostFinanceCheckout plugin"},"postfinancecheckout":{"label":"PostFinanceCheckout permissions"}}},"postfinancecheckout-settings":{"general":{"descriptionTextModule":"PostFinanceCheckout settings","mainMenuItemGeneral":"PostFinanceCheckout"},"header":"PostFinanceCheckout","messageNotBlank":"This value should not be blank.","salesChannelCard":{"button":{"description":"Click this button to set PostFinanceCheckout as default payment handler in the selected SalesChannel","label":"Set PostFinanceCheckout as default payment handler"},"messageDefaultPaymentError":"PostFinanceCheckout as default payment could not be set.","messageDefaultPaymentUpdated":"PostFinanceCheckout as default payment has been set."},"settingForm":{"credentials":{"applicationKey":{"label":"Application Key","tooltipText":"The Application Key is used to authenticate this plugin with the PostFinanceCheckout API."},"cardTitle":"Credentials","spaceId":{"label":"Space ID","tooltipText":"The space ID is used to authenticate this plugin with the PostFinanceCheckout API."},"userId":{"label":"User ID","tooltipText":"The user ID is used to authenticate this plugin with the PostFinanceCheckout API."},"button":{"description":"Click this button to test the PostFinanceCheckout API","label":"API connection test"},"alert":{"title":"API Test","successMessage":"The connection was successfully tested.","errorMessage":"The connection was failed. Try it again."}},"messageSaveSuccess":"PostFinanceCheckout settings have been saved.","messageOrderDeliveryStateError":"PostFinanceCheckout OrderDeliveryState could not be saved.","messageOrderDeliveryStateUpdated":"PostFinanceCheckout OrderDeliveryState has been updated.","messagePaymentMethodConfigurationError":"PostFinanceCheckout PaymentMethodConfiguration could not be saved. Please check your credentials.","messagePaymentMethodConfigurationUpdated":"PostFinanceCheckout PaymentMethodConfiguration has been registered.","messageWebHookError":"PostFinanceCheckout WebHook could not be saved. Please check your credentials.","messageWebHookUpdated":"PostFinanceCheckout WebHook has been updated.","options":{"cardTitle":"Options","emailEnabled":{"label":"Send order confirmation email","tooltipText":"If this setting is enabled your customers will receive an email from your store when their order payment is authorised"},"integration":{"label":"Integration","options":{"iframe":"Iframe","payment_page":"Payment Page"},"tooltipText":"Integration"},"lineItemConsistencyEnabled":{"label":"Line item consistency","tooltipText":"If this option is enabled line item totals in PostFinanceCheckoutPayment will always match Shopware order total"},"spaceViewId":{"label":"Space View ID","tooltipText":"Space View ID"}},"save":"Save","storefrontOptions":{"cardTitle":"Storefront Options","invoiceDownloadEnabled":{"label":"Invoice Download","tooltipText":"If this setting is enabled your customers will be able to download order invoices from PostFinanceCheckout"}},"advancedOptions":{"cardTitle":"Advanced Options","webhooksUpdateEnabled":{"label":"Webhooks Update","tooltipText":"If this setting is enabled webhook update will be triggered when you save settings"},"paymentsUpdateEnabled":{"label":"Payments Update","tooltipText":"If this setting is enabled payment methods update will be triggered when you save settings"}},"titleError":"Error","titleSuccess":"Success"}}}'),Y=JSON.parse('{"sw-privileges":{"permissions":{"parents":{"postfinancecheckout":"PostFinanceCheckout brancher"},"postfinancecheckout":{"label":"PostFinanceCheckout autorisations"}}},"postfinancecheckout-settings":{"general":{"descriptionTextModule":"Param\xe8tres de PostFinanceCheckout","mainMenuItemGeneral":"PostFinanceCheckout"},"header":"PostFinanceCheckout","messageNotBlank":"Cette valeur ne doit pas \xeatre vide.","salesChannelCard":{"button":{"description":"Cliquez sur ce bouton pour d\xe9finir PostFinanceCheckout comme gestionnaire de paiement par d\xe9faut dans le canal de vente s\xe9lectionn\xe9.","label":"D\xe9finir PostFinanceCheckout comme gestionnaire de paiement par d\xe9faut"},"messageDefaultPaymentError":"PostFinanceCheckout comme paiement par d\xe9faut n\'a pas pu \xeatre d\xe9fini.","messageDefaultPaymentUpdated":"PostFinanceCheckout comme paiement par d\xe9faut a \xe9t\xe9 d\xe9fini."},"settingForm":{"credentials":{"applicationKey":{"label":"Application Key","tooltipText":"La cl\xe9 d\'application est utilis\xe9e pour authentifier ce plugin avec l\'API."},"cardTitle":"R\xe9f\xe9rences","spaceId":{"label":"Space ID","tooltipText":"L\'ID de l\'espace est utilis\xe9 pour authentifier ce plugin avec l\'API PostFinanceCheckout.."},"userId":{"label":"User ID","tooltipText":"L\'ID utilisateur est utilis\xe9 pour authentifier ce plugin avec l\'API PostFinanceCheckout."},"button":{"description":"Cliquez sur ce bouton pour tester l\'API PostFinanceCheckout.","label":"Test de connexion \xe0 l\'API"},"alert":{"title":"Test API","successMessage":"La connexion a \xe9t\xe9 test\xe9e avec succ\xe8s.","errorMessage":"La connexion a \xe9chou\xe9. R\xe9essayez."}},"messageSaveSuccess":"Les param\xe8tres de PostFinanceCheckout ont \xe9t\xe9 enregistr\xe9s.","messageOrderDeliveryStateError":"Les param\xe8tres de PostFinanceCheckout OrderDeliveryState n\'ont pas pu \xeatre enregistr\xe9s.","messageOrderDeliveryStateUpdated":"PostFinanceCheckout OrderDeliveryState a \xe9t\xe9 mis \xe0 jour.","messagePaymentMethodConfigurationError":"PostFinanceCheckout PaymentMethodConfiguration n\'a pas pu \xeatre enregistr\xe9. Veuillez v\xe9rifier vos informations d\'identification.","messagePaymentMethodConfigurationUpdated":"PostFinanceCheckout PaymentMethodConfiguration a \xe9t\xe9 enregistr\xe9.","messageWebHookError":"PostFinanceCheckout WebHook n\'a pas pu \xeatre enregistr\xe9. Veuillez v\xe9rifier vos informations d\'identification.","messageWebHookUpdated":"PostFinanceCheckout WebHook a \xe9t\xe9 mis \xe0 jour.","options":{"cardTitle":"Options","emailEnabled":{"label":"Envoyer un e-mail de confirmation de commande","tooltipText":"If this setting is enabled your customers will receive an email from your store when their order payment is authorised"},"integration":{"label":"Integration","options":{"iframe":"Iframe","payment_page":"Page de paiement"},"tooltipText":"Integration"},"lineItemConsistencyEnabled":{"label":"Coh\xe9rence des postes de ligne","tooltipText":"Si cette option est activ\xe9e, les totaux des articles dans PostFinanceCheckoutPayment correspondront toujours au total de la commande Shopware."},"spaceViewId":{"label":"Space View ID","tooltipText":"Space View ID"}},"save":"Enregistrer","storefrontOptions":{"cardTitle":"Storefront Options","invoiceDownloadEnabled":{"label":"T\xe9l\xe9chargement de facture","tooltipText":"Si ce param\xe8tre est activ\xe9, vos clients pourront t\xe9l\xe9charger les factures de commande depuis PostFinanceCheckout"}},"advancedOptions":{"cardTitle":"Options avanc\xe9es","webhooksUpdateEnabled":{"label":"Mise \xe0 jour des webhooks","tooltipText":"Si ce param\xe8tre est activ\xe9, la mise \xe0 jour des webhooks sera d\xe9clench\xe9e lorsque vous enregistrerez les param\xe8tres."},"paymentsUpdateEnabled":{"label":"Mise \xe0 jour des paiements","tooltipText":"Si ce param\xe8tre est activ\xe9, la mise \xe0 jour des m\xe9thodes de paiement sera d\xe9clench\xe9e lorsque vous enregistrez les param\xe8tres."}},"titleError":"Erreur","titleSuccess":"Succ\xe8s"}}}'),Z=JSON.parse('{"sw-privileges":{"permissions":{"parents":{"postfinancecheckout":"PostFinanceCheckout brancher"},"postfinancecheckout":{"label":"PostFinanceCheckout autorisations"}}},"postfinancecheckout-settings":{"general":{"descriptionTextModule":"Impostazioni PostFinanceCheckout","mainMenuItemGeneral":"PostFinanceCheckout"},"header":"PostFinanceCheckout","messageNotBlank":"Questo valore non dovrebbe essere vuoto.","salesChannelCard":{"button":{"description":"Fai clic su questo pulsante per impostare PostFinanceCheckout come gestore di pagamento predefinito nel SalesChannel selezionato","label":"Imposta PostFinanceCheckout come gestore di pagamento predefinito"},"messageDefaultPaymentError":"Non \xe8 stato possibile impostare PostFinanceCheckout come pagamento predefinito.","messageDefaultPaymentUpdated":"PostFinanceCheckout come pagamento predefinito \xe8 stato impostato."},"settingForm":{"credentials":{"applicationKey":{"label":"Chiave di applicazione","tooltipText":"La chiave dell\'applicazione \xe8 usata per autenticare questo plugin con l\'API PostFinanceCheckout."},"cardTitle":"Credenziali","spaceId":{"label":"ID spazio","tooltipText":"L\'ID dello spazio \xe8 usato per autenticare questo plugin con l\'API PostFinanceCheckout."},"userId":{"label":"ID utente","tooltipText":"L\'ID utente \xe8 usato per autenticare questo plugin con l\'API PostFinanceCheckout."},"button":{"description":"Fare clic su questo pulsante per testare l\'API PostFinanceCheckout.","label":"Test di connessione API"},"alert":{"title":"Test API","successMessage":"La connessione \xe8 stata testata con successo.","errorMessage":"La connessione \xe8 fallita. Riprovare."}},"messageSaveSuccess":"Le impostazioni di PostFinanceCheckout sono state salvate.","messageOrderDeliveryStateError":"PostFinanceCheckout OrderDeliveryState non pu\xf2 essere salvato.","messageOrderDeliveryStateUpdated":"PostFinanceCheckout OrderDeliveryState \xe8 stato aggiornato.","messagePaymentMethodConfigurationError":"PostFinanceCheckout PaymentMethodConfiguration non pu\xf2 essere salvato. Per favore controlla le tue credenziali.","messagePaymentMethodConfigurationUpdated":"PostFinanceCheckout PaymentMethodConfiguration \xe8 stato registrato.","messageWebHookError":"PostFinanceCheckout WebHook non pu\xf2 essere salvato. Per favore controlla le tue credenziali.","messageWebHookUpdated":"PostFinanceCheckout WebHook \xe8 stato aggiornato.","options":{"cardTitle":"Opzioni","emailEnabled":{"label":"Invia email di conferma dell\'ordine","tooltipText":"Se questa impostazione \xe8 abilitata i tuoi clienti riceveranno un\'email dal tuo negozio quando il pagamento del loro ordine sar\xe0 autorizzato"},"integration":{"label":"Integrazione","options":{"iframe":"Iframe","payment_page":"Pagina di pagamento"},"tooltipText":"Integrazione"},"lineItemConsistencyEnabled":{"label":"Coerenza dell\'elemento linea","tooltipText":"Se questa opzione \xe8 abilitata i totali degli articoli in PostFinanceCheckoutPayment corrisponderanno sempre al totale dell\'ordine Shopware"},"spaceViewId":{"label":"ID della vista spazio","tooltipText":"ID della vista spaziale"}},"save":"Salva","storefrontOptions":{"cardTitle":"Opzioni vetrina","invoiceDownloadEnabled":{"label":"Scaricamento fattura","tooltipText":"Se questa impostazione \xe8 abilitata i tuoi clienti potranno scaricare le fatture degli ordini da PostFinanceCheckout"}},"advancedOptions":{"cardTitle":"Opzioni avanzate","webhooksUpdateEnabled":{"label":"Aggiornamento webhooks","tooltipText":"Se questa impostazione \xe8 abilitata l\'aggiornamento dei webhook sar\xe0 attivato quando si salvano le impostazioni"},"paymentsUpdateEnabled":{"label":"Aggiornamento pagamenti","tooltipText":"Se questa impostazione \xe8 abilitata l\'aggiornamento dei metodi di pagamento verr\xe0 attivato quando si salvano le impostazioni"}},"titleError":"Errore","titleSuccess":"Successo"}}}');let{Module:J}=Shopware;J.register("postfinancecheckout-settings",{type:"plugin",name:"PostFinanceCheckout",title:"postfinancecheckout-settings.general.descriptionTextModule",description:"postfinancecheckout-settings.general.descriptionTextModule",color:"#28d8ff",icon:"default-action-settings",version:"1.0.1",targetVersion:"1.0.1",snippets:{"de-DE":Q,"en-GB":j,"fr-FR":Y,"it-IT":Z},routes:{index:{component:"postfinancecheckout-settings",path:"index",meta:{parentPath:"sw.settings.index",privilege:"postfinancecheckout.viewer"},props:{default:e=>({hash:e.params.hash})}}},settingsItem:{group:"plugins",to:"postfinancecheckout.settings.index",iconComponent:"sw-postfinancecheckout-settings-icon",backgroundEnabled:!0,privilege:"postfinancecheckout.viewer"}});let X=Shopware.Classes.ApiService;var ee=class extends X{constructor(e,t,n="postfinancecheckout"){super(e,t,n)}registerWebHooks(e=null){let t=this.getBasicHeaders(),n=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/configuration/register-web-hooks`;return this.httpClient.post(n,{salesChannelId:e},{headers:t}).then(e=>X.handleResponse(e))}checkApiConnection(e=null,t=null,n=null){let a=this.getBasicHeaders(),i=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/configuration/check-api-connection`;return this.httpClient.post(i,{spaceId:e,userId:t,applicationId:n},{headers:a}).then(e=>X.handleResponse(e))}setPostFinanceCheckoutAsSalesChannelPaymentDefault(e=null){let t=this.getBasicHeaders(),n=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/configuration/set-postfinancecheckout-as-sales-channel-payment-default`;return this.httpClient.post(n,{salesChannelId:e},{headers:t}).then(e=>X.handleResponse(e))}synchronizePaymentMethodConfiguration(e=null){let t=this.getBasicHeaders(),n=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/configuration/synchronize-payment-method-configuration`;return this.httpClient.post(n,{salesChannelId:e},{headers:t}).then(e=>X.handleResponse(e))}installOrderDeliveryStates(){let e=this.getBasicHeaders(),t=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/configuration/install-order-delivery-states`;return this.httpClient.post(t,{},{headers:e}).then(e=>X.handleResponse(e))}};let et=Shopware.Classes.ApiService;var en=class extends et{constructor(e,t,n="postfinancecheckout"){super(e,t,n)}createRefund(e,t,n,a){let i=this.getBasicHeaders(),o=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/refund/create-refund/`;return this.httpClient.post(o,{salesChannelId:e,transactionId:t,quantity:n,lineItemId:a},{headers:i}).then(e=>et.handleResponse(e))}createRefundByAmount(e,t,n){let a=this.getBasicHeaders(),i=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/refund/create-refund-by-amount/`;return this.httpClient.post(i,{salesChannelId:e,transactionId:t,refundableAmount:n},{headers:a}).then(e=>et.handleResponse(e))}createPartialRefund(e,t,n,a){let i=this.getBasicHeaders(),o=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/refund/create-partial-refund/`;return this.httpClient.post(o,{salesChannelId:e,transactionId:t,refundableAmount:n,lineItemId:a},{headers:i}).then(e=>et.handleResponse(e))}};let ea=Shopware.Classes.ApiService;var ei=class extends ea{constructor(e,t,n="postfinancecheckout"){super(e,t,n)}getTransactionData(e,t){let n=this.getBasicHeaders(),a=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/transaction/get-transaction-data/`;return this.httpClient.post(a,{salesChannelId:e,transactionId:t},{headers:n}).then(e=>ea.handleResponse(e))}getInvoiceDocument(e,t){return`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/transaction/get-invoice-document/${e}/${t}`}getPackingSlip(e,t){return`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/transaction/get-packing-slip/${e}/${t}`}};let eo=Shopware.Classes.ApiService;var es=class extends eo{constructor(e,t,n="postfinancecheckout"){super(e,t,n)}createTransactionCompletion(e,t){let n=this.getBasicHeaders(),a=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/transaction-completion/create-transaction-completion/`;return this.httpClient.post(a,{salesChannelId:e,transactionId:t},{headers:n}).then(e=>eo.handleResponse(e))}};let er=Shopware.Classes.ApiService;var ec=class extends er{constructor(e,t,n="postfinancecheckout"){super(e,t,n)}createTransactionVoid(e,t){let n=this.getBasicHeaders(),a=`${Shopware.Context.api.apiPath}/_action/${this.getApiBasePath()}/transaction-void/create-transaction-void/`;return this.httpClient.post(a,{salesChannelId:e,transactionId:t},{headers:n}).then(e=>er.handleResponse(e))}};let{Application:el}=Shopware;el.addServiceProvider("PostFinanceCheckoutConfigurationService",e=>new ee(el.getContainer("init").httpClient,e.loginService)),el.addServiceProvider("PostFinanceCheckoutRefundService",e=>new en(el.getContainer("init").httpClient,e.loginService)),el.addServiceProvider("PostFinanceCheckoutTransactionService",e=>new ei(el.getContainer("init").httpClient,e.loginService)),el.addServiceProvider("PostFinanceCheckoutTransactionCompletionService",e=>new es(el.getContainer("init").httpClient,e.loginService)),el.addServiceProvider("PostFinanceCheckoutTransactionVoidService",e=>new ec(el.getContainer("init").httpClient,e.loginService))}()})(); \ No newline at end of file