Advertisement
palsushobhan

wcfm-transaction-bear-by-vendor.php

Aug 18th, 2021 (edited)
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.64 KB | None | 0 0
  1. function calculate_transaction_charge_for_vendor_order_item($order_item_id, $vendor_id, $commission_rule) {
  2.     $transacton_charge_meta_key = '_wcfmmp_vendor_only_transaction_charge';
  3.     if($transaction_charge = wc_get_order_item_meta( $order_item_id, $transacton_charge_meta_key, true )) {
  4.         return $transaction_charge;
  5.     }
  6.    
  7.     $line_item = new WC_Order_Item_Product($order_item_id);
  8.     $line_item_total = $line_item->get_total() + $line_item->get_total_tax();
  9.  
  10.     $order = $line_item->get_order();
  11.     $line_items = $order->get_items( 'line_item' );
  12.     $vendors = array();
  13.     foreach ($line_items as $item) {
  14.         $order_item = new WC_Order_Item_Product($item);
  15.         $product_id = $order_item->get_product_id();
  16.         $store_id = wcfm_get_vendor_id_by_post($product_id);
  17.         if ($store_id && !in_array($store_id, $vendors)) {
  18.             $vendors[] = $store_id;
  19.         }
  20.     }
  21.     $shipping_items = $order->get_items( 'shipping' );
  22.     $package_qty = 1;
  23.     foreach ( $shipping_items as $shipping_item ) {
  24.         $order_item_shipping = new WC_Order_Item_Shipping( $shipping_item );
  25.         $shipping_vendor_id = $order_item_shipping->get_meta( 'vendor_id', true );
  26.         if ( ( $shipping_vendor_id > 0 ) && ( $shipping_vendor_id == $vendor_id ) ) {
  27.             $shipping_item_total = $order_item_shipping->get_total() + $order_item_shipping->get_total_tax();
  28.             $package_qty = $order_item_shipping->get_meta('package_qty', true);
  29.             if($package_qty > 0 && $shipping_item_total > 0) {
  30.                 $line_item_total += $shipping_item_total / $package_qty;
  31.             }
  32.         }
  33.     }
  34.  
  35.     $total_transaction_charge = 0;
  36.     if( ( $commission_rule['transaction_charge_type'] == 'percent' ) || ( $commission_rule['transaction_charge_type'] == 'percent_fixed' ) ) {
  37.         $total_transaction_charge  += $line_item_total * ( (float)$commission_rule['transaction_charge_percent'] / 100 );
  38.     }
  39.     if( ( $commission_rule['transaction_charge_type'] == 'fixed' ) || ( $commission_rule['transaction_charge_type'] == 'percent_fixed' ) ) {
  40.         $total_transaction_charge  += (float)$commission_rule['transaction_charge_fixed'] / ( count($vendors) * $package_qty );
  41.     }
  42.     $transaction_charge = round( $total_transaction_charge, 2 );
  43.    
  44.     if( !get_post_meta( $order->get_id(), '_wcfmmp_vendor_transacton_charge_adjusted_'.$vendor_id, true ) ) {
  45.         update_post_meta( $order->get_id(), '_wcfmmp_vendor_transacton_charge_adjusted_'.$vendor_id, 'yes' );
  46.     }
  47.  
  48.     wc_update_order_item_meta( $order_item_id, $transacton_charge_meta_key, $transaction_charge );
  49.     return $transaction_charge;
  50. }
  51. //Transaction charge fully bear by vendor. Admin will not contribute
  52. add_filter( 'wcfmmp_commission_deducted_transaction_charge', function($transaction_charge, $vendor_id, $product_id, $order_id, $total_commission, $commission_rule, $order_item_id ) {
  53.     return calculate_transaction_charge_for_vendor_order_item($order_item_id, $vendor_id, $commission_rule);
  54. }, 10, 7 );
  55. //Delete order meta keys on Order reset
  56. add_action( 'wcfm_manual_order_processed', function( $order_id, $order_posted, $order = '' ) {
  57.     global $wpdb;
  58.     if ( ! $order_id ) return;
  59.     if ( ! $order ) $order = wc_get_order( $order_id );
  60.     if ( ! is_a( $order, 'WC_Order' ) ) return;
  61.  
  62.     $marketplace_orders = $wpdb->get_results(  $wpdb->prepare( "SELECT ID, item_id from {$wpdb->prefix}wcfm_marketplace_orders WHERE order_id = %d", $order_id ) );
  63.     foreach( $marketplace_orders as $marketplace_order ) {
  64.         wc_delete_order_item_meta( $marketplace_order->item_id, '_wcfmmp_vendor_only_transaction_charge' );
  65.     }
  66. }, 10, 3 );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement