Release 7.3.3

This commit is contained in:
andrewrowanwallee
2026-04-29 11:43:34 +02:00
parent dbd0b6808c
commit 93f24a2cac
24 changed files with 163 additions and 88 deletions
+5
View File
@@ -1,3 +1,8 @@
# 7.3.3
- Shopware 6.7.9.0 compatible
- Fix for only showing 25 sales channels in selector
- Fixed bug with discount occasionally blocking payment methods
# 7.3.2 # 7.3.2
- Fix for partial refunds using standard refund option - Fix for partial refunds using standard refund option
- Fixed issue with undefined array key - Fixed issue with undefined array key
+5
View File
@@ -1,3 +1,8 @@
# 7.3.3
- Kompatibel mit Shopware 6.7.9.0
- Problem behoben, dass im Selektor nur 25 Vertriebskanäle angezeigt wurden
- Fehler behoben, der gelegentlich dazu führte, dass Rabatte Zahlungsmethoden blockierten
# 7.3.2 # 7.3.2
- Problem mit Teilrückerstattungen über die Standardrückerstattungsoption behoben - Problem mit Teilrückerstattungen über die Standardrückerstattungsoption behoben
- Problem mit undefiniertem Array-Schlüssel behoben - Problem mit undefiniertem Array-Schlüssel behoben
+4 -4
View File
@@ -13,10 +13,10 @@ Please note that this plugin is for versions 6.5, 6.6 or 6.7. For the 6.4 plugin
## Documentation ## Documentation
- For English documentation click [here](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.2/docs/en/documentation.html) - For English documentation click [here](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.3/docs/en/documentation.html)
- Für die deutsche Dokumentation klicken Sie [hier](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.2/docs/de/documentation.html) - Für die deutsche Dokumentation klicken Sie [hier](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.3/docs/de/documentation.html)
- Pour la documentation Française, cliquez [ici](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.2/docs/fr/documentation.html) - Pour la documentation Française, cliquez [ici](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.3/docs/fr/documentation.html)
- Per la documentazione in tedesco, clicca [qui](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.2/docs/it/documentation.html) - Per la documentazione in tedesco, clicca [qui](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.3/docs/it/documentation.html)
## Installation ## Installation
+1 -1
View File
@@ -59,5 +59,5 @@
"vrpayment/sdk": "^4.0.0" "vrpayment/sdk": "^4.0.0"
}, },
"type": "shopware-platform-plugin", "type": "shopware-platform-plugin",
"version": "7.3.2" "version": "7.3.3"
} }
+1 -1
View File
@@ -23,7 +23,7 @@
</a> </a>
</li> </li>
<li> <li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.2/"> <a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.3/">
Source Source
</a> </a>
</li> </li>
+1 -1
View File
@@ -23,7 +23,7 @@
</a> </a>
</li> </li>
<li> <li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.2/"> <a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.3/">
Source Source
</a> </a>
</li> </li>
+1 -1
View File
@@ -23,7 +23,7 @@
</a> </a>
</li> </li>
<li> <li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.2/"> <a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.3/">
Source Source
</a> </a>
</li> </li>
+1 -1
View File
@@ -23,7 +23,7 @@
</a> </a>
</li> </li>
<li> <li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.2/"> <a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.3/">
Source Source
</a> </a>
</li> </li>
@@ -624,11 +624,14 @@ class TransactionService
throw new \Exception('Space settings not configured'); throw new \Exception('Space settings not configured');
} }
$language = $this->localeCodeProvider->getLocaleCodeFromContext($salesChannelContext->getContext());
$transactionPayload = (new TransactionCreate()) $transactionPayload = (new TransactionCreate())
->setBillingAddress($billingAddress) ->setBillingAddress($billingAddress)
->setShippingAddress($shippingAddress) ->setShippingAddress($shippingAddress)
->setLineItems($lineItems) ->setLineItems($lineItems)
->setCurrency($currency) ->setCurrency($currency)
->setLanguage($language)
->setSpaceViewId($settings->getSpaceViewId()) ->setSpaceViewId($settings->getSpaceViewId())
->setAutoConfirmationEnabled(false) ->setAutoConfirmationEnabled(false)
->setChargeRetryEnabled(false) ->setChargeRetryEnabled(false)
@@ -668,7 +671,10 @@ class TransactionService
$currency = $salesChannelContext->getCurrency()->getIsoCode(); $currency = $salesChannelContext->getCurrency()->getIsoCode();
$language = $this->localeCodeProvider->getLocaleCodeFromContext($salesChannelContext->getContext());
$pendingTransaction->setCurrency($currency); $pendingTransaction->setCurrency($currency);
$pendingTransaction->setLanguage($language);
$billingAddress = $this->buildAddress($salesChannelContext, $salesChannelContext->getCustomer()->getActiveBillingAddress()); $billingAddress = $this->buildAddress($salesChannelContext, $salesChannelContext->getCustomer()->getActiveBillingAddress());
$shippingAddress = $this->buildAddress($salesChannelContext, $salesChannelContext->getCustomer()->getActiveShippingAddress()); $shippingAddress = $this->buildAddress($salesChannelContext, $salesChannelContext->getCustomer()->getActiveShippingAddress());
@@ -807,20 +813,26 @@ class TransactionService
{ {
$lineItem = new LineItemCreate(); $lineItem = new LineItemCreate();
$roundedPrice = $this->round($productData->getPrice()->getUnitPrice()); $price = $productData->getPrice();
$unit = $price->getUnitPrice();
// Expects discounts as separate items, avoid negative prices
if ($unit < 0) {
return $this->mapDiscountLineItem($productData);
}
if ($productData instanceof LineItem) { if ($productData instanceof LineItem) {
$lineItem->setName($productData->getLabel()); $lineItem->setName($productData->getLabel());
$lineItem->setUniqueId($productData->getId()); $lineItem->setUniqueId($productData->getId());
$lineItem->setSku($productData->getReferencedId() ?? $productData->getId()); $lineItem->setSku($productData->getReferencedId() ?? $productData->getId());
$lineItem->setQuantity($productData->getQuantity()); $lineItem->setQuantity($productData->getQuantity());
$lineItem->setAmountIncludingTax($roundedPrice); $lineItem->setAmountIncludingTax($this->round($unit));
} elseif ($productData instanceof OrderLineItemEntity) { } elseif ($productData instanceof OrderLineItemEntity) {
$lineItem->setName($productData->getLabel()); $lineItem->setName($productData->getLabel());
$lineItem->setUniqueId($productData->getId()); $lineItem->setUniqueId($productData->getId());
$lineItem->setSku($productData->getProductId() ?? $productData->getIdentifier() ?? $productData->getId()); $lineItem->setSku($productData->getProductId() ?? $productData->getIdentifier() ?? $productData->getId());
$lineItem->setQuantity($productData->getQuantity()); $lineItem->setQuantity($productData->getQuantity());
$lineItem->setAmountIncludingTax($roundedPrice); $lineItem->setAmountIncludingTax($this->round($unit));
} else { } else {
throw new \InvalidArgumentException('Unsupported line item type: ' . get_class($productData)); throw new \InvalidArgumentException('Unsupported line item type: ' . get_class($productData));
} }
@@ -991,4 +1003,29 @@ class TransactionService
// Store in session for Storefront. // Store in session for Storefront.
$_SESSION['transactionId'] = $transactionId; $_SESSION['transactionId'] = $transactionId;
} }
/**
* Creates a discount line item for negative-priced cart entries.
*
* @param $productData
* @return LineItemCreate
*
*/
private function mapDiscountLineItem($productData): LineItemCreate
{
$price = $productData->getPrice();
$lineItem = new LineItemCreate();
$amount = abs($price->getTotalPrice());
$lineItem->setName($productData->getLabel() ?: 'Discount');
$lineItem->setUniqueId('discount-' . $productData->getId());
$lineItem->setSku('discount');
$lineItem->setQuantity(1);
$lineItem->setAmountIncludingTax($this->round($amount));
$lineItem->setType(LineItemType::DISCOUNT);
return $lineItem;
}
} }
@@ -137,7 +137,7 @@ class VRPaymentPaymentHandler extends AbstractPaymentHandler
} }
$contextToken = $this->getContextToken($request); $contextToken = $this->getContextToken($request);
$parameters = new SalesChannelContextServiceParameters($salesChannelContextId, $contextToken, originalContext: $context); $parameters = new SalesChannelContextServiceParameters($salesChannelContextId, $contextToken, languageId: $context->getLanguageId(), originalContext: $context);
$salesChannelContext = $this->salesChannelContextService->get($parameters); $salesChannelContext = $this->salesChannelContextService->get($parameters);
$redirectUrl = $transaction->getReturnUrl(); $redirectUrl = $transaction->getReturnUrl();
@@ -12,6 +12,7 @@ use VRPaymentPayment\Core\Api\Transaction\Service\TransactionService;
use VRPaymentPayment\Core\Settings\Options\Integration; use VRPaymentPayment\Core\Settings\Options\Integration;
use VRPaymentPayment\Core\Settings\Service\SettingsService; use VRPaymentPayment\Core\Settings\Service\SettingsService;
use VRPaymentPayment\Core\Checkout\Struct\PaymentConfigStruct; use VRPaymentPayment\Core\Checkout\Struct\PaymentConfigStruct;
use VRPaymentPayment\Core\Util\LocaleCodeProvider;
use VRPayment\Sdk\Model\TransactionState; use VRPayment\Sdk\Model\TransactionState;
/** /**
@@ -44,22 +45,30 @@ class PaymentIntegrationService
*/ */
private RouterInterface $router; private RouterInterface $router;
/**
* @var LocaleCodeProvider
*/
private LocaleCodeProvider $localeCodeProvider;
/** /**
* @param TransactionService $transactionService * @param TransactionService $transactionService
* @param SettingsService $settingsService * @param SettingsService $settingsService
* @param TransactionManagementService $transactionManagementService * @param TransactionManagementService $transactionManagementService
* @param RouterInterface $router * @param RouterInterface $router
* @param LocaleCodeProvider $localeCodeProvider
*/ */
public function __construct( public function __construct(
TransactionService $transactionService, TransactionService $transactionService,
SettingsService $settingsService, SettingsService $settingsService,
TransactionManagementService $transactionManagementService, TransactionManagementService $transactionManagementService,
RouterInterface $router RouterInterface $router,
LocaleCodeProvider $localeCodeProvider
) { ) {
$this->transactionService = $transactionService; $this->transactionService = $transactionService;
$this->settingsService = $settingsService; $this->settingsService = $settingsService;
$this->transactionManagementService = $transactionManagementService; $this->transactionManagementService = $transactionManagementService;
$this->router = $router; $this->router = $router;
$this->localeCodeProvider = $localeCodeProvider;
} }
/** /**
@@ -82,7 +91,9 @@ class PaymentIntegrationService
$transactionId $transactionId
); );
$javascriptUrl = $this->getTransactionJavaScriptUrl($settings, $transactionId); $localeCode = $this->localeCodeProvider->getLocaleCodeFromContext($salesChannelContext->getContext());
$paymentPageLocale = $this->localeCodeProvider->mapToPaymentPageLocale($localeCode);
$javascriptUrl = $this->getTransactionJavaScriptUrl($settings, $transactionId, $paymentPageLocale);
$possiblePaymentMethods = $settings->getApiClient() $possiblePaymentMethods = $settings->getApiClient()
->getTransactionService() ->getTransactionService()
@@ -161,9 +172,10 @@ class PaymentIntegrationService
* *
* @param mixed $settings The plugin settings. * @param mixed $settings The plugin settings.
* @param int $transactionId The transaction ID. * @param int $transactionId The transaction ID.
* @param string $paymentPageLocale The payment page locale.
* @return string The absolute URL to the JavaScript component. * @return string The absolute URL to the JavaScript component.
*/ */
private function getTransactionJavaScriptUrl($settings, int $transactionId): string private function getTransactionJavaScriptUrl($settings, int $transactionId, string $paymentPageLocale = ''): string
{ {
$javascriptUrl = ''; $javascriptUrl = '';
switch ($settings->getIntegration()) { switch ($settings->getIntegration()) {
@@ -176,6 +188,12 @@ class PaymentIntegrationService
->javascriptUrl($settings->getSpaceId(), $transactionId); ->javascriptUrl($settings->getSpaceId(), $transactionId);
break; break;
} }
if ($javascriptUrl && $paymentPageLocale) {
$separator = str_contains($javascriptUrl, '?') ? '&' : '?';
$javascriptUrl .= $separator . 'language=' . $paymentPageLocale;
}
return $javascriptUrl; return $javascriptUrl;
} }
@@ -5,12 +5,8 @@ declare(strict_types=1);
namespace VRPaymentPayment\Core\Checkout\Service; namespace VRPaymentPayment\Core\Checkout\Service;
use Shopware\Core\Checkout\Payment\PaymentMethodCollection; use Shopware\Core\Checkout\Payment\PaymentMethodCollection;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\System\SalesChannel\SalesChannelContext; use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Core\Checkout\Cart\SalesChannel\CartService; use Shopware\Core\Checkout\Cart\SalesChannel\CartService;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
use VRPaymentPayment\Core\Api\PaymentMethodConfiguration\Service\PaymentMethodConfigurationService; use VRPaymentPayment\Core\Api\PaymentMethodConfiguration\Service\PaymentMethodConfigurationService;
use VRPaymentPayment\Core\Api\Transaction\Service\TransactionService; use VRPaymentPayment\Core\Api\Transaction\Service\TransactionService;
use VRPaymentPayment\Core\Checkout\PaymentHandler\VRPaymentPaymentHandler; use VRPaymentPayment\Core\Checkout\PaymentHandler\VRPaymentPaymentHandler;
@@ -50,12 +46,6 @@ class PaymentMethodFilterService
*/ */
private PaymentMethodUtil $paymentMethodUtil; private PaymentMethodUtil $paymentMethodUtil;
/**
* @var EntityRepository
* Repository for Shopware payment methods.
*/
private EntityRepository $paymentMethodRepository;
/** /**
* @var LoggerInterface * @var LoggerInterface
*/ */
@@ -77,15 +67,14 @@ class PaymentMethodFilterService
* @param TransactionService $transactionService * @param TransactionService $transactionService
* @param PaymentMethodConfigurationService $paymentMethodConfigurationService * @param PaymentMethodConfigurationService $paymentMethodConfigurationService
* @param PaymentMethodUtil $paymentMethodUtil * @param PaymentMethodUtil $paymentMethodUtil
* @param EntityRepository $paymentMethodRepository
* @param TransactionManagementService $transactionManagementService * @param TransactionManagementService $transactionManagementService
* @param CartService $cartService
*/ */
public function __construct( public function __construct(
SettingsService $settingsService, SettingsService $settingsService,
TransactionService $transactionService, TransactionService $transactionService,
PaymentMethodConfigurationService $paymentMethodConfigurationService, PaymentMethodConfigurationService $paymentMethodConfigurationService,
PaymentMethodUtil $paymentMethodUtil, PaymentMethodUtil $paymentMethodUtil,
EntityRepository $paymentMethodRepository,
TransactionManagementService $transactionManagementService, TransactionManagementService $transactionManagementService,
CartService $cartService CartService $cartService
) { ) {
@@ -93,7 +82,6 @@ class PaymentMethodFilterService
$this->transactionService = $transactionService; $this->transactionService = $transactionService;
$this->paymentMethodConfigurationService = $paymentMethodConfigurationService; $this->paymentMethodConfigurationService = $paymentMethodConfigurationService;
$this->paymentMethodUtil = $paymentMethodUtil; $this->paymentMethodUtil = $paymentMethodUtil;
$this->paymentMethodRepository = $paymentMethodRepository;
$this->transactionManagementService = $transactionManagementService; $this->transactionManagementService = $transactionManagementService;
$this->cartService = $cartService; $this->cartService = $cartService;
} }
@@ -208,8 +196,12 @@ class PaymentMethodFilterService
/** /**
* Builds a filtered PaymentMethodCollection based on allowed IDs. * Builds a filtered PaymentMethodCollection based on allowed IDs.
* *
* @param PaymentMethodCollection $paymentMethodCollection Original collection. * Filters the original collection (which already has Shopware's availability rules applied)
* @param string[] $allowedIds List of allowed configuration IDs. * to only include WhitelabelMachineName methods that are also allowed by the API.
* Non-WhitelabelMachineName methods are kept as-is.
*
* @param PaymentMethodCollection $paymentMethodCollection Original collection (already rule-filtered by Shopware).
* @param string[] $allowedIds List of allowed configuration IDs from the WhitelabelMachineName API.
* @param int $spaceId WhitelabelMachineName space ID. * @param int $spaceId WhitelabelMachineName space ID.
* @param SalesChannelContext $salesChannelContext The context. * @param SalesChannelContext $salesChannelContext The context.
* @return PaymentMethodCollection The final collection. * @return PaymentMethodCollection The final collection.
@@ -220,21 +212,12 @@ class PaymentMethodFilterService
int $spaceId, int $spaceId,
SalesChannelContext $salesChannelContext SalesChannelContext $salesChannelContext
): PaymentMethodCollection { ): PaymentMethodCollection {
$paymentIds = [];
// Extract non-WhitelabelMachineName payment methods first.
foreach ($paymentMethodCollection as $paymentMethodCollectionItem) {
$isVRPaymentPM = VRPaymentPaymentHandler::class === $paymentMethodCollectionItem->getHandlerIdentifier();
if (!$isVRPaymentPM) {
$paymentIds[] = $paymentMethodCollectionItem->getId();
}
}
$allowedWLMethods = [];
// Fetch all WhitelabelMachineName payment method configurations for the space. // Fetch all WhitelabelMachineName payment method configurations for the space.
$paymentMethodConfigurations = $this->paymentMethodConfigurationService $paymentMethodConfigurations = $this->paymentMethodConfigurationService
->getAllPaymentMethodConfigurations($spaceId, $salesChannelContext->getContext()); ->getAllPaymentMethodConfigurations($spaceId, $salesChannelContext->getContext());
// Check each configuration against the list of allowed IDs from WhitelabelMachineName API. // Build a map of Shopware payment method ID => configuration for methods allowed by the API.
$allowedWLConfigByPmId = [];
foreach ($paymentMethodConfigurations as $paymentMethodConfiguration) { foreach ($paymentMethodConfigurations as $paymentMethodConfiguration) {
if ($paymentMethodConfiguration->getPaymentMethod() === null) { if ($paymentMethodConfiguration->getPaymentMethod() === null) {
continue; continue;
@@ -247,38 +230,30 @@ class PaymentMethodFilterService
$paymentMethodConfiguration->getSpaceId() === $spaceId $paymentMethodConfiguration->getSpaceId() === $spaceId
&& \in_array($pmConfigId, $allowedIds, true) && \in_array($pmConfigId, $allowedIds, true)
) { ) {
$allowedWLMethods[] = $pmId; $allowedWLConfigByPmId[$pmId] = $paymentMethodConfiguration;
} }
} }
// Combine non-WhitelabelMachineName and allowed WhitelabelMachineName payment methods. // Filter the original collection to preserve Shopware's availability rule filtering.
$allPaymentIds = array_unique(array_merge($paymentIds, $allowedWLMethods)); // Non-WLM methods pass through unchanged; WLM methods are kept only if allowed by the API.
$collection = new PaymentMethodCollection(); $collection = new PaymentMethodCollection();
foreach ($paymentMethodCollection as $method) {
$isVRPaymentPM = VRPaymentPaymentHandler::class === $method->getHandlerIdentifier();
if (!empty($allPaymentIds)) { if (!$isVRPaymentPM) {
$criteria = new Criteria($allPaymentIds); $collection->add($method);
$criteria->addFilter(new EqualsFilter('active', true)); continue;
$criteria->addFilter(
new EqualsFilter('salesChannels.id', $salesChannelContext->getSalesChannelId())
);
$criteria->addSorting(new FieldSorting('position', FieldSorting::ASCENDING));
$criteria->addAssociation('media');
// Re-fetch the entities to ensure we have valid objects with all associations.
$result = $this->paymentMethodRepository->search($criteria, $salesChannelContext->getContext());
/** @var \Shopware\Core\Checkout\Payment\PaymentMethodEntity $method */
foreach ($result->getEntities() as $method) {
if (!$collection->has((string)$method->getId())) {
// Attach the configuration to the payment method as an extension for Twig access.
foreach ($paymentMethodConfigurations as $paymentMethodConfiguration) {
if ($paymentMethodConfiguration->getPaymentMethodId() === $method->getId()) {
$method->addExtension('vrpayment_config', $paymentMethodConfiguration);
break;
}
} }
if (isset($allowedWLConfigByPmId[$method->getId()])) {
$method->addExtension('vrpayment_config', $allowedWLConfigByPmId[$method->getId()]);
$collection->add($method); $collection->add($method);
} }
} }
}
$collection->sort(function ($a, $b) {
return ($a->getPosition() ?? 0) <=> ($b->getPosition() ?? 0);
});
return $collection; return $collection;
} }
+1 -1
View File
@@ -26,7 +26,7 @@ class Analytics {
self::SHOP_SYSTEM => 'shopware', self::SHOP_SYSTEM => 'shopware',
self::SHOP_SYSTEM_VERSION => '6', self::SHOP_SYSTEM_VERSION => '6',
self::SHOP_SYSTEM_AND_VERSION => 'shopware-6', self::SHOP_SYSTEM_AND_VERSION => 'shopware-6',
self::PLUGIN_SYSTEM_VERSION => '7.3.2', self::PLUGIN_SYSTEM_VERSION => '7.3.3',
]; ];
} }
+20
View File
@@ -91,6 +91,26 @@ class LocaleCodeProvider {
return $language->getLocale() ? $language->getLocale()->getCode() : $defaultLocale; return $language->getLocale() ? $language->getLocale()->getCode() : $defaultLocale;
} }
/**
* Maps a locale code to a VRPayment-supported payment page locale by matching the language prefix.
* E.g. de-CH -> de-DE, fr-CH -> fr-FR, en-US -> en-GB, it-CH -> it-IT.
*
* @param string $localeCode
* @return string
*/
public function mapToPaymentPageLocale(string $localeCode): string
{
$supportedLocales = [
'de' => self::LOCALE_GERMANY_GERMAN,
'fr' => self::LOCALE_FRANCE_FRENCH,
'it' => self::LOCALE_ITALY_ITALIAN,
'en' => self::LOCALE_GREAT_BRITAIN_ENGLISH,
];
$languagePrefix = substr($localeCode, 0, 2);
return $supportedLocales[$languagePrefix] ?? self::LOCALE_GREAT_BRITAIN_ENGLISH;
}
/** /**
* @param \Shopware\Core\Framework\Context $context * @param \Shopware\Core\Framework\Context $context
@@ -35,6 +35,7 @@
{% block vrpayment_settings_content_card_channel_config %} {% block vrpayment_settings_content_card_channel_config %}
<sw-sales-channel-config v-model:value="config" <sw-sales-channel-config v-model:value="config"
v-model:selectedSalesChannelId="selectedSalesChannelId"
ref="configComponent" ref="configComponent"
:domain="CONFIG_DOMAIN"> :domain="CONFIG_DOMAIN">
@@ -45,14 +46,10 @@
<mt-card title="Sales Channel Switch"> <mt-card title="Sales Channel Switch">
{% block vrpayment_settings_content_card_channel_config_sales_channel_card_title %} {% block vrpayment_settings_content_card_channel_config_sales_channel_card_title %}
<sw-single-select <sw-sales-channel-switch
:value="selectedSalesChannelId" ref="channelSwitch"
:options="salesChannel.map(sc => ({ id: sc.id, name: sc.translated.name }))" @change-sales-channel-id="onSalesChannelSwitchChange($event, onInput)">
labelProperty="name" </sw-sales-channel-switch>
valueProperty="id"
:isLoading="isLoading"
@update:value="onInput"
/>
{% endblock %} {% endblock %}
{% block vrpayment_settings_content_card_channel_config_sales_channel_card_footer %} {% block vrpayment_settings_content_card_channel_config_sales_channel_card_footer %}
<template #footer> <template #footer>
@@ -41,6 +41,7 @@ Component.register('vrpayment-settings', {
isSetDefaultPaymentSuccessful: false, isSetDefaultPaymentSuccessful: false,
isSettingDefaultPaymentMethods: false, isSettingDefaultPaymentMethods: false,
selectedSalesChannelId: null,
configIntegrationDefaultValue: 'payment_page', configIntegrationDefaultValue: 'payment_page',
configEmailEnabledDefaultValue: true, configEmailEnabledDefaultValue: true,
@@ -70,7 +71,7 @@ Component.register('vrpayment-settings', {
config: { config: {
handler(configData) { handler(configData) {
const defaultConfig = (this.$refs.configComponent.allConfigs || {}).null || {}; const defaultConfig = (this.$refs.configComponent.allConfigs || {}).null || {};
const salesChannelId = this.$refs.configComponent.selectedSalesChannelId; const salesChannelId = this.selectedSalesChannelId;
if (salesChannelId === null) { if (salesChannelId === null) {
this.applicationKeyFilled = !!this.config[this.CONFIG_APPLICATION_KEY]; this.applicationKeyFilled = !!this.config[this.CONFIG_APPLICATION_KEY];
@@ -137,6 +138,16 @@ Component.register('vrpayment-settings', {
this.$emit('update:value', configData); this.$emit('update:value', configData);
}, },
deep: true deep: true
},
selectedSalesChannelId: {
handler(newValue) {
this.$nextTick(() => {
if (this.$refs.channelSwitch) {
this.$refs.channelSwitch.salesChannelId = newValue || '';
}
});
}
} }
}, },
@@ -198,7 +209,7 @@ Component.register('vrpayment-settings', {
}, },
async validateHeadlessIntegration() { async validateHeadlessIntegration() {
const salesChannelId = this.$refs.configComponent.selectedSalesChannelId; const salesChannelId = this.selectedSalesChannelId;
const currentIntegration = this.config[this.CONFIG_INTEGRATION]; const currentIntegration = this.config[this.CONFIG_INTEGRATION];
// If integration is 'payment_page', it is always valid. // If integration is 'payment_page', it is always valid.
@@ -270,7 +281,7 @@ Component.register('vrpayment-settings', {
return false; return false;
} }
this.VRPaymentConfigurationService.registerWebHooks(this.$refs.configComponent.selectedSalesChannelId) this.VRPaymentConfigurationService.registerWebHooks(this.selectedSalesChannelId)
.then(() => { .then(() => {
this.createNotificationSuccess({ this.createNotificationSuccess({
title: this.$tc('vrpayment-settings.settingForm.titleSuccess'), title: this.$tc('vrpayment-settings.settingForm.titleSuccess'),
@@ -291,7 +302,7 @@ Component.register('vrpayment-settings', {
return false; return false;
} }
this.VRPaymentConfigurationService.synchronizePaymentMethodConfiguration(this.$refs.configComponent.selectedSalesChannelId) this.VRPaymentConfigurationService.synchronizePaymentMethodConfiguration(this.selectedSalesChannelId)
.then(() => { .then(() => {
this.createNotificationSuccess({ this.createNotificationSuccess({
title: this.$tc('vrpayment-settings.settingForm.titleSuccess'), title: this.$tc('vrpayment-settings.settingForm.titleSuccess'),
@@ -328,7 +339,7 @@ Component.register('vrpayment-settings', {
onSetPaymentMethodDefault() { onSetPaymentMethodDefault() {
this.isSettingDefaultPaymentMethods = true; this.isSettingDefaultPaymentMethods = true;
this.VRPaymentConfigurationService.setVRPaymentAsSalesChannelPaymentDefault( this.VRPaymentConfigurationService.setVRPaymentAsSalesChannelPaymentDefault(
this.$refs.configComponent.selectedSalesChannelId this.selectedSalesChannelId
).then(() => { ).then(() => {
this.isSettingDefaultPaymentMethods = false; this.isSettingDefaultPaymentMethods = false;
this.isSetDefaultPaymentSuccessful = true; this.isSetDefaultPaymentSuccessful = true;
@@ -385,6 +396,13 @@ Component.register('vrpayment-settings', {
}); });
this.isTesting = false; this.isTesting = false;
}); });
},
onSalesChannelSwitchChange(id, onInput) {
this.selectedSalesChannelId = id;
if (typeof onInput === 'function') {
onInput(id);
}
} }
} }
}); });
File diff suppressed because one or more lines are too long
@@ -17,7 +17,6 @@
<argument type="service" id="VRPaymentPayment\Core\Api\Transaction\Service\TransactionService"/> <argument type="service" id="VRPaymentPayment\Core\Api\Transaction\Service\TransactionService"/>
<argument type="service" id="VRPaymentPayment\Core\Api\PaymentMethodConfiguration\Service\PaymentMethodConfigurationService"/> <argument type="service" id="VRPaymentPayment\Core\Api\PaymentMethodConfiguration\Service\PaymentMethodConfigurationService"/>
<argument type="service" id="VRPaymentPayment\Core\Util\PaymentMethodUtil"/> <argument type="service" id="VRPaymentPayment\Core\Util\PaymentMethodUtil"/>
<argument type="service" id="payment_method.repository"/>
<argument type="service" id="VRPaymentPayment\Core\Checkout\Service\TransactionManagementService"/> <argument type="service" id="VRPaymentPayment\Core\Checkout\Service\TransactionManagementService"/>
<argument type="service" id="Shopware\Core\Checkout\Cart\SalesChannel\CartService"/> <argument type="service" id="Shopware\Core\Checkout\Cart\SalesChannel\CartService"/>
<call method="setLogger"> <call method="setLogger">
@@ -30,6 +29,7 @@
<argument type="service" id="VRPaymentPayment\Core\Settings\Service\SettingsService"/> <argument type="service" id="VRPaymentPayment\Core\Settings\Service\SettingsService"/>
<argument type="service" id="VRPaymentPayment\Core\Checkout\Service\TransactionManagementService"/> <argument type="service" id="VRPaymentPayment\Core\Checkout\Service\TransactionManagementService"/>
<argument type="service" id="router"/> <argument type="service" id="router"/>
<argument type="service" id="VRPaymentPayment\Core\Util\LocaleCodeProvider"/>
</service> </service>
<service id="VRPaymentPayment\Core\Checkout\Service\CartRecoveryService"> <service id="VRPaymentPayment\Core\Checkout\Service\CartRecoveryService">
@@ -7,7 +7,7 @@
], ],
"dynamic": [], "dynamic": [],
"js": [ "js": [
"/bundles/vrpaymentpayment/administration/assets/v-r-payment-payment-D_mm2NL2.js" "/bundles/vrpaymentpayment/administration/assets/v-r-payment-payment-CPfpiGQp.js"
], ],
"legacy": false, "legacy": false,
"preload": [] "preload": []
@@ -1,6 +1,6 @@
{ {
"main.js": { "main.js": {
"file": "assets/v-r-payment-payment-D_mm2NL2.js", "file": "assets/v-r-payment-payment-CPfpiGQp.js",
"name": "v-r-payment-payment", "name": "v-r-payment-payment",
"src": "main.js", "src": "main.js",
"isEntry": true, "isEntry": true,
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long