Fix assigment order issues

This commit is contained in:
Almira Krdzic
2018-12-02 22:18:09 +01:00
parent 3dbdb657c9
commit e87d1521dd
23 changed files with 873 additions and 256 deletions

View File

@@ -16,8 +16,10 @@ 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 );
add_action('woocommerce_checkout_order_processed', array( __CLASS__, 'assign_order_to_customer_organization' ));
add_action('woocommerce_checkout_order_processed', array( __CLASS__, 'assign_order_to_commercial_lead_organization' ));
add_action('woocommerce_checkout_order_processed', array( __CLASS__, 'assign_order_to_supplier_organizations'));
add_action('wiaas_order_item_installation_assigned', array(__CLASS__, 'assign_order_to_installation_organization'), 10, 3);
}
/**
@@ -43,6 +45,7 @@ class Wiaas_Access_Management {
empty(Wiaas_Package_Pricing::get_package_prices($product))) {
$access_group = Groups_Group::read_by_name('admin');
} else {
$access_group = Groups_Group::read_by_name('Registered');
@@ -64,13 +67,20 @@ class Wiaas_Access_Management {
*
* @param int $order_id
*/
public static function assign_order_to_organization($order_id) {
public static function assign_order_to_customer_organization($order_id) {
// assign order to customer organization
$customer_id = wiaas_get_current_user_organization_id();
Wiaas_User_Organization::assign_post_to_organization($order_id, $customer_id);
}
/**
* Assign order to commercial lead organization
*
* @param int $order_id
*/
public static function assign_order_to_commercial_lead_organization($order_id) {
$order = wc_get_order($order_id);
// assign order to commercial lead organization
$commercial_lead_id = absint($order->get_meta('_wiaas_commercial_lead_id', true));
if ($commercial_lead_id) {
Wiaas_User_Organization::assign_post_to_organization($order_id, $commercial_lead_id);
@@ -79,24 +89,46 @@ class Wiaas_Access_Management {
}
/**
* Assignees order to supplier organizations extracted from ordered items when order payment is complete.
* Assignees order to supplier organizations extracted from ordered items except installation
*
* Order will be assigned to corresponding installation company during delivery process
*
* @param int $order_id
*/
public static function assign_order_to_suppliers($order_id){
public static function assign_order_to_supplier_organizations($order_id) {
$order = wc_get_order($order_id);
$product_from_order = $order->get_items('line_item');
$order = wc_get_order($order_id);
foreach ($product_from_order as $product_item) {
$order_items = $order->get_items('line_item');
$supplier_organisation_id = Wiaas_Product_Supplier
::get_supplier_organisation_id_from_product($product_item->get_product_id());
foreach ($order_items as $key => $order_item) {
Wiaas_User_Organization::assign_post_to_organization($order_id, $supplier_organisation_id);
$supplier_organisation_id = $order_item->get_meta('_wiaas_supplier_organization_id');
if (! empty($supplier_organisation_id) && $order_item->get_meta('_wiaas_category') !== 'installation') {
Wiaas_User_Organization::assign_post_to_organization($order_id, $supplier_organisation_id);
}
}
}
/**
* Assign order to installation organization that handles installation of corresponding ordered bundle item
*
* @param WC_Order $order
* @param WC_Order_Item $bundle_item
* @param WC_Order_Item $installation_item
*/
public static function assign_order_to_installation_organization($order, $bundle_item, $installation_item) {
$supplier_organisation_id = $installation_item->get_meta('_wiaas_supplier_organization_id');
if (! empty($supplier_organisation_id) ) {
Wiaas_User_Organization::assign_post_to_organization($order->get_id(), $supplier_organisation_id);
}
}
}
Wiaas_Access_Management::init();

View File

@@ -175,15 +175,17 @@ class Wiaas_Countries {
}
$name = $choices[$code];
$result = wp_insert_term($name, 'product_country');
$result = wp_insert_term($name, 'product_country', array(
'slug' => $code
));
if (is_wp_error($result)) {
continue;
}
update_term_meta($result->term_id, '_wiaas_country_code', $code);
update_term_meta($result->term_id, '_wiaas_country_currency', $info['currency']);
update_term_meta($result->term_id, '_wiaas_country_vat', $info['vat']);
update_term_meta($result['term_id'], '_wiaas_country_code', $code);
update_term_meta($result['term_id'], '_wiaas_country_currency', $info['currency']);
update_term_meta($result['term_id'], '_wiaas_country_vat', $info['vat']);
}
}

View File

@@ -48,7 +48,7 @@ class Wiaas_Pricing {
$bundled_items = $package->get_bundled_items();
foreach ($bundled_items as $bundled_item) {
$product = $bundled_item->product;
$product = wc_get_product($bundled_item->get_product_id());
$product_cat = Wiaas_Product_Category::get_category($product);
if (!isset($total_cost_per_category[$product_cat])) {

View File

@@ -228,6 +228,12 @@ class Wiaas_Order_Fields {
$bundle_item->update_meta_data('_wiaas_installation', $selected_installation->get_id());
$bundle_item->save_meta_data();
/**
* Apply actions related to order item installation
* (ex. make order visible to corresponding installation company)
*/
do_action('wiaas_order_item_installation_assigned', $order, $bundle_item, $selected_installation);
}
}
}
@@ -448,6 +454,12 @@ class Wiaas_Order_Fields {
$entry[(string) $field->id] = 'wiaas_installation_' . $order->get_id() . '|' . $installation_item->get_id();
/**
* Apply actions related to order item installation
* (ex. make order visible to corresponding installation company)
*/
do_action('wiaas_order_item_installation_assigned', $order, $bundle_item, $installation_item);
} else if (count($installation_items) > 1) {
// force admin to select installation