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..700272b --- /dev/null +++ b/backend/app/plugins/wiaas/includes/admin/admin-supplier/class-wiaas-admin-supplier-orders.php @@ -0,0 +1,136 @@ +ID); + + $items = array(); + + 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 26974dc..4e9eb53 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,26 @@ 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_item) { + + $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); + } + + } } Wiaas_Access_Management::init(); 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..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 @@ -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,30 @@ 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) { + + $supplier_terms = wp_get_object_terms($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; + + return $supplier_organisation_id; } }