From a67cb1ecbf6b08eb906bf0e16be618ff3191e67d Mon Sep 17 00:00:00 2001 From: mandan2 Date: Tue, 19 Dec 2023 15:33:42 +0200 Subject: [PATCH 1/2] PIPRES-349: Update carrier callers --- mollie.php | 36 +++++++++++++++++++ src/Install/Installer.php | 1 + src/Install/Uninstall.php | 1 - .../Symfony/SubscriptionController.php | 2 ++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/mollie.php b/mollie.php index d30b499b7..893ca100f 100755 --- a/mollie.php +++ b/mollie.php @@ -27,6 +27,7 @@ use Mollie\Service\ExceptionService; use Mollie\ServiceProvider\LeagueServiceContainerProvider; use Mollie\Subscription\Handler\CustomerAddressUpdateHandler; +use Mollie\Subscription\Handler\UpdateSubscriptionCarrierHandler; use Mollie\Subscription\Install\AttributeInstaller; use Mollie\Subscription\Install\DatabaseTableInstaller; use Mollie\Subscription\Install\HookInstaller; @@ -1271,6 +1272,41 @@ public function hookActionObjectAddressDeleteAfter(array $params): void $this->addPreventDeleteErrorMessage(); } + public function hookActionCarrierUpdate(array $params): void + { + $oldCarrierId = $params['id_carrier'] ?? 0; + $newCarrier = $params['carrier'] ?? null; + + if (empty($oldCarrierId) || empty($newCarrier)) { + return; + } + + /** @var UpdateSubscriptionCarrierHandler $subscriptionCarrierUpdateHandler */ + $subscriptionCarrierUpdateHandler = $this->getService(UpdateSubscriptionCarrierHandler::class); + + /** @var ConfigurationAdapter $configuration */ + $configuration = $this->getService(ConfigurationAdapter::class); + + /** @var PrestaLoggerInterface $logger */ + $logger = $this->getService(PrestaLoggerInterface::class); + + if ((int) $oldCarrierId !== (int) $configuration->get(Config::MOLLIE_SUBSCRIPTION_ORDER_CARRIER_ID)) { + return; + } + + $failedSubscriptionOrderIdsToUpdate = $subscriptionCarrierUpdateHandler->run((int) $newCarrier->id); + + if (empty($failedSubscriptionOrderIdsToUpdate)) { + return; + } + + $logger->error('Failed to update subscription carrier for all orders.', [ + 'failed_subscription_order_ids' => json_encode($failedSubscriptionOrderIdsToUpdate), + ]); + + // TODO maybe notification redirect with failed orders to update + } + public function hookActionFrontControllerAfterInit(): void { $this->frontControllerAfterInit(); diff --git a/src/Install/Installer.php b/src/Install/Installer.php index aec5a7671..15720d22d 100644 --- a/src/Install/Installer.php +++ b/src/Install/Installer.php @@ -171,6 +171,7 @@ public static function getHooks() 'actionObjectOrderPaymentAddAfter', 'displayProductAdditionalInfo', 'displayCustomerAccount', + 'actionCarrierUpdate', ]; } diff --git a/src/Install/Uninstall.php b/src/Install/Uninstall.php index e92cc9dd2..567261348 100644 --- a/src/Install/Uninstall.php +++ b/src/Install/Uninstall.php @@ -96,7 +96,6 @@ private function deleteConfig() Config::METHODS_CONFIG, Config::MOLLIE_MAIL_WHEN_COMPLETED, Config::MOLLIE_API_KEY_TEST, - Config::MOLLIE_SUBSCRIPTION_ORDER_CARRIER_ID, Config::MOLLIE_SUBSCRIPTION_ENABLED, ]; diff --git a/subscription/Controller/Symfony/SubscriptionController.php b/subscription/Controller/Symfony/SubscriptionController.php index 8adfac607..9ff6a4037 100644 --- a/subscription/Controller/Symfony/SubscriptionController.php +++ b/subscription/Controller/Symfony/SubscriptionController.php @@ -98,6 +98,8 @@ public function submitOptionsAction(Request $request): RedirectResponse $formHandler->save($form->getData()); + // TODO implement carrier handler update here or somewhere in inner class + $this->addFlash( 'success', $this->module->l('Options saved successfully.', self::FILE_NAME) From 8e6c0cb48fdcb8aca451f4178daaf35248f74bae Mon Sep 17 00:00:00 2001 From: jevgenijvisockij Date: Tue, 14 May 2024 17:14:29 +0300 Subject: [PATCH 2/2] Fixed carriers not updating properly --- mollie.php | 2 -- .../Symfony/SubscriptionController.php | 36 +++++++++++++++++-- .../Repository/RecurringOrderRepository.php | 4 +-- .../subscriptions-settings.html.twig | 2 ++ 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/mollie.php b/mollie.php index 893ca100f..ff614dc02 100755 --- a/mollie.php +++ b/mollie.php @@ -1303,8 +1303,6 @@ public function hookActionCarrierUpdate(array $params): void $logger->error('Failed to update subscription carrier for all orders.', [ 'failed_subscription_order_ids' => json_encode($failedSubscriptionOrderIdsToUpdate), ]); - - // TODO maybe notification redirect with failed orders to update } public function hookActionFrontControllerAfterInit(): void diff --git a/subscription/Controller/Symfony/SubscriptionController.php b/subscription/Controller/Symfony/SubscriptionController.php index 9ff6a4037..7dc177088 100644 --- a/subscription/Controller/Symfony/SubscriptionController.php +++ b/subscription/Controller/Symfony/SubscriptionController.php @@ -15,11 +15,15 @@ namespace Mollie\Subscription\Controller\Symfony; use Exception; +use Mollie\Adapter\ConfigurationAdapter; use Mollie\Adapter\Shop; +use Mollie\Config\Config; +use Mollie\Logger\PrestaLoggerInterface; use Mollie\Subscription\Exception\SubscriptionApiException; use Mollie\Subscription\Filters\SubscriptionFilters; use Mollie\Subscription\Grid\SubscriptionGridDefinitionFactory; use Mollie\Subscription\Handler\SubscriptionCancellationHandler; +use Mollie\Subscription\Handler\UpdateSubscriptionCarrierHandler; use Mollie\Utility\PsVersionUtility; use PrestaShop\PrestaShop\Core\Form\FormHandlerInterface; use PrestaShop\PrestaShop\Core\Grid\GridFactoryInterface; @@ -96,9 +100,9 @@ public function submitOptionsAction(Request $request): RedirectResponse return $this->redirectToRoute('admin_subscription_index'); } - $formHandler->save($form->getData()); + $this->updateSubscriptionCarrier($form->getData()['carrier']); - // TODO implement carrier handler update here or somewhere in inner class + $formHandler->save($form->getData()); $this->addFlash( 'success', @@ -108,6 +112,34 @@ public function submitOptionsAction(Request $request): RedirectResponse return $this->redirectToRoute('admin_subscription_index'); } + private function updateSubscriptionCarrier(int $newCarrierId): void + { + /** @var ConfigurationAdapter $configuration */ + $configuration = $this->module->getService(ConfigurationAdapter::class); + $oldCarrierId = $configuration->get(Config::MOLLIE_SUBSCRIPTION_ORDER_CARRIER_ID); + + if (empty($oldCarrierId) || empty($newCarrierId)) { + $this->addFlash( + 'error', + $this->module->l('Carrier not found', self::FILE_NAME) + ); + } + + /** @var UpdateSubscriptionCarrierHandler $subscriptionCarrierUpdateHandler */ + $subscriptionCarrierUpdateHandler = $this->module->getService(UpdateSubscriptionCarrierHandler::class); + + /** @var PrestaLoggerInterface $logger */ + $logger = $this->module->getService(PrestaLoggerInterface::class); + + $failedSubscriptionOrderIdsToUpdate = $subscriptionCarrierUpdateHandler->run($newCarrierId); + + if (!empty($failedSubscriptionOrderIdsToUpdate)) { + $logger->error('Failed to update subscription carrier for all orders.', [ + 'failed_subscription_order_ids' => json_encode($failedSubscriptionOrderIdsToUpdate), + ]); + } + } + /** * Provides filters functionality. * diff --git a/subscription/Repository/RecurringOrderRepository.php b/subscription/Repository/RecurringOrderRepository.php index 684d37378..3e70cb39e 100644 --- a/subscription/Repository/RecurringOrderRepository.php +++ b/subscription/Repository/RecurringOrderRepository.php @@ -35,8 +35,8 @@ public function getAllOrdersBasedOnStatuses(array $statuses, int $shopId): array ->select( 'mro.id_mol_recurring_order as id, mro.mollie_subscription_id, mro.mollie_customer_id, mro.id_cart, - mro.id_mol_recurring_product as id_recurring_product, - mro.id_invoice_address, mro.id_delivery_address' + mro.id_mol_recurring_orders_product as id_recurring_product, + mro.id_address_invoice, mro.id_delivery_address' ) ->from('mol_recurring_order', 'mro') ->leftJoin( diff --git a/views/templates/admin/Subscription/subscriptions-settings.html.twig b/views/templates/admin/Subscription/subscriptions-settings.html.twig index 24810deb6..b7980fd6b 100644 --- a/views/templates/admin/Subscription/subscriptions-settings.html.twig +++ b/views/templates/admin/Subscription/subscriptions-settings.html.twig @@ -9,6 +9,8 @@ * @codingStandardsIgnoreStart *#} +{% import '@PrestaShop/Admin/macros.html.twig' as ps %} + {% set subscriptionOptions = subscriptionOptionsForm %} {% if subscriptionOptionsForm.subscription_options is defined and subscriptionOptionsForm.subscription_options %}