Work on wiaas orders
This commit is contained in:
@@ -8,8 +8,50 @@
|
||||
|
||||
class Wiaas_Order {
|
||||
|
||||
private static $object_order_type = 'shop_order';
|
||||
|
||||
private static $wiaas_order_status = array(
|
||||
|
||||
);
|
||||
|
||||
public static function init() {
|
||||
add_filter('woocommerce_rest_prepare_shop_order_object', array(__CLASS__, 'transform_rest_order'), 10, 3);
|
||||
|
||||
add_action('woocommerce_new_order', array( __CLASS__, 'assign_order_to_organization' ));
|
||||
|
||||
add_filter('woocommerce_rest_check_permissions', array( __CLASS__, 'check_order_access'), 10, 4);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks if current user has access to requested order/{orderId} via woocommerce REST API.
|
||||
* Endpoint `/orders` is filtered correctly by groups, but endpoint `/orders/{orderId}` will return order even if
|
||||
* user does not have access to it.
|
||||
* Groups has general support for this using rest_prepare_{$post_type} but woocommerce api does not
|
||||
* use this filter anymore. So we will just call the same function just with woocommerce filter.
|
||||
*
|
||||
* @param $permission
|
||||
* @param $context
|
||||
* @param $object_id
|
||||
* @param $post_type
|
||||
* @return bool
|
||||
*/
|
||||
public static function check_order_access($permission, $context, $object_id, $post_type) {
|
||||
if ($post_type === 'shop_order' && $object_id !== 0) {
|
||||
return Groups_Post_Access::user_can_read_post($object_id);
|
||||
}
|
||||
#return Groups_Post_Access::user_can_read_post($object_id);
|
||||
return $permission;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assignees order to corresponding user organization when order is created.
|
||||
*
|
||||
* @param $order_id
|
||||
*/
|
||||
public static function assign_order_to_organization($order_id) {
|
||||
$user = wp_get_current_user();
|
||||
Wiaas_User_Organization::assign_post_to_user_organization($order_id, $user->ID);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -24,14 +66,81 @@ class Wiaas_Order {
|
||||
public static function transform_rest_order($response, $order, $request) {
|
||||
$data = $response->get_data();
|
||||
|
||||
$is_customer = wcj_is_user_role('customer');
|
||||
|
||||
if ($is_customer || true) {
|
||||
// Format date values.
|
||||
$data['date_created'] = self::_format_order_date($order->get_date_created());
|
||||
$data['date_modified'] = self::_format_order_date($order->get_date_modified());
|
||||
$data['date_completed'] = self::_format_order_date($order->get_date_completed());
|
||||
}
|
||||
|
||||
# apply overrides
|
||||
$data = self::_append_products_info($data, $order, $request);
|
||||
|
||||
$data = self::_append_order_process($data, $order, $request);
|
||||
|
||||
$data = self::_append_customer_info($data, $order, $request);
|
||||
|
||||
$data = self::_append_commercial_lead_info($data, $order, $request);
|
||||
|
||||
$response->set_data($data);
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
private static function _append_commercial_lead_info($data, $order, $request) {
|
||||
|
||||
$data['commercial_lead'] = array(
|
||||
'name' => 'Coor Service Management',
|
||||
'phone' => '123456789',
|
||||
'email' => 'rikard@co-ideation.com'
|
||||
);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private static function _append_customer_info($data, $order, $request) {
|
||||
|
||||
$customer_id = $data['customer_id'];
|
||||
|
||||
$customer_user = get_user_by('id', $customer_id);
|
||||
$data['customer'] = array(
|
||||
'email' => $customer_user->user_email,
|
||||
'name' => $customer_user->display_name,
|
||||
'phone' => get_user_meta($customer_id, 'wiaas_customer_phone', true)
|
||||
);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private static function _append_products_info($data, $order, $request) {
|
||||
foreach ($data['line_items'] as $index => $product_line) {
|
||||
# lock all products to `Purchase` payment type
|
||||
$product_line['payment_type'] = 'Purchase';
|
||||
|
||||
# lock all products to have no service
|
||||
$product_line['service_price'] = 0;
|
||||
$product_line['service_contract_period'] = 0;
|
||||
$product_line['max_contract_period'] = 36;
|
||||
$product_line['period_unit'] = 'month';
|
||||
|
||||
# simplify payment for all products
|
||||
$product_line['recurring_price'] = 0;
|
||||
$product_line['pay_period'] = 0;
|
||||
|
||||
# collect status from order
|
||||
$product_line['status'] = $data['status'];
|
||||
$product_line['short_desc'] = $product_line['status'];
|
||||
|
||||
# collect completion data from order
|
||||
$product_line['date_completed'] = $data['date_completed'];
|
||||
|
||||
$data['line_items'][$index] = $product_line;
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Append order delivery process info if single order is requested
|
||||
* @param $data
|
||||
@@ -49,6 +158,12 @@ class Wiaas_Order {
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private static function _format_order_date($date) {
|
||||
$date = new WC_DateTime( $date, new DateTimeZone( 'UTC' ) );
|
||||
$date->setTimezone( new DateTimeZone( wc_timezone_string() ) );
|
||||
return gmdate('jS F, Y', $date->getTimestamp());
|
||||
}
|
||||
}
|
||||
|
||||
Wiaas_Order::init();
|
||||
Reference in New Issue
Block a user