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/admin/pricing/views/html-package-pricing-page.php b/backend/app/plugins/wiaas/includes/admin/pricing/views/html-package-pricing-page.php index 8802d92..8722eb3 100644 --- a/backend/app/plugins/wiaas/includes/admin/pricing/views/html-package-pricing-page.php +++ b/backend/app/plugins/wiaas/includes/admin/pricing/views/html-package-pricing-page.php @@ -121,8 +121,7 @@ if ( ! defined( 'ABSPATH' ) ) { if ($cat === 'product') { - $products_total_cost = wiaas_get_package_hardware_procurement_cost($package) + - wiaas_get_package_software_procurement_cost($package); + $products_total_cost = wiaas_get_package_product_procurement_cost($package); esc_html_e('Total: ' . $products_total_cost, 'wiaas'); } 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 1e61eef..6a5822a 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-admin.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-admin.php @@ -28,6 +28,8 @@ class Wiaas_Admin { require_once dirname(__FILE__) . '/admin/class-wiaas-admin-delivery-process.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 5368ef7..2430b76 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php @@ -22,6 +22,7 @@ class Wiaas_DB_Update { '20191019014650' => 'wiaas_db_update_add_product_properties_ui_fields', '20181019064450' => 'wiaas_db_update_add_bundle_properties_ui_field', '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/pricing/wiaas-pricing-functions.php b/backend/app/plugins/wiaas/includes/pricing/wiaas-pricing-functions.php index a9ba343..fc95fa7 100644 --- a/backend/app/plugins/wiaas/includes/pricing/wiaas-pricing-functions.php +++ b/backend/app/plugins/wiaas/includes/pricing/wiaas-pricing-functions.php @@ -50,14 +50,14 @@ function wiaas_get_price_margin($fixed_price, $principal_amount, $total_cost) { return $total_gain - $total_cost; } -function wiaas_get_package_hardware_procurement_cost($package) { +function wiaas_get_package_product_procurement_cost($package){ $bundled_items = $package->get_bundled_items(); $total_cost = 0; foreach ($bundled_items as $bundled_item) { $product = $bundled_item->product; - if (Wiaas_Product_Category::get_category($product) === 'hardware') { + if (Wiaas_Product_Category::is_product($product)) { $total_cost += Wiaas_Pricing::get_product_total_cost($product) * $bundled_item->get_quantity(); } } @@ -65,19 +65,6 @@ function wiaas_get_package_hardware_procurement_cost($package) { return $total_cost; } -function wiaas_get_package_software_procurement_cost($package) { - $bundled_items = $package->get_bundled_items(); - $total_cost = 0; - - foreach ($bundled_items as $bundled_item) { - if (Wiaas_Product_Category::is_hardware($bundled_item->product)) { - $total_cost += Wiaas_Pricing::get_product_total_cost($bundled_item->product) * $bundled_item->get_quantity(); - } - } - - return $total_cost; -} - function wiaas_get_package_installation_procurement_cost($package) { $bundled_items = $package->get_bundled_items(); $total_cost = 0; diff --git a/backend/app/plugins/wiaas/includes/product/class-wiaas-product-category.php b/backend/app/plugins/wiaas/includes/product/class-wiaas-product-category.php index 4e981c3..dcb0dbf 100644 --- a/backend/app/plugins/wiaas/includes/product/class-wiaas-product-category.php +++ b/backend/app/plugins/wiaas/includes/product/class-wiaas-product-category.php @@ -86,26 +86,15 @@ class Wiaas_Product_Category { } /** - * Determines if provided product is hardware + * Determines if provided product type is product (hardware or software) * @param $product * * @return bool */ - public static function is_hardware($product) { - return self::_get_product_category_type($product) === 'hardware'; + public static function is_product($product) { + return self::_get_product_category_type($product) === 'product'; } - /** - * Determines if provided product is software - * @param $product - * - * @return bool - */ - public static function is_software($product) { - return self::_get_product_category_type($product) === 'software'; - } - - // PRIVATE 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; } }