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;
}
}