From d6c5a36e9425e4f74960c8a0be5fa7d0b83abdbf Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Wed, 31 Oct 2018 12:48:45 +0100 Subject: [PATCH] handle delivery schedule dates --- ...iaas-admin-order-delivery-process-flow.php | 42 +++- .../views/html-order-delivery-dates.php | 198 +++++++++++++++++ .../views/html-order-global-delivery-date.php | 38 ++++ ...iaas-admin-order-delivery-process-ajax.php | 118 ++++++++++ .../wiaas/includes/class-wiaas-order.php | 204 +++++++++++++++++- .../wiaas/includes/class-wiaas-product.php | 4 + .../wiaas/includes/class-wiaas-user.php | 1 + .../includes/user/class-wiaas-supplier.php | 14 ++ 8 files changed, 612 insertions(+), 7 deletions(-) create mode 100644 backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-delivery-dates.php create mode 100644 backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-global-delivery-date.php create mode 100644 backend/app/plugins/wiaas/includes/user/class-wiaas-supplier.php diff --git a/backend/app/plugins/wiaas/includes/admin/delivery-process/class-wiaas-admin-order-delivery-process-flow.php b/backend/app/plugins/wiaas/includes/admin/delivery-process/class-wiaas-admin-order-delivery-process-flow.php index 3902e23..0ab60e8 100644 --- a/backend/app/plugins/wiaas/includes/admin/delivery-process/class-wiaas-admin-order-delivery-process-flow.php +++ b/backend/app/plugins/wiaas/includes/admin/delivery-process/class-wiaas-admin-order-delivery-process-flow.php @@ -3,7 +3,8 @@ class Wiaas_Admin_Order_Process_Flow { public static function init() { - add_action('add_meta_boxes', array(__CLASS__, 'create_custom_meta_box'), 100); + add_action('add_meta_boxes', array(__CLASS__, 'create_custom_meta_box'), 100); + add_action('woocommerce_admin_order_data_after_order_details', array(__CLASS__, 'add_custom_fields_after_order_details'), 10, 1 ); } public static function create_custom_meta_box() { @@ -25,6 +26,14 @@ class Wiaas_Admin_Order_Process_Flow { 'default' ); } + + public static function add_custom_fields_after_order_details($order){ + $global_estimated_delivery_date = Wiaas_Order::get_global_estimated_date($order->id); + $formated_global_estimated_delivery_date = $global_estimated_delivery_date ? date("Y-m-d", $global_estimated_delivery_date) : ""; + + $order_id = $order->id; + require 'views/html-order-global-delivery-date.php'; + } public static function add_process_flow_meta_box(){ global $post; @@ -42,17 +51,38 @@ class Wiaas_Admin_Order_Process_Flow { require 'views/html-order-process-flow.php'; } - } public static function add_delivery_dates_meta_box(){ - // global $post; + global $post; - // $order_id = $post->ID; + $order_id = $post->ID; + + $suppliers = Wiaas_Order::get_suppliers($order_id); + $final_estimated_date = Wiaas_Order::get_final_estimated_date($order_id); + $final_confirmed_date = Wiaas_Order::get_final_confirmed_date($order_id); + $earliest_installation_date = Wiaas_Order::get_earliest_installation_date($order_id); - // $suppliers = Wiaas_Order::get_suppliers($order_id); - // require 'views/html-order-delivery-dates.php'; + if ($final_estimated_date === 0){ + $final_estimated_date = '-'; + }else{ + $final_estimated_date = date('Y-m-d', $final_estimated_date); + } + + if ($final_confirmed_date === 0){ + $final_confirmed_date = '-'; + }else{ + $final_confirmed_date = date('Y-m-d', $final_confirmed_date); + } + + if ($earliest_installation_date === 0){ + $earliest_installation_date = '-'; + }else{ + $earliest_installation_date = date('Y-m-d', $earliest_installation_date); + } + + require 'views/html-order-delivery-dates.php'; } } diff --git a/backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-delivery-dates.php b/backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-delivery-dates.php new file mode 100644 index 0000000..55d3431 --- /dev/null +++ b/backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-delivery-dates.php @@ -0,0 +1,198 @@ + + + +
+ + + + + + + + '; + $estimated_date = $supplier['estimated_date'] ? date("Y-m-d", $supplier['estimated_date']) : ""; + $confirmed_date = $supplier['confirmed_date'] ? date("Y-m-d", $supplier['confirmed_date']) : ""; + + ?> + + + + + + + + + + + + + + $tracking_info){ + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SuppliersEstimated dateConfirmed date
' . $supplier['name'] . ' + type="date" onChange="onEstimatedDeliveryDateChange(, this.value)" value="" /> + + type="date" onChange="onConfirmedDeliveryDateChange(, this.value)" value="" /> +

Tracking

+ placeholder="Tracking number" value="" /> + placeholder="Tracking URL" value="" />

Final dates :


Earliest installation date :

+
+ + \ No newline at end of file diff --git a/backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-global-delivery-date.php b/backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-global-delivery-date.php new file mode 100644 index 0000000..dc8d28a --- /dev/null +++ b/backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-global-delivery-date.php @@ -0,0 +1,38 @@ + + +

+ + +

+ + \ No newline at end of file diff --git a/backend/app/plugins/wiaas/includes/admin/delivery-process/wiaas-admin-order-delivery-process-ajax.php b/backend/app/plugins/wiaas/includes/admin/delivery-process/wiaas-admin-order-delivery-process-ajax.php index 31e0337..71ec01e 100644 --- a/backend/app/plugins/wiaas/includes/admin/delivery-process/wiaas-admin-order-delivery-process-ajax.php +++ b/backend/app/plugins/wiaas/includes/admin/delivery-process/wiaas-admin-order-delivery-process-ajax.php @@ -1,6 +1,12 @@ get_meta('_wiaas_order_additional_days_prior_installation'); + } + + public static function add_additional_tracking_info($order_id, $supplier_id){ + $suppliers = self::get_suppliers($order_id); + foreach($suppliers as $key => $supplier){ + if ($supplier['id'] === $supplier_id){ + $suppliers[$key]['tracking_info'][] = array( + 'number' => '', + 'url' => '' + ); + + //not working + //$order = wc_get_order($order_id); + //$order->update_meta_data('_wiaas_suppliers', $suppliers); + return update_post_meta($order_id, '_wiaas_suppliers', $suppliers); + } + } + + return false; + } + + public static function save_tracking_info($order_id, $supplier_id, $tracking_index, $tracking_num, $tracking_url){ + $suppliers = self::get_suppliers($order_id); + foreach($suppliers as $key => $supplier){ + if ($supplier['id'] === $supplier_id){ + $suppliers[$key]['tracking_info'][$tracking_index]['number'] = $tracking_num; + $suppliers[$key]['tracking_info'][$tracking_index]['url'] = $tracking_url; + + //not working + //$order = wc_get_order($order_id); + //$order->update_meta_data('_wiaas_suppliers', $suppliers); + return update_post_meta($order_id, '_wiaas_suppliers', $suppliers); + } + } + + return false; + } + + public static function delete_tracking_info($order_id, $supplier_id, $tracking_index){ + $suppliers = self::get_suppliers($order_id); + foreach($suppliers as $key => $supplier){ + if ($supplier['id'] === $supplier_id){ + unset($suppliers[$key]['tracking_info'][$tracking_index]); + + //not working + //$order = wc_get_order($order_id); + //$order->update_meta_data('_wiaas_suppliers', $suppliers); + return update_post_meta($order_id, '_wiaas_suppliers', $suppliers); + } + } + + return false; + } + + public static function save_estimated_date($order_id, $supplier_id, $date){ + $suppliers = self::get_suppliers($order_id); + $result = false; + + foreach($suppliers as $key => $supplier){ + if ($supplier['id'] === $supplier_id){ + $suppliers[$key]['estimated_date'] = $date; + } + } + + $result = update_post_meta($order_id, '_wiaas_suppliers', $suppliers); + self::_update_max_and_earliest_dates($order_id); + //Not working + //$order = wc_get_order($order_id); + //$order->update_meta_data('_wiaas_suppliers', $suppliers); + + return $result; + } + + public static function save_confirmed_date($order_id, $supplier_id, $date){ + $suppliers = self::get_suppliers($order_id); + $result = false; + foreach($suppliers as $key => $supplier){ + if ($supplier['id'] === $supplier_id){ + $suppliers[$key]['confirmed_date'] = $date; + if (!$suppliers[$key]['estimated_date']){ + $suppliers[$key]['estimated_date'] = $date; + } + } + } + + + $result = update_post_meta($order_id, '_wiaas_suppliers', $suppliers); + self::_update_max_and_earliest_dates($order_id); + //Not working + //$order = wc_get_order($order_id); + //$order->update_meta_data('_wiaas_suppliers', $suppliers); + return $result; + } + + public static function get_global_estimated_date($order_id){ + $order = wc_get_order($order_id); + if (!$order){ + return NULL; + } + + return $order->get_meta('_wiaas_global_estimated_delivery_date') ?: NULL; + } + + public static function save_global_estimated_date($order_id, $date){ + return update_post_meta($order_id, '_wiaas_global_estimated_delivery_date', $date); + } + + public static function get_final_estimated_date($order_id){ + $order = wc_get_order($order_id); + if (!$order){ + return 0; + } + + return $order->get_meta('_wiaas_final_estimated_delivery_date') ?: 0; + } + + public static function get_final_confirmed_date($order_id){ + $order = wc_get_order($order_id); + if (!$order){ + return 0; + } + + return $order->get_meta('_wiaas_final_confirmed_delivery_date') ?: 0; + } + + public static function get_earliest_installation_date($order_id){ + $order = wc_get_order($order_id); + if (!$order){ + return 0; + } + + return $order->get_meta('_wiaas_earliest_installation_date') ?: 0; + } + + + /** + * Get suppliers related to order + */ + public static function get_suppliers($order_id){ + $order = wc_get_order($order_id); + return $order->get_meta('_wiaas_suppliers'); + } + /** * Update `shop_order` post type settings before creation to enable better order management for wiaas * @@ -190,12 +336,68 @@ class Wiaas_Order { public static function get_order_tender($order_id) { return get_post_meta($order_id, '_wiaas_tender', true); - } + } /** * PRIVATE */ + private static function _update_max_and_earliest_dates($order_id){ + $suppliers = self::get_suppliers($order_id); + + $max_estimated_date = 0; + $max_confirmed_date = 0; + $earliest_installation_date = 0; + $missing_estimated = false; + $missing_confirmed = false; + $no_earliest = false; + + foreach($suppliers as $supplier){ + if (!$supplier['estimated_date']){ + $missing_estimated = true; + } + if (!$supplier['confirmed_date']){ + $missing_confirmed = true; + } + + if ($supplier['estimated_date'] > $max_estimated_date){ + $max_estimated_date = $supplier['estimated_date']; + } + if ($supplier['confirmed_date'] > $max_confirmed_date){ + $max_confirmed_date = $supplier['confirmed_date']; + } + + if (!$no_earliest){ + $supplier_date = $supplier['estimated_date']; + if ($supplier['confirmed_date'] > $supplier_date){ + $supplier_date = $supplier['confirmed_date']; + } + if ($supplier_date > 0){ + if ($supplier_date > $earliest_installation_date){ + $earliest_installation_date = $supplier_date; + } + }else{ + $no_earliest = true; + $earliest_installation_date = 0; + } + } + } + + if ($missing_estimated && $missing_confirmed){ + $no_earliest = true; + $earliest_installation_date = 0; + } + + if (!$no_earliest){ + $earliest_installation_date = strtotime('+' . self::get_additional_days_prior_installation($order_id) . ' days', $earliest_installation_date); + } + + update_post_meta($order_id, '_wiaas_final_confirmed_delivery_date', $max_confirmed_date); + update_post_meta($order_id, '_wiaas_final_estimated_delivery_date', $max_estimated_date); + update_post_meta($order_id, '_wiaas_earliest_installation_date', $earliest_installation_date); + + } + /** * Append specific wiaas order details, like reference * @param $data diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-product.php b/backend/app/plugins/wiaas/includes/class-wiaas-product.php index 9bddd4a..ba44118 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-product.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-product.php @@ -70,6 +70,10 @@ class Wiaas_Product { return $args; } + + public static function get_supplier_id($product_id){ + return get_field('supplier', $product_id) ?: NULL; + } } Wiaas_Product::init(); \ No newline at end of file diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-user.php b/backend/app/plugins/wiaas/includes/class-wiaas-user.php index 5aaa4c2..6158bb5 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-user.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-user.php @@ -10,6 +10,7 @@ class Wiaas_User { public static function init() { include_once dirname( __FILE__ ) . '/class-wiaas-countries.php'; include_once dirname( __FILE__ ) . '/user/class-wiaas-customer.php'; + include_once dirname( __FILE__ ) . '/user/class-wiaas-supplier.php'; add_action('init', array(__CLASS__, 'load_user_organization')); add_action('plugins_loaded', array(__CLASS__, 'remove_default_user_groups'), 30); diff --git a/backend/app/plugins/wiaas/includes/user/class-wiaas-supplier.php b/backend/app/plugins/wiaas/includes/user/class-wiaas-supplier.php new file mode 100644 index 0000000..b328f36 --- /dev/null +++ b/backend/app/plugins/wiaas/includes/user/class-wiaas-supplier.php @@ -0,0 +1,14 @@ +