39 Commits

Author SHA1 Message Date
Almira Krdzic
2b688e8a5e Remove unused code 2018-11-27 11:22:01 +01:00
Almira Krdzic
95d162578f Add timestamp script to composer 2018-11-27 01:47:01 +01:00
Almira Krdzic
798ad20534 Show countries for delivery process forms. Refactor countries. 2018-11-27 00:57:35 +01:00
Almira
61ff7dbc60 Merge branch 'add-phone-number-field-in-backoffice-profile' into 'development'
Add phone number field in backoffice profile

See merge request saburly/wiaas/new-wiaas!75
2018-11-22 12:24:42 +00:00
Bilal Catic
09fc3f8018 Rename class 2018-11-22 13:22:05 +01:00
Bilal Catic
217dfb1889 add validation functions class 2018-11-22 12:08:41 +01:00
Bilal Catic
8d954469ee use woocommerce validation 2018-11-22 11:27:30 +01:00
Bilal Catic
68c760a426 validate phone number from frontend 2018-11-21 12:26:23 +01:00
Bilal Catic
35854d1367 add phone number field 2018-11-21 12:26:23 +01:00
Almira
3db4b71c3f Merge branch 'fix-location-details-field' into 'development'
Fix location details field

See merge request saburly/wiaas/new-wiaas!74
2018-11-19 15:32:55 +00:00
Bilal Catic
3df6397280 remove comment 2018-11-19 16:30:04 +01:00
Bilal Catic
e548e2a31c break project name and location details if too long 2018-11-19 16:29:22 +01:00
Almira
3d37a88247 Merge branch 'ticketing-integration' into 'development'
add helpdesk module

See merge request saburly/wiaas/new-wiaas!66
2018-11-19 12:44:16 +00:00
Bilal Catic
30e5d594ad highlight helpdesk when selected 2018-11-19 13:38:12 +01:00
Bilal Catic
dd93677def add helpdesk module 2018-11-19 13:38:12 +01:00
Nedim Uka
4de01d93d1 Merge branch 'fix-bundle-link-in-order-details' into 'development'
set commercial id to real id, not object

See merge request saburly/wiaas/new-wiaas!72
2018-11-19 12:37:09 +00:00
Bilal Catic
2fdae06a59 set commercial id to real id, not object 2018-11-19 13:30:07 +01:00
Almira
d0533b3d6e Merge branch 'support-email' into 'development'
Added support for sending customer emails

See merge request saburly/wiaas/new-wiaas!69
2018-11-19 12:24:10 +00:00
Nedim Uka
35e670fa52 removved debug log 2018-11-19 13:15:50 +01:00
Nedim Uka
f56377f606 Handled proper endpoint naming 2018-11-19 12:35:04 +01:00
Almira
95a9fd2110 Merge branch 'fix-additional-days-bug' into 'development'
add only working days

See merge request saburly/wiaas/new-wiaas!70
2018-11-19 11:11:34 +00:00
Nedim Uka
752df56d4a Fixed bug where order note text is saved as order ID 2018-11-19 11:31:46 +01:00
Bilal Catic
e1594f3a7f Merge branch 'fixes' into 'development'
Fixes

See merge request saburly/wiaas/new-wiaas!71
2018-11-19 10:15:26 +00:00
Almira Krdzic
4f97df5b45 Merge branch 'development' into fixes 2018-11-18 22:10:24 +01:00
Almira Krdzic
ef5cf00983 Fix hidden metadata 2018-11-18 22:10:01 +01:00
Bilal Catic
ca0fed674f add only working days 2018-11-16 20:30:47 +01:00
Bilal Catic
fb66d56d9c Merge branch 'installation-fix' into 'development'
Fix installation selection

See merge request saburly/wiaas/new-wiaas!68
2018-11-16 19:20:35 +00:00
Nedim Uka
a07c0e4584 Added support for sending customer emails 2018-11-16 17:16:28 +01:00
Almira Krdzic
3708c9fb30 Fix installation selection 2018-11-16 15:59:16 +01:00
Bilal Catic
c630452d0b Merge branch 'fix-tests' into 'development'
Fix and remove broken tests

See merge request saburly/wiaas/new-wiaas!67
2018-11-16 09:38:51 +00:00
Almira Krdzic
a62de78172 fix and remove broken tests 2018-11-15 23:40:58 +01:00
Almira
14550d2ea9 Merge branch 'allign-order-table' into 'development'
break long words

See merge request saburly/wiaas/new-wiaas!65
2018-11-15 15:23:51 +00:00
Bilal Catic
56c171df3e break long words 2018-11-15 14:50:02 +01:00
Bilal Catic
337f031705 Merge branch 'documents-fix' into 'development'
Handle documents upload

See merge request saburly/wiaas/new-wiaas!64
2018-11-15 13:44:55 +00:00
Almira Krdzic
b7be6fde42 Merge branch 'development' into documents-fix 2018-11-15 14:33:15 +01:00
Almira Krdzic
6c656a0b26 Handle order documents 2018-11-15 11:29:15 +01:00
Bilal Catic
c4d539f549 Merge branch 'documents-fix' into 'development'
Documents fix

See merge request saburly/wiaas/new-wiaas!63
2018-11-07 10:17:46 +00:00
Almira Krdzic
0ba27b2f1d documents fix 2018-11-07 03:05:54 +01:00
Bilal Catic
e6b372f5d0 Merge branch 'cart-validation' into 'development'
Validate that items are from the same country and catalogue

See merge request saburly/wiaas/new-wiaas!61
2018-11-06 20:13:13 +00:00
63 changed files with 1579 additions and 1453 deletions

View File

@@ -8,4 +8,50 @@ jQuery(document).ready(function($) {
$('#general_product_data').find('.pricing').addClass('hide_if_wiaastemplate hide_if_bundle');
$('#general_product_data').find('.pricing').removeClass('show_if_bundle show_if_wiaastemplate');
$( '.wiaas-search-documents' ).each(function() {
var element = $( this );
var searchTarget = $('#' + element.data('target'));
element.autocomplete({
source: function(request, response) {
$.get( window.ajaxurl, {
action: 'wiaas_json_search_documents',
query: request.term,
_ajax_nonce: element.data('search-nonce')
} ).done( function( documents ) {
response( documents || []);
}
);
},
select: function(event, ui) {
if (!searchTarget || $('#wiaas_attached_document_' + ui.item.id).length) {
return;
}
$.get(window.ajaxurl, {
action: 'wiaas_link_document',
_ajax_nonce: element.data('link-nonce'),
id: ui.item.id
}).done( function (document) {
searchTarget.find('tbody').append(document);
});
}
})
.autocomplete( 'instance' )._renderItem = function( ul, item ) {
return $( '<li role="option" id="wiaas-document-autocomplete-' + item.id + '">' )
.text( item.name )
.appendTo( ul );
};
});
$('#wiaas_attached_documents').delegate('.wiaas-remove-attached-document', 'click', function (e) {
e.preventDefault();
var id = $(this).data('id');
$('#wiaas_attached_document_' + id).remove();
});
});

View File

@@ -0,0 +1,71 @@
<?php
class Wiaas_Admin_Countries {
public static function init() {
// Add countries fields to countries list
add_filter( 'manage_edit-product_country_columns', array( __CLASS__, 'update_list_headers' ) );
add_filter( 'manage_product_country_custom_column', array( __CLASS__, 'update_list_column_content' ), 10, 3 );
// Validate country settings
add_filter('acf/load_field/name=_wiaas_country_code', array(__CLASS__, 'populate_country_codes'));
add_filter('acf/load_field/name=_wiaas_country_currency', array(__CLASS__, 'populate_country_currencies'));
}
public static function update_list_headers($columns) {
$columns['wiaas_code'] = __( 'Code', 'wiaas' );
$columns['wiaas_vat'] = __('VAT', 'wiaas');
$columns['wiaas_currency'] = __('Currency', 'wiaas');
return $columns;
}
public static function update_list_column_content($columns, $column, $id) {
if ($column === 'wiaas_code') {
$code = get_term_meta($id, '_wiaas_country_code', true);
$columns .= '<span>'. $code . '</span>';
}
if ($column === 'wiaas_vat') {
$vat = get_term_meta($id, '_wiaas_country_vat', true);
$columns .= '<span>'. $vat . '</span>';
}
if ($column === 'wiaas_currency') {
$currency = get_term_meta($id, '_wiaas_country_currency', true);
$columns .= '<span>'. $currency . '</span>';
}
return $columns;
}
public static function populate_country_codes($field) {
$countries_list = Wiaas_Countries::get_country_choices();
$countries_choices = array();
foreach ($countries_list as $code => $name) {
$countries_choices[$code] = $code . ' - ' . $name;
}
$field['choices'] = $countries_choices;
return $field;
}
public static function populate_country_currencies($field) {
$field['choices'] = Wiaas_Countries::get_currency_choices();
return $field;
}
}
Wiaas_Admin_Countries::init();

View File

@@ -7,6 +7,7 @@ class Wiaas_Admin_Delivery_Process {
require_once dirname( __FILE__ ) . '/delivery-process/wiaas-admin-delivery-process-ajax.php';
require_once dirname( __FILE__ ) . '/delivery-process/class-wiaas-admin-delivery-process-flow.php';
require_once dirname( __FILE__ ) . '/delivery-process/class-wiaas-admin-delivery-process-order.php';
require_once dirname( __FILE__ ) . '/delivery-process/class-wiaas-admin-delivery-process-list.php';
add_action( 'admin_enqueue_scripts', array(__CLASS__, 'enqueue_scripts'), 100 );
}

View File

@@ -0,0 +1,31 @@
<?php
class Wiaas_Admin_Profile {
public static function init() {
add_filter( 'user_contactmethods', array(__CLASS__, 'modify_user_contact_methods') );
add_action( 'user_profile_update_errors', array(__CLASS__, 'crf_user_profile_update_errors'), 10, 3 );
}
public static function crf_user_profile_update_errors( $errors, $update, $user ) {
$phone = $_POST['phone'];
if (!Wiaas_Validation::is_phone($phone)){
$errors->add('phone_error', __( '<strong>ERROR</strong>: Enter valid phone number.', 'crf' ));
};
}
public static function modify_user_contact_methods($user_contact){
$user_contact['phone'] = __( 'Phone number' );
return $user_contact;
}
}
Wiaas_Admin_Profile::init();

View File

@@ -0,0 +1,150 @@
<?php
class Wiaas_Admin_Delivery_Process_List {
public static function init() {
add_filter('gform_form_list_columns', array( __CLASS__, 'filter_gform_form_list_columns' ));
add_filter('gform_form_list_forms', array( __CLASS__, 'filter_gform_form_list_forms' ), 10, 6);
add_filter('gform_form_actions', array( __CLASS__, 'filter_gform_form_actions' ), 10, 2);
add_action('gform_form_list_column_wiaas_country', array( __CLASS__, 'render_gform_form_list_wiaas_country_column' ));
add_action('gform_form_list_column_wiaas_actions', array( __CLASS__, 'render_gform_form_list_wiaas_actions_column' ));
}
/**
* Hide not needed columns for delivery process list
* Add country column
* Add actions column
*
* @param array $columns
*
* @return mixed
*/
public static function filter_gform_form_list_columns($columns) {
unset($columns['entry_count']);
unset($columns['conversion']);
unset($columns['view_count']);
$columns['wiaas_country'] = esc_html__( 'Country', 'wiaas' );
$columns['wiaas_actions'] = esc_html__( 'Actions', 'wiaas' );
return $columns;
}
/**
* Filter delivery process forms list with search query by title and country
* @param array $forms
* @param string $search_query
* @param bool $active
* @param string $sort_column
* @param string $sort_direction
* @param bool $trash
*
* @return array
*/
public static function filter_gform_form_list_forms($forms, $search_query, $active, $sort_column, $sort_direction, $trash) {
$forms = GFFormsModel::get_forms( $active, $sort_column, $sort_direction, $trash );
if ( ! rgblank( $search_query ) ) {
$filtered_forms = array();
$search_query = strtolower($search_query);
// filter forms
foreach ($forms as $form) {
$form_details = GFAPI::get_form( $form->id );
$title = strtolower($form_details['title']);
$delivery_settings = rgar($form_details, 'wiaas_delivery_process');
$country_code = ! empty($delivery_settings) ? $delivery_settings['delivery_country'] : '';
$country_name = Wiaas_Countries::get_available_country_name_by_code($country_code);
$country_name = strtolower($country_name);
if (strpos($title, $search_query) !== false || strpos($country_code, $search_query) !== false ||
strpos($country_name, $search_query) !== false) {
$filtered_forms[] = $form;
}
}
return $filtered_forms;
}
return $forms;
}
/**
* Remove unused actions and add workflow action for delivery forms list
*
* @param array $actions
* @param int $form_id
*
* @return mixed
*/
public static function filter_gform_form_actions($actions, $form_id) {
unset($actions['entries']);
unset($actions['preview']);
unset($actions['edit']);
$actions['wiaas_workflow'] = array(
'label' => __( 'Workflow', 'wiaas' ),
'short_label' => esc_html__( 'Workflow', 'wiaas' ),
'title' => __( 'Edit workflow', 'wiaas' ),
'url' => '?page=gf_edit_forms&view=settings&id=' . $form_id . '&subview=gravityflow',
'priority' => 1000,
);
return $actions;
}
/**
* Render country column for delivery process forms list
*
* @param mixed $form
*/
public static function render_gform_form_list_wiaas_country_column($form) {
$form_details = GFAPI::get_form($form->id);
$delivery_settings = rgar($form_details, 'wiaas_delivery_process');
$country_code = ! empty($delivery_settings) ? $delivery_settings['delivery_country'] : '';
$country_name = Wiaas_Countries::get_available_country_name_by_code($country_code);
echo '<strong>' . esc_html_e($country_name) . '</strong>';
}
/**
* Render actions column for delivery process forms list
* @param mixed $form
*/
public static function render_gform_form_list_wiaas_actions_column($form) {
$form_details = GFAPI::get_form($form->id);
$delivery_settings = rgar($form_details, 'wiaas_delivery_process');
$form_type = ! empty($delivery_settings) ? $delivery_settings['delivery_form_type'] : '';
?>
<a href="<?php echo '?page=gf_edit_forms&view=settings&id=' . $form->id . '&subview=gravityflow' ?>">Workflow</a>
<?php
if ($form_type !== 'action') {
?>
<span style="margin: 0 10px; opacity: 0.3;"> | </span>
<a href="<?php echo '?page=gf_edit_forms&view=settings&id=' . $form->id . '&subview=wiaas_delivery_process' ?>">Change Country</a>
<?php
}
}
}
Wiaas_Admin_Delivery_Process_List::init();

View File

@@ -58,11 +58,9 @@ class Wiaas_Admin_Delivery_Process_Order {
if ( empty($process_entry) ) {
$order = wc_get_order($order_id);
$country_code = Wiaas_Order::get_order_country_code($order_id);
$list_of_delivery_processes = Wiaas_Delivery_Process::get_available_process_list_for_country(
Wiaas_Countries::get_country_code_by_currency($order->get_currency())
);
$list_of_delivery_processes = Wiaas_Delivery_Process::get_available_process_list_for_country($country_code);
?>
<div>

View File

@@ -152,18 +152,29 @@ $insert_new_document = $post->post_type !== 'wiaas_doc';
response = response.response;
var infoContainer = jQuery('#wiaas_upload_info');
if (response.substring(0, 6) === 'ERROR:') {
jQuery('#wiaas_upload_errors').html('<span class="text-danger">' +
'<i class="fa fa-exclamation-triangle"></i>' +
infoContainer.html('<span style="color: darkred;">' +
'<i class="dashicons dashicons-warning"></i>' +
' &nbsp; ' + response.substring(6, response.length) +
'</span>');
return;
}
infoContainer.html('<span style="color: darkgreen;">' +
'<i class="dashicons dashicons-yes"></i>' +
' &nbsp; ' + 'Document uploaded and linked' +
'</span>');
<?php
if ($insert_new_document) {
?>
$('#wiaas_attached_documents').find('tbody').append(response);
$('.wiaas_documents_tab a').click();
<?php
} else {
?>
@@ -252,7 +263,8 @@ $insert_new_document = $post->post_type !== 'wiaas_doc';
</div>
</div>
<div id="wiaas_upload_errors" style="color: darkred;">
<div id="wiaas_upload_info">
</div>
</div>

View File

@@ -8,62 +8,17 @@ if ( ! defined( 'ABSPATH' ) ) {
}
?>
<script type="text/javascript">
jQuery(document).ready(function ($) {
$( '.wiaas-search-documents' ).each(function() {
var element = $( this );
var searchTarget = $('#' + element.data('target'));
element.autocomplete({
source: function(request, response) {
$.get( window.ajaxurl, {
action: 'wiaas_json_search_documents',
query: request.term,
_ajax_nonce: '<?php echo wp_create_nonce('wiaas_json_search_documents') ?>'
} ).done( function( documents ) {
response( documents || []);
}
);
},
select: function(event, ui) {
if (!searchTarget || $('#wiaas_attached_document_' + ui.item.id).length) {
return;
}
$.get(window.ajaxurl, {
action: 'wiaas_link_document',
_ajax_nonce: '<?php echo wp_create_nonce('wiaas_link_document') ?>',
id: ui.item.id
}).done( function (document) {
searchTarget.find('tbody').append(document);
});
}
})
.autocomplete( 'instance' )._renderItem = function( ul, item ) {
return $( '<li role="option" id="wiaas-document-autocomplete-' + item.id + '">' )
.text( item.name )
.appendTo( ul );
};
});
$('#wiaas_attached_documents').delegate('.wiaas-remove-attached-document', 'click', function (e) {
e.preventDefault();
var id = $(this).data('id');
$('#wiaas_attached_document_' + id).remove();
});
});
</script>
<div id="wiaas_documents" class="panel woocommerce_options_panel">
<div class="options_group">
<p class="form-field">
<label style="font-weight: bold;" for="wiaas_addon_packages"><?php esc_html_e( 'Search documents:', 'wiaas' ); ?></label>
<input type="text" data-target="wiaas_attached_documents" class="wiaas-search-documents"/>
<input
type="text"
data-target="wiaas_attached_documents"
data-search-nonce="<?php echo wp_create_nonce('wiaas_json_search_documents') ?>"
data-link-nonce="<?php echo wp_create_nonce('wiaas_link_document') ?>"
class="wiaas-search-documents"
/>
</p>
</div>
<div class="options_group">

View File

@@ -5,7 +5,6 @@ if ( ! defined( 'ABSPATH' ) ) {
}
/**
* TODO: This is temporary implemetation and will probably be changed during work on pending wiaas cart task
* Class Wiaas_Document_API
*/
class Wiaas_Document_API {
@@ -30,30 +29,26 @@ class Wiaas_Document_API {
)
) );
register_rest_route( self::$namespace, 'documents/order/(?P<id>\d+)/(?P<type>[\w-]+)', array(
register_rest_route( self::$namespace, 'order/(?P<id>\d+)/item/(?P<item_id>\d+)/document/(?P<key>[\w-]+)', array(
'args' => array(
'id' => array(
'description' => __( 'Order ID.', 'wiaas' ),
'type' => 'integer',
'sanitize_callback' => 'absint',
),
'type' => array(
'description' => __( 'Order document type.', 'wiaas' ),
'type' => 'string',
'sanitize_callback' => 'sanitize_key',
),
)
),
array(
'methods' => 'GET',
'permission_callback' => 'is_user_logged_in',
'callback' => array(__CLASS__, 'download_order_document'),
'callback' => array(__CLASS__, 'download_order_item_document'),
'args' => array(
'item_id' => array(
'description' => __( 'Package Order Item ID.', 'wiaas' ),
'type' => 'integer',
'sanitize_callback' => 'absint',
'required' => true
),
'document_key' => array(
'key' => array(
'description' => __( 'Unique key identifier for order document.', 'wiaas' ),
'type' => 'string',
'sanitize_callback' => 'sanitize_key',
@@ -62,6 +57,29 @@ class Wiaas_Document_API {
)
)
) );
register_rest_route(self::$namespace, 'order/(?P<id>\d+)/document/(?P<key>[\w-]+)', array(
'args' => array(
'id' => array(
'description' => __( 'Order ID.', 'wiaas' ),
'type' => 'integer',
'sanitize_callback' => 'absint',
)
),
array(
'methods' => 'GET',
'permission_callback' => 'is_user_logged_in',
'callback' => array(__CLASS__, 'download_order_other_document'),
'args' => array(
'key' => array(
'description' => __( 'Unique key identifier for order document.', 'wiaas' ),
'type' => 'string',
'sanitize_callback' => 'sanitize_key',
'required' => true
),
)
)
));
}
/**
@@ -76,14 +94,23 @@ class Wiaas_Document_API {
}
/**
* Download order document
* Download order item document
*
* @param WP_REST_Request $request
*/
public static function download_order_document($request) {
public static function download_order_item_document($request) {
Wiaas_Document_Download::download_order_item_document(
$request['id'],
$request['item_id'],
$request['type'],
$request['document_key']);
$request['key']);
}
/**
* Download order document
*
* @param WP_REST_Request $request
*/
public static function download_order_other_document($request) {
Wiaas_Document_Download::download_order_other_document($request['id'], $request['key']);
}
}

View File

@@ -148,6 +148,10 @@ class Wiaas_REST_Customer_API {
return wiaas_api_notice('ADD_PHONE_NUMBER', 'error', Wiaas_Customer::get_customer_info($customer_id));
}
if (!Wiaas_Validation::is_phone($phone)){
return wiaas_api_notice('INVALID_PHONE_NUMBER', 'error', Wiaas_Customer::get_customer_info($customer_id));
};
if (!Wiaas_Customer::update_customer_profile_info($customer_id, $first_name, $last_name, $phone)){
return wiaas_api_notice('PROFILE_NOT_CHANGED', 'warning', Wiaas_Customer::get_customer_info($customer_id));
}

View File

@@ -43,7 +43,7 @@ class Wiass_REST_User_API {
}
public static function get_countries(){
$countries = Wiaas_Countries::get_list_of_countries();
$countries = Wiaas_Countries::get_available_countries();
return rest_ensure_response($countries);
}

View File

@@ -0,0 +1,68 @@
<?php
class Wiaas_Support_Api {
/**
* Endpoint namespace.
*
* @var string
*/
private static $namespace = 'wiaas';
private static $rest_base = 'support';
public static function register_routes() {
register_rest_route(self::$namespace, self::$rest_base . '/send-support-email', array(
'methods' => 'POST',
'callback' => array(__CLASS__, 'send_support_email'),
'permission_callback' => 'is_user_logged_in',
'args' => array(
'id' => array(
'description' => __('Order ID.', 'wiaas'),
'type' => 'integer',
'required' => true,
'sanitize_callback' => 'absint',
),
'support_text' => array(
'description' => __('Email text.', 'wiaas'),
'type' => 'string',
'required' => true
)
)
));
}
/**
* Send support email and save massage to order notes
*
* @param WP_REST_Request $request Request data.
*
* @return WP_REST_Response
*/
public static function send_support_email($request) {
$order_id = $request['id'];
$message = $request['support_text'];
$order = wc_get_order($order_id);
$customer_id = $order->get_customer_id();
$customer = get_user_by('id', $customer_id);
$mailer = WC()->mailer();
$recipient = WIAAS_SUPPORT_EMAIL;
$subject = __('Customer: '.$customer->get('first_name').', '.''.$customer->get('last_name').' needs support for order number: ' .$order->get_order_number());
$headers = array();
$success = $mailer->send( $recipient, $subject, $message, $headers );
if ($success) {
wc_create_order_note($order_id , $message, true );
return wiaas_api_notice('EMAIL_SENT', 'success');
}
return wiaas_api_notice('EMAIL_NOT_SENT', 'failed');
}
}

View File

@@ -28,6 +28,10 @@ class Wiaas_Admin {
require_once dirname(__FILE__) . '/admin/class-wiaas-admin-supplier.php';
require_once dirname(__FILE__) . '/admin/class-wiaas-admin-user-profile.php';
require_once dirname(__FILE__) . '/admin/class-wiaas-admin-countries.php';
add_action( 'admin_enqueue_scripts', array(__CLASS__, 'enqueue_scripts'), 100 );
}

View File

@@ -43,7 +43,8 @@ class Wiaas_API {
include_once dirname( __FILE__ ) . '/api/class-wiaas-order-projects-api.php';
include_once dirname( __FILE__ ) . '/api/class-wiaas-wc- package-api-integration.php';
include_once dirname( __FILE__ ) . '/api/class-wiaas-wc-package-api-integration.php';
include_once dirname( __FILE__ ) . '/api/class-wiaas-support-api.php';
// API functions
include_once dirname( __FILE__ ) . '/api/wiaas-api-functions.php';
@@ -58,6 +59,7 @@ class Wiaas_API {
'Wiass_REST_User_API',
'Wiaas_REST_Customer_API',
'Wiaas_Order_Projects_API',
'Wiaas_Support_Api',
);
foreach ( $controllers as $controller ) {

View File

@@ -473,8 +473,8 @@ class Wiaas_Cart {
'_wiaas_supplier_organization_id',
'_wiaas_product_price',
'_wiaas_earliest_installation_additional_days',
'wiaas_installation',
'wiaas_installation_date'
'_wiaas_installation',
'_wiaas_installation_date'
) );
}
@@ -492,6 +492,8 @@ class Wiaas_Cart {
$country = get_user_meta(get_current_user_id(), '_wiaas_cart_items_country', true);
$currency = empty($country) ? get_woocommerce_currency() : $country['currency'];
$order->add_meta_data('_wiaas_country_code', $country['code']);
$order->set_currency($currency);
// get order commercial lead
@@ -740,6 +742,7 @@ class Wiaas_Cart {
$documents_ids = array();
// Retrieve all document ids attached to cart content
foreach ($items as $key => $item) {
if (!isset($item['_wiaas_standard_package'])) {
continue;
@@ -757,16 +760,19 @@ class Wiaas_Cart {
}
}
// Retrieve all customer visible template documents attached to cart content
$q = new WP_Query();
$retrieved_items = $q->query(array(
'post_status' => 'publish',
'post_type' => 'wiaas_doc',
'post__in' => array_keys($documents_ids),
'meta_key' => '_wiaas_doc_visible',
'meta_value' => 'yes', // visible to customer
'tax_query' => array(
array(
'taxonomy' => 'wiaas_doc_type',
'field' => 'slug',
'terms' => array_keys(self::$cart_doc_types),
'terms' => array_keys(self::$cart_doc_types), // templates only
)
)
));

View File

@@ -12,28 +12,19 @@ if ( ! defined( 'ABSPATH' ) ) {
class Wiaas_Countries {
/**
* Available countries for wiaas
* Default available countries for wiaas
* @var array
*/
private static $available_countries = array(
'Sweden' => array(
'id' => 1,
'name' => 'Sweden',
'code' => 'se',
private static $default_countries = array(
'se' => array(
'vat' => 9 ,
'currency' => 'SEK'
),
'Denmark' => array(
'id' => 2,
'name' => 'Denmark',
'code' => 'dk',
'dk' => array(
'vat' => 9 ,
'currency' => 'DKK'
),
'Finland' => array(
'id' => 3,
'name' => 'Finland',
'code' => 'fi',
'fi' => array(
'vat' => 9 ,
'currency' => 'EUR'
),
@@ -44,31 +35,97 @@ class Wiaas_Countries {
add_action('woocommerce_after_register_taxonomy', array(__CLASS__, 'register_product_countries_taxonomy'));
}
public static function get_list_of_countries(){
$result = [];
foreach(self::$available_countries as $country){
array_push($result, array(
'country_id' => $country['id'],
'country_name' => $country['name']
));
/**
* Retrieve all possible country choices
*
* @return array
*/
public static function get_country_choices() {
$countries = new WC_Countries();
$choices = array();
foreach ($countries->get_countries() as $code => $name) {
$choices[strtolower($code)] = $name;
}
return $result;
return $choices;
}
public static function get_country_name_by_id($id){
foreach(self::$available_countries as $country){
if ($country['id'] == $id) return $country['name'];
}
return '';
/**
* Retrieve all possible currency choices
*
* @return array
*/
public static function get_currency_choices() {
return get_woocommerce_currencies();
}
public static function get_country_code_by_currency($currency) {
/**
* Retrieve list of available countries setup by administrator
*
* @return array
*/
public static function get_available_countries() {
$available_countries = [];
foreach (self::$available_countries as $country) {
$available_country_terms = get_terms(array(
'taxonomy' => 'product_country',
'hide_empty' => false,
));
if ($country['currency'] === $currency) {
foreach($available_country_terms as $country_term) {
$code = get_term_meta($country_term->term_id, '_wiaas_country_code', true);
$currency = get_term_meta($country_term->term_id, '_wiaas_country_currency', true);
$vat = get_term_meta($country_term->term_id, '_wiaas_country_vat', true);
return $country['code'];
$available_countries[] = array(
'id' => $country_term->term_id,
'name' => $country_term->name,
'code' => $code,
'currency' => $currency,
'vat' => $vat
);
}
return $available_countries;
}
/**
* Retrieve country name by code for available country
*
* @param string $code
*
* @return string|null
*/
public static function get_available_country_name_by_code($code) {
$available_countries = self::get_available_countries();
foreach ($available_countries as $available_country) {
if ($available_country['code'] === $code) {
return $available_country['name'];
}
}
return null;
}
/**
* Retrieve country code by currency for available country
*
* @param string $currency
*
* @return string|null
*/
public static function get_available_country_code_by_currency($currency) {
$available_countries = self::get_available_countries();
foreach ($available_countries as $available_country) {
if ($available_country['currency'] === $currency) {
return $available_country['code'];
}
}
@@ -106,8 +163,27 @@ class Wiaas_Countries {
register_taxonomy( 'product_country', array( 'product' ), $args );
foreach (self::$available_countries as $available_country) {
wp_insert_term($available_country['name'], 'product_country');
$choices = self::get_country_choices();
foreach (self::$default_countries as $code => $info) {
$name = $choices[$code];
if (has_term($name)) {
// bail out
return;
}
$name = $choices[$code];
$result = wp_insert_term($name, 'product_country');
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']);
}
}
@@ -128,10 +204,25 @@ class Wiaas_Countries {
* @return array|null
*/
public static function get_product_country($product) {
$product_country = get_the_terms($product->get_id(), 'product_country');
return is_array($product_country) && isset($product_country[0]) ?
self::$available_countries[$product_country[0]->name] :
null;
$country_terms = get_the_terms($product->get_id(), 'product_country');
if (is_wp_error($country_terms) || empty($country_terms) || empty($country_terms[0])) {
return null;
}
$country_term = $country_terms[0];
$code = get_term_meta($country_term->term_id, '_wiaas_country_code', true);
$currency = get_term_meta($country_term->term_id, '_wiaas_country_currency', true);
$vat = get_term_meta($country_term->term_id, '_wiaas_country_vat', true);
return array(
'id' => $country_term->term_id,
'name' => $country_term->name,
'code' => $code,
'currency' => $currency,
'vat' => $vat
);
}
/**

View File

@@ -18,15 +18,18 @@ class Wiaas_DB_Update {
'20181018044450' => 'wiaas_db_setup_create_customer_commercial_lead_table',
'20181018054450' => 'wiaas_db_update_update_commercial_lead_capabilities',
'20181018064450' => 'wiaas_db_update_add_organization_info_ui_fields',
'20191019014550' => 'wiaas_db_update_add_general_ui_fields',
'20191019014650' => 'wiaas_db_update_add_product_properties_ui_fields',
'20191020014650' => 'wiaas_create_organization_roles_capabilities',
'20191030162450' => 'wiaas_db_update_update_supplier_order_capabilities',
'20191102112451' => 'wiaas_disable_processing_order_email_delivery',
'20191131172850' => 'wiaas_db_update_update_delivery_forms',
'20191131182856' => 'wiaas_db_update_enable_workflow_inbox_for_roles',
'20191201133550' => 'wiaas_db_update_add_bundle_properties_ui_field',
'20191202133553' => 'wiaas_db_update_add_installation_date_delivery_action_form'
'20181019014550' => 'wiaas_db_update_add_general_ui_fields',
'20181019014650' => 'wiaas_db_update_add_product_properties_ui_fields',
'20181020014650' => 'wiaas_create_organization_roles_capabilities',
'20181021162450' => 'wiaas_db_update_update_supplier_order_capabilities',
'20181102112451' => 'wiaas_disable_processing_order_email_delivery',
'20181103172850' => 'wiaas_db_update_update_delivery_forms',
'20181104182856' => 'wiaas_db_update_enable_workflow_inbox_for_roles',
'20181105133550' => 'wiaas_db_update_add_bundle_properties_ui_field',
'20181106133553' => 'wiaas_db_update_add_installation_date_delivery_action_form',
'20181125133553' => 'wiaas_db_update_add_country_settings_ui_fields',
'20181125143553' => 'wiaas_db_migration_fix_user_profile_addresses', // remove after migration
'20181125153553' => 'wiaas_db_migration_fix_countries' // remove after migration
);
public static function execute() {

View File

@@ -400,7 +400,22 @@ class Wiaas_Order {
public static function get_order_tender($order_id) {
return get_post_meta($order_id, '_wiaas_tender', true);
}
}
public static function get_order_country_code($order_id) {
$order = wc_get_order($order_id);
$code = $order->get_meta('_wiaas_country_code');
if (empty($code)) {
$code = Wiaas_Countries::get_available_country_code_by_currency($order->get_currency());
$order->add_meta_data('_wiaas_country_code', $code);
$order->save_meta_data();
}
return $code;
}
/**
* PRIVATE
@@ -436,7 +451,7 @@ class Wiaas_Order {
if (! $missing_estimated) {
$earliest_installation_date = max($max_estimated_date, $max_confirmed_date);
$earliest_installation_date = strtotime('+' . self::get_additional_days_prior_installation($order->id) . ' days', $earliest_installation_date);
$earliest_installation_date = strtotime('+' . self::get_additional_days_prior_installation($order->id) . ' weekdays', $earliest_installation_date);
}
$order->update_meta_data('_wiaas_final_confirmed_delivery_date', $max_confirmed_date);
@@ -475,7 +490,6 @@ class Wiaas_Order {
$commercial_lead_organization_info = $order->get_meta('_wiaas_commercial_lead_info', true);
if (! empty($commercial_lead_org_id) && empty($commercial_lead_organization_info)) {
$commercial_lead_organization_info = wiaas_get_organization_info($commercial_lead_org_id);
$data['commercial_lead'] = array(
@@ -487,8 +501,7 @@ class Wiaas_Order {
}
if (!empty($commercial_lead_organization_info)) {
$commercial_lead_organization_info['id'] = $commercial_lead_organization_info;
$commercial_lead_organization_info['id'] = $commercial_lead_org_id;
$data['commercial_lead'] = $commercial_lead_organization_info;
}
@@ -681,19 +694,12 @@ class Wiaas_Order {
if (wiaas_is_order_item__standard_package($order_item)) {
$documents = wiaas_get_standard_package_order_item_documents($order, $product_line['id']);
if (! empty($order_item['wiaas_delivery_documents'])) {
$documents = array_merge($documents, $order_item['wiaas_delivery_documents']);
}
$data['line_items'][$index] ['documents'] = $documents;
}
}
$order_delivery_documents = $order->get_meta('wiaas_delivery_documents', true);
$order_delivery_documents = empty($order_delivery_documents) ? array() : $order_delivery_documents;
$data['documents'] = $order_delivery_documents;
$data['documents'] = wiaas_get_order_other_documents($order->get_id());
return $data;
}

View File

@@ -0,0 +1,13 @@
<?php
defined( 'ABSPATH' ) || exit;
/**
* Class Wiaas_Validation
*/
class Wiaas_Validation {
public static function is_phone($phone){
return WC_Validation::is_phone($phone);
}
}

View File

@@ -0,0 +1,501 @@
[
{
"key": "group_5bdad38fcebee",
"title": "Country settings",
"fields": [
{
"key": "field_5bdad398384e1",
"label": "Code",
"name": "_wiaas_country_code",
"type": "select",
"instructions": "",
"required": 1,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"choices": {
"ax": "ax - &#197;land Islands",
"af": "af - Afghanistan",
"al": "al - Albania",
"dz": "dz - Algeria",
"as": "as - American Samoa",
"ad": "ad - Andorra",
"ao": "ao - Angola",
"ai": "ai - Anguilla",
"aq": "aq - Antarctica",
"ag": "ag - Antigua and Barbuda",
"ar": "ar - Argentina",
"am": "am - Armenia",
"aw": "aw - Aruba",
"au": "au - Australia",
"at": "at - Austria",
"az": "az - Azerbaijan",
"bs": "bs - Bahamas",
"bh": "bh - Bahrain",
"bd": "bd - Bangladesh",
"bb": "bb - Barbados",
"by": "by - Belarus",
"pw": "pw - Belau",
"be": "be - Belgium",
"bz": "bz - Belize",
"bj": "bj - Benin",
"bm": "bm - Bermuda",
"bt": "bt - Bhutan",
"bo": "bo - Bolivia",
"bq": "bq - Bonaire, Saint Eustatius and Saba",
"ba": "ba - Bosnia and Herzegovina",
"bw": "bw - Botswana",
"bv": "bv - Bouvet Island",
"br": "br - Brazil",
"io": "io - British Indian Ocean Territory",
"vg": "vg - British Virgin Islands",
"bn": "bn - Brunei",
"bg": "bg - Bulgaria",
"bf": "bf - Burkina Faso",
"bi": "bi - Burundi",
"kh": "kh - Cambodia",
"cm": "cm - Cameroon",
"ca": "ca - Canada",
"cv": "cv - Cape Verde",
"ky": "ky - Cayman Islands",
"cf": "cf - Central African Republic",
"td": "td - Chad",
"cl": "cl - Chile",
"cn": "cn - China",
"cx": "cx - Christmas Island",
"cc": "cc - Cocos (Keeling) Islands",
"co": "co - Colombia",
"km": "km - Comoros",
"cg": "cg - Congo (Brazzaville)",
"cd": "cd - Congo (Kinshasa)",
"ck": "ck - Cook Islands",
"cr": "cr - Costa Rica",
"hr": "hr - Croatia",
"cu": "cu - Cuba",
"cw": "cw - Cura&ccedil;ao",
"cy": "cy - Cyprus",
"cz": "cz - Czech Republic",
"dk": "dk - Denmark",
"dj": "dj - Djibouti",
"dm": "dm - Dominica",
"do": "do - Dominican Republic",
"ec": "ec - Ecuador",
"eg": "eg - Egypt",
"sv": "sv - El Salvador",
"gq": "gq - Equatorial Guinea",
"er": "er - Eritrea",
"ee": "ee - Estonia",
"et": "et - Ethiopia",
"fk": "fk - Falkland Islands",
"fo": "fo - Faroe Islands",
"fj": "fj - Fiji",
"fi": "fi - Finland",
"fr": "fr - France",
"gf": "gf - French Guiana",
"pf": "pf - French Polynesia",
"tf": "tf - French Southern Territories",
"ga": "ga - Gabon",
"gm": "gm - Gambia",
"ge": "ge - Georgia",
"de": "de - Germany",
"gh": "gh - Ghana",
"gi": "gi - Gibraltar",
"gr": "gr - Greece",
"gl": "gl - Greenland",
"gd": "gd - Grenada",
"gp": "gp - Guadeloupe",
"gu": "gu - Guam",
"gt": "gt - Guatemala",
"gg": "gg - Guernsey",
"gn": "gn - Guinea",
"gw": "gw - Guinea-Bissau",
"gy": "gy - Guyana",
"ht": "ht - Haiti",
"hm": "hm - Heard Island and McDonald Islands",
"hn": "hn - Honduras",
"hk": "hk - Hong Kong",
"hu": "hu - Hungary",
"is": "is - Iceland",
"in": "in - India",
"id": "id - Indonesia",
"ir": "ir - Iran",
"iq": "iq - Iraq",
"ie": "ie - Ireland",
"im": "im - Isle of Man",
"il": "il - Israel",
"it": "it - Italy",
"ci": "ci - Ivory Coast",
"jm": "jm - Jamaica",
"jp": "jp - Japan",
"je": "je - Jersey",
"jo": "jo - Jordan",
"kz": "kz - Kazakhstan",
"ke": "ke - Kenya",
"ki": "ki - Kiribati",
"kw": "kw - Kuwait",
"kg": "kg - Kyrgyzstan",
"la": "la - Laos",
"lv": "lv - Latvia",
"lb": "lb - Lebanon",
"ls": "ls - Lesotho",
"lr": "lr - Liberia",
"ly": "ly - Libya",
"li": "li - Liechtenstein",
"lt": "lt - Lithuania",
"lu": "lu - Luxembourg",
"mo": "mo - Macao S.A.R., China",
"mk": "mk - Macedonia",
"mg": "mg - Madagascar",
"mw": "mw - Malawi",
"my": "my - Malaysia",
"mv": "mv - Maldives",
"ml": "ml - Mali",
"mt": "mt - Malta",
"mh": "mh - Marshall Islands",
"mq": "mq - Martinique",
"mr": "mr - Mauritania",
"mu": "mu - Mauritius",
"yt": "yt - Mayotte",
"mx": "mx - Mexico",
"fm": "fm - Micronesia",
"md": "md - Moldova",
"mc": "mc - Monaco",
"mn": "mn - Mongolia",
"me": "me - Montenegro",
"ms": "ms - Montserrat",
"ma": "ma - Morocco",
"mz": "mz - Mozambique",
"mm": "mm - Myanmar",
"na": "na - Namibia",
"nr": "nr - Nauru",
"np": "np - Nepal",
"nl": "nl - Netherlands",
"nc": "nc - New Caledonia",
"nz": "nz - New Zealand",
"ni": "ni - Nicaragua",
"ne": "ne - Niger",
"ng": "ng - Nigeria",
"nu": "nu - Niue",
"nf": "nf - Norfolk Island",
"kp": "kp - North Korea",
"mp": "mp - Northern Mariana Islands",
"no": "no - Norway",
"om": "om - Oman",
"pk": "pk - Pakistan",
"ps": "ps - Palestinian Territory",
"pa": "pa - Panama",
"pg": "pg - Papua New Guinea",
"py": "py - Paraguay",
"pe": "pe - Peru",
"ph": "ph - Philippines",
"pn": "pn - Pitcairn",
"pl": "pl - Poland",
"pt": "pt - Portugal",
"pr": "pr - Puerto Rico",
"qa": "qa - Qatar",
"re": "re - Reunion",
"ro": "ro - Romania",
"ru": "ru - Russia",
"rw": "rw - Rwanda",
"st": "st - S&atilde;o Tom&eacute; and Pr&iacute;ncipe",
"bl": "bl - Saint Barth&eacute;lemy",
"sh": "sh - Saint Helena",
"kn": "kn - Saint Kitts and Nevis",
"lc": "lc - Saint Lucia",
"sx": "sx - Saint Martin (Dutch part)",
"mf": "mf - Saint Martin (French part)",
"pm": "pm - Saint Pierre and Miquelon",
"vc": "vc - Saint Vincent and the Grenadines",
"ws": "ws - Samoa",
"sm": "sm - San Marino",
"sa": "sa - Saudi Arabia",
"sn": "sn - Senegal",
"rs": "rs - Serbia",
"sc": "sc - Seychelles",
"sl": "sl - Sierra Leone",
"sg": "sg - Singapore",
"sk": "sk - Slovakia",
"si": "si - Slovenia",
"sb": "sb - Solomon Islands",
"so": "so - Somalia",
"za": "za - South Africa",
"gs": "gs - South Georgia\/Sandwich Islands",
"kr": "kr - South Korea",
"ss": "ss - South Sudan",
"es": "es - Spain",
"lk": "lk - Sri Lanka",
"sd": "sd - Sudan",
"sr": "sr - Suriname",
"sj": "sj - Svalbard and Jan Mayen",
"sz": "sz - Swaziland",
"se": "se - Sweden",
"ch": "ch - Switzerland",
"sy": "sy - Syria",
"tw": "tw - Taiwan",
"tj": "tj - Tajikistan",
"tz": "tz - Tanzania",
"th": "th - Thailand",
"tl": "tl - Timor-Leste",
"tg": "tg - Togo",
"tk": "tk - Tokelau",
"to": "to - Tonga",
"tt": "tt - Trinidad and Tobago",
"tn": "tn - Tunisia",
"tr": "tr - Turkey",
"tm": "tm - Turkmenistan",
"tc": "tc - Turks and Caicos Islands",
"tv": "tv - Tuvalu",
"ug": "ug - Uganda",
"ua": "ua - Ukraine",
"ae": "ae - United Arab Emirates",
"gb": "gb - United Kingdom (UK)",
"us": "us - United States (US)",
"um": "um - United States (US) Minor Outlying Islands",
"vi": "vi - United States (US) Virgin Islands",
"uy": "uy - Uruguay",
"uz": "uz - Uzbekistan",
"vu": "vu - Vanuatu",
"va": "va - Vatican",
"ve": "ve - Venezuela",
"vn": "vn - Vietnam",
"wf": "wf - Wallis and Futuna",
"eh": "eh - Western Sahara",
"ye": "ye - Yemen",
"zm": "zm - Zambia",
"zw": "zw - Zimbabwe"
},
"default_value": [],
"allow_null": 0,
"multiple": 0,
"ui": 1,
"ajax": 0,
"return_format": "value",
"placeholder": ""
},
{
"key": "field_5bfc4b4fa5992",
"label": "Currency",
"name": "_wiaas_country_currency",
"type": "select",
"instructions": "",
"required": 1,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"choices": {
"AED": "United Arab Emirates dirham",
"AFN": "Afghan afghani",
"ALL": "Albanian lek",
"AMD": "Armenian dram",
"ANG": "Netherlands Antillean guilder",
"AOA": "Angolan kwanza",
"ARS": "Argentine peso",
"AUD": "Australian dollar",
"AWG": "Aruban florin",
"AZN": "Azerbaijani manat",
"BAM": "Bosnia and Herzegovina convertible mark",
"BBD": "Barbadian dollar",
"BDT": "Bangladeshi taka",
"BGN": "Bulgarian lev",
"BHD": "Bahraini dinar",
"BIF": "Burundian franc",
"BMD": "Bermudian dollar",
"BND": "Brunei dollar",
"BOB": "Bolivian boliviano",
"BRL": "Brazilian real",
"BSD": "Bahamian dollar",
"BTC": "Bitcoin",
"BTN": "Bhutanese ngultrum",
"BWP": "Botswana pula",
"BYR": "Belarusian ruble (old)",
"BYN": "Belarusian ruble",
"BZD": "Belize dollar",
"CAD": "Canadian dollar",
"CDF": "Congolese franc",
"CHF": "Swiss franc",
"CLP": "Chilean peso",
"CNY": "Chinese yuan",
"COP": "Colombian peso",
"CRC": "Costa Rican col&oacute;n",
"CUC": "Cuban convertible peso",
"CUP": "Cuban peso",
"CVE": "Cape Verdean escudo",
"CZK": "Czech koruna",
"DJF": "Djiboutian franc",
"DKK": "Danish krone",
"DOP": "Dominican peso",
"DZD": "Algerian dinar",
"EGP": "Egyptian pound",
"ERN": "Eritrean nakfa",
"ETB": "Ethiopian birr",
"EUR": "Euro",
"FJD": "Fijian dollar",
"FKP": "Falkland Islands pound",
"GBP": "Pound sterling",
"GEL": "Georgian lari",
"GGP": "Guernsey pound",
"GHS": "Ghana cedi",
"GIP": "Gibraltar pound",
"GMD": "Gambian dalasi",
"GNF": "Guinean franc",
"GTQ": "Guatemalan quetzal",
"GYD": "Guyanese dollar",
"HKD": "Hong Kong dollar",
"HNL": "Honduran lempira",
"HRK": "Croatian kuna",
"HTG": "Haitian gourde",
"HUF": "Hungarian forint",
"IDR": "Indonesian rupiah",
"ILS": "Israeli new shekel",
"IMP": "Manx pound",
"INR": "Indian rupee",
"IQD": "Iraqi dinar",
"IRR": "Iranian rial",
"IRT": "Iranian toman",
"ISK": "Icelandic kr&oacute;na",
"JEP": "Jersey pound",
"JMD": "Jamaican dollar",
"JOD": "Jordanian dinar",
"JPY": "Japanese yen",
"KES": "Kenyan shilling",
"KGS": "Kyrgyzstani som",
"KHR": "Cambodian riel",
"KMF": "Comorian franc",
"KPW": "North Korean won",
"KRW": "South Korean won",
"KWD": "Kuwaiti dinar",
"KYD": "Cayman Islands dollar",
"KZT": "Kazakhstani tenge",
"LAK": "Lao kip",
"LBP": "Lebanese pound",
"LKR": "Sri Lankan rupee",
"LRD": "Liberian dollar",
"LSL": "Lesotho loti",
"LYD": "Libyan dinar",
"MAD": "Moroccan dirham",
"MDL": "Moldovan leu",
"MGA": "Malagasy ariary",
"MKD": "Macedonian denar",
"MMK": "Burmese kyat",
"MNT": "Mongolian t&ouml;gr&ouml;g",
"MOP": "Macanese pataca",
"MRO": "Mauritanian ouguiya",
"MUR": "Mauritian rupee",
"MVR": "Maldivian rufiyaa",
"MWK": "Malawian kwacha",
"MXN": "Mexican peso",
"MYR": "Malaysian ringgit",
"MZN": "Mozambican metical",
"NAD": "Namibian dollar",
"NGN": "Nigerian naira",
"NIO": "Nicaraguan c&oacute;rdoba",
"NOK": "Norwegian krone",
"NPR": "Nepalese rupee",
"NZD": "New Zealand dollar",
"OMR": "Omani rial",
"PAB": "Panamanian balboa",
"PEN": "Peruvian nuevo sol",
"PGK": "Papua New Guinean kina",
"PHP": "Philippine peso",
"PKR": "Pakistani rupee",
"PLN": "Polish z&#x142;oty",
"PRB": "Transnistrian ruble",
"PYG": "Paraguayan guaran&iacute;",
"QAR": "Qatari riyal",
"RON": "Romanian leu",
"RSD": "Serbian dinar",
"RUB": "Russian ruble",
"RWF": "Rwandan franc",
"SAR": "Saudi riyal",
"SBD": "Solomon Islands dollar",
"SCR": "Seychellois rupee",
"SDG": "Sudanese pound",
"SEK": "Swedish krona",
"SGD": "Singapore dollar",
"SHP": "Saint Helena pound",
"SLL": "Sierra Leonean leone",
"SOS": "Somali shilling",
"SRD": "Surinamese dollar",
"SSP": "South Sudanese pound",
"STD": "S&atilde;o Tom&eacute; and Pr&iacute;ncipe dobra",
"SYP": "Syrian pound",
"SZL": "Swazi lilangeni",
"THB": "Thai baht",
"TJS": "Tajikistani somoni",
"TMT": "Turkmenistan manat",
"TND": "Tunisian dinar",
"TOP": "Tongan pa&#x2bb;anga",
"TRY": "Turkish lira",
"TTD": "Trinidad and Tobago dollar",
"TWD": "New Taiwan dollar",
"TZS": "Tanzanian shilling",
"UAH": "Ukrainian hryvnia",
"UGX": "Ugandan shilling",
"USD": "United States (US) dollar",
"UYU": "Uruguayan peso",
"UZS": "Uzbekistani som",
"VEF": "Venezuelan bol&iacute;var",
"VND": "Vietnamese &#x111;&#x1ed3;ng",
"VUV": "Vanuatu vatu",
"WST": "Samoan t&#x101;l&#x101;",
"XAF": "Central African CFA franc",
"XCD": "East Caribbean dollar",
"XOF": "West African CFA franc",
"XPF": "CFP franc",
"YER": "Yemeni rial",
"ZAR": "South African rand",
"ZMW": "Zambian kwacha"
},
"default_value": [],
"allow_null": 0,
"multiple": 0,
"ui": 1,
"ajax": 0,
"return_format": "value",
"placeholder": ""
},
{
"key": "field_5bfc4b00ff8ad",
"label": "VAT",
"name": "_wiaas_country_vat",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"placeholder": "",
"prepend": "",
"append": "",
"maxlength": ""
}
],
"location": [
[
{
"param": "taxonomy",
"operator": "==",
"value": "product_country"
}
]
],
"menu_order": 0,
"position": "side",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": "",
"active": 1,
"description": ""
}
]

View File

@@ -132,4 +132,102 @@ function wiaas_db_update_add_installation_date_delivery_action_form() {
$action_form_id = GFAPI::add_form($action_form_meta);
do_action('gform_forms_post_import', array( GFAPI::get_form($action_form_id) ));
}
// TODO: Remove after migration has been completed
function wiaas_db_migration_fix_user_profile_addresses() {
$users = get_users();
foreach ($users as $user) {
$billing_addresses = Wiaas_Customer::get_customer_billing_addresses($user->ID);
if (! empty($billing_addresses)) {
foreach ($billing_addresses as $index => $billing_address) {
switch ($billing_address['id_country_selected']) {
case 1:
$billing_address['country_code'] = 'se';
break;
case 2:
$billing_address['country_code'] = 'dk';
break;
case 3:
$billing_address['country_code'] = 'fi';
break;
}
unset($billing_address['id_country_selected']);
$billing_addresses[$index] = $billing_address;
}
update_user_meta( $user->ID, 'billing_addresses', $billing_addresses);
}
$profile_addresses = Wiaas_Customer::get_customer_profile_addresses($user->ID);
if (! empty($profile_addresses)) {
foreach ($profile_addresses as $index => $profile_address) {
switch ($profile_address['id_country_selected']) {
case 1:
$profile_address['country_code'] = 'se';
break;
case 2:
$profile_address['country_code'] = 'dk';
break;
case 3:
$profile_address['country_code'] = 'fi';
break;
}
unset($profile_address['id_country_selected']);
$profile_addresses[$index] = $profile_address;
}
update_user_meta( $user->ID, 'profile_addresses', $profile_addresses);
}
}
}
// TODO: Remove after migration has been completed
function wiaas_db_migration_fix_countries() {
$available_country_terms = get_terms(array(
'taxonomy' => 'product_country',
'hide_empty' => false,
));
foreach($available_country_terms as $country_term) {
$code = ''; $currency = ''; $vat = '';
switch ($country_term->name) {
case 'Sweden':
$code = 'se';
$currency = 'SEK';
$vat = 9;
break;
case 'Denmark':
$code = 'dk';
$currency = 'DKK';
$vat = 9;
break;
case 'Finland':
$code = 'fi';
$currency = 'EUR';
$vat = 9;
break;
}
update_term_meta($country_term->term_id, '_wiaas_country_code', $code);
update_term_meta($country_term->term_id, '_wiaas_country_currency', $currency);
update_term_meta($country_term->term_id, '_wiaas_country_vat', $vat);
}
}

View File

@@ -45,6 +45,15 @@ function wiaas_db_update_add_product_properties_ui_fields() {
_wiaas_import_field_group($ui_json);
}
function wiaas_db_update_add_country_settings_ui_fields() {
$ui_json = file_get_contents( dirname( __FILE__ ) . '/data/wiaas-ui-field-country-settings.json' );
$ui_json = json_decode( $ui_json, true );
_wiaas_import_field_group($ui_json);
}
// private helper function

View File

@@ -147,7 +147,7 @@ class Wiaas_Shop_DB {
$shops = array_map(function($result_row) {
return array(
'owner_id' => $result_row->shop_owner_id,
'owner_id' => absint($result_row->shop_owner_id),
'order_type' => $result_row->order_type
);
}, $results);

View File

@@ -308,6 +308,7 @@ class Wiaas_Delivery_Process_Action {
$documents[] = array(
'name' => $info['basename'],
'extension' => $info['extension'],
'url' => $acceptance_documents_field->get_download_url( $file_path, true )
);
}
@@ -365,18 +366,25 @@ class Wiaas_Delivery_Process_Action {
$document = array(
'name' => $info['basename'],
'extension' => $info['extension'],
'url' => $document_field->get_download_url( $file_path, true )
);
$discussion_field = GFCommon::get_fields_by_type(GFAPI::get_form($action_entry['form_id']), 'workflow_discussion')[0];
$discussion_items = json_decode($action_entry[$discussion_field->id], ARRAY_A);
$formated_comments = array();
$formatted_comments = array();
if (is_array($discussion_items)) {
foreach ($discussion_items as $item) {
$formated_comments[] = $discussion_field->format_discussion_item( $item, 'text', $action_entry_id );
$formatted = $discussion_field->format_discussion_item( $item, 'text', $action_entry_id );
$formatted = explode("\n", $formatted);
$formatted_comments[] = array(
'header' => $formatted[0],
'value' => $formatted[1]
);
}
}
@@ -408,7 +416,7 @@ class Wiaas_Delivery_Process_Action {
'action_id' => $action_entry['id'],
'document' => $document,
'status' => $status,
'comments' => $formated_comments
'comments' => $formatted_comments
);
}

View File

@@ -11,9 +11,9 @@ class Wiaas_Delivery_Process_Addon extends Gravity_Flow_Extension {
protected $_slug = 'wiaas_delivery_process';
protected $_title = 'Delivery Process';
protected $_title = 'Delivery Settings';
protected $_short_title = 'Delivery Process';
protected $_short_title = 'Delivery Settings';
public static function get_instance() {
@@ -125,7 +125,7 @@ class Wiaas_Delivery_Process_Addon extends Gravity_Flow_Extension {
$tabs[] = array(
'name' => $this->_slug,
'label' => esc_html__( 'Delivery Process', 'wiaas' ),
'label' => esc_html__( 'Delivery Settings', 'wiaas' ),
'query' => array( 'fid' => null )
);
@@ -218,14 +218,16 @@ class Wiaas_Delivery_Process_Addon extends Gravity_Flow_Extension {
return;
}
$countries = Wiaas_Countries::get_available_countries();
$countries_choices = array();
foreach ($countries as $country) {
$countries_choices[] = array( 'value' => $country['code'] , 'label' => $country['name'] );
}
$this->settings_select(array(
'name' => 'delivery_country',
'choices' => array(
array( 'value' => 'se', 'label' => 'Sweden' ),
array( 'value' => 'dk', 'label' => 'Denmark' ),
array( 'value' => 'fi', 'label' => 'Finland' )
),
'choices' => $countries_choices,
'after_select' => '<p class="description"> Choose country for which this process is defined.</p>'
));
}

View File

@@ -88,12 +88,15 @@ class Wiaas_Delivery_Process_Step_Assignee {
$mapped_assignees = array();
$order_id = self::get_order_id_for_step($step);
$order_id = self::_get_order_id_for_step($step);
$order = wc_get_order($order_id);
foreach ($assignees as $assignee) {
/**
* Handle step assignee for installation company field
*/
if (strpos($assignee->get_type(), 'wiaas_installation_') !== false) {
$item_id = $assignee->get_id();
@@ -120,11 +123,15 @@ class Wiaas_Delivery_Process_Step_Assignee {
continue;
}
/**
* Handle step assignee for order role
*/
if ($assignee->get_type() === 'wiaas_order_role') {
$order_role = $assignee->get_id();
// Assign step to order customer
if ($order_role === 'customer') {
$customer_user_id = $order->get_customer_id();
@@ -157,7 +164,7 @@ class Wiaas_Delivery_Process_Step_Assignee {
* @return bool|int Order id on success, false if step does not have associated order id
*
*/
public static function get_order_id_for_step(Gravity_Flow_Step $step) {
private static function _get_order_id_for_step(Gravity_Flow_Step $step) {
$entry = $step->get_entry();

View File

@@ -23,7 +23,7 @@ class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
$settings_api = $this->get_common_settings_api();
$forms = $this->get_action_forms_choices();
$forms = Wiaas_Delivery_Process_Action::get_action_forms();
$form_choices[] = array( 'label' => esc_html__( 'Select a Form', 'wiaas' ), 'value' => '' );
foreach ( $forms as $form ) {
@@ -86,8 +86,18 @@ class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
return $label;
}
/**
* Update status
*
* @param bool $status
*/
public function update_step_status($status = false) {
/**
* If status is being updated after manual step completion ('Next Step' or 'Previous Step') change default
* behavior of settings status to cancelled if manual action is sending flow to next step.
* Instead of default cancelled status set complete status for this step.
*/
if ($status === 'cancelled' && $admin_action = rgpost( 'wiaas_delivery_process_navigation_action' )) {
list( $base_admin_action, $step_id ) = rgexplode( '|', $admin_action, 2 );
@@ -104,10 +114,10 @@ class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
}
/**
* Process Wiass Delivery Process Step
*
* Process Wiaas Delivery Process Step
*
*
* @return bool
* @return bool We will always return false because step will be completed only by manual user action
*/
function process() {
@@ -198,28 +208,22 @@ class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
return $entry_meta;
}
/**
* Retrieves forms that are valid options for delivery step action
*
* PRIVATE
*
*/
/**
* Create action entry to trigger subworkflow
* @param $target_form
* @param $order_id
*
* @return array
*/
public function get_action_forms_choices() {
return Wiaas_Delivery_Process_Action::get_action_forms();
}
/**
* Retrieves target form entry id created when step was started
* @return int
*/
public function get_target_form_entry_id() {
$value = gform_get_meta($this->get_entry_id(), 'wiaas_delivery_step_' . $this->get_id() .'_entry_id');
return absint($value);
}
private function _create_single_action_entry($target_form, $order_id) {
$action_entries_ids = array();
@@ -248,6 +252,14 @@ class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
}
/**
* Create action form entries for every bundle in order to trigger subworkflows
*
* @param $target_form
* @param $order_id
*
* @return array
*/
private function _create_per_bundle_action_entries($target_form, $order_id) {
$action_entries_ids = array();

View File

@@ -96,7 +96,7 @@ class Wiaas_Order_Fields {
continue;
}
$bundle_item->update_meta_data('wiaas_installation_date', $new_value);
$bundle_item->update_meta_data('_wiaas_installation_date', $new_value);
$bundle_item->save_meta_data();
break;
@@ -121,7 +121,7 @@ class Wiaas_Order_Fields {
continue;
}
$bundle_documents = $bundle_item['wiaas_delivery_documents'];
$bundle_documents = $bundle_item->get_meta('_wiaas_documents', true);
if (empty($bundle_documents)) {
$bundle_documents = array();
}
@@ -140,15 +140,20 @@ class Wiaas_Order_Fields {
foreach ($added_documents as $added_document) {
$info = pathinfo( $added_document );
$dir = wp_upload_dir();
$relative_file_path = str_replace($dir['baseurl'] . '/', '', $added_document);
$bundle_documents[] = array(
'name' => $info['basename'],
'key' => wp_generate_uuid4(),
'name' => $info['filename'],
'extension' => $info['extension'],
'version' => $relative_file_path,
'url' => $field->get_download_url( $added_document, true ),
'type' => $field->wiaasDocTypeFilter
);
}
$bundle_item->update_meta_data('wiaas_delivery_documents', $bundle_documents);
$bundle_item->update_meta_data('_wiaas_documents', $bundle_documents);
$bundle_item->save_meta_data();
break;
@@ -168,7 +173,7 @@ class Wiaas_Order_Fields {
$added_documents = $new_documents;
}
$order_documents = $order->get_meta('wiaas_delivery_documents', true);
$order_documents = $order->get_meta('_wiaas_other_documents', true);
if (empty($order_documents)) {
$order_documents = array();
}
@@ -176,15 +181,20 @@ class Wiaas_Order_Fields {
foreach ($added_documents as $added_document) {
$info = pathinfo( $added_document );
$dir = wp_upload_dir();
$relative_file_path = str_replace($dir['baseurl'] . '/', '', $added_document);
$order_documents[] = array(
'name' => $info['basename'],
'key' => wp_generate_uuid4(),
'name' => $info['filename'],
'extension' => $info['extension'],
'version' => $relative_file_path,
'url' => $field->get_download_url( $added_document, true ),
'type' => $field->wiaasDocTypeFilter
);
}
$order->update_meta_data('wiaas_delivery_documents', $order_documents);
$order->update_meta_data('_wiaas_other_documents', $order_documents);
$order->save_meta_data();
break;
@@ -216,7 +226,7 @@ class Wiaas_Order_Fields {
continue;
}
$bundle_item->update_meta_data('wiaas_installation', $selected_installation->get_id());
$bundle_item->update_meta_data('_wiaas_installation', $selected_installation->get_id());
$bundle_item->save_meta_data();
}
}
@@ -296,30 +306,16 @@ class Wiaas_Order_Fields {
}
}
public static function get_value_from_order_field($entry, $field) {
switch ($field->type) {
case 'wiaas_order_bundle':
$value = $entry[$field->id];
list ($order_id, $item_id) = explode('|', $value);
if ( ! empty($order_id) && ! empty($item_id)) {
return array(
'id' => $item_id,
'name' => $field->get_selected_bundle_display_name($value)
);
}
return null;
case '':
}
}
/**
* Create new entry for order delivery process action form
*
* @param int $order_id
* @param array $form
* @param int|null $bundle_item_id
*
* @return array|bool
*/
public static function map_order_to_entry($order_id, $form, $bundle_item_id = null) {
if (empty($form['fields']) ||
@@ -420,9 +416,9 @@ class Wiaas_Order_Fields {
}
// installation is already selected
if (!empty($bundle_item->get_meta('wiaas_installation', true))) {
if (!empty($bundle_item->get_meta('_wiaas_installation', true))) {
$entry[(string) $field->id] = 'wiaas_installation_' . $order->get_id() . '|' . $bundle_item->get_meta('wiaas_installation', true);
$entry[(string) $field->id] = 'wiaas_installation_' . $order->get_id() . '|' . $bundle_item->get_meta('_wiaas_installation', true);
continue;
}
@@ -451,6 +447,7 @@ class Wiaas_Order_Fields {
$installation_item = $installation_items[0];
$entry[(string) $field->id] = 'wiaas_installation_' . $order->get_id() . '|' . $installation_item->get_id();
} else if (count($installation_items) > 1) {
// force admin to select installation

View File

@@ -20,7 +20,8 @@ class Wiaas_Document_Download {
}
/**
* Handle download for order documents by gravity flow steps
* Handle download of order documents by gravity flow steps for wordpress administration interface
*
*/
public static function admin_gf_order_document_download() {
@@ -44,6 +45,8 @@ class Wiaas_Document_Download {
}
/**
* Handle document download for wordpress administration interface
*
* Since only REST api uses JWT Authentication this endpoint will work only for users
* that are logged in directly to wordpress
*/
@@ -83,6 +86,48 @@ class Wiaas_Document_Download {
);
}
/**
* Download order other document (not related to any order item)
*
* @param int $order_id
* @param string $document_key
*/
public static function download_order_other_document($order_id, $document_key) {
$order = wc_get_order($order_id);
if (!$order) {
wp_die( __( 'Invalid Document Request.', 'wiaas' ), __( 'Download Error', 'wiaas' ), array( 'response' => 400 ) );
}
$order_other_documents = wiaas_get_order_other_documents($order_id);
$order_document = null;
foreach ($order_other_documents as $order_other_document) {
if ($order_other_document['key'] === $document_key) {
$order_document = $order_other_document;
break;
}
}
if (!isset($order_document)) {
wp_die( __( 'Invalid Document Request.', 'wiaas' ), __( 'Download Error', 'wiaas' ), array( 'response' => 400 ) );
}
$file_path = wiaas_get_document_version_path($order_document['version']);
if (!file_exists($file_path)) {
wp_die( __( 'Document not found.', 'wiaas' ), __( 'Download Error', 'wiaas' ), array( 'response' => 404 ) );
}
WC_Download_Handler::download_file_force(
$file_path,
pathinfo( $file_path, PATHINFO_FILENAME ) . '.' . pathinfo( $file_path, PATHINFO_EXTENSION )
);
}
/**
* Download document related to order item
*
@@ -91,7 +136,7 @@ class Wiaas_Document_Download {
* @param $type
* @param $document_key
*/
public static function download_order_item_document($order_id, $item_id, $type, $document_key) {
public static function download_order_item_document($order_id, $item_id, $document_key) {
$order = wc_get_order($order_id);
if (!$order) {
wp_die( __( 'Invalid Document Request.', 'wiaas' ), __( 'Download Error', 'wiaas' ), array( 'response' => 400 ) );
@@ -106,7 +151,7 @@ class Wiaas_Document_Download {
$order_document = null;
foreach ($item_documents as $item_document) {
if ($item_document['key'] === $document_key && $item_document['type'] === $type) {
if ($item_document['key'] === $document_key) {
$order_document = $item_document;
break;
}

View File

@@ -26,6 +26,17 @@ function wiaas_documents_upload_dir() {
* @return string
*/
function wiaas_get_document_version_path($version) {
// documents uploaded with gravity forms have relevant path to form entry upload folder
if (strpos($version, 'gravity_forms') !== false) {
$wp_uploads = wp_upload_dir();
$wp_uploads_dir = $wp_uploads['basedir'];
return $wp_uploads_dir . '/' . $version;
}
return wiaas_documents_upload_dir() . '/' . $version;
}
@@ -182,7 +193,7 @@ function wiaas_get_standard_package_order_item_documents($order, $package_item_i
return array_map(function($doc) {
// append document extension and name information
$doc['extension'] = wiaas_get_doc_version_extension($doc['version']);
$doc['extension'] = isset($doc['extension']) ? $doc['extension'] : wiaas_get_doc_version_extension($doc['version']);
$doc['name'] = isset($doc['name']) ? $doc['name'] : wiaas_get_doc_version_filename($doc['version']);
return $doc;
@@ -222,4 +233,20 @@ function wiaas_get_order_item_documents($order_item, $doc_type = null) {
}
return $filtered_documents;
}
/**
* Retrieve order other documents (not binded to any order item)
*
* @param int $order_id
*
* @return array|mixed
*/
function wiaas_get_order_other_documents($order_id) {
$order = wc_get_order($order_id);
$documents = $order->get_meta('_wiaas_other_documents', true);
return empty($documents) ? array() : $documents;
}

View File

@@ -133,9 +133,9 @@ class Wiaas_Customer {
if ($new_address->id){
$updated = array(
'id' => $new_address->id,
'country_name' => Wiaas_Countries::get_country_name_by_id($new_address->id_country_selected),
'country_name' => Wiaas_Countries::get_available_country_name_by_code($new_address->country_code),
'delivery_mail' => $new_address->delivery_mail,
'id_country_selected' => $new_address->id_country_selected,
'country_code' => $new_address->country_code,
'city' => $new_address->city,
'detailed_address' => $new_address->detailed_address,
'zip_code' => $new_address->zip_code,
@@ -152,9 +152,9 @@ class Wiaas_Customer {
}else{
$new_billing_address = array(
'id' => time(),
'country_name' => Wiaas_Countries::get_country_name_by_id($new_address->id_country_selected),
'country_name' => Wiaas_Countries::get_available_country_name_by_code($new_address->country_code),
'delivery_mail' => $new_address->delivery_mail,
'id_country_selected' => $new_address->id_country_selected,
'country_code' => $new_address->country_code,
'city' => $new_address->city,
'detailed_address' => $new_address->detailed_address,
'zip_code' => $new_address->zip_code,
@@ -178,9 +178,9 @@ class Wiaas_Customer {
if ($new_address->id){
$updated = array(
'id' => $new_address->id,
'country_name' => Wiaas_Countries::get_country_name_by_id($new_address->id_country_selected),
'country_name' => Wiaas_Countries::get_available_country_name_by_code($new_address->country_code),
'delivery_mail' => $new_address->delivery_mail,
'id_country_selected' => $new_address->id_country_selected,
'country_code' => $new_address->country_code,
'city' => $new_address->city,
'detailed_address' => $new_address->detailed_address,
'zip_code' => $new_address->zip_code,
@@ -197,9 +197,9 @@ class Wiaas_Customer {
}else{
$new_delivery_address = array(
'id' => time(),
'country_name' => Wiaas_Countries::get_country_name_by_id($new_address->id_country_selected),
'country_name' => Wiaas_Countries::get_available_country_name_by_code($new_address->country_code),
'delivery_mail' => $new_address->delivery_mail,
'id_country_selected' => $new_address->id_country_selected,
'country_code' => $new_address->country_code,
'city' => $new_address->city,
'detailed_address' => $new_address->detailed_address,
'zip_code' => $new_address->zip_code,

View File

@@ -1,521 +0,0 @@
<?php
/**
* Wiaas_Delivery_Process_Step_Test
*
* @package Wiaas
*/
class Wiass_REST_Delivery_Process_Api_Test extends Wiaas_Unit_Test_Case {
var $order_id, $api;
/**
* Test REST Server
*
* @var WP_REST_Server
*/
protected $server;
protected $namespaced_route = '/wiaas';
function setUp() {
parent::setUp();
$order = wc_create_order();
$this->order_id = $order->get_id();
wp_set_current_user(1);
/** @var WP_REST_Server $wp_rest_server */
global $wp_rest_server;
$this->server = $wp_rest_server = new \WP_REST_Server;
do_action( 'rest_api_init' );
$original_valid_customer_acceptance = __DIR__ . '/../dummy-files/valid-customer-acceptance.odt';
$this->test_file_valid_customer_acceptance = '/tmp/valid-customer-acceptance.odt';
copy( $original_valid_customer_acceptance, $this->test_file_valid_customer_acceptance );
$original_invalid_customer_acceptance = __DIR__ . '/../dummy-files/invalid-customer-acceptance.txt';
$this->test_file_invalid_customer_acceptance = '/tmp/invalid-customer-acceptance.txt';
copy( $original_invalid_customer_acceptance, $this->test_file_invalid_customer_acceptance );
}
function test_register_route() {
$routes = $this->server->get_routes();
$this->assertArrayHasKey( $this->namespaced_route, $routes );
}
function test_endpoints() {
$the_route = $this->namespaced_route;
$routes = $this->server->get_routes();
foreach( $routes as $route => $route_config ) {
if( 0 === strpos( $the_route, $route ) ) {
$this->assertTrue( is_array( $route_config ) );
foreach( $route_config as $i => $endpoint ) {
$this->assertArrayHasKey( 'callback', $endpoint );
$this->assertArrayHasKey( 0, $endpoint[ 'callback' ], get_class( $this ) );
$this->assertArrayHasKey( 1, $endpoint[ 'callback' ], get_class( $this ) );
$this->assertTrue( is_callable( array( $endpoint[ 'callback' ][0], $endpoint[ 'callback' ][1] ) ) );
}
}
}
}
/**
* @covers Wiass_REST_Delivery_Process_API::get_next_actions_for_user
*/
function test_get_next_actions_for_user() {
wp_set_current_user(1);
$response = Wiass_REST_Delivery_Process_API::get_next_actions_for_user();
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response', $response);
$next_steps = $response->get_data();
$this->assertNotNull($next_steps);
$this->assertTrue(is_array($next_steps));
$pending_step = $next_steps[0];
$this->assertTrue(is_array($pending_step));
$this->assertArrayHasKey('order_id', $pending_step);
$this->assertArrayHasKey('order_number', $pending_step);
$this->assertArrayHasKey('status', $pending_step);
$this->assertArrayHasKey('step_action', $pending_step);
$this->assertEquals($pending_step['order_id'], $this->order_id);
$this->assertEquals($pending_step['order_number'], $this->order_id);
$this->assertEquals($pending_step['status'], 'pending');
$this->assertNotEmpty($pending_step['step_action']);
}
/**
* @covers Wiass_REST_Delivery_Process_API::get_customer_acceptance
*/
function test_get_customer_acceptance_as_guest() {
wp_set_current_user(0);
$request = new WP_REST_Request( 'GET', '/wiaas/customer-acceptance/99191991919191');
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertTrue($response->is_error());
$this->assertEquals($response->get_status(), 401);
$error_data = $response->as_error();
$this->assertEquals($error_data->get_error_message(), 'Sorry, you are not allowed to do that.');
}
/**
* @covers Wiass_REST_Delivery_Process_API::get_customer_acceptance
*/
function test_get_nonexisting_customer_acceptance() {
wp_set_current_user(1);
$request = new WP_REST_Request( 'GET', '/wiaas/customer-acceptance/911919191919' ); //non existing entry ID
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertTrue($response->is_error());
$this->assertEquals($response->get_status(), 404);
$error_data = $response->as_error();
$this->assertEquals($error_data->get_error_message(), 'Customer acceptance entry not found');
}
/**
* @covers Wiass_REST_Delivery_Process_API::get_customer_acceptance
*/
function test_get_valid_customer_acceptance() {
wp_set_current_user(1);
$customer_acceptance_entry_id = self::create_pending_customer_acceptance_entry();
$request = new WP_REST_Request( 'GET', '/wiaas/customer-acceptance/' . $customer_acceptance_entry_id );
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertFalse($response->is_error());
$this->assertEquals($response->get_status(), 200);
$response_data = $response->get_data();
$this->assertTrue(is_array($response_data));
$this->assertArrayHasKey('documents', $response_data);
$this->assertArrayHasKey('expiration', $response_data);
$this->assertArrayHasKey('status', $response_data);
$this->assertArrayHasKey('decline_reason', $response_data);
$this->assertTrue(is_array($response_data['documents']));
$uploaded_file = $response_data['documents'][0];
$this->assertTrue(is_array($uploaded_file));
$this->assertArrayHasKey('name', $uploaded_file);
$this->assertArrayHasKey('extension', $uploaded_file);
$this->assertArrayHasKey('url', $uploaded_file);
$this->assertEquals($uploaded_file['name'], 'file1');
$this->assertEquals($uploaded_file['extension'], 'docx');
$this->assertEquals($uploaded_file['url'], 'http://localhost/wp/index.php?gf-download=2018%2F08%2Ffile1.docx&form-id=1&field-id=12&hash=1be6c30f0eeff93563b352d15fe459d5ded12ee06c2c8f36fed66b42dedf2534');
$this->assertEquals($response_data['status'], 1); //1 means accept
$this->assertEquals($response_data['expiration'], "2020-01-01");
}
/**
* @covers Wiass_REST_Delivery_Process_API::submit_customer_acceptance
*/
function test_submit_customer_acceptance_as_guest() {
wp_set_current_user(0);
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/9191919191' );
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertTrue($response->is_error());
$this->assertEquals($response->get_status(), 401);
$error_data = $response->as_error();
$this->assertEquals($error_data->get_error_message(), 'Sorry, you are not allowed to do that.');
}
/**
* @covers Wiass_REST_Delivery_Process_API::submit_customer_acceptance
*/
function test_submit_nonexisting_customer_acceptance() {
wp_set_current_user(1);
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/919191919191' );
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertTrue($response->is_error());
$this->assertEquals($response->get_status(), 404);
$error_data = $response->as_error();
$this->assertEquals($error_data->get_error_message(), 'Customer acceptance entry not found');
}
/**
* @covers Wiass_REST_Delivery_Process_API::submit_customer_acceptance
*/
function test_submit_customer_acceptance_with_invalid_status() {
wp_set_current_user(1);
$customer_acceptance_entry_id = self::create_pending_customer_acceptance_entry();
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/' . $customer_acceptance_entry_id );
$request->set_body_params(array(
'actionType' => 'invalid status',
'declineReason' => ''
));
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertFalse($response->is_error());
$this->assertEquals($response->get_status(), 200);
$response_data = $response->get_data();
$this->assertArrayHasKey('messages', $response_data);
$this->assertArrayHasKey('data', $response_data);
$message = $response_data['messages'][0];
$this->assertArrayHasKey('code', $message);
$this->assertArrayHasKey('message', $message);
$this->assertEquals('error', $message['code']);
$this->assertEquals('ACCEPTANCE_STATUS_MISSING', $message['message']);
}
/**
* @covers Wiass_REST_Delivery_Process_API::submit_customer_acceptance
*/
function test_submit_customer_acceptance_with_accepted_status() {
wp_set_current_user(1);
$customer_acceptance_entry_id = self::create_pending_customer_acceptance_entry();
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/' . $customer_acceptance_entry_id );
$request->set_body_params(array(
'actionType' => 'accept',
'declineReason' => ''
));
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertFalse($response->is_error());
$this->assertEquals($response->get_status(), 200);
$response_data = $response->get_data();
$this->assertArrayHasKey('messages', $response_data);
$this->assertArrayHasKey('data', $response_data);
$message = $response_data['messages'][0];
$this->assertArrayHasKey('code', $message);
$this->assertArrayHasKey('message', $message);
$this->assertEquals('success', $message['code']);
$this->assertEquals('INSTALLATION_ACCEPTED', $message['message']);
}
/**
* @covers Wiass_REST_Delivery_Process_API::submit_customer_acceptance
*/
function test_submit_customer_acceptance_with_declined_status_and_empty_reason() {
wp_set_current_user(1);
$customer_acceptance_entry_id = self::create_pending_customer_acceptance_entry();
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/' . $customer_acceptance_entry_id );
$request->set_body_params(array(
'actionType' => 'decline',
'declineReason' => ''
));
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertFalse($response->is_error());
$this->assertEquals($response->get_status(), 200);
$response_data = $response->get_data();
$this->assertArrayHasKey('messages', $response_data);
$this->assertArrayHasKey('data', $response_data);
$message = $response_data['messages'][0];
$this->assertArrayHasKey('code', $message);
$this->assertArrayHasKey('message', $message);
$this->assertEquals('error', $message['code']);
$this->assertEquals('DECLINE_REASON_EMPTY', $message['message']);
}
/**
* @covers Wiass_REST_Delivery_Process_API::submit_customer_acceptance
*/
function test_submit_customer_acceptance_with_decline_status() {
wp_set_current_user(1);
$customer_acceptance_entry_id = self::create_pending_customer_acceptance_entry();
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/' . $customer_acceptance_entry_id );
$request->set_body_params(array(
'actionType' => 'decline',
'declineReason' => 'This is very reasonable reason'
));
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertFalse($response->is_error());
$this->assertEquals($response->get_status(), 200);
$response_data = $response->get_data();
$this->assertArrayHasKey('messages', $response_data);
$this->assertArrayHasKey('data', $response_data);
$message = $response_data['messages'][0];
$this->assertArrayHasKey('code', $message);
$this->assertArrayHasKey('message', $message);
$this->assertEquals('success', $message['code']);
$this->assertEquals('INSTALLATION_DECLINED', $message['message']);
}
/**
* @covers Wiass_REST_Delivery_Process_API::upload_file
*/
function test_upload_customer_acceptance_file_as_guest() {
wp_set_current_user(0);
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/919199191/upload-file' );
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertTrue($response->is_error());
$this->assertEquals($response->get_status(), 401);
$error_data = $response->as_error();
$this->assertEquals($error_data->get_error_message(), 'Sorry, you are not allowed to do that.');
}
/**
* @covers Wiass_REST_Delivery_Process_API::upload_file
*/
function test_upload_customer_acceptance_file_to_non_existing_entry() {
wp_set_current_user(1);
$original_valid_customer_acceptance = __DIR__ . '/../dummy-files/valid-customer-acceptance.odt';
$this->test_file_valid_customer_acceptance = '/tmp/valid-customer-acceptance.odt';
copy( $original_valid_customer_acceptance, $this->test_file_valid_customer_acceptance );
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/919199191/upload-file' );
$request->set_file_params( array(
'file' => array(
'file' => file_get_contents( $this->test_file_valid_customer_acceptance ),
'name' => 'valid-customer-acceptance.odt',
'size' => filesize( $this->test_file_valid_customer_acceptance ),
'tmp_name' => $this->test_file_valid_customer_acceptance,
),
) );
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertTrue($response->is_error());
$this->assertEquals($response->get_status(), 404);
$error_data = $response->as_error();
$this->assertEquals($error_data->get_error_message(), 'Customer acceptance entry not found');
}
/**
* @covers Wiass_REST_Delivery_Process_API::upload_file
*/
function test_upload_customer_acceptance_file_without_file() {
wp_set_current_user(1);
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/919199191/upload-file' );
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertFalse($response->is_error());
$this->assertEquals($response->get_status(), 200);
$response_data = $response->get_data();
$this->assertArrayHasKey('messages', $response_data);
$this->assertArrayHasKey('data', $response_data);
$message = $response_data['messages'][0];
$this->assertArrayHasKey('code', $message);
$this->assertArrayHasKey('message', $message);
$this->assertEquals('error', $message['code']);
$this->assertEquals('NO_FILES_UPLOADED', $message['message']);
}
/**
* @covers Wiass_REST_Delivery_Process_API::upload_file
*/
function test_upload_invalid_customer_acceptance_file() {
wp_set_current_user(1);
$customer_acceptance_entry_id = self::create_pending_customer_acceptance_entry();
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/' . $customer_acceptance_entry_id . '/upload-file' );
$request->set_file_params( array(
'file' => array(
'file' => file_get_contents( $this->test_file_invalid_customer_acceptance ),
'name' => 'invalid-customer-acceptance.txt',
'size' => filesize( $this->test_file_invalid_customer_acceptance ),
'tmp_name' => $this->test_file_invalid_customer_acceptance,
),
) );
$request->set_header( 'Content-MD5', md5_file( $this->test_file_invalid_customer_acceptance ) );
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertFalse($response->is_error());
$this->assertEquals($response->get_status(), 200);
$response_data = $response->get_data();
$this->assertArrayHasKey('messages', $response_data);
$this->assertArrayHasKey('data', $response_data);
$message = $response_data['messages'][0];
$this->assertArrayHasKey('code', $message);
$this->assertArrayHasKey('message', $message);
$this->assertEquals('error', $message['code']);
$this->assertEquals('INVALID_FILE_ACCEPTANCE', $message['message']);
}
/**
* @covers Wiass_REST_Delivery_Process_API::upload_file
*/
function test_upload_valid_customer_acceptance_file() {
wp_set_current_user(1);
$customer_acceptance_entry_id = self::create_pending_customer_acceptance_entry();
$request = new WP_REST_Request( 'POST', '/wiaas/customer-acceptance/' . $customer_acceptance_entry_id . '/upload-file' );
$request->set_file_params( array(
'file' => array(
'file' => file_get_contents( $this->test_file_valid_customer_acceptance ),
'name' => 'valid-customer-acceptance.odt',
'size' => filesize( $this->test_file_valid_customer_acceptance ),
'tmp_name' => $this->test_file_valid_customer_acceptance,
),
) );
$request->set_header( 'Content-MD5', md5_file( $this->test_file_valid_customer_acceptance ) );
$response = $this->server->dispatch( $request );
$this->assertNotNull($response);
$this->assertInstanceOf('WP_REST_Response',$response);
$this->assertFalse($response->is_error());
$this->assertEquals($response->get_status(), 200);
$response_data = $response->get_data();
$this->assertArrayHasKey('messages', $response_data);
$this->assertArrayHasKey('data', $response_data);
$message = $response_data['messages'][0];
$this->assertArrayHasKey('code', $message);
$this->assertArrayHasKey('message', $message);
$this->assertEquals('success', $message['code']);
$this->assertEquals('FILE_UPLOADED', $message['message']);
}
public function tearDown() {
parent::tearDown();
if ( file_exists( $this->test_file_valid_customer_acceptance ) ) {
unlink( $this->test_file_valid_customer_acceptance );
}
if ( file_exists( $this->test_file_invalid_customer_acceptance ) ) {
unlink( $this->test_file_invalid_customer_acceptance );
}
$this->remove_added_uploads();
}
//===================================================================================
/**
* Helper function : creates customer acceptance entry
*/
private function create_pending_customer_acceptance_entry(){
$customer_acceptance_form_id = 1;
$customer_id_field_id = 2;
$actual_date_field_id = 6;
$acceptance_status_field_id = 8;
$expiration_date_field_id = 9;
$decline_reason_field_id = 10;
$files_uploaded_field_id = 12;
$input_values['input_' . $acceptance_status_field_id] = 'accept';
$input_values['input_' . $expiration_date_field_id] = "2020-01-01";
//$input_values['input_' . $files_uploaded_field_id] = json_encode(['http://path/to/file1.docx']);
GFAPI::submit_form($customer_acceptance_form_id, $input_values);
//this part is needed since form submit does not store files for some reason, probably files should be sent some other way
$entry = GFAPI::get_entries($customer_acceptance_form_id)[0];
$entry[$files_uploaded_field_id] = json_encode(['http://localhost/wp/index.php?gf-download=2018%2F08%2Ffile1.docx&form-id=1&field-id=12&hash=1be6c30f0eeff93563b352d15fe459d5ded12ee06c2c8f36fed66b42dedf2534']);
$entry['workflow_step'] = 1;
$entry['workflow_step_status_1'] = 'pending';
$entry['workflow_step_status_2'] = false;
$entry['workflow_timestamp'] = false;
$update = GFAPI::update_entry($entry);
return $entry['id'];
}
}

View File

@@ -102,7 +102,7 @@ class Wiass_REST_User_Api_Test extends Wiaas_Unit_Test_Case {
$country = $data[0];
$this->assertNotNull($country);
$this->assertTrue(is_array($country));
$this->assertArrayHasKey('country_id', $country);
$this->assertArrayHasKey('country_name', $country);
$this->assertArrayHasKey('code', $country);
$this->assertArrayHasKey('name', $country);
}
}

View File

@@ -1,388 +0,0 @@
<?php
class Wiaas_Authentication_Test extends Wiaas_Unit_Test_Case {
var $user_id, $organization_id, $request_uri;
public function setUp() {
parent::setUp();
// set admin as current user
wp_set_current_user(1);
// create testing user
$this->user_id = wp_create_user('test', 'test', 'test@mail.com');
// create organization
$this->organization_id = wp_insert_term(
'test_organization',
Wiaas_User_Organization::TAXONOMY_NAME
)['term_id'];
update_user_meta($this->user_id, '_wiaas_organization_id', $this->organization_id);
# assign user to organization
wp_set_terms_for_user(
$this->user_id,
Wiaas_User_Organization::TAXONOMY_NAME,
[$this->organization_id]);
wp_set_current_user($this->user_id);
$this->request_uri = $_SERVER['REQUEST_URI'];
}
function tearDown() {
parent::tearDown();
wp_set_current_user(1);
wp_delete_user($this->user_id);
wp_delete_term(
$this->organization_id,
Wiaas_User_Organization::TAXONOMY_NAME);
delete_user_meta($this->user_id, '_wiaas_organization_id');
delete_user_meta($this->user_id, '_wiaas_current_user_admin_role');
$_SERVER['REQUEST_URI'] = $this->request_uri;
}
/**
* @covers Wiaas_Authentication::authenticate_current_user()
* @group authentication
*/
function test_user_authentication_fail_when_no_selected_role() {
$this->assertFalse(
Wiaas_Authentication::authenticate_current_user($this->user_id)
);
$this->assertTrue(
is_wp_error(
Wiaas_Authentication::authenticate_user_on_login(wp_get_current_user())
)
);
}
/**
* @covers Wiaas_Authentication::authenticate_current_user()
* @group authentication
*/
function test_user_authentication_forwards_error() {
// add roles to organization
$organization_roles = array( 'supplier', 'customer' );
update_term_meta($this->organization_id, '_wiaas_organization_roles', $organization_roles);
update_user_meta($this->user_id, '_wiaas_current_user_admin_role', 'supplier');
$this->assertFalse(
Wiaas_Authentication::authenticate_current_user(false)
);
}
/**
* @covers Wiaas_Authentication::authenticate_current_user()
* @group authentication
*/
function test_current_user_authentication_fail_when_organization_has_no_roles() {
$roles = array('administrator', 'supplier', 'customer', 'commercial_lead');
foreach ($roles as $role) {
update_user_meta($this->user_id, '_wiaas_current_user_admin_role', $role);
$this->assertFalse(
Wiaas_Authentication::authenticate_current_user($this->user_id)
);
}
}
/**
* @covers Wiaas_Authentication::authenticate_current_user()
* @group authentication
*/
function test_current_user_authentication_fail_when_organization_has_different_roles() {
// add roles to organization
$organization_roles = array( 'supplier', 'customer' );
update_term_meta($this->organization_id, '_wiaas_organization_roles', $organization_roles);
$user_roles = array('administrator', 'commercial_lead');
foreach ($user_roles as $user_role) {
update_user_meta($this->user_id, '_wiaas_current_user_admin_role', $user_role);
$this->assertFalse(
Wiaas_Authentication::authenticate_current_user($this->user_id)
);
}
}
/**
* @covers Wiaas_Authentication::authenticate_current_user()
* @group authentication
*/
function test_current_user_authentication_valid_when_organization_has_requested_role() {
// add roles to organization
$organization_roles = array( 'administrator', 'commercial_lead' );
update_term_meta($this->organization_id, '_wiaas_organization_roles', $organization_roles);
$user_roles = $organization_roles;
foreach ($user_roles as $user_role) {
update_user_meta($this->user_id, '_wiaas_current_user_admin_role', $user_role);
$this->assertEquals(
$this->user_id,
Wiaas_Authentication::authenticate_current_user($this->user_id)
);
}
}
/**
* @covers Wiaas_Authentication::authenticate_current_user()
* @group authentication
*/
function test_current_user_authentication_invalid_when_organization_has_no_customer_role() {
// add roles to organization
$organization_roles = array( 'administrator', 'commercial_lead' );
update_term_meta($this->organization_id, '_wiaas_organization_roles', $organization_roles);
$user_roles = $organization_roles;
$_SERVER['REQUEST_URI'] = get_home_url('') . '/' . rest_get_url_prefix();
foreach ($user_roles as $user_role) {
update_user_meta($this->user_id, '_wiaas_current_user_admin_role', $user_role);
$this->assertFalse(
Wiaas_Authentication::authenticate_current_user($this->user_id)
);
}
}
/**
* @covers Wiaas_Authentication::authenticate_current_user()
* @group authentication
*/
function test_current_user_authentication_valid_when_organization_has_customer_role() {
// add roles to organization
$organization_roles = array( 'administrator', 'commercial_lead', 'customer' );
update_term_meta($this->organization_id, '_wiaas_organization_roles', $organization_roles);
$user_roles = $organization_roles;
$_SERVER['REQUEST_URI'] = get_home_url('') . '/' . rest_get_url_prefix();
foreach ($user_roles as $user_role) {
update_user_meta($this->user_id, '_wiaas_current_user_admin_role', $user_role);
$this->assertEquals(
$this->user_id,
Wiaas_Authentication::authenticate_current_user($this->user_id)
);
}
}
/**
* @covers Wiaas_Authentication::authenticate_user_on_login()
* @group authentication
*/
function test_login_authentication_fails_if_no_role_posted() {
$user = wp_get_current_user();
$error = Wiaas_Authentication::authenticate_user_on_login($user);
$this->assertTrue(is_wp_error($error));
$this->assertEquals('You must selected role to login!', $error->get_error_message());
}
/**
* @covers Wiaas_Authentication::authenticate_user_on_login()
* @group authentication
*/
function test_login_authentication_does_nothing_if_rest_request() {
$_SERVER['REQUEST_URI'] = get_home_url('') . '/' . rest_get_url_prefix();
$user = wp_get_current_user();
$response_user = Wiaas_Authentication::authenticate_user_on_login($user);
$this->assertEquals(
$user->ID,
$response_user->ID
);
}
/**
* @covers Wiaas_Authentication::authenticate_user_on_login()
* @group authentication
*/
function test_login_authentication_fails_if_customer_role_requested() {
$user = wp_get_current_user();
$_POST['role'] = 'customer';
$error = Wiaas_Authentication::authenticate_user_on_login($user);
$this->assertTrue(is_wp_error($error));
$this->assertEquals('No access!', $error->get_error_message());
}
/**
* @covers Wiaas_Authentication::authenticate_user_on_login()
* @group authentication
*/
function test_login_authentication_fails_when_user_has_no_organization() {
$_POST['role'] = 'supplier';
delete_user_meta($this->user_id, '_wiaas_organization_id');
$error = Wiaas_Authentication::authenticate_user_on_login(wp_get_current_user());
$this->assertTrue(is_wp_error($error));
$this->assertEquals('Account not completed!', $error->get_error_message());
}
/**
* @covers Wiaas_Authentication::authenticate_user_on_login()
* @group authentication
*/
function test_login_authentication_fails_when_organization_has_no_roles() {
$_POST['role'] = 'supplier';
$error = Wiaas_Authentication::authenticate_user_on_login(wp_get_current_user());
$this->assertTrue(is_wp_error($error));
$this->assertEquals('Your account is not authorized for requested role. Please contact us for help.', $error->get_error_message());
}
/**
* @covers Wiaas_Authentication::authenticate_user_on_login()
* @group authentication
*/
function test_login_authentication_fails_when_organization_has_different_roles() {
// add roles to organization
$organization_roles = array( 'supplier', 'customer' );
update_term_meta($this->organization_id, '_wiaas_organization_roles', $organization_roles);
$_POST['role'] = 'commercial_lead';
$error = Wiaas_Authentication::authenticate_user_on_login(wp_get_current_user());
$this->assertTrue(is_wp_error($error));
$this->assertEquals('Your account is not authorized for requested role. Please contact us for help.', $error->get_error_message());
}
/**
* @covers Wiaas_Authentication::authenticate_user_on_login()
* @group authentication
*/
function test_login_authentication_valid_when_organization_has_requested_role() {
// add roles to organization
$organization_roles = array( 'administrator', 'commercial_lead' );
update_term_meta($this->organization_id, '_wiaas_organization_roles', $organization_roles);
$user_roles = $organization_roles;
foreach ($user_roles as $user_role) {
$_POST['role'] = $user_role;
$response_user = Wiaas_Authentication::authenticate_user_on_login(wp_get_current_user());
$this->assertEquals(
$this->user_id,
$response_user->ID
);
}
}
/**
* @covers Wiaas_Authentication::maybe_filter_user_roles()
* @group authentication
*/
function test_user_has_customer_role_on_rest_request() {
$_SERVER['REQUEST_URI'] = get_home_url('') . '/' . rest_get_url_prefix();
global $wpdb;
$user_roles = Wiaas_Authentication::maybe_filter_user_roles(
null, $this->user_id,
$wpdb->get_blog_prefix() . 'capabilities'
);
$this->assertNotNull($user_roles);
$this->assertCount(1, $user_roles);
$user_roles = $user_roles[0];
$this->assertNotNull($user_roles);
$this->assertCount(1, $user_roles);
$this->assertArrayHasKey('customer', $user_roles);
$this->assertTrue($user_roles['customer']);
}
/**
* @covers Wiaas_Authentication::maybe_filter_user_roles()
* @group authentication
*/
function test_user_has_no_role_if_not_selected() {
global $wpdb;
$user_roles = Wiaas_Authentication::maybe_filter_user_roles(
null, $this->user_id,
$wpdb->get_blog_prefix() . 'capabilities'
);
$this->assertNotNull($user_roles);
$this->assertCount(1, $user_roles);
$user_roles = $user_roles[0];
$this->assertNotNull($user_roles);
$this->assertCount(1, $user_roles);
$this->assertEmpty(array_keys($user_roles)[0]);
}
/**
* @covers Wiaas_Authentication::maybe_filter_user_roles()
* @group authentication
*/
function test_user_has_selected_role() {
global $wpdb;
update_user_meta($this->user_id, '_wiaas_current_user_admin_role', 'supplier');
$user_roles = Wiaas_Authentication::maybe_filter_user_roles(
null, $this->user_id,
$wpdb->get_blog_prefix() . 'capabilities'
);
$this->assertNotNull($user_roles);
$this->assertCount(1, $user_roles);
$user_roles = $user_roles[0];
$this->assertNotNull($user_roles);
$this->assertCount(1, $user_roles);
$this->assertArrayHasKey('supplier', $user_roles);
$this->assertTrue($user_roles['supplier']);
}
}

View File

@@ -19,9 +19,7 @@ class Wiaas_Delivery_Process_Step_Test extends Wiaas_Unit_Test_Case {
'form_id' => $this->form_id,
));
$this->target_form_id = GFFormsModel::search_forms(
'DELIVERY ACTION TYPE: Manual',
true)[0]->id;
$this->target_form_id = Wiaas_Delivery_Process_Action::get_action_forms()[0]['id'];
$this->step = Gravity_Flow_Steps::create( array(
@@ -36,8 +34,8 @@ class Wiaas_Delivery_Process_Step_Test extends Wiaas_Unit_Test_Case {
), GFAPI::get_entry($form_entry_id));
}
private function _get_target_entry_meta_key() {
return 'wiaas_delivery_step_' . $this->step->get_id() .'_entry_id';
private function _get_target_action_entries_meta_key() {
return 'wiaas_delivery_step_' . $this->step->get_id() .'_action_entry_ids';
}
/**
@@ -55,25 +53,9 @@ class Wiaas_Delivery_Process_Step_Test extends Wiaas_Unit_Test_Case {
$this->assertEquals($this->step->target_form_id, $this->target_form_id);
$this->assertEquals($this->step->get_label(), 'Wiaas Delivery Step');
$this->assertEquals($this->step->get_label(), 'Delivery Step');
#$this->assertEquals($step->is_visible_to_customer, true);
}
/**
* @covers Wiaas_Delivery_Process_Step::get_target_forms_choices
*/
function test_target_forms_choices_are_valid() {
$target_forms_choices = $this->step->get_target_forms_choices();
$available_action_types = Wiaas_Delivery_Process_Step::get_delivery_action_types();
$this->assertEquals(sizeof($target_forms_choices), sizeof($available_action_types));
foreach ($target_forms_choices as $target_forms_choice) {
$this->assertTrue(in_array($target_forms_choice->title, $available_action_types));
}
//$this->assertEquals($this->step->is_visible_to_customer, true);
}
/**
@@ -97,7 +79,7 @@ class Wiaas_Delivery_Process_Step_Test extends Wiaas_Unit_Test_Case {
);
$expected_meta = array(
'test' => 'test',
'wiaas_delivery_step_' . $this->step->get_id() .'_entry_id' => null
'wiaas_delivery_step_' . $this->step->get_id() .'_action_entry_ids' => array()
);
$this->assertEquals($expected_meta, $this->step->get_entry_meta($meta, $this->step->get_form_id()));
@@ -109,12 +91,12 @@ class Wiaas_Delivery_Process_Step_Test extends Wiaas_Unit_Test_Case {
function test_process_with_no_target_form() {
$this->step->target_form_id = '';
$this->assertTrue($this->step->process());
$this->assertFalse($this->step->process());
# check that entry metadata is not updated
$target_entry_meta_key = $this->_get_target_entry_meta_key();
$value = gform_get_meta($this->step->get_entry_id(), $target_entry_meta_key);
$this->assertFalse($value);
$target_action_entries_meta_key = $this->_get_target_action_entries_meta_key();
$value = gform_get_meta($this->step->get_entry_id(), $target_action_entries_meta_key);
$this->assertEmpty($value);
}
/**
@@ -125,46 +107,13 @@ class Wiaas_Delivery_Process_Step_Test extends Wiaas_Unit_Test_Case {
$this->assertFalse($this->step->process());
# check that entry metadata is updated with correct target entry value
$target_entry_meta_key = $this->_get_target_entry_meta_key();
$value = gform_get_meta($this->step->get_entry_id(), $target_entry_meta_key);
$target_entry_id = absint($value);
$this->assertGreaterThan(0, $target_entry_id);
$target_action_entries_meta_key = $this->_get_target_action_entries_meta_key();
$value = gform_get_meta($this->step->get_entry_id(), $target_action_entries_meta_key);
//$this->assertNotEmpty($value);
# check that entry metadata key for target entry id points to valid entry
$entry = GFAPI::get_entry($target_entry_id);
$this->assertFalse(is_wp_error($entry));
}
/**
* @covers Wiaas_Delivery_Process_Step::status_evaluation
*/
function test_status_evaluation_with_no_target_form() {
$this->step->target_form_id = '';
$this->step->process();
$this->assertEquals($this->step->status_evaluation(), 'complete');
}
/**
* @covers Wiaas_Delivery_Process_Step::status_evaluation
*/
function test_status_evaluation_with_target_form() {
$this->step->process();
# check that step status is now pending
$this->assertEquals($this->step->status_evaluation(), 'pending');
# complete target entry workflow
$api = new Gravity_Flow_API( $this->step->target_form_id );
$target_form_entry = $this->step->get_target_form_entry();
$this->assertEquals($api->get_status($target_form_entry), 'pending');
gform_update_meta($target_form_entry['id'], 'workflow_role_administrator', 'approved');
$target_entry_current_step = $api->get_current_step($target_form_entry);
$target_entry_current_step->refresh_entry();
# check that step status is now complete
$this->assertEquals($this->step->status_evaluation(), 'complete');
// $entry = GFAPI::get_entry($target_entry_id);
//
// $this->assertFalse(is_wp_error($entry));
}
}

View File

@@ -1,156 +0,0 @@
<?php
/**
* Wiaas_Delivery_Process_Test
*
* @package Wiaas
*/
class Wiaas_Delivery_Process_Test extends Wiaas_Unit_Test_Case {
var $process_form, $step_form, $process_form_instance, $process_step, $process_form_workflow_api;
function setUp() {
parent::setUp();
$this->process_form = GFFormsModel::search_forms(
'DELIVERY PROCESS: Normal Delivery',
true)[0];
$this->step_form = GFFormsModel::search_forms(
'DELIVERY ACTION TYPE: Manual',
true)[0];
$process_form_instance_id = GFAPI::add_entry(array(
'form_id' => $this->process_form->id,
));
$this->process_form_instance = GFAPI::get_entry($process_form_instance_id);
$this->process_form_workflow_api = new Gravity_Flow_API( $this->process_form->id );
}
/**
* @covers Wiaas_Delivery_Process::create_delivery_process_for_order
*/
function test_delivery_process_for_order_created() {
$order = wc_create_order();
$order_id = $order->get_id();
Wiaas_Delivery_Process::create_delivery_process_for_order($order_id);
$order_process_id = absint(get_post_meta($order_id, 'wiaas_delivery_process_id'));
$order_process_instance_id = absint(get_post_meta($order_id, 'wiaas_delivery_process_entry_id'));
# check field populated
$this->assertGreaterThan(0, $order_process_id);
$this->assertGreaterThan(0, $order_process_instance_id);
}
/**
* @covers Wiaas_Delivery_Process::extend_gravity_form_entry_meta
*/
function test_gravity_form_entry_meta_extended() {
# create test entry with additional metadata
$entry = array(
'form_id' => $this->step_form->id,
'wiaas_delivery_process_id' => false,
);
$result = GFAPI::add_entry($entry);
# test that entry was successfully created
$this->assertFalse(is_wp_error($result));
}
/**
* @covers Wiaas_Delivery_Process::maybe_complete_parent_process_step
*/
function test_do_nothing_if_completed_workflow_has_no_parent() {
# Test there is no exception if entry has no parent process
$entry_id = GFAPI::add_entry(array(
'form_id' => $this->step_form->id
));
$this->assertFalse(
Wiaas_Delivery_Process::maybe_complete_parent_process_step(
$entry_id,
$this->step_form)
);
}
/**
* @covers Wiaas_Delivery_Process::maybe_complete_parent_process_step
*/
function test_process_parent_process_step_on_workflow_completion() {
# get process current step
$process_form_instance = GFAPI::get_entry($this->process_form_instance['id']);
# retrieve process steps
$process_steps = $this->process_form_workflow_api->get_steps($this->process_form);
$first_process_step = $process_steps[0];
$second_process_step = $process_steps[1];
# Check that current step is first step of corresponding process
$process_instance_current_step = $this->process_form_workflow_api->get_current_step($process_form_instance);
$this->assertEquals(
$process_instance_current_step->get_id(),
$first_process_step->get_id());
# Update step form entry to complete its workflow
$step_form_entry = $process_instance_current_step->get_target_form_entry();
gform_update_meta($step_form_entry['id'], 'workflow_role_administrator', 'approved');
# execute callback
Wiaas_Delivery_Process::maybe_complete_parent_process_step($step_form_entry['id'], null);
# refresh process instance and check we moved to next step
$process_form_instance = GFAPI::get_entry($this->process_form_instance['id']);
$this->assertEquals(
$this->process_form_workflow_api->get_current_step($process_form_instance)->get_id(),
$second_process_step->get_id());
}
/**
* @covers Wiaas_Delivery_Process::get_order_delivery_process()
*/
function test_get_order_delivery_process() {
$order = wc_create_order();
$order_id = $order->get_id();
$delivery_process = Wiaas_Delivery_Process::get_order_delivery_process($order_id);
$this->assertNotNull($delivery_process);
$steps = $delivery_process['steps'];
$this->assertNotNull($steps);
$this->assertTrue(is_array($steps));
foreach ($steps as $step) {
# test returned step is array
$this->assertTrue(is_array($step));
# test returned step properties
$this->assertArrayHasKey('step_id', $step);
$this->assertArrayHasKey('step_form_entry_id', $step);
$this->assertArrayHasKey('short_desc', $step);
$this->assertArrayHasKey('full_desc', $step);
$this->assertArrayHasKey('action_code', $step);
$this->assertArrayHasKey('step_type', $step);
$this->assertArrayHasKey('status', $step);
$this->assertArrayHasKey('order_id', $step);
$this->assertEquals($step['order_id'], $order_id);
# test that started steps have valid form entry
if ($step['status'] !== 'inactive') {
$process_instance = GFAPI::get_entry($step['step_form_entry_id']);
$this->assertFalse(is_wp_error($process_instance));
}
}
}
}

View File

@@ -129,30 +129,6 @@ class Wiaas_Order_Test extends Wiaas_Unit_Test_Case {
$args['post_status']);
}
/**
* @covers Wiaas_Order::transform_rest_order()
*/
function test_order_rest_response_has_process() {
$order_response = array(
'customer_id' => $this->customer_id,
'status' => 'processing',
'line_items' => array()
);
$request = array( 'id' => $this->order_id);
$order_rest_response = new WP_REST_Response($order_response);
$order_rest_response = Wiaas_Order::transform_rest_order(
$order_rest_response,
wc_get_order($this->order_id),
$request);
$transformed_order_response = $order_rest_response->get_data();
$this->assertNotNull($transformed_order_response['delivery-process']);
$this->assertTrue(is_array($transformed_order_response['delivery-process']));
}
/**
* @covers Wiaas_Order::transform_rest_order()
*/
@@ -176,28 +152,4 @@ class Wiaas_Order_Test extends Wiaas_Unit_Test_Case {
$this->assertArrayHasKey('email', $transformed_order_response['customer']);
$this->assertArrayHasKey('phone', $transformed_order_response['customer']);
}
/**
* @covers Wiaas_Order::transform_rest_order()
*/
function test_order_rest_response_has_commercial_lead_info() {
$order_response = array(
'customer_id' => $this->customer_id,
'status' => 'processing',
'line_items' => array()
);
$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));
$transformed_order_response = $order_rest_response->get_data();
$this->assertNotNull($transformed_order_response['commercial_lead']);
$this->assertTrue(is_array($transformed_order_response['commercial_lead']));
$this->assertArrayHasKey('name', $transformed_order_response['commercial_lead']);
$this->assertArrayHasKey('email', $transformed_order_response['commercial_lead']);
$this->assertArrayHasKey('phone', $transformed_order_response['commercial_lead']);
}
}

View File

@@ -59,6 +59,8 @@ include_once WIAAS_DIR . '/includes/class-wiass-templates.php';
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'));
}

View File

@@ -106,6 +106,9 @@
"wp wc update",
"wp wc pb update",
"wp wiaas update-db"
],
"timestamp": [
"php -r \"print date('YmdHis') . PHP_EOL;\" "
]
}
}

View File

@@ -76,6 +76,7 @@ define('SENDGRID_FROM_NAME', env('WP_SENDGRID_FROM_NAME' ?: 'Wiaas'));
* Wiaas Env variables
*/
define('WIAAS_CUSTOMER_INTERFACE', env('WIAAS_CUSTOMER_INTERFACE') ?: WP_HOME);
define('WIAAS_SUPPORT_EMAIL', env('WIAAS_SUPPORT_EMAIL') ?: 'support@co-ideation.com');
/**
* Custom Settings
@@ -89,4 +90,4 @@ define('DISALLOW_FILE_EDIT', true);
*/
if (!defined('ABSPATH')) {
define('ABSPATH', $webroot_dir . '/wp/');
}
}

View File

@@ -165,6 +165,13 @@ export const getModules = () => {
url: 'cart',
isInMenu: '0'
},
{
id: '20',
name: 'HelpDesk',
menuName: 'Helpdesk',
url: 'helpdesk',
isInMenu: '0'
},
{
id: '14',
name: 'ProfileSettings',

View File

@@ -12,6 +12,7 @@ import {
updateMessages
} from '../notification/notificationActions';
import HtmlClient from '../../helpers/HtmlClient';
import { fromWiaasCustomerAcceptance } from '../../helpers/ProcessHelper';
const htmlClient = new HtmlClient();
@@ -32,7 +33,11 @@ export const fetchCustomerAcceptance = (idOrder) => {
})
.then(response => {
if (response.data) {
dispatch(recieveCustomerAcceptance(response.data));
dispatch(
recieveCustomerAcceptance(
fromWiaasCustomerAcceptance(response.data)
)
);
}
})
.catch(error => {

View File

@@ -1,6 +1,8 @@
import {
API_SERVER
} from '../../config';
import { fromWiaasCustomerQuestionnaire } from '../../helpers/ProcessHelper';
import {
UPLOAD_CUSTOMER_QUESTIONNAIRE,
@@ -41,7 +43,8 @@ export const fetchCustomerQuestionnaires = (idOrder) => {
})
.then(response => {
if (typeof response.data !== 'undefined') {
dispatch(receiveCustomerQuestionnaires(response.data));
const questionnairesData = response.data.map(cData => fromWiaasCustomerQuestionnaire(cData));
dispatch(receiveCustomerQuestionnaires(questionnairesData));
}
})
.catch(error => {

View File

@@ -325,12 +325,13 @@ export const setSupportMessage = (message) => ({
supportText: message
});
export const sendSupportMail = (orderInfo, orderPackages, supportText) => {
export const sendSupportMail = (orderInfo, orderPackages, support_text) => {
let id = orderInfo.id;
return dispatch => {
return htmlClient.fetch({
url: `${API_SERVER}/orders/api/sendSupportMail`,
url: `${API_SERVER}/wp-json/wiaas/support/send-support-email`,
method: 'post',
data: {orderInfo, orderPackages, supportText}
data: {id, support_text}
})
.then(response => {
if (typeof response.data !== 'undefined' && 'messages' in response.data) {

View File

@@ -4,6 +4,7 @@ import CoMarketContainer from '../containers/coMarket/CoMarketContainer.jsx';
import CartContainer from '../containers/cart/CartContainer.jsx';
import TermsContainer from '../containers/terms/TermsContainer.jsx';
import ProfileSettingsContainer from '../containers/profileSettings/ProfileSettingsContainer.jsx';
import HelpDeskContainer from '../containers/HelpDesk/HelpDeskContainer.jsx';
export const MainContainers = {
Dashboards: {
@@ -22,6 +23,10 @@ export const MainContainers = {
container: CartContainer,
params: []
},
HelpDesk:{
container: HelpDeskContainer,
params: []
},
Terms: {
container: TermsContainer,
params: []

View File

@@ -0,0 +1,11 @@
import React, {Component} from 'react';
import './style/HelpDesk.css';
class HelpDeskContainer extends Component {
render() {
return (<iframe src='https://wiaas.freshservice.com/support/login'></iframe>);
}
}
export default HelpDeskContainer;

View File

@@ -0,0 +1,6 @@
iframe {
display: block;
border: none;
width: 100%;
height: 100vh;
}

View File

@@ -70,10 +70,10 @@ class CartUploadDocument extends Component {
<h1 className="drop-zone-icon">
<i className="fa fa-upload"></i>
</h1>
<h6 className="drop-zone-text">{uploadedDocument.name}</h6>
<span className="drop-zone-text">
Drag and drop or click to replace file
</span>
<p className="drop-zone-text">
Drag and drop or click to replace <strong>{uploadedDocument.name}.{uploadedDocument.extension}</strong>
</p>
<p className="drop-zone-text">To upload multiple files, please pack the files to one zip-file and upload the zip-file</p>
</div>
)
: (
@@ -81,9 +81,10 @@ class CartUploadDocument extends Component {
<h1 className="drop-zone-icon pending-upload">
<i className="fa fa-upload"></i>
</h1>
<span className="drop-zone-text">
<p className="drop-zone-text">
Drag and drop or click to upload file
</span>
</p>
<p className="drop-zone-text">To upload multiple files, please pack the files to one zip-file and upload the zip-file</p>
</div>
)
}

View File

@@ -25,10 +25,10 @@ class CoMarketCatalogSelect extends Component {
}
componentWillReceiveProps(nextProps){
// if(nextProps.activeModule==='cart' && nextProps.shops && nextProps.cartItems && nextProps.cartItems.length > 0){
// const cartShop = this.props.shops.find( shop => { return shop.id === this.props.cartItems[0].idCommercialLead });
// nextProps.dispatch(selectShop(cartShop));
// }
if(nextProps.activeModule==='cart' && nextProps.shops && nextProps.cartItems && nextProps.cartItems.length > 0){
const cartShop = nextProps.shops.find( shop => { return shop.id === nextProps.cartItems[0].idCommercialLead });
nextProps.dispatch(selectShop(cartShop));
}
if(nextProps.shops && nextProps.idCommercialLead && nextProps.activeModule === 'co-market'){
const shop = nextProps.shops.find( shop => {return shop.id === nextProps.idCommercialLead });

View File

@@ -3,8 +3,18 @@ import {connect} from 'react-redux';
import OrderDocumentsGroup from './OrderDocumentsGroup.jsx';
import {orderTexts} from '../../../constants/ordersConstants';
import WiaasBox from "../../../mainComponents/box/WiaasBox";
import {API_SERVER} from "../../../config";
import FileDownloader from "../../../helpers/FileDownloader";
const fileHandler = new FileDownloader();
class OrderDocuments extends Component {
downloadDocument(orderId, document){
const fileUrl = `${API_SERVER}/wp-json/wiaas/order/${orderId}/document/${document.key}`;
fileHandler.download(fileUrl, `${document.name}.${document.extension}`);
}
render() {
const {orderInfo} = this.props;
@@ -23,14 +33,13 @@ class OrderDocuments extends Component {
<WiaasBox mainTitle={orderTexts.labels.OTHER_DOCS}>
{
orderInfo.documents.map((document, index) => (
<a className="document-link-big" key={'order-document-' + index} download href={document.url}>
<span className="document-link">
<i className={`fa fa-4x fa-${document.icon}`} aria-hidden="true"></i>
<a id={'document-' + document.key} key={'order-document-' + document.key}>
<div onClick={() => {this.downloadDocument(orderInfo.id, document)}} className="document-link-big">
<i className={`fa fa-4x fa-${document.icon}`} aria-hidden="true"></i>
<div>
{document.name}
</div>
</span>
</a>
</div></a>
))
}
</WiaasBox>

View File

@@ -13,7 +13,7 @@ class OrderDocumentsGroup extends Component {
}
downloadDocument(orderId, itemId, document){
const fileUrl = `${API_SERVER}/wp-json/wiaas/documents/order/${orderId}/${document.type}?item_id=${itemId}&document_key=${document.key}`;
const fileUrl = `${API_SERVER}/wp-json/wiaas/order/${orderId}/item/${itemId}/document/${document.key}`;
fileHandler.download(fileUrl, `${document.name}.${document.extension}`);
}
@@ -28,20 +28,6 @@ class OrderDocumentsGroup extends Component {
<WiaasBox mainTitle={documentsGroup.name}>
{
documentsGroup.documents.map((document, index) => {
if (document.url) {
return (
<a key={'order-document-' + index} download href={document.url}>
<div className="document-link" className="document-link-big">
<i className={`fa fa-4x fa-${document.icon}`} aria-hidden="true"></i>
<div>
{document.name}
</div>
</div>
</a>
);
}
return (
<a id={'document-' + document.key} key={'order-document-' + document.key}>
<div onClick={() => {this.downloadDocument(orderId, documentsGroup.orderItemId, document)}} className="document-link-big">

View File

@@ -80,7 +80,7 @@ class OrderInfo extends Component {
<Col xl="2">
<div>
<div className="subtitle"><h6>{orderTexts.labels.REFERENCE}:</h6></div>
<span>{orderInfo.reference || '-'}</span>
<span className="reference">{orderInfo.reference || '-'}</span>
</div>
<div>
<div className="subtitle"><h6>{orderTexts.labels.BID}:</h6></div>
@@ -139,7 +139,7 @@ class OrderInfo extends Component {
<Col xl="2">
<div>
<div className="subtitle"><h6>{orderTexts.labels.PROJECT}:</h6></div>
<span>{orderInfo.projectName || '-'}</span>
<span className="project-name">{orderInfo.projectName || '-'}</span>
</div>
<div className="terms-link">

View File

@@ -139,6 +139,7 @@ class CustomerAcceptance extends Component {
activeClassName="upload-file-accept"
onDrop={(acceptedFiles, rejectedFiles)=>{this.uploadFile(step.idOrder, acceptedFiles, rejectedFiles)}}>
<h5 className="drop-zone-text">{orderTexts.labels.UPLOAD_ACCEPTANCE_LABEL}</h5>
<p className="drop-zone-text">To upload multiple files, please pack the files to one zip-file and upload the zip-file</p>
</Dropzone>
</Col>
<Col xl="4" lg="7" md="8">
@@ -148,7 +149,7 @@ class CustomerAcceptance extends Component {
{
customerAcceptance.documents.map((document, index) => <div key={'acceptance-documnet-' + index}>
<span className="document-link">
<i className={'fa fa-file'}></i> <a download href={document.url}> {document.name} </a>
<i className={`fa fa-${document.icon}`}></i> <a download href={document.url}> {document.name} </a>
</span>
<span className="document-status">
{document.validation} <div className={'status-icon ' + document.validation}></div>

View File

@@ -27,8 +27,8 @@ class ValidateQuestionnaire extends Component {
customerQuestionnaires.map((customerQuestionnaryAction) =>
<ValidateQuestionnaireItem
action={customerQuestionnaryAction}
key={'validate-questionnaire-' + customerQuestionnaryAction.action_id}
orderPackage={orderPackages.find( orderPackage => orderPackage.orderItemId === customerQuestionnaryAction.item_id)}
key={'validate-questionnaire-' + customerQuestionnaryAction.actionId}
orderPackage={orderPackages.find( orderPackage => orderPackage.orderItemId === customerQuestionnaryAction.orderItemId)}
/>
)
}

View File

@@ -19,7 +19,7 @@ class ValidateQuestionnaireItem extends Component {
uploadFile(action,acceptedFiles, rejectedFiles) {
if(acceptedFiles && acceptedFiles.length){
const file = acceptedFiles[0];
this.props.dispatch(uploadCustomerQuestionnaire(action.order_id, action.action_id, file));
this.props.dispatch(uploadCustomerQuestionnaire(action.orderId, action.actionId, file));
}
// if(rejectedFiles && rejectedFiles.length) {
@@ -48,7 +48,7 @@ class ValidateQuestionnaireItem extends Component {
<div>
<span className="document-link">
<i className={'fa fa-file'}></i> <a download href={document.url}> {document.name} </a>
<i className={`fa fa-${document.icon}`}></i> <a download href={document.url}> {document.name} </a>
</span>
<br />
<span className="document-status">
@@ -59,7 +59,8 @@ class ValidateQuestionnaireItem extends Component {
(action.comments && action.comments.length > 0) &&
<div>
{action.comments.map((comment, key) => <div key={'step-comment-' + document.idDocument + '-' + key} className="step-comment">
<div>{comment}</div>
<strong>{comment.header}</strong>
<p>{comment.value}</p>
</div>)}
</div>
}
@@ -71,6 +72,7 @@ class ValidateQuestionnaireItem extends Component {
activeClassName="upload-file-accept"
onDrop={(acceptedFiles, rejectedFiles)=>{this.uploadFile(action, acceptedFiles, rejectedFiles)}}>
<h5 className="drop-zone-text">{orderTexts.labels.SELECT_OR_DROP}</h5>
<p className="drop-zone-text">To upload multiple files, please pack the files to one zip-file and upload the zip-file</p>
</Dropzone>
</Col>
</Row>
@@ -79,12 +81,21 @@ class ValidateQuestionnaireItem extends Component {
<Row>
<Col>
<span className="document-link">
<i className={'fa fa-file'}></i> <a download href={document.url}> {document.name} </a>
<i className={`fa fa-${document.icon}`}></i> <a download href={document.url}> {document.name} </a>
</span>
<br />
<span className="document-status">
{action.status.replace(/-/g,' ')} <div className={'status-icon ' + action.status}></div>
</span>
{
(action.comments && action.comments.length > 0) &&
<div>
{action.comments.map((comment, key) => <div key={'step-comment-' + document.idDocument + '-' + key} className="step-comment">
<strong>{comment.header}</strong>
<p>{comment.value}</p>
</div>)}
</div>
}
</Col>
</Row>
</div>

View File

@@ -7,6 +7,14 @@ $link-line-height: 1.5rem;
margin-top: 0.5rem;
}
.reference{
word-break: break-all;
}
.project-name{
word-break: break-all;
}
.info-color {
margin-top: 0.2rem;
padding-left: 0.2rem;
@@ -181,7 +189,7 @@ $link-line-height: 1.5rem;
.upload-file-drop-zone {
width: 100%;
border: 3px dashed $borderColor;
height: 10rem;
padding: 2rem;
cursor: pointer;
border-radius: 4px;
}
@@ -206,7 +214,6 @@ $link-line-height: 1.5rem;
.drop-zone-text {
text-align: center;
padding: 4rem 0;
}
.document-link {
@@ -357,7 +364,6 @@ $link-line-height: 1.5rem;
.drop-zone-text {
text-align: center;
padding: 4rem 0;
font-size: 1rem;
}

View File

@@ -3,7 +3,7 @@ export const fromWiaasAddress = (address) => {
id: address.id,
countryName: address.country_name,
deliveryMail: address.delivery_mail,
idCountrySelected: address.id_country_selected,
idCountrySelected: address.country_code,
city: address.city,
detailedAddress: address.detailed_address,
zipCode: address.zip_code,
@@ -18,7 +18,7 @@ export const toWiaasAddress = (address) => {
id: address.id,
country_name: address.countryName,
delivery_mail: address.deliveryMail,
id_country_selected: address.idCountrySelected,
country_code: address.idCountrySelected,
city: address.city,
detailed_address: address.detailedAddress,
zip_code: address.zipCode,

View File

@@ -1,6 +1,6 @@
export const fromWiaasCountryList = (countryList) => {
return {
idCountry: countryList.country_id,
countryName: countryList.country_name
idCountry: countryList.code,
countryName: countryList.name
}
}

View File

@@ -9,7 +9,8 @@ const iconTypes = {
xls: 'file-excel-o',
xlsx: 'file-excel-o',
ppt: 'file-powerpoint-o',
pptx: 'file-powerpoint-o'
pptx: 'file-powerpoint-o',
zip: 'file-zip-o'
};
export const getDocumentIcon = extension => {

View File

@@ -1,4 +1,5 @@
import moment from "moment";
import {getDocumentIcon} from "./DocumentHelper";
export const fromWiaasProcessStep = (step) => {
return {
@@ -13,4 +14,31 @@ export const fromWiaasProcessStep = (step) => {
shortDesc: step.short_desc,
status: step.status,
}
};
export const fromWiaasCustomerAcceptance = cData => {
return {
actionId: cData['action_id'],
expiration: cData.expiration,
declineReason: cData['decline_reason'],
status: cData.status,
documents: cData.documents ? cData.documents.map(document => {
document.icon = getDocumentIcon(document.extension);
return document;
}) : []
};
};
export const fromWiaasCustomerQuestionnaire = cData => {
const document = cData.document;
document.icon = getDocumentIcon(document.extension);
return {
actionId: cData['action_id'],
orderItemId: cData['item_id'],
document,
status: cData.status,
orderId: cData['order_id'],
comments: cData.comments
};
};

View File

@@ -84,6 +84,13 @@ class Menu extends Component {
)
}
</Nav>
<Nav className="nav-btn-cart navbar-right" navbar>
<NavItem
id="nav-button-helpdesk"
className={(this.props.activeModule === 'helpdesk') ? "navbar-button active" : "navbar-button"}>
<NavLink tag={Link} to="/helpdesk">Helpdesk</NavLink>
</NavItem>
</Nav>
<Nav className="nav-btn-cart navbar-right" navbar>
<NavItem id="nav-button-cart" className="navbar-button">
<NavLink tag={Link} to="/cart">

View File

@@ -25,6 +25,7 @@
font-weight: 600;
text-align: left;
color: #33425b;
word-break: break-all;
}
.wiass-table-small-scr-header{
@@ -50,6 +51,7 @@
}
.wiaas-table-col {
padding-bottom: 0.2rem;
word-break: break-all;
}
}
}