ject. * @param int $order_id The ID of the main order. * @param string $new_status The new status of the order. * @param bool $exclude_cod_option The value of the 'exclude COD' setting. * @param WC_Order $refund_order The specific refund order object. */ $should_exclude_cod_payment = apply_filters( 'dokan_order_refund_should_exclude_from_vendor_balance', $should_exclude_cod_payment, $order, $order_id, $new_status, $exclude_cod_option, $refund_order, ); if ( $should_exclude_cod_payment ) { return false; } return $ret; } /** * Get the refunded tax amount for the vendor. * * @since 4.0.0 * * @param \WC_Order_Refund $refund_order The refund object. * @param \WC_Order $order The original order object. * * @return float */ protected function get_tax_refund( \WC_Order_Refund $refund_order, \WC_Order $order ): float { $tax_refund = 0; $shipping_tax_refund = 0; foreach ( $refund_order->get_items( 'tax' ) as $tax_item ) { $tax_data = $tax_item->get_data(); $tax_refund += floatval( $tax_data['tax_total'] ); $shipping_tax_refund += floatval( $tax_data['shipping_tax_total'] ); } $vendor_tax_refund = 0; if ( 'seller' === dokan()->fees->get_tax_fee_recipient( $order ) ) { $vendor_tax_refund += $tax_refund; } if ( 'seller' === dokan()->fees->get_shipping_tax_fee_recipient( $order ) ) { $vendor_tax_refund += $shipping_tax_refund; } return abs( $vendor_tax_refund ); } /** * Get the refunded shipping amount for the vendor. * * @since 4.0.0 * * @param \WC_Order_Refund $refund_order The refund object. * @param \WC_Order $order The original order object. * * @return float */ protected function get_shipping_refund( \WC_Order_Refund $refund_order, \WC_Order $order ): float { $shipping_refund = 0; if ( 'seller' !== dokan()->fees->get_shipping_fee_recipient( $order->get_id() ) ) { return 0; } foreach ( $refund_order->get_items( 'shipping' ) as $item ) { $shipping_refund += $item->get_total(); } return abs( $shipping_refund ); } /** * Insert a refund record into the Dokan vendor balance table. * * @since 4.0.0 * * @param float $vendor_refund The amount to refund the vendor. * @param \WC_Order_Refund $order The original order object. * @param \WC_Order $order The original order object. * * @return void */ public function insert_into_balance_table( $vendor_refund_amount, $refund_order, $order ) { global $wpdb; $seller_id = dokan_get_seller_id_by_order( $order ); if ( ! $seller_id ) { dokan_log( sprintf( // translators: 1: Order ID, 2: Refund ID, 3: Refund Amount __( 'Dokan refund adjustment error: Seller not found, Order ID: %1$d, Refund ID: %2$d, Refund Amount: %3$f ', 'dokan-lite' ), $order->get_id(), $refund_order->get_id, $vendor_refund_amount ) ); return; } $vendor_refund_amount = apply_filters( 'dokan_vendor_refund_amount_before_insert', $vendor_refund_amount, $order, $refund_order ); if ( ! apply_filters( 'dokan_refund_should_insert_into_vendor_balance', $vendor_refund_amount > 0, $refund_order, $order ) ) { return; } $refund_reason = $refund_order->get_reason(); if ( $refund_reason ) { $refund_reason = __( 'Refunded by Dokan', 'dokan-lite' ); } $wpdb->insert( $wpdb->dokan_vendor_balance, [ 'vendor_id' => $seller_id, 'trn_id' => $order->get_id(), 'trn_type' => 'dokan_refund', 'perticulars' => $refund_reason, 'debit' => 0, 'credit' => $vendor_refund_amount, 'status' => 'approved', 'trn_date' => current_time( 'mysql' ), 'balance_date' => current_time( 'mysql' ), ], [ '%d', '%d', '%s', '%s', '%f', '%f', '%s', '%s', '%s' ] ); } /** * Update order table with new refund amount * * @param float $vendor_refund * @param \WC_Order_Refund $refund_order * @param \WC_Order $order */ public function update_order_amounts( $vendor_refund, $refund_order, $order ) { global $wpdb; $order_data = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->dokan_orders WHERE order_id = %d", $order->get_id() ) ); if ( isset( $order_data->order_total, $order_data->net_amount ) ) { $new_total_amount = $order_data->order_total - abs( $refund_order->get_total() ); $new_net_amount = $order_data->net_amount - $vendor_refund; // Prevent negative net amount $new_net_amount = ( $new_net_amount < 0 ) ? 0.00 : $new_net_amount; $wpdb->update( $wpdb->dokan_orders, [ 'order_total' => $new_total_amount, 'net_amount' => $new_net_amount, ], [ 'order_id' => $order->get_id(), ], [ '%f', '%f', ], [ '%d', ] ); } do_action( 'dokan_refund_after_dokan_orders_updated', $vendor_refund, $refund_order, $order ); } /** * Clear order related caches * * @param float $vendor_refund * @param \WC_Order_Refund $refund_order * @param \WC_Order $order */ public function clear_order_caches( $vendor_refund, $refund_order, $order ) { $order_id = $order->get_id(); // Clear seller earning cache $cache_key = "get_earning_from_order_table_{$order_id}_seller"; Cache::delete( $cache_key ); // Clear admin earning cache $cache_key = "get_earning_from_order_table_{$order_id}_admin"; Cache::delete( $cache_key ); } } ject. * @param int $order_id The ID of the main order. * @param string $new_status The new status of the order. * @param bool $exclude_cod_option The value of the 'exclude COD' setting. * @param WC_Order $refund_order The specific refund order object. */ $should_exclude_cod_payment = apply_filters( 'dokan_order_refund_should_exclude_from_vendor_balance', $should_exclude_cod_payment, $order, $order_id, $new_status, $exclude_cod_option, $refund_order, ); if ( $should_exclude_cod_payment ) { return false; } return $ret; } /** * Get the refunded tax amount for the vendor. * * @since 4.0.0 * * @param \WC_Order_Refund $refund_order The refund object. * @param \WC_Order $order The original order object. * * @return float */ protected function get_tax_refund( \WC_Order_Refund $refund_order, \WC_Order $order ): float { $tax_refund = 0; $shipping_tax_refund = 0; foreach ( $refund_order->get_items( 'tax' ) as $tax_item ) { $tax_data = $tax_item->get_data(); $tax_refund += floatval( $tax_data['tax_total'] ); $shipping_tax_refund += floatval( $tax_data['shipping_tax_total'] ); } $vendor_tax_refund = 0; if ( 'seller' === dokan()->fees->get_tax_fee_recipient( $order ) ) { $vendor_tax_refund += $tax_refund; } if ( 'seller' === dokan()->fees->get_shipping_tax_fee_recipient( $order ) ) { $vendor_tax_refund += $shipping_tax_refund; } return abs( $vendor_tax_refund ); } /** * Get the refunded shipping amount for the vendor. * * @since 4.0.0 * * @param \WC_Order_Refund $refund_order The refund object. * @param \WC_Order $order The original order object. * * @return float */ protected function get_shipping_refund( \WC_Order_Refund $refund_order, \WC_Order $order ): float { $shipping_refund = 0; if ( 'seller' !== dokan()->fees->get_shipping_fee_recipient( $order->get_id() ) ) { return 0; } foreach ( $refund_order->get_items( 'shipping' ) as $item ) { $shipping_refund += $item->get_total(); } return abs( $shipping_refund ); } /** * Insert a refund record into the Dokan vendor balance table. * * @since 4.0.0 * * @param float $vendor_refund The amount to refund the vendor. * @param \WC_Order_Refund $order The original order object. * @param \WC_Order $order The original order object. * * @return void */ public function insert_into_balance_table( $vendor_refund_amount, $refund_order, $order ) { global $wpdb; $seller_id = dokan_get_seller_id_by_order( $order ); if ( ! $seller_id ) { dokan_log( sprintf( // translators: 1: Order ID, 2: Refund ID, 3: Refund Amount __( 'Dokan refund adjustment error: Seller not found, Order ID: %1$d, Refund ID: %2$d, Refund Amount: %3$f ', 'dokan-lite' ), $order->get_id(), $refund_order->get_id, $vendor_refund_amount ) ); return; } $vendor_refund_amount = apply_filters( 'dokan_vendor_refund_amount_before_insert', $vendor_refund_amount, $order, $refund_order ); if ( ! apply_filters( 'dokan_refund_should_insert_into_vendor_balance', $vendor_refund_amount > 0, $refund_order, $order ) ) { return; } $refund_reason = $refund_order->get_reason(); if ( $refund_reason ) { $refund_reason = __( 'Refunded by Dokan', 'dokan-lite' ); } $wpdb->insert( $wpdb->dokan_vendor_balance, [ 'vendor_id' => $seller_id, 'trn_id' => $order->get_id(), 'trn_type' => 'dokan_refund', 'perticulars' => $refund_reason, 'debit' => 0, 'credit' => $vendor_refund_amount, 'status' => 'approved', 'trn_date' => current_time( 'mysql' ), 'balance_date' => current_time( 'mysql' ), ], [ '%d', '%d', '%s', '%s', '%f', '%f', '%s', '%s', '%s' ] ); } /** * Update order table with new refund amount * * @param float $vendor_refund * @param \WC_Order_Refund $refund_order * @param \WC_Order $order */ public function update_order_amounts( $vendor_refund, $refund_order, $order ) { global $wpdb; $order_data = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->dokan_orders WHERE order_id = %d", $order->get_id() ) ); if ( isset( $order_data->order_total, $order_data->net_amount ) ) { $new_total_amount = $order_data->order_total - abs( $refund_order->get_total() ); $new_net_amount = $order_data->net_amount - $vendor_refund; // Prevent negative net amount $new_net_amount = ( $new_net_amount < 0 ) ? 0.00 : $new_net_amount; $wpdb->update( $wpdb->dokan_orders, [ 'order_total' => $new_total_amount, 'net_amount' => $new_net_amount, ], [ 'order_id' => $order->get_id(), ], [ '%f', '%f', ], [ '%d', ] ); } do_action( 'dokan_refund_after_dokan_orders_updated', $vendor_refund, $refund_order, $order ); } /** * Clear order related caches * * @param float $vendor_refund * @param \WC_Order_Refund $refund_order * @param \WC_Order $order */ public function clear_order_caches( $vendor_refund, $refund_order, $order ) { $order_id = $order->get_id(); // Clear seller earning cache $cache_key = "get_earning_from_order_table_{$order_id}_seller"; Cache::delete( $cache_key ); // Clear admin earning cache $cache_key = "get_earning_from_order_table_{$order_id}_admin"; Cache::delete( $cache_key ); } } ject. * @param int $order_id The ID of the main order. * @param string $new_status The new status of the order. * @param bool $exclude_cod_option The value of the 'exclude COD' setting. * @param WC_Order $refund_order The specific refund order object. */ $should_exclude_cod_payment = apply_filters( 'dokan_order_refund_should_exclude_from_vendor_balance', $should_exclude_cod_payment, $order, $order_id, $new_status, $exclude_cod_option, $refund_order, ); if ( $should_exclude_cod_payment ) { return false; } return $ret; } /** * Get the refunded tax amount for the vendor. * * @since 4.0.0 * * @param \WC_Order_Refund $refund_order The refund object. * @param \WC_Order $order The original order object. * * @return float */ protected function get_tax_refund( \WC_Order_Refund $refund_order, \WC_Order $order ): float { $tax_refund = 0; $shipping_tax_refund = 0; foreach ( $refund_order->get_items( 'tax' ) as $tax_item ) { $tax_data = $tax_item->get_data(); $tax_refund += floatval( $tax_data['tax_total'] ); $shipping_tax_refund += floatval( $tax_data['shipping_tax_total'] ); } $vendor_tax_refund = 0; if ( 'seller' === dokan()->fees->get_tax_fee_recipient( $order ) ) { $vendor_tax_refund += $tax_refund; } if ( 'seller' === dokan()->fees->get_shipping_tax_fee_recipient( $order ) ) { $vendor_tax_refund += $shipping_tax_refund; } return abs( $vendor_tax_refund ); } /** * Get the refunded shipping amount for the vendor. * * @since 4.0.0 * * @param \WC_Order_Refund $refund_order The refund object. * @param \WC_Order $order The original order object. * * @return float */ protected function get_shipping_refund( \WC_Order_Refund $refund_order, \WC_Order $order ): float { $shipping_refund = 0; if ( 'seller' !== dokan()->fees->get_shipping_fee_recipient( $order->get_id() ) ) { return 0; } foreach ( $refund_order->get_items( 'shipping' ) as $item ) { $shipping_refund += $item->get_total(); } return abs( $shipping_refund ); } /** * Insert a refund record into the Dokan vendor balance table. * * @since 4.0.0 * * @param float $vendor_refund The amount to refund the vendor. * @param \WC_Order_Refund $order The original order object. * @param \WC_Order $order The original order object. * * @return void */ public function insert_into_balance_table( $vendor_refund_amount, $refund_order, $order ) { global $wpdb; $seller_id = dokan_get_seller_id_by_order( $order ); if ( ! $seller_id ) { dokan_log( sprintf( // translators: 1: Order ID, 2: Refund ID, 3: Refund Amount __( 'Dokan refund adjustment error: Seller not found, Order ID: %1$d, Refund ID: %2$d, Refund Amount: %3$f ', 'dokan-lite' ), $order->get_id(), $refund_order->get_id, $vendor_refund_amount ) ); return; } $vendor_refund_amount = apply_filters( 'dokan_vendor_refund_amount_before_insert', $vendor_refund_amount, $order, $refund_order ); if ( ! apply_filters( 'dokan_refund_should_insert_into_vendor_balance', $vendor_refund_amount > 0, $refund_order, $order ) ) { return; } $refund_reason = $refund_order->get_reason(); if ( $refund_reason ) { $refund_reason = __( 'Refunded by Dokan', 'dokan-lite' ); } $wpdb->insert( $wpdb->dokan_vendor_balance, [ 'vendor_id' => $seller_id, 'trn_id' => $order->get_id(), 'trn_type' => 'dokan_refund', 'perticulars' => $refund_reason, 'debit' => 0, 'credit' => $vendor_refund_amount, 'status' => 'approved', 'trn_date' => current_time( 'mysql' ), 'balance_date' => current_time( 'mysql' ), ], [ '%d', '%d', '%s', '%s', '%f', '%f', '%s', '%s', '%s' ] ); } /** * Update order table with new refund amount * * @param float $vendor_refund * @param \WC_Order_Refund $refund_order * @param \WC_Order $order */ public function update_order_amounts( $vendor_refund, $refund_order, $order ) { global $wpdb; $order_data = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->dokan_orders WHERE order_id = %d", $order->get_id() ) ); if ( isset( $order_data->order_total, $order_data->net_amount ) ) { $new_total_amount = $order_data->order_total - abs( $refund_order->get_total() ); $new_net_amount = $order_data->net_amount - $vendor_refund; // Prevent negative net amount $new_net_amount = ( $new_net_amount < 0 ) ? 0.00 : $new_net_amount; $wpdb->update( $wpdb->dokan_orders, [ 'order_total' => $new_total_amount, 'net_amount' => $new_net_amount, ], [ 'order_id' => $order->get_id(), ], [ '%f', '%f', ], [ '%d', ] ); } do_action( 'dokan_refund_after_dokan_orders_updated', $vendor_refund, $refund_order, $order ); } /** * Clear order related caches * * @param float $vendor_refund * @param \WC_Order_Refund $refund_order * @param \WC_Order $order */ public function clear_order_caches( $vendor_refund, $refund_order, $order ) { $order_id = $order->get_id(); // Clear seller earning cache $cache_key = "get_earning_from_order_table_{$order_id}_seller"; Cache::delete( $cache_key ); // Clear admin earning cache $cache_key = "get_earning_from_order_table_{$order_id}_admin"; Cache::delete( $cache_key ); } }
Warning: Cannot modify header information - headers already sent by (output started at /htdocs/wp-content/plugins/dokan-lite/includes/Order/RefundHandler.php:1) in /htdocs/wp-content/plugins/lws-optimize/Classes/FileCache/LwsOptimizeFileCache.php on line 125

Warning: Cannot modify header information - headers already sent by (output started at /htdocs/wp-content/plugins/dokan-lite/includes/Order/RefundHandler.php:1) in /htdocs/wp-content/plugins/lws-optimize/Classes/FileCache/LwsOptimizeFileCache.php on line 135

Warning: Cannot modify header information - headers already sent by (output started at /htdocs/wp-content/plugins/dokan-lite/includes/Order/RefundHandler.php:1) in /htdocs/wp-content/plugins/lws-optimize/Classes/FileCache/LwsOptimizeFileCache.php on line 136
https://galerieartea.fr/post-sitemap.xml 2025-09-05T08:30:40+00:00 https://galerieartea.fr/page-sitemap.xml 2026-05-07T11:02:59+00:00 https://galerieartea.fr/product-sitemap.xml 2026-05-05T21:15:45+00:00 https://galerieartea.fr/category-sitemap.xml 2025-09-05T08:30:40+00:00 https://galerieartea.fr/product_brand-sitemap.xml 2026-05-05T21:15:45+00:00 https://galerieartea.fr/product_cat-sitemap.xml 2026-05-05T21:15:45+00:00 https://galerieartea.fr/product_tag-sitemap.xml 2026-05-05T21:15:45+00:00 https://galerieartea.fr/author-sitemap.xml 2026-04-22T11:41:07+00:00