From a2c088ba52c19fd3e3f78976fd3e94c5e35f80f7 Mon Sep 17 00:00:00 2001 From: Almira Krdzic Date: Sat, 1 Dec 2018 00:17:54 +0100 Subject: [PATCH] Fix order details display --- .../admin-cl/class-wiaas-admin-cl-orders.php | 16 +- .../class-wiaas-admin-supplier-orders.php | 62 +++- .../admin/class-wiaas-admin-orders.php | 285 ++++++++++++++---- .../wiaas/includes/class-wiaas-cart.php | 36 --- .../wiaas/includes/class-wiaas-order.php | 48 +++ .../includes/order/class-wiaas-order-item.php | 90 ++++++ 6 files changed, 416 insertions(+), 121 deletions(-) create mode 100644 backend/app/plugins/wiaas/includes/order/class-wiaas-order-item.php diff --git a/backend/app/plugins/wiaas/includes/admin/admin-cl/class-wiaas-admin-cl-orders.php b/backend/app/plugins/wiaas/includes/admin/admin-cl/class-wiaas-admin-cl-orders.php index 2486d65..4822296 100644 --- a/backend/app/plugins/wiaas/includes/admin/admin-cl/class-wiaas-admin-cl-orders.php +++ b/backend/app/plugins/wiaas/includes/admin/admin-cl/class-wiaas-admin-cl-orders.php @@ -78,12 +78,16 @@ class Wiaas_Admin_CL_Orders { * @return array */ public static function columns_for_list_table_orders($columns) { - $show_columns = array(); - $show_columns['cb'] = $columns['cb']; - $show_columns['_wiaas_order_number'] = __( 'Order', 'woocommerce' ); - $show_columns['order_date'] = __( 'Date', 'woocommerce' ); - $show_columns['order_status'] = __( 'Status', 'woocommerce' ); - $show_columns['order_total'] = __( 'Total', 'woocommerce' ); + $show_columns = array(); + $show_columns['cb'] = $columns['cb']; + $show_columns['_wiaas_order_number'] = __( 'Order', 'wiaas' ); + $show_columns['order_date'] = $columns['order_date']; + $show_columns['wiaas_reference'] = __( 'Location', 'wiaas' ); + $show_columns['wiaas_customer'] = __( 'Customer', 'wiaas' ); + $show_columns['order_status'] = $columns['order_status']; + $show_columns['billing_address'] = $columns['billing_address']; + $show_columns['shipping_address'] = $columns['shipping_address']; + $show_columns['order_total'] = $columns['order_total']; return $show_columns; } diff --git a/backend/app/plugins/wiaas/includes/admin/admin-supplier/class-wiaas-admin-supplier-orders.php b/backend/app/plugins/wiaas/includes/admin/admin-supplier/class-wiaas-admin-supplier-orders.php index 700272b..afc4264 100644 --- a/backend/app/plugins/wiaas/includes/admin/admin-supplier/class-wiaas-admin-supplier-orders.php +++ b/backend/app/plugins/wiaas/includes/admin/admin-supplier/class-wiaas-admin-supplier-orders.php @@ -21,11 +21,15 @@ class Wiaas_Admin_Supplier_Orders { add_filter('woocommerce_admin_order_preview_actions', array(__CLASS__, 'remove_actions_from_order_preview')); - add_filter('woocommerce_admin_order_preview_line_items', array(__CLASS__, 'filter_order_items_for_order_preview'), 10, 2); + add_filter('woocommerce_admin_order_preview_line_items', array(__CLASS__, 'filter_order_items_for_order_preview'), 999, 2); + + add_filter( 'woocommerce_admin_order_preview_line_item_columns', array(__CLASS__, 'customize_order_preview_columns'), 999); + + add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_simple_product_bundle', array(__CLASS__, 'render_bundled_item_bundle'), 10, 4); add_filter('manage_shop_order_posts_columns', array(__CLASS__, 'columns_for_list_table_orders'), 999); - add_filter('manage_edit-shop_order_sortable_columns', array(__CLASS__, 'define_sortable_columns_for_list_table_orders')); + add_filter('manage_edit-shop_order_sortable_columns', array(__CLASS__, 'define_sortable_columns_for_list_table_orders'), 999); add_action('manage_shop_order_posts_custom_column', array(__CLASS__, 'render_columns_for_list_table_orders'), 999, 2); } @@ -53,7 +57,7 @@ class Wiaas_Admin_Supplier_Orders { * Show only simple products from this supplier on order preview * * @param $order_items - * @param $order + * @param WC_Order $order * * @return array */ @@ -61,26 +65,51 @@ class Wiaas_Admin_Supplier_Orders { $user_organisation_id = Wiaas_User_Organization::get_user_organization_id(wp_get_current_user()->ID); + $order_items = $order->get_items(); $items = array(); foreach ($order_items as $key => $order_item) { - $product = wc_get_product($order_item->get_product_id()); + if (wc_pb_is_bundled_order_item($order_item)) { - if ($product->get_type() == 'simple') { + $item_supplier_organization_id = absint($order_item['wiaas_supplier_organization_id']); - $supplier_organisation_id = Wiaas_Product_Supplier - ::get_supplier_organisation_id_from_product($order_item->get_product_id()); + if ($item_supplier_organization_id === $user_organisation_id) { - if ($supplier_organisation_id === $user_organisation_id) { - $items[$key] = $order_item; - } + $items[] = $order_item; + } } } return $items; } + public static function customize_order_preview_columns() { + + return array( + 'product' => __('Product', 'wiaas'), + 'quantity' => __( 'Quantity', 'wiaas' ), + 'wiaas_simple_product_bundle' => __( '', 'wiaas' ) + ); + } + + public static function render_bundled_item_bundle($empty, $item, $item_id, $order) { + + $html = ''; + + if (wc_pb_is_bundled_order_item($item) ) { + + $container_order_item = wc_pb_get_bundled_order_item_container($item, $order); + + if ( ! empty($container_order_item) ) { + + return $container_order_item->get_name(); + } + } + + return $html; + } + /** * Override default table columns so only supplier specific columns are visible * @@ -89,11 +118,14 @@ class Wiaas_Admin_Supplier_Orders { * @return array */ public static function columns_for_list_table_orders($columns) { - $show_columns = array(); - $show_columns['cb'] = $columns['cb']; - $show_columns['_wiaas_order_number'] = __( 'Order', 'woocommerce' ); - $show_columns['order_date'] = __( 'Date', 'woocommerce' ); - $show_columns['order_status'] = __( 'Status', 'woocommerce' ); + $show_columns = array(); + $show_columns['cb'] = $columns['cb']; + $show_columns['_wiaas_order_number'] = __( 'Order', 'wiaas' ); + $show_columns['order_date'] = $columns['order_date']; + $show_columns['wiaas_reference'] = __( 'Location', 'wiaas' ); + $show_columns['wiaas_customer'] = __( 'Customer', 'wiaas' ); + $show_columns['order_status'] = $columns['order_status']; + $show_columns['shipping_address'] = $columns['shipping_address']; return $show_columns; } diff --git a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-orders.php b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-orders.php index 26fb3d1..5302a71 100644 --- a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-orders.php +++ b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-orders.php @@ -4,9 +4,15 @@ class Wiaas_Admin_Orders { public static function init() { - add_filter( 'manage_edit-shop_order_columns', array(__CLASS__, 'add_additional_columns_to_orders_screen') ); + // Orders list customization - add_action( 'manage_shop_order_posts_custom_column', array(__CLASS__, 'add_custom_columns_content') ); + add_filter( 'manage_shop_order_posts_columns', array(__CLASS__, 'add_additional_columns_to_orders_list'), 11 ); + + add_action( 'manage_shop_order_posts_custom_column', array(__CLASS__, 'render_orders_list_additional_columns') ); + + add_filter('default_hidden_columns', array(__CLASS__, 'filter_orders_list_default_hidden_columns'), 11, 2); + + // Order preview customization add_filter( 'woocommerce_admin_order_preview_get_order_details', array(__CLASS__, 'add_custom_data_to_order_preview') ); @@ -14,45 +20,53 @@ class Wiaas_Admin_Orders { add_filter( 'woocommerce_admin_order_preview_line_items', array(__CLASS__, 'remove_simple_items_from_preview')); + add_filter( 'woocommerce_admin_order_preview_line_item_columns', array(__CLASS__, 'order_preview_order_item_columns')); - add_action('init', array(__CLASS__, 'init_admin')); + add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_order_item_price', array(__CLASS__, 'render_order_item_preview_price_column'), 10, 4); + + // Order item metadata customization + + add_action('woocommerce_before_order_itemmeta', array(__CLASS__, 'render_order_details_order_item_custom_info'), 10, 3); + + add_filter('woocommerce_order_item_get_formatted_meta_data', array(__CLASS__, 'filter_order_item_formatted_meta_data'), 10, 2); + + add_filter('woocommerce_order_item_display_meta_key', array(__CLASS__, 'order_item_display_meta_key'), 10, 3); + + add_filter('woocommerce_order_item_display_meta_value', array(__CLASS__, 'order_item_display_meta_value'), 10, 3); } - public static function init_admin(){ - $current_user = wp_get_current_user(); - $role = $current_user->roles[0]; - $is_admin = $role === 'administrator'; - - if ($is_admin){ - add_filter( 'woocommerce_admin_order_preview_line_item_columns', array(__CLASS__, 'customize_order_preview_columns')); - - add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_payment_type', array(__CLASS__, 'fill_in_payment_type'), 10, 2); - add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_services_extra', array(__CLASS__, 'fill_in_services_extra'), 10, 4); - add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_services_contract_period', array(__CLASS__, 'fill_in_services_contract_period'), 10, 2); - add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_max_contract_period', array(__CLASS__, 'fill_in_max_contract_period'), 10, 2); - add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_period_unit', array(__CLASS__, 'fill_in_period_unit'), 10, 2); - add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_recurrent_extra', array(__CLASS__, 'fill_in_recurrent_extra'), 10, 4); - add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_pay_period', array(__CLASS__, 'fill_in_pay_period'), 10, 2); - - } - } - - public static function add_additional_columns_to_orders_screen( $columns ){ + /** + * Add columns to orders list with wiaas specific informations + * @param array $columns + * + * @return array + */ + public static function add_additional_columns_to_orders_list( $columns ) { $new_columns = array(); - $new_columns['wiaas_reference'] = 'Location'; - $new_columns['wiaas_commercial_lead'] = 'Commercial lead'; - $new_columns['wiaas_customer'] = 'Customer'; + $new_columns['wiaas_reference'] = __('Location', 'wiaas'); + $new_columns['wiaas_commercial_lead'] = __('Commercial lead', 'wiaas'); + $new_columns['wiaas_customer'] = __('Customer', 'wiaas'); + $new_columns['taxonomy-shop_order_project'] = __('Project', 'wiaas'); - $insertAfterColumn = 1; + $columns = array_merge( + array_slice($columns,0,3), + $new_columns, + array_slice($columns,3) + ); - return array_merge(array_slice($columns,0,$insertAfterColumn+1), $new_columns, array_slice($columns,$insertAfterColumn+1)); + return $columns; } - public static function add_custom_columns_content( $column ){ + /** + * Display data for custom wiaas columns in orders list + * + * @param string $column + */ + public static function render_orders_list_additional_columns( $column ) { global $post; $column_content = ''; @@ -68,13 +82,46 @@ class Wiaas_Admin_Orders { case 'wiaas_customer': $column_content = Wiaas_Order::get_order_customer_full_name($post->ID); + + $customer_organization_info = Wiaas_Order::get_customer_organization_info($post->ID); + + if ( ! empty($customer_organization_info) ) { + + $column_content .= '
'; + $column_content .= '' . $customer_organization_info['name'] . ''; + } break; } echo $column_content; } - public static function add_custom_data_to_order_preview ($order){ + /** + * Filter default hidden columns for orders list + * + * @param array $hidden + * @param object $screen + * + * @return array + */ + public static function filter_orders_list_default_hidden_columns($hidden, $screen) { + + if (isset($screen->id) && $screen->id === 'edit-shop_order') { + + $hidden = array( 'wc_actions' ); + } + + return $hidden; + } + + /** + * Add custom information to order preview data + * + * @param array $order + * + * @return array + */ + public static function add_custom_data_to_order_preview ($order) { $order['wiaas_commercial_lead_name'] = Wiaas_Order::get_order_commercial_lead_name( $order['data']['id'] ); $order['needs_shipping'] = true; @@ -82,6 +129,10 @@ class Wiaas_Admin_Orders { return $order; } + /** + * Display custom information in order preview + * + */ public static function show_custom_data_before_order_preview () { echo '
@@ -92,12 +143,22 @@ class Wiaas_Admin_Orders {
'; } + /** + * Display only bundles (not simple products) + * + * This will also not display options and addons + * + * @param array $order_items + * + * @return array + */ public static function remove_simple_items_from_preview( $order_items){ $items = array(); foreach ($order_items as $order_item) { - if (isset($order_item['wiaas_standard_package'])) { + + if ( Wiaas_Order_Item::is_standard_bundle($order_item) ) { $items[] = $order_item; } } @@ -105,52 +166,148 @@ class Wiaas_Admin_Orders { return $items; } - public static function customize_order_preview_columns( $columns ){ + /** + * Columns for order preview order items table + * + * @return array + */ + public static function order_preview_order_item_columns( ) { - unset($columns['total']); - - $columns['wiaas_payment_type'] = __( 'Payment type', 'wiaas' ); - $columns['wiaas_services_extra'] = __( 'Services extra', 'wiaas'); - $columns['wiaas_recurrent_extra'] = __( 'Recurrent extra', 'wiaas'); - $columns['wiaas_services_contract_period'] = __( 'Contract period', 'wiaas'); - $columns['wiaas_max_contract_period'] = __( 'Maximum contract period', 'wiaas'); - $columns['wiaas_pay_period'] = __( 'Pay period', 'wiaas'); - $columns['wiaas_period_unit'] = __( 'Period unit', 'wiaas'); - - $columns['total'] = __( 'Total', 'woocommerce'); - - return $columns; + return array( + 'product' => __('Product', 'wiaas'), + 'quantity' => __( 'Quantity', 'wiaas' ), + 'wiaas_order_item_price' => __( 'Price', 'wiaas' ) + ); } - public static function fill_in_payment_type ( $empty , $item){ - return $item->get_meta('_wiaas_payment_type'); + /** + * @param $empty + * @param WC_Order_Item $item + * @param int $item_id + * @param WC_Order $order + * + * @return string + */ + public static function render_order_item_preview_price_column($empty, $item, $item_id, $order) { + + if (Wiaas_Order_Item::is_standard_bundle($item)) { + + $total_price = wc_price( $item->get_total(), array( 'currency' => $order->get_currency() ) ); + + $monthly_price = wc_price( + Wiaas_Order_Item::get_monthly_recurring_total($item), + array( 'currency' => $order->get_currency() ) + ); + + return sprintf('On Delivery: %s
Monthly: %s', + $total_price, + $monthly_price); + } + + return ''; } - public static function fill_in_services_extra ($empty, $item, $item_id, $order){ - return wc_price( $item->get_meta('_wiaas_services_extra'), array( 'currency' => $order->get_currency() ) ); + /** + * Render order item payment info with order item metadata on order details page + * + * @param $item_id + * @param WC_Order_Item $item + * @param $product + */ + public static function render_order_details_order_item_custom_info($item_id, $item, $product) { + + if (Wiaas_Order_Item::is_standard_bundle($item)) { + + $order = $item->get_order(); + + $total_price = wc_price( $item->get_total(), array( 'currency' => $order->get_currency() ) ); + + $monthly_price = wc_price( + Wiaas_Order_Item::get_monthly_recurring_total($item), + array( 'currency' => $order->get_currency() ) + ); + + ?> +

+ On Delivery: +
+ Monthly: + get_meta('_wiaas_service_contract_period'); - } + /** + * @param array $formatted_meta + * @param WC_Order_Item $order_item + * + * @return array + */ + public static function filter_order_item_formatted_meta_data($formatted_meta, $order_item) { - public static function fill_in_max_contract_period($empty, $item){ - return $item->get_meta('_wiaas_max_contract_period'); - } + if (Wiaas_Order_Item::is_standard_bundle($order_item)) { - public static function fill_in_period_unit ($empty, $item){ - return $item->get_meta('_wiaas_period_unit'); - } + return $formatted_meta; + } - public static function fill_in_recurrent_extra($empty, $item, $item_id, $order){ - return wc_price( $item->get_meta('_wiaas_recurrent_extra'), array( 'currency' => $order->get_currency() ) ); - } + return array(); + } - public static function fill_in_pay_period($empty, $item){ - return $item->get_meta('_wiaas_pay_period'); - } + /** + * @param string $display_key + * @param object $meta + * @param WC_Order_Item $item + * + * @return string + */ + public static function order_item_display_meta_key($display_key, $meta, $item) { + switch ($meta->key) { + case '_wiaas_payment_type': + return 'Payment type'; + + case '_wiaas_services_extra': + return 'Services and support price'; + + case '_wiaas_recurrent_extra': + return 'Recurrent price'; + + default: + return $display_key; + } + } + + /** + * @param string $display_value + * @param object $meta + * @param WC_Order_Item $item + * + * @return string + */ + public static function order_item_display_meta_value($display_value, $meta, $item) { + + switch ($meta->key) { + + case '_wiaas_services_extra': + $order = $item->get_order(); + + return wc_price( + Wiaas_Order_Item::get_services_total($item), + array( 'currency' => $order->get_currency()) + ); + + case '_wiaas_recurrent_extra': + $order = $item->get_order(); + + return wc_price( + Wiaas_Order_Item::get_recurrent_total($item), + array( 'currency' => $order->get_currency()) + ); + + default: + return $display_value; + } + } } diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-cart.php b/backend/app/plugins/wiaas/includes/class-wiaas-cart.php index 3f3e766..8f64b9e 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-cart.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-cart.php @@ -21,8 +21,6 @@ class Wiaas_Cart { public static function init() { add_action( 'woocommerce_checkout_create_order_line_item', array( __CLASS__, 'add_order_item_meta' ), 10, 3 ); - add_filter( 'woocommerce_hidden_order_itemmeta', array( __CLASS__, 'hidden_order_item_meta' ) ); - add_action( 'woocommerce_before_calculate_totals', array( __CLASS__, 'on_calculate_totals' ), 99, 1); add_action( 'woocommerce_cart_loaded_from_session', array( __CLASS__, 'on_calculate_totals' ), 99, 1); @@ -444,40 +442,6 @@ class Wiaas_Cart { return $order_item; } - /** - * Mark extended properties for order as hidden - * @param $hidden - * - * @return array - */ - public static function hidden_order_item_meta( $hidden ) { - - return array_merge( $hidden, array( - '_wiaas_payment_type', - '_wiaas_services_extra', - '_wiaas_service_contract_period', - '_wiaas_max_contract_period', - '_wiaas_period_unit', - '_wiaas_recurrent_extra', - '_wiaas_pay_period', - '_wiaas_addon_items', - '_wiaas_addon_for', - '_wiaas_option_items', - '_wiaas_option_for', - '_wiaas_option_group_name', - '_wiaas_standard_package', - '_wiaas_documents', - '_wiaas_category', - '_wiaas_manufacturer_product_no', - '_wiaas_supplier_product_no', - '_wiaas_supplier_organization_id', - '_wiaas_product_price', - '_wiaas_earliest_installation_additional_days', - '_wiaas_installation', - '_wiaas_installation_date' - ) ); - } - /** * Sets additional order data form cart after order is successfully created * diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-order.php b/backend/app/plugins/wiaas/includes/class-wiaas-order.php index e20aef6..bcd5859 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-order.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-order.php @@ -19,6 +19,7 @@ class Wiaas_Order { require_once dirname( __FILE__ ) . '/order/class-wiaas-order-project.php'; require_once dirname( __FILE__ ) . '/order/wiaas-order-functions.php'; + require_once dirname( __FILE__ ) . '/order/class-wiaas-order-item.php'; add_filter('woocommerce_register_post_type_shop_order', array(__CLASS__, 'manage_order_settings')); @@ -436,6 +437,53 @@ class Wiaas_Order { return $code; } + /** + * Retrieve customer organization id for order + * + * @param int $order_id + * + * @return int|null + */ + public static function get_order_customer_organization_id($order_id) { + $order = wc_get_order($order_id); + + $customer_organization_id = $order->get_meta('_wiaas_customer_id', true); + + if (empty($customer_organization_id)) { + + $customer_organization_id = wiaas_get_user_organization_id($order->get_customer_id()); + } + + return $customer_organization_id; + } + + /** + * Retrieve customer organization info from order + * + * @param int $order_id + * + * @return array|null + */ + public static function get_customer_organization_info($order_id) { + $order = wc_get_order($order_id); + + $customer_organization_info = $order->get_meta('_wiaas_customer_info', true); + + $customer_organization_id = self::get_order_customer_organization_id($order_id); + + if ( empty($customer_organization_info) && ! empty( $customer_organization_id) ) { + + $customer_organization_info = wiaas_get_organization_info($customer_organization_id); + } + + if ( ! empty($customer_organization_info) ) { + + $customer_organization_info['id'] = $customer_organization_id; + } + + return ! empty($customer_organization_info) ? $customer_organization_info : null; + } + /** * PRIVATE */ diff --git a/backend/app/plugins/wiaas/includes/order/class-wiaas-order-item.php b/backend/app/plugins/wiaas/includes/order/class-wiaas-order-item.php new file mode 100644 index 0000000..57da78f --- /dev/null +++ b/backend/app/plugins/wiaas/includes/order/class-wiaas-order-item.php @@ -0,0 +1,90 @@ +get_meta('_wiaas_standard_package'); + return ! empty($is_standard); + } + + /** + * @param WC_Order_Item $order_item + * + * @return float + */ + public static function get_services_total($order_item) { + $quantity = $order_item->get_quantity(); + + return $quantity * floatval($order_item->get_meta('_wiaas_services_extra')); + } + + /** + * @param WC_Order_Item $order_item + * + * @return float + */ + public static function get_recurrent_total($order_item) { + $quantity = $order_item->get_quantity(); + + return $quantity * floatval($order_item->get_meta('_wiaas_recurrent_extra')); + } + + /** + * @param WC_Order_Item $order_item + * + * @return float + */ + public static function get_monthly_recurring_total($order_item) { + + return self::get_services_total($order_item) + self::get_recurrent_total($order_item); + } + +} + +Wiaas_Order_Item::init();