Add updating refund fees in order

This commit is contained in:
Pedro Silva 2023-08-04 17:51:32 +01:00
parent 4027f4a77e
commit d32aaab1af
No known key found for this signature in database
GPG key ID: E2EE20C0669D24B3
8 changed files with 212 additions and 25 deletions

View file

@ -80,6 +80,7 @@ return array(
$order_endpoint = $container->get( 'api.endpoint.order' );
$authorized_payments_processor = $container->get( 'wcgateway.processor.authorized-payments' );
$payment_token_factory = $container->get( 'vaulting.payment-token-factory' );
$refund_fees_updater = $container->get( 'wcgateway.helper.refund-fees-updater' );
return array(
new CheckoutOrderApproved(
@ -91,14 +92,14 @@ return array(
),
new CheckoutOrderCompleted( $logger ),
new CheckoutPaymentApprovalReversed( $logger ),
new PaymentCaptureRefunded( $logger ),
new PaymentCaptureRefunded( $logger, $refund_fees_updater ),
new PaymentCaptureReversed( $logger ),
new PaymentCaptureCompleted( $logger, $order_endpoint ),
new VaultPaymentTokenCreated( $logger, $prefix, $authorized_payments_processor, $payment_token_factory ),
new VaultPaymentTokenDeleted( $logger ),
new PaymentCapturePending( $logger ),
new PaymentSaleCompleted( $logger ),
new PaymentSaleRefunded( $logger ),
new PaymentSaleRefunded( $logger, $refund_fees_updater ),
new BillingSubscriptionCancelled( $logger ),
new BillingPlanPricingChangeActivated( $logger ),
new CatalogProductUpdated( $logger ),

View file

@ -11,6 +11,7 @@ namespace WooCommerce\PayPalCommerce\Webhooks\Handler;
use Psr\Log\LoggerInterface;
use WC_Order;
use WooCommerce\PayPalCommerce\WcGateway\Helper\RefundFeesUpdater;
use WooCommerce\PayPalCommerce\WcGateway\Processor\RefundMetaTrait;
use WooCommerce\PayPalCommerce\WcGateway\Processor\TransactionIdHandlingTrait;
use WP_Error;
@ -31,13 +32,22 @@ class PaymentCaptureRefunded implements RequestHandler {
*/
private $logger;
/**
* The refund fees updater.
*
* @var RefundFeesUpdater
*/
private $refund_fees_updater;
/**
* PaymentCaptureRefunded constructor.
*
* @param LoggerInterface $logger The logger.
* @param LoggerInterface $logger The logger.
* @param RefundFeesUpdater $refund_fees_updater The refund fees updater.
*/
public function __construct( LoggerInterface $logger ) {
$this->logger = $logger;
public function __construct( LoggerInterface $logger, RefundFeesUpdater $refund_fees_updater ) {
$this->logger = $logger;
$this->refund_fees_updater = $refund_fees_updater;
}
/**
@ -68,9 +78,11 @@ class PaymentCaptureRefunded implements RequestHandler {
* @return WP_REST_Response
*/
public function handle_request( WP_REST_Request $request ): WP_REST_Response {
$order_id = isset( $request['resource']['custom_id'] ) ?
$request['resource']['custom_id'] : 0;
$refund_id = (string) ( $request['resource']['id'] ?? '' );
$resource = ( $request['resource'] ?? array() ) ?: array();
$order_id = $resource['custom_id'] ?? 0;
$refund_id = (string) ( $resource['id'] ?? '' );
if ( ! $order_id ) {
$message = sprintf(
'No order for webhook event %s was found.',
@ -122,6 +134,7 @@ class PaymentCaptureRefunded implements RequestHandler {
if ( $refund_id ) {
$this->update_transaction_id( $refund_id, $wc_order, $this->logger );
$this->add_refund_to_meta( $wc_order, $refund_id );
$this->refund_fees_updater->update( $wc_order );
}
return $this->success_response();

View file

@ -10,6 +10,7 @@ declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\Webhooks\Handler;
use Psr\Log\LoggerInterface;
use WooCommerce\PayPalCommerce\WcGateway\Helper\RefundFeesUpdater;
use WooCommerce\PayPalCommerce\WcGateway\Processor\RefundMetaTrait;
use WooCommerce\PayPalCommerce\WcGateway\Processor\TransactionIdHandlingTrait;
use WP_Error;
@ -30,13 +31,22 @@ class PaymentSaleRefunded implements RequestHandler {
*/
private $logger;
/**
* The refund fees updater.
*
* @var RefundFeesUpdater
*/
private $refund_fees_updater;
/**
* PaymentSaleRefunded constructor.
*
* @param LoggerInterface $logger The logger.
* @param LoggerInterface $logger The logger.
* @param RefundFeesUpdater $refund_fees_updater The refund fees updater.
*/
public function __construct( LoggerInterface $logger ) {
$this->logger = $logger;
public function __construct( LoggerInterface $logger, RefundFeesUpdater $refund_fees_updater ) {
$this->logger = $logger;
$this->refund_fees_updater = $refund_fees_updater;
}
/**
@ -120,6 +130,7 @@ class PaymentSaleRefunded implements RequestHandler {
$this->update_transaction_id( $refund_id, $wc_order, $this->logger );
$this->add_refund_to_meta( $wc_order, $refund_id );
$this->refund_fees_updater->update( $wc_order );
}
return $this->success_response();