/**
  * Vendor Commission withdrawl
  */
 function vendor_withdrawl()
 {
     global $WCMp;
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         if (isset($_POST['vendor_get_paid'])) {
             $vendor = get_wcmp_vendor(get_current_user_id());
             //check unpaid commission threshold
             $total_vendor_due = $vendor->wcmp_vendor_get_total_amount_due();
             $get_vendor_thresold = 0;
             if (isset($WCMp->vendor_caps->payment_cap['commission_threshold'])) {
                 $get_vendor_thresold = (double) $WCMp->vendor_caps->payment_cap['commission_threshold'];
             }
             if ($get_vendor_thresold > $total_vendor_due) {
                 return;
             }
             $transaction_data = array();
             if (!empty($_POST['check_order_number'])) {
                 foreach ($_POST['check_order_number'] as $commission) {
                     $commisssion_status = get_post_meta($commission, '_paid_status', true);
                     if ($commisssion_status == 'paid') {
                         continue;
                     }
                     $WCMp_Commission = new WCMp_Commission();
                     $commission_data = $WCMp_Commission->get_commission($commission);
                     $commission_order_id = get_post_meta($commission, '_commission_order_id', true);
                     $vendor_shipping = get_post_meta($commission, '_shipping', true);
                     $vendor_tax = get_post_meta($commission, '_tax', true);
                     $order = new WC_Order($commission_order_id);
                     $due_vendor = $vendor->wcmp_get_vendor_part_from_order($order, $vendor->term_id);
                     if ($vendor_shipping) {
                         $vendor_shipping = $due_vendor['shipping'];
                     }
                     if ($vendor_tax) {
                         $vendor_tax = $due_vendor['tax'];
                     }
                     $vendor_due = 0;
                     $vendor_due = (double) $commission_data->amount + (double) $vendor_shipping + (double) $vendor_tax;
                     if ($commission_data->vendor->term_id != $vendor->term_id) {
                         continue;
                     }
                     if (array_key_exists($commission_data->vendor->term_id, $transaction_data)) {
                         $commission_totals[$commission_data->vendor->term_id]['amount'] += apply_filters('paypal_masspay_amount', $vendor_due, $commission_order_id, $commission_data->vendor->term_id);
                     } else {
                         $commission_totals[$commission_data->vendor->term_id]['amount'] = apply_filters('paypal_masspay_amount', $vendor_due, $commission_order_id, $commission_data->vendor->term_id);
                     }
                     $transaction_data[$commission_data->vendor->term_id]['commission_detail'][$commission] = $commission_order_id;
                     $transaction_data[$commission_data->vendor->term_id]['amount'] = $commission_totals[$commission_data->vendor->term_id]['amount'];
                 }
                 $transfer_charge = $WCMp->vendor_caps->payment_cap['commission_transfer'];
                 if (isset($transfer_charge)) {
                     $no_of_thresold_orders = $WCMp->vendor_caps->payment_cap['no_of_orders'];
                     if (!$no_of_thresold_orders) {
                         $no_of_thresold_orders = 0;
                     }
                     $no_of_paid_transaction = $no_of_paid_transaction = count($WCMp->transaction->get_transactions($vendor->term_id));
                     //20;//count($vendor->wcmp_vendor_transaction());
                     if ((int) $no_of_paid_transaction > (int) $no_of_thresold_orders) {
                         $commission_totals[$vendor->term_id]['transfer_charge'] = $transfer_charge;
                         $transaction_data[$vendor->term_id]['transfer_charge'] = $transfer_charge;
                     }
                 }
                 $commission_payment_mode = get_user_meta($vendor->id, '_vendor_payment_mode', true);
                 if ($commission_payment_mode == 'paypal_masspay') {
                     // Set info for all payouts
                     $currency = get_woocommerce_currency();
                     $payout_note = sprintf(__('Total commissions earned from %1$s as at %2$s on %3$s', $WCMp->text_domain), get_bloginfo('name'), date('H:i:s'), date('d-m-Y'));
                     $commissions_data = array();
                     if (!empty($commission_totals)) {
                         foreach ($commission_totals as $vendor_id => $total) {
                             if (!isset($total['amount'])) {
                                 $total['amount'] = 0;
                             }
                             if (isset($total['transfer_charge'])) {
                                 $total_payable = $total['amount'] + $total['transfer_charge'];
                             } else {
                                 $total_payable = $total['amount'];
                             }
                             // Get vendor data
                             $vendor_paypal_email = get_user_meta($vendor->id, '_vendor_paypal_email', true);
                             // Set vendor recipient field
                             if (isset($vendor_paypal_email) && strlen($vendor_paypal_email) > 0) {
                                 $recipient = $vendor_paypal_email;
                                 $commissions_data[] = array('recipient' => $recipient, 'total' => $total_payable, 'currency' => $currency, 'vendor_id' => $vendor_id, 'payout_note' => $payout_note);
                             }
                         }
                         $result = $WCMp->paypal_masspay->call_masspay_api($commissions_data);
                         if ($result) {
                             // create a new transaction by vendor
                             if (!empty($transaction_data)) {
                                 $transaction_id = $WCMp->transaction->insert_new_transaction($transaction_data, 'wcmp_completed', 'paypal_masspay', $result);
                             }
                             $email_admin = WC()->mailer()->emails['WC_Email_Admin_Widthdrawal_Request'];
                             $email_admin->trigger($transaction_id, $vendor->term_id);
                         }
                     }
                 } else {
                     if ($commission_payment_mode == 'direct_bank') {
                         if (!empty($commission_totals)) {
                             // create a new transaction by vendor
                             if (!empty($transaction_data)) {
                                 $transaction_id = $WCMp->transaction->insert_new_transaction($transaction_data, 'wcmp_processing', 'direct_bank');
                                 foreach ($commission_totals as $vendor_id => $total) {
                                     $email_vendor = WC()->mailer()->emails['WC_Email_Vendor_Direct_Bank'];
                                     $email_vendor->trigger($transaction_id, $vendor_id);
                                     $email_admin = WC()->mailer()->emails['WC_Email_Admin_Widthdrawal_Request'];
                                     $email_admin->trigger($transaction_id, $vendor_id);
                                 }
                             }
                         }
                     }
                 }
                 do_action('wcmp_vendor_commission_payment_mode');
                 $wcmp_pages = get_option('wcmp_pages_settings_name');
                 $get_transaction_thankyou_page = $wcmp_pages['vendor_transaction_thankyou'];
                 if (isset($get_transaction_thankyou_page)) {
                     if (isset($transaction_id)) {
                         $location = add_query_arg('transaction_id', $transaction_id, get_permalink($get_transaction_thankyou_page));
                     } else {
                         $location = get_permalink($get_transaction_thankyou_page);
                     }
                     wp_safe_redirect($location);
                     exit;
                 }
             }
         }
     }
 }
 /**
  * Process PayPal masspay 
  */
 public function do_paypal_masspay()
 {
     global $WCMp;
     $commissions = $this->get_query_commission();
     $commission_data = $commission_totals = $commissions_data = array();
     if ($commissions) {
         $transaction_data = array();
         foreach ($commissions as $commission) {
             $WCMp_Commission = new WCMp_Commission();
             $commission_data = $WCMp_Commission->get_commission($commission->ID);
             $commission_order_id = get_post_meta($commission->ID, '_commission_order_id', true);
             $vendor_shipping = get_post_meta($commission->ID, '_shipping', true);
             $vendor_tax = get_post_meta($commission->ID, '_tax', true);
             $order = new WC_Order($commission_order_id);
             $vendor = get_wcmp_vendor_by_term($commission_data->vendor->term_id);
             $payment_type = get_user_meta($vendor->id, '_vendor_payment_mode', true);
             if ($payment_type == 'direct_bank') {
                 continue;
             }
             $due_vendor = $vendor->wcmp_get_vendor_part_from_order($order, $vendor->term_id);
             if (!$vendor_shipping) {
                 $vendor_shipping = $due_vendor['shipping'];
             }
             if (!$vendor_tax) {
                 $vendor_tax = $due_vendor['tax'];
             }
             $vendor_due = 0;
             $vendor_due = (double) $commission_data->amount + (double) $vendor_shipping + (double) $vendor_tax;
             //check unpaid commission threshold
             $total_vendor_due = $vendor->wcmp_vendor_get_total_amount_due();
             $get_vendor_thresold = 0;
             if (isset($WCMp->vendor_caps->payment_cap['commission_threshold'])) {
                 $get_vendor_thresold = (double) $WCMp->vendor_caps->payment_cap['commission_threshold'];
             }
             if ($get_vendor_thresold > $total_vendor_due) {
                 continue;
             }
             if (array_key_exists($commission_data->vendor->term_id, $transaction_data)) {
                 $commission_totals[$commission_data->vendor->term_id]['amount'] += apply_filters('paypal_masspay_amount', $vendor_due, $commission_order_id, $commission_data->vendor->term_id);
             } else {
                 $commission_totals[$commission_data->vendor->term_id]['amount'] = apply_filters('paypal_masspay_amount', $vendor_due, $commission_order_id, $commission_data->vendor->term_id);
             }
             $transaction_data[$commission_data->vendor->term_id]['commission_detail'][$commission->ID] = $commission_order_id;
             $transaction_data[$commission_data->vendor->term_id]['amount'] = $commission_totals[$commission_data->vendor->term_id]['amount'];
         }
         // Set info for all payouts
         $currency = get_woocommerce_currency();
         $payout_note = sprintf(__('Total commissions earned from %1$s as at %2$s on %3$s', $WCMp->text_domain), get_bloginfo('name'), date('H:i:s'), date('d-m-Y'));
         $commissions_data = array();
         foreach ($commission_totals as $vendor_id => $total) {
             if (!isset($total['amount'])) {
                 $total['amount'] = 0;
             }
             if (isset($total['transaction_fee'])) {
                 $total_payable = $total['amount'] + $total['transaction_fee'];
             } else {
                 $total_payable = $total['amount'];
             }
             // Get vendor data
             $vendor = get_wcmp_vendor_by_term($vendor_id);
             $vendor_paypal_email = get_user_meta($vendor->id, '_vendor_paypal_email', true);
             // Set vendor recipient field
             if (isset($vendor_paypal_email) && strlen($vendor_paypal_email) > 0) {
                 $recipient = $vendor_paypal_email;
                 $commissions_data[] = array('recipient' => $recipient, 'total' => $total_payable, 'currency' => $currency, 'vendor_id' => $vendor_id, 'payout_note' => $payout_note);
             }
         }
         $result = $this->call_masspay_api($commissions_data);
         if ($result) {
             // create a new transaction by vendor
             $WCMp->transaction->insert_new_transaction($transaction_data, 'wcmp_completed', 'paypal_masspay', $result);
         }
     }
 }