<?php

/**
 * WCFM plugin controllers
 *
 * Plugin Orders Controller - WCfM Marketplace
 *
 * @author 		WC Lovers
 * @package 	wcfm/controllers/orders/
 * @version   5.0.0
 */

use Automattic\WooCommerce\Utilities\OrderUtil;

class WCFM_Orders_WCFMMarketplace_Controller {

    private $vendor_id;
    private $is_vendor_get_tax;
    private $is_vendor_get_shipping;

    public function __construct() {
        global $wp, $WCFM, $WCFMmp;

        if (wcfm_is_vendor()) {
            if (defined('WCFM_REST_API_CALL')) {
                $this->vendor_id   =  $WCFMmp->vendor_id = get_current_user_id();
            } else {
                $this->vendor_id   =  $WCFMmp->vendor_id;
            }
        } else {
            if (isset($_POST['vendor_id']) && !empty($_POST['vendor_id'])) {
                $this->vendor_id = absint($_POST['vendor_id']);
            }
        }

        $this->is_vendor_get_tax      =  $WCFMmp->wcfmmp_vendor->is_vendor_get_tax($this->vendor_id);
        $this->is_vendor_get_shipping =  $WCFMmp->wcfmmp_vendor->is_vendor_get_shipping($this->vendor_id);

        $this->processing();
    }

    public function processing() {
        global $WCFM, $WCFMmp, $wpdb, $_POST;

        $length = 10;
        $offset = 0;

        if (isset($_POST['length'])) $length = absint($_POST['length']);
        if (isset($_POST['start'])) $offset = absint($_POST['start']);

        $user_id = $this->vendor_id;

        $can_view_orders = apply_filters('wcfm_is_allow_order_details', true);
        $group_manager_filter = apply_filters('wcfm_orders_group_manager_filter', '', 'vendor_id');

        $the_orderby = !empty($_POST['orderby']) ? sanitize_sql_orderby($_POST['orderby']) : 'order_id';
        $the_order   = (!empty($_POST['order']) && 'asc' === $_POST['order']) ? 'ASC' : 'DESC';
        $allowed_status      = get_wcfm_marketplace_active_withdrwal_order_status_in_comma();
        $allowed_status      = apply_filters('wcfmp_order_list_allowed_status', $allowed_status);

        $items_per_page = $length;

        $sql = 'SELECT COUNT(commission.ID) AS count FROM ' . $wpdb->prefix . 'wcfm_marketplace_orders AS commission';

        $sql .= ' WHERE 1=1';

        if ($group_manager_filter && !isset($_POST['vendor_id'])) {
            $sql .= $group_manager_filter;
        } else {
            $sql .= " AND `vendor_id` = %d";
            $sql = $wpdb->prepare($sql, $this->vendor_id);
        }
        if (apply_filters('wcfmmp_is_allow_order_status_filter', false)) {
            $sql .= " AND commission.order_status IN ({$allowed_status})";
        }
        if (!apply_filters('wcfmmp_is_allow_show_trashed_orders', false)) {
            $sql .= ' AND `is_trashed` = 0';
        }

        $sql = apply_filters('wcfmmp_order_query', $sql);

        $status_filter = '';

        // check if it is a search
        if (!empty($_POST['search']['value'])) {
            //$order_id = absint( $_POST['search']['value'] );
            //if( function_exists( 'wc_sequential_order_numbers' ) ) { $order_id = wc_sequential_order_numbers()->find_order_by_order_number( $order_id ); }

            //$sql .= " AND `order_id` = {$order_id}";

            $wc_order_ids = wc_order_search($_POST['search']['value']);
            if (!empty($wc_order_ids)) {
                $wc_order_id_placeholders = implode(', ', array_fill(0, count($wc_order_ids), '%d'));
                $sql .= " AND `order_id` in ( {$wc_order_id_placeholders} )";
                $sql = $wpdb->prepare($sql, $wc_order_ids);
            } else {
                $sql .= " AND `order_id` in (0)";
            }
        } else {

            if (!empty($_POST['filter_date_form']) && !empty($_POST['filter_date_to'])) {
                $start_date = date('Y-m-d', strtotime(wc_clean($_POST['filter_date_form'])));
                $end_date = date('Y-m-d', strtotime(wc_clean($_POST['filter_date_to'])));
                $time_filter = " AND DATE( commission.created ) BETWEEN %s AND %s";
                $sql .= $time_filter;
                $sql = $wpdb->prepare($sql, $start_date, $end_date);
            }

            if (!empty($_POST['order_product'])) {
                $order_product = absint($_POST['order_product']);
                $status_filter = " AND `product_id` = %s";
            }

            if (!empty($_POST['commission_status'])) {
                $commission_status = wc_clean($_POST['commission_status']);
                $status_filter .= " AND `withdraw_status` = %s";
            }

            if (!empty($_POST['order_status'])) {
                $order_status = wc_clean($_POST['order_status']);
                if ($order_status != 'all') {
                    $status_filter .= " AND `commission_status` = %s";
                } else {
                    $order_status =     $_POST['order_status'] = '';
                }
            }

            if ($status_filter) $sql .= $status_filter;
            if (!empty($_POST['order_product']) && !empty($_POST['commission_status']) && !empty($_POST['order_status'])) $sql = $wpdb->prepare($sql, $order_product, $commission_status, $order_status);
            if (!empty($_POST['order_product']) && !empty($_POST['commission_status']) && empty($_POST['order_status'])) $sql = $wpdb->prepare($sql, $order_product, $commission_status);
            if (!empty($_POST['order_product']) && !empty($_POST['order_status']) && empty($_POST['commission_status'])) $sql = $wpdb->prepare($sql, $order_product, $order_status);
            if (!empty($_POST['commission_status']) && !empty($_POST['order_status']) && empty($_POST['order_product'])) $sql = $wpdb->prepare($sql, $commission_status, $order_status);
            if (!empty($_POST['order_product']) && empty($_POST['order_status']) && empty($_POST['commission_status'])) $sql = $wpdb->prepare($sql, $order_product);
            if (!empty($_POST['commission_status']) && empty($_POST['order_status']) && empty($_POST['order_product'])) $sql = $wpdb->prepare($sql, $commission_status);
            if (!empty($_POST['order_status']) && empty($_POST['commission_status']) && empty($_POST['order_product'])) $sql = $wpdb->prepare($sql, $order_status);
        }
        $sql .= " GROUP BY commission.order_id";

        $total_item_results = $wpdb->get_results($sql);
        $total_items = 0;
        if (!empty($total_item_results)) {
            foreach ($total_item_results as $total_item_result) {
                $total_items++;
            }
        }
        $total_items = apply_filters('wcfm_orders_total_count', $total_items, $this->vendor_id);

        $sql = 'SELECT *, GROUP_CONCAT(ID) as commission_ids, GROUP_CONCAT(item_id) order_item_ids, GROUP_CONCAT(product_id) product_id, SUM( commission.quantity ) AS order_item_count, COALESCE( SUM( commission.item_total ), 0 ) AS item_total, COALESCE( SUM( commission.item_sub_total ), 0 ) AS item_sub_total, COALESCE( SUM( commission.shipping ), 0 ) AS shipping, COALESCE( SUM( commission.tax ), 0 ) AS tax, COALESCE( SUM( commission.shipping_tax_amount ), 0 ) AS shipping_tax_amount, COALESCE( SUM( commission.total_commission ), 0 ) AS total_commission, COALESCE( SUM( commission.discount_amount ), 0 ) AS discount_amount, COALESCE( SUM( commission.refunded_amount ), 0 ) AS refunded_amount, GROUP_CONCAT(is_refunded) is_refundeds, GROUP_CONCAT(refund_status) refund_statuses FROM ' . $wpdb->prefix . 'wcfm_marketplace_orders AS commission';

        $sql .= ' WHERE 1=1';

        if ($group_manager_filter && !isset($_POST['vendor_id'])) {
            $sql .= $group_manager_filter;
        } else {
            $sql .= " AND `vendor_id` = %d";
            $sql = $wpdb->prepare($sql, $this->vendor_id);
        }
        if (apply_filters('wcfmmp_is_allow_order_status_filter', false)) {
            $sql .= " AND commission.order_status IN ({$allowed_status})";
        }

        if (!apply_filters('wcfmmp_is_allow_show_trashed_orders', false)) {
            $sql .= ' AND `is_trashed` = 0';
        }

        $sql = apply_filters('wcfmmp_order_query', $sql);

        // check if it is a search
        if (!empty($_POST['search']['value'])) {
            //$order_id = absint( $_POST['search']['value'] );
            //if( function_exists( 'wc_sequential_order_numbers' ) ) { $order_id = wc_sequential_order_numbers()->find_order_by_order_number( $order_id ); }

            //$sql .= " AND `order_id` = {$order_id}";

            $wc_order_ids = wc_order_search($_POST['search']['value']);
            if (!empty($wc_order_ids)) {
                $wc_order_id_placeholders = implode(', ', array_fill(0, count($wc_order_ids), '%d'));
                $sql .= " AND `order_id` in ( {$wc_order_id_placeholders} )";
                $sql = $wpdb->prepare($sql, $wc_order_ids);
            } else {
                $sql .= " AND `order_id` in (0)";
            }
        } else {

            if (!empty($_POST['filter_date_form']) && !empty($_POST['filter_date_to'])) {
                $sql .= $time_filter;
                $sql = $wpdb->prepare($sql, $start_date, $end_date);
            }

            if ($status_filter) $sql .= $status_filter;
            if (!empty($_POST['order_product']) && !empty($_POST['commission_status']) && !empty($_POST['order_status'])) $sql = $wpdb->prepare($sql, $order_product, $commission_status, $order_status);
            if (!empty($_POST['order_product']) && !empty($_POST['commission_status']) && empty($_POST['order_status'])) $sql = $wpdb->prepare($sql, $order_product, $commission_status);
            if (!empty($_POST['order_product']) && !empty($_POST['order_status']) && empty($_POST['commission_status'])) $sql = $wpdb->prepare($sql, $order_product, $order_status);
            if (!empty($_POST['commission_status']) && !empty($_POST['order_status']) && empty($_POST['order_product'])) $sql = $wpdb->prepare($sql, $commission_status, $order_status);
            if (!empty($_POST['order_product']) && empty($_POST['order_status']) && empty($_POST['commission_status'])) $sql = $wpdb->prepare($sql, $order_product);
            if (!empty($_POST['commission_status']) && empty($_POST['order_status']) && empty($_POST['order_product'])) $sql = $wpdb->prepare($sql, $commission_status);
            if (!empty($_POST['order_status']) && empty($_POST['commission_status']) && empty($_POST['order_product'])) $sql = $wpdb->prepare($sql, $order_status);
        }

        $sql .= " GROUP BY commission.order_id";

        $sql .= " ORDER BY {$the_orderby} {$the_order} LIMIT %d OFFSET %d";
        $sql = $wpdb->prepare($sql, [
            $items_per_page,
            $offset
        ]);

        $data = $wpdb->get_results($sql);

        $order_summary = $data;

        $admin_fee_mode = apply_filters('wcfm_is_admin_fee_mode', false);

        $order_sync  = isset($WCFMmp->wcfmmp_marketplace_options['order_sync']) ? $WCFMmp->wcfmmp_marketplace_options['order_sync'] : 'no';


        if (defined('WCFM_REST_API_CALL')) {
            return $order_summary;
        }

        // Generate Orders JSON
        $datatable_json = [
            'draw'                => (int) wc_clean($_POST['draw']),
            'recordsTotal'        => (int) $total_items,
            'recordsFiltered'    => (int) $total_items,
            'data'                => []
        ];

        if (!empty($order_summary)) {
            $index = 0;
            $totals = 0;
            foreach ($order_summary as $order) {
                // Order exists check
                $the_order = wc_get_order($order->order_id);
                if (!is_a($the_order, 'WC_Order')) continue;

                if (apply_filters('wcfm_is_show_order_restrict_check', false, $order->order_id, $order->product_id, $order)) continue;

                $order_currency = $the_order->get_currency();
                $needs_shipping = false;

                $refund_statuses = explode(",", $order->refund_statuses);
                $is_refundeds = explode(",", $order->is_refundeds);

                if ($order_sync == 'yes') {
                    $order_status = sanitize_title($the_order->get_status());
                } else {
                    $order_status = sanitize_title($order->commission_status);
                }

                // Status
                if ($order_sync == 'yes') {
                    $datatable_json['data'][$index][] =  apply_filters('wcfm_order_status_display', '<span class="order-status tips wcicon-status-default wcicon-status-' . sanitize_title($order_status) . ' text_tip" data-tip="' . wc_get_order_status_name($order_status) . '"></span>', $the_order);
                } else {
                    $datatable_json['data'][$index][] =  apply_filters('wcfm_order_status_display', '<span class="order-status tips wcicon-status-default wcicon-status-' . sanitize_title($order_status) . ' text_tip" data-tip="' . $WCFMmp->wcfmmp_vendor->wcfmmp_vendor_order_status_name($order_status) . '"></span>', $the_order);
                }

                // Custom Column Support After
                $datatable_json['data'] = apply_filters('wcfm_orders_custom_columns_data_after', $datatable_json['data'], $index, $order->order_id, $order, $the_order);

                // Order
                if (apply_filters('wcfm_allow_view_customer_name', true)) {
                    $user_info = array();
                    if ($the_order->get_user_id()) {
                        $user_info = get_userdata($the_order->get_user_id());
                    }

                    if (!empty($user_info)) {

                        $username = '';

                        if ($user_info->first_name || $user_info->last_name) {
                            $username .= esc_html(sprintf(_x('%1$s %2$s', 'full name', 'wc-frontend-manager'), ucfirst($user_info->first_name), ucfirst($user_info->last_name)));
                        } else {
                            $username .= esc_html(ucfirst($user_info->display_name));
                        }
                    } else {
                        if ($the_order->get_billing_first_name() || $the_order->get_billing_last_name()) {
                            $username = trim(sprintf(_x('%1$s %2$s', 'full name', 'wc-frontend-manager'), $the_order->get_billing_first_name(), $the_order->get_billing_last_name()));
                        } else if ($the_order->get_billing_company()) {
                            $username = trim($the_order->get_billing_company());
                        } else {
                            $username = __('Guest', 'wc-frontend-manager');
                        }
                    }

                    $username = apply_filters('wcfm_order_by_user', $username, $the_order->get_id());
                } else {
                    $username = __('Guest', 'wc-frontend-manager');
                }

                $username = '<span class="wcfm_order_by_customer">' . $username . '</span>';

                if ($can_view_orders) {
                    $datatable_json['data'][$index][] =  apply_filters('wcfmmp_order_label_display', apply_filters('wcfm_order_label_display', '<a href="' . get_wcfm_view_order_url($the_order->get_id(), $the_order) . '" class="wcfm_order_title">#' . esc_attr($the_order->get_order_number()) . '</a>' . ' ' . __('by', 'wc-frontend-manager') . ' ' . $username, $the_order->get_id(), $order->product_id, $order, $username), $the_order->get_id());
                } else {
                    $datatable_json['data'][$index][] =  apply_filters('wcfmmp_order_label_display', apply_filters('wcfm_order_label_display', '<span class="wcfm_order_title">#' . esc_attr($the_order->get_order_number()) . '</span> ' . __('by', 'wc-frontend-manager') . ' ' . $username, $the_order->get_id(), $order->product_id, $order, $username), $the_order->get_id());
                }

                // Purchased
                $order_item_details = '<div class="order_items order_items_visible" cellspacing="0">';
                $order_item_ids = explode(",", $order->order_item_ids);
                try {
                    foreach ($order_item_ids as $order_item_id) {
                        if ($order_item_id) {
                            $line_item = new WC_Order_Item_Product($order_item_id);
                            $product   = $line_item->get_product();
                            $item_meta_html = strip_tags(wc_display_item_meta($line_item, array(
                                'before'    => "\n- ",
                                'separator' => "\n- ",
                                'after'     => "",
                                'echo'      => false,
                                'autop'     => false,
                            )));

                            $order_item_details .= '<div class=""><span class="qty">' . $line_item->get_quantity() . 'x</span><span class="name">' . apply_filters('wcfm_order_item_name', $line_item->get_name(), $line_item);
                            if ($product && $product->get_sku()) {
                                $order_item_details .= ' (' . __('SKU:', 'wc-frontend-manager') . ' ' . esc_html($product->get_sku()) . ')';
                            }
                            if (!empty($item_meta_html) && apply_filters('wcfm_is_allow_order_list_item_meta', false)) $order_item_details .= '<br />(' . $item_meta_html . ')';
                            $order_item_details .= '</span></div>';
                        } else {
                            do_action('wcfm_manual_order_reset', $order->order_id, true);
                            $order_posted = OrderUtil::custom_orders_table_usage_is_enabled() ? wc_get_order($order->order_id) : get_post($order->order_id);
                            do_action('wcfm_manual_order_processed', $order->order_id, $order_posted, $the_order);
                            //unset( $datatable_json['data'][$index] );
                            break;
                        }
                    }
                } catch (Exception $e) {
                    wcfm_log("Order List Error ::" . $order->order_id . " => " . $e->getMessage());
                    if (apply_filters('wcfm_is_allow_repair_order_item', false)) {
                        do_action('wcfm_manual_order_reset', $order->order_id, true);
                        $order_posted = OrderUtil::custom_orders_table_usage_is_enabled() ? wc_get_order($order->order_id) : get_post($order->order_id);
                        do_action('wcfm_manual_order_processed', $order->order_id, $order_posted, $the_order);
                        //do_action( 'wcfm_order_repair_order_item', $order->order_id );
                    }
                    unset($datatable_json['data'][$index]);
                    continue;
                }
                $order_item_details .= '</div>';

                $datatable_json['data'][$index][] = '<a href="#" class="show_order_items">' . sprintf(_n('%d item', '%d items', $order->order_item_count, 'wc-frontend-manager'), $order->order_item_count) . '</a>' . $order_item_details;

                // Quantity
                $datatable_json['data'][$index][] =  $order->order_item_count;

                // Billing Address
                $billing_address = '&ndash;';
                if (apply_filters('wcfm_allow_customer_billing_details', true)) {
                    if ($the_order->get_formatted_billing_address()) {
                        $billing_address = wp_kses($the_order->get_formatted_billing_address(), array('br' => array()));
                    }
                }
                $datatable_json['data'][$index][] = "<div style='text-align:left;'>" . apply_filters('wcfm_orderlist_billing_address', $billing_address, $order->order_id) . "</div>";

                // Shipping Address
                $shipping_address = '&ndash;';
                if (apply_filters('wcfm_allow_customer_shipping_details', true)) {
                    if (($the_order->needs_shipping_address() && $the_order->get_formatted_shipping_address()) || apply_filters('wcfm_is_force_shipping_address', false)) {
                        $shipping_address = wp_kses($the_order->get_formatted_shipping_address(), array('br' => array()));
                    }
                }
                $datatable_json['data'][$index][] = "<div style='text-align:left;'>" . apply_filters('wcfm_orderlist_shipping_address', $shipping_address, $order->order_id) . "</div>";

                // Gross Sales
                $gross_sales = 0;
                $commission_ids = explode(",", $order->commission_ids);
                if (apply_filters('wcfmmmp_gross_sales_respect_setting', true)) {
                    $gross_sales = (float) $WCFMmp->wcfmmp_commission->wcfmmp_get_commission_meta_sum($commission_ids, 'gross_total');
                } else {
                    $gross_sales = (float) $WCFMmp->wcfmmp_commission->wcfmmp_get_commission_meta_sum($commission_ids, 'gross_sales_total');
                }

                /*if( $WCFMmp->wcfmmp_vendor->is_vendor_deduct_discount( $order->vendor_id, $order->order_id ) ) {
					$gross_sales += (float) sanitize_text_field( $order->item_total );
				} else {
					$gross_sales += (float) sanitize_text_field( $order->item_sub_total );
				}
				if( $this->is_vendor_get_tax ) {
					$commission_ids = explode( ",", $order->commission_ids );
					foreach( $commission_ids as $commission_id ) {
						$gross_sales += (float) $WCFMmp->wcfmmp_commission->wcfmmp_get_commission_meta( $commission_id, 'gross_tax_cost' );
					}
				}
				if( $this->is_vendor_get_shipping ) {
					$commission_ids = explode( ",", $order->commission_ids );
					foreach( $commission_ids as $commission_id ) {
						$gross_sales += (float) apply_filters( 'wcfmmmp_gross_sales_shipping_cost', $WCFMmp->wcfmmp_commission->wcfmmp_get_commission_meta( $commission_id, 'gross_shipping_cost' ), $order->vendor_id );
					}
					if( $this->is_vendor_get_tax ) {
						foreach( $commission_ids as $commission_id ) {
							$gross_sales += (float) $WCFMmp->wcfmmp_commission->wcfmmp_get_commission_meta( $commission_id, 'gross_shipping_tax' );
						}
					}
				}*/

                $gross_sales_amt = $gross_sales;
                if ($order->is_partially_refunded || in_array(1, $is_refundeds)) {
                    $refunded_gross_sales = $gross_sales - (float) $order->refunded_amount;
                    $gross_sales = '<del>' . wc_price($gross_sales, array('currency' => $order_currency)) . '</del>';
                    $gross_sales .=  "<br/>" . wc_price($refunded_gross_sales, array('currency' => $order_currency));
                } elseif ($order->is_refunded) {
                    $gross_sales = '<del>' . wc_price($gross_sales, array('currency' => $order_currency)) . '</del>';
                    $gross_sales .=  "<br/>" . wc_price(0, array('currency' => $order_currency));
                } else {
                    $gross_sales = wc_price($gross_sales, array('currency' => $order_currency));
                }
                if ($the_order->get_payment_method_title()) {
                    $gross_sales .= '<br /><small class="meta">' . __('Via', 'wc-frontend-manager') . ' ' . esc_html($the_order->get_payment_method_title()) . '</small>';
                }
                $datatable_json['data'][$index][] =  $gross_sales;

                // Gross Sales Amount
                if ($order->is_partially_refunded || in_array(1, $is_refundeds)) {
                    $datatable_json['data'][$index][] =  $gross_sales_amt - (float) $order->refunded_amount;
                } elseif ($order->is_refunded) {
                    $datatable_json['data'][$index][] = 0;
                } else {
                    $datatable_json['data'][$index][] =  $gross_sales_amt;
                }

                // Commision && Commission Amount
                $status = __('N/A', 'wc-frontend-manager');
                $total  = 0;
                if ('pending' === $order->withdraw_status) {
                    $status = '<span class="wcpv-unpaid-status">' . esc_html__('UNPAID', 'wc-frontend-manager') . '</span>';
                }

                if ('completed' === $order->withdraw_status) {
                    $status = '<span class="wcpv-paid-status">' . esc_html__('PAID', 'wc-frontend-manager') . '</span>';
                }

                if ('requested' === $order->withdraw_status) {
                    $status = '<span class="wcpv-pending-status">' . esc_html__('REQUESTED', 'wc-frontend-manager') . '</span>';
                }

                if ('cancelled' === $order->withdraw_status) {
                    $status = '<span class="wcpv-void-status">' . esc_html__('CANCELLED', 'wc-frontend-manager') . '</span>';
                }

                if (($order->is_refunded && !in_array(0, $is_refundeds)) || in_array($order_status, array('failed', 'cancelled', 'refunded', 'request', 'proposal', 'proposal-sent', 'proposal-expired', 'proposal-rejected', 'proposal-canceled', 'proposal-accepted'))) {
                    $datatable_json['data'][$index][] = '&ndash;';
                    $datatable_json['data'][$index][] = '';
                } else {
                    $total = (float) $order->total_commission;
                    if ($order->is_partially_refunded || in_array(1, $is_refundeds)) {
                        $gross_sales_amt = $gross_sales_amt - (float) $order->refunded_amount;
                    }
                    if ($admin_fee_mode) {
                        $total = $gross_sales_amt - $total;
                    }
                    $datatable_json['data'][$index][] =  apply_filters('wcfm_vendor_order_total', wc_price($total, array('currency' => $order_currency)) . '<br />' . $status, $order->order_id, $order->product_id, $gross_sales_amt, $total, $status, $order_currency);
                    $datatable_json['data'][$index][] = $total;
                }

                // Additional Info
                $datatable_json['data'][$index][] = apply_filters('wcfm_orders_additonal_data', '&ndash;', $the_order->get_id());

                // Custom Column Support Before
                $datatable_json['data'] = apply_filters('wcfm_orders_custom_columns_data_before', $datatable_json['data'], $index, $order->order_id, $order, $the_order);

                // Date
                $order_date = (version_compare(WC_VERSION, '2.7', '<')) ? $the_order->order_date : $the_order->get_date_created();
                if ($order_date) {
                    $datatable_json['data'][$index][] = apply_filters('wcfm_order_date_display', $order_date->date_i18n(wc_date_format() . ' ' . wc_time_format()), $order->order_id, $order);
                } else {
                    $datatable_json['data'][$index][] = apply_filters('wcfm_order_date_display', '&ndash;', $order->order_id, $order);
                }

                // Action
                $actions = '';
                if (apply_filters('wcfm_is_allow_order_status_update', true) && !in_array('requested', $refund_statuses) && in_array(0, $is_refundeds)) {
                    $allowed_order_status = apply_filters('wcfm_allowed_order_status', wc_get_order_statuses(), $order->order_id);
                    $status_update_block_statuses = apply_filters('wcfm_status_update_block_statuses', array('refunded', 'cancelled', 'failed'), $order->order_id);
                    if (in_array('wc-completed', array_keys($allowed_order_status)) && !in_array($order_status, $status_update_block_statuses) && !in_array($order_status, array('failed', 'cancelled', 'refunded', 'completed', 'request', 'proposal', 'proposal-sent', 'proposal-expired', 'proposal-rejected', 'proposal-canceled', 'proposal-accepted'))) $actions = '<a class="wcfm_order_mark_complete wcfm-action-icon" href="#" data-orderid="' . $order->order_id . '"><span class="wcfmfa fa-check-circle text_tip" data-tip="' . esc_attr__('Mark as Complete', 'wc-frontend-manager') . '"></span></a>';
                }

                if ($can_view_orders)
                    $actions .= '<a class="wcfm-action-icon" href="' . get_wcfm_view_order_url($the_order->get_id(), $the_order) . '"><span class="wcfmfa fa-eye text_tip" data-tip="' . esc_attr__('View Details', 'wc-frontend-manager') . '"></span></a>';


                if (!WCFM_Dependencies::wcfmu_plugin_active_check()) {
                    if ($is_wcfmu_inactive_notice_show = apply_filters('is_wcfmu_inactive_notice_show', true)) {
                        $actions .= '<a class="wcfm_wcvendors_order_mark_shipped_dummy wcfm-action-icon" href="#" data-orderid="' . $order->order_id . '"><span class="wcfmfa fa-truck text_tip" data-tip="' . esc_attr__('Mark Shipped', 'wc-frontend-manager') . '"></span></a>';
                    }
                }

                $actions = apply_filters('wcfm_orders_module_actions', $actions, $order->order_id, $the_order, $this->vendor_id);

                $datatable_json['data'][$index][] =  apply_filters('wcfmmarketplace_orders_actions', $actions, $user_id, $order, $the_order, $this->vendor_id);

                $index++;
            }
        }

        $datatable_json['data'] = apply_filters('wcfm_orders_controller_data', $datatable_json['data'], 'vendor', $this->vendor_id);
        wp_send_json($datatable_json);
    }
}
