diff --git a/.github/workflows/ci_pipe.yml b/.github/workflows/ci_pipe.yml index f70171a1e..e24d4af56 100644 --- a/.github/workflows/ci_pipe.yml +++ b/.github/workflows/ci_pipe.yml @@ -340,6 +340,8 @@ jobs: fail-fast: false matrix: include: + - shopware: '6.6.1.0' + php: '8.2' - shopware: '6.5.8.8' php: '8.2' - shopware: '6.5.6.1' diff --git a/.github/workflows/nightly_pipe.yml b/.github/workflows/nightly_pipe.yml index 81b798699..938f22886 100644 --- a/.github/workflows/nightly_pipe.yml +++ b/.github/workflows/nightly_pipe.yml @@ -334,6 +334,8 @@ jobs: fail-fast: false matrix: include: + - shopware: '6.6.1.0' + php: '8.2' - shopware: '6.5.8.8' php: '8.2' - shopware: '6.5.6.1' diff --git a/.github/workflows/pr_pipe.yml b/.github/workflows/pr_pipe.yml index 443752682..968cc6c57 100644 --- a/.github/workflows/pr_pipe.yml +++ b/.github/workflows/pr_pipe.yml @@ -333,6 +333,8 @@ jobs: fail-fast: false matrix: include: + - shopware: '6.6.1.0' + php: '8.2' - shopware: '6.5.8.8' php: '8.2' - shopware: '6.5.5.2' diff --git a/composer.lock b/composer.lock index 7f834bfea..01cb399f7 100644 --- a/composer.lock +++ b/composer.lock @@ -63,16 +63,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.301.6", + "version": "3.301.9", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "18c0ebd71d3071304f1ea02aa9af75f95863177a" + "reference": "23eda9eeb6c44a3ed6a12951b61020dc6048f7f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/18c0ebd71d3071304f1ea02aa9af75f95863177a", - "reference": "18c0ebd71d3071304f1ea02aa9af75f95863177a", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/23eda9eeb6c44a3ed6a12951b61020dc6048f7f5", + "reference": "23eda9eeb6c44a3ed6a12951b61020dc6048f7f5", "shasum": "" }, "require": { @@ -152,9 +152,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.301.6" + "source": "https://github.com/aws/aws-sdk-php/tree/3.301.9" }, - "time": "2024-03-22T18:05:21+00:00" + "time": "2024-03-27T18:26:04+00:00" }, { "name": "boxblinkracer/phpunuhi", @@ -5751,16 +5751,16 @@ }, { "name": "php-http/discovery", - "version": "1.19.2", + "version": "1.19.3", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb" + "reference": "7fbed2f92518827eb0ece6bf869f8c6b054d5730" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb", - "reference": "61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb", + "url": "https://api.github.com/repos/php-http/discovery/zipball/7fbed2f92518827eb0ece6bf869f8c6b054d5730", + "reference": "7fbed2f92518827eb0ece6bf869f8c6b054d5730", "shasum": "" }, "require": { @@ -5769,6 +5769,7 @@ }, "conflict": { "nyholm/psr7": "<1.0", + "sebastian/comparator": ">=5.0", "zendframework/zend-diactoros": "*" }, "provide": { @@ -5784,7 +5785,7 @@ "php-http/httplug": "^1.0 || ^2.0", "php-http/message-factory": "^1.0", "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", - "symfony/phpunit-bridge": "^6.2" + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" }, "type": "composer-plugin", "extra": { @@ -5823,9 +5824,9 @@ ], "support": { "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.19.2" + "source": "https://github.com/php-http/discovery/tree/1.19.3" }, - "time": "2023-11-30T16:49:05+00:00" + "time": "2024-03-28T07:38:36+00:00" }, { "name": "php-http/multipart-stream-builder", diff --git a/polyfill/Shopware/Core/Checkout/Payment/Exception/PaymentProcessException.php b/polyfill/Shopware/Core/Checkout/Payment/Exception/PaymentProcessException.php new file mode 100644 index 000000000..42b8aff71 --- /dev/null +++ b/polyfill/Shopware/Core/Checkout/Payment/Exception/PaymentProcessException.php @@ -0,0 +1,36 @@ +orderTransactionId = $orderTransactionId; + + parent::__construct($message, $parameters, $e); + } + + public function getStatusCode(): int + { + return Response::HTTP_BAD_REQUEST; + } + + public function getOrderTransactionId(): string + { + return $this->orderTransactionId; + } +} diff --git a/polyfill/Shopware/Core/Checkout/Payment/PaymentException.php b/polyfill/Shopware/Core/Checkout/Payment/PaymentException.php new file mode 100644 index 000000000..566a68708 --- /dev/null +++ b/polyfill/Shopware/Core/Checkout/Payment/PaymentException.php @@ -0,0 +1,25 @@ +load('services.xml'); - - # now load our base compatibility services - # that already wrap our functions for different shopware versions - $loader->load('compatibility/base.xml'); - # load Flow Builder $loader->load('compatibility/flowbuilder/all_versions.xml'); @@ -56,25 +48,6 @@ public function loadServices(): void $loader->load('compatibility/flowbuilder/6.4.6.0.xml'); } - # load other data - if ($versionCompare->gte('6.4')) { - $loader->load('compatibility/services_6.4.xml'); - } elseif ($versionCompare->gte('6.3.5.0')) { - $loader->load('compatibility/services_6.3.5.0.xml'); - } - - if ($versionCompare->gte('6.5')) { - $loader->load('compatibility/snippets_6.5.xml'); - } else { - $loader->load('compatibility/snippets.xml'); - } - - if ($versionCompare->gte('6.5')) { - $loader->load('compatibility/controller_6.5.xml'); - } else { - $loader->load('compatibility/controller.xml'); - } - $composerDevReqsInstalled = file_exists(__DIR__ . '/../../vendor/bin/phpunit'); @@ -126,22 +99,4 @@ public function prepareStorefrontBuild(): void # copy($file, $target); } } - - /** - * @param string $pluginPath - * @return string - */ - public function getRoutesPath(string $pluginPath): string - { - /** @var string $version */ - $version = $this->container->getParameter('kernel.shopware_version'); - - $versionCompare = new VersionCompare($version); - - if ($versionCompare->gte('6.5')) { - return $pluginPath . '/Resources/config/compatibility/routes/sw65'; - } - - return $pluginPath . '/Resources/config/compatibility/routes/sw6'; - } } diff --git a/src/Compatibility/Storefront/Route/PaymentMethodRoute/RemovePaymentMethodRoute63.php b/src/Compatibility/Storefront/Route/PaymentMethodRoute/RemovePaymentMethodRoute63.php deleted file mode 100644 index 0a4112bfb..000000000 --- a/src/Compatibility/Storefront/Route/PaymentMethodRoute/RemovePaymentMethodRoute63.php +++ /dev/null @@ -1,56 +0,0 @@ - $paymentMethodRemovers - */ - public function __construct(AbstractPaymentMethodRoute $corePaymentMethodRoute, \Traversable $paymentMethodRemovers) - { - $this->corePaymentMethodRoute = $corePaymentMethodRoute; - $this->paymentMethodRemovers = iterator_to_array($paymentMethodRemovers); - } - - /** - * @return AbstractPaymentMethodRoute - */ - public function getDecorated(): AbstractPaymentMethodRoute - { - return $this->corePaymentMethodRoute; - } - - /** - * @param Request $request - * @param SalesChannelContext $context - * @return PaymentMethodRouteResponse - */ - public function load(Request $request, SalesChannelContext $context): PaymentMethodRouteResponse - { - $originalData = $this->corePaymentMethodRoute->load($request, $context); - - foreach ($this->paymentMethodRemovers as $paymentMethodRemover) { - $originalData = $paymentMethodRemover->removePaymentMethods($originalData, $context); - } - - return $originalData; - } -} diff --git a/src/Components/Subscription/DAL/Currency/CurrencyExtension.php b/src/Components/Subscription/DAL/Currency/CurrencyExtension.php new file mode 100644 index 000000000..889219c04 --- /dev/null +++ b/src/Components/Subscription/DAL/Currency/CurrencyExtension.php @@ -0,0 +1,24 @@ +add((new OneToManyAssociationField('subscriptions', SubscriptionDefinition::class, 'currency_id'))->addFlags(new CascadeDelete())); + } +} diff --git a/src/Components/Subscription/DAL/Repository/SubscriptionRepository.php b/src/Components/Subscription/DAL/Repository/SubscriptionRepository.php index d233a3615..e8ad06a4d 100644 --- a/src/Components/Subscription/DAL/Repository/SubscriptionRepository.php +++ b/src/Components/Subscription/DAL/Repository/SubscriptionRepository.php @@ -11,6 +11,7 @@ use Kiener\MolliePayments\Components\Subscription\Exception\SubscriptionNotFoundException; use Shopware\Core\Framework\Context; use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository; +use Shopware\Core\Framework\DataAbstractionLayer\Pricing\CashRoundingConfig; use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; use Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearchResult; use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter; @@ -61,6 +62,7 @@ public function findById(string $id, Context $context): SubscriptionEntity $criteria = new Criteria([$id]); $criteria->addAssociation('customer'); $criteria->addAssociation('historyEntries'); + $criteria->addAssociation('currency'); $result = $this->repoSubscriptions->search($criteria, $context); @@ -80,6 +82,7 @@ public function findById(string $id, Context $context): SubscriptionEntity public function findByMandateId(string $customerId, string $mandateId, Context $context): SubscriptionCollection { $criteria = new Criteria(); + $criteria->addAssociation('currency'); $criteria->addFilter(new EqualsFilter('customerId', $customerId)); $criteria->addFilter(new EqualsFilter('mandateId', $mandateId)); @@ -111,6 +114,7 @@ public function findByCustomer(string $swCustomerId, bool $includedPending, Cont $criteria = new Criteria(); $criteria->addAssociation('customer'); $criteria->addAssociation('historyEntries'); + $criteria->addAssociation('currency'); $criteria->addFilter(new EqualsFilter('customerId', $swCustomerId)); if (!$includedPending) { @@ -137,7 +141,7 @@ public function findByReminderRangeReached(string $salesChannelId, Context $cont $criteria = new Criteria(); $criteria->addAssociation('customer'); - + $criteria->addAssociation('currency'); # subscription is not canceled $criteria->addFilter(new EqualsFilter('canceledAt', null)); $criteria->addFilter(new EqualsFilter('salesChannelId', $salesChannelId)); @@ -157,6 +161,7 @@ public function findPendingSubscriptions(string $orderId, Context $context): Ent { $criteria = new Criteria(); $criteria->addAssociation('customer'); + $criteria->addAssociation('currency'); $criteria->addFilter(new EqualsFilter('orderId', $orderId)); $criteria->addFilter(new EqualsFilter('mollieId', null)); @@ -185,6 +190,18 @@ public function search(Criteria $criteria, Context $context): EntitySearchResult */ public function insertSubscription(SubscriptionEntity $subscription, string $status, Context $context): void { + $totalRoundingValue = null; + $totalRounding = $subscription->getTotalRounding(); + if ($totalRounding instanceof CashRoundingConfig) { + $totalRoundingValue = $totalRounding->jsonSerialize(); + } + + $itemRoundingValue = null; + $itemRounding = $subscription->getItemRounding(); + if ($itemRounding instanceof CashRoundingConfig) { + $itemRoundingValue = $itemRounding->jsonSerialize(); + } + $this->repoSubscriptions->create( [ [ @@ -204,11 +221,13 @@ public function insertSubscription(SubscriptionEntity $subscription, string $sta 'description' => $subscription->getDescription(), 'amount' => $subscription->getAmount(), 'quantity' => $subscription->getQuantity(), - 'currency' => $subscription->getCurrency(), + 'currencyId' => $subscription->getCurrencyId(), 'metadata' => $subscription->getMetadata()->toArray(), 'productId' => $subscription->getProductId(), 'orderId' => $subscription->getOrderId(), 'salesChannelId' => $subscription->getSalesChannelId(), + 'totalRounding' => $totalRoundingValue, + 'itemRounding' => $itemRoundingValue, ] ], $context diff --git a/src/Components/Subscription/DAL/Subscription/SubscriptionDefinition.php b/src/Components/Subscription/DAL/Subscription/SubscriptionDefinition.php index af111697a..981c1f921 100755 --- a/src/Components/Subscription/DAL/Subscription/SubscriptionDefinition.php +++ b/src/Components/Subscription/DAL/Subscription/SubscriptionDefinition.php @@ -8,6 +8,7 @@ use Shopware\Core\Checkout\Order\OrderDefinition; use Shopware\Core\Content\Product\ProductDefinition; use Shopware\Core\Framework\DataAbstractionLayer\EntityDefinition; +use Shopware\Core\Framework\DataAbstractionLayer\Field\CashRoundingConfigField; use Shopware\Core\Framework\DataAbstractionLayer\Field\CreatedAtField; use Shopware\Core\Framework\DataAbstractionLayer\Field\DateTimeField; use Shopware\Core\Framework\DataAbstractionLayer\Field\FkField; @@ -25,6 +26,7 @@ use Shopware\Core\Framework\DataAbstractionLayer\Field\StringField; use Shopware\Core\Framework\DataAbstractionLayer\Field\UpdatedAtField; use Shopware\Core\Framework\DataAbstractionLayer\FieldCollection; +use Shopware\Core\System\Currency\CurrencyDefinition; use Shopware\Core\System\SalesChannel\SalesChannelDefinition; class SubscriptionDefinition extends EntityDefinition @@ -72,7 +74,7 @@ protected function defineFields(): FieldCollection (new StringField('description', 'description'))->addFlags(new ApiAware()), (new FloatField('amount', 'amount'))->addFlags(new ApiAware()), (new IntField('quantity', 'quantity'))->addFlags(new ApiAware()), - (new StringField('currency', 'currency'))->addFlags(new ApiAware()), + (new FkField('currency_id', 'currencyId', CurrencyDefinition::class))->addFlags(new ApiAware(), new Required()), (new JsonField('metadata', 'metadata')), # -------------------------------------------------------------------------------------------------------------------------- @@ -94,7 +96,7 @@ protected function defineFields(): FieldCollection (new FkField('billing_address_id', 'billingAddressId', SalesChannelDefinition::class))->addFlags(new ApiAware()), (new FkField('shipping_address_id', 'shippingAddressId', SalesChannelDefinition::class))->addFlags(new ApiAware()), - + (new FkField('currency_id', 'currencyId', CurrencyDefinition::class))->addFlags(new ApiAware()), new CreatedAtField(), new UpdatedAtField(), @@ -106,13 +108,15 @@ protected function defineFields(): FieldCollection # -------------------------------------------------------------------------------------------------------------------------- new ManyToOneAssociationField('customer', 'customer_id', CustomerDefinition::class, 'id', false), - + new ManyToOneAssociationField('currency', 'currency_id', CurrencyDefinition::class, 'id', false), new OneToManyAssociationField('addresses', SubscriptionAddressDefinition::class, 'subscription_id'), new OneToManyAssociationField('historyEntries', SubscriptionHistoryDefinition::class, 'subscription_id'), new OneToOneAssociationField('billingAddress', 'billing_address_id', 'id', SubscriptionAddressDefinition::class, true), new OneToOneAssociationField('shippingAddress', 'shipping_address_id', 'id', SubscriptionAddressDefinition::class, true), + (new CashRoundingConfigField('total_rounding', 'totalRounding'))->addFlags(new Required()), + (new CashRoundingConfigField('item_rounding', 'itemRounding'))->addFlags(new Required()), ]); } } diff --git a/src/Components/Subscription/DAL/Subscription/SubscriptionEntity.php b/src/Components/Subscription/DAL/Subscription/SubscriptionEntity.php index dfae15c2a..ac739b570 100644 --- a/src/Components/Subscription/DAL/Subscription/SubscriptionEntity.php +++ b/src/Components/Subscription/DAL/Subscription/SubscriptionEntity.php @@ -11,6 +11,8 @@ use Shopware\Core\Checkout\Customer\CustomerEntity; use Shopware\Core\Framework\DataAbstractionLayer\Entity; use Shopware\Core\Framework\DataAbstractionLayer\EntityIdTrait; +use Shopware\Core\Framework\DataAbstractionLayer\Pricing\CashRoundingConfig; +use Shopware\Core\System\Currency\CurrencyEntity; class SubscriptionEntity extends Entity { @@ -58,7 +60,7 @@ class SubscriptionEntity extends Entity protected $quantity; /** - * @var string + * @var ?CurrencyEntity */ protected $currency; @@ -143,6 +145,20 @@ class SubscriptionEntity extends Entity */ protected $historyEntries; + /** + * @var string + */ + protected $currencyId; + + /** + * @var ?CashRoundingConfig + */ + protected $totalRounding; + + /** + * @var ?CashRoundingConfig + */ + protected $itemRounding; # -------------------------------------------------------------------------------- /** @@ -277,17 +293,17 @@ public function setQuantity(int $quantity): void } /** - * @return string + * @return ?CurrencyEntity */ - public function getCurrency(): string + public function getCurrency(): ?CurrencyEntity { - return (string)$this->currency; + return $this->currency; } /** - * @param string $currency + * @param CurrencyEntity $currency */ - public function setCurrency(string $currency): void + public function setCurrency(CurrencyEntity $currency): void { $this->currency = $currency; } @@ -669,4 +685,35 @@ public function setHistoryEntries(SubscriptionHistoryCollection $historyEntries) { $this->historyEntries = $historyEntries; } + + public function setCurrencyId(string $currencyId):void + { + $this->currencyId = $currencyId; + } + + public function getCurrencyId(): ?string + { + return $this->currencyId; + } + + + public function setTotalRounding(?CashRoundingConfig $totalRounding): void + { + $this->totalRounding = $totalRounding; + } + + public function getTotalRounding(): ?CashRoundingConfig + { + return $this->totalRounding; + } + + public function getItemRounding(): ?CashRoundingConfig + { + return $this->itemRounding; + } + + public function setItemRounding(?CashRoundingConfig $itemRounding): void + { + $this->itemRounding = $itemRounding; + } } diff --git a/src/Components/Subscription/Services/Builder/MollieDataBuilder.php b/src/Components/Subscription/Services/Builder/MollieDataBuilder.php index 5989d793b..1fbcd911e 100755 --- a/src/Components/Subscription/Services/Builder/MollieDataBuilder.php +++ b/src/Components/Subscription/Services/Builder/MollieDataBuilder.php @@ -35,10 +35,15 @@ public function buildRequestPayload(SubscriptionEntity $subscription, string $st { $intervalValue = $interval . ' ' . $intervalUnit; $timesValue = ($times > 0) ? $times : null; + $currency = $subscription->getCurrency(); + $currencyIso = ''; + if ($currency !== null) { + $currencyIso = $currency->getIsoCode(); + } return [ 'amount' => [ - 'currency' => $subscription->getCurrency(), + 'currency' => $currencyIso, 'value' => number_format($subscription->getAmount(), 2, '.', '') ], 'description' => $subscription->getDescription(), diff --git a/src/Components/Subscription/Services/Builder/SubscriptionBuilder.php b/src/Components/Subscription/Services/Builder/SubscriptionBuilder.php index c253d8c21..6c957fbce 100755 --- a/src/Components/Subscription/Services/Builder/SubscriptionBuilder.php +++ b/src/Components/Subscription/Services/Builder/SubscriptionBuilder.php @@ -91,7 +91,10 @@ private function buildItemSubscription(OrderLineItemEntity $lineItem, OrderEntit # as promotions. because we only offer subscriptions as a 1-item order without mixed carts, # this is the perfect way to still have shopware doing every calculation. $subscriptionEntity->setAmount($order->getAmountTotal()); - $subscriptionEntity->setCurrency($order->getCurrency()->getIsoCode()); + $subscriptionEntity->setCurrencyId($order->getCurrency()->getId()); + $subscriptionEntity->setTotalRounding($order->getTotalRounding()); + + $subscriptionEntity->setCurrency($order->getCurrency()); $subscriptionEntity->setQuantity($lineItem->getQuantity()); @@ -99,7 +102,8 @@ private function buildItemSubscription(OrderLineItemEntity $lineItem, OrderEntit $subscriptionEntity->setProductId((string)$lineItem->getProductId()); $subscriptionEntity->setOrderId($order->getId()); $subscriptionEntity->setSalesChannelId($order->getSalesChannelId()); - + $subscriptionEntity->setTotalRounding($order->getTotalRounding()); + $subscriptionEntity->setItemRounding($order->getItemRounding()); # calculate our first start date. # this is our current date (now) + 1x the planned interval. diff --git a/src/Components/Subscription/Services/Installer/MailTemplateInstaller.php b/src/Components/Subscription/Services/Installer/MailTemplateInstaller.php index 613895408..7e4ae45ca 100644 --- a/src/Components/Subscription/Services/Installer/MailTemplateInstaller.php +++ b/src/Components/Subscription/Services/Installer/MailTemplateInstaller.php @@ -14,6 +14,7 @@ use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter; use Shopware\Core\Framework\Uuid\Uuid; +use Shopware\Core\System\Currency\CurrencyEntity; use Shopware\Core\System\SalesChannel\SalesChannelEntity; class MailTemplateInstaller @@ -77,11 +78,14 @@ public function install(Context $context): void # ---------------------------------------------------------------------------------------------- # update our sample data for the admin mail preview + $currencyEntity = new CurrencyEntity(); + $currencyEntity->setIsoCode('EUR'); + $subscription = new SubscriptionEntity(); $subscription->setDescription('1x Sample Product (Order #1233, 24.99 EUR)'); $subscription->setQuantity(1); $subscription->setAmount(24.99); - $subscription->setCurrency('EUR'); + $subscription->setCurrency($currencyEntity); $subscription->setMollieCustomerId('cst_123456'); $subscription->setMollieId('sub_123456'); $subscription->setNextPaymentAt(new \DateTime()); diff --git a/src/Controller/Api/Order/OrderControllerBase.php b/src/Controller/Api/Order/OrderControllerBase.php index cea234cda..fcf6a8b30 100644 --- a/src/Controller/Api/Order/OrderControllerBase.php +++ b/src/Controller/Api/Order/OrderControllerBase.php @@ -27,7 +27,6 @@ public function __construct(OrderService $orderService, Order $mollieOrderServic } /** - * @Route("/api/_action/mollie/order/payment-url", name="api.action.mollie.order.payment-url", methods={"POST"}) * * @param Request $request * @@ -41,7 +40,6 @@ public function paymentUrl(Request $request, Context $context): JsonResponse } /** - * @Route("/api/v{version}/_action/mollie/order/payment-url", name="api.action.mollie.order.payment-url.legacy", methods={"POST"}) * * @param Request $request * diff --git a/src/Controller/Api/Order/RefundControllerBase.php b/src/Controller/Api/Order/RefundControllerBase.php index 28db68e53..1e1628dc8 100644 --- a/src/Controller/Api/Order/RefundControllerBase.php +++ b/src/Controller/Api/Order/RefundControllerBase.php @@ -65,7 +65,6 @@ public function __construct(OrderService $orderService, RefundManagerInterface $ # OPERATIONAL APIs /** - * @Route("/api/mollie/refund/order", name="api.mollie.refund.order", methods={"GET"}) * * @param QueryDataBag $query * @param Context $context @@ -104,7 +103,6 @@ public function refundOrderNumber(QueryDataBag $query, Context $context): JsonRe # TECHNICAL ADMIN APIs /** - * @Route("/api/_action/mollie/refund-manager/data", name="api.action.mollie.refund-manager.data", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -132,7 +130,6 @@ public function refundManagerData(RequestDataBag $data, Context $context): JsonR } /** - * @Route("/api/_action/mollie/refund/list",name="api.action.mollie.refund.list", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -144,7 +141,6 @@ public function list(RequestDataBag $data, Context $context): JsonResponse } /** - * @Route("/api/_action/mollie/refund/total", name="api.action.mollie.refund.total", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -156,7 +152,6 @@ public function total(RequestDataBag $data, Context $context): JsonResponse } /** - * @Route("/api/_action/mollie/refund", name="api.action.mollie.refund", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -188,7 +183,6 @@ public function refundOrderID(RequestDataBag $data, Context $context): JsonRespo } /** - * @Route("/api/_action/mollie/refund/cancel", name="api.action.mollie.refund.cancel", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -200,7 +194,6 @@ public function cancel(RequestDataBag $data, Context $context): JsonResponse } /** - * @Route("/api/v{version}/_action/mollie/refund-manager/data", name="api.action.mollie.refund-manager.data.legacy", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -212,7 +205,6 @@ public function refundManagerDataLegacy(RequestDataBag $data, Context $context): } /** - * @Route("/api/v{version}/_action/mollie/refund/list", name="api.action.mollie.refund.list.legacy", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -224,7 +216,6 @@ public function listLegacy(RequestDataBag $data, Context $context): JsonResponse } /** - * @Route("/api/v{version}/_action/mollie/refund/total", name="api.action.mollie.refund.total.legacy", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -236,7 +227,6 @@ public function totalLegacy(RequestDataBag $data, Context $context): JsonRespons } /** - * @Route("/api/v{version}/_action/mollie/refund", name="api.action.mollie.refund.legacy", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -248,7 +238,6 @@ public function refundLegacy(RequestDataBag $data, Context $context): JsonRespon } /** - * @Route("/api/v{version}/_action/mollie/refund/cancel", name="api.action.mollie.refund.cancel.legacy", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context diff --git a/src/Controller/Api/Order/ShippingControllerBase.php b/src/Controller/Api/Order/ShippingControllerBase.php index 5c6adc1fe..91cc3dafd 100644 --- a/src/Controller/Api/Order/ShippingControllerBase.php +++ b/src/Controller/Api/Order/ShippingControllerBase.php @@ -57,7 +57,6 @@ public function __construct(ShipmentManager $shipmentFacade, OrderService $order /** - * @Route("/api/_action/mollie/ship/status", name="api.action.mollie.ship.status", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -69,7 +68,6 @@ public function status(RequestDataBag $data, Context $context): JsonResponse } /** - * @Route("/api/v{version}/_action/mollie/ship/status", name="api.action.mollie.ship.status.legacy", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -81,7 +79,6 @@ public function statusLegacy(RequestDataBag $data, Context $context): JsonRespon } /** - * @Route("/api/_action/mollie/ship/total", name="api.action.mollie.ship.total", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -93,7 +90,6 @@ public function total(RequestDataBag $data, Context $context): JsonResponse } /** - * @Route("/api/v{version}/_action/mollie/ship/total", name="api.action.mollie.ship.total.legacy", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -110,8 +106,6 @@ public function totalLegacy(RequestDataBag $data, Context $context): JsonRespons * This shipment is based on ship all or rest of items automatically. * It can be used by 3rd parties, ERP systems and more. * - * @Route("/api/mollie/ship/order", name="api.mollie.ship.order", methods={"POST"}) - * * @param Request $request * @param Context $context * @return JsonResponse @@ -172,8 +166,6 @@ public function shipOrderOperational(Request $request, Context $context): JsonRe * It can be used by 3rd parties, ERP systems and more. * This comes without tracking information. Please use the POST version. * - * @Route("/api/mollie/ship/order", name="api.mollie.ship.order.deprecated", methods={"GET"}) - * * @param QueryDataBag $query * @param Context $context * @return JsonResponse @@ -219,8 +211,6 @@ public function shipOrderOperationalDeprecated(QueryDataBag $query, Context $con * This shipment requires a valid list of line items to be provided. * It can be used by 3rd parties, ERP systems and more. * - * @Route("/api/mollie/ship/order/batch", name="api.mollie.ship.order.batch", methods={"POST"}) - * * @param Request $request * @param Context $context * @return JsonResponse @@ -323,8 +313,6 @@ public function shipOrderBatchOperational(Request $request, Context $context): J * This is the custom operational route for shipping items using the API. * It can be used by 3rd parties, ERP systems and more. * - * @Route("/api/mollie/ship/item", name="api.mollie.ship.item", methods={"POST"}) - * * @param Request $request * @param Context $context * @throws \Exception @@ -397,8 +385,6 @@ public function shipItemOperational(Request $request, Context $context): JsonRes * It can be used by 3rd parties, ERP systems and more. * This comes without tracking information. Please use the POST version. * - * @Route("/api/mollie/ship/item", name="api.mollie.ship.item.deprecated", methods={"GET"}) - * * @param QueryDataBag $query * @param Context $context * @throws \Exception @@ -455,8 +441,6 @@ public function shipItemOperationalDeprecated(QueryDataBag $query, Context $cont /** * This is the plain action API route that is used in the Shopware Administration. * - * @Route("/api/_action/mollie/ship", name="api.action.mollie.ship.order", methods={"POST"}) - * * @param RequestDataBag $data * @param Context $context * @return JsonResponse @@ -485,7 +469,6 @@ public function shipOrderAdmin(RequestDataBag $data, Context $context): JsonResp } /** - * @Route("/api/v{version}/_action/mollie/ship", name="api.action.mollie.ship.order.legacy", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context @@ -517,8 +500,6 @@ public function shipOrderAdminLegacy(RequestDataBag $data, Context $context): Js /** * This is the plain action API route that is used in the Shopware Administration. * - * @Route("/api/_action/mollie/ship/item", name="api.action.mollie.ship.item", methods={"POST"}) - * * @param RequestDataBag $data * @param Context $context * @return JsonResponse @@ -544,7 +525,6 @@ public function shipItemAdmin(RequestDataBag $data, Context $context): JsonRespo } /** - * @Route("/api/v{version}/_action/mollie/ship/item", name="api.action.mollie.ship.item.legacy", methods={"POST"}) * * @param RequestDataBag $data * @param Context $context diff --git a/src/Controller/Api/Order/Sw6/OrderController.php b/src/Controller/Api/Order/Sw6/OrderController.php deleted file mode 100644 index eeef3cfad..000000000 --- a/src/Controller/Api/Order/Sw6/OrderController.php +++ /dev/null @@ -1,15 +0,0 @@ -setTwig($container->get('twig')); + } + return $container; + } +} diff --git a/src/Controller/Storefront/Account/AccountControllerBase.php b/src/Controller/Storefront/Account/AccountControllerBase.php index 76d1d2595..7c333b751 100755 --- a/src/Controller/Storefront/Account/AccountControllerBase.php +++ b/src/Controller/Storefront/Account/AccountControllerBase.php @@ -4,19 +4,17 @@ use Kiener\MolliePayments\Components\Subscription\Page\Account\SubscriptionPageLoader; use Kiener\MolliePayments\Components\Subscription\SubscriptionManager; +use Kiener\MolliePayments\Controller\Storefront\AbstractStoreFrontController; use Psr\Log\LoggerInterface; use Shopware\Core\Checkout\Customer\CustomerEntity; -use Shopware\Core\Content\Media\Pathname\UrlGeneratorInterface; use Shopware\Core\Framework\Validation\DataBag\RequestDataBag; use Shopware\Core\System\SalesChannel\SalesChannelContext; -use Shopware\Storefront\Controller\StorefrontController; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Generator\UrlGenerator; -class AccountControllerBase extends StorefrontController +class AccountControllerBase extends AbstractStoreFrontController { /** * @var SubscriptionPageLoader @@ -47,9 +45,6 @@ public function __construct(SubscriptionPageLoader $pageLoader, SubscriptionMana } - /** - * @Route("/account/mollie/subscriptions", name="frontend.account.mollie.subscriptions.page", options={"seo"="false"}, methods={"GET", "POST"}, defaults={"XmlHttpRequest"=true}) - */ public function subscriptionsList(Request $request, SalesChannelContext $salesChannelContext): Response { if (!$this->isLoggedIn($salesChannelContext)) { @@ -67,7 +62,6 @@ public function subscriptionsList(Request $request, SalesChannelContext $salesCh } /** - * @Route("/account/mollie/subscriptions/{subscriptionId}/billing/update", name="frontend.account.mollie.subscriptions.billing.update", methods={"POST"}) * * @param string $subscriptionId * @param RequestDataBag $data @@ -132,7 +126,6 @@ public function updateBilling(string $subscriptionId, RequestDataBag $data, Sale } /** - * @Route("/account/mollie/subscriptions/{subscriptionId}/shipping/update", name="frontend.account.mollie.subscriptions.shipping.update", methods={"POST"}) * * @param string $subscriptionId * @param RequestDataBag $data @@ -197,7 +190,6 @@ public function updateShipping(string $subscriptionId, RequestDataBag $data, Sal } /** - * @Route("/account/mollie/subscriptions/{swSubscriptionId}/payment/update", name="frontend.account.mollie.subscriptions.payment.update", methods={"POST"}) * * @param string $swSubscriptionId * @param SalesChannelContext $salesChannelContext @@ -230,7 +222,6 @@ public function updatePaymentStart(string $swSubscriptionId, SalesChannelContext } /** - * @Route("/account/mollie/subscriptions/{swSubscriptionId}/payment/update/finish", name="frontend.account.mollie.subscriptions.payment.update-success", methods={"GET", "POST"}) * * @param string $swSubscriptionId * @param SalesChannelContext $salesChannelContext @@ -257,7 +248,6 @@ public function updatePaymentFinish(string $swSubscriptionId, SalesChannelContex } /** - * @Route("/account/mollie/subscriptions/{swSubscriptionId}/pause", name="frontend.account.mollie.subscriptions.pause", methods={"POST"}) * @param string $swSubscriptionId */ public function pauseSubscription(string $swSubscriptionId, SalesChannelContext $context): Response @@ -281,7 +271,6 @@ public function pauseSubscription(string $swSubscriptionId, SalesChannelContext } /** - * @Route("/account/mollie/subscriptions/{swSubscriptionId}/skip", name="frontend.account.mollie.subscriptions.skip", methods={"POST"}) * @param string $swSubscriptionId */ public function skipSubscription(string $swSubscriptionId, SalesChannelContext $context): Response @@ -305,7 +294,6 @@ public function skipSubscription(string $swSubscriptionId, SalesChannelContext $ } /** - * @Route("/account/mollie/subscriptions/{swSubscriptionId}/resume", name="frontend.account.mollie.subscriptions.resume", methods={"POST"}) * @param string $swSubscriptionId */ public function resumeSubscription(string $swSubscriptionId, SalesChannelContext $context): Response @@ -329,7 +317,6 @@ public function resumeSubscription(string $swSubscriptionId, SalesChannelContext } /** - * @Route("/account/mollie/subscriptions/{subscriptionId}/cancel", name="frontend.account.mollie.subscriptions.cancel", methods={"POST"}) * @param mixed $subscriptionId */ public function cancelSubscription($subscriptionId, SalesChannelContext $context): Response diff --git a/src/Controller/Storefront/Account/Sw6/AccountController.php b/src/Controller/Storefront/Account/Sw6/AccountController.php deleted file mode 100755 index cef8f57c1..000000000 --- a/src/Controller/Storefront/Account/Sw6/AccountController.php +++ /dev/null @@ -1,24 +0,0 @@ -customerService = $customerService; } + /** - * @Route("/mollie/payment/failed/{transactionId}", defaults={"csrf_protected"=false}, name="frontend.mollie.payment-failed", options={"seo"="false"}, methods={"GET", "POST"}) * * @param SalesChannelContext $salesChannelContext * @param string $transactionId @@ -205,7 +201,6 @@ public function paymentFailedAction(SalesChannelContext $salesChannelContext, st /** - * @Route("/mollie/payment/retry/{transactionId}", defaults={"csrf_protected"=false}, name="frontend.mollie.payment.retry", options={"seo"="false"}, methods={"GET", "POST"}) * * @param SalesChannelContext $context * @param string $transactionId diff --git a/src/Controller/Storefront/Payment/ReturnControllerBase.php b/src/Controller/Storefront/Payment/ReturnControllerBase.php index 67147c3f8..738495ef9 100644 --- a/src/Controller/Storefront/Payment/ReturnControllerBase.php +++ b/src/Controller/Storefront/Payment/ReturnControllerBase.php @@ -2,15 +2,13 @@ namespace Kiener\MolliePayments\Controller\Storefront\Payment; +use Kiener\MolliePayments\Controller\Storefront\AbstractStoreFrontController; use Kiener\MolliePayments\Facade\Controller\PaymentReturnFacade; use Mollie\Api\Exceptions\ApiException; -use Shopware\Core\Framework\Routing\Annotation\RouteScope; use Shopware\Core\System\SalesChannel\SalesChannelContext; -use Shopware\Storefront\Controller\StorefrontController; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; -class ReturnControllerBase extends StorefrontController +class ReturnControllerBase extends AbstractStoreFrontController { /** * @var PaymentReturnFacade @@ -27,7 +25,6 @@ public function __construct(PaymentReturnFacade $returnFacade) } /** - * @Route("/mollie/payment/{swTransactionId}", defaults={"csrf_protected"=false}, name="frontend.mollie.payment", options={"seo"="false"}, methods={"GET", "POST"}) * * @param SalesChannelContext $salesChannelContext * @param string $swTransactionId diff --git a/src/Controller/Storefront/Payment/Sw6/MollieFailureController.php b/src/Controller/Storefront/Payment/Sw6/MollieFailureController.php deleted file mode 100644 index dd638452d..000000000 --- a/src/Controller/Storefront/Payment/Sw6/MollieFailureController.php +++ /dev/null @@ -1,14 +0,0 @@ -fireFlowBuilderEvent(self::FLOWBUILDER_CANCELED, $order, $salesChannelContext->getContext()); - - throw new CustomerCanceledAsyncPaymentException($orderTransactionID, $message); + /** @phpstan-ignore-next-line */ + throw PaymentException::customerCanceled($orderTransactionID, $message); } else { $message = sprintf('Payment for order %s (%s) failed. The Mollie payment status was not successful for this payment attempt.', $order->getOrderNumber(), $mollieOrder->id); # fire flow builder event $this->fireFlowBuilderEvent(self::FLOWBUILDER_FAILED, $order, $salesChannelContext->getContext()); - throw new AsyncPaymentFinalizeException($orderTransactionID, $message); + /** @phpstan-ignore-next-line */ + throw PaymentException::asyncFinalizeInterrupted($orderTransactionID, $message); } } diff --git a/src/Handler/PaymentHandler.php b/src/Handler/PaymentHandler.php index 664b5ddfb..62189f776 100644 --- a/src/Handler/PaymentHandler.php +++ b/src/Handler/PaymentHandler.php @@ -17,8 +17,7 @@ use Shopware\Core\Checkout\Order\OrderEntity; use Shopware\Core\Checkout\Payment\Cart\AsyncPaymentTransactionStruct; use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\AsynchronousPaymentHandlerInterface; -use Shopware\Core\Checkout\Payment\Exception\AsyncPaymentFinalizeException; -use Shopware\Core\Checkout\Payment\Exception\CustomerCanceledAsyncPaymentException; +use Shopware\Core\Checkout\Payment\PaymentException; use Shopware\Core\Framework\Validation\DataBag\RequestDataBag; use Shopware\Core\System\SalesChannel\SalesChannelContext; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -173,7 +172,8 @@ public function finalize(AsyncPaymentTransactionStruct $transaction, Request $re try { $this->finalizeFacade->finalize($transaction, $salesChannelContext); - } catch (AsyncPaymentFinalizeException|CustomerCanceledAsyncPaymentException $ex) { + /** @phpstan-ignore-next-line */ + } catch (PaymentException $ex) { $this->logger->error( 'Error when finalizing order ' . $transaction->getOrder()->getOrderNumber() . ', Mollie ID: ' . $molliedID . ', ' . $ex->getMessage() ); @@ -190,11 +190,8 @@ public function finalize(AsyncPaymentTransactionStruct $transaction, Request $re $this->logger->error( 'Unknown Error when finalizing order ' . $transaction->getOrder()->getOrderNumber() . ', Mollie ID: ' . $molliedID . ', ' . $ex->getMessage() ); - - throw new AsyncPaymentFinalizeException( - $transaction->getOrderTransaction()->getId(), - 'An unknown error happened when finalizing the order. Please see the Shopware logs for more. It can be that the payment in Mollie was succesful and the Shopware order is now cancelled or failed!' - ); + /** @phpstan-ignore-next-line */ + throw PaymentException::asyncFinalizeInterrupted($transaction->getOrderTransaction()->getId(), 'An unknown error happened when finalizing the order. Please see the Shopware logs for more. It can be that the payment in Mollie was succesful and the Shopware order is now cancelled or failed!'); } } diff --git a/src/Migration/Migration1711618833SubscriptionCurrency.php b/src/Migration/Migration1711618833SubscriptionCurrency.php new file mode 100644 index 000000000..6ea1edbb0 --- /dev/null +++ b/src/Migration/Migration1711618833SubscriptionCurrency.php @@ -0,0 +1,78 @@ +executeStatement($sql); + + //add foreign key + $sql = "ALTER TABLE `mollie_subscription` ADD CONSTRAINT `fk.mollie_subscription.currency_id` FOREIGN KEY (`currency_id`) REFERENCES `currency` (`id`) ON DELETE SET NULL ON UPDATE CASCADE"; + $connection->executeStatement($sql); + + //load used currencies + $sql = "SELECT DISTINCT `currency` FROM `mollie_subscription`"; + $statement = $connection->executeQuery($sql); + $currencies = []; + while ($row = $statement->fetchAssociative()) { + $currencies[]=$row['currency']; + } + //get the data for each currency + $sql = "SELECT HEX(`id`) as `id`,`iso_code`,`item_rounding`,`total_rounding` FROM `currency` WHERE `iso_code` IN(:currencies)"; + $statement = $connection->executeQuery($sql, [ + 'currencies' => $currencies + ], [ + 'currencies' => Connection::PARAM_STR_ARRAY + ]); + + + //update currency information + $sql = "UPDATE `mollie_subscription` SET `currency_id` = :currencyId, `item_rounding` = :itemRounding,`total_rounding` =:totalRounding WHERE `currency` = :currencyIso"; + + $updateStatement = $connection->prepare($sql); + + while ($row = $statement->fetchAssociative()) { + $updateStatement->executeStatement([ + 'currencyId' => Uuid::fromHexToBytes($row['id']), + 'itemRounding' => $row['item_rounding'], + 'totalRounding' => $row['total_rounding'], + 'currencyIso' => $row['iso_code'] + ]); + } + + //delete unsused column + $sql = "ALTER TABLE `mollie_subscription` DROP COLUMN `currency`"; + $connection->executeStatement($sql); + } + + /** + * @param Connection $connection + * @return void + */ + public function updateDestructive(Connection $connection): void + { + // implement update destructive + } +} diff --git a/src/MolliePayments.php b/src/MolliePayments.php index 75db7594c..7169068ae 100644 --- a/src/MolliePayments.php +++ b/src/MolliePayments.php @@ -45,42 +45,6 @@ public function build(ContainerBuilder $container): void } - /** - * @return void - */ - public function boot(): void - { - parent::boot(); - } - - /** - * @param RoutingConfigurator $routes - * @param string $environment - * @return void - */ - public function configureRoutes(RoutingConfigurator $routes, string $environment): void - { - if (!$this->isActive()) { - return; - } - - /** @var Container $container */ - $container = $this->container; - - $loader = new DependencyLoader($container); - - $routeDir = $loader->getRoutesPath($this->getPath()); - - $fileSystem = new Filesystem(); - - if ($fileSystem->exists($routeDir)) { - $routes->import($routeDir . '/{routes}/*' . Kernel::CONFIG_EXTS, 'glob'); - $routes->import($routeDir . '/{routes}/' . $environment . '/**/*' . Kernel::CONFIG_EXTS, 'glob'); - $routes->import($routeDir . '/{routes}' . Kernel::CONFIG_EXTS, 'glob'); - $routes->import($routeDir . '/{routes}_' . $environment . Kernel::CONFIG_EXTS, 'glob'); - } - } - /** * @param InstallContext $context * @return void @@ -121,25 +85,6 @@ public function update(UpdateContext $context): void $this->runDbMigrations($context->getMigrationCollection()); } } - - /** - * @param InstallContext $context - * @return void - */ - public function postInstall(InstallContext $context): void - { - parent::postInstall($context); - } - - /** - * @param UninstallContext $context - * @return void - */ - public function uninstall(UninstallContext $context): void - { - parent::uninstall($context); - } - /** * @param ActivateContext $context * @throws \Doctrine\DBAL\Exception @@ -154,14 +99,6 @@ public function activate(ActivateContext $context): void $this->runDbMigrations($context->getMigrationCollection()); } - /** - * @param DeactivateContext $context - * @return void - */ - public function deactivate(DeactivateContext $context): void - { - parent::deactivate($context); - } /** * @param Context $context diff --git a/src/Repository/OrderTransaction/OrderTransactionRepository.php b/src/Repository/OrderTransaction/OrderTransactionRepository.php index 20113771f..8dd256922 100644 --- a/src/Repository/OrderTransaction/OrderTransactionRepository.php +++ b/src/Repository/OrderTransaction/OrderTransactionRepository.php @@ -57,6 +57,7 @@ public function getLatestOrderTransaction(string $orderID, Context $context): Or $criteria = new Criteria(); $criteria->addFilter(new EqualsFilter('order.id', $orderID)); $criteria->addAssociation('order'); + $criteria->addAssociation('stateMachineState'); $criteria->addAssociation('paymentMethod'); $criteria->addSorting(new FieldSorting('createdAt')); diff --git a/src/Repository/StateMachineState/StateMachineStateRepository.php b/src/Repository/StateMachineState/StateMachineStateRepository.php new file mode 100644 index 000000000..4ba7ea578 --- /dev/null +++ b/src/Repository/StateMachineState/StateMachineStateRepository.php @@ -0,0 +1,39 @@ +stateMachineStateRepository = $stateMachineStateRepository; + } + + + public function findByStateId(string $stateId, Context $context): ?StateMachineStateEntity + { + $criteria = new Criteria([$stateId]); + $searchResult = $this->stateMachineStateRepository->search($criteria, $context); + if ($searchResult->count() === 0) { + return null; + } + /** @var StateMachineStateEntity $entity */ + $entity = $searchResult->first(); + + return $entity; + } +} diff --git a/src/Repository/StateMachineState/StateMachineStateRepositoryInterface.php b/src/Repository/StateMachineState/StateMachineStateRepositoryInterface.php new file mode 100644 index 000000000..3d7b8dbda --- /dev/null +++ b/src/Repository/StateMachineState/StateMachineStateRepositoryInterface.php @@ -0,0 +1,12 @@ + 6.4.7.0 - const configRootNew = this.$parent.$parent.$parent.$parent.$parent; - // Shopware <= 6.4.7.0 - const configRootOld = this.$parent.$parent.$parent.$parent; - - var value = null; - - if (configRootNew !== null) { - var scId = null; - if (configRootNew.currentSalesChannelId !== undefined) { - scId = configRootNew.currentSalesChannelId; - } - - if (configRootNew.actualConfigData !== undefined) { - - // try to grab it from our current sales channel, if existing - if (scId !== null) { - value = configRootNew.actualConfigData[scId][key]; - } - - // if we are in AllSalesChannel, or didnt find a value, - // then use the inherited one from our parent (condition => value is NULL) - if (value === null) { - value = configRootNew.actualConfigData.null[key]; - } - } - } - - if (configRootOld !== null && configRootOld.actualConfigData !== undefined) { - return configRootOld.actualConfigData.null[key]; - } - - // does not exist e.g. in Shopware 6.3.5.2 - return value; - }, - }, -}) -; +}); \ No newline at end of file diff --git a/src/Resources/app/administration/src/module/mollie-payments/components/mollie-pluginconfig-support-modal/mollie-pluginconfig-support-modal.html.twig b/src/Resources/app/administration/src/module/mollie-payments/components/mollie-pluginconfig-support-modal/mollie-pluginconfig-support-modal.html.twig index 96db470ff..f34682dca 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/components/mollie-pluginconfig-support-modal/mollie-pluginconfig-support-modal.html.twig +++ b/src/Resources/app/administration/src/module/mollie-payments/components/mollie-pluginconfig-support-modal/mollie-pluginconfig-support-modal.html.twig @@ -15,29 +15,31 @@ - - - - - - - diff --git a/src/Resources/app/administration/src/module/mollie-payments/components/mollie-refund-manager/index.js b/src/Resources/app/administration/src/module/mollie-payments/components/mollie-refund-manager/index.js index 5f83fd8ba..7c2c833d2 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/components/mollie-refund-manager/index.js +++ b/src/Resources/app/administration/src/module/mollie-payments/components/mollie-refund-manager/index.js @@ -5,7 +5,7 @@ import MollieRefundsGrid from './grids/MollieRefundsGrid'; import RefundItemService from './services/RefundItemService'; // eslint-disable-next-line no-undef -const {Component, Mixin} = Shopware; +const {Component, Mixin, Filter} = Shopware; Component.register('mollie-refund-manager', { @@ -132,6 +132,13 @@ Component.register('mollie-refund-manager', { return this.$tc('mollie-payments.refund-manager.summary.lblDescription', 0, {characters: this.refundDescription.length}) }, + currencyFilter() { + return Filter.getByName('currency'); + }, + + dateFilter() { + return Filter.getByName('date'); + }, }, methods: { diff --git a/src/Resources/app/administration/src/module/mollie-payments/components/mollie-refund-manager/mollie-refund-manager.html.twig b/src/Resources/app/administration/src/module/mollie-payments/components/mollie-refund-manager/mollie-refund-manager.html.twig index f7f718e42..423db00ed 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/components/mollie-refund-manager/mollie-refund-manager.html.twig +++ b/src/Resources/app/administration/src/module/mollie-payments/components/mollie-refund-manager/mollie-refund-manager.html.twig @@ -42,14 +42,14 @@ {{ item.shopware.label }} {% endblock %} @@ -276,7 +280,7 @@
- ({{ roundingDiff | currency(order.currency.shortName) }}) + ({{ currencyFilter( roundingDiff , order.currency.isoCode, order.totalRounding.decimals) }})
{% endblock %} @@ -287,7 +291,7 @@
- - {{ voucherAmount | currency(order.currency.shortName) }} + - {{ currencyFilter( voucherAmount , order.currency.isoCode, order.totalRounding.decimals) }}
{% endblock %} @@ -297,7 +301,7 @@
- - {{ pendingRefunds | currency(order.currency.shortName) }} + - {{ currencyFilter( pendingRefunds , order.currency.isoCode, order.totalRounding.decimals) }}
{% endblock %} {% block sw_order_line_items_grid_refund_summary_amount_refunded %} @@ -306,7 +310,7 @@
- - {{ refundedAmount | currency(order.currency.shortName) }} + - {{ currencyFilter( refundedAmount , order.currency.isoCode, order.totalRounding.decimals) }}
{% endblock %} {% block sw_order_line_items_grid_refund_summary_amount_remaining %} @@ -318,7 +322,7 @@ - = {{ remainingAmount | currency(order.currency.shortName) }} + = {{ currencyFilter( remainingAmount , order.currency.isoCode, order.totalRounding.decimals) }} {% endblock %} @@ -330,8 +334,11 @@ numberType="float" size="medium" v-model="refundAmount" + v-model:value="refundAmount" :min="0" - :class="{ 'tutorial-active' : tutorialPartialAmountRefundVisible || tutorialPartialQuantityVisible || tutorialPartialPromotionsVisible || tutorialRefundShipping }"> + :class="{ 'tutorial-active' : tutorialPartialAmountRefundVisible || tutorialPartialQuantityVisible || tutorialPartialPromotionsVisible || tutorialRefundShipping }" + class="refund-amount" + > @@ -347,7 +354,8 @@ @@ -356,7 +364,8 @@ @@ -364,6 +373,7 @@ {# --------------------------------------------------------------------------------------------- #} @@ -412,7 +422,7 @@ :isLoading="isRefundDataLoading"> @@ -430,7 +440,7 @@ @@ -48,7 +52,7 @@ {% block sw_order_line_items_grid_grid_mollie_ship_item_modal_tracking %} - diff --git a/src/Resources/app/administration/src/module/mollie-payments/components/mollie-tracking-info/mollie-tracking-info.html.twig b/src/Resources/app/administration/src/module/mollie-payments/components/mollie-tracking-info/mollie-tracking-info.html.twig index 5841c9c39..c4f452706 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/components/mollie-tracking-info/mollie-tracking-info.html.twig +++ b/src/Resources/app/administration/src/module/mollie-payments/components/mollie-tracking-info/mollie-tracking-info.html.twig @@ -18,15 +18,15 @@ - - - diff --git a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/component/sw-order-line-items-grid/sw-order-line-items-grid.html.twig b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/component/sw-order-line-items-grid/sw-order-line-items-grid.html.twig index 2d892fbe6..779ed4e09 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/component/sw-order-line-items-grid/sw-order-line-items-grid.html.twig +++ b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/component/sw-order-line-items-grid/sw-order-line-items-grid.html.twig @@ -117,12 +117,6 @@ SHOPWARE 6.4 {% endblock %} -{% block sw_order_line_items_grid_grid_actions %} - {% parent %} - -{% endblock %} {% block sw_order_line_items_grid_grid_actions_modals_items %} {% parent %} @@ -160,7 +154,9 @@ SHOPWARE 6.4 :step="1" :min="0" :max="shippableQuantity(item)" - v-model="shipQuantity"> + v-model:value="shipQuantity" + v-model="shipQuantity" + > @@ -175,7 +171,7 @@ SHOPWARE 6.4 {% endblock %} {% block sw_order_line_items_grid_grid_mollie_ship_item_modal_tracking %} - diff --git a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-base/index.js b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-base/index.js index 0ff6ca29d..20a77d587 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-base/index.js +++ b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-base/index.js @@ -3,7 +3,7 @@ import OrderAttributes from '../../../../../../core/models/OrderAttributes'; import MollieShippingEvents from '../../../../components/mollie-ship-order/MollieShippingEvents'; // eslint-disable-next-line no-undef -const {Component, Mixin} = Shopware; +const {Component, Mixin, Filter} = Shopware; Component.override('sw-order-detail-base', { template, @@ -41,6 +41,10 @@ Component.override('sw-order-detail-base', { const attr = new OrderAttributes(this.order); return attr.isMollieOrder(); }, + + currencyFilter() { + return Filter.getByName('currency'); + }, }, watch: { diff --git a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-base/sw-order-detail-base.html.twig b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-base/sw-order-detail-base.html.twig index d26adab7f..9ad2b1efa 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-base/sw-order-detail-base.html.twig +++ b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-base/sw-order-detail-base.html.twig @@ -14,21 +14,21 @@ SHOPWARE 6.4 {{ $tc('sw-order.detailExtended.totalRefunds') }}
- {{ refundedAmount | currency(order.currency.shortName) }} + {{ currencyFilter( refundedAmount, order.currency.isoCode, order.totalRounding.decimals) }}
{{ $tc('sw-order.detailExtended.totalRefundsPending') }}
- {{ refundAmountPending | currency(order.currency.shortName) }} + {{ currencyFilter( refundAmountPending, order.currency.isoCode, order.totalRounding.decimals) }}
{{ $tc('sw-order.detailExtended.totalShipments', 0, { quantity: shippedQuantity }) }}
- {{ shippedAmount | currency(order.currency.shortName) }} + {{ currencyFilter( shippedAmount, order.currency.isoCode, order.totalRounding.decimals) }}
{% endblock %} diff --git a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-general/index.js b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-general/index.js index 9ca91b566..1ddccfe91 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-general/index.js +++ b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-general/index.js @@ -6,7 +6,7 @@ import MollieShipping from '../../../../components/mollie-ship-order/MollieShipp import MollieShippingEvents from '../../../../components/mollie-ship-order/MollieShippingEvents'; // eslint-disable-next-line no-undef -const {Component, Mixin} = Shopware; +const {Component, Mixin, Filter} = Shopware; Component.override('sw-order-detail-general', { template, @@ -135,6 +135,10 @@ Component.override('sw-order-detail-general', { return this.molliePaymentUrl !== ''; }, + currencyFilter() { + return Filter.getByName('currency'); + }, + }, watch: { diff --git a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-general/sw-order-detail-general.html.twig b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-general/sw-order-detail-general.html.twig index 74fe784fe..c71dc655e 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-general/sw-order-detail-general.html.twig +++ b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-order/view/sw-order-detail-general/sw-order-detail-general.html.twig @@ -159,18 +159,18 @@ SHOPWARE 6.5 {{ $tc('sw-order.detailExtended.totalRefunds') }}
- {{ refundedAmount | currency(order.currency.shortName) }} + {{ currencyFilter( refundedAmount, order.currency.isoCode, order.totalRounding.decimals) }}
{{ $tc('sw-order.detailExtended.totalRefundsPending') }}
- {{ refundAmountPending | currency(order.currency.shortName) }} + {{ currencyFilter( refundAmountPending, order.currency.isoCode, order.totalRounding.decimals) }}
{{ $tc('sw-order.detailExtended.totalShipments', 0, { quantity: shippedQuantity }) }}
- {{ shippedAmount | currency(order.currency.shortName) }} + {{ currencyFilter( shippedAmount, order.currency.isoCode, order.totalRounding.decimals) }}
{% endblock %} diff --git a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-settings/components/sw-system-config/index.js b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-settings/components/sw-system-config/index.js new file mode 100644 index 000000000..518c0255b --- /dev/null +++ b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-settings/components/sw-system-config/index.js @@ -0,0 +1,12 @@ + +// eslint-disable-next-line no-undef +const {Component} = Shopware; + +Component.override('sw-system-config', { + provide() { + return { + 'actualConfigData': this.actualConfigData, + 'currentSalesChannelId':this.currentSalesChannelId, //TODO: currentSalesChannelId is not reactive and does not change when you select a new saleschannel in config. because of this the preview does work only for all saleschannels but not for a specific one. we have to fix the preview later + }; + }, +}); \ No newline at end of file diff --git a/src/Resources/app/administration/src/module/mollie-payments/extension/sw-settings/index.js b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-settings/index.js new file mode 100644 index 000000000..6a996f1f0 --- /dev/null +++ b/src/Resources/app/administration/src/module/mollie-payments/extension/sw-settings/index.js @@ -0,0 +1 @@ +import './components/sw-system-config'; \ No newline at end of file diff --git a/src/Resources/app/administration/src/module/mollie-payments/index.js b/src/Resources/app/administration/src/module/mollie-payments/index.js index 433f91e1a..300bfb80d 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/index.js +++ b/src/Resources/app/administration/src/module/mollie-payments/index.js @@ -1,6 +1,7 @@ import './acl'; import './extension/sw-customer'; import './extension/sw-order'; +import './extension/sw-settings'; import './components/mollie-pluginconfig-element-orderstate-select'; import './components/mollie-pluginconfig-section-info'; import './components/mollie-pluginconfig-section-api'; diff --git a/src/Resources/app/administration/src/module/mollie-payments/page/mollie-subscriptions-detail/index.js b/src/Resources/app/administration/src/module/mollie-payments/page/mollie-subscriptions-detail/index.js index 5e431bedc..89ca7c41a 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/page/mollie-subscriptions-detail/index.js +++ b/src/Resources/app/administration/src/module/mollie-payments/page/mollie-subscriptions-detail/index.js @@ -3,7 +3,7 @@ import './mollie-subscriptions-detail.scss'; import SubscriptionService from '../../../../core/service/subscription/subscription.service'; // eslint-disable-next-line no-undef -const {Component, Mixin, Application, ApiService} = Shopware; +const {Component, Mixin, Application, ApiService, Filter} = Shopware; // eslint-disable-next-line no-undef const {Criteria} = Shopware.Data; @@ -124,6 +124,10 @@ Component.register('mollie-subscriptions-detail', { return this.$tc('mollie-payments.subscriptions.detail.history.cardTitle') + ' (' + this.history.length + ')'; }, + + dateFilter() { + return Filter.getByName('date'); + }, }, created() { @@ -150,6 +154,7 @@ Component.register('mollie-subscriptions-detail', { criteria.addAssociation('addresses'); criteria.addAssociation('historyEntries'); criteria.addAssociation('customer'); + criteria.addAssociation('currency'); // eslint-disable-next-line no-undef this.repoSubscriptions.search(criteria, Shopware.Context.api).then((result) => { diff --git a/src/Resources/app/administration/src/module/mollie-payments/page/mollie-subscriptions-detail/mollie-subscriptions-detail.html.twig b/src/Resources/app/administration/src/module/mollie-payments/page/mollie-subscriptions-detail/mollie-subscriptions-detail.html.twig index 74ac6e42c..32840cee4 100644 --- a/src/Resources/app/administration/src/module/mollie-payments/page/mollie-subscriptions-detail/mollie-subscriptions-detail.html.twig +++ b/src/Resources/app/administration/src/module/mollie-payments/page/mollie-subscriptions-detail/mollie-subscriptions-detail.html.twig @@ -71,7 +71,7 @@ {% block sw_order_detail_card_basic_field_description %} - @@ -80,7 +80,7 @@ {% block sw_order_detail_card_basic_field_amount %} -