Merge branch 'development' into dashboard
This commit is contained in:
@@ -78,12 +78,16 @@ class Wiaas_Admin_CL_Orders {
|
||||
* @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' );
|
||||
$show_columns['order_total'] = __( 'Total', 'woocommerce' );
|
||||
$show_columns = array();
|
||||
$show_columns['cb'] = $columns['cb'];
|
||||
$show_columns['_wiaas_order_number'] = __( 'Order', 'wiaas' );
|
||||
$show_columns['order_date'] = $columns['order_date'];
|
||||
$show_columns['wiaas_reference'] = __( 'Location', 'wiaas' );
|
||||
$show_columns['wiaas_customer'] = __( 'Customer', 'wiaas' );
|
||||
$show_columns['order_status'] = $columns['order_status'];
|
||||
$show_columns['billing_address'] = $columns['billing_address'];
|
||||
$show_columns['shipping_address'] = $columns['shipping_address'];
|
||||
$show_columns['order_total'] = $columns['order_total'];
|
||||
|
||||
return $show_columns;
|
||||
}
|
||||
|
||||
@@ -21,11 +21,15 @@ class Wiaas_Admin_Supplier_Orders {
|
||||
|
||||
add_filter('woocommerce_admin_order_preview_actions', array(__CLASS__, 'remove_actions_from_order_preview'));
|
||||
|
||||
add_filter('woocommerce_admin_order_preview_line_items', array(__CLASS__, 'filter_order_items_for_order_preview'), 10, 2);
|
||||
add_filter('woocommerce_admin_order_preview_line_items', array(__CLASS__, 'filter_order_items_for_order_preview'), 999, 2);
|
||||
|
||||
add_filter( 'woocommerce_admin_order_preview_line_item_columns', array(__CLASS__, 'customize_order_preview_columns'), 999);
|
||||
|
||||
add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_simple_product_bundle', array(__CLASS__, 'render_bundled_item_bundle'), 10, 4);
|
||||
|
||||
add_filter('manage_shop_order_posts_columns', array(__CLASS__, 'columns_for_list_table_orders'), 999);
|
||||
|
||||
add_filter('manage_edit-shop_order_sortable_columns', array(__CLASS__, 'define_sortable_columns_for_list_table_orders'));
|
||||
add_filter('manage_edit-shop_order_sortable_columns', array(__CLASS__, 'define_sortable_columns_for_list_table_orders'), 999);
|
||||
|
||||
add_action('manage_shop_order_posts_custom_column', array(__CLASS__, 'render_columns_for_list_table_orders'), 999, 2);
|
||||
}
|
||||
@@ -53,7 +57,7 @@ class Wiaas_Admin_Supplier_Orders {
|
||||
* Show only simple products from this supplier on order preview
|
||||
*
|
||||
* @param $order_items
|
||||
* @param $order
|
||||
* @param WC_Order $order
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
@@ -61,26 +65,51 @@ class Wiaas_Admin_Supplier_Orders {
|
||||
|
||||
$user_organisation_id = Wiaas_User_Organization::get_user_organization_id(wp_get_current_user()->ID);
|
||||
|
||||
$order_items = $order->get_items();
|
||||
$items = array();
|
||||
|
||||
foreach ($order_items as $key => $order_item) {
|
||||
|
||||
$product = wc_get_product($order_item->get_product_id());
|
||||
if (wc_pb_is_bundled_order_item($order_item)) {
|
||||
|
||||
if ($product->get_type() == 'simple') {
|
||||
$item_supplier_organization_id = absint($order_item['wiaas_supplier_organization_id']);
|
||||
|
||||
$supplier_organisation_id = Wiaas_Product_Supplier
|
||||
::get_supplier_organisation_id_from_product($order_item->get_product_id());
|
||||
if ($item_supplier_organization_id === $user_organisation_id) {
|
||||
|
||||
if ($supplier_organisation_id === $user_organisation_id) {
|
||||
$items[$key] = $order_item;
|
||||
}
|
||||
$items[] = $order_item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
public static function customize_order_preview_columns() {
|
||||
|
||||
return array(
|
||||
'product' => __('Product', 'wiaas'),
|
||||
'quantity' => __( 'Quantity', 'wiaas' ),
|
||||
'wiaas_simple_product_bundle' => __( '', 'wiaas' )
|
||||
);
|
||||
}
|
||||
|
||||
public static function render_bundled_item_bundle($empty, $item, $item_id, $order) {
|
||||
|
||||
$html = '';
|
||||
|
||||
if (wc_pb_is_bundled_order_item($item) ) {
|
||||
|
||||
$container_order_item = wc_pb_get_bundled_order_item_container($item, $order);
|
||||
|
||||
if ( ! empty($container_order_item) ) {
|
||||
|
||||
return $container_order_item->get_name();
|
||||
}
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override default table columns so only supplier specific columns are visible
|
||||
*
|
||||
@@ -89,11 +118,14 @@ class Wiaas_Admin_Supplier_Orders {
|
||||
* @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' );
|
||||
$show_columns = array();
|
||||
$show_columns['cb'] = $columns['cb'];
|
||||
$show_columns['_wiaas_order_number'] = __( 'Order', 'wiaas' );
|
||||
$show_columns['order_date'] = $columns['order_date'];
|
||||
$show_columns['wiaas_reference'] = __( 'Location', 'wiaas' );
|
||||
$show_columns['wiaas_customer'] = __( 'Customer', 'wiaas' );
|
||||
$show_columns['order_status'] = $columns['order_status'];
|
||||
$show_columns['shipping_address'] = $columns['shipping_address'];
|
||||
|
||||
return $show_columns;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,314 @@
|
||||
<?php
|
||||
|
||||
class Wiaas_Admin_Orders {
|
||||
|
||||
public static function init() {
|
||||
|
||||
// Orders list customization
|
||||
|
||||
add_filter( 'manage_shop_order_posts_columns', array(__CLASS__, 'add_additional_columns_to_orders_list'), 11 );
|
||||
|
||||
add_action( 'manage_shop_order_posts_custom_column', array(__CLASS__, 'render_orders_list_additional_columns') );
|
||||
|
||||
add_filter('default_hidden_columns', array(__CLASS__, 'filter_orders_list_default_hidden_columns'), 11, 2);
|
||||
|
||||
// Order preview customization
|
||||
|
||||
add_filter( 'woocommerce_admin_order_preview_get_order_details', array(__CLASS__, 'add_custom_data_to_order_preview') );
|
||||
|
||||
add_filter( 'woocommerce_admin_order_preview_start', array(__CLASS__, 'show_custom_data_before_order_preview') );
|
||||
|
||||
add_filter( 'woocommerce_admin_order_preview_line_items', array(__CLASS__, 'remove_simple_items_from_preview'));
|
||||
|
||||
add_filter( 'woocommerce_admin_order_preview_line_item_columns', array(__CLASS__, 'order_preview_order_item_columns'));
|
||||
|
||||
add_filter( 'woocommerce_admin_order_preview_line_item_column_wiaas_order_item_price', array(__CLASS__, 'render_order_item_preview_price_column'), 10, 4);
|
||||
|
||||
// Order item metadata customization
|
||||
|
||||
add_action('woocommerce_before_order_itemmeta', array(__CLASS__, 'render_order_details_order_item_custom_info'), 10, 3);
|
||||
|
||||
add_filter('woocommerce_order_item_get_formatted_meta_data', array(__CLASS__, 'filter_order_item_formatted_meta_data'), 10, 2);
|
||||
|
||||
add_filter('woocommerce_order_item_display_meta_key', array(__CLASS__, 'order_item_display_meta_key'), 10, 3);
|
||||
|
||||
add_filter('woocommerce_order_item_display_meta_value', array(__CLASS__, 'order_item_display_meta_value'), 10, 3);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Add columns to orders list with wiaas specific informations
|
||||
* @param array $columns
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function add_additional_columns_to_orders_list( $columns ) {
|
||||
|
||||
$new_columns = array();
|
||||
|
||||
$new_columns['wiaas_reference'] = __('Location', 'wiaas');
|
||||
$new_columns['wiaas_commercial_lead'] = __('Commercial lead', 'wiaas');
|
||||
$new_columns['wiaas_customer'] = __('Customer', 'wiaas');
|
||||
$new_columns['taxonomy-shop_order_project'] = __('Project', 'wiaas');
|
||||
|
||||
$columns = array_merge(
|
||||
array_slice($columns,0,3),
|
||||
$new_columns,
|
||||
array_slice($columns,3)
|
||||
);
|
||||
|
||||
return $columns;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Display data for custom wiaas columns in orders list
|
||||
*
|
||||
* @param string $column
|
||||
*/
|
||||
public static function render_orders_list_additional_columns( $column ) {
|
||||
|
||||
global $post;
|
||||
$column_content = '';
|
||||
|
||||
switch ($column){
|
||||
case 'wiaas_reference':
|
||||
$column_content = Wiaas_Order::get_order_reference($post->ID);
|
||||
break;
|
||||
|
||||
case 'wiaas_commercial_lead':
|
||||
$column_content = Wiaas_Order::get_order_commercial_lead_name($post->ID);
|
||||
break;
|
||||
|
||||
case 'wiaas_customer':
|
||||
$column_content = Wiaas_Order::get_order_customer_full_name($post->ID);
|
||||
|
||||
$customer_organization_info = Wiaas_Order::get_customer_organization_info($post->ID);
|
||||
|
||||
if ( ! empty($customer_organization_info) ) {
|
||||
|
||||
$column_content .= '<br>';
|
||||
$column_content .= '<small>' . $customer_organization_info['name'] . '</small>';
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
echo $column_content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter default hidden columns for orders list
|
||||
*
|
||||
* @param array $hidden
|
||||
* @param object $screen
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function filter_orders_list_default_hidden_columns($hidden, $screen) {
|
||||
|
||||
if (isset($screen->id) && $screen->id === 'edit-shop_order') {
|
||||
|
||||
$hidden = array( 'wc_actions' );
|
||||
}
|
||||
|
||||
return $hidden;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add custom information to order preview data
|
||||
*
|
||||
* @param array $order
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function add_custom_data_to_order_preview ($order) {
|
||||
|
||||
$order['wiaas_commercial_lead_name'] = Wiaas_Order::get_order_commercial_lead_name( $order['data']['id'] );
|
||||
$order['needs_shipping'] = true;
|
||||
|
||||
return $order;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display custom information in order preview
|
||||
*
|
||||
*/
|
||||
public static function show_custom_data_before_order_preview () {
|
||||
|
||||
echo '<div class="wc-order-preview-addresses">
|
||||
<div class="wc-order-preview-address">
|
||||
<h3>Commercial lead</h3>
|
||||
<strong>{{data.wiaas_commercial_lead_name}}</strong>
|
||||
</div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Display only bundles (not simple products)
|
||||
*
|
||||
* This will also not display options and addons
|
||||
*
|
||||
* @param array $order_items
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function remove_simple_items_from_preview( $order_items){
|
||||
|
||||
$items = array();
|
||||
|
||||
foreach ($order_items as $order_item) {
|
||||
|
||||
if ( Wiaas_Order_Item::is_standard_bundle($order_item) ) {
|
||||
$items[] = $order_item;
|
||||
}
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Columns for order preview order items table
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function order_preview_order_item_columns( ) {
|
||||
|
||||
return array(
|
||||
'product' => __('Product', 'wiaas'),
|
||||
'quantity' => __( 'Quantity', 'wiaas' ),
|
||||
'wiaas_order_item_price' => __( 'Price', 'wiaas' )
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $empty
|
||||
* @param WC_Order_Item $item
|
||||
* @param int $item_id
|
||||
* @param WC_Order $order
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function render_order_item_preview_price_column($empty, $item, $item_id, $order) {
|
||||
|
||||
if (Wiaas_Order_Item::is_standard_bundle($item)) {
|
||||
|
||||
$total_price = wc_price( $item->get_total(), array( 'currency' => $order->get_currency() ) );
|
||||
|
||||
$monthly_price = wc_price(
|
||||
Wiaas_Order_Item::get_monthly_recurring_total($item),
|
||||
array( 'currency' => $order->get_currency() )
|
||||
);
|
||||
|
||||
return sprintf('<strong>On Delivery:</strong> %s <br> <strong>Monthly:</strong> %s',
|
||||
$total_price,
|
||||
$monthly_price);
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Render order item payment info with order item metadata on order details page
|
||||
*
|
||||
* @param $item_id
|
||||
* @param WC_Order_Item $item
|
||||
* @param $product
|
||||
*/
|
||||
public static function render_order_details_order_item_custom_info($item_id, $item, $product) {
|
||||
|
||||
if (Wiaas_Order_Item::is_standard_bundle($item)) {
|
||||
|
||||
$order = $item->get_order();
|
||||
|
||||
$total_price = wc_price( $item->get_total(), array( 'currency' => $order->get_currency() ) );
|
||||
|
||||
$monthly_price = wc_price(
|
||||
Wiaas_Order_Item::get_monthly_recurring_total($item),
|
||||
array( 'currency' => $order->get_currency() )
|
||||
);
|
||||
|
||||
?>
|
||||
<br><br>
|
||||
<strong>On Delivery:</strong> <?php echo $total_price ?>
|
||||
<br>
|
||||
<strong>Monthly:</strong> <?php echo $monthly_price ?>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $formatted_meta
|
||||
* @param WC_Order_Item $order_item
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function filter_order_item_formatted_meta_data($formatted_meta, $order_item) {
|
||||
|
||||
if (Wiaas_Order_Item::is_standard_bundle($order_item)) {
|
||||
|
||||
return $formatted_meta;
|
||||
}
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $display_key
|
||||
* @param object $meta
|
||||
* @param WC_Order_Item $item
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function order_item_display_meta_key($display_key, $meta, $item) {
|
||||
|
||||
switch ($meta->key) {
|
||||
case '_wiaas_payment_type':
|
||||
return 'Payment type';
|
||||
|
||||
case '_wiaas_services_extra':
|
||||
return 'Services and support price';
|
||||
|
||||
case '_wiaas_recurrent_extra':
|
||||
return 'Recurrent price';
|
||||
|
||||
default:
|
||||
return $display_key;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $display_value
|
||||
* @param object $meta
|
||||
* @param WC_Order_Item $item
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function order_item_display_meta_value($display_value, $meta, $item) {
|
||||
|
||||
switch ($meta->key) {
|
||||
|
||||
case '_wiaas_services_extra':
|
||||
$order = $item->get_order();
|
||||
|
||||
return wc_price(
|
||||
Wiaas_Order_Item::get_services_total($item),
|
||||
array( 'currency' => $order->get_currency())
|
||||
);
|
||||
|
||||
case '_wiaas_recurrent_extra':
|
||||
$order = $item->get_order();
|
||||
|
||||
return wc_price(
|
||||
Wiaas_Order_Item::get_recurrent_total($item),
|
||||
array( 'currency' => $order->get_currency())
|
||||
);
|
||||
|
||||
default:
|
||||
return $display_value;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Wiaas_Admin_Orders::init();
|
||||
@@ -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();
|
||||
|
||||
@@ -30,7 +30,9 @@ class Wiaas_Admin {
|
||||
|
||||
require_once dirname(__FILE__) . '/admin/class-wiaas-admin-user-profile.php';
|
||||
|
||||
require_once dirname(__FILE__) . '/admin/class-wiaas-admin-countries.php';
|
||||
require_once dirname(__FILE__) . '/admin/class-wiaas-admin-countries.php';
|
||||
|
||||
require_once dirname(__FILE__) . '/admin/class-wiaas-admin-orders.php';
|
||||
|
||||
require_once dirname(__FILE__) . '/admin/class-wiaas-admin-dashboard.php';
|
||||
|
||||
|
||||
@@ -21,8 +21,6 @@ class Wiaas_Cart {
|
||||
public static function init() {
|
||||
add_action( 'woocommerce_checkout_create_order_line_item', array( __CLASS__, 'add_order_item_meta' ), 10, 3 );
|
||||
|
||||
add_filter( 'woocommerce_hidden_order_itemmeta', array( __CLASS__, 'hidden_order_item_meta' ) );
|
||||
|
||||
add_action( 'woocommerce_before_calculate_totals', array( __CLASS__, 'on_calculate_totals' ), 99, 1);
|
||||
|
||||
add_action( 'woocommerce_cart_loaded_from_session', array( __CLASS__, 'on_calculate_totals' ), 99, 1);
|
||||
@@ -444,40 +442,6 @@ class Wiaas_Cart {
|
||||
return $order_item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark extended properties for order as hidden
|
||||
* @param $hidden
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function hidden_order_item_meta( $hidden ) {
|
||||
|
||||
return array_merge( $hidden, array(
|
||||
'_wiaas_payment_type',
|
||||
'_wiaas_services_extra',
|
||||
'_wiaas_service_contract_period',
|
||||
'_wiaas_max_contract_period',
|
||||
'_wiaas_period_unit',
|
||||
'_wiaas_recurrent_extra',
|
||||
'_wiaas_pay_period',
|
||||
'_wiaas_addon_items',
|
||||
'_wiaas_addon_for',
|
||||
'_wiaas_option_items',
|
||||
'_wiaas_option_for',
|
||||
'_wiaas_option_group_name',
|
||||
'_wiaas_standard_package',
|
||||
'_wiaas_documents',
|
||||
'_wiaas_category',
|
||||
'_wiaas_manufacturer_product_no',
|
||||
'_wiaas_supplier_product_no',
|
||||
'_wiaas_supplier_organization_id',
|
||||
'_wiaas_product_price',
|
||||
'_wiaas_earliest_installation_additional_days',
|
||||
'_wiaas_installation',
|
||||
'_wiaas_installation_date'
|
||||
) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets additional order data form cart after order is successfully created
|
||||
*
|
||||
|
||||
@@ -181,9 +181,9 @@ class Wiaas_Countries {
|
||||
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']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ class Wiaas_Order {
|
||||
|
||||
require_once dirname( __FILE__ ) . '/order/class-wiaas-order-project.php';
|
||||
require_once dirname( __FILE__ ) . '/order/wiaas-order-functions.php';
|
||||
require_once dirname( __FILE__ ) . '/order/class-wiaas-order-item.php';
|
||||
|
||||
add_filter('woocommerce_register_post_type_shop_order', array(__CLASS__, 'manage_order_settings'));
|
||||
|
||||
@@ -370,6 +371,25 @@ class Wiaas_Order {
|
||||
return $response;
|
||||
}
|
||||
|
||||
public static function get_order_customer_full_name($order_id){
|
||||
$order = wc_get_order($order_id);
|
||||
|
||||
$customer_user_id = $order->get_customer_id();
|
||||
|
||||
$customer = get_userdata($customer_user_id);
|
||||
|
||||
return $customer->last_name . ' ' . $customer->first_name;
|
||||
}
|
||||
|
||||
public static function get_order_commercial_lead_name($order_id){
|
||||
$order = wc_get_order($order_id);
|
||||
|
||||
$commercial_lead_org_id = $order->get_meta('_wiaas_commercial_lead_id', true);
|
||||
$commercial_lead_organization_info = wiaas_get_organization_info($commercial_lead_org_id);
|
||||
|
||||
return $commercial_lead_organization_info['name'];
|
||||
}
|
||||
|
||||
public static function set_order_vat($order_id, $vat_code) {
|
||||
add_post_meta($order_id, '_wiaas_vat_code', $vat_code);
|
||||
}
|
||||
@@ -417,6 +437,53 @@ class Wiaas_Order {
|
||||
return $code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve customer organization id for order
|
||||
*
|
||||
* @param int $order_id
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public static function get_order_customer_organization_id($order_id) {
|
||||
$order = wc_get_order($order_id);
|
||||
|
||||
$customer_organization_id = $order->get_meta('_wiaas_customer_id', true);
|
||||
|
||||
if (empty($customer_organization_id)) {
|
||||
|
||||
$customer_organization_id = wiaas_get_user_organization_id($order->get_customer_id());
|
||||
}
|
||||
|
||||
return $customer_organization_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve customer organization info from order
|
||||
*
|
||||
* @param int $order_id
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
public static function get_customer_organization_info($order_id) {
|
||||
$order = wc_get_order($order_id);
|
||||
|
||||
$customer_organization_info = $order->get_meta('_wiaas_customer_info', true);
|
||||
|
||||
$customer_organization_id = self::get_order_customer_organization_id($order_id);
|
||||
|
||||
if ( empty($customer_organization_info) && ! empty( $customer_organization_id) ) {
|
||||
|
||||
$customer_organization_info = wiaas_get_organization_info($customer_organization_id);
|
||||
}
|
||||
|
||||
if ( ! empty($customer_organization_info) ) {
|
||||
|
||||
$customer_organization_info['id'] = $customer_organization_id;
|
||||
}
|
||||
|
||||
return ! empty($customer_organization_info) ? $customer_organization_info : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* PRIVATE
|
||||
*/
|
||||
|
||||
@@ -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])) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
class Wiaas_Order_Item {
|
||||
|
||||
public static function init() {
|
||||
|
||||
add_filter( 'woocommerce_hidden_order_itemmeta', array( __CLASS__, 'hidden_order_item_meta' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark extended properties for order as hidden
|
||||
*
|
||||
* @param array $hidden
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function hidden_order_item_meta( $hidden ) {
|
||||
|
||||
return array_merge( $hidden, array(
|
||||
//'_wiaas_payment_type',
|
||||
//'_wiaas_services_extra',
|
||||
'_wiaas_service_contract_period',
|
||||
'_wiaas_max_contract_period',
|
||||
'_wiaas_period_unit',
|
||||
//'_wiaas_recurrent_extra',
|
||||
'_wiaas_pay_period',
|
||||
'_wiaas_addon_items',
|
||||
'_wiaas_addon_for',
|
||||
'_wiaas_option_items',
|
||||
'_wiaas_option_for',
|
||||
'_wiaas_option_group_name',
|
||||
'_wiaas_standard_package',
|
||||
'_wiaas_documents',
|
||||
'_wiaas_category',
|
||||
'_wiaas_manufacturer_product_no',
|
||||
'_wiaas_supplier_product_no',
|
||||
'_wiaas_supplier_organization_id',
|
||||
'_wiaas_product_price',
|
||||
'_wiaas_earliest_installation_additional_days',
|
||||
'_wiaas_installation',
|
||||
'_wiaas_installation_date'
|
||||
) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Order_Item $order_item
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_standard_bundle($order_item) {
|
||||
|
||||
$is_standard = $order_item->get_meta('_wiaas_standard_package');
|
||||
return ! empty($is_standard);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Order_Item $order_item
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public static function get_services_total($order_item) {
|
||||
$quantity = $order_item->get_quantity();
|
||||
|
||||
return $quantity * floatval($order_item->get_meta('_wiaas_services_extra'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Order_Item $order_item
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public static function get_recurrent_total($order_item) {
|
||||
$quantity = $order_item->get_quantity();
|
||||
|
||||
return $quantity * floatval($order_item->get_meta('_wiaas_recurrent_extra'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Order_Item $order_item
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public static function get_monthly_recurring_total($order_item) {
|
||||
|
||||
return self::get_services_total($order_item) + self::get_recurrent_total($order_item);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Wiaas_Order_Item::init();
|
||||
@@ -25,6 +25,12 @@ tests_add_filter( 'pre_option_active_plugins', 'load_active_plugins_list');
|
||||
# Start up the WP testing environment.
|
||||
require $_tests_dir . '/includes/bootstrap.php';
|
||||
|
||||
// Require Wiaas test case factories
|
||||
require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-organization-factory.php';
|
||||
require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-product-factory.php';
|
||||
require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/factories/class-wiaas-unit-test-order-factory.php';
|
||||
require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/class-wiaas-unit-test-factory.php';
|
||||
|
||||
# Require Wiaas Unit Test case class
|
||||
require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/wiaas-unit-test-case.php';
|
||||
require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/wiaas-api-unit-test-case.php';
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
class Wiaas_Unit_Test_Factory {
|
||||
|
||||
/**
|
||||
* @var Wiaas_Unit_Test_Product_Factory
|
||||
*/
|
||||
public $product;
|
||||
|
||||
/**
|
||||
* @var Wiaas_Unit_Test_Organization_Factory
|
||||
*/
|
||||
public $organization;
|
||||
|
||||
/**
|
||||
* @var Wiaas_Unit_Test_Order_Factory
|
||||
*/
|
||||
public $order;
|
||||
|
||||
function __construct() {
|
||||
|
||||
$this->product = new Wiaas_Unit_Test_Product_Factory();
|
||||
|
||||
$this->organization = new Wiaas_Unit_Test_Organization_Factory();
|
||||
|
||||
$this->order = new Wiaas_Unit_Test_Order_Factory();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
class Wiaas_Unit_Test_Order_Factory {
|
||||
|
||||
|
||||
/**
|
||||
* @param array $args {
|
||||
* @type int $customer_id
|
||||
* }
|
||||
*
|
||||
* @return WC_Order|WP_Error
|
||||
*/
|
||||
public function create_new_order($args = array()) {
|
||||
|
||||
$customer_id = empty($args['customer_id']) ? get_current_user_id() : $args['customer_id'];
|
||||
|
||||
$order = wc_create_order(array(
|
||||
'customer_id' => $customer_id
|
||||
));
|
||||
|
||||
return $order;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Order|int $order
|
||||
* @param int $customer_organization_id
|
||||
*/
|
||||
public function add_customer_organization_info($order, $customer_organization_id) {
|
||||
|
||||
if (is_numeric($order)) {
|
||||
|
||||
$order = wc_get_order($order);
|
||||
}
|
||||
|
||||
$order->add_meta_data('_wiaas_customer', $customer_organization_id);
|
||||
|
||||
$order->add_meta_data('_wiaas_customer_info', wiaas_get_organization_info($customer_organization_id));
|
||||
|
||||
$order->save_meta_data();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $args
|
||||
* @param WC_Order_Item_Product|null $bundle_item
|
||||
* @param WC_Order|null $order
|
||||
*
|
||||
* @return WC_Order_Item_Product
|
||||
*/
|
||||
public function create_new_simple_product_order_item($args = array(), $bundle_item = null, $order = null) {
|
||||
|
||||
$defaults = array(
|
||||
'quantity' => 1,
|
||||
'total' => 0
|
||||
);
|
||||
|
||||
$args = wp_parse_args($args, $defaults);
|
||||
|
||||
$item = new WC_Order_Item_Product();
|
||||
|
||||
$item->set_props(
|
||||
array(
|
||||
'quantity' => $args['quantity'],
|
||||
'total' => $args['total'],
|
||||
)
|
||||
);
|
||||
|
||||
if (! empty($args['category']) ) {
|
||||
|
||||
$item->add_meta_data('_wiaas_category', $args['category']);
|
||||
}
|
||||
|
||||
if (! empty($args['supplier_organization_id']) ) {
|
||||
|
||||
$item->add_meta_data('_wiaas_supplier_organization_id', $args['supplier_organization_id']);
|
||||
}
|
||||
|
||||
$item->set_backorder_meta();
|
||||
|
||||
if (! empty($order) ) {
|
||||
|
||||
$order->add_item($item);
|
||||
|
||||
$order->save();
|
||||
}
|
||||
|
||||
return $item;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $args
|
||||
* @param WC_Order|null $order
|
||||
*
|
||||
* @return WC_Order_Item_Product
|
||||
*/
|
||||
public function create_new_bundle_order_item($args = array(), $order = null) {
|
||||
|
||||
$defaults = array(
|
||||
'quantity' => 1,
|
||||
'total' => 0
|
||||
);
|
||||
|
||||
$args = wp_parse_args($args, $defaults);
|
||||
|
||||
$item = new WC_Order_Item_Product();
|
||||
|
||||
$item->set_props(
|
||||
array(
|
||||
'quantity' => $args['quantity'],
|
||||
'total' => $args['total'],
|
||||
)
|
||||
);
|
||||
|
||||
$item->set_backorder_meta();
|
||||
|
||||
if (! empty($order) ) {
|
||||
|
||||
$order->add_item($item);
|
||||
|
||||
$order->save();
|
||||
}
|
||||
|
||||
return $item;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Order $order
|
||||
* @param array $items
|
||||
*/
|
||||
public function add_order_items($order, $items) {
|
||||
|
||||
foreach ( $items as $item ) {
|
||||
|
||||
$order->add_item($item);
|
||||
}
|
||||
|
||||
$order->save();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
class Wiaas_Unit_Test_Organization_Factory {
|
||||
|
||||
|
||||
/**
|
||||
* @param array $args {
|
||||
* @type string $name
|
||||
* @type int $parent_id
|
||||
* }
|
||||
*
|
||||
* @return int Organization ID
|
||||
*/
|
||||
public function create_new_organization($args = array()) {
|
||||
|
||||
$defaults = array(
|
||||
'name' => 'organization'
|
||||
);
|
||||
|
||||
$args = wp_parse_args($args, $defaults);
|
||||
|
||||
$term_args = array();
|
||||
|
||||
if (! empty($args['parent_id'])) {
|
||||
|
||||
$term_args['parent'] = $args['parent_id'];
|
||||
}
|
||||
|
||||
$result = wp_insert_term(
|
||||
$args['name'],
|
||||
Wiaas_User_Organization::TAXONOMY_NAME,
|
||||
$term_args
|
||||
);
|
||||
|
||||
if (! is_wp_error($result) ) {
|
||||
|
||||
return $result['term_id'];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function assign_user_to_organization($user_id, $organization_id) {
|
||||
wp_set_object_terms(
|
||||
$user_id,
|
||||
$organization_id,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME);
|
||||
|
||||
update_user_meta($user_id, '_wiaas_organization_id', $organization_id);
|
||||
}
|
||||
|
||||
public function delete_organization($organization_id) {
|
||||
wp_delete_term(
|
||||
$organization_id,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME);
|
||||
}
|
||||
|
||||
public function delete_organizations() {
|
||||
|
||||
$terms = get_terms(array(
|
||||
'taxonomy' => Wiaas_User_Organization::TAXONOMY_NAME,
|
||||
'hide_empty' => false
|
||||
));
|
||||
|
||||
foreach ($terms as $term) {
|
||||
|
||||
wp_delete_term($term->term_id, Wiaas_User_Organization::TAXONOMY_NAME);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
<?php
|
||||
|
||||
class Wiaas_Unit_Test_Product_Factory {
|
||||
|
||||
function __construct() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new simple product
|
||||
*
|
||||
* @param array $args {
|
||||
* @type int $price Simple product price
|
||||
* @type bool $is_recurring Flag indicating is simple product price is recurring
|
||||
* @type int $pay_period Pay period for simple product price if price is recurring
|
||||
* @type string|int $category Simple product category
|
||||
* @type string|int $country Simple product category term slug or id
|
||||
* @type string|int $supplier Simple product supplier term slug or id
|
||||
*
|
||||
* }
|
||||
*
|
||||
* @return WC_Product_Simple
|
||||
*/
|
||||
public function create_simple_product($args = array()) {
|
||||
|
||||
$defaults = array(
|
||||
'price' => 10,
|
||||
'is_recurring' => false,
|
||||
'pay_period' => 0
|
||||
);
|
||||
|
||||
$args = wp_parse_args($args, $defaults);
|
||||
|
||||
$post_id = wp_insert_post(array(
|
||||
'post_type' => 'product',
|
||||
'post_status' => 'publish',
|
||||
'post_name' => 'product',
|
||||
'post_title' => 'Product',
|
||||
'post_content' => 'Product',
|
||||
'post_excerpt' => 'Product'
|
||||
), true);
|
||||
|
||||
$product = new WC_Product_Simple($post_id);
|
||||
|
||||
$this->set_product_price($product, $args['price'], $args['is_recurring'], $args['pay_period']);
|
||||
|
||||
$product->save();
|
||||
|
||||
if (! empty($args['category']) ) {
|
||||
|
||||
$this->assign_product_to_category($product->get_id(), $args['category']);
|
||||
}
|
||||
|
||||
if (! empty($args['country']) ) {
|
||||
|
||||
$this->assign_product_to_country($product->get_id(), $args['country']);
|
||||
}
|
||||
|
||||
if (! empty($args['supplier']) ) {
|
||||
|
||||
$this->assign_product_to_supplier($product->get_id(), $args['supplier']);
|
||||
}
|
||||
|
||||
return $product;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Product_Simple|int $product Product or Product ID
|
||||
* @param int $price
|
||||
* @param bool $is_recurring
|
||||
* @param int $pay_period
|
||||
*/
|
||||
public function set_product_price($product, $price = 10, $is_recurring = false, $pay_period = 0) {
|
||||
|
||||
if (is_numeric($product)) {
|
||||
|
||||
$product = wc_get_product($product);
|
||||
}
|
||||
|
||||
Wiaas_Product_Pricing::set_product_price($product, $price, $is_recurring, $pay_period);
|
||||
|
||||
$product->save();
|
||||
|
||||
delete_transient('wc_bundled_product_data');
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Product_Simple|int $product Product or Product ID
|
||||
* @param string|int $category
|
||||
*/
|
||||
public function assign_product_to_category($product, $category) {
|
||||
|
||||
if (is_numeric($product)) {
|
||||
$product_id = $product;
|
||||
} else {
|
||||
$product_id = $product->get_id();
|
||||
}
|
||||
|
||||
wp_add_object_terms($product_id, $category, 'product_cat');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Product_Simple|int $product Product or Product ID
|
||||
* @param string|int $country
|
||||
*/
|
||||
public function assign_product_to_country($product, $country) {
|
||||
|
||||
if (is_numeric($product)) {
|
||||
$product_id = $product;
|
||||
} else {
|
||||
$product_id = $product->get_id();
|
||||
}
|
||||
|
||||
wp_add_object_terms($product_id, $country, 'product_country');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Product_Simple|int $product Product or Product ID
|
||||
* @param string|int $supplier
|
||||
*/
|
||||
public function assign_product_to_supplier($product, $supplier) {
|
||||
|
||||
if (is_numeric($product)) {
|
||||
$product_id = $product;
|
||||
} else {
|
||||
$product_id = $product->get_id();
|
||||
}
|
||||
|
||||
wp_add_object_terms($product_id, $supplier, 'supplier');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $args {
|
||||
* @type array $products Simple products
|
||||
* @type array $product_quantities Quantities for corresponding products from $products ( ex: [10, 5, 7] )
|
||||
* }
|
||||
*
|
||||
* @return WC_Product_Bundle
|
||||
*/
|
||||
public function create_product_bundle($args = array()) {
|
||||
|
||||
$post_id = wp_insert_post(array(
|
||||
'post_type' => 'product',
|
||||
'post_status' => 'publish',
|
||||
'post_name' => 'Bundle',
|
||||
'post_title' => 'Product Bundle',
|
||||
'post_content' => 'Product Bundle',
|
||||
'post_excerpt' => 'Product Bundle'
|
||||
), true);
|
||||
|
||||
$bundle = new WC_Product_Bundle($post_id);
|
||||
|
||||
if (! empty($args['products']) ) {
|
||||
|
||||
if ( empty($args['product_quantities']) ) {
|
||||
|
||||
$args['product_quantities'] = array_fill(0, count($args['products']), 1);
|
||||
}
|
||||
|
||||
if ( count($args['product_quantities']) < count($args['products'])) {
|
||||
|
||||
$args['product_quantities'] = array_pad($args['product_quantities'], count($args['products']), 1);
|
||||
}
|
||||
|
||||
$args['product_quantities'] = array_map('absint', $args['product_quantities']);
|
||||
|
||||
$bundled_data = array();
|
||||
|
||||
foreach ($args['products'] as $index => $product) {
|
||||
|
||||
$bundled_data[] = array(
|
||||
'product_id' => $product->get_id(),
|
||||
'quantity_min' => $args['product_quantities'][$index],
|
||||
'quantity_max' => $args['product_quantities'][$index],
|
||||
'priced_individually' => true
|
||||
);
|
||||
}
|
||||
|
||||
$bundle->set_bundled_data_items($bundled_data);
|
||||
|
||||
$bundle->sync(true);
|
||||
}
|
||||
|
||||
$bundle->save();
|
||||
|
||||
if (! empty($args['country']) ) {
|
||||
|
||||
$this->assign_product_to_country($bundle->get_id(), $args['country']);
|
||||
}
|
||||
|
||||
return $bundle;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param WC_Product_Bundle $bundle
|
||||
* @param array $pricing_rules
|
||||
* @param int $commission
|
||||
* @param int $cost_margin
|
||||
*/
|
||||
public function set_product_bundle_prices($bundle, $pricing_rules = null, $commission = 50, $cost_margin = 0) {
|
||||
|
||||
if ( empty($pricing_rules) ) {
|
||||
|
||||
$pricing_rules = array(
|
||||
'purchase' => array(
|
||||
'minimal_fixed_price' => 500,
|
||||
'principal_amount' => 0,
|
||||
'minimal_services_price' => 0
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Wiaas_Package_Pricing::set_package_prices($bundle, $pricing_rules, $commission, $cost_margin);
|
||||
}
|
||||
}
|
||||
@@ -16,10 +16,10 @@ class Wiaas_Package_Addon_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Package_Addon::get_package_addons()
|
||||
*/
|
||||
function test_adding_package_addons() {
|
||||
$package = $this->create_new_package();
|
||||
$package = $this->factory->product->create_product_bundle();
|
||||
|
||||
$addon1 = $this->create_new_package();
|
||||
$addon2 = $this->create_new_package();
|
||||
$addon1 = $this->factory->product->create_product_bundle();
|
||||
$addon2 = $this->factory->product->create_product_bundle();
|
||||
$addons_ids = array(
|
||||
$addon1->get_id(),
|
||||
$addon2->get_id()
|
||||
|
||||
@@ -16,12 +16,12 @@ class Wiaas_Package_Option_Groups_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Package_Option_Groups::get_package_option_groups()
|
||||
*/
|
||||
function test_adding_package_option_group() {
|
||||
$package = $this->create_new_package();
|
||||
$package = $this->factory->product->create_product_bundle();
|
||||
|
||||
$option_package1 = $this->create_new_package();
|
||||
$option_package1 = $this->factory->product->create_product_bundle();
|
||||
Wiaas_Package_Type::set_package_type($option_package1->get_id(), 'option');
|
||||
|
||||
$option_package2 = $this->create_new_package();
|
||||
$option_package2 = $this->factory->product->create_product_bundle();
|
||||
Wiaas_Package_Type::set_package_type($option_package2->get_id(), 'option');
|
||||
|
||||
$option_group1 = array(
|
||||
@@ -79,9 +79,9 @@ class Wiaas_Package_Option_Groups_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Package_Option_Groups::get_group_name_for_package_option()
|
||||
*/
|
||||
function test_get_group_name_for_package_option() {
|
||||
$package = $this->create_new_package();
|
||||
$package = $this->factory->product->create_product_bundle();
|
||||
|
||||
$option_package = $this->create_new_package();
|
||||
$option_package = $this->factory->product->create_product_bundle();
|
||||
Wiaas_Package_Type::set_package_type($option_package->get_id(), 'option');
|
||||
|
||||
$option_group = array(
|
||||
|
||||
@@ -16,6 +16,7 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case {
|
||||
$this->assertNotEmpty($package_statuses);
|
||||
|
||||
$this->assertContains(Wiaas_Package_Status::AVAILABLE, $package_statuses);
|
||||
$this->assertContains(Wiaas_Package_Status::INVALID_MARGIN, $package_statuses);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -23,7 +24,7 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Package_Type::get_package_status()
|
||||
*/
|
||||
function test_adding_package_status() {
|
||||
$package = $this->create_new_package();
|
||||
$package = $this->factory->product->create_product_bundle();
|
||||
|
||||
Wiaas_Package_Status::set_package_status($package->get_id(), Wiaas_Package_Status::AVAILABLE);
|
||||
|
||||
@@ -37,15 +38,15 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case {
|
||||
* Test package status update on simple product price update
|
||||
*/
|
||||
function test_package_status_update_on_simple_product_price_update() {
|
||||
$product1 = $this->create_new_product(20);
|
||||
$this->add_product_category($product1, 'hardware');
|
||||
|
||||
$product2 = $this->create_new_product(20);
|
||||
$this->add_product_category($product2, 'software');
|
||||
$product1 = $this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' ));
|
||||
|
||||
$package = $this->create_new_package();
|
||||
|
||||
$this->add_products_to_package($package, array( $product1, $product2));
|
||||
$package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => array(
|
||||
$product1,
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'software' ))
|
||||
)
|
||||
));
|
||||
|
||||
$pricing_rules = array(
|
||||
'purchase' => array(
|
||||
@@ -68,10 +69,13 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case {
|
||||
$cost_margin = 100;
|
||||
|
||||
Wiaas_Package_Pricing::set_package_prices($package, $pricing_rules, $commision, $cost_margin);
|
||||
$this->assertEquals(Wiaas_Package_Status::get_package_status($package)->get_id(), Wiaas_Package_Status::AVAILABLE);
|
||||
$this->assertEquals(Wiaas_Package_Status::get_package_status($package->get_id()), Wiaas_Package_Status::AVAILABLE);
|
||||
|
||||
$product1->set_price(1000);
|
||||
$this->assertEquals(Wiaas_Package_Status::get_package_status($package)->get_id(), Wiaas_Package_Status::MARGIN_EXCEEDED);
|
||||
$this->factory->product->set_product_price($product1, 1000);
|
||||
|
||||
Wiaas_Package_Pricing::on_product_update($product1->get_id());
|
||||
|
||||
$this->assertEquals(Wiaas_Package_Status::get_package_status($package->get_id()), Wiaas_Package_Status::INVALID_MARGIN);
|
||||
|
||||
}
|
||||
|
||||
@@ -79,15 +83,12 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case {
|
||||
* Test package status update on cost margin update
|
||||
*/
|
||||
function test_package_status_update_on_margin_cost_update() {
|
||||
$product1 = $this->create_new_product(20);
|
||||
$this->add_product_category($product1, 'hardware');
|
||||
|
||||
$product2 = $this->create_new_product(20);
|
||||
$this->add_product_category($product2, 'software');
|
||||
|
||||
$package = $this->create_new_package();
|
||||
|
||||
$this->add_products_to_package($package, array( $product1, $product2));
|
||||
$package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => array(
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )),
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'software' ))
|
||||
)
|
||||
));
|
||||
|
||||
$pricing_rules = array(
|
||||
'purchase' => array(
|
||||
@@ -108,13 +109,14 @@ class Wiaas__Package_Status_Test extends Wiaas_Unit_Test_Case {
|
||||
);
|
||||
$commision = 50;
|
||||
$cost_margin = 0;
|
||||
|
||||
|
||||
Wiaas_Package_Pricing::set_package_prices($package, $pricing_rules, $commision, $cost_margin);
|
||||
$this->assertEquals(Wiaas_Package_Status::get_package_status($package)->get_id(), Wiaas_Package_Status::AVAILABLE);
|
||||
$this->assertEquals(Wiaas_Package_Status::get_package_status($package->get_id()), Wiaas_Package_Status::AVAILABLE);
|
||||
|
||||
$cost_margin = 1;
|
||||
Wiaas_Package_Pricing::set_package_prices($package, $pricing_rules, $commision, $cost_margin);
|
||||
$this->assertEquals(Wiaas_Package_Status::get_package_status($package)->get_id(), Wiaas_Package_Status::MARGIN_EXCEEDED);
|
||||
|
||||
$this->assertEquals(Wiaas_Package_Status::get_package_status($package->get_id()), Wiaas_Package_Status::INVALID_MARGIN);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,7 @@ class Wiaas__Package_Type_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Package_Type::get_package_type()
|
||||
*/
|
||||
function test_adding_package_type() {
|
||||
$package = $this->create_new_package();
|
||||
$package = $this->factory->product->create_product_bundle();
|
||||
|
||||
Wiaas_Package_Type::set_package_type($package->get_id(), 'standard');
|
||||
|
||||
|
||||
@@ -6,17 +6,17 @@ class Wiaas_Package_CL_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->shop_owner_id = wp_insert_term(
|
||||
'Shop owner organization',
|
||||
Wiaas_User_Organization::TAXONOMY_NAME)['term_id'];
|
||||
$this->shop_owner_id = $this->factory->organization->create_new_organization(
|
||||
array( 'name' => 'Shop owner organization' )
|
||||
);
|
||||
|
||||
$this->customer_id = wp_insert_term(
|
||||
'Customer Organization',
|
||||
Wiaas_User_Organization::TAXONOMY_NAME)['term_id'];
|
||||
$this->customer_id = $this->factory->organization->create_new_organization(
|
||||
array( 'name' => 'Customer Organization' )
|
||||
);
|
||||
|
||||
$package = $this->create_new_package();
|
||||
|
||||
$this->add_products_to_package($package, array( $this->create_new_product()));
|
||||
$package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => array( $this->factory->product->create_simple_product() )
|
||||
));
|
||||
|
||||
$this->package_id = $package->get_id();
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ class Wiaas_Package_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
*/
|
||||
function test_set_and_get_package_prices() {
|
||||
|
||||
$package = $this->create_new_package();
|
||||
$package = $this->factory->product->create_product_bundle();
|
||||
|
||||
$pricing_rules = array(
|
||||
'purchase' => array(
|
||||
|
||||
@@ -0,0 +1,196 @@
|
||||
<?php
|
||||
|
||||
class Wiaas_Access_Management_Test extends Wiaas_Unit_Test_Case {
|
||||
|
||||
/**
|
||||
* @var WC_Order
|
||||
*/
|
||||
var $order;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
var $organization_id;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
var $customer_user_id;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
wp_set_current_user(1);
|
||||
|
||||
$this->customer_user_id = wp_insert_user(array(
|
||||
'user_login' => 'test_customer',
|
||||
'user_pass' => 'test',
|
||||
'user_email' => 'test_customer@mail.com',
|
||||
'role' => 'customer',
|
||||
));
|
||||
|
||||
$this->organization_id = $this->factory->organization->create_new_organization();
|
||||
|
||||
$this->factory->organization->assign_user_to_organization($this->customer_user_id, $this->organization_id);
|
||||
|
||||
$this->order = $this->factory->order->create_new_order();
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
parent::tearDown();
|
||||
|
||||
wp_set_current_user(1);
|
||||
|
||||
wp_delete_user($this->customer_user_id);
|
||||
|
||||
$this->factory->organization->delete_organizations();
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Access_Management::maybe_handle_product_access()
|
||||
*/
|
||||
function test_simple_product_has_admin_access() {
|
||||
|
||||
$simple_product = $this->factory->product->create_simple_product();
|
||||
|
||||
Wiaas_Access_Management::maybe_handle_product_access($simple_product->get_id(), get_post($simple_product->get_id()));
|
||||
|
||||
$access_group_ids = Groups_Post_Access::get_read_group_ids( $simple_product->get_id() );
|
||||
$this->assertEquals(1, count($access_group_ids));
|
||||
$admin_access_group = Groups_Group::read_by_name('admin');
|
||||
$this->assertEquals($admin_access_group->group_id, $access_group_ids[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Access_Management::maybe_handle_product_access()
|
||||
*/
|
||||
function test_bundle_with_no_price_has_admin_access() {
|
||||
|
||||
$bundle_product = $this->factory->product->create_product_bundle();
|
||||
|
||||
Wiaas_Access_Management::maybe_handle_product_access($bundle_product->get_id(), get_post($bundle_product->get_id()));
|
||||
|
||||
$access_group_ids = Groups_Post_Access::get_read_group_ids( $bundle_product->get_id() );
|
||||
$this->assertEquals(1, count($access_group_ids));
|
||||
$admin_access_group = Groups_Group::read_by_name('admin');
|
||||
$this->assertEquals($admin_access_group->group_id, $access_group_ids[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Access_Management::maybe_handle_product_access()
|
||||
*/
|
||||
function test_bundle_with_prices_has_registered_access() {
|
||||
|
||||
$bundle_product = $this->factory->product->create_product_bundle();
|
||||
$this->factory->product->set_product_bundle_prices($bundle_product);
|
||||
|
||||
Wiaas_Access_Management::maybe_handle_product_access($bundle_product->get_id(), get_post($bundle_product->get_id()));
|
||||
|
||||
$access_group_ids = Groups_Post_Access::get_read_group_ids( $bundle_product->get_id() );
|
||||
$this->assertEquals(1, count($access_group_ids));
|
||||
$registered_access_group = Groups_Group::read_by_name('Registered');
|
||||
$this->assertEquals($registered_access_group->group_id, $access_group_ids[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Access_Management::assign_order_to_customer_organization()
|
||||
*/
|
||||
function test_order_assigned_to_customer_organization() {
|
||||
|
||||
wp_set_current_user($this->customer_user_id);
|
||||
|
||||
Wiaas_Access_Management::assign_order_to_customer_organization($this->order->get_id());
|
||||
|
||||
$organization_access_group = Groups_Group::read_by_name('organization');
|
||||
$access_group_ids = Groups_Post_Access::get_read_group_ids( $this->order->get_id() );
|
||||
|
||||
$this->assertEquals(1, count($access_group_ids));
|
||||
$this->assertNotNull($access_group_ids[0]);
|
||||
$this->assertEquals($organization_access_group->group_id, $access_group_ids[0]);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Access_Management::assign_order_to_commercial_lead_organization()
|
||||
*/
|
||||
function test_order_assigned_to_commercial_lead_organization() {
|
||||
|
||||
$this->order->update_meta_data('_wiaas_commercial_lead_id', $this->organization_id);
|
||||
$this->order->save_meta_data();
|
||||
|
||||
Wiaas_Access_Management::assign_order_to_commercial_lead_organization($this->order->get_id());
|
||||
|
||||
$organization_access_group = Groups_Group::read_by_name('organization');
|
||||
$access_group_ids = Groups_Post_Access::get_read_group_ids( $this->order->get_id() );
|
||||
|
||||
$this->assertEquals(1, count($access_group_ids));
|
||||
$this->assertNotNull($access_group_ids[0]);
|
||||
$this->assertEquals($organization_access_group->group_id, $access_group_ids[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Access_Management::assign_order_to_supplier_organizations()
|
||||
*/
|
||||
function test_order_assigned_to_supplier_organizations() {
|
||||
|
||||
$items = array();
|
||||
$items[] = $this->factory->order->create_new_simple_product_order_item(array(
|
||||
'category' => 'hardware',
|
||||
'supplier_organization_id' => $this->factory->organization->create_new_organization( array( 'name' => 'hardware supplier'))
|
||||
));
|
||||
$items[] = $this->factory->order->create_new_simple_product_order_item(array(
|
||||
'category' => 'software',
|
||||
'supplier_organization_id' => $this->factory->organization->create_new_organization( array( 'name' => 'software supplier'))
|
||||
));
|
||||
$items[] = $this->factory->order->create_new_simple_product_order_item(array(
|
||||
'category' => 'service',
|
||||
'supplier_organization_id' => $this->factory->organization->create_new_organization( array( 'name' => 'service supplier'))
|
||||
));
|
||||
$items[] = $this->factory->order->create_new_simple_product_order_item(array(
|
||||
'category' => 'installation',
|
||||
'supplier_organization_id' => $this->factory->organization->create_new_organization( array( 'name' => 'installation supplier'))
|
||||
));
|
||||
|
||||
$this->factory->order->add_order_items($this->order, $items);
|
||||
|
||||
Wiaas_Access_Management::assign_order_to_supplier_organizations($this->order->get_id());
|
||||
|
||||
$access_group_ids = Groups_Post_Access::get_read_group_ids( $this->order->get_id() );
|
||||
$this->assertEquals(3, count($access_group_ids));
|
||||
|
||||
$organization_access_group = Groups_Group::read_by_name('hardware supplier');
|
||||
$this->assertContains($organization_access_group->group_id, $access_group_ids);
|
||||
|
||||
$organization_access_group = Groups_Group::read_by_name('software supplier');
|
||||
$this->assertContains($organization_access_group->group_id, $access_group_ids);
|
||||
|
||||
$organization_access_group = Groups_Group::read_by_name('service supplier');
|
||||
$this->assertContains($organization_access_group->group_id, $access_group_ids);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Access_Management::assign_order_to_installation_organization()
|
||||
*/
|
||||
function test_order_assigned_to_installation_organization() {
|
||||
|
||||
$bundle_item = $this->factory->order->create_new_bundle_order_item();
|
||||
|
||||
$installation_item = $this->factory->order->create_new_simple_product_order_item(array(
|
||||
'category' => 'installation',
|
||||
'supplier_organization_id' => $this->organization_id
|
||||
));
|
||||
|
||||
$this->order->add_item($bundle_item);
|
||||
$this->order->add_item($installation_item);
|
||||
|
||||
Wiaas_Access_Management::assign_order_to_installation_organization($this->order, $bundle_item, $installation_item);
|
||||
|
||||
$organization_access_group = Groups_Group::read_by_name('organization');
|
||||
$access_group_ids = Groups_Post_Access::get_read_group_ids( $this->order->get_id() );
|
||||
|
||||
$this->assertEquals(1, count($access_group_ids));
|
||||
$this->assertNotNull($access_group_ids[0]);
|
||||
$this->assertEquals($organization_access_group->group_id, $access_group_ids[0]);
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
*/
|
||||
class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case {
|
||||
|
||||
var $product, $package, $current_country = 'Sweden';
|
||||
var $product, $package;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
@@ -13,14 +13,10 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case {
|
||||
# set admin as current user
|
||||
wp_set_current_user(1);
|
||||
|
||||
$this->product = $this->create_new_product();
|
||||
wp_set_object_terms($this->product->get_id(), $this->current_country, 'product_country', false);
|
||||
clean_object_term_cache( $this->product->get_id(), 'product_country' );
|
||||
$this->product = $this->factory->product->create_simple_product(array( 'country' => 'sweden' ));
|
||||
|
||||
|
||||
$this->package = $this->create_new_package();
|
||||
wp_set_object_terms($this->package->get_id(), $this->current_country, 'product_country', false);
|
||||
clean_object_term_cache( $this->package->get_id(), 'product_country' );
|
||||
$this->package = $this->factory->product->create_product_bundle(array( 'country' => 'sweden' ));
|
||||
}
|
||||
|
||||
|
||||
@@ -29,19 +25,13 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case {
|
||||
*/
|
||||
function test_available_countries_created() {
|
||||
// test taxonomy is available
|
||||
$taxonomy = get_taxonomy('product_country');
|
||||
$countries = Wiaas_Countries::get_available_countries();
|
||||
|
||||
$this->assertInstanceOf(WP_Taxonomy::class, $taxonomy);
|
||||
$country_codes = wp_list_pluck($countries, 'code');
|
||||
|
||||
$country_names = array_map(function($term) {
|
||||
return $term->name;
|
||||
}, get_terms(array( 'taxonomy' => 'product_country', 'hide_empty' => false )));
|
||||
|
||||
$this->assertNotEmpty($country_names);
|
||||
|
||||
$this->assertContains('Sweden', $country_names);
|
||||
$this->assertContains('Denmark', $country_names);
|
||||
$this->assertContains('Finland', $country_names);
|
||||
$this->assertContains('se', $country_codes);
|
||||
$this->assertContains('fi', $country_codes);
|
||||
$this->assertContains('dk', $country_codes);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -53,7 +43,7 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case {
|
||||
|
||||
$this->assertNotNull($retrieved_country, 'Product has not country!');
|
||||
|
||||
$this->assertEquals($retrieved_country['name'], $this->current_country, 'Retrieved product country is incorrect!');
|
||||
$this->assertEquals($retrieved_country['name'], 'Sweden', 'Retrieved product country is incorrect!');
|
||||
|
||||
}
|
||||
|
||||
@@ -65,7 +55,7 @@ class Wiaas_Countries_Test extends Wiaas_Unit_Test_Case {
|
||||
|
||||
$this->assertNotNull($retrieved_country, 'Package has not country!');
|
||||
|
||||
$this->assertEquals($retrieved_country['name'], $this->current_country, 'Retrieved package country is incorrect!');
|
||||
$this->assertEquals($retrieved_country['name'], 'Sweden', 'Retrieved package country is incorrect!');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
class Wiaas_Order_Test extends Wiaas_Unit_Test_Case {
|
||||
|
||||
var $customer_id, $customer_organization_id, $customer_organization_name, $order_id;
|
||||
var $customer_id, $customer_organization_id, $customer_organization_name, $order;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
@@ -23,26 +23,15 @@ class Wiaas_Order_Test extends Wiaas_Unit_Test_Case {
|
||||
$this->customer_organization_name = 'test-customer-organization';
|
||||
|
||||
# create customer organization
|
||||
$this->customer_organization_id = wp_insert_term(
|
||||
$this->customer_organization_name,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME
|
||||
)['term_id'];
|
||||
$this->customer_organization_id = $this->factory->organization->create_new_organization(
|
||||
array( 'name' => $this->customer_organization_name )
|
||||
);
|
||||
|
||||
update_user_meta($this->customer_id, '_wiaas_organization_id', $this->customer_organization_id);
|
||||
|
||||
# add customer to organization
|
||||
wp_set_terms_for_user(
|
||||
$this->customer_id,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME,
|
||||
[$this->customer_organization_name]);
|
||||
$this->factory->organization->assign_user_to_organization($this->customer_id, $this->customer_organization_id);
|
||||
|
||||
wp_set_current_user($this->customer_id);
|
||||
|
||||
$order = wc_create_order(array(
|
||||
'customer_id' => $this->customer_id
|
||||
));
|
||||
|
||||
$this->order_id = $order->get_id();
|
||||
$this->order = $this->factory->order->create_new_order();
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
@@ -57,46 +46,6 @@ class Wiaas_Order_Test extends Wiaas_Unit_Test_Case {
|
||||
Wiaas_User_Organization::TAXONOMY_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order::assign_order_to_organization()
|
||||
*/
|
||||
function test_order_assigned_to_customer_organization() {
|
||||
|
||||
$organization_access_group = Groups_Group::read_by_name($this->customer_organization_name);
|
||||
$access_group_ids = Groups_Post_Access::get_read_group_ids( $this->order_id );
|
||||
|
||||
$this->assertEquals(1, count($access_group_ids));
|
||||
$this->assertNotNull($access_group_ids[0]);
|
||||
$this->assertEquals($organization_access_group->group_id, $access_group_ids[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order::check_order_access()
|
||||
*/
|
||||
function test_order_customer_can_access_order() {
|
||||
|
||||
$has_access = Wiaas_Order::check_order_access(true, 'view', $this->order_id, 'shop_order');
|
||||
|
||||
$this->assertTrue($has_access);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order::check_order_access()
|
||||
*/
|
||||
function test_customer_cannot_access_order_when_not_in_organization() {
|
||||
$customer_id = wc_create_new_customer(
|
||||
'test_customer1@mail.com',
|
||||
'test_customer1',
|
||||
'test1');
|
||||
wp_set_current_user($customer_id);
|
||||
|
||||
$this->assertTrue(Groups_Post_Access::handles_post_type('shop_order'));
|
||||
|
||||
$has_access = Wiaas_Order::check_order_access(true, 'view', $this->order_id, 'shop_order');
|
||||
|
||||
$this->assertFalse($has_access);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order::wiaas_prepare_rest_orders_query()
|
||||
*/
|
||||
@@ -139,10 +88,12 @@ class Wiaas_Order_Test extends Wiaas_Unit_Test_Case {
|
||||
'line_items' => array()
|
||||
);
|
||||
|
||||
$this->factory->order->add_customer_organization_info($this->order, $this->customer_organization_id);
|
||||
|
||||
$order_rest_response = Wiaas_Order::transform_rest_order(
|
||||
new WP_REST_Response($order_response),
|
||||
wc_get_order($this->order_id),
|
||||
array( 'id' => $this->order_id));
|
||||
$this->order,
|
||||
array( 'id' => $this->order->get_id() ));
|
||||
|
||||
$transformed_order_response = $order_rest_response->get_data();
|
||||
|
||||
|
||||
@@ -3,15 +3,16 @@
|
||||
class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
|
||||
private function _create_package_to_sell() {
|
||||
$product1 = $this->create_new_product(20);
|
||||
$this->add_product_category($product1, 'hardware');
|
||||
|
||||
$product2 = $this->create_new_product(20, true, 2);
|
||||
$this->add_product_category($product2, 'installation');
|
||||
|
||||
$package = $this->create_new_package();
|
||||
|
||||
$this->add_products_to_package($package, array( $product1, $product2));
|
||||
$package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => array(
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )),
|
||||
$this->factory->product->create_simple_product(array(
|
||||
'price' => 20,
|
||||
'is_recurring' => true,
|
||||
'pay_period' => 2,
|
||||
'category' => 'installation' ))
|
||||
)
|
||||
));
|
||||
|
||||
$pricing_rules = array(
|
||||
'purchase' => array(
|
||||
@@ -32,17 +33,16 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
);
|
||||
$commision = 50;
|
||||
$cost_margin = 0;
|
||||
Wiaas_Package_Pricing::set_package_prices($package, $pricing_rules, $commision, $cost_margin);
|
||||
|
||||
$customer_id = wp_create_term(
|
||||
'Customer',
|
||||
Wiaas_User_Organization::TAXONOMY_NAME
|
||||
)['term_id'];
|
||||
$this->factory->product->set_product_bundle_prices($package, $pricing_rules, $commision, $cost_margin);
|
||||
|
||||
$commercial_lead_id = wp_create_term(
|
||||
'Commercial Lead',
|
||||
Wiaas_User_Organization::TAXONOMY_NAME
|
||||
)['term_id'];
|
||||
$customer_id = $this->factory->organization->create_new_organization(
|
||||
array( 'name' => 'Customer' )
|
||||
);
|
||||
|
||||
$commercial_lead_id = $this->factory->organization->create_new_organization(
|
||||
array( 'name' => 'Commercial Lead' )
|
||||
);
|
||||
|
||||
|
||||
self::_set_package_default_extras($commercial_lead_id, $package->get_id());
|
||||
@@ -97,7 +97,7 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Pricing::get_product_total_cost()
|
||||
*/
|
||||
function test_get_fixed_product_total_cost() {
|
||||
$product = $this->create_new_product();
|
||||
$product = $this->factory->product->create_simple_product();
|
||||
|
||||
$total_cost = Wiaas_Pricing::get_product_total_cost($product);
|
||||
|
||||
@@ -108,7 +108,11 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Pricing::get_product_total_cost()
|
||||
*/
|
||||
function test_get_recurring_product_total_cost() {
|
||||
$product = $this->create_new_product(10, true, 2);
|
||||
$product = $this->factory->product->create_simple_product(array(
|
||||
'price' => 10,
|
||||
'is_recurring' => true,
|
||||
'pay_period' => 2
|
||||
));
|
||||
|
||||
$total_cost = Wiaas_Pricing::get_product_total_cost($product);
|
||||
|
||||
@@ -119,15 +123,12 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Pricing::get_package_total_cost()
|
||||
*/
|
||||
function test_get_package_with_fixed_products_total_cost() {
|
||||
$product1 = $this->create_new_product(20);
|
||||
$this->add_product_category($product1, 'hardware');
|
||||
|
||||
$product2 = $this->create_new_product(20);
|
||||
$this->add_product_category($product2, 'software');
|
||||
|
||||
$package = $this->create_new_package();
|
||||
|
||||
$this->add_products_to_package($package, array( $product1, $product2));
|
||||
$package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => array(
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )),
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'software' ))
|
||||
)
|
||||
));
|
||||
|
||||
$expected_total_price = 40;
|
||||
|
||||
@@ -140,15 +141,12 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Pricing::get_package_total_cost()
|
||||
*/
|
||||
function test_get_package_with_recurring_products_total_cost() {
|
||||
$product1 = $this->create_new_product(20);
|
||||
$this->add_product_category($product1, 'hardware');
|
||||
|
||||
$product2 = $this->create_new_product(20, true, 2);
|
||||
$this->add_product_category($product2, 'software');
|
||||
|
||||
$package = $this->create_new_package();
|
||||
|
||||
$this->add_products_to_package($package, array( $product1, $product2));
|
||||
$package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => array(
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )),
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'is_recurring' => true, 'pay_period' => 2, 'category' => 'software' ))
|
||||
)
|
||||
));
|
||||
|
||||
$expected_total_price = 60;
|
||||
|
||||
@@ -161,15 +159,12 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Pricing::get_package_total_cost()
|
||||
*/
|
||||
function test_package_with_single_installation_product_total_cost() {
|
||||
$product1 = $this->create_new_product(20);
|
||||
$this->add_product_category($product1, 'hardware');
|
||||
|
||||
$product2 = $this->create_new_product(20, true, 2);
|
||||
$this->add_product_category($product2, 'installation');
|
||||
|
||||
$package = $this->create_new_package();
|
||||
|
||||
$this->add_products_to_package($package, array( $product1, $product2));
|
||||
$package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => array(
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )),
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'is_recurring' => true, 'pay_period' => 2, 'category' => 'installation' ))
|
||||
)
|
||||
));
|
||||
|
||||
$expected_total_price = 60;
|
||||
|
||||
@@ -182,20 +177,13 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
* @covers Wiaas_Pricing::get_package_total_cost()
|
||||
*/
|
||||
function test_package_with_multiple_installation_products_total_cost() {
|
||||
$product1 = $this->create_new_product(20);
|
||||
$this->add_product_category($product1, 'hardware');
|
||||
|
||||
$product2 = $this->create_new_product(10, true, 2);
|
||||
$this->add_product_category($product2, 'installation');
|
||||
|
||||
$this->assertTrue(Wiaas_Product_Category::is_installation($product2));
|
||||
|
||||
$product3 = $this->create_new_product(20, true, 2);
|
||||
$this->add_product_category($product3, 'installation');
|
||||
|
||||
$package = $this->create_new_package();
|
||||
|
||||
$this->add_products_to_package($package, array( $product1, $product2, $product3));
|
||||
$package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => array(
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )),
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'is_recurring' => true, 'pay_period' => 2, 'category' => 'installation' )),
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'is_recurring' => true, 'pay_period' => 2, 'category' => 'installation' ))
|
||||
)
|
||||
));
|
||||
|
||||
// price will be 20 + 20*2 , more expensive installation will be applied
|
||||
$expected_total_price = 60;
|
||||
@@ -246,12 +234,11 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
function test_get_addon_package_customer_price() {
|
||||
list( $package, $expected_prices, $customer_id, $commercial_lead_id ) = $this->_create_package_to_sell();
|
||||
|
||||
$addon_product = $this->create_new_product(20);
|
||||
$this->add_product_category($addon_product, 'hardware');
|
||||
|
||||
$addon_package = $this->create_new_package();
|
||||
|
||||
$this->add_products_to_package($addon_package, array($addon_product));
|
||||
$addon_package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => array(
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )),
|
||||
)
|
||||
));
|
||||
|
||||
$pricing_rules = array(
|
||||
'purchase' => array(
|
||||
@@ -330,12 +317,11 @@ class Wiaas_Pricing_Test extends Wiaas_Unit_Test_Case {
|
||||
function test_get_option_package_customer_price() {
|
||||
list( $package, $customer_id, $commercial_lead_id ) = $this->_create_package_to_sell();
|
||||
|
||||
$option_product = $this->create_new_product(20);
|
||||
$this->add_product_category($option_product, 'hardware');
|
||||
|
||||
$option_package = $this->create_new_package();
|
||||
|
||||
$this->add_products_to_package($option_package, array($option_product));
|
||||
$option_package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => array(
|
||||
$this->factory->product->create_simple_product(array( 'price' => 20, 'category' => 'hardware' )),
|
||||
)
|
||||
));
|
||||
|
||||
$pricing_rules = array(
|
||||
'purchase' => array(
|
||||
|
||||
@@ -19,11 +19,10 @@ class Wiaas_Templates_Test extends Wiaas_Unit_Test_Case {
|
||||
);
|
||||
|
||||
$this->template = $this->create_new_wiaas_template();
|
||||
$this->product = $this->create_new_product();
|
||||
$this->package = $this->create_new_package();
|
||||
$this->add_products_to_package($this->package, $this->product);
|
||||
|
||||
|
||||
$this->product = $this->factory->product->create_simple_product();
|
||||
$this->package = $this->factory->product->create_product_bundle(array(
|
||||
'products' => $this->product
|
||||
));
|
||||
}
|
||||
|
||||
public function test_template_category_taxonomy_created() {
|
||||
|
||||
@@ -22,28 +22,18 @@ class Wiaas_User_Organization_Test extends Wiaas_Unit_Test_Case {
|
||||
|
||||
$this->user_department_name = 'test_department';
|
||||
|
||||
# create organization
|
||||
$this->user_organization_id = wp_insert_term(
|
||||
$this->user_organization_name,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME
|
||||
)['term_id'];
|
||||
// create organization
|
||||
$this->user_organization_id = $this->factory->organization->create_new_organization(
|
||||
array( 'name' => $this->user_organization_name )
|
||||
);
|
||||
|
||||
update_user_meta($this->user_id, '_wiaas_organization_id', $this->user_organization_id);
|
||||
// create department
|
||||
$this->user_department_id = $this->factory->organization->create_new_organization(
|
||||
array( 'name' => $this->user_department_name, 'parent_id' => $this->user_organization_id )
|
||||
);
|
||||
|
||||
# create department
|
||||
$this->user_department_id = wp_insert_term(
|
||||
$this->user_department_name,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME,
|
||||
array(
|
||||
'parent' => $this->user_organization_id
|
||||
)
|
||||
)['term_id'];
|
||||
|
||||
# assign user to organization
|
||||
wp_set_terms_for_user(
|
||||
$this->user_id,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME,
|
||||
[$this->user_organization_name]);
|
||||
// assign user to organization
|
||||
$this->factory->organization->assign_user_to_organization($this->user_id, $this->user_organization_id);
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
@@ -53,12 +43,7 @@ class Wiaas_User_Organization_Test extends Wiaas_Unit_Test_Case {
|
||||
|
||||
wp_delete_user($this->user_id);
|
||||
|
||||
wp_delete_term(
|
||||
$this->user_organization_id,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME);
|
||||
wp_delete_term(
|
||||
$this->user_department_id,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME);
|
||||
$this->factory->organization->delete_organizations();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,13 +2,18 @@
|
||||
|
||||
class Wiaas_Unit_Test_Case extends WP_UnitTestCase {
|
||||
|
||||
public $factory;
|
||||
|
||||
/**
|
||||
* Executes any db migrations that are done to
|
||||
* `wp_options` table since it is deleted on every execution
|
||||
*/
|
||||
function setUp() {
|
||||
parent::setUp();
|
||||
wp_set_current_user(1);
|
||||
|
||||
$this->factory = new Wiaas_Unit_Test_Factory();
|
||||
|
||||
wp_set_current_user(1);
|
||||
|
||||
# Setup Gravity info since options table is deleted after each test
|
||||
gf_upgrade()->install();
|
||||
@@ -28,6 +33,8 @@ class Wiaas_Unit_Test_Case extends WP_UnitTestCase {
|
||||
Wiaas_Order_Project::register_order_project_taxonomy();
|
||||
|
||||
Wiaas_Product_Supplier::register_supplier_taxonomy();
|
||||
|
||||
Wiaas_Package_Status::register_package_status_taxonomy();
|
||||
|
||||
define('WP_TEST_IN_PROGRESS',true);
|
||||
}
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
|
||||
class Wiaas_Unit_Test_Factory {
|
||||
|
||||
//
|
||||
public $product;
|
||||
|
||||
//
|
||||
public $package;
|
||||
|
||||
//
|
||||
public $organization;
|
||||
|
||||
function __construct() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -61,6 +61,7 @@ include_once WIAAS_DIR . '/includes/wiaas-class-measurement-units.php';
|
||||
|
||||
include_once WIAAS_DIR . '/includes/class-wiaas-validation.php';
|
||||
|
||||
|
||||
function wiaas_redirect_to_login() {
|
||||
wp_safe_redirect(get_site_url('', 'wp-login.php'));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user