diff --git a/mollie-payments-for-woocommerce.php b/mollie-payments-for-woocommerce.php index 7fc6a19d..e5805eff 100644 --- a/mollie-payments-for-woocommerce.php +++ b/mollie-payments-for-woocommerce.php @@ -3,7 +3,7 @@ * Plugin Name: Mollie Payments for WooCommerce * Plugin URI: https://www.mollie.com * Description: Accept payments in WooCommerce with the official Mollie plugin - * Version: 7.4.1 + * Version: 7.5.0-beta1 * Author: Mollie * Author URI: https://www.mollie.com * Requires at least: 5.0 diff --git a/src/Gateway/GatewayModule.php b/src/Gateway/GatewayModule.php index e0a9bdb3..d73dfb51 100644 --- a/src/Gateway/GatewayModule.php +++ b/src/Gateway/GatewayModule.php @@ -105,7 +105,7 @@ public function services(): array }, 'gateway.getKlarnaPaymentMethodsAfterFeatureFlag' => static function (ContainerInterface $container): array { $availablePaymentMethods = $container->get('gateway.listAllMethodsAvailable'); - $klarnaOneFlag = apply_filters('inpsyde.feature-flags.mollie-woocommerce.klarna_one_enabled', getenv('MOL_KLARNA_ENABLED') === '1'); + $klarnaOneFlag = apply_filters('inpsyde.feature-flags.mollie-woocommerce.klarna_one_enabled', true); if (!$klarnaOneFlag) { return array_filter($availablePaymentMethods, static function ($method) { return $method['id'] !== Constants::KLARNA; diff --git a/src/MerchantCapture/Capture/Action/VoidPayment.php b/src/MerchantCapture/Capture/Action/VoidPayment.php index 0ef1d152..1b19a464 100644 --- a/src/MerchantCapture/Capture/Action/VoidPayment.php +++ b/src/MerchantCapture/Capture/Action/VoidPayment.php @@ -25,7 +25,7 @@ public function __invoke() $this->logger->error($exception->getMessage()); $this->order->add_order_note( __( - 'Payment Void Failed. We encountered an issue while canceling the pre-authorized payment.', + 'Payment cancelation failed. We encountered an issue while canceling the pre-authorized payment.', 'mollie-payments-for-woocommerce' ) ); diff --git a/src/MerchantCapture/Capture/Type/StateChangeCapture.php b/src/MerchantCapture/Capture/Type/StateChangeCapture.php index 9e9ec3e8..1bafca2d 100644 --- a/src/MerchantCapture/Capture/Type/StateChangeCapture.php +++ b/src/MerchantCapture/Capture/Type/StateChangeCapture.php @@ -19,7 +19,16 @@ class StateChangeCapture public function __construct(ContainerInterface $container) { $this->container = $container; + $pluginId = $container->get('shared.plugin_id'); + add_action('woocommerce_order_status_changed', [$this, "orderStatusChange"], 10, 3); + + /** When the webhook process is activated we don't need automatic status change. Status change is handled + * by the webhook logic. + */ + add_action($pluginId . '_before_webhook_payment_action', function () { + remove_action('woocommerce_order_status_changed', [$this, "orderStatusChange"]); + }); } public function orderStatusChange(int $orderId, string $oldStatus, string $newStatus) diff --git a/src/MerchantCapture/MerchantCaptureModule.php b/src/MerchantCapture/MerchantCaptureModule.php index 477f7153..a3177f88 100644 --- a/src/MerchantCapture/MerchantCaptureModule.php +++ b/src/MerchantCapture/MerchantCaptureModule.php @@ -144,29 +144,55 @@ public function services(): array public function run(ContainerInterface $container): bool { - $pluginId = $container->get('shared.plugin_id'); - $captureSettings = new MollieCaptureSettings(); - add_action( - /** - * @throws \WC_Data_Exception - */ $pluginId . '_after_webhook_action', - static function (Payment $payment, WC_Order $order) use ($container) { - if ($payment->isAuthorized()) { - if (!$payment->getAmountCaptured() == 0.0) { - return; + add_action('init', static function () use ($container) { + $pluginId = $container->get('shared.plugin_id'); + $captureSettings = new MollieCaptureSettings(); + if (!apply_filters('mollie_wc_gateway_enable_merchant_capture_module', true)) { + return; + } + + add_action( + $pluginId . '_after_webhook_action', + static function (Payment $payment, WC_Order $order) use ($container) { + + if ($payment->isAuthorized()) { + if (!$payment->getAmountCaptured() == 0.0) { + return; + } + $order->set_status(SharedDataDictionary::STATUS_ON_HOLD); + $order->update_meta_data( + self::ORDER_PAYMENT_STATUS_META_KEY, + ManualCaptureStatus::STATUS_AUTHORIZED + ); + $order->set_transaction_id($payment->id); + $order->save(); + } elseif ( + $payment->isPaid() && ( + ($container->get('merchant.manual_capture.is_waiting'))($order) || + ($container->get('merchant.manual_capture.is_authorized'))($order) + ) + ) { + $order->update_meta_data( + self::ORDER_PAYMENT_STATUS_META_KEY, + ManualCaptureStatus::STATUS_CAPTURED + ); + $order->save(); + } elseif ( + $payment->isCanceled() && ( + ($container->get('merchant.manual_capture.is_waiting'))($order) || + ($container->get('merchant.manual_capture.is_authorized'))($order) + ) + ) { + $order->update_meta_data( + self::ORDER_PAYMENT_STATUS_META_KEY, + ManualCaptureStatus::STATUS_VOIDED + ); + $order->save(); } - $order->set_status(SharedDataDictionary::STATUS_ON_HOLD); - $order->update_meta_data(self::ORDER_PAYMENT_STATUS_META_KEY, ManualCaptureStatus::STATUS_AUTHORIZED); - $order->set_transaction_id($payment->id); - $order->save(); - } elseif ($payment->isPaid() && ($container->get('merchant.manual_capture.is_waiting'))($order)) { - $order->update_meta_data(self::ORDER_PAYMENT_STATUS_META_KEY, ManualCaptureStatus::STATUS_CAPTURED); - $order->save(); - } - }, - 10, - 2 - ); + }, + 10, + 2 + ); add_action('woocommerce_order_refunded', static function (int $orderId) use ($container) { $order = wc_get_order($orderId); @@ -209,7 +235,7 @@ static function ($disableShipAndCapture, WC_Order $order) use ($container) { if ($disableShipAndCapture) { return true; } - return $container->get('merchant.manual_capture.is_waiting')($order); + return $container->get('merchant.manual_capture.is_waiting')($order) || $container->get('merchant.manual_capture.is_authorized')($order); }, 10, 2 @@ -223,6 +249,8 @@ static function ($disableShipAndCapture, WC_Order $order) use ($container) { new OrderListPaymentColumn(); new ManualCapture($container); new StateChangeCapture($container); + }); + return true; } } diff --git a/src/MerchantCapture/MollieCaptureSettings.php b/src/MerchantCapture/MollieCaptureSettings.php index f263c1b4..cf5b9a9a 100644 --- a/src/MerchantCapture/MollieCaptureSettings.php +++ b/src/MerchantCapture/MollieCaptureSettings.php @@ -26,7 +26,7 @@ public function settings(array $advancedSettings, string $pluginName): array 'default' => 'immediate_capture', 'desc' => sprintf( __( - 'Authorized payment can be captured or voided by changing the order status instead of doing it manually.', + 'Authorized payment can be captured or canceled by changing the order status instead of doing it manually.', 'mollie-payments-for-woocommerce' ) ), @@ -34,13 +34,13 @@ public function settings(array $advancedSettings, string $pluginName): array [ 'id' => $pluginName . '_capture_or_void', 'title' => __( - 'Capture or void on status change', + 'Capture or cancel on status change', 'mollie-payments-for-woocommerce' ), 'type' => 'checkbox', 'default' => 'no', 'desc' => __( - 'Capture authorized payments automatically when setting the order status to Processing or Completed. Void the payment by setting the order status Canceled.', + 'Capture authorized payments automatically when setting the order status to Processing or Completed. Cancel the payment by setting the order status Canceled.', 'mollie-payments-for-woocommerce' ), ], diff --git a/src/MerchantCapture/UI/StatusRenderer.php b/src/MerchantCapture/UI/StatusRenderer.php index b23f9a63..5da2f856 100644 --- a/src/MerchantCapture/UI/StatusRenderer.php +++ b/src/MerchantCapture/UI/StatusRenderer.php @@ -18,7 +18,7 @@ public function __invoke(string $molliePaymentStatus) ); } elseif ($molliePaymentStatus === ManualCaptureStatus::STATUS_VOIDED) { (new StatusButton())( - __('Payment voided', 'mollie-payments-for-woocommerce'), + __('Payment canceled', 'mollie-payments-for-woocommerce'), SharedDataDictionary::STATUS_CANCELLED ); } elseif ($molliePaymentStatus === ManualCaptureStatus::STATUS_CAPTURED) { diff --git a/src/Payment/MollieOrderService.php b/src/Payment/MollieOrderService.php index b336ef56..ede0c6d0 100644 --- a/src/Payment/MollieOrderService.php +++ b/src/Payment/MollieOrderService.php @@ -167,6 +167,7 @@ public function onWebhookAction() } if (method_exists($payment_object, $method_name)) { + do_action($this->pluginId . '_before_webhook_payment_action', $payment, $order); $payment_object->{$method_name}($order, $payment, $payment_method_title); } else { $order->add_order_note(sprintf(