From 51cb2af4388db8476f777f656a7674b19b846fd2 Mon Sep 17 00:00:00 2001 From: Nedim Uka Date: Tue, 30 Oct 2018 15:04:42 +0100 Subject: [PATCH 1/3] Give order access to suppliers , when order is created --- .../class-wiaas-access-management.php | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php b/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php index 26974dc..01fdde3 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php @@ -17,6 +17,7 @@ class Wiaas_Access_Management { add_action( 'save_post', array( __CLASS__, 'maybe_handle_product_access' ), 999, 2 ); add_action('woocommerce_new_order', array( __CLASS__, 'assign_order_to_organization' )); + add_action('woocommerce_payment_complete', array( __CLASS__, 'assign_order_to_suppliers'),20,1 ); } /** @@ -76,6 +77,27 @@ class Wiaas_Access_Management { } } + + /** + * Assignees order to supplier organizations extracted from ordered items when order payment is complete. + * + * @param int $order_id + */ + public static function assign_order_to_suppliers($order_id){ + + $order = wc_get_order($order_id); + $product_from_order = $order->get_items('line_item'); + + foreach ($product_from_order as $product) { + + $supplier_terms = wp_get_object_terms($product->get_product_id(), 'supplier'); + $supplier_organisation_slug = $supplier_terms[0]->slug; + $supplier_organisation_id = get_term_by('slug' ,$supplier_organisation_slug,'wiaas-user-organization')->term_id; + + Wiaas_User_Organization::assign_post_to_organization($order_id, $supplier_organisation_id); + } + + } } Wiaas_Access_Management::init(); From 26353f0d8058ac965c5c721adfb92cca10b9e1f6 Mon Sep 17 00:00:00 2001 From: Nedim Uka Date: Wed, 31 Oct 2018 15:04:23 +0100 Subject: [PATCH 2/3] Show supplier orders, and preview --- .../wiaas/assets/css/wiaas-admin-supplier.css | 3 + .../wiaas/assets/js/wiaas-admin-supplier.js | 7 + .../class-wiaas-admin-supplier-orders.php | 136 ++++++++++++++++++ .../admin/class-wiaas-admin-supplier.php | 34 +++++ .../class-wiaas-access-management.php | 7 +- .../wiaas/includes/class-wiaas-admin.php | 2 + .../wiaas/includes/class-wiaas-db-update.php | 3 +- .../db-updates/wiaas-db-update-roles.php | 5 + .../product/class-wiaas-product-supplier.php | 37 +++-- 9 files changed, 220 insertions(+), 14 deletions(-) create mode 100644 backend/app/plugins/wiaas/assets/css/wiaas-admin-supplier.css create mode 100644 backend/app/plugins/wiaas/assets/js/wiaas-admin-supplier.js create mode 100644 backend/app/plugins/wiaas/includes/admin/admin-supplier/class-wiaas-admin-supplier-orders.php create mode 100644 backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-supplier.php diff --git a/backend/app/plugins/wiaas/assets/css/wiaas-admin-supplier.css b/backend/app/plugins/wiaas/assets/css/wiaas-admin-supplier.css new file mode 100644 index 0000000..ab3f578 --- /dev/null +++ b/backend/app/plugins/wiaas/assets/css/wiaas-admin-supplier.css @@ -0,0 +1,3 @@ +.wc-order-preview-address { + display: none; +} diff --git a/backend/app/plugins/wiaas/assets/js/wiaas-admin-supplier.js b/backend/app/plugins/wiaas/assets/js/wiaas-admin-supplier.js new file mode 100644 index 0000000..198119f --- /dev/null +++ b/backend/app/plugins/wiaas/assets/js/wiaas-admin-supplier.js @@ -0,0 +1,7 @@ +jQuery(document).ready(function($) { + $( document.body ) + .on( 'wc_backbone_modal_loaded', function () { + $(".wc-order-preview-address").remove(); + } ); + +}); 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 new file mode 100644 index 0000000..b660402 --- /dev/null +++ b/backend/app/plugins/wiaas/includes/admin/admin-supplier/class-wiaas-admin-supplier-orders.php @@ -0,0 +1,136 @@ +ID); + + $items = array(); + error_log('Filtering'); + foreach ($order_items as $key => $order_item) { + + $product = wc_get_product($order_item->get_product_id()); + + if ($product->get_type() == 'simple') { + + $supplier_organisation_id = Wiaas_Product_Supplier + ::get_supplier_organisation_id_from_product($order_item->get_product_id()); + + if ($supplier_organisation_id === $user_organisation_id) { + $items[$key] = $order_item; + } + } + } + + return $items; + } + + /** + * Override default table columns so only supplier specific columns are visible + * + * @param $columns + * + * @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' ); + + return $show_columns; + } + + + /** Append supplier columns to table sortable columns + * + * @param $sortable_columns + * + * @return mixed + */ + public static function define_sortable_columns_for_list_table_orders($sortable_columns) { + + $sortable_columns['_wiaas_order_number'] = 'ID'; + + return $sortable_columns; + } + + /** + * Render supplier specific columns + * + * @param $column + * @param $order_id + */ + public static function render_columns_for_list_table_orders($column, $order_id) { + + if ($column === '_wiaas_order_number') { + + $order = wc_get_order($order_id); + + echo '#' . esc_attr($order->get_order_number()) . ''; + + if ($order->get_status() !== 'trash') { + echo '' . esc_html(__('Preview', 'wiaas')) . ''; + } + } + } +} + +Wiaas_Admin_Supplier_Orders::init(); diff --git a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-supplier.php b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-supplier.php new file mode 100644 index 0000000..94e05ee --- /dev/null +++ b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-supplier.php @@ -0,0 +1,34 @@ +roles[0]; + + $is_supplier = $role === 'supplier'; + + if ($is_supplier) { + + require_once dirname( __FILE__ ) . '/admin-supplier/class-wiaas-admin-supplier-orders.php'; + add_action( 'admin_enqueue_scripts', array(__CLASS__, 'enqueue_scripts'), 100 ); + + } + } + + public static function enqueue_scripts() { + $plugin_url = untrailingslashit( plugins_url( '/', WIAAS_FILE ) ); + + wp_enqueue_script( 'wiaas-admin-supplier', $plugin_url . '/assets/js/wiaas-admin-supplier.js' ); + + wp_enqueue_style( 'wiaas-admin-supplier', $plugin_url . '/assets/css/wiaas-admin-supplier.css' ); + } +} + +Wiaas_Admin_Supplier::init(); \ No newline at end of file diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php b/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php index 01fdde3..4e9eb53 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-access-management.php @@ -88,11 +88,10 @@ class Wiaas_Access_Management { $order = wc_get_order($order_id); $product_from_order = $order->get_items('line_item'); - foreach ($product_from_order as $product) { + foreach ($product_from_order as $product_item) { - $supplier_terms = wp_get_object_terms($product->get_product_id(), 'supplier'); - $supplier_organisation_slug = $supplier_terms[0]->slug; - $supplier_organisation_id = get_term_by('slug' ,$supplier_organisation_slug,'wiaas-user-organization')->term_id; + $supplier_organisation_id = Wiaas_Product_Supplier + ::get_supplier_organisation_id_from_product($product_item->get_product_id()); Wiaas_User_Organization::assign_post_to_organization($order_id, $supplier_organisation_id); } diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-admin.php b/backend/app/plugins/wiaas/includes/class-wiaas-admin.php index 39d0b48..497a74b 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-admin.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-admin.php @@ -25,6 +25,8 @@ class Wiaas_Admin { require_once dirname(__FILE__) . '/admin/class-wiaas-admin-product.php'; + require_once dirname(__FILE__) . '/admin/class-wiaas-admin-supplier.php'; + add_action( 'admin_enqueue_scripts', array(__CLASS__, 'enqueue_scripts'), 100 ); } diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php b/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php index 4d57c07..da8e8af 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php @@ -22,7 +22,8 @@ class Wiaas_DB_Update { '20191019014550' => 'wiaas_db_update_add_general_ui_fields', '20191019014650' => 'wiaas_db_update_add_product_properties_ui_fields', '20181019064450' => 'wiaas_db_update_add_bundle_properties_ui_field', - '20191020014650' => 'wiaas_create_organization_roles_capabilities' + '20191020014650' => 'wiaas_create_organization_roles_capabilities', + '20191030162450' => 'wiaas_db_update_update_supplier_order_capabilities' ); public static function execute() { diff --git a/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-roles.php b/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-roles.php index 0873cdd..6a3fcc5 100644 --- a/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-roles.php +++ b/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-roles.php @@ -310,4 +310,9 @@ function wiaas_admin_create_role_access_groups() { Groups_Group::create(array( 'name' => 'admin', )); +} + +function wiaas_db_update_update_supplier_order_capabilities() { + // add supplier role to view orders + wp_roles()->add_cap( 'supplier', 'edit_shop_orders' ); } \ No newline at end of file diff --git a/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php b/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php index 2bfc50f..e8f87df 100644 --- a/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php +++ b/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php @@ -6,8 +6,8 @@ class Wiaas_Product_Supplier { public static function init() { add_action('init', array(__CLASS__, 'register_supplier_taxonomy')); - add_action('wiaas_organization_created', array(__CLASS__, 'on_organization_added'),20, 2); - add_action('wiaas_organization_roles_updated' , array(__CLASS__, 'on_organization_added'),20, 2); + add_action('wiaas_organization_created', array(__CLASS__, 'on_organization_added'), 20, 2); + add_action('wiaas_organization_roles_updated', array(__CLASS__, 'on_organization_added'), 20, 2); } /** @@ -34,7 +34,7 @@ class Wiaas_Product_Supplier { 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, - 'meta_box_cb' => false, + 'meta_box_cb' => false, 'query_var' => true, 'rewrite' => array('slug' => 'template_category'), ); @@ -53,15 +53,34 @@ class Wiaas_Product_Supplier { $organization = get_term_by('id', $organization_id, 'wiaas-user-organization'); - $supplier = term_exists($organization->slug, 'supplier'); + $supplier = term_exists($organization->slug, 'supplier'); - if (! $supplier && in_array('supplier', $roles) ) { - $supplier = wp_insert_term($organization->name, 'supplier', array( - 'slug' => $organization->slug - )); + if (!$supplier && in_array('supplier', $roles)) { + $supplier = wp_insert_term($organization->name, 'supplier', array( + 'slug' => $organization->slug + )); } - add_term_meta($supplier['term_id'], 'organisation_id', $organization->term_id); + add_term_meta($supplier['term_id'], 'organisation_id', $organization->term_id); + } + + /** + * Retrieve organisation id of the supplier of the product + * + * @param $product_id + * @return int organization_id + */ + public static function get_supplier_organisation_id_from_product($product_id) { + error_log( '$product_id: '.$product_id); + + $supplier_terms = wp_get_object_terms($product_id, 'supplier'); + error_log( '$supplier_terms: '.$supplier_terms); + $supplier_organisation_slug = $supplier_terms[0]->slug; + error_log( '$supplier_org_slug'.$supplier_organisation_slug); + $supplier_organisation_id = get_term_by('slug', $supplier_organisation_slug, 'wiaas-user-organization')->term_id; + + error_log( '$supplier_organisation id: '.$supplier_organisation_id); + return $supplier_organisation_id; } } From 281f71d853812db4f4c35110edd3441d9a330990 Mon Sep 17 00:00:00 2001 From: Nedim Uka Date: Thu, 1 Nov 2018 10:18:37 +0100 Subject: [PATCH 3/3] Removed error logs --- .../admin-supplier/class-wiaas-admin-supplier-orders.php | 2 +- .../wiaas/includes/product/class-wiaas-product-supplier.php | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) 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 b660402..700272b 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 @@ -62,7 +62,7 @@ class Wiaas_Admin_Supplier_Orders { $user_organisation_id = Wiaas_User_Organization::get_user_organization_id(wp_get_current_user()->ID); $items = array(); - error_log('Filtering'); + foreach ($order_items as $key => $order_item) { $product = wc_get_product($order_item->get_product_id()); diff --git a/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php b/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php index e8f87df..6d25327 100644 --- a/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php +++ b/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php @@ -71,15 +71,11 @@ class Wiaas_Product_Supplier { * @return int organization_id */ public static function get_supplier_organisation_id_from_product($product_id) { - error_log( '$product_id: '.$product_id); $supplier_terms = wp_get_object_terms($product_id, 'supplier'); - error_log( '$supplier_terms: '.$supplier_terms); $supplier_organisation_slug = $supplier_terms[0]->slug; - error_log( '$supplier_org_slug'.$supplier_organisation_slug); $supplier_organisation_id = get_term_by('slug', $supplier_organisation_slug, 'wiaas-user-organization')->term_id; - error_log( '$supplier_organisation id: '.$supplier_organisation_id); return $supplier_organisation_id; } }