diff --git a/backend.dockerfile b/backend.dockerfile
index 8ee4d96..dbcaa22 100644
--- a/backend.dockerfile
+++ b/backend.dockerfile
@@ -46,7 +46,7 @@ ENV WP_SENDGRID_FROM_NAME ${WP_SENDGRID_FROM_NAME}
ENV WIAAS_CUSTOMER_INTERFACE ${WIAAS_CUSTOMER_INTERFACE}
-RUN apt-get update && apt-get install -y git unzip gnupg mysql-client sudo
+RUN apt-get update && apt-get install -y git unzip gnupg mysql-client sudo libpng-dev
COPY docker/php/composer.phar /usr/local/bin/composer
RUN chmod 755 /usr/local/bin/composer
@@ -57,7 +57,7 @@ RUN chmod +x /usr/local/bin/wp
COPY docker/php/setup.sh /init-scripts/
RUN chmod +x /init-scripts/setup.sh
-RUN docker-php-ext-install pdo pdo_mysql mysqli opcache
+RUN docker-php-ext-install pdo pdo_mysql mysqli opcache gd zip mbstring
RUN a2enmod rewrite
COPY docker/php/000-default.conf /etc/apache2/sites-available
diff --git a/backend/app/plugins/wiaas/assets/css/menu.css b/backend/app/plugins/wiaas/assets/css/menu.css
index 3c8fc24..da83ba0 100644
--- a/backend/app/plugins/wiaas/assets/css/menu.css
+++ b/backend/app/plugins/wiaas/assets/css/menu.css
@@ -19,3 +19,46 @@
.wc-order-preview footer {
display: none;
}
+
+.gravityflow-discussion-item{
+ margin-bottom:10px;
+ padding: 6px;
+}
+
+.gravityflow-dicussion-item-name {
+ color:black;
+ font-weight:bold;
+}
+
+.gravityflow-dicussion-item-date {
+ color: #9b9b9b;
+ margin-left:8px;
+ font-size:90%;
+}
+
+.rtl .gravityflow-dicussion-item-date {
+ margin-right:8px;
+ margin-left: 0;
+}
+
+.gravityflow-dicussion-item-toggle-display {
+ float: right;
+}
+
+.rtl .gravityflow-dicussion-item-toggle-display {
+ float: left;
+}
+
+@media print {
+ .gravityflow-dicussion-item-hidden {
+ display:block !important;
+ }
+
+ .gravityflow-dicussion-item-toggle-display {
+ display: none;
+ }
+}
+
+.gravityflow-dicussion-item-value {
+ padding: 10px;
+}
diff --git a/backend/app/plugins/wiaas/assets/css/wiaas-admin-delivery-process.css b/backend/app/plugins/wiaas/assets/css/wiaas-admin-delivery-process.css
deleted file mode 100644
index bbd9acd..0000000
--- a/backend/app/plugins/wiaas/assets/css/wiaas-admin-delivery-process.css
+++ /dev/null
@@ -1,15 +0,0 @@
-.delivery-process {
- background-color: #777;
- color: white;
- cursor: pointer;
- padding: 18px;
- width: 100%;
- border: none;
- text-align: left;
- outline: none;
- font-size: 15px;
- }
-
- .delivery-process:hover {
- background-color: #555;
- }
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/assets/js/wiaas-admin-delivery-process.js b/backend/app/plugins/wiaas/assets/js/wiaas-admin-delivery-process.js
index 12e8a2f..10341bb 100644
--- a/backend/app/plugins/wiaas/assets/js/wiaas-admin-delivery-process.js
+++ b/backend/app/plugins/wiaas/assets/js/wiaas-admin-delivery-process.js
@@ -1,23 +1,8 @@
-jQuery(document).ready(function($) {
+jQuery(document).ready(function ($) {
+ $('.wiaas_delivery_step_nav').click(function (e) {
+ var action = $(this).data('step');
- $('#delivery-process-selector').change(function(e){
- e.preventDefault();
-
- var data = {
- action: 'wiaas_create_order_delivery_process',
- _ajax_nonce: $('#wiaas_create_order_delivery_process_nonce').val(),
- order: $('#wiaas_order_id').val(),
- form: e.target.value
+ $('#wiaas_delivery_process_navigation_action').val(action);
- };
-
- // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
- $.post(ajaxurl, data, function(response) {
- if (response.success){
- location.reload();
- }else{
- alert(response.data[0].message);
- }
- });
});
-});
\ No newline at end of file
+});
diff --git a/backend/app/plugins/wiaas/assets/js/wiaas-form-editor.js b/backend/app/plugins/wiaas/assets/js/wiaas-form-editor.js
new file mode 100644
index 0000000..7589022
--- /dev/null
+++ b/backend/app/plugins/wiaas/assets/js/wiaas-form-editor.js
@@ -0,0 +1,14 @@
+jQuery(document).bind('gform_load_field_settings', function (event, field, form) {
+
+ var isBundleDoc = field.type === 'wiaas_order_bundle_document';
+
+ var isOrderDoc = field.type === 'wiaas_order_document';
+
+ if (isBundleDoc || isOrderDoc) {
+
+ jQuery('#wiaas-doc-type-filter').val(field.wiaasDocTypeFilter);
+ }
+
+ jQuery('#wiaas-installation-organization-filter').prop('checked', !!field.wiaasOnlyInstallationOrg);
+
+});
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-delivery-process.php b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-delivery-process.php
index 0218ec9..981a56e 100644
--- a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-delivery-process.php
+++ b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-delivery-process.php
@@ -3,18 +3,19 @@
class Wiaas_Admin_Delivery_Process {
public static function init() {
- require_once dirname( __FILE__ ) . '/delivery-process/class-wiaas-admin-delivery-process-flow.php';
+
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';
+
add_action( 'admin_enqueue_scripts', array(__CLASS__, 'enqueue_scripts'), 100 );
}
public static function enqueue_scripts() {
+
$plugin_url = untrailingslashit( plugins_url( '/', WIAAS_FILE ) );
- wp_enqueue_script( 'wiaas_delivery_process', $plugin_url . '/assets/js/wiaas-admin-delivery-process.js' );
-
- wp_enqueue_style( 'wiaas_admin_delivery_process', $plugin_url . '/assets/css/wiaas-admin-delivery-process.css' );
+ wp_enqueue_script( 'wiaas_admin_delivery_process', $plugin_url . '/assets/js/wiaas-admin-delivery-process.js' );
}
}
diff --git a/backend/app/plugins/wiaas/includes/admin/delivery-process/class-wiaas-admin-delivery-process-flow.php b/backend/app/plugins/wiaas/includes/admin/delivery-process/class-wiaas-admin-delivery-process-flow.php
index b138e65..4fcdc90 100644
--- a/backend/app/plugins/wiaas/includes/admin/delivery-process/class-wiaas-admin-delivery-process-flow.php
+++ b/backend/app/plugins/wiaas/includes/admin/delivery-process/class-wiaas-admin-delivery-process-flow.php
@@ -3,23 +3,91 @@
class Wiaas_Admin_Order_Process_Flow {
public static function init() {
- add_action('woocommerce_admin_order_data_after_order_details', array(__CLASS__, 'add_custom_fields_after_order_details'), 10, 1 );
- add_action('add_meta_boxes', array(__CLASS__, 'create_process_flow_meta_box'), 100);
- add_action('gravityflow_entry_detail', array(__CLASS__, 'add_delivery_dates_box'), 11, 3);
+
+ add_action( 'gravityflow_entry_detail', array( __CLASS__, 'display_process_steps_details' ), 10, 3 );
+
+ //add_action( 'gravityflow_title_entry_detail', array( __CLASS__, 'process_title' ), 10, 3 );
+
+ add_action('gravityflow_entry_detail', array(__CLASS__, 'add_delivery_dates_box'), 9, 3);
+
+ add_action('gravityflow_entry_detail', array(__CLASS__, 'maybe_display_delivery_process_navigation'), 9, 3);
+
+ add_action('gravityflow_workflow_detail_sidebar', array(__CLASS__, 'render_procurement_order_download_link'), 10, 3);
+
+ add_filter('gravityflow_admin_action_feedback', array(__CLASS__, 'maybe_process_admin_step_change_action'), 10, 4);
+
+ add_filter('gravityflow_admin_actions_workflow_detail', array(__CLASS__, 'remove_workflow_admin_actions'));
}
- public static function create_process_flow_meta_box(){
- add_meta_box(
- 'order_process_flow_meta_box',
- __('Order Process Flow', 'cmb'),
- 'Wiaas_Admin_Order_Process_Flow::add_process_flow_meta_box',
- 'shop_order',
- 'normal',
- 'high'
- );
+ public static function remove_workflow_admin_actions() {
+
+ return array();
+ }
+
+ public static function render_procurement_order_download_link($form, $entry, $current_step) {
+
+ if(! GFAPI::current_user_can_any( 'gravityflow_workflow_detail_admin_actions' ) ||
+ empty( $current_step ) ||
+ Wiaas_Delivery_Process_Action::is_action_form($form) ) {
+ return;
+ }
+
+ $order_id = $entry['wiaas_delivery_order_id'];
+
+ ?>
+
+
+ get_steps();
+
+ /**
+ * Disable if:
+ * - actions for customer config validation is not done
+ * - action for customer acceptance is active or completed
+ */
+ $is_disabled = false;
+ foreach ($steps as $step) {
+
+ if (Wiaas_Delivery_Process_Action::process_step_has_customer_validate_questionnaires_action($step) &&
+ $step->get_status() !== 'complete') {
+
+ $is_disabled = true;
+ break;
+ }
+
+ if (Wiaas_Delivery_Process_Action::process_step_has_customer_acceptance_action($step) &&
+ ($step->get_id() === $current_step->get_id() || $step->get_status() === 'complete')) {
+
+ $is_disabled = true;
+ break;
+ }
+ }
+
$order_id = $entry['wiaas_delivery_order_id'];
$suppliers = Wiaas_Order::get_suppliers($order_id);
@@ -30,46 +98,318 @@ class Wiaas_Admin_Order_Process_Flow {
require 'views/html-order-suppliers-delivery-dates.php';
}
- public static function add_process_flow_meta_box(){
- global $post;
+ public static function maybe_process_admin_step_change_action($feedback, $admin_action, $form, $entry) {
- $order_id = $post->ID;
+ $admin_action = rgpost( 'wiaas_delivery_process_navigation_action' );
- $process = Wiaas_Delivery_Process::get_order_delivery_process($order_id);
+ if ($admin_action === 'complete') {
- if ($process === NULL){
- $list_of_delivery_processes = Wiaas_Delivery_Process::get_available_delivery_processes();
-
- echo '
-
Please select a process for the order:
-
-
- ';
- wp_nonce_field( 'wiaas_create_order_delivery_process', 'wiaas_create_order_delivery_process_nonce' );
- echo '';
- }else{
- $current_step = Wiaas_Delivery_Process::get_active_step($order_id);
- $workflow_url = $current_step->get_entry_url();
+ $api->process_workflow($entry['id']);
- echo '';
+ $feedback = esc_html__( 'Workflow Complete', 'wiaas' );
+
+ return $feedback;
+ }
+
+ list( $base_admin_action, $action_id ) = rgexplode( '|', $admin_action, 2 );
+
+ if ( $base_admin_action == 'send_to_step' ) {
+ $step_id = $action_id;
+ $api = new Gravity_Flow_API( $form['id'] );
+ $api->send_to_step( $entry, $step_id );
+ $entry = GFAPI::get_entry( $entry['id'] );
+ $new_step = $api->get_current_step( $entry );
+ $feedback = $new_step ?
+ sprintf( esc_html__( 'Sent to step: %s', 'wiaas' ), $new_step->get_name() ) :
+ esc_html__( 'Workflow Complete', 'wiaas' );
+ }
+
+ return $feedback;
+ }
+
+ public static function maybe_display_delivery_process_navigation($form, $entry, $current_step) {
+
+ if(! GFAPI::current_user_can_any( 'gravityflow_workflow_detail_admin_actions' ) ||
+ empty( $current_step ) ||
+ Wiaas_Delivery_Process_Action::is_action_form($form) ) {
+ return;
+ }
+
+ $steps = gravity_flow()->get_steps($form['id'], $entry);
+
+ // get next step id
+ $next_step = gravity_flow()->get_next_step($current_step, $entry, $form);
+ $next_step_id = empty($next_step) ? null : $next_step->get_id();
+
+ // get previous step id
+ foreach ($steps as $step) {
+
+ $next = gravity_flow()->get_next_step($step, $entry, $form);
+ if ($next && $next->get_id() === $current_step->get_id()) {
+ $previous_step = $step;
+ }
+ }
+ $previous_step_id = empty($previous_step) ? null : $previous_step->get_id();
+
+ // bail out if none exist
+ if ( empty($next_step_id) && empty($previous_step_id) ) {
+
+ return;
+ }
+
+ /**
+ * @reference Gravity_Flow::maybe_process_admin_action for used field names
+ * which are being checked there
+ *
+ */
+
+ ?>
+
+
+
+
+
+
+
+
+
+ class="button button-primary wiaas_delivery_step_nav"
+ style="float:right;" value="PREV STEP">
+
+ id];
+ }
+ }
+
+ // display process steps
+
+ $workflow_api = new Gravity_Flow_API($form['id']);
+
+ $steps = $workflow_api->get_steps();
+
+ ?>
+
+
+
+
+ Order placed
+
+
+
+
+
+
+ Assign process
+
+
+
+ $step) {
+
+ if (! $step->is_active()) {
+ continue;
+ }
+
+ $is_step_completed = $step->get_status() === 'complete' || $step->get_status() === 'approved';
+ $is_current_step = $current_step && $step->get_id() === $current_step->get_id();
+
+ if ($is_current_step) {
+ $style = 'color: #FD8049;';
+ } else if ($is_step_completed) {
+ $style = 'color: #34C388;';
+ } else {
+ $style = 'opacity: 0.5; color: #CCC;';
+ }
+
+ ?>
+
+
+
+
+
+ get_name(), 'wiaas') ?>
+
+
+ target_form_id );
+
+ if (empty($action_form)) {
+
+ echo '';
+
+ continue;
+ }
+
+ $action_delivery_settings = rgar($action_form, 'wiaas_delivery_process');
+
+ ?>
+
+
+
+
+
+ ' .
+ ' ' . $action_form['title'] . '',
+ $form_url );
+
+ echo $form_link;
+ }
+
+ echo '
';
+
+ $page_size = 20;
+ $search_criteria = array(
+ 'status' => 'active',
+ 'field_filters' => array(
+ array( 'key' => 'wiaas_delivery_process_id',
+ 'value' => $entry['id']
+ ),
+ ),
+ );
+ $sorting = array( 'key' => 'date_created', 'direction' => 'DESC' );
+ $paging = array( 'offset' => 0, 'page_size' => $page_size );
+
+ $entries = GFAPI::get_entries( $action_form['id'], $search_criteria, $sorting, $paging );
+
+ foreach ($entries as $action_entry) {
+ self::_display_step_action_entry($action_form, $action_entry);
+ }
+
+ ?>
+
+
+
+
+
+
+
+
+
+
+ id);
-
- $order_id = $order->id;
- require 'views/html-order-delivery-date.php';
+ private static function _display_step_action_entry($action_form, $action_entry) {
+ $workflow_api = new Gravity_Flow_API($action_entry['form_id']);
+
+ $current_action_step = $workflow_api->get_current_step($action_entry);
+
+
+ ?>
+
+
+ type === 'wiaas_order') {
+ continue;
+ }
+
+ if ($field->type === 'workflow_discussion') {
+
+ echo '| ' . $field->format_discussion_value($action_entry[$field->id]) . ' |
';
+
+ continue;
+ }
+
+ $value = $field->get_value_entry_detail($action_entry[$field->id]);
+ $label = $field->get_field_label(false, $action_entry[$field->id]);
+
+ echo '' .
+ '| ' . $label . ' : | ' .
+ '' . $value . ' | ' .
+ '
';
+ }
+
+ ?>
+
+
+
+ |
+
+
+ get_status_label($current_action_step->get_status()) . ': ' . $current_action_step->get_name();
+ echo '' .
+ ' ' .
+ '';
+
+ } else {
+ echo $workflow_api->get_status($action_entry);
+ }
+ ?>
+
+
+ |
+
+
+
+
+
+
+
+ ID;
+
+ $process_entry = Wiaas_Delivery_Process::get_order_delivery_process_entry($order_id);
+
+ if ( empty($process_entry) ) {
+
+ $order = wc_get_order($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())
+ );
+
+ ?>
+
+
+
+
+ 'gravityflow-inbox',
+ 'view' => 'entry',
+ 'id' => $process_entry['form_id'],
+ 'lid' => $process_entry['id']
+ ), admin_url() );
+
+ ?>
+ Delivery Process
+ 403 ) );
+ }
+
+ $order_id = $_GET['wiaas-procurement-order-id'];
+ $order = wc_get_order($order_id);
+
+ if (! $order) {
+ wp_die( __( 'Invalid order.', 'wiaas' ), __( 'Download Error', 'wiaas' ), array( 'response' => 404 ) );
+ }
+
+ $customer_user_id = $order->get_customer_id();
+ $organization_id = wiaas_get_user_organization_id($customer_user_id);
+ $customer_organization_info = wiaas_get_organization_info($organization_id);
+
+ $delivery_address = $order->get_shipping_address_1() . ',' .
+ $order->get_shipping_city() . ',' .
+ $order->get_shipping_country() . ',' .
+ $order->get_shipping_postcode();
+ $billing_address = $order->get_billing_address_1() . ',' .
+ $order->get_billing_city() . ',' .
+ $order->get_billing_country() . ',' .
+ $order->get_billing_postcode();
+
+ $order_procurement_info = wiaas_get_order_procurement_info($order->get_id());
+
+ $spreadsheet = new Spreadsheet();
+ $spreadsheet->getProperties()->setCreator("RICOH")
+ ->setLastModifiedBy("Ricoh Dash")
+ ->setTitle("Order Procurement Report")
+ ->setSubject("Order Procurement Report")
+ ->setDescription("Order Procurement Report")
+ ->setKeywords("office 2007 openxml php order procurement")
+ ->setCategory("Procurement report file");
+
+ $spreadsheet->setActiveSheetIndex(0);
+ $sheet = $spreadsheet->getActiveSheet();
+ $sheet->setTitle('Order procurement');
+
+ $sheet->setCellValue('A1', 'Customer details');
+ $sheet->setCellValue('A2', 'Name');
+ $sheet->setCellValue('A3', 'Invoice address');
+ $sheet->setCellValue('A4', 'Invoice Full Name');
+ $sheet->setCellValue('A5', 'Invoice Email');
+ $sheet->setCellValue('A6', 'VAT Number');
+
+ $sheet->setCellValue('B2', ! empty($customer_organization_info) ? $customer_organization_info['name'] : '');
+ $sheet->setCellValue('B3', $billing_address);
+ $sheet->setCellValue('B4', $order->get_formatted_billing_full_name());
+ $sheet->setCellValue('B5', $order->get_billing_email());
+ $sheet->setCellValue('B6', ! empty($customer_organization_info) ? $customer_organization_info['vat_code'] : '');
+
+ $sheet->getStyle('A1')->getFont()->setBold(true);
+
+ $sheet->setCellValue('A9', 'OrderDetails');
+ $sheet->setCellValue('A10', 'Order number');
+ $sheet->setCellValue('A11', 'Project number');
+ $sheet->setCellValue('A12', 'Delivery addres');
+ $sheet->setCellValue('A13', 'Delivery Full Name');
+ $sheet->setCellValue('A14', 'Reference');
+ $sheet->setCellValue('B10', $order->get_order_number());
+ $sheet->setCellValue('B11', Wiaas_Order_Project::get_project_name_for_order($order->get_id()) );
+ $sheet->setCellValue('B12', $delivery_address);
+ $sheet->setCellValue('B13', $order->get_formatted_shipping_full_name());
+ $sheet->setCellValue('B14', $order->get_meta('_wiaas_reference'));
+
+ $sheet->getStyle('A9')->getFont()->setBold(true);
+
+ $row = 14;
+
+ foreach ($order_procurement_info as $category => $products) {
+
+ $col = 1; $row += 2;
+
+ $sheet->getColumnDimensionByColumn($col)->setAutoSize(true);
+ $sheet->getStyleByColumnAndRow($col, $row)->getFont()->setBold(true);
+
+ $sheet->setCellValueByColumnAndRow($col, $row, ucfirst(strtolower($category)));
+
+ $row += 2;
+
+ if (! empty($products)) {
+
+ $product_columns = array_keys($products[0]);
+
+ foreach ($product_columns as $product_column_index => $product_column) {
+
+ $sheet->getColumnDimensionByColumn($product_column_index + 1)->setAutoSize(true);
+ $sheet->getStyleByColumnAndRow($product_column_index + 1, $row)->getFont()->setBold(true);
+ $sheet->setCellValueByColumnAndRow($product_column_index + 1, $row, $product_column);
+ }
+ }
+
+ $row += 1;
+ foreach ($products as $product) {
+
+ $product_values = array_values($product);
+ foreach ($product_values as $product_value_index => $product_value) {
+
+ $sheet->setCellValueByColumnAndRow($product_value_index + 1, $row, $product_value);
+ }
+ $row += 1;
+ }
+ }
+
+ header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
+ header('Content-Disposition: attachment;filename="Procurement Report '.$order->get_order_number().'.xlsx"');
+ header('Cache-Control: max-age=0');
+
+ $writer = new Xlsx($spreadsheet);
+ $writer->save('php://output');
+
+ exit;
+
+ }
+}
+
+Wiaas_Admin_Delivery_Process_Order::init();
diff --git a/backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-suppliers-delivery-dates.php b/backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-suppliers-delivery-dates.php
index a03f7d1..93ae9e4 100644
--- a/backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-suppliers-delivery-dates.php
+++ b/backend/app/plugins/wiaas/includes/admin/delivery-process/views/html-order-suppliers-delivery-dates.php
@@ -4,61 +4,84 @@ if ( ! defined( 'ABSPATH' ) ) {
}
?>
-
-
-
- | Suppliers |
- Estimated date |
- Confirmed date |
+
diff --git a/backend/app/plugins/wiaas/includes/admin/delivery-process/wiaas-admin-delivery-process-ajax.php b/backend/app/plugins/wiaas/includes/admin/delivery-process/wiaas-admin-delivery-process-ajax.php
index 9d26610..e4412a9 100644
--- a/backend/app/plugins/wiaas/includes/admin/delivery-process/wiaas-admin-delivery-process-ajax.php
+++ b/backend/app/plugins/wiaas/includes/admin/delivery-process/wiaas-admin-delivery-process-ajax.php
@@ -1,6 +1,5 @@
'GET',
'callback' => array(__CLASS__, 'get_next_actions_for_user'),
'permission_callback' => 'is_user_logged_in'
) );
- register_rest_route( self::$namespace, 'customer-acceptance/(?P\d+)', array(
+ register_rest_route( self::$namespace, '/' . self::$rest_base . '/(?P\d+)/customer-acceptance', array(
'methods' => 'GET',
'callback' => array(__CLASS__, 'get_customer_acceptance'),
'permission_callback' => 'is_user_logged_in'
) );
- register_rest_route( self::$namespace, 'customer-acceptance/(?P\d+)', array(
+ register_rest_route( self::$namespace, '/' . self::$rest_base . '/(?P\d+)/customer-acceptance', array(
'methods' => 'POST',
'callback' => array(__CLASS__, 'submit_customer_acceptance'),
'permission_callback' => 'is_user_logged_in'
) );
- register_rest_route( self::$namespace, 'customer-acceptance/(?P\d+)/upload-file' , array(
+ register_rest_route( self::$namespace, '/' . self::$rest_base . '/(?P\d+)/customer-acceptance/upload' , array(
'methods' => 'POST',
- 'callback' => array(__CLASS__, 'upload_file'),
+ 'callback' => array(__CLASS__, 'upload_customer_acceptance'),
+ 'permission_callback' => 'is_user_logged_in'
+ ) );
+
+
+ register_rest_route( self::$namespace, '/' . self::$rest_base . '/(?P\d+)/customer-questionnaires', array(
+ 'methods' => 'GET',
+ 'callback' => array(__CLASS__, 'get_customer_questionnaires'),
+ 'permission_callback' => 'is_user_logged_in'
+ ) );
+
+ register_rest_route( self::$namespace, '/' . self::$rest_base . '/(?P\d+)/customer-questionnaires/upload/(?P\d+)', array(
+ 'methods' => 'POST',
+ 'callback' => array(__CLASS__, 'upload_customer_questionnaire'),
'permission_callback' => 'is_user_logged_in'
) );
}
@@ -62,14 +77,6 @@ class Wiass_REST_Delivery_Process_API {
'value' => 'pending',
);
- $user_roles = gravity_flow()->get_user_roles();
- foreach ( $user_roles as $user_role ) {
- $field_filters[] = array(
- 'key' => 'workflow_role_' . $user_role,
- 'value' => 'pending',
- );
- }
-
$field_filters['mode'] = 'any';
$search_criteria = array();
@@ -78,10 +85,11 @@ class Wiass_REST_Delivery_Process_API {
$form_ids = gravity_flow()->get_workflow_form_ids();
- $total_count = 7;
-
-
- $entries = GFAPI::get_entries( $form_ids, $search_criteria, null, null, $total_count );
+ $entries = GFAPI::get_entries(
+ $form_ids,
+ $search_criteria,
+ null,
+ null);
$data = array();
foreach ($entries as $entry) {
@@ -97,175 +105,73 @@ class Wiass_REST_Delivery_Process_API {
return rest_ensure_response($data);
}
- public static function get_customer_acceptance(WP_REST_Request $request){
- $entry = GFAPI::get_entry($request['entry_id']);
- if (is_wp_error($entry)){
- return wiaas_api_generate_error('Customer acceptance entry not found', 404);
- }
+ public function get_customer_questionnaires(WP_REST_Request $request) {
- $acceptance_documents = array();
- $uploaded_files = json_decode($entry[self::UPLOADED_FILES_FIELD_ID]);
+ $order_id = absint($request['order_id']);
- foreach($uploaded_files as $file_url){
- //example of decoded url :
- //http://localhost/wp/index.php?gf-download=2018/08/rokovi-1535378841.docx&form-id=1&field-id=12&hash=1be6c30f0eeff93563b352d15fe459d5ded12ee06c2c8f36fed66b42dedf2534
-
- $decoded_url = urldecode($file_url);
- $url_parts = explode('?', $decoded_url);
- $file_name_base_parts = explode('&', $url_parts[1]);
- $file_name_parts = explode('/', $file_name_base_parts[0]);
- $file_name_with_extension_parts = explode('.', $file_name_parts[2]);
+ $data = Wiaas_Delivery_Process::get_customer_questionnaires_data($order_id);
- $acceptance_documents_entry = array(
- 'name' => $file_name_with_extension_parts[0],
- 'extension' => $file_name_with_extension_parts[1],
- 'url' => $file_url
- );
- array_push($acceptance_documents, $acceptance_documents_entry);
- }
-
- $acceptance_status = 0;
- if ($entry[self::ACCEPTANCE_STATUS_FIELD_ID]){
- $acceptance_status = ($entry[self::ACCEPTANCE_STATUS_FIELD_ID] === 'accept') ? 1 : -1;
- }
-
- return rest_ensure_response(array(
- 'documents' => $acceptance_documents,
- 'expiration' => $entry[self::EXPIRATION_DATE_FIELD_ID],
- 'status' => $acceptance_status,
- 'decline_reason' => $entry[self::DECLINE_REASON_FIELD_ID]
- ));
+ return rest_ensure_response($data);
}
- public static function submit_customer_acceptance(WP_REST_Request $request){
- $entry = GFAPI::get_entry($request['entry_id']);
- if (is_wp_error($entry)){
- return wiaas_api_generate_error('Customer acceptance entry not found', 404);
- }
+ public function upload_customer_questionnaire(WP_REST_Request $request) {
- $status = $request['actionType'];
- $reason = $request['declineReason'];
+ $order_id = absint($request['order_id']);
+
+ $action_entry_id = absint($request['action_entry_id']);
+
+ Wiaas_Delivery_Process::upload_customer_questionnaire($order_id, $action_entry_id);
+
+ return wiaas_api_notice('INSTALLATION_ACCEPTED', 'success');
+ }
+
+ public static function get_customer_acceptance(WP_REST_Request $request){
+
+ $order_id = absint($request['order_id']);
+
+ $data = Wiaas_Delivery_Process::get_customer_acceptance_data($order_id);
+
+ return rest_ensure_response($data);
+ }
+
+ public static function submit_customer_acceptance(WP_REST_Request $request) {
+
+ $status = $request['action_type'];
+ $reason = $request['decline_reason'];
if (!in_array($status, self::ACCEPTABLE_STATUS)){
return wiaas_api_notice('ACCEPTANCE_STATUS_MISSING', 'error');
}
$installation_declined = ($status === self::DECLINE_STATUS_LABEL);
-
- $uploaded_files = json_decode($entry[self::UPLOADED_FILES_FIELD_ID]);
-
if ($installation_declined && $reason === ''){
return wiaas_api_notice('DECLINE_REASON_EMPTY', 'error');
}
- if (!$installation_declined && (count($uploaded_files)===0)){
+
+ $order_id = $request['order_id'];
+
+ if (! $installation_declined && ! Wiaas_Delivery_Process::is_customer_acceptance_uploaded($order_id)) {
return wiaas_api_notice('ACCEPTANCE_NOT_UPLOADED', 'error');
}
- $entry[self::DECLINE_REASON_FIELD_ID] = $reason;
- $entry[self::ACCEPTANCE_STATUS_FIELD_ID] = $status;
-
- if (!GFAPI::update_entry( $entry )){
- return wiaas_api_notice('INTERNAL_SERVER_ERROR', 'error');
- }
-
- //Check if step is already completed, to not submit again
- $gf_api = new Gravity_Flow_API($entry['form_id']);
- $current_step = $gf_api->get_current_step($entry);
- if ($current_step->get_name() !== self::USER_INPUT_STEP_NAME){
- return wiaas_api_notice('ACCEPTANCE_STATUS_UPDATED', 'success');
- }
-
- if ( $current_step ) {
- $current_step->purge_assignees();
- $current_step->update_step_status( 'complete' );
- }
- $entry_id = $entry['id'];
- $new_step_id = $current_step->get_id() + 1;
- $new_step = $gf_api->get_step( $new_step_id, $entry );
- $feedback = sprintf( esc_html__( 'Sent to step: %s', 'gravityflow' ), $new_step->get_name() );
- $gf_api->add_timeline_note( $entry_id, $feedback );
- $gf_api->log_activity( 'workflow', 'sent_to_step', $gf_api->form_id, $entry_id, $step_id );
- gform_update_meta( $entry_id, 'workflow_final_status', 'pending' );
- $new_step->start();
- $gf_api->process_workflow( $entry_id );
-
+ Wiaas_Delivery_Process::update_customer_acceptance_status($order_id, $status, $reason);
if ($installation_declined){
return wiaas_api_notice('INSTALLATION_DECLINED', 'success');
}
+
return wiaas_api_notice('INSTALLATION_ACCEPTED', 'success');
}
- public static function upload_file(WP_REST_Request $request){
- $files = $request->get_file_params();
- if (!$files[self::FILE_KEY_NAME]){
- return wiaas_api_notice('NO_FILES_UPLOADED', 'error');
- }
+ public static function upload_customer_acceptance(WP_REST_Request $request){
- $entry = GFAPI::get_entry($request['entry_id']);
- if (is_wp_error($entry)){
- return wiaas_api_generate_error('Customer acceptance entry not found', 404);
- }
+ $order_id = $request['order_id'];
- $form = GFAPI::get_form($entry['form_id']);
- $form_upload_path = GFFormsModel::get_upload_path( $form['id'] );
+ $success = Wiaas_Delivery_Process::upload_customer_acceptance_document($order_id);
- $target_path = $form_upload_path . '/' . date('Y') . '/' . date('m') . '/';
- wp_mkdir_p( $target_path );
- GFCommon::recursive_add_index_file( $target_path );
- $upload_file_field = GFAPI::get_field($form['id'], self::UPLOADED_FILES_FIELD_ID);
- $file_name = sanitize_file_name($files[self::FILE_KEY_NAME]['name']);
- $file_path_details = pathinfo($file_name);
-
- if ( GFCommon::file_name_has_disallowed_extension( $file_name ) ) {
- return wiaas_api_notice('INVALID_FILE_ACCEPTANCE', 'error');
- }
- $allowed_extensions = ! empty( $upload_file_field->allowedExtensions ) ? GFCommon::clean_extensions( explode( ',', strtolower( $upload_file_field->allowedExtensions ) ) ) : array();
- if ( ! empty( $allowed_extensions ) ) {
- if ( ! GFCommon::match_file_extension( $file_name, $allowed_extensions ) ) {
- return wiaas_api_notice('INVALID_FILE_ACCEPTANCE', 'error');
- }
- }
-
- $new_file_name = $file_path_details['filename'] . '-' . time() . '.' . $file_path_details['extension'];
-
- // Bypasses security checks when running unit tests.
- if ( defined( 'WP_TEST_IN_PROGRESS' ) && WP_TEST_IN_PROGRESS ) {
- return wiaas_api_notice('FILE_UPLOADED', 'success');
- }
-
- if ( move_uploaded_file($files[self::FILE_KEY_NAME]['tmp_name'], $target_path . $new_file_name ) ) {
- GFFormsModel::set_permissions( $target_path . $new_file_name );
- } else {
- return wiaas_api_notice('INTERNAL_SERVER_ERROR', 'error');
- }
-
- //Extract path relative to the root
- //Last 6 strings (excluding last empty) are path relative to the root
- $path_parts = explode('/', $target_path);
-
- $relative_path = '';
- $i = count($path_parts) - self::PATH_PARTS_TO_EXTRACT;
- while($i < count($path_parts)-1){
- $relative_path = $relative_path . $path_parts[$i] . '/';
- $i++;
- }
-
- $file_url = self::BASE_NAME . $relative_path . $new_file_name;
- $url_for_download = $upload_file_field->get_download_url($file_url);
-
- $uploaded_files = json_decode($entry[self::UPLOADED_FILES_FIELD_ID]);
-
- if ($uploaded_files === NULL){
- $uploaded_files = [];
- }
- array_push($uploaded_files, $url_for_download);
-
- $entry[self::UPLOADED_FILES_FIELD_ID] = json_encode($uploaded_files);
-
- if (GFAPI::update_entry( $entry )) {
+ if ($success) {
return wiaas_api_notice('FILE_UPLOADED','success');
}
diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-admin.php b/backend/app/plugins/wiaas/includes/class-wiaas-admin.php
index fa71d4c..6d5021e 100644
--- a/backend/app/plugins/wiaas/includes/class-wiaas-admin.php
+++ b/backend/app/plugins/wiaas/includes/class-wiaas-admin.php
@@ -1,12 +1,9 @@
add_meta_data( '_wiaas_documents', $item_documents, true );
}
+ // save simple product information that needs to be available later on
+ // even if this data is changed or removed from product at that time
+ if($is_bundled_item) {
+
+ $product = wc_get_product($cart_item['product_id']);
+
+ $order_item->add_meta_data('_wiaas_category', Wiaas_Product_Category::get_category($product), true);
+
+ $order_item->add_meta_data('_wiaas_manufacturer_product_no', $product->get_meta('_manufacturer_product_no'), true);
+ $order_item->add_meta_data('_wiaas_supplier_product_no', $product->get_meta('_supplier_product_no'), true);
+
+ // get supplier
+ if ($supplier_organization_id = Wiaas_Product_Supplier::get_supplier_organisation_id_from_product($cart_item['product_id'])) {
+
+ $order_item->add_meta_data('_wiaas_supplier_organization_id', $supplier_organization_id, true);
+ }
+
+ // save bundled product item total cost (price x period)
+ $product_price = Wiaas_Pricing::get_product_total_cost($product);
+ $order_item->add_meta_data('_wiaas_product_price', $product_price, true);
+ }
+
+ // save number of days before earliest installation for bundles
+ if ($is_bundle_item) {
+ $order_item->add_meta_data(
+ '_wiaas_earliest_installation_additional_days',
+ Wiaas_Package::get_earliest_installation_additional_days($cart_item['product_id']),
+ true);
+ }
+
return $order_item;
}
@@ -405,6 +443,12 @@ class Wiaas_Cart {
'_wiaas_option_group_name',
'_wiaas_standard_package',
'_wiaas_documents',
+ '_wiaas_category',
+ '_wiaas_manufacturer_product_no',
+ '_wiaas_supplier_product_no',
+ '_wiaas_supplier_organization_id',
+ '_wiaas_product_price',
+ '_wiaas_earliest_installation_additional_days'
) );
}
@@ -431,54 +475,70 @@ class Wiaas_Cart {
$order->add_meta_data('_wiaas_commercial_lead_id', $shop_owner_id);
- // add suppliers to order
- $suppliers = array();
+ // add supplier organizations information to order
+ // save installation suppliers separately
+ $suppliers_info = array();
+ $installation_suppliers_info = array();
+
$items = $order->get_items('line_item');
- foreach($items as $item){
- $product = wc_get_product($item['product_id']);
+ foreach($items as $item) {
- if ($product->is_type('simple') && !Wiaas_Product_Category::is_installation($product)){
- $supplier_id = Wiaas_Product::get_supplier_id($product->id);
- $supplier_name = wiaas_get_organization_name($supplier_id);
- if (!isset($suppliers[$supplier_id])){
- $suppliers[$supplier_id] = array(
- 'id' => $supplier_id,
- 'name' => $supplier_name,
- 'estimated_date' => NULL,
- 'confirmed_date' => NULL,
- 'tracking_info' => array(),
- 'items' => array($product->id)
- );
- }else{
- $suppliers[$supplier_id]['items'][] = $product->id;
+ $supplier_organization_id = $item['wiaas_supplier_organization_id'];
+
+ if (! empty($supplier_organization_id) && $item['wiaas_category'] !== 'installation' &&
+ empty($suppliers_info[$supplier_organization_id]) ) {
+
+ $suppliers_info[$supplier_organization_id] = array(
+ 'id' => $supplier_organization_id,
+ 'estimated_delivery_date' => null,
+ 'confirmed_delivery_date' => null,
+ 'tracking_info' => array(),
+ );
+
+ $supplier_organization_info = wiaas_get_organization_info($supplier_organization_id);
+ foreach ($supplier_organization_info as $key => $info) {
+ $suppliers_info[$supplier_organization_id][$key] = $info;
+ }
+ }
+
+ if (! empty($supplier_organization_id) && $item['wiaas_category'] === 'installation' &&
+ empty($installation_suppliers_info[$supplier_organization_id]) ) {
+
+ $installation_suppliers_info[$supplier_organization_id] = array(
+ 'id' => $supplier_organization_id,
+ );
+
+ $supplier_organization_info = wiaas_get_organization_info($supplier_organization_id);
+ foreach ($supplier_organization_info as $key => $info) {
+ $installation_suppliers_info[$supplier_organization_id][$key] = $info;
}
}
}
- $order->add_meta_data('_wiaas_suppliers', $suppliers, true);
+ $order->add_meta_data('_wiaas_delivery_suppliers', $suppliers_info, true);
+ $order->add_meta_data('_wiaas_installation_suppliers', $installation_suppliers_info, true);
// add additional date fields to order
- $order->add_meta_data('_wiaas_estimated_delivery_date', NULL, true);
- $order->add_meta_data('_wiaas_final_estimated_delivery_date', 0, true);
- $order->add_meta_data('_wiaas_final_confirmed_delivery_date', 0, true);
- $order->add_meta_data('_wiaas_earliest_installation_date', 0, true);
+ $order->add_meta_data('_wiaas_estimated_delivery_date', null, true);
+ $order->add_meta_data('_wiaas_final_estimated_delivery_date', null, true);
+ $order->add_meta_data('_wiaas_final_confirmed_delivery_date', null, true);
+ $order->add_meta_data('_wiaas_earliest_installation_date', null, true);
- //add additional days prior installation field
- $max_additional_days = 0;
+ // calculate number of days before earlier installation for whole order
+ $earliest_installation_additional_days = 0;
$items = $order->get_items('line_item');
- foreach($items as $item){
- $product = wc_get_product($item['product_id']);
- if ($product->get_type() === 'bundle'){
- $package_additional_days = Wiaas_Package::get_earliest_installation_additional_days($product->id);
- if ($package_additional_days > $max_additional_days){
- $max_additional_days = $package_additional_days;
- }
+ foreach($items as $item) {
+
+ if (! empty($item['_wiaas_earliest_installation_additional_days'])) {
+
+ $additional_days = absint($item['_wiaas_earliest_installation_additional_days']);
+ $earliest_installation_additional_days = max($additional_days, $earliest_installation_additional_days);
}
}
- $order->add_meta_data('_wiaas_order_additional_days_prior_installation', $max_additional_days, true);
+ $order->add_meta_data('_wiaas_order_additional_days_prior_installation', $earliest_installation_additional_days, true);
}
diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-countries.php b/backend/app/plugins/wiaas/includes/class-wiaas-countries.php
index 2e42185..a88c14f 100644
--- a/backend/app/plugins/wiaas/includes/class-wiaas-countries.php
+++ b/backend/app/plugins/wiaas/includes/class-wiaas-countries.php
@@ -62,6 +62,19 @@ class Wiaas_Countries {
return '';
}
+ public static function get_country_code_by_currency($currency) {
+
+ foreach (self::$available_countries as $country) {
+
+ if ($country['currency'] === $currency) {
+
+ return $country['code'];
+ }
+ }
+
+ return null;
+ }
+
/**
* Registers product taxonomy for avaiable countries
*/
diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php b/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php
index 85844f8..4107f47 100644
--- a/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php
+++ b/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php
@@ -6,7 +6,6 @@ class Wiaas_DB_Update {
private static $db_updates = array(
'20180801222206' => 'wiaas_db_update_setup_gravity',
- '20180802222206' => 'wiaas_db_update_add_delivery_process_forms',
'20180811134511' => 'wiaas_db_update_enable_orders_access_management',
'20180911101010' => 'wiaas_db_setup_exclusive_taxonomies',
'20181003164100' => 'wiaas_db_setup_customer_capabilities',
@@ -24,7 +23,9 @@ class Wiaas_DB_Update {
'20181019064450' => 'wiaas_db_update_add_bundle_properties_ui_field',
'20191020014650' => 'wiaas_create_organization_roles_capabilities',
'20191030162450' => 'wiaas_db_update_update_supplier_order_capabilities',
- '20191102112451' => 'wiaas_disable_processing_order_email_delivery'
+ '20191102112451' => 'wiaas_disable_processing_order_email_delivery',
+ '20191131172850' => 'wiaas_db_update_update_delivery_forms',
+ '20191131182856' => 'wiaas_db_update_enable_workflow_inbox_for_roles'
);
public static function execute() {
diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-delivery-process.php b/backend/app/plugins/wiaas/includes/class-wiaas-delivery-process.php
index 9e9a4de..b1cd25d 100644
--- a/backend/app/plugins/wiaas/includes/class-wiaas-delivery-process.php
+++ b/backend/app/plugins/wiaas/includes/class-wiaas-delivery-process.php
@@ -10,51 +10,73 @@ defined( 'ABSPATH' ) || exit;
class Wiaas_Delivery_Process {
- private static $process_form_title_prefix = 'DELIVERY PROCESS:';
-
public static function init() {
- self::_register_delivery_process_step_type();
+ self::_register_delivery_process();
self::_init_hooks();
}
private static function _init_hooks() {
- add_filter( 'gform_entry_meta', array(__CLASS__, 'extend_gravity_form_entry_meta'), 10, 2 );
- add_action( 'gravityflow_workflow_complete', array(__CLASS__, 'maybe_complete_parent_process_step'), 5, 3 );
- add_action( 'gravityflow_workflow_complete', array(__CLASS__, 'maybe_complete_parent_order'), 10, 3 );
-
- // Some temporary functions to make inbox page prettier
- add_filter('gravityflow_inbox_submitter_name', array(__CLASS__, 'display_step_name_in_inbox'), 10, 3);
- add_filter('gravityflow_approve_label_workflow_detail', array(__CLASS__, 'approval_step_approval_label'), 10, 2);
- add_filter('gravityflow_reject_label_workflow_detail', array(__CLASS__, 'approval_step_reject_label'), 10, 2);
+ add_action( 'gravityflow_workflow_complete', array(__CLASS__, 'maybe_complete_parent_order'), 10, 2 );
}
- public static function approval_step_approval_label($label, $step) {
- if ($step->get_name() === 'Complete step') {
- return esc_html__( 'Complete step', 'wiaas' );
- }
- return $label;
- }
-
- public static function approval_step_reject_label($label, $step) {
- if ($step->get_name() === 'Complete step') {
- return esc_html__( 'Cancel', 'wiaas' );
- }
- return $label;
- }
-
- public static function display_step_name_in_inbox($name, $entry, $form) {
- return $entry['wiaas_delivery_step_name'];
- }
-
/**
- * Registers our Delivery Process Step Type as available Gravity Flow Step Type
+ *
+ * Registers our Delivery Process Addons
+ *
*/
- private static function _register_delivery_process_step_type() {
+ private static function _register_delivery_process() {
+ require_once( 'delivery-process/class-wiaas-delivery-process-addon.php' );
+ require_once( 'delivery-process/class-wiaas-delivery-process-action.php' );
+ require_once( 'delivery-process/class-wiaas-delivery-process-step-assignee.php' );
require_once( 'delivery-process/class-wiaas-delivery-process-step.php' );
+ // order fields
+ require_once( 'delivery-process/class-wiaas-order-fields.php' );
+
+ require_once( 'delivery-process/class-wiaas-field-order-number.php' );
+ require_once( 'delivery-process/class-wiaas-field-order-bundle.php' );
+ require_once( 'delivery-process/class-wiaas-field-order-installation-select.php' );
+ require_once( 'delivery-process/class-wiaas-field-order-bundle-document.php' );
+ require_once( 'delivery-process/class-wiaas-field-order-document.php' );
+
Gravity_Flow_Steps::register( new Wiaas_Delivery_Process_Step() );
+
+ GFAddOn::register( 'Wiaas_Delivery_Process_Addon' );
+ }
+
+
+ public static function create_delivery_process_for_order($order_id, $process_id) {
+
+ $process_form = null;
+ $process_form = GFAPI::get_form($process_id);
+
+ if( $process_form ) {
+
+ $new_process_entry = array(
+ 'wiaas_delivery_order_id' => $order_id,
+ 'form_id' => $process_id,
+ );
+
+ $order_fields = GFCommon::get_fields_by_type($process_form, array('wiaas_order'));
+
+
+ if (! empty($order_fields)) {
+
+ $order_field = $order_fields[0];
+
+ $new_process_entry[$order_field['id']] = $order_id;
+ }
+
+ $process_entry_id = GFAPI::add_entry( $new_process_entry );
+
+ update_post_meta($order_id, 'wiaas_delivery_process_id', $process_id);
+ update_post_meta($order_id, 'wiaas_delivery_process_entry_id', $process_entry_id);
+
+ return $process_entry_id;
+ }
+ return false;
}
/**
@@ -63,9 +85,10 @@ class Wiaas_Delivery_Process {
* @param $form
*/
public static function maybe_complete_parent_order($entry_id, $form) {
+
$entry = GFAPI::get_entry($entry_id);
- $order_id = $entry['wiaas_delivery_order_id'];
+ $order_id = $entry['wiaas_delivery_order_id'];
if (!isset($order_id)) {
return;
@@ -74,45 +97,181 @@ class Wiaas_Delivery_Process {
$process_entry_id = get_post_meta($order_id, 'wiaas_delivery_process_entry_id', true);
// order process entry completed, so complete order
- if (absint($process_entry_id) === $entry_id) {
+ if (absint($process_entry_id) === absint($entry_id)) {
$order = wc_get_order($order_id);
$order->update_status('completed', 'Completed order delivery process.', true);
}
- }
-
- /**
- * List available delivery processes
- *
- * @return array
- */
- public static function get_available_delivery_processes(){
- $forms = GFFormsModel::search_forms( self::$process_form_title_prefix, true );
- $result = array();
- foreach($forms as $form){
- $result[] = array(
- 'title' => str_replace(self::$process_form_title_prefix, '', $form->title),
- 'id' => $form->id
- );
+ }
+
+ public static function get_available_process_list_for_country($country_code) {
+
+ $forms = GFAPI::get_forms();
+
+ $available_process_forms = array();
+
+ foreach ($forms as $form) {
+
+ $delivery_settings = rgar($form, 'wiaas_delivery_process');
+
+ if ($delivery_settings['delivery_form_type'] === 'process' &&
+ $delivery_settings['delivery_country'] === $country_code) {
+
+ $available_process_forms[] = $form;
+ }
}
- return $result;
- }
+ return $available_process_forms;
+ }
- public static function get_active_step($order_id){
- $process_entry_id = get_post_meta($order_id, 'wiaas_delivery_process_entry_id');
- if (empty($process_entry_id)) {
- return null;
+
+ public static function get_customer_acceptance_data($order_id) {
+
+ $delivery_process_entry = self::get_order_delivery_process_entry($order_id);
+
+ $data = array();
+
+ if (! empty($delivery_process_entry)) {
+
+ $workflow = new Gravity_Flow_API($delivery_process_entry['form_id']);
+
+ $step = $workflow->get_current_step($delivery_process_entry);
+
+ if ($step && Wiaas_Delivery_Process_Action::process_step_has_customer_acceptance_action($step)) {
+
+ $action_entries = Wiaas_Delivery_Process_Action::get_process_step_action_entries($step);
+
+ $action_entry = $action_entries[0];
+
+ $data[] = Wiaas_Delivery_Process_Action::get_customer_acceptance_action_data($action_entry['id']);
+ }
}
- $process_instance = GFAPI::get_entry($process_entry_id);
- $api = new Gravity_Flow_API($process_instance['form_id']);
- $steps_info = $api->get_steps();
+ return empty( $data ) ? $data : $data[0];
+ }
- foreach ( $steps_info as $step_info ) {
- return $api->get_step( $step_info->get_id(), $process_instance );
- }
- return null;
- }
+ public static function get_customer_questionnaires_data($order_id) {
+
+ $data = array();
+
+ $delivery_process_entry = self::get_order_delivery_process_entry($order_id);
+
+ if (! empty($delivery_process_entry)) {
+
+ $workflow = new Gravity_Flow_API($delivery_process_entry['form_id']);
+
+ $step = $workflow->get_current_step($delivery_process_entry);
+
+ if ($step && Wiaas_Delivery_Process_Action::process_step_has_customer_validate_questionnaires_action($step)) {
+
+ $action_entries = Wiaas_Delivery_Process_Action::get_process_step_action_entries($step);
+
+ foreach ($action_entries as $action_entry) {
+
+ $action_data = Wiaas_Delivery_Process_Action::get_customer_validate_questionnaires_action_data($action_entry['id']);
+
+ if (! empty($action_data)) {
+
+ $data[] = $action_data;
+ }
+ }
+ }
+
+ }
+
+ return $data;
+ }
+
+ public static function update_customer_acceptance_status($order_id, $status, $reason) {
+
+ $delivery_process_entry = self::get_order_delivery_process_entry($order_id);
+
+ if (! empty($delivery_process_entry) ) {
+
+ $workflow = new Gravity_Flow_API($delivery_process_entry['form_id']);
+
+ $step = $workflow->get_current_step($delivery_process_entry);
+
+ $action_entries = Wiaas_Delivery_Process_Action::get_process_step_action_entries($step);
+
+ $action_entry = $action_entries[0];
+
+ Wiaas_Delivery_Process_Action::update_customer_acceptance_status($action_entry['id'], $status, $reason);
+
+ if ($status === 'accept') {
+
+ Wiaas_Delivery_Process_Action::complete_action_step($action_entry['id']);
+ }
+ }
+ }
+
+ public static function is_customer_acceptance_uploaded($order_id) {
+
+ $delivery_process_entry = self::get_order_delivery_process_entry($order_id);
+
+ if (! empty($delivery_process_entry) ) {
+
+ $workflow = new Gravity_Flow_API($delivery_process_entry['form_id']);
+
+ $step = $workflow->get_current_step($delivery_process_entry);
+
+ $action_entries = Wiaas_Delivery_Process_Action::get_process_step_action_entries($step);
+
+ $action_entry = $action_entries[0];
+
+ return Wiaas_Delivery_Process_Action::is_customer_acceptance_uploaded($action_entry['id']);
+ }
+
+ return false;
+ }
+
+ public static function upload_customer_questionnaire($order_id, $action_entry_id) {
+
+ Wiaas_Delivery_Process_Action::upload_customer_questionnaire($action_entry_id);
+
+ Wiaas_Delivery_Process_Action::complete_action_step($action_entry_id);
+ }
+
+ public static function upload_customer_acceptance_document($order_id) {
+
+ $delivery_process_entry = self::get_order_delivery_process_entry($order_id);
+
+ if (! empty($delivery_process_entry) ) {
+
+ $workflow = new Gravity_Flow_API($delivery_process_entry['form_id']);
+
+ $step = $workflow->get_current_step($delivery_process_entry);
+
+ $action_entries = Wiaas_Delivery_Process_Action::get_process_step_action_entries($step);
+
+ $action_entry = $action_entries[0];
+
+ $success = Wiaas_Delivery_Process_Action::upload_customer_acceptance_document($action_entry['id']);
+
+ if ($success) {
+
+ Wiaas_Delivery_Process_Action::complete_action_step($action_entry['id']);
+ }
+
+ return $success;
+ }
+
+ return false;
+ }
+
+
+ public static function get_order_delivery_process_entry($order_id) {
+
+ $order = wc_get_order($order_id);
+
+ $process_entry_id = $order->get_meta('wiaas_delivery_process_entry_id', true);
+
+ if (empty($process_entry_id)) {
+
+ return array();
+ }
+
+ return GFAPI::get_entry($process_entry_id);
+ }
/**
* Retrieves delivery process instance for order
@@ -123,7 +282,8 @@ class Wiaas_Delivery_Process {
*/
public static function get_order_delivery_process($order_id) {
- $process_entry_id = get_post_meta($order_id, 'wiaas_delivery_process_entry_id');
+ $process_entry_id = get_post_meta($order_id, 'wiaas_delivery_process_entry_id', true);
+
if (empty($process_entry_id)) {
return null;
}
@@ -139,117 +299,57 @@ class Wiaas_Delivery_Process {
$delivery_process = array(
'id' => $process_form['id'],
'name' => $process_form['title'],
- 'steps' => array()
+ 'steps' => array(
+ array(
+ 'short_desc' => 'Order placed',
+ 'status' => 'complete',
+ 'order_id' => $order_id,
+ 'process_id' => $process_entry_id,
+ 'step_id' => -1,
+ ),
+ array(
+ 'short_desc' => 'Assign process',
+ 'status' => 'complete',
+ 'order_id' => $order_id,
+ 'process_id' => $process_entry_id,
+ 'step_id' => 0,
+ )
+ )
);
- foreach ( $steps_info as $step_info ) {
- $step = $api->get_step( $step_info->get_id(), $process_instance );
+ $current_step = $api->get_current_step($process_instance);
+ foreach ( $steps_info as $step_info ) {
+ $step = $api->get_step( $step_info->get_id(), $process_instance );
+
+ if (! $step->is_visible_to_customer) {
+
+ continue;
+ }
+
+ $action_code = Wiaas_Delivery_Process_Action::get_process_step_action_form_action_code($step);
$info = $step->get_feed_meta();
+
+ $status = $step->get_status();
+
+ if ($current_step && $current_step->get_id() === $step->get_id()) {
+ $status = 'pending';
+ }
+
+
$delivery_process['steps'][] = array(
'step_id' => $step->get_id(),
- 'step_form_entry_id' => $step->get_target_form_entry_id() ?: null,
+ 'process_id' => $process_entry_id,
'short_desc' => $info['step_name'],
'full_desc' => $info['description'],
- 'action_code' => $step->get_delivery_action_type(),
- 'step_type' => $step->get_delivery_action_type() === 'manual' ? 'manual' : 'extraAction',
- 'status' => $step->get_status() ?: 'inactive',
+ 'action_code' => $action_code,
+ 'status' => $status,
'order_id' => $order_id,
- 'actual_date' => $step->get_target_actual_date(),
- 'comments' => $step->get_target_step_comments(),
);
}
return $delivery_process;
}
-
- /**
- * create delivery process instance
- * @param $order_id
- */
- public static function create_delivery_process_for_order($order_id, $form_id) {
- $process_form = null;
- $forms = GFFormsModel::search_forms( self::$process_form_title_prefix, true );
- $process_form = GFFormsModel::get_form($form_id);
- if(isset($process_form)) {
- $order = wc_get_order( $order_id );
- $new_process_entry = array(
- 'form_id' => $process_form->id,
- '2' => $order->get_customer_id(),
- 'wiaas_delivery_order_id' => $order_id,
- );
- $process_entry_id = GFAPI::add_entry( $new_process_entry );
-
- add_post_meta($order_id, 'wiaas_delivery_process_id', $process_form->id);
- add_post_meta($order_id, 'wiaas_delivery_process_entry_id', $process_entry_id);
-
- return true;
- }
- return false;
- }
-
- /**
- * Extends Gravity Form entry metadata with 'wiaas_delivery_process_id'
- *
- * This way we can track for each delivery step its parent process
- * @param $entry_meta
- *
- * @return mixed
- */
- public static function extend_gravity_form_entry_meta($entry_meta) {
- $entry_meta[ 'wiaas_delivery_process_id' ] = array(
- 'label' => 'Wiaas Delivery Process Id',
- 'is_numeric' => true,
- 'update_entry_meta_callback' => null,
- 'is_default_column' => false, // this column will be displayed by default on the entry list
- 'filter' => array(
- 'operators' => array( 'is' ),
- ),
- );
-
- $entry_meta[ 'wiaas_delivery_order_id' ] = array(
- 'label' => 'Wiaas Delivery Process Order Id',
- 'is_numeric' => true,
- 'update_entry_meta_callback' => null,
- 'is_default_column' => false, // this column will be displayed by default on the entry list
- 'filter' => array(
- 'operators' => array( 'is' ),
- ),
- );
-
- $entry_meta[ 'wiaas_delivery_step_name' ] = array(
- 'label' => 'Wiaas Delivery Step name',
- 'is_numeric' => false,
- 'update_entry_meta_callback' => null,
- 'is_default_column' => false, // this column will be displayed by default on the entry list
- 'filter' => array(
- 'operators' => array( 'is' ),
- ),
- );
-
- return $entry_meta;
- }
-
- /**
- * Process parent process when single step workflow has completed
- * @param $entry_id
- * @param $form
- * @param $final_status
- */
- public static function maybe_complete_parent_process_step($entry_id, $form) {
- $entry = GFAPI::get_entry($entry_id);
- $parent_entry_id = $entry['wiaas_delivery_process_id'];
-
- if (empty($parent_entry_id)) {
- return false;
- }
-
- $parent_entry_id = absint( $parent_entry_id );
- $parent_entry = GFAPI::get_entry( $parent_entry_id );
-
- $parent_api = new Gravity_Flow_API( $parent_entry['form_id'] );
- $parent_api->process_workflow( $parent_entry_id );
- }
}
add_action( 'gravityflow_loaded', array('Wiaas_Delivery_Process', 'init') );
diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-order.php b/backend/app/plugins/wiaas/includes/class-wiaas-order.php
index 618a7ea..868eee1 100644
--- a/backend/app/plugins/wiaas/includes/class-wiaas-order.php
+++ b/backend/app/plugins/wiaas/includes/class-wiaas-order.php
@@ -18,6 +18,7 @@ class Wiaas_Order {
public static function init() {
require_once dirname( __FILE__ ) . '/order/class-wiaas-order-project.php';
+ require_once dirname( __FILE__ ) . '/order/wiaas-order-functions.php';
add_filter('woocommerce_register_post_type_shop_order', array(__CLASS__, 'manage_order_settings'));
@@ -59,7 +60,7 @@ class Wiaas_Order {
);
$order = wc_get_order($order_id);
- $order->update_meta_data('_wiaas_suppliers', $suppliers);
+ $order->update_meta_data('_wiaas_delivery_suppliers', $suppliers);
$order->save_meta_data();
return true;
}
@@ -77,7 +78,7 @@ class Wiaas_Order {
$order = wc_get_order($order_id);
- $order->update_meta_data('_wiaas_suppliers', $suppliers);
+ $order->update_meta_data('_wiaas_delivery_suppliers', $suppliers);
$order->save_meta_data();
return true;
}
@@ -93,7 +94,7 @@ class Wiaas_Order {
unset($suppliers[$key]['tracking_info'][$tracking_index]);
$order = wc_get_order($order_id);
- $order->update_meta_data('_wiaas_suppliers', $suppliers);
+ $order->update_meta_data('_wiaas_delivery_suppliers', $suppliers);
$order->save_meta_data();
return true;
}
@@ -118,7 +119,7 @@ class Wiaas_Order {
$order = wc_get_order($order_id);
- $order->update_meta_data('_wiaas_suppliers', $suppliers);
+ $order->update_meta_data('_wiaas_delivery_suppliers', $suppliers);
self::_update_max_and_earliest_dates($order, $suppliers);
$order->save_meta_data();
@@ -126,8 +127,10 @@ class Wiaas_Order {
}
public static function save_confirmed_date($order_id, $supplier_id, $date){
+
$suppliers = self::get_suppliers($order_id);
$updated = false;
+
foreach($suppliers as $key => $supplier){
if ($supplier['id'] === $supplier_id){
$suppliers[$key]['confirmed_date'] = $date;
@@ -144,7 +147,7 @@ class Wiaas_Order {
$order = wc_get_order($order_id);
- $order->update_meta_data('_wiaas_suppliers', $suppliers);
+ $order->update_meta_data('_wiaas_delivery_suppliers', $suppliers);
self::_update_max_and_earliest_dates($order, $suppliers);
$order->save_meta_data();
@@ -197,7 +200,7 @@ class Wiaas_Order {
*/
public static function get_suppliers($order_id){
$order = wc_get_order($order_id);
- return $order->get_meta('_wiaas_suppliers');
+ return $order->get_meta('_wiaas_delivery_suppliers');
}
/**
@@ -357,46 +360,31 @@ class Wiaas_Order {
$max_confirmed_date = 0;
$earliest_installation_date = 0;
$missing_estimated = false;
- $missing_confirmed = false;
- $no_earliest = false;
- foreach($suppliers as $supplier){
- if (!$supplier['estimated_date']){
- $missing_estimated = true;
- }
- if (!$supplier['confirmed_date']){
+ foreach($suppliers as $supplier) {
+
+ if (! empty($supplier['confirmed_date']) ) {
+
+ $max_confirmed_date = max($max_confirmed_date, $supplier['confirmed_date']);
+ } else {
+
$missing_confirmed = true;
}
- if ($supplier['estimated_date'] > $max_estimated_date){
- $max_estimated_date = $supplier['estimated_date'];
- }
- if ($supplier['confirmed_date'] > $max_confirmed_date){
- $max_confirmed_date = $supplier['confirmed_date'];
- }
+ if (! empty($supplier['estimated_date']) ) {
- if (!$no_earliest){
- $supplier_date = $supplier['estimated_date'];
- if ($supplier['confirmed_date'] > $supplier_date){
- $supplier_date = $supplier['confirmed_date'];
- }
- if ($supplier_date > 0){
- if ($supplier_date > $earliest_installation_date){
- $earliest_installation_date = $supplier_date;
- }
- }else{
- $no_earliest = true;
- $earliest_installation_date = 0;
- }
+ $max_estimated_date = max($max_estimated_date, $supplier['estimated_date']);
+
+ } else {
+
+ $missing_estimated = true;
+ $earliest_installation_date = 0;
}
}
- if ($missing_estimated && $missing_confirmed){
- $no_earliest = true;
- $earliest_installation_date = 0;
- }
+ if (! $missing_estimated) {
- if (!$no_earliest){
+ $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);
}
diff --git a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery-action-forms.json b/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery-action-forms.json
new file mode 100644
index 0000000..9bcd15e
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery-action-forms.json
@@ -0,0 +1,1777 @@
+{
+ "0": {
+ "title": "ACTION: Validate Customer Questionnaire",
+ "description": "Bundle configuration for supplier.",
+ "labelPlacement": "top_label",
+ "descriptionPlacement": "below",
+ "button": {
+ "type": "text",
+ "text": "Submit",
+ "imageUrl": ""
+ },
+ "fields": [
+ {
+ "type": "wiaas_order",
+ "id": 12,
+ "label": "Order Number",
+ "adminLabel": "",
+ "isRequired": true,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": "12",
+ "description": "",
+ "allowsPrepopulate": true,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "order_id",
+ "noDuplicates": false,
+ "defaultValue": "0",
+ "choices": "",
+ "conditionalLogic": "",
+ "enableCalculation": false,
+ "numberFormat": "decimal_dot",
+ "rangeMin": "",
+ "rangeMax": "",
+ "productField": "",
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "displayOnly": "",
+ "enablePrice": ""
+ },
+ {
+ "type": "workflow_user",
+ "id": 18,
+ "label": "Customer User:",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "choices": [
+ {
+ "value": 4,
+ "text": "AA aa"
+ },
+ {
+ "value": 2,
+ "text": "Commercial User"
+ },
+ {
+ "value": 3,
+ "text": "Customer User"
+ },
+ {
+ "value": 6,
+ "text": "Supplier 2 Jonson"
+ },
+ {
+ "value": 5,
+ "text": "Supplier1 Jonson"
+ },
+ {
+ "value": 1,
+ "text": "wpUser"
+ }
+ ],
+ "formId": "12",
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "conditionalLogic": "",
+ "failed_validation": "",
+ "productField": "",
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "gravityflowUsersRoleFilter": ""
+ },
+ {
+ "type": "wiaas_order_bundle",
+ "id": 13,
+ "label": "Bundle",
+ "adminLabel": "",
+ "isRequired": true,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": "12",
+ "description": "",
+ "allowsPrepopulate": true,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "bundle_id",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": [],
+ "conditionalLogic": "",
+ "productField": "",
+ "displayOnly": "",
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "enablePrice": ""
+ },
+ {
+ "type": "wiaas_order_bundle_document",
+ "wiaasDocTypeFilter": "order_questionaire",
+ "id": 17,
+ "label": "Questionnaire Document",
+ "adminLabel": "",
+ "isRequired": true,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": "12",
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": "",
+ "conditionalLogic": "",
+ "maxFileSize": "",
+ "maxFiles": "",
+ "multipleFiles": false,
+ "allowedExtensions": "",
+ "productField": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "displayOnly": "",
+ "enablePrice": ""
+ },
+ {
+ "type": "workflow_discussion",
+ "id": 9,
+ "label": "Notes",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "small",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": "12",
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": "",
+ "conditionalLogic": "",
+ "productField": "",
+ "form_id": "",
+ "useRichTextEditor": false,
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "displayOnly": "",
+ "enablePrice": ""
+ }
+ ],
+ "version": "2.3.2",
+ "id": "12",
+ "useCurrentUserAsAuthor": true,
+ "postContentTemplateEnabled": false,
+ "postTitleTemplateEnabled": false,
+ "postTitleTemplate": "",
+ "postContentTemplate": "",
+ "lastPageButton": null,
+ "pagination": null,
+ "firstPageCssClass": null,
+ "gravityflowparentchild": {
+ "parent_form_1": "0",
+ "parent_form_3": "0",
+ "parent_form_4": "0",
+ "parent_form_5": "1",
+ "parent_form_6": "0",
+ "parent_form_7": "0",
+ "parent_form_11": "0",
+ "parent_form_12": "0"
+ },
+ "wiaas_delivery": {
+ "delivery_form_type": "action",
+ "automatic_step_entries_enabled": "1",
+ "automatic_action_entries_type": "bundle"
+ },
+ "is_active": "1",
+ "date_created": "2018-10-28 15:09:59",
+ "is_trash": "0",
+ "wiaas_delivery_process": {
+ "delivery_form_type": "action",
+ "delivery_action_code": "validate-questionnaire",
+ "automatic_action_entries_enabled": "1",
+ "automatic_action_entries_type": "bundle"
+ },
+ "confirmations": [
+ {
+ "id": "5bd4e2eeaf4c1",
+ "name": "Default Confirmation",
+ "isDefault": true,
+ "type": "message",
+ "message": "Thanks for contacting us! We will get in touch with you shortly.",
+ "url": "",
+ "pageId": "",
+ "queryString": ""
+ }
+ ],
+ "notifications": [
+ {
+ "id": "5bd4e2eeaef5b",
+ "to": "{admin_email}",
+ "name": "Admin Notification",
+ "event": "form_submission",
+ "toType": "email",
+ "subject": "New submission from {form_title}",
+ "message": "{all_fields}"
+ }
+ ],
+ "feeds": {
+ "gravityflow": [
+ {
+ "id": "27",
+ "form_id": "12",
+ "is_active": "1",
+ "feed_order": "0",
+ "meta": {
+ "step_name": "Approve configuration info",
+ "description": "",
+ "step_type": "approval",
+ "step_highlight": "0",
+ "step_highlight_type": "color",
+ "step_highlight_color": "#dd3333",
+ "feed_condition_conditional_logic": "0",
+ "feed_condition_conditional_logic_object": {
+ "conditionalLogic": {
+ "actionType": "show",
+ "logicType": "all",
+ "rules": [
+ {
+ "fieldId": "12",
+ "operator": "isnot",
+ "value": "0"
+ }
+ ]
+ }
+ },
+ "scheduled": "0",
+ "schedule_type": "delay",
+ "schedule_date": "",
+ "schedule_delay_offset": "",
+ "schedule_delay_unit": "hours",
+ "schedule_date_field_offset": "0",
+ "schedule_date_field_offset_unit": "hours",
+ "schedule_date_field_before_after": "after",
+ "type": "select",
+ "assignees": [
+ "role|administrator"
+ ],
+ "routing": [
+ {
+ "assignee": "user_id|2",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "assignee_policy": "all",
+ "instructionsEnable": "1",
+ "instructionsValue": "Review customer configuration for {Bundle:13}<\/strong>",
+ "display_fields_mode": "selected_fields",
+ "display_fields_selected": [
+ "13",
+ "17",
+ "9"
+ ],
+ "assignee_notification_enabled": "1",
+ "assignee_notification_from_name": "WIAAS Marketplace",
+ "assignee_notification_from_email": "info@co-ideation.com",
+ "assignee_notification_reply_to": "",
+ "assignee_notification_bcc": "",
+ "assignee_notification_subject": "{Order Number:12} : Validate Customer Configuration",
+ "assignee_notification_message": "\u00a0{Order Number:12}<\/strong>\r\n\r\nGo to {workflow_entry_link} to validate customer configuration for\u00a0 {Bundle:13} .\r\n\r\n ",
+ "assignee_notification_disable_autoformat": "0",
+ "resend_assignee_emailEnable": "0",
+ "resend_assignee_emailValue": "7",
+ "resend_assignee_email_repeatEnable": "0",
+ "resend_assignee_email_repeatValue": "3",
+ "rejection_notification_enabled": "1",
+ "rejection_notification_type": "select",
+ "rejection_notification_routing": [
+ {
+ "assignee": "user_id|2",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "rejection_notification_from_name": "Wiaas",
+ "rejection_notification_from_email": "{admin_email}",
+ "rejection_notification_reply_to": "",
+ "rejection_notification_bcc": "",
+ "rejection_notification_subject": "{Order:3} : Bundle questionnaire has been rejected {Bundle:6}",
+ "rejection_notification_message": "Entry {entry_id} has been rejected",
+ "rejection_notification_disable_autoformat": "0",
+ "approval_notification_enabled": "1",
+ "approval_notification_type": "select",
+ "approval_notification_routing": [
+ {
+ "assignee": "user_id|2",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "approval_notification_from_name": "Wiaas",
+ "approval_notification_from_email": "{admin_email}",
+ "approval_notification_reply_to": "",
+ "approval_notification_bcc": "",
+ "approval_notification_subject": "{Order:3} : Bundle questionnaire has been approved",
+ "approval_notification_message": " \r\n\r\n{all_fields}\r\n\r\nEntry {entry_id} has been approved",
+ "approval_notification_disable_autoformat": "0",
+ "revertEnable": "0",
+ "revertValue": "44",
+ "note_mode": "hidden",
+ "expiration": "0",
+ "expiration_type": "delay",
+ "expiration_date": "",
+ "expiration_delay_offset": "",
+ "expiration_delay_unit": "hours",
+ "expiration_date_field_offset": "0",
+ "expiration_date_field_offset_unit": "hours",
+ "expiration_date_field_before_after": "after",
+ "status_expiration": "rejected",
+ "destination_expired": "next",
+ "destination_rejected": "44",
+ "destination_approved": "complete"
+ },
+ "addon_slug": "gravityflow",
+ "event_type": null
+ },
+ {
+ "id": "44",
+ "form_id": "12",
+ "is_active": "1",
+ "feed_order": "0",
+ "meta": {
+ "step_name": "Add reject reason",
+ "description": "",
+ "step_type": "user_input",
+ "step_highlight": "0",
+ "step_highlight_type": "color",
+ "step_highlight_color": "#dd3333",
+ "feed_condition_conditional_logic": "0",
+ "feed_condition_conditional_logic_object": [],
+ "scheduled": "0",
+ "schedule_type": "delay",
+ "schedule_date": "",
+ "schedule_delay_offset": "",
+ "schedule_delay_unit": "hours",
+ "schedule_date_field_offset": "0",
+ "schedule_date_field_offset_unit": "hours",
+ "schedule_date_field_before_after": "after",
+ "type": "select",
+ "assignees": [
+ "role|administrator"
+ ],
+ "editable_fields": [
+ "9"
+ ],
+ "routing": "",
+ "assignee_policy": "all",
+ "highlight_editable_fields_enabled": "1",
+ "highlight_editable_fields_class": "green-background",
+ "instructionsEnable": "1",
+ "instructionsValue": "Enter reason why customer configuration has been declined.",
+ "display_fields_mode": "all_fields",
+ "default_status": "hidden",
+ "note_mode": "hidden",
+ "assignee_notification_enabled": "0",
+ "assignee_notification_from_name": "",
+ "assignee_notification_from_email": "{admin_email}",
+ "assignee_notification_reply_to": "",
+ "assignee_notification_bcc": "",
+ "assignee_notification_subject": "",
+ "assignee_notification_message": "A new entry requires your input.",
+ "assignee_notification_disable_autoformat": "0",
+ "resend_assignee_emailEnable": "0",
+ "resend_assignee_emailValue": "7",
+ "resend_assignee_email_repeatEnable": "0",
+ "resend_assignee_email_repeatValue": "3",
+ "in_progress_notification_enabled": "0",
+ "in_progress_notification_type": "select",
+ "in_progress_notification_routing": [
+ {
+ "assignee": "user_id|2",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "in_progress_notification_from_name": "",
+ "in_progress_notification_from_email": "{admin_email}",
+ "in_progress_notification_reply_to": "",
+ "in_progress_notification_bcc": "",
+ "in_progress_notification_subject": "",
+ "in_progress_notification_message": "Entry {entry_id} has been updated and remains in progress.",
+ "in_progress_notification_disable_autoformat": "0",
+ "complete_notification_enabled": "0",
+ "complete_notification_type": "select",
+ "complete_notification_routing": [
+ {
+ "assignee": "user_id|2",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "complete_notification_from_name": "",
+ "complete_notification_from_email": "{admin_email}",
+ "complete_notification_reply_to": "",
+ "complete_notification_bcc": "",
+ "complete_notification_subject": "",
+ "complete_notification_message": "Entry {entry_id} has been updated completing the step.",
+ "complete_notification_disable_autoformat": "0",
+ "confirmation_messageEnable": "0",
+ "confirmation_messageValue": "Thank you.",
+ "expiration": "0",
+ "expiration_type": "delay",
+ "expiration_date": "",
+ "expiration_delay_offset": "",
+ "expiration_delay_unit": "hours",
+ "expiration_date_field_offset": "0",
+ "expiration_date_field_offset_unit": "hours",
+ "expiration_date_field_before_after": "after",
+ "status_expiration": "complete",
+ "destination_expired": "next",
+ "destination_complete": "next"
+ },
+ "addon_slug": "gravityflow",
+ "event_type": null
+ },
+ {
+ "id": "93",
+ "form_id": "12",
+ "is_active": "1",
+ "feed_order": "0",
+ "meta": {
+ "step_name": "Update configuration info",
+ "description": "",
+ "step_type": "user_input",
+ "step_highlight": "0",
+ "step_highlight_type": "color",
+ "step_highlight_color": "#dd3333",
+ "feed_condition_conditional_logic": "0",
+ "feed_condition_conditional_logic_object": [],
+ "scheduled": "0",
+ "schedule_type": "delay",
+ "schedule_date": "",
+ "schedule_delay_offset": "",
+ "schedule_delay_unit": "hours",
+ "schedule_date_field_offset": "0",
+ "schedule_date_field_offset_unit": "hours",
+ "schedule_date_field_before_after": "after",
+ "type": "select",
+ "assignees": [
+ "assignee_user_field|18"
+ ],
+ "editable_fields": [
+ "17"
+ ],
+ "routing": "",
+ "assignee_policy": "all",
+ "highlight_editable_fields_enabled": "0",
+ "highlight_editable_fields_class": "green-triangle",
+ "instructionsEnable": "0",
+ "instructionsValue": "",
+ "display_fields_mode": "all_fields",
+ "default_status": "hidden",
+ "note_mode": "not_required",
+ "assignee_notification_enabled": "1",
+ "assignee_notification_from_name": "WIAAS Marketplace",
+ "assignee_notification_from_email": "support@co-ideation.com",
+ "assignee_notification_reply_to": "",
+ "assignee_notification_bcc": "",
+ "assignee_notification_subject": "{Order Number:12} : Update configuration info",
+ "assignee_notification_message": "{Order Number:12}<\/strong>\r\n\r\nConfiguration info has bee rejected for\u00a0{Bundle:13}.\r\n\r\nPlease login to your interface, review and make necessary changes.",
+ "assignee_notification_disable_autoformat": "0",
+ "resend_assignee_emailEnable": "0",
+ "resend_assignee_emailValue": "7",
+ "resend_assignee_email_repeatEnable": "0",
+ "resend_assignee_email_repeatValue": "3",
+ "in_progress_notification_enabled": "0",
+ "in_progress_notification_type": "select",
+ "in_progress_notification_routing": [
+ {
+ "assignee": "wiaas_order_role|customer",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "in_progress_notification_from_name": "",
+ "in_progress_notification_from_email": "{admin_email}",
+ "in_progress_notification_reply_to": "",
+ "in_progress_notification_bcc": "",
+ "in_progress_notification_subject": "",
+ "in_progress_notification_message": "Entry {entry_id} has been updated and remains in progress.",
+ "in_progress_notification_disable_autoformat": "0",
+ "complete_notification_enabled": "0",
+ "complete_notification_type": "select",
+ "complete_notification_routing": [
+ {
+ "assignee": "wiaas_order_role|customer",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "complete_notification_from_name": "",
+ "complete_notification_from_email": "{admin_email}",
+ "complete_notification_reply_to": "",
+ "complete_notification_bcc": "",
+ "complete_notification_subject": "",
+ "complete_notification_message": "Entry {entry_id} has been updated completing the step.",
+ "complete_notification_disable_autoformat": "0",
+ "confirmation_messageEnable": "0",
+ "confirmation_messageValue": "Thank you.",
+ "expiration": "0",
+ "expiration_type": "delay",
+ "expiration_date": "",
+ "expiration_delay_offset": "",
+ "expiration_delay_unit": "hours",
+ "expiration_date_field_offset": "0",
+ "expiration_date_field_offset_unit": "hours",
+ "expiration_date_field_before_after": "after",
+ "status_expiration": "complete",
+ "destination_expired": "next",
+ "destination_complete": "27"
+ },
+ "addon_slug": "gravityflow",
+ "event_type": null
+ }
+ ]
+ }
+ },
+ "1": {
+ "title": "ACTION: Complete Installation And Upload Test Protocol",
+ "description": "",
+ "labelPlacement": "top_label",
+ "descriptionPlacement": "below",
+ "button": {
+ "type": "text",
+ "text": "Submit",
+ "imageUrl": ""
+ },
+ "fields": [
+ {
+ "type": "wiaas_order",
+ "id": 1,
+ "label": "Order ID",
+ "adminLabel": "",
+ "isRequired": true,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": 14,
+ "description": "",
+ "allowsPrepopulate": true,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "order_id",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": "",
+ "conditionalLogic": "",
+ "enableCalculation": false,
+ "numberFormat": "decimal_dot",
+ "rangeMin": "",
+ "rangeMax": "",
+ "productField": "",
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "displayOnly": "",
+ "enablePrice": ""
+ },
+ {
+ "type": "wiaas_order_bundle",
+ "id": 8,
+ "label": "Bundle:",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": 14,
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": [
+ {
+ "value": "0",
+ "text": "Select bundle ..."
+ }
+ ],
+ "conditionalLogic": "",
+ "productField": "",
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "displayOnly": "",
+ "enablePrice": "",
+ "enableChoiceValue": true
+ },
+ {
+ "type": "wiaas_order_bundle_document",
+ "wiaasDocTypeFilter": "install_guide",
+ "id": 13,
+ "label": "Installation Guide Documents:",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": 14,
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "fileupload",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": "",
+ "conditionalLogic": "",
+ "maxFileSize": "",
+ "maxFiles": "",
+ "multipleFiles": true,
+ "allowedExtensions": "",
+ "productField": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "displayOnly": "",
+ "enablePrice": ""
+ },
+ {
+ "type": "wiaas_order_installation_select",
+ "id": 11,
+ "label": "Installation Company:",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": 14,
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": [
+ {
+ "value": "0",
+ "text": "Select installation ..."
+ }
+ ],
+ "conditionalLogic": "",
+ "productField": "",
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "displayOnly": "",
+ "enablePrice": "",
+ "enableChoiceValue": true
+ },
+ {
+ "type": "wiaas_order_bundle_document",
+ "wiaasDocTypeFilter": "installation_protocol",
+ "id": 14,
+ "label": "Installation Protocol Document:",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": 14,
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": "",
+ "conditionalLogic": "",
+ "maxFileSize": "",
+ "maxFiles": "",
+ "multipleFiles": false,
+ "allowedExtensions": "",
+ "productField": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false
+ }
+ ],
+ "version": "2.3.2",
+ "id": 14,
+ "useCurrentUserAsAuthor": true,
+ "postContentTemplateEnabled": false,
+ "postTitleTemplateEnabled": false,
+ "postTitleTemplate": "",
+ "postContentTemplate": "",
+ "lastPageButton": null,
+ "pagination": null,
+ "firstPageCssClass": null,
+ "wiaas_delivery": {
+ "wiaas_delivery_form_type": "step"
+ },
+ "wiaas_delivery_process": {
+ "delivery_form_type": "action",
+ "delivery_action_code": "",
+ "automatic_action_entries_enabled": "1",
+ "automatic_action_entries_type": "bundle"
+ },
+ "confirmations": [
+ {
+ "id": "5bd66ca93384b",
+ "name": "Default Confirmation",
+ "isDefault": true,
+ "type": "message",
+ "message": "Thanks for contacting us! We will get in touch with you shortly.",
+ "url": "",
+ "pageId": "",
+ "queryString": ""
+ }
+ ],
+ "notifications": [
+ {
+ "id": "5bd66ca932e4a",
+ "to": "{admin_email}",
+ "name": "Admin Notification",
+ "event": "form_submission",
+ "toType": "email",
+ "subject": "New submission from {form_title}",
+ "message": "{all_fields}"
+ }
+ ],
+ "feeds": {
+ "gravityflow": [
+ {
+ "id": "80",
+ "form_id": "14",
+ "is_active": "1",
+ "feed_order": "0",
+ "meta": {
+ "step_name": "Select Installation",
+ "description": "",
+ "step_type": "user_input",
+ "step_highlight": "0",
+ "step_highlight_type": "color",
+ "step_highlight_color": "#dd3333",
+ "feed_condition_conditional_logic": "1",
+ "feed_condition_conditional_logic_object": {
+ "conditionalLogic": {
+ "actionType": "show",
+ "logicType": "all",
+ "rules": [
+ {
+ "fieldId": "11",
+ "operator": "is",
+ "value": "0"
+ }
+ ]
+ }
+ },
+ "scheduled": "0",
+ "schedule_type": "delay",
+ "schedule_date": "",
+ "schedule_delay_offset": "",
+ "schedule_delay_unit": "hours",
+ "schedule_date_field_offset": "0",
+ "schedule_date_field_offset_unit": "hours",
+ "schedule_date_field_before_after": "after",
+ "type": "select",
+ "assignees": [
+ "role|administrator"
+ ],
+ "editable_fields": [
+ "11"
+ ],
+ "routing": "",
+ "assignee_policy": "all",
+ "highlight_editable_fields_enabled": "1",
+ "highlight_editable_fields_class": "green-background",
+ "instructionsEnable": "0",
+ "instructionsValue": "",
+ "display_fields_mode": "selected_fields",
+ "display_fields_selected": [
+ "1",
+ "8",
+ "13"
+ ],
+ "default_status": "hidden",
+ "note_mode": "not_required",
+ "assignee_notification_enabled": "1",
+ "assignee_notification_from_name": "WIAAS Marketplace",
+ "assignee_notification_from_email": "support@co-ideation.com",
+ "assignee_notification_reply_to": "",
+ "assignee_notification_bcc": "",
+ "assignee_notification_subject": "{Order ID:1} : Select installation company for {Bundle::8}",
+ "assignee_notification_message": "Select installation company for\u00a0{Bundle::8} in order\u00a0{Order ID:1}",
+ "assignee_notification_disable_autoformat": "0",
+ "resend_assignee_emailEnable": "0",
+ "resend_assignee_emailValue": "7",
+ "resend_assignee_email_repeatEnable": "0",
+ "resend_assignee_email_repeatValue": "3",
+ "in_progress_notification_enabled": "0",
+ "in_progress_notification_type": "select",
+ "in_progress_notification_routing": [
+ {
+ "assignee": "wiaas_order_role|customer",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "in_progress_notification_from_name": "",
+ "in_progress_notification_from_email": "{admin_email}",
+ "in_progress_notification_reply_to": "",
+ "in_progress_notification_bcc": "",
+ "in_progress_notification_subject": "",
+ "in_progress_notification_message": "Entry {entry_id} has been updated and remains in progress.",
+ "in_progress_notification_disable_autoformat": "0",
+ "complete_notification_enabled": "0",
+ "complete_notification_type": "select",
+ "complete_notification_routing": [
+ {
+ "assignee": "wiaas_order_role|customer",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "complete_notification_from_name": "",
+ "complete_notification_from_email": "{admin_email}",
+ "complete_notification_reply_to": "",
+ "complete_notification_bcc": "",
+ "complete_notification_subject": "",
+ "complete_notification_message": "Entry {entry_id} has been updated completing the step.",
+ "complete_notification_disable_autoformat": "0",
+ "confirmation_messageEnable": "0",
+ "confirmation_messageValue": "Thank you.",
+ "expiration": "0",
+ "expiration_type": "delay",
+ "expiration_date": "",
+ "expiration_delay_offset": "",
+ "expiration_delay_unit": "hours",
+ "expiration_date_field_offset": "0",
+ "expiration_date_field_offset_unit": "hours",
+ "expiration_date_field_before_after": "after",
+ "status_expiration": "complete",
+ "destination_expired": "next",
+ "destination_complete": "next"
+ },
+ "addon_slug": "gravityflow",
+ "event_type": null
+ },
+ {
+ "id": "34",
+ "form_id": "14",
+ "is_active": "1",
+ "feed_order": "0",
+ "meta": {
+ "step_name": "Installation completed confirmation",
+ "description": "",
+ "step_type": "approval",
+ "step_highlight": "0",
+ "step_highlight_type": "color",
+ "step_highlight_color": "#dd3333",
+ "feed_condition_conditional_logic": "0",
+ "feed_condition_conditional_logic_object": [],
+ "scheduled": "0",
+ "schedule_type": "delay",
+ "schedule_date": "",
+ "schedule_delay_offset": "",
+ "schedule_delay_unit": "hours",
+ "schedule_date_field_offset": "0",
+ "schedule_date_field_offset_unit": "hours",
+ "schedule_date_field_before_after": "after",
+ "type": "select",
+ "assignees": [
+ "assignee_field|11"
+ ],
+ "routing": [
+ {
+ "assignee": "role|administrator",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "assignee_policy": "all",
+ "instructionsEnable": "0",
+ "instructionsValue": "Instructions: please review the values in the fields below and click on the Approve or Reject button",
+ "display_fields_mode": "all_fields",
+ "assignee_notification_enabled": "1",
+ "assignee_notification_from_name": "WIAAS Market",
+ "assignee_notification_from_email": "support@co-ideation.com",
+ "assignee_notification_reply_to": "",
+ "assignee_notification_bcc": "",
+ "assignee_notification_subject": "{Order ID:1} : Confirm installation",
+ "assignee_notification_message": "Please go to {workflow_entry_link} to\u00a0confirm that installation is completed for order\u00a0{Order ID:1}",
+ "assignee_notification_disable_autoformat": "0",
+ "resend_assignee_emailEnable": "0",
+ "resend_assignee_emailValue": "7",
+ "resend_assignee_email_repeatEnable": "0",
+ "resend_assignee_email_repeatValue": "3",
+ "rejection_notification_enabled": "0",
+ "rejection_notification_type": "select",
+ "rejection_notification_routing": [
+ {
+ "assignee": "role|administrator",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "rejection_notification_from_name": "",
+ "rejection_notification_from_email": "{admin_email}",
+ "rejection_notification_reply_to": "",
+ "rejection_notification_bcc": "",
+ "rejection_notification_subject": "",
+ "rejection_notification_message": "Entry {entry_id} has been rejected",
+ "rejection_notification_disable_autoformat": "0",
+ "approval_notification_enabled": "0",
+ "approval_notification_type": "select",
+ "approval_notification_routing": [
+ {
+ "assignee": "role|administrator",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "approval_notification_from_name": "",
+ "approval_notification_from_email": "{admin_email}",
+ "approval_notification_reply_to": "",
+ "approval_notification_bcc": "",
+ "approval_notification_subject": "",
+ "approval_notification_message": "Entry {entry_id} has been approved",
+ "approval_notification_disable_autoformat": "0",
+ "revertEnable": "0",
+ "revertValue": "35",
+ "note_mode": "not_required",
+ "expiration": "0",
+ "expiration_type": "delay",
+ "expiration_date": "",
+ "expiration_delay_offset": "",
+ "expiration_delay_unit": "hours",
+ "expiration_date_field_offset": "0",
+ "expiration_date_field_offset_unit": "hours",
+ "expiration_date_field_before_after": "after",
+ "status_expiration": "rejected",
+ "destination_expired": "next",
+ "destination_rejected": "complete",
+ "destination_approved": "35"
+ },
+ "addon_slug": "gravityflow",
+ "event_type": null
+ },
+ {
+ "id": "35",
+ "form_id": "14",
+ "is_active": "1",
+ "feed_order": "0",
+ "meta": {
+ "step_name": "Upload installation protocol for order",
+ "description": "",
+ "step_type": "user_input",
+ "step_highlight": "0",
+ "step_highlight_type": "color",
+ "step_highlight_color": "#dd3333",
+ "feed_condition_conditional_logic": "0",
+ "feed_condition_conditional_logic_object": [],
+ "scheduled": "0",
+ "schedule_type": "delay",
+ "schedule_date": "",
+ "schedule_delay_offset": "",
+ "schedule_delay_unit": "hours",
+ "schedule_date_field_offset": "0",
+ "schedule_date_field_offset_unit": "hours",
+ "schedule_date_field_before_after": "after",
+ "type": "select",
+ "assignees": [
+ "assignee_field|11"
+ ],
+ "editable_fields": [
+ "14"
+ ],
+ "routing": "",
+ "assignee_policy": "all",
+ "highlight_editable_fields_enabled": "1",
+ "highlight_editable_fields_class": "green-background",
+ "instructionsEnable": "0",
+ "instructionsValue": "",
+ "display_fields_mode": "all_fields",
+ "default_status": "hidden",
+ "note_mode": "not_required",
+ "assignee_notification_enabled": "1",
+ "assignee_notification_from_name": "WIAAS Market",
+ "assignee_notification_from_email": " confirm that installation is completed for order\u00a0{Order ID:1}",
+ "assignee_notification_reply_to": "",
+ "assignee_notification_bcc": "",
+ "assignee_notification_subject": "Upload installation test protocol for {Order ID:1}",
+ "assignee_notification_message": "{Order ID:1}<\/strong>\r\n\r\nGo to {workflow_entry_link} to upload installation test protocol for order\u00a0{Order ID:1}\r\n\r\n ",
+ "assignee_notification_disable_autoformat": "0",
+ "resend_assignee_emailEnable": "0",
+ "resend_assignee_emailValue": "7",
+ "resend_assignee_email_repeatEnable": "0",
+ "resend_assignee_email_repeatValue": "3",
+ "in_progress_notification_enabled": "0",
+ "in_progress_notification_type": "select",
+ "in_progress_notification_routing": [
+ {
+ "assignee": "role|administrator",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "in_progress_notification_from_name": "",
+ "in_progress_notification_from_email": "{admin_email}",
+ "in_progress_notification_reply_to": "",
+ "in_progress_notification_bcc": "",
+ "in_progress_notification_subject": "",
+ "in_progress_notification_message": "Entry {entry_id} has been updated and remains in progress.",
+ "in_progress_notification_disable_autoformat": "0",
+ "complete_notification_enabled": "0",
+ "complete_notification_type": "select",
+ "complete_notification_routing": [
+ {
+ "assignee": "role|administrator",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "complete_notification_from_name": "",
+ "complete_notification_from_email": "{admin_email}",
+ "complete_notification_reply_to": "",
+ "complete_notification_bcc": "",
+ "complete_notification_subject": "",
+ "complete_notification_message": "Entry {entry_id} has been updated completing the step.",
+ "complete_notification_disable_autoformat": "0",
+ "confirmation_messageEnable": "0",
+ "confirmation_messageValue": "Thank you.",
+ "expiration": "0",
+ "expiration_type": "delay",
+ "expiration_date": "",
+ "expiration_delay_offset": "",
+ "expiration_delay_unit": "hours",
+ "expiration_date_field_offset": "0",
+ "expiration_date_field_offset_unit": "hours",
+ "expiration_date_field_before_after": "after",
+ "status_expiration": "complete",
+ "destination_expired": "next",
+ "destination_complete": "complete"
+ },
+ "addon_slug": "gravityflow",
+ "event_type": null
+ }
+ ]
+ }
+ },
+ "2": {
+ "title": "ACTION: Customer Acceptance",
+ "description": "",
+ "labelPlacement": "top_label",
+ "descriptionPlacement": "below",
+ "button": {
+ "type": "text",
+ "text": "Submit",
+ "imageUrl": ""
+ },
+ "fields": [
+ {
+ "type": "wiaas_order",
+ "id": 1,
+ "label": "Order Number",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": 16,
+ "description": "",
+ "allowsPrepopulate": true,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "order_id",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": "",
+ "conditionalLogic": "",
+ "enableCalculation": false,
+ "numberFormat": "decimal_dot",
+ "rangeMin": "",
+ "rangeMax": "",
+ "productField": "",
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "displayOnly": "",
+ "enablePrice": ""
+ },
+ {
+ "type": "workflow_user",
+ "id": 10,
+ "label": "Customer User:",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "choices": [
+ {
+ "value": 2,
+ "text": "Commercial User"
+ },
+ {
+ "value": 3,
+ "text": "Customer User"
+ }
+ ],
+ "formId": 16,
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "conditionalLogic": "",
+ "failed_validation": "",
+ "productField": "",
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "displayOnly": "",
+ "enablePrice": "",
+ "gravityflowUsersRoleFilter": "customer"
+ },
+ {
+ "type": "wiaas_order_document",
+ "wiaasDocTypeFilter": "customer_acceptance",
+ "id": 9,
+ "label": "Acceptance Document:",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": 16,
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "fileupload",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": "",
+ "conditionalLogic": "",
+ "maxFileSize": "",
+ "maxFiles": "",
+ "multipleFiles": true,
+ "allowedExtensions": "",
+ "productField": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "displayOnly": "",
+ "enablePrice": ""
+ },
+ {
+ "type": "date",
+ "id": 6,
+ "label": "Expiration Date",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "dateType": "datepicker",
+ "calendarIconType": "none",
+ "formId": 16,
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": "",
+ "conditionalLogic": "",
+ "calendarIconUrl": "",
+ "dateFormat": "",
+ "productField": "",
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "displayOnly": ""
+ },
+ {
+ "type": "radio",
+ "id": 4,
+ "label": "Acceptance",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "medium",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "choices": [
+ {
+ "text": "Not Accepted",
+ "value": "pending",
+ "isSelected": false,
+ "price": ""
+ },
+ {
+ "text": "Accepted",
+ "value": "accept",
+ "isSelected": false,
+ "price": ""
+ },
+ {
+ "text": "Declined",
+ "value": "decline",
+ "isSelected": false,
+ "price": ""
+ }
+ ],
+ "formId": 16,
+ "description": "",
+ "allowsPrepopulate": false,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "conditionalLogic": "",
+ "productField": "",
+ "enableOtherChoice": "",
+ "enablePrice": "",
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "useRichTextEditor": false,
+ "enableChoiceValue": true,
+ "displayOnly": ""
+ },
+ {
+ "type": "textarea",
+ "id": 3,
+ "label": "Decline Reason",
+ "adminLabel": "",
+ "isRequired": false,
+ "size": "small",
+ "errorMessage": "",
+ "visibility": "visible",
+ "inputs": null,
+ "formId": 16,
+ "description": "",
+ "allowsPrepopulate": true,
+ "inputMask": false,
+ "inputMaskValue": "",
+ "inputType": "",
+ "labelPlacement": "",
+ "descriptionPlacement": "",
+ "subLabelPlacement": "",
+ "placeholder": "",
+ "cssClass": "",
+ "inputName": "order_decline_reason",
+ "noDuplicates": false,
+ "defaultValue": "",
+ "choices": "",
+ "conditionalLogic": {
+ "actionType": "show",
+ "logicType": "all",
+ "rules": [
+ {
+ "fieldId": "4",
+ "operator": "is",
+ "value": "decline"
+ }
+ ]
+ },
+ "productField": "",
+ "form_id": "",
+ "useRichTextEditor": false,
+ "multipleFiles": false,
+ "maxFiles": "",
+ "calculationFormula": "",
+ "calculationRounding": "",
+ "enableCalculation": "",
+ "disableQuantity": false,
+ "displayAllCategories": false,
+ "displayOnly": "",
+ "enablePrice": ""
+ }
+ ],
+ "version": "2.3.2",
+ "id": 16,
+ "useCurrentUserAsAuthor": true,
+ "postContentTemplateEnabled": false,
+ "postTitleTemplateEnabled": false,
+ "postTitleTemplate": "",
+ "postContentTemplate": "",
+ "lastPageButton": null,
+ "pagination": null,
+ "firstPageCssClass": null,
+ "wiaas_delivery_process": {
+ "delivery_form_type": "action",
+ "delivery_action_code": "customer-acceptance",
+ "automatic_action_entries_enabled": "1",
+ "automatic_action_entries_type": "single"
+ },
+ "confirmations": [
+ {
+ "id": "5bd8668e50997",
+ "name": "Default Confirmation",
+ "isDefault": true,
+ "type": "message",
+ "message": "Thanks for contacting us! We will get in touch with you shortly.",
+ "url": "",
+ "pageId": "",
+ "queryString": ""
+ }
+ ],
+ "notifications": [
+ {
+ "id": "5bd8668e50471",
+ "to": "{admin_email}",
+ "name": "Admin Notification",
+ "event": "form_submission",
+ "toType": "email",
+ "subject": "New submission from {form_title}",
+ "message": "{all_fields}"
+ }
+ ],
+ "feeds": {
+ "gravityflow": [
+ {
+ "id": "94",
+ "form_id": "16",
+ "is_active": "1",
+ "feed_order": "0",
+ "meta": {
+ "step_name": "Upload Acceptance Document",
+ "description": "",
+ "step_type": "user_input",
+ "step_highlight": "0",
+ "step_highlight_type": "color",
+ "step_highlight_color": "#dd3333",
+ "feed_condition_conditional_logic": "0",
+ "feed_condition_conditional_logic_object": [],
+ "scheduled": "0",
+ "schedule_type": "delay",
+ "schedule_date": "",
+ "schedule_delay_offset": "",
+ "schedule_delay_unit": "hours",
+ "schedule_date_field_offset": "0",
+ "schedule_date_field_offset_unit": "hours",
+ "schedule_date_field_before_after": "after",
+ "schedule_date_field": "6",
+ "type": "select",
+ "assignees": [
+ "assignee_user_field|10"
+ ],
+ "editable_fields": [
+ "9",
+ "4",
+ "3"
+ ],
+ "routing": "",
+ "assignee_policy": "any",
+ "conditional_logic_editable_fields_enabled": "1",
+ "highlight_editable_fields_enabled": "0",
+ "highlight_editable_fields_class": "green-triangle",
+ "instructionsEnable": "0",
+ "instructionsValue": "",
+ "display_fields_mode": "all_fields",
+ "default_status": "hidden",
+ "note_mode": "not_required",
+ "assignee_notification_enabled": "1",
+ "assignee_notification_from_name": "WIAAS Market",
+ "assignee_notification_from_email": "support@co-ideation.com",
+ "assignee_notification_reply_to": "",
+ "assignee_notification_bcc": "",
+ "assignee_notification_subject": "{Order Number:1}: Upload acceptance document",
+ "assignee_notification_message": "{Order Number:1}<\/strong>\r\n\r\nPlease go to your account and upload acceptance document.",
+ "assignee_notification_disable_autoformat": "0",
+ "resend_assignee_emailEnable": "0",
+ "resend_assignee_emailValue": "7",
+ "resend_assignee_email_repeatEnable": "0",
+ "resend_assignee_email_repeatValue": "3",
+ "in_progress_notification_enabled": "0",
+ "in_progress_notification_type": "select",
+ "in_progress_notification_routing": [
+ {
+ "assignee": "role|administrator",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "in_progress_notification_from_name": "",
+ "in_progress_notification_from_email": "{admin_email}",
+ "in_progress_notification_reply_to": "",
+ "in_progress_notification_bcc": "",
+ "in_progress_notification_subject": "",
+ "in_progress_notification_message": "Entry {entry_id} has been updated and remains in progress.",
+ "in_progress_notification_disable_autoformat": "0",
+ "complete_notification_enabled": "0",
+ "complete_notification_type": "select",
+ "complete_notification_routing": [
+ {
+ "assignee": "role|administrator",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "complete_notification_from_name": "",
+ "complete_notification_from_email": "{admin_email}",
+ "complete_notification_reply_to": "",
+ "complete_notification_bcc": "",
+ "complete_notification_subject": "",
+ "complete_notification_message": "Entry {entry_id} has been updated completing the step.",
+ "complete_notification_disable_autoformat": "0",
+ "confirmation_messageEnable": "0",
+ "confirmation_messageValue": "Thank you.",
+ "expiration": "0",
+ "expiration_type": "delay",
+ "expiration_date": "",
+ "expiration_delay_offset": "",
+ "expiration_delay_unit": "hours",
+ "expiration_date_field_offset": "0",
+ "expiration_date_field_offset_unit": "hours",
+ "expiration_date_field_before_after": "after",
+ "expiration_date_field": "6",
+ "status_expiration": "complete",
+ "destination_expired": "next",
+ "destination_complete": "next"
+ },
+ "addon_slug": "gravityflow",
+ "event_type": null
+ },
+ {
+ "id": "95",
+ "form_id": "16",
+ "is_active": "1",
+ "feed_order": "0",
+ "meta": {
+ "step_name": "Accept installation",
+ "description": "",
+ "step_type": "approval",
+ "step_highlight": "0",
+ "step_highlight_type": "color",
+ "step_highlight_color": "#dd3333",
+ "feed_condition_conditional_logic": "0",
+ "feed_condition_conditional_logic_object": [],
+ "scheduled": "0",
+ "schedule_type": "delay",
+ "schedule_date": "",
+ "schedule_delay_offset": "",
+ "schedule_delay_unit": "hours",
+ "schedule_date_field_offset": "0",
+ "schedule_date_field_offset_unit": "hours",
+ "schedule_date_field_before_after": "after",
+ "schedule_date_field": "6",
+ "type": "select",
+ "assignees": [
+ "assignee_user_field|10"
+ ],
+ "routing": [
+ {
+ "assignee": "role|administrator",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "assignee_policy": "all",
+ "instructionsEnable": "0",
+ "instructionsValue": "Instructions: please review the values in the fields below and click on the Approve or Reject button",
+ "display_fields_mode": "all_fields",
+ "assignee_notification_enabled": "1",
+ "assignee_notification_from_name": "WIAAS Market",
+ "assignee_notification_from_email": "support@co-ideation.com",
+ "assignee_notification_reply_to": "",
+ "assignee_notification_bcc": "",
+ "assignee_notification_subject": "{Order Number:1}: Accept installation",
+ "assignee_notification_message": "Login to your account and accept installation.",
+ "assignee_notification_disable_autoformat": "0",
+ "resend_assignee_emailEnable": "0",
+ "resend_assignee_emailValue": "7",
+ "resend_assignee_email_repeatEnable": "0",
+ "resend_assignee_email_repeatValue": "3",
+ "rejection_notification_enabled": "0",
+ "rejection_notification_type": "select",
+ "rejection_notification_routing": [
+ {
+ "assignee": "role|administrator",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "rejection_notification_from_name": "",
+ "rejection_notification_from_email": "{admin_email}",
+ "rejection_notification_reply_to": "",
+ "rejection_notification_bcc": "",
+ "rejection_notification_subject": "",
+ "rejection_notification_message": "Entry {entry_id} has been rejected",
+ "rejection_notification_disable_autoformat": "0",
+ "approval_notification_enabled": "0",
+ "approval_notification_type": "select",
+ "approval_notification_routing": [
+ {
+ "assignee": "role|administrator",
+ "fieldId": "0",
+ "operator": "is",
+ "value": "",
+ "type": ""
+ }
+ ],
+ "approval_notification_from_name": "",
+ "approval_notification_from_email": "{admin_email}",
+ "approval_notification_reply_to": "",
+ "approval_notification_bcc": "",
+ "approval_notification_subject": "",
+ "approval_notification_message": "Entry {entry_id} has been approved",
+ "approval_notification_disable_autoformat": "0",
+ "revertEnable": "0",
+ "revertValue": "41",
+ "note_mode": "not_required",
+ "expiration": "0",
+ "expiration_type": "delay",
+ "expiration_date": "",
+ "expiration_delay_offset": "",
+ "expiration_delay_unit": "hours",
+ "expiration_date_field_offset": "0",
+ "expiration_date_field_offset_unit": "hours",
+ "expiration_date_field_before_after": "after",
+ "expiration_date_field": "6",
+ "status_expiration": "rejected",
+ "destination_expired": "next",
+ "destination_rejected": "complete",
+ "destination_approved": "next"
+ },
+ "addon_slug": "gravityflow",
+ "event_type": null
+ }
+ ]
+ }
+ },
+ "version": "2.3.2"
+}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery-process-sample-form.json b/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery-process-sample-form.json
new file mode 100644
index 0000000..9228c21
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery-process-sample-form.json
@@ -0,0 +1 @@
+{"0":{"title":"DELIVERY PROCESS EXAMPLE: Copy and set to active to create new delivery process","description":"","labelPlacement":"top_label","descriptionPlacement":"below","button":{"type":"text","text":"Submit","imageUrl":""},"fields":[{"type":"wiaas_order","id":1,"label":"Order number","adminLabel":"","isRequired":false,"size":"medium","errorMessage":"","visibility":"visible","inputs":null,"formId":36,"description":"","allowsPrepopulate":false,"inputMask":false,"inputMaskValue":"","inputType":"","labelPlacement":"","descriptionPlacement":"","subLabelPlacement":"","placeholder":"","cssClass":"","inputName":"","noDuplicates":false,"defaultValue":"","choices":"","conditionalLogic":"","enableCalculation":false,"numberFormat":"decimal_dot","rangeMin":"","rangeMax":"","productField":"","multipleFiles":false,"maxFiles":"","calculationFormula":"","calculationRounding":"","disableQuantity":false,"displayAllCategories":false,"useRichTextEditor":false,"displayOnly":"","enablePrice":""}],"version":"2.3.2","id":36,"useCurrentUserAsAuthor":true,"postContentTemplateEnabled":false,"postTitleTemplateEnabled":false,"postTitleTemplate":"","postContentTemplate":"","lastPageButton":null,"pagination":null,"firstPageCssClass":null,"wiaas_delivery_process":{"delivery_form_type":"process","delivery_country":"se"},"is_active":"1","date_created":"2018-11-02 10:15:28","is_trash":"0","confirmations":[{"id":"5bdb1c7c26da9","name":"Default Confirmation","isDefault":true,"type":"message","message":"Thanks for contacting us! We will get in touch with you shortly.","url":"","pageId":"","queryString":""}],"notifications":[{"id":"5bdb1c7c26952","to":"{admin_email}","name":"Admin Notification","event":"form_submission","toType":"email","subject":"New submission from {form_title}","message":"{all_fields}"}],"feeds":{"gravityflow":[{"id":"120","form_id":"36","is_active":"1","feed_order":"0","meta":{"step_name":"Delivery Step Placeholder (Use Delivery Step type to create process workflow steps)","description":"","step_type":"wiaas_delivery_step","step_highlight":"0","step_highlight_type":"color","step_highlight_color":"#dd3333","feed_condition_conditional_logic":"0","feed_condition_conditional_logic_object":[],"scheduled":"0","schedule_type":"delay","schedule_date":"","schedule_delay_offset":"","schedule_delay_unit":"hours","schedule_date_field_offset":"0","schedule_date_field_offset_unit":"hours","schedule_date_field_before_after":"after","instructionsEnable":"0","instructionsValue":"","is_visible_to_customer":"1","target_form_id":"","destination_complete":"next"},"addon_slug":"gravityflow","event_type":null}]}},"version":"2.3.2"}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_customer_acceptance_form.json b/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_customer_acceptance_form.json
deleted file mode 100644
index 659e050..0000000
--- a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_customer_acceptance_form.json
+++ /dev/null
@@ -1,524 +0,0 @@
-{
- "0": {
- "title": "DELIVERY ACTION TYPE: Customer acceptance",
- "description": "The customer must accept the implementation before further actions can be taken. If the customer isn't satisfied, the problems or discrepancies must be fixed in order to gen an acceptance.",
- "labelPlacement": "top_label",
- "descriptionPlacement": "below",
- "button": {
- "type": "text",
- "text": "Submit",
- "imageUrl": ""
- },
- "fields": [
- {
- "type": "workflow_user",
- "id": 2,
- "label": "customer-id",
- "adminLabel": "customer-id",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "administrative",
- "inputs": null,
- "choices": [
- ],
- "formId": 1,
- "description": "",
- "allowsPrepopulate": true,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "customer-id",
- "noDuplicates": false,
- "defaultValue": "",
- "conditionalLogic": "",
- "failed_validation": "",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": "",
- "enablePrice": "",
- "gravityflowUsersRoleFilter": ""
- },
- {
- "type": "date",
- "id": 6,
- "label": "Actual date",
- "adminLabel": "",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "dateType": "datepicker",
- "calendarIconType": "none",
- "formId": 1,
- "description": "",
- "allowsPrepopulate": false,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "",
- "noDuplicates": false,
- "defaultValue": "",
- "choices": "",
- "conditionalLogic": "",
- "calendarIconUrl": "",
- "dateFormat": "ymd_dash",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": ""
- },
- {
- "type": "radio",
- "id": 8,
- "label": "acceptance",
- "adminLabel": "",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "choices": [
- {
- "text": "not-accepted",
- "value": "not-accepted",
- "isSelected": true,
- "price": ""
- },
- {
- "text": "accept",
- "value": "accept",
- "isSelected": false,
- "price": ""
- },
- {
- "text": "decline",
- "value": "decline",
- "isSelected": false,
- "price": ""
- }
- ],
- "formId": 1,
- "description": "",
- "allowsPrepopulate": false,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "",
- "noDuplicates": false,
- "defaultValue": "",
- "conditionalLogic": "",
- "productField": "",
- "enableOtherChoice": "",
- "enablePrice": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": ""
- },
- {
- "type": "date",
- "id": 9,
- "label": "Expiration date",
- "adminLabel": "",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "dateType": "datepicker",
- "calendarIconType": "none",
- "formId": 1,
- "description": "",
- "allowsPrepopulate": false,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "",
- "noDuplicates": false,
- "defaultValue": "",
- "choices": "",
- "conditionalLogic": "",
- "calendarIconUrl": "",
- "dateFormat": "ymd_dash",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": ""
- },
- {
- "type": "text",
- "id": 10,
- "label": "Reason",
- "adminLabel": "",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "formId": 1,
- "description": "",
- "allowsPrepopulate": false,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "",
- "noDuplicates": false,
- "defaultValue": "",
- "choices": "",
- "conditionalLogic": "",
- "productField": "",
- "enablePasswordInput": "",
- "maxLength": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": "",
- "enablePrice": ""
- },
- {
- "type": "fileupload",
- "id": 12,
- "label": "File",
- "adminLabel": "",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "formId": 1,
- "description": "Upload customer acceptance file",
- "allowsPrepopulate": false,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "",
- "noDuplicates": false,
- "defaultValue": "",
- "choices": "",
- "conditionalLogic": "",
- "maxFileSize": "",
- "maxFiles": "",
- "multipleFiles": true,
- "allowedExtensions": "pdf,docx,doc,xlsx,xls,odt,ods,jpg,png,jpeg",
- "productField": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false
- }
- ],
- "version": "2.3.2",
- "id": 1,
- "useCurrentUserAsAuthor": true,
- "postContentTemplateEnabled": false,
- "postTitleTemplateEnabled": false,
- "postTitleTemplate": "",
- "postContentTemplate": "",
- "lastPageButton": null,
- "pagination": null,
- "firstPageCssClass": null,
- "is_active": "1",
- "date_created": "2018-08-15 20:30:18",
- "is_trash": "0",
- "confirmations": [
- {
- "id": "5b5f75f7494b7",
- "name": "Default Confirmation",
- "isDefault": true,
- "type": "message",
- "message": "Thanks for contacting us! We will get in touch with you shortly.",
- "url": "",
- "pageId": "",
- "queryString": ""
- }
- ],
- "notifications": [
- {
- "id": "5b5f75f748cee",
- "to": "{admin_email}",
- "name": "Admin Notification",
- "event": "form_submission",
- "toType": "email",
- "subject": "New submission from {form_title}",
- "message": "{all_fields}"
- }
- ],
- "feeds": {
- "gravityflow": [
- {
- "id": "1",
- "form_id": "1",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Upload acceptance file",
- "description": "",
- "step_type": "user_input",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "schedule_date_field": "6",
- "type": "select",
- "assignees": [
- "role|administrator",
- "assignee_user_field|2"
- ],
- "routing": "",
- "assignee_policy": "any",
- "highlight_editable_fields_enabled": "0",
- "highlight_editable_fields_class": "green-triangle",
- "instructionsEnable": "0",
- "instructionsValue": "",
- "display_fields_mode": "selected_fields",
- "default_status": "hidden",
- "note_mode": "not_required",
- "assignee_notification_enabled": "0",
- "assignee_notification_from_name": "",
- "assignee_notification_from_email": "{admin_email}",
- "assignee_notification_reply_to": "",
- "assignee_notification_bcc": "",
- "assignee_notification_subject": "Upload order acceptance file",
- "assignee_notification_message": "A new entry requires your input.",
- "assignee_notification_disable_autoformat": "0",
- "resend_assignee_emailEnable": "0",
- "resend_assignee_emailValue": "7",
- "resend_assignee_email_repeatEnable": "0",
- "resend_assignee_email_repeatValue": "3",
- "in_progress_notification_enabled": "0",
- "in_progress_notification_type": "select",
- "in_progress_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "in_progress_notification_from_name": "",
- "in_progress_notification_from_email": "{admin_email}",
- "in_progress_notification_reply_to": "",
- "in_progress_notification_bcc": "",
- "in_progress_notification_subject": "",
- "in_progress_notification_message": "Entry {entry_id} has been updated and remains in progress.",
- "in_progress_notification_disable_autoformat": "0",
- "complete_notification_enabled": "0",
- "complete_notification_type": "select",
- "complete_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "complete_notification_from_name": "",
- "complete_notification_from_email": "{admin_email}",
- "complete_notification_reply_to": "",
- "complete_notification_bcc": "",
- "complete_notification_subject": "",
- "complete_notification_message": "Entry {entry_id} has been updated completing the step.",
- "complete_notification_disable_autoformat": "0",
- "confirmation_messageEnable": "0",
- "confirmation_messageValue": "Thank you.",
- "expiration": "0",
- "expiration_type": "date_field",
- "expiration_date": "",
- "expiration_delay_offset": "7",
- "expiration_delay_unit": "days",
- "expiration_date_field_offset": "0",
- "expiration_date_field_offset_unit": "hours",
- "expiration_date_field_before_after": "after",
- "expiration_date_field": "9",
- "status_expiration": "expired",
- "destination_expired": "2",
- "destination_complete": "next"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- },
- {
- "id": "2",
- "form_id": "1",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Approve customer acceptance",
- "description": "",
- "step_type": "approval",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "type": "select",
- "assignees": [
- "role|administrator"
- ],
- "routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "assignee_policy": "any",
- "instructionsEnable": "0",
- "instructionsValue": "Instructions: please review the values in the fields below and click on the Approve or Reject button",
- "display_fields_mode": "all_fields",
- "assignee_notification_enabled": "0",
- "assignee_notification_from_name": "",
- "assignee_notification_from_email": "{admin_email}",
- "assignee_notification_reply_to": "",
- "assignee_notification_bcc": "",
- "assignee_notification_subject": "",
- "assignee_notification_message": "A new entry is pending your approval. Please check your Workflow Inbox.",
- "assignee_notification_disable_autoformat": "0",
- "resend_assignee_emailEnable": "0",
- "resend_assignee_emailValue": "7",
- "resend_assignee_email_repeatEnable": "0",
- "resend_assignee_email_repeatValue": "3",
- "rejection_notification_enabled": "0",
- "rejection_notification_type": "select",
- "rejection_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "rejection_notification_from_name": "",
- "rejection_notification_from_email": "{admin_email}",
- "rejection_notification_reply_to": "",
- "rejection_notification_bcc": "",
- "rejection_notification_subject": "",
- "rejection_notification_message": "Entry {entry_id} has been rejected",
- "rejection_notification_disable_autoformat": "0",
- "approval_notification_enabled": "0",
- "approval_notification_type": "select",
- "approval_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "approval_notification_from_name": "",
- "approval_notification_from_email": "{admin_email}",
- "approval_notification_reply_to": "",
- "approval_notification_bcc": "",
- "approval_notification_subject": "",
- "approval_notification_message": "Entry {entry_id} has been approved",
- "approval_notification_disable_autoformat": "0",
- "revertEnable": "0",
- "revertValue": 1,
- "note_mode": "not_required",
- "expiration": "0",
- "expiration_type": "delay",
- "expiration_date": "",
- "expiration_delay_offset": "",
- "expiration_delay_unit": "hours",
- "expiration_date_field_offset": "0",
- "expiration_date_field_offset_unit": "hours",
- "expiration_date_field_before_after": "after",
- "status_expiration": "rejected",
- "destination_expired": "next",
- "destination_rejected": 1,
- "destination_approved": "next"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- }
- ]
- }
- },
- "version": "2.3.2"
-}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_manual_form.json b/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_manual_form.json
deleted file mode 100644
index cbca857..0000000
--- a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_manual_form.json
+++ /dev/null
@@ -1,252 +0,0 @@
-{
- "0": {
- "title": "DELIVERY ACTION TYPE: Manual",
- "description": "Manual process step action type",
- "labelPlacement": "top_label",
- "descriptionPlacement": "below",
- "button": {
- "type": "text",
- "text": "Submit",
- "imageUrl": ""
- },
- "fields": [
- {
- "type": "workflow_user",
- "id": 2,
- "label": "customer-id",
- "adminLabel": "customer-id",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "administrative",
- "inputs": null,
- "choices": [
- {
- "value": 2,
- "text": "Customer Wiaas"
- },
- {
- "value": 1,
- "text": "wpUser"
- }
- ],
- "formId": 4,
- "description": "",
- "allowsPrepopulate": true,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "customer-id",
- "noDuplicates": false,
- "defaultValue": "",
- "conditionalLogic": "",
- "failed_validation": "",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": "",
- "enablePrice": "",
- "gravityflowUsersRoleFilter": ""
- },
- {
- "type": "date",
- "id": 3,
- "label": "Actual Date",
- "adminLabel": "",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "dateType": "datepicker",
- "calendarIconType": "calendar",
- "formId": 4,
- "description": "",
- "allowsPrepopulate": false,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "",
- "noDuplicates": false,
- "defaultValue": "",
- "choices": "",
- "conditionalLogic": "",
- "calendarIconUrl": "",
- "dateFormat": "ymd_dash",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": ""
- }
- ],
- "version": "2.3.2",
- "id": 4,
- "useCurrentUserAsAuthor": true,
- "postContentTemplateEnabled": false,
- "postTitleTemplateEnabled": false,
- "postTitleTemplate": "",
- "postContentTemplate": "",
- "lastPageButton": null,
- "pagination": null,
- "firstPageCssClass": null,
- "is_active": "1",
- "date_created": "2018-08-09 15:36:00",
- "is_trash": "0",
- "confirmations": [
- {
- "id": "5b5f9ebc52a80",
- "name": "Default Confirmation",
- "isDefault": true,
- "type": "message",
- "message": "Thanks for contacting us! We will get in touch with you shortly.",
- "url": "",
- "pageId": "",
- "queryString": ""
- }
- ],
- "notifications": [
- {
- "id": "5b5f9ebc520f3",
- "to": "{admin_email}",
- "name": "Admin Notification",
- "event": "form_submission",
- "toType": "email",
- "subject": "New submission from {form_title}",
- "message": "{all_fields}"
- }
- ],
- "feeds": {
- "gravityflow": [
- {
- "id": "6",
- "form_id": "4",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Complete step",
- "description": "",
- "step_type": "approval",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "schedule_date_field": "3",
- "type": "select",
- "assignees": [
- "role|administrator"
- ],
- "routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "assignee_policy": "any",
- "instructionsEnable": "0",
- "instructionsValue": "Instructions: please review the values in the fields below and click on the Approve or Reject button",
- "display_fields_mode": "all_fields",
- "assignee_notification_enabled": "0",
- "assignee_notification_from_name": "",
- "assignee_notification_from_email": "{admin_email}",
- "assignee_notification_reply_to": "",
- "assignee_notification_bcc": "",
- "assignee_notification_subject": "",
- "assignee_notification_message": "A new entry is pending your approval. Please check your Workflow Inbox.",
- "assignee_notification_disable_autoformat": "0",
- "resend_assignee_emailEnable": "0",
- "resend_assignee_emailValue": "7",
- "resend_assignee_email_repeatEnable": "0",
- "resend_assignee_email_repeatValue": "3",
- "rejection_notification_enabled": "0",
- "rejection_notification_type": "select",
- "rejection_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "rejection_notification_from_name": "",
- "rejection_notification_from_email": "{admin_email}",
- "rejection_notification_reply_to": "",
- "rejection_notification_bcc": "",
- "rejection_notification_subject": "",
- "rejection_notification_message": "Entry {entry_id} has been rejected",
- "rejection_notification_disable_autoformat": "0",
- "approval_notification_enabled": "0",
- "approval_notification_type": "select",
- "approval_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "approval_notification_from_name": "",
- "approval_notification_from_email": "{admin_email}",
- "approval_notification_reply_to": "",
- "approval_notification_bcc": "",
- "approval_notification_subject": "",
- "approval_notification_message": "Entry {entry_id} has been approved",
- "approval_notification_disable_autoformat": "0",
- "note_mode": "not_required",
- "expiration": "0",
- "expiration_type": "delay",
- "expiration_date": "",
- "expiration_delay_offset": "",
- "expiration_delay_unit": "hours",
- "expiration_date_field_offset": "0",
- "expiration_date_field_offset_unit": "hours",
- "expiration_date_field_before_after": "after",
- "expiration_date_field": "3",
- "status_expiration": "rejected",
- "destination_expired": "next",
- "destination_rejected": "complete",
- "destination_approved": "next"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- }
- ]
- }
- },
- "version": "2.3.2"
-}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_schedule_meeting.json b/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_schedule_meeting.json
deleted file mode 100644
index be4ebb0..0000000
--- a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_schedule_meeting.json
+++ /dev/null
@@ -1,406 +0,0 @@
-{
- "0": {
- "title": "DELIVERY ACTION TYPE: Schedule meeting",
- "description": "Schedule meeting with customer",
- "labelPlacement": "top_label",
- "descriptionPlacement": "below",
- "button": {
- "type": "text",
- "text": "Submit",
- "imageUrl": ""
- },
- "fields": [
- {
- "type": "workflow_user",
- "id": 3,
- "label": "customer-id",
- "adminLabel": "customer-id",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "administrative",
- "inputs": null,
- "choices": [
- {
- "value": 2,
- "text": "Customer Wiaas"
- },
- {
- "value": 1,
- "text": "wpUser"
- }
- ],
- "formId": 2,
- "description": "",
- "allowsPrepopulate": true,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "customer-id",
- "noDuplicates": false,
- "defaultValue": "",
- "conditionalLogic": "",
- "failed_validation": "",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": "",
- "gravityflowUsersRoleFilter": ""
- },
- {
- "type": "date",
- "id": 4,
- "label": "Actual Date",
- "adminLabel": "",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "dateType": "datepicker",
- "calendarIconType": "calendar",
- "formId": 2,
- "description": "",
- "allowsPrepopulate": false,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "",
- "noDuplicates": false,
- "defaultValue": "",
- "choices": "",
- "conditionalLogic": "",
- "calendarIconUrl": "",
- "dateFormat": "ymd_dash",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": ""
- },
- {
- "type": "date",
- "id": 5,
- "label": "Schedule date",
- "adminLabel": "",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "dateType": "datepicker",
- "calendarIconType": "calendar",
- "formId": 2,
- "description": "",
- "allowsPrepopulate": false,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "",
- "noDuplicates": false,
- "defaultValue": "",
- "choices": "",
- "conditionalLogic": "",
- "calendarIconUrl": "",
- "dateFormat": "ymd_dash",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false
- }
- ],
- "version": "2.3.2",
- "id": 2,
- "useCurrentUserAsAuthor": true,
- "postContentTemplateEnabled": false,
- "postTitleTemplateEnabled": false,
- "postTitleTemplate": "",
- "postContentTemplate": "",
- "lastPageButton": null,
- "pagination": null,
- "firstPageCssClass": null,
- "is_active": "1",
- "date_created": "2018-08-09 15:35:59",
- "is_trash": "0",
- "confirmations": [
- {
- "id": "5b60b12baa00e",
- "name": "Default Confirmation",
- "isDefault": true,
- "type": "message",
- "message": "Thanks for contacting us! We will get in touch with you shortly.",
- "url": "",
- "pageId": "",
- "queryString": ""
- }
- ],
- "notifications": [
- {
- "id": "5b60b12ba9850",
- "to": "{admin_email}",
- "name": "Admin Notification",
- "event": "form_submission",
- "toType": "email",
- "subject": "New submission from {form_title}",
- "message": "{all_fields}"
- }
- ],
- "feeds": {
- "gravityflow": [
- {
- "id": "3",
- "form_id": "2",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Broker proposes meeting date",
- "description": "",
- "step_type": "user_input",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "schedule_date_field": "4",
- "type": "select",
- "assignees": [
- "role|administrator"
- ],
- "editable_fields": [
- "4",
- "5"
- ],
- "routing": "",
- "assignee_policy": "all",
- "highlight_editable_fields_enabled": "0",
- "highlight_editable_fields_class": "green-triangle",
- "instructionsEnable": "0",
- "instructionsValue": "",
- "display_fields_mode": "selected_fields",
- "display_fields_selected": [
- "4",
- "5"
- ],
- "default_status": "submit_buttons",
- "note_mode": "not_required",
- "assignee_notification_enabled": "0",
- "assignee_notification_from_name": "",
- "assignee_notification_from_email": "{admin_email}",
- "assignee_notification_reply_to": "",
- "assignee_notification_bcc": "",
- "assignee_notification_subject": "",
- "assignee_notification_message": "A new entry requires your input.",
- "assignee_notification_disable_autoformat": "0",
- "resend_assignee_emailEnable": "0",
- "resend_assignee_emailValue": "7",
- "resend_assignee_email_repeatEnable": "0",
- "resend_assignee_email_repeatValue": "3",
- "in_progress_notification_enabled": "0",
- "in_progress_notification_type": "select",
- "in_progress_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "in_progress_notification_from_name": "",
- "in_progress_notification_from_email": "{admin_email}",
- "in_progress_notification_reply_to": "",
- "in_progress_notification_bcc": "",
- "in_progress_notification_subject": "",
- "in_progress_notification_message": "Entry {entry_id} has been updated and remains in progress.",
- "in_progress_notification_disable_autoformat": "0",
- "complete_notification_enabled": "0",
- "complete_notification_type": "select",
- "complete_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "complete_notification_from_name": "",
- "complete_notification_from_email": "{admin_email}",
- "complete_notification_reply_to": "",
- "complete_notification_bcc": "",
- "complete_notification_subject": "",
- "complete_notification_message": "Entry {entry_id} has been updated completing the step.",
- "complete_notification_disable_autoformat": "0",
- "confirmation_messageEnable": "0",
- "confirmation_messageValue": "Thank you.",
- "expiration": "0",
- "expiration_type": "delay",
- "expiration_date": "",
- "expiration_delay_offset": "",
- "expiration_delay_unit": "hours",
- "expiration_date_field_offset": "0",
- "expiration_date_field_offset_unit": "hours",
- "expiration_date_field_before_after": "after",
- "expiration_date_field": "4",
- "status_expiration": "complete",
- "destination_expired": "next",
- "destination_complete": "next"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- },
- {
- "id": "4",
- "form_id": "2",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Customer approval for scheduled date",
- "description": "",
- "step_type": "approval",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "schedule_date_field": "4",
- "type": "select",
- "assignees": [
- "assignee_user_field|3"
- ],
- "routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "assignee_policy": "all",
- "instructionsEnable": "0",
- "instructionsValue": "Instructions: please review the values in the fields below and click on the Approve or Reject button",
- "display_fields_mode": "selected_fields",
- "display_fields_selected": [
- "5"
- ],
- "assignee_notification_enabled": "0",
- "assignee_notification_from_name": "",
- "assignee_notification_from_email": "{admin_email}",
- "assignee_notification_reply_to": "",
- "assignee_notification_bcc": "",
- "assignee_notification_subject": "",
- "assignee_notification_message": "A new entry is pending your approval. Please check your Workflow Inbox.",
- "assignee_notification_disable_autoformat": "0",
- "resend_assignee_emailEnable": "0",
- "resend_assignee_emailValue": "7",
- "resend_assignee_email_repeatEnable": "0",
- "resend_assignee_email_repeatValue": "3",
- "rejection_notification_enabled": "0",
- "rejection_notification_type": "select",
- "rejection_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "rejection_notification_from_name": "",
- "rejection_notification_from_email": "{admin_email}",
- "rejection_notification_reply_to": "",
- "rejection_notification_bcc": "",
- "rejection_notification_subject": "",
- "rejection_notification_message": "Entry {entry_id} has been rejected",
- "rejection_notification_disable_autoformat": "0",
- "approval_notification_enabled": "0",
- "approval_notification_type": "select",
- "approval_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "approval_notification_from_name": "",
- "approval_notification_from_email": "{admin_email}",
- "approval_notification_reply_to": "",
- "approval_notification_bcc": "",
- "approval_notification_subject": "",
- "approval_notification_message": "Entry {entry_id} has been approved",
- "approval_notification_disable_autoformat": "0",
- "revertEnable": "0",
- "revertValue": 3,
- "note_mode": "not_required",
- "expiration": "0",
- "expiration_type": "delay",
- "expiration_date": "",
- "expiration_delay_offset": "",
- "expiration_delay_unit": "hours",
- "expiration_date_field_offset": "0",
- "expiration_date_field_offset_unit": "hours",
- "expiration_date_field_before_after": "after",
- "expiration_date_field": "4",
- "status_expiration": "rejected",
- "destination_expired": "next",
- "destination_rejected": 3,
- "destination_approved": "complete"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- }
- ]
- }
- },
- "version": "2.3.2"
-}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_validate_questionnaire_form.json b/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_validate_questionnaire_form.json
deleted file mode 100644
index e5e55f1..0000000
--- a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_action_validate_questionnaire_form.json
+++ /dev/null
@@ -1,264 +0,0 @@
-{
- "0": {
- "title": "DELIVERY ACTION TYPE: Validate Questionnaire",
- "description": "The configuration details submitted at ordering must be validated and any missing or incomplete information must be added.",
- "labelPlacement": "top_label",
- "descriptionPlacement": "below",
- "button": {
- "type": "text",
- "text": "Submit",
- "imageUrl": ""
- },
- "fields": [
- {
- "type": "workflow_user",
- "id": 4,
- "label": "customer-id",
- "adminLabel": "customer-id",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "administrative",
- "inputs": null,
- "choices": [
- {
- "value": 2,
- "text": "Customer Wiaas"
- },
- {
- "value": 1,
- "text": "wpUser"
- }
- ],
- "formId": 3,
- "description": "",
- "allowsPrepopulate": true,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "customer-id",
- "noDuplicates": false,
- "defaultValue": "",
- "conditionalLogic": "",
- "failed_validation": "",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": "",
- "enablePrice": "",
- "gravityflowUsersRoleFilter": ""
- },
- {
- "type": "date",
- "id": 5,
- "label": "Actual date",
- "adminLabel": "",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "dateType": "datepicker",
- "calendarIconType": "none",
- "formId": 3,
- "description": "",
- "allowsPrepopulate": false,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "",
- "noDuplicates": false,
- "defaultValue": "",
- "choices": "",
- "conditionalLogic": "",
- "calendarIconUrl": "",
- "dateFormat": "",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false
- }
- ],
- "version": "2.3.2",
- "id": 3,
- "useCurrentUserAsAuthor": true,
- "postContentTemplateEnabled": false,
- "postTitleTemplateEnabled": false,
- "postTitleTemplate": "",
- "postContentTemplate": "",
- "lastPageButton": null,
- "pagination": null,
- "firstPageCssClass": null,
- "is_active": "1",
- "date_created": "2018-08-09 15:36:00",
- "is_trash": "0",
- "confirmations": [
- {
- "id": "5b5f688188e90",
- "name": "Default Confirmation",
- "isDefault": true,
- "type": "message",
- "message": "Thanks for contacting us! We will get in touch with you shortly.",
- "url": "",
- "pageId": "",
- "queryString": ""
- }
- ],
- "notifications": [
- {
- "id": "5b5f68818822e",
- "to": "{admin_email}",
- "name": "Admin Notification",
- "event": "form_submission",
- "toType": "email",
- "subject": "New submission from {form_title}",
- "message": "{all_fields}"
- }
- ],
- "feeds": {
- "gravityflow": [
- {
- "id": "5",
- "form_id": "3",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Approve customer configuration",
- "description": "",
- "step_type": "approval",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": {
- "conditionalLogic": {
- "actionType": "show",
- "logicType": "all",
- "rules": [
- {
- "fieldId": "2",
- "operator": "is",
- "value": "administrator"
- }
- ]
- }
- },
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "schedule_date_field": "5",
- "type": "select",
- "assignees": [
- "role|administrator"
- ],
- "routing": [
- {
- "target": false,
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": false,
- "assignee": "user_id|2"
- }
- ],
- "assignee_policy": "any",
- "instructionsEnable": "1",
- "instructionsValue": "Instructions: please review the values in the fields below and click on the Approve or Reject button",
- "display_fields_mode": "selected_fields",
- "assignee_notification_enabled": "0",
- "assignee_notification_from_name": "",
- "assignee_notification_from_email": "{admin_email}",
- "assignee_notification_reply_to": "",
- "assignee_notification_bcc": "",
- "assignee_notification_subject": "",
- "assignee_notification_message": "A new entry is pending your approval. Please check your Workflow Inbox.",
- "assignee_notification_disable_autoformat": "0",
- "resend_assignee_emailEnable": "0",
- "resend_assignee_emailValue": "7",
- "resend_assignee_email_repeatEnable": "0",
- "resend_assignee_email_repeatValue": "3",
- "rejection_notification_enabled": "0",
- "rejection_notification_type": "select",
- "rejection_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "rejection_notification_from_name": "",
- "rejection_notification_from_email": "{admin_email}",
- "rejection_notification_reply_to": "",
- "rejection_notification_bcc": "",
- "rejection_notification_subject": "",
- "rejection_notification_message": "Entry {entry_id} has been rejected",
- "rejection_notification_disable_autoformat": "0",
- "approval_notification_enabled": "0",
- "approval_notification_type": "select",
- "approval_notification_routing": [
- {
- "assignee": "user_id|2",
- "fieldId": "0",
- "operator": "is",
- "value": "",
- "type": ""
- }
- ],
- "approval_notification_from_name": "",
- "approval_notification_from_email": "{admin_email}",
- "approval_notification_reply_to": "",
- "approval_notification_bcc": "",
- "approval_notification_subject": "",
- "approval_notification_message": "Entry {entry_id} has been approved",
- "approval_notification_disable_autoformat": "0",
- "note_mode": "not_required",
- "expiration": "0",
- "expiration_type": "delay",
- "expiration_date": "",
- "expiration_delay_offset": "",
- "expiration_delay_unit": "hours",
- "expiration_date_field_offset": "0",
- "expiration_date_field_offset_unit": "hours",
- "expiration_date_field_before_after": "after",
- "expiration_date_field": "5",
- "status_expiration": "rejected",
- "destination_expired": "next",
- "destination_rejected": "complete",
- "destination_approved": "next"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- }
- ]
- }
- },
- "version": "2.3.2"
-}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_process_normal_delivery_form.json b/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_process_normal_delivery_form.json
deleted file mode 100644
index 7258d6f..0000000
--- a/backend/app/plugins/wiaas/includes/db-updates/data/delivery-forms/delivery_process_normal_delivery_form.json
+++ /dev/null
@@ -1,338 +0,0 @@
-{
- "0": {
- "title": "DELIVERY PROCESS: Normal Delivery",
- "description": "Normal delivery process",
- "labelPlacement": "top_label",
- "descriptionPlacement": "below",
- "button": {
- "type": "text",
- "text": "Submit",
- "imageUrl": ""
- },
- "fields": [
- {
- "type": "number",
- "id": 1,
- "label": "order-id",
- "adminLabel": "order-id",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "numberFormat": "decimal_dot",
- "formId": 5,
- "description": "",
- "allowsPrepopulate": true,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "order-id",
- "noDuplicates": false,
- "defaultValue": "",
- "choices": "",
- "conditionalLogic": "",
- "enableCalculation": false,
- "rangeMin": "",
- "rangeMax": "",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": "",
- "enablePrice": ""
- },
- {
- "type": "workflow_user",
- "id": 2,
- "label": "customer-id",
- "adminLabel": "customer-id",
- "isRequired": false,
- "size": "medium",
- "errorMessage": "",
- "visibility": "visible",
- "inputs": null,
- "choices": [
- {
- "value": 2,
- "text": "Customer Wiaas"
- },
- {
- "value": 1,
- "text": "wpUser"
- }
- ],
- "formId": 5,
- "description": "",
- "allowsPrepopulate": true,
- "inputMask": false,
- "inputMaskValue": "",
- "inputType": "",
- "labelPlacement": "",
- "descriptionPlacement": "",
- "subLabelPlacement": "",
- "placeholder": "",
- "cssClass": "",
- "inputName": "customer-id",
- "noDuplicates": false,
- "defaultValue": "",
- "conditionalLogic": "",
- "failed_validation": "",
- "productField": "",
- "multipleFiles": false,
- "maxFiles": "",
- "calculationFormula": "",
- "calculationRounding": "",
- "enableCalculation": "",
- "disableQuantity": false,
- "displayAllCategories": false,
- "useRichTextEditor": false,
- "displayOnly": "",
- "enablePrice": "",
- "gravityflowUsersRoleFilter": ""
- }
- ],
- "version": "2.3.2.6",
- "id": 5,
- "useCurrentUserAsAuthor": true,
- "postContentTemplateEnabled": false,
- "postTitleTemplateEnabled": false,
- "postTitleTemplate": "",
- "postContentTemplate": "",
- "lastPageButton": null,
- "pagination": null,
- "firstPageCssClass": null,
- "is_active": "1",
- "date_created": "2018-08-09 15:36:00",
- "is_trash": "0",
- "confirmations": [
- {
- "id": "5b5f7ae4bb79e",
- "name": "Default Confirmation",
- "isDefault": true,
- "type": "message",
- "message": "Thanks for contacting us! We will get in touch with you shortly.",
- "url": "",
- "pageId": "",
- "queryString": ""
- }
- ],
- "notifications": [
- {
- "id": "5b5f7ae4baced",
- "to": "{admin_email}",
- "name": "Admin Notification",
- "event": "form_submission",
- "toType": "email",
- "subject": "New submission from {form_title}",
- "message": "{all_fields}",
- "isActive": false
- }
- ],
- "feeds": {
- "gravityflow": [
- {
- "id": "7",
- "form_id": "5",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Validate customer configuration information",
- "description": "Validate customer configuration information",
- "step_type": "wiaas_delivery_step",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "instructionsEnable": "0",
- "instructionsValue": "",
- "target_form_id": 3,
- "store_new_entry_idEnable": "1",
- "new_entry_id_field": "6",
- "destination_complete": "next"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- },
- {
- "id": "8",
- "form_id": "5",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Wait for installation to be scheduled and confirmed",
- "description": "Wait for installation to be scheduled and confirmed",
- "step_type": "wiaas_delivery_step",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "instructionsEnable": "0",
- "instructionsValue": "",
- "target_form_id": 4,
- "store_new_entry_idEnable": "0",
- "new_entry_id_field": "",
- "destination_complete": "next"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- },
- {
- "id": "9",
- "form_id": "5",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Installation",
- "description": " Installation",
- "step_type": "wiaas_delivery_step",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "instructionsEnable": "0",
- "instructionsValue": "",
- "target_form_id": 4,
- "store_new_entry_idEnable": "0",
- "new_entry_id_field": "",
- "destination_complete": "next"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- },
- {
- "id": "10",
- "form_id": "5",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Customer acceptance",
- "description": "Customer acceptance",
- "step_type": "wiaas_delivery_step",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "target_form_id": 1,
- "store_new_entry_idEnable": "1",
- "new_entry_id_field": "7",
- "destination_complete": "next"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- },
- {
- "id": "11",
- "form_id": "5",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Customer training",
- "description": "Customer training",
- "step_type": "wiaas_delivery_step",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "instructionsEnable": "0",
- "instructionsValue": "",
- "target_form_id": 4,
- "store_new_entry_idEnable": "0",
- "new_entry_id_field": "",
- "destination_complete": "next",
- "feedName": " - Copy 1"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- },
- {
- "id": "12",
- "form_id": "5",
- "is_active": "1",
- "feed_order": "0",
- "meta": {
- "step_name": "Set start\/stop dates for contracts",
- "description": "Set start\/stop dates for contracts",
- "step_type": "wiaas_delivery_step",
- "step_highlight": "0",
- "step_highlight_type": "color",
- "step_highlight_color": "#dd3333",
- "feed_condition_conditional_logic": "0",
- "feed_condition_conditional_logic_object": [],
- "scheduled": "0",
- "schedule_type": "delay",
- "schedule_date": "",
- "schedule_delay_offset": "",
- "schedule_delay_unit": "hours",
- "schedule_date_field_offset": "0",
- "schedule_date_field_offset_unit": "hours",
- "schedule_date_field_before_after": "after",
- "instructionsEnable": "0",
- "instructionsValue": "",
- "target_form_id": 4,
- "store_new_entry_idEnable": "0",
- "new_entry_id_field": "",
- "destination_complete": "next"
- },
- "addon_slug": "gravityflow",
- "event_type": null
- }
- ]
- }
- },
- "version": "2.3.2"
-}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-general.php b/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-general.php
index b30421a..76b4f60 100644
--- a/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-general.php
+++ b/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-general.php
@@ -17,59 +17,6 @@ function wiaas_db_update_setup_gravity() {
update_option('gravityflow_pending_installation', false);
}
-function wiaas_db_update_add_delivery_process_forms() {
- $action_type_forms_files = array(
- 'delivery_action_customer_acceptance_form',
- 'delivery_action_schedule_meeting',
- 'delivery_action_validate_questionnaire_form',
- 'delivery_action_manual_form',
- );
-
- // Since import action will generate form with new id, we need to remember this mapping
- // so we can update process delivery steps to point to correct form ids
- $action_type_forms_ids_mappings = array();
-
- $process_forms_files = array(
- 'delivery_process_normal_delivery_form'
- );
-
- $created_forms = array();
-
- // import forms for delivery action types
- foreach ($action_type_forms_files as $action_type_form_file) {
- $form_json = file_get_contents( dirname( __FILE__ ) . "/data/delivery-forms/" . $action_type_form_file . '.json' );
-
- $form_meta = json_decode( $form_json, true );
- $form_meta = $form_meta[0];
-
- $form_id = GFAPI::add_form($form_meta);
-
- $created_forms[] = GFAPI::get_form($form_id);
-
- $action_type_forms_ids_mappings[$form_meta['id']] = $form_id;
- }
-
- // import forms for delivery process
- foreach ($process_forms_files as $process_form_file) {
- $form_json = file_get_contents( dirname( __FILE__ ) . "/data/delivery-forms/" . $process_form_file . '.json' );
-
- $form_meta = json_decode( $form_json, true );
- $form_meta = $form_meta[0];
-
- // update delivery steps forms ids with correct values
- foreach ($form_meta['feeds']['gravityflow'] as $key => $process_step_meta) {
- $process_step_target_form_id = $form_meta['feeds']['gravityflow'][$key]['meta']['target_form_id'];
- $form_meta['feeds']['gravityflow'][$key]['meta']['target_form_id'] = $action_type_forms_ids_mappings[$process_step_target_form_id];
- }
-
- $form_id = GFAPI::add_form($form_meta);
-
- $created_forms[] = GFAPI::get_form($form_id);
- }
-
- do_action('gform_forms_post_import', $created_forms);
-}
-
function wiaas_db_update_enable_orders_access_management() {
$post_types_option = Groups_Options::get_option( Groups_Post_Access::POST_TYPES, array() );
@@ -138,4 +85,40 @@ function wiaas_disable_processing_order_email_delivery() {
'heading' => '',
'mail_type' => 'html'
) );
+}
+
+
+function wiaas_db_update_update_delivery_forms() {
+
+ $forms = GFAPI::get_forms();
+ foreach ($forms as $form) {
+ RGFormsModel::update_form_active($form['id'], false);
+ }
+
+ $created_forms = array();
+
+ $actions_forms_json = file_get_contents( dirname( __FILE__ ) . '/data/delivery-forms/delivery-action-forms.json' );
+
+ $action_forms_meta = json_decode( $actions_forms_json, true );
+
+ foreach ($action_forms_meta as $action_form_meta) {
+
+ $form_id = GFAPI::add_form($action_form_meta);
+ $created_forms[] = GFAPI::get_form($form_id);
+ }
+
+
+ $sample_form_json = file_get_contents( dirname( __FILE__ ) . '/data/delivery-forms/delivery-process-sample-form.json' );
+
+ $sample_form = json_decode( $sample_form_json, true );
+
+ $sample_form = $sample_form[0];
+
+ $sample_form_id = GFAPI::add_form($sample_form);
+
+ RGFormsModel::update_form_active($sample_form_id, false);
+
+ $created_forms[] = GFAPI::get_form($sample_form_id);
+
+ do_action('gform_forms_post_import', $created_forms);
}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-roles.php b/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-roles.php
index 6a3fcc5..b39cb5e 100644
--- a/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-roles.php
+++ b/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-roles.php
@@ -315,4 +315,12 @@ function wiaas_admin_create_role_access_groups() {
function wiaas_db_update_update_supplier_order_capabilities() {
// add supplier role to view orders
wp_roles()->add_cap( 'supplier', 'edit_shop_orders' );
+}
+
+function wiaas_db_update_enable_workflow_inbox_for_roles() {
+ // add workflow inbox for supplier
+ wp_roles()->add_cap( 'supplier', 'gravityflow_inbox' );
+ // add workflow inbox for commercial lead
+ wp_roles()->add_cap( 'commercial_lead', 'gravityflow_inbox' );
+
}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-action.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-action.php
new file mode 100644
index 0000000..5ea5d6b
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-action.php
@@ -0,0 +1,406 @@
+target_form_id)) {
+
+ return null;
+ }
+
+ return GFAPI::get_form($step->target_form_id);
+ }
+
+ /**
+ * Get action code for delivery process step form
+ *
+ * Action code is used for implementing specific logic for step form
+ *
+ * @param Wiaas_Delivery_Process_Step $step
+ *
+ * @return string
+ */
+ public static function get_process_step_action_form_action_code($step) {
+
+ $action_form = self::get_process_step_action_form($step);
+
+ if (empty($action_form)) {
+
+ return 'manual';
+ }
+
+ $delivery_settings = rgar($action_form, 'wiaas_delivery_process');
+
+ return empty($delivery_settings) ? 'manual' : $delivery_settings['delivery_action_code'];
+ }
+
+ /**
+ * Check if delivery process step has customer acceptance action form
+ *
+ * @param Wiaas_Delivery_Process_Step $step
+ *
+ * @return bool
+ */
+ public static function process_step_has_customer_acceptance_action($step) {
+
+ return self::get_process_step_action_form_action_code($step) === 'customer-acceptance';
+ }
+
+ /**
+ * Check if delivery process step has customer validate action form
+ *
+ * @param Wiaas_Delivery_Process_Step $step
+ *
+ * @return bool
+ */
+ public static function process_step_has_customer_validate_questionnaires_action($step) {
+
+ return self::get_process_step_action_form_action_code($step) === 'validate-questionnaire';
+ }
+
+ /**
+ * @param Wiaas_Delivery_Process_Step $step
+ *
+ * @return array|WP_Error
+ */
+ public static function get_process_step_action_entries(Wiaas_Delivery_Process_Step $step) {
+
+ $action_form = self::get_process_step_action_form($step);
+
+ if (!$action_form) {
+
+ return array();
+ }
+
+ $search_criteria = array(
+ 'field_filters' => array(
+ array( 'key' => 'wiaas_delivery_process_id',
+ 'value' => $step->get_entry_id()
+ ),
+ ),
+ );
+
+ $sorting = array( 'key' => 'date_created', 'direction' => 'DESC' );
+
+ return GFAPI::get_entries( $action_form, $search_criteria, $sorting );
+ }
+
+ /**
+ * Retrieve forms that will be used as possible action forms
+ *
+ * @return array
+ */
+ public static function get_action_forms() {
+
+ $forms = GFAPI::get_forms();
+
+ $action_forms = array();
+
+ foreach ( $forms as $form ) {
+
+ $delivery_settings = rgar($form, 'wiaas_delivery_process');
+
+ if ( ! empty($delivery_settings) && $delivery_settings['delivery_form_type'] === 'action'){
+
+ $action_forms[] = $form;
+ }
+ }
+
+ return $action_forms;
+ }
+
+ /**
+ * Complete current workflow step for action form
+ *
+ * @param int $action_entry_id
+ */
+ public static function complete_action_step($action_entry_id) {
+
+ $action_entry = GFAPI::get_entry($action_entry_id);
+
+ $action_form = GFAPI::get_form($action_entry['form_id']);
+
+ $workflow = new Gravity_Flow_API($action_form['id']);
+
+ $current_step = $workflow->get_current_step($action_entry);
+
+ if ( $current_step ) {
+
+ $new_status = $current_step->get_type() === 'approval' ? 'approved' : 'complete';
+
+ $assignees = $current_step->get_assignees();
+
+ foreach ($assignees as $assignee) {
+
+ $current_step->process_assignee_status($assignee, $new_status, $action_form);
+ }
+ }
+
+ gravity_flow()->process_workflow($action_form, $action_entry['id']);
+ }
+
+ /**
+ * Upload customer questionnaire document
+ *
+ * @param int $action_entry_id
+ */
+ public static function upload_customer_questionnaire($action_entry_id) {
+
+ $action_entry = GFAPI::get_entry($action_entry_id);
+
+ $document_field = GFCommon::get_fields_by_type(GFAPI::get_form($action_entry['form_id']), 'wiaas_order_bundle_document')[0];
+
+
+ $new_file = $document_field->get_single_file_value($action_entry['form_id'], 'file');
+
+ $action_entry[$document_field->id] = $new_file;
+
+ GFAPI::update_entry($action_entry);
+ }
+
+ /**
+ * Check if customer uploaded acceptance document
+ *
+ * @param int $action_entry_id
+ *
+ * @return bool
+ */
+ public static function is_customer_acceptance_uploaded($action_entry_id) {
+
+ $action_entry = GFAPI::get_entry($action_entry_id);
+ $action_form = GFAPI::get_form($action_entry['form_id']);
+
+
+ $acceptance_documents_field = GFCommon::get_fields_by_type($action_form, 'wiaas_order_document')[0];
+
+ return ! empty( $action_entry[$acceptance_documents_field->id]);
+ }
+
+ /**
+ * Update acceptance status for order
+ *
+ * @param int $action_entry_id
+ * @param $new_status
+ * @param $reason
+ */
+ public static function update_customer_acceptance_status($action_entry_id, $new_status, $reason) {
+
+ $action_entry = GFAPI::get_entry($action_entry_id);
+ $action_form = GFAPI::get_form($action_entry['form_id']);
+
+ $acceptance_field = GFCommon::get_fields_by_type($action_form, 'radio')[0];
+ $decline_reason_field = GFCommon::get_fields_by_type($action_form, 'textarea')[0];
+
+ $action_entry[$acceptance_field->id] = $new_status;
+ $action_entry[$decline_reason_field->id] = $reason;
+
+ GFAPI::update_entry($action_entry);
+
+ $workflow = new Gravity_Flow_API($action_form['id']);
+ $current_step = $workflow->get_current_step($action_entry);
+
+ if ($current_step && $current_step->get_t)
+
+ Wiaas_Delivery_Process_Action::complete_action_step($action_entry['id']);
+ }
+
+ /**
+ * Upload customer acceptance document for order
+ *
+ * @param int $action_entry_id
+ *
+ * @return bool
+ */
+ public static function upload_customer_acceptance_document($action_entry_id) {
+
+ $action_entry = GFAPI::get_entry($action_entry_id);
+ $action_form = GFAPI::get_form($action_entry['form_id']);
+
+ $acceptance_documents_field = GFCommon::get_fields_by_type($action_form, 'wiaas_order_document')[0];
+
+ $old_value = $action_entry[$acceptance_documents_field->id];
+
+ $value = $acceptance_documents_field->get_single_file_value($action_form['id'], 'file');
+
+ if ($acceptance_documents_field->multipleFiles ) {
+
+ $value = array( $value );
+
+ $old_value = json_decode( $old_value );
+
+ if (! empty($old_value)) {
+
+ $old_value = is_array( $old_value ) ? $old_value : array( $old_value );
+
+ $value = array_merge( $value, $old_value );
+ }
+
+ $value = json_encode( $value );
+ }
+
+ $action_entry[$acceptance_documents_field->id] = $value;
+
+ $result = GFAPI::update_entry($action_entry);
+
+ return ! is_wp_error($result);
+ }
+
+ /**
+ * Collect customer acceptance action data
+ *
+ * @param int $action_entry_id
+ *
+ * @return array
+ */
+ public static function get_customer_acceptance_action_data($action_entry_id) {
+
+ $action_entry = GFAPI::get_entry($action_entry_id);
+
+ $action_form = GFAPI::get_form($action_entry['form_id']);
+
+
+ $acceptance_documents_field = GFCommon::get_fields_by_type($action_form, 'wiaas_order_document')[0];
+ $acceptance_field = GFCommon::get_fields_by_type($action_form, 'radio')[0];
+ $decline_reason_field = GFCommon::get_fields_by_type($action_form, 'textarea')[0];
+ $expiration_date_field = GFCommon::get_fields_by_type($action_form, 'date')[0];
+
+ $file_paths = json_decode($action_entry[$acceptance_documents_field->id]);
+
+ $documents = array();
+
+ foreach ($file_paths as $file_path) {
+
+ $info = pathinfo( $file_path );
+
+ $documents[] = array(
+ 'name' => $info['basename'],
+ 'url' => $acceptance_documents_field->get_download_url( $file_path, true )
+ );
+ }
+
+ $status = 0;
+ if ($action_entry[$acceptance_field->id] === 'accept') {
+ $status = 1;
+ }
+
+ if ($action_entry[$acceptance_field->id] === 'decline') {
+ $status = -1;
+ }
+
+ return array(
+ 'action_id' => $action_entry['id'],
+ 'documents' => $documents,
+ 'expiration' => $action_entry[$expiration_date_field->id],
+ 'decline_reason' => $action_entry[$decline_reason_field->id],
+ 'status' => $status
+ );
+ }
+
+ /**
+ * Get customer validate questionnaires action data
+ *
+ * @param int $action_entry_id
+ *
+ * @return array|null
+ */
+ public static function get_customer_validate_questionnaires_action_data($action_entry_id) {
+
+ $action_entry = GFAPI::get_entry($action_entry_id);
+
+ $action_form = GFAPI::get_form($action_entry['form_id']);
+
+ $order_id = $action_entry['wiaas_delivery_order_id'];
+ $order = wc_get_order($order_id);
+
+
+ // we need to collect document, bundle id and current status
+ $bundle_item_id = null; $status = null;
+
+ $bundle_field = GFCommon::get_fields_by_type($action_form, 'wiaas_order_bundle')[0];
+ $bundle_item_id = absint(explode('|', $action_entry[$bundle_field->id])[1]);
+
+ if (empty($bundle_item_id)) {
+
+ return null;
+ }
+
+ $document_field = GFCommon::get_fields_by_type($action_form, 'wiaas_order_bundle_document')[0];
+ $file_path = $action_entry[$document_field->id];
+
+ $info = pathinfo( $action_entry[$document_field->id] );
+
+ $document = array(
+ 'name' => $info['basename'],
+ '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();
+
+ if (is_array($discussion_items)) {
+ foreach ($discussion_items as $item) {
+
+ $formated_comments[] = $discussion_field->format_discussion_item( $item, 'text', $action_entry_id );
+ }
+ }
+
+
+ $action_workflow_api = new Gravity_Flow_API($action_form['id']);
+ $action_step = $action_workflow_api->get_current_step($action_entry);
+
+
+ // if completed it means that document got validated
+ $status = 'validated';
+
+ if (! empty($action_step)) {
+
+ $is_assignee = $action_step->is_assignee($action_step->get_current_assignee_key());
+
+ if ($is_assignee) {
+ // if customer is assignee it means it is his turn to upload changed version of document
+ // which means it was rejected
+ $status = 'invalid';
+ } else {
+ // if customer is not assignee it means administrator is still reviewing document
+ $status = 'not-validated';
+ }
+ }
+
+ return array(
+ 'item_id' => $bundle_item_id,
+ 'order_id' =>$order->get_id(),
+ 'action_id' => $action_entry['id'],
+ 'document' => $document,
+ 'status' => $status,
+ 'comments' => $formated_comments
+ );
+
+ }
+}
diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-addon.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-addon.php
new file mode 100644
index 0000000..34f8e6d
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-addon.php
@@ -0,0 +1,288 @@
+get_type(), 'wiaas_organization_order_') !== false) {
+
+ $organization_id = $assignee->get_id();
+
+ $user_ids = wiaas_get_organization_user_ids($organization_id);
+
+ if (empty($user_ids)) {
+
+ continue;
+ }
+
+ $user_id = $user_ids[0];
+
+ $mapped_assignees[] = $step->get_assignee( array(
+ 'id' => $user_id,
+ 'type' => 'user_id',
+ 'editable_fields' => $assignee->get_editable_fields()
+ ) );
+
+ continue;
+ }
+
+ $mapped_assignees[] = $assignee;
+ }
+
+ return $mapped_assignees;
+ }
+
+
+ public function allow_only_administrator_to_be_assigned_to_step($args) {
+
+ $args['role'] = 'administrator';
+
+ //$args['exclude'] = array( 1 ); // exclude super admin user
+
+ return $args;
+ }
+
+ public static function add_orders_assignee_choices($choices) {
+
+ return $choices;
+ }
+
+ /**
+ * Extends Gravity Form entry metadata with 'wiaas_delivery_process_id'
+ *
+ * @param array $entry_meta
+ * @param int $form_id
+ *
+ * @return array
+ */
+ public function get_entry_meta( $entry_meta, $form_id ) {
+ $entry_meta[ 'wiaas_delivery_process_id' ] = array(
+ 'label' => 'Wiaas Delivery Process Id',
+ 'is_numeric' => true,
+ 'update_entry_meta_callback' => array( __CLASS__, 'update_entry_delivery_process_id' ),
+ 'is_default_column' => false, // this column will be displayed by default on the entry list
+ 'filter' => array(
+ 'operators' => array( 'is' ),
+ ),
+ );
+
+ $entry_meta[ 'wiaas_delivery_order_id' ] = array(
+ 'label' => 'Wiaas Delivery Process Order Id',
+ 'is_numeric' => true,
+ 'update_entry_meta_callback' => null,
+ 'is_default_column' => false, // this column will be displayed by default on the entry list
+ 'filter' => array(
+ 'operators' => array( 'is' ),
+ ),
+ );
+
+ $entry_meta[ 'wiaas_delivery_step_name' ] = array(
+ 'label' => 'Wiaas Delivery Step name',
+ 'is_numeric' => false,
+ 'update_entry_meta_callback' => null,
+ 'is_default_column' => false, // this column will be displayed by default on the entry list
+ 'filter' => array(
+ 'operators' => array( 'is' ),
+ ),
+ );
+
+ return $entry_meta;
+ }
+
+ public static function update_entry_delivery_process_id($key, $entry, $form) {
+
+ if ( isset( $_REQUEST['wiaas_delivery_process_id'] ) ) {
+ return absint( $_REQUEST['wiaas_delivery_process_id'] );
+ }
+
+ if ( isset( $entry[ $key ] ) ) {
+ return $entry[ $key ];
+ }
+
+ return '';
+ }
+
+
+ public function scripts() {
+
+ $plugin_url = untrailingslashit( plugins_url( '/', WIAAS_FILE ) );
+
+ $scripts = array(
+
+ array(
+ 'handle' => 'wiaas_form_editor_js',
+ 'src' => $plugin_url . '/assets/js/wiaas-form-editor.js',
+ 'enqueue' => array(
+ array(
+ 'admin_page' => array('form_editor'),
+ ),
+ ),
+ )
+ );
+
+ return array_merge( parent::scripts(), $scripts );
+ }
+
+
+ /**
+ * Add settings menu for form delivery process
+ *
+ * @param $tabs
+ * @param $form_id
+ *
+ * @return array
+ */
+ public function add_form_settings_menu( $tabs, $form_id ) {
+
+ $tabs[] = array(
+ 'name' => $this->_slug,
+ 'label' => esc_html__( 'Delivery Process', 'wiaas' ),
+ 'query' => array( 'fid' => null )
+ );
+
+ return $tabs;
+ }
+
+
+ /**
+ * Add settings field for delivery process settings menu
+ *
+ * @param $form
+ *
+ * @return array
+ */
+ public function form_settings_fields($form) {
+
+ return array(
+
+ array(
+ 'title' => esc_html__( 'Delivery Process', 'wiaas' ),
+ 'fields' => array(
+ array(
+ 'name' => 'delivery_process',
+ 'label' => esc_html__( 'Delivery Form Type', 'wiaas' ),
+ 'type' => 'delivery_process',
+ )
+ )
+ )
+ );
+ }
+
+ public function settings_delivery_process() {
+
+ $this->settings_select(array(
+ 'name' => 'delivery_form_type',
+ 'choices' => array(
+ array( 'value' => 'process', 'label' => 'Process Form' ),
+ array( 'value' => 'action', 'label' => 'Action Form' ),
+ ),
+ 'after_select' => ' Choose if this form will be used as process form or action form.
' .
+ ' Process form defines order delivery process workflow.
' .
+ ' Action form defines custom order data that is collected from delivery process participants.
'
+ ));
+
+
+ ?>
+
+ get_current_settings();
+
+ if ($settings['delivery_form_type'] !== 'process') {
+
+ $this->settings_select(array(
+ 'name' => 'delivery_action_code',
+ 'choices' => array(
+ array( 'value' => '', 'label' => 'Select action code ...' ),
+ array( 'value' => 'customer-acceptance', 'label' => 'Customer acceptance' ),
+ array( 'value' => 'validate-questionnaire', 'label' => 'Validate Questionnaire' ),
+ array( 'value' => 'schedule-meeting', 'label' => 'Schedule meeting' ),
+ ),
+ 'after_select' => ' Choose action code for action form.
'
+ ));
+
+
+ $this->settings_checkbox_and_select(array(
+ 'checkbox' => array(
+ 'label' => esc_html__( 'Automatic', 'wiaas' ),
+ 'name' => 'automatic_action_entries_enabled',
+ 'default_value' => '0',
+ ),
+ 'select' => array(
+ 'name' => 'automatic_action_entries_type',
+ 'choices' => array(
+ array(
+ 'value' => 'single',
+ 'label' => esc_html__( 'Single entry', 'wiaas' ),
+ ),
+ array(
+ 'value' => 'bundle',
+ 'label' => esc_html__( 'Entry per bundle', 'wiaas' ),
+ )
+ ),
+ 'after_select' => 'Automatic entries can be created once per order or per every bundle in order.
' .
+ 'Automatic entry will not be created if any required field cannot be populated.
',
+ )
+ ));
+
+ return;
+ }
+
+
+ $this->settings_select(array(
+ 'name' => 'delivery_country',
+ 'choices' => array(
+ array( 'value' => 'se', 'label' => 'Sweden' ),
+ array( 'value' => 'dk', 'label' => 'Denmark' ),
+ array( 'value' => 'fi', 'label' => 'Finland' )
+ ),
+ 'after_select' => ' Choose country for which this process is defined.
'
+ ));
+ }
+}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-step-assignee.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-step-assignee.php
new file mode 100644
index 0000000..876c924
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-step-assignee.php
@@ -0,0 +1,186 @@
+ __( 'Order', 'wiaas' ),
+ 'choices' => array(
+ array(
+ 'value' => 'role|administrator', // allow global administrator role here since it is only one
+ 'label' => __('Administrator', 'wiaas')
+ )
+ ),
+ )
+ );
+
+ // add administrator users
+ $args = array(
+ 'number' => 1000,
+ 'orderby' => 'display_name',
+ 'role' => 'administrator'
+ );
+ $accounts = get_users( $args );
+ $account_choices = array();
+ foreach ( $accounts as $account ) {
+ $account_choices[] = array( 'value' => 'user_id|' . $account->ID, 'label' => $account->display_name );
+ }
+
+ $choices[] = array(
+ 'label' => __( 'Users', 'gravityflow' ),
+ 'choices' => $account_choices,
+ );
+
+ // append field choices
+ foreach ($old_choices as $old_choice) {
+
+ if ($old_choice['label'] === 'Fields') {
+
+ $choices[] = $old_choice;
+ break;
+ }
+ }
+
+ return $choices;
+ }
+
+
+ /**
+ * Handle order level assignees for delivery process step
+ *
+ * @param $assignees
+ *
+ * @param Gravity_Flow_Step $step
+ *
+ * @return array
+ */
+ public static function maybe_handle_order_organization_assignees($assignees, Gravity_Flow_Step $step) {
+
+ $mapped_assignees = array();
+
+ $order_id = self::get_order_id_for_step($step);
+
+ $order = wc_get_order($order_id);
+
+ foreach ($assignees as $assignee) {
+
+ if (strpos($assignee->get_type(), 'wiaas_installation_') !== false) {
+
+ $item_id = $assignee->get_id();
+
+ $item = $order->get_item($item_id);
+
+ $organization_id = $item['wiaas_supplier_organization_id'];
+
+ $user_ids = wiaas_get_organization_user_ids($organization_id);
+
+ if (empty($user_ids)) {
+
+ continue;
+ }
+
+ $user_id = $user_ids[0];
+
+ $mapped_assignees[] = $step->get_assignee( array(
+ 'id' => $user_id,
+ 'type' => 'user_id',
+ 'editable_fields' => $assignee->get_editable_fields()
+ ) );
+
+ continue;
+ }
+
+ if ($assignee->get_type() === 'wiaas_order_role') {
+
+
+ $order_role = $assignee->get_id();
+
+ if ($order_role === 'customer') {
+
+ $customer_user_id = $order->get_customer_id();
+
+ // for now assign only customer that create order
+ // check if all customer organization users should be able to see order step
+
+ $mapped_assignees[] = $step->get_assignee( array(
+ 'id' => $customer_user_id,
+ 'type' => 'user_id',
+ 'editable_fields' => $assignee->get_editable_fields()
+ ) );
+
+ continue;
+ }
+ }
+
+ $mapped_assignees[] = $assignee;
+ }
+
+ return $mapped_assignees;
+ }
+
+
+ /**
+ * Retrieve order id for delivery process step
+ *
+ * @param Gravity_Flow_Step $step
+ *
+ * @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) {
+
+ $entry = $step->get_entry();
+
+ // if order is present in entry metadata use that value
+ if (! empty($entry['wiaas_delivery_order_id'])) {
+
+ return absint($entry['wiaas_delivery_order_id']);
+ }
+
+ // try getting order id from order field
+ $form = GFAPI::get_form($entry['form_id']);
+
+ $order_fields = GFCommon::get_fields_by_type($form, array( 'wiaas_order'));
+
+ if (! empty($order_fields)) {
+
+ $order_field = $order_fields[0]; // there should only be one order field per entry
+
+ return absint($entry[$order_field->id]);
+ }
+
+ return false;
+ }
+}
+
+Wiaas_Delivery_Process_Step_Assignee::init();
diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-step.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-step.php
index 8c5b478..6edcc9e 100644
--- a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-step.php
+++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-delivery-process-step.php
@@ -7,30 +7,12 @@ class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
* @var string
*/
public $_step_type = 'wiaas_delivery_step';
-
- private static $delivery_action_form_title_prefix = 'DELIVERY ACTION TYPE:';
-
- private static $delivery_action_types = array(
- 'DELIVERY ACTION TYPE: Customer acceptance' => 'customer-acceptance',
- 'DELIVERY ACTION TYPE: Validate Questionnaire' => 'validate-questionnaire',
- 'DELIVERY ACTION TYPE: Manual' => 'manual',
- 'DELIVERY ACTION TYPE: Schedule meeting' => 'schedule-meeting'
- );
-
- public static function get_delivery_action_types() {
- return array_keys(self::$delivery_action_types);
- }
-
- public static function get_delivery_action_type_prefix() {
- return self::$delivery_action_form_title_prefix;
- }
-
/**
* Returns label for Wiass Delivery Process Step
* @return string
*/
public function get_label() {
- return esc_html__( 'Wiaas Delivery Step', 'wiaas' );
+ return esc_html__( 'Delivery Step', 'wiaas' );
}
/**
@@ -41,12 +23,12 @@ class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
$settings_api = $this->get_common_settings_api();
- $forms = $this->get_target_forms_choices();
+ $forms = $this->get_action_forms_choices();
$form_choices[] = array( 'label' => esc_html__( 'Select a Form', 'wiaas' ), 'value' => '' );
foreach ( $forms as $form ) {
- $form_choices[] = array( 'label' => $form->title, 'value' => $form->id );
- }
+ $form_choices[] = array( 'label' => $form['title'], 'value' => $form['id'] );
+ }
$settings = array(
'title' => esc_html__( 'Wiaas Delivery Step', 'wiaas' ),
@@ -71,13 +53,56 @@ class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
'type' => 'select',
'onchange' => "jQuery(this).closest('form').submit();",
'choices' => $form_choices,
- ),
+ )
),
);
return $settings;
}
+ public function start() {
+
+ parent::start();
+
+ $this->update_step_status('pending');
+
+ return false;
+ }
+
+ public function evaluate_status() {
+
+ return $this->get_status();
+ }
+
+ public function get_status_label($status) {
+
+ $label = parent::get_status_label($status);
+
+ if (empty($label)) {
+
+ $label = __('Not started', 'wiaas');
+ }
+
+ return $label;
+ }
+
+ public function update_step_status($status = false) {
+
+ if ($status === 'cancelled' && $admin_action = rgpost( 'wiaas_delivery_process_navigation_action' )) {
+
+ list( $base_admin_action, $step_id ) = rgexplode( '|', $admin_action, 2 );
+
+ $next_step = gravity_flow()->get_next_step($this, $this->get_entry(), $this->get_form());
+ // going to next step
+ if ($base_admin_action === 'send_to_step' && $next_step && $next_step->get_id() == $step_id) {
+
+ $status = 'complete';
+ }
+ }
+
+ parent::update_step_status($status);
+ }
+
/**
* Process Wiass Delivery Process Step
*
@@ -90,81 +115,77 @@ class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
$entry = $this->get_entry();
$target_form = GFAPI::get_form( $this->target_form_id );
- # if target form is not valid just finish the step
+ # if target form is not set we are done
if (!$target_form) {
- return true;
+ // return false since we wait for admin to process the step
+ return false;
}
- # create new entry for target form with populated value for customer-id from parent entry
- $new_entry = array(
- 'form_id' => $this->target_form_id,
- 'wiaas_delivery_process_id' => $this->get_entry_id(),
- 'wiaas_delivery_order_id' => $entry['wiaas_delivery_order_id'],
- 'wiaas_delivery_step_name' => $this->get_name(),
- );
+ $delivery_settings = rgar($target_form, 'wiaas_delivery_process');
- $customer_id_value = null;
+ if (! $delivery_settings['automatic_action_entries_enabled']) {
- if ( is_array( $form['fields'] ) ) {
- foreach ( $form['fields'] as $field ) {
- if (GFCommon::get_label( $field ) === 'customer-id') {
- $customer_id_value = $entry[$field->id];
- break;
- }
- }
+ return false;
+ }
+
+ $action_entries_ids = gform_get_meta($this->get_entry_id(), 'wiaas_delivery_step_' . $this->get_id() . '_action_entry_ids');
+
+ // if action entries present this step is reprocessing and we should not be creating new action entries
+ if (! empty($action_entries_ids)) {
+ // return false since we wait for admin to process the step
+ return false;
}
- if ( is_array( $target_form['fields'] ) ) {
- foreach ( $target_form['fields'] as $field ) {
- if (GFCommon::get_label( $field ) === 'customer-id') {
- $new_entry[$field->id] = $customer_id_value;
- break;
- }
- }
+ // create new entries for step action forms
+ $order_field = GFCommon::get_fields_by_type($form, 'wiaas_order')[0];
+ $order_id = empty($order_field) ? null : absint($entry[$order_field->id]);
+
+ // if process has not order we cannot create actions
+ if (empty($order_id)) {
+ // return false since we wait for admin to process the step
+ return false;
}
- $entry_id = GFAPI::add_entry( $new_entry );
- if ( is_wp_error( $entry_id ) ) {
- $this->log_debug( __METHOD__ .'(): failed to add entry' );
- } else {
- // store entry id
- gform_update_meta($this->get_entry_id(), 'wiaas_delivery_step_' . $this->get_id() .'_entry_id', $entry_id);
+ $delivery_settings = rgar($target_form, 'wiaas_delivery_process');
+
+ switch ($delivery_settings['automatic_action_entries_type']) {
+
+ case 'single':
+ $action_entries_ids = $this->_create_single_action_entry($target_form, $order_id);
+ break;
+ case 'bundle':
+ $action_entries_ids = $this->_create_per_bundle_action_entries($target_form, $order_id);
}
+ gform_update_meta($this->get_entry_id(), 'wiaas_delivery_step_' . $this->get_id() . '_action_entry_ids', $action_entries_ids);
+
$note = $this->get_name() . ': ' . esc_html__( 'started.', 'wiaas' );
$this->add_note( $note );
- # return false since we wait for workflow of target entry to be complete first
+ // return false since we wait for admin to process the step
return false;
}
- /**
- * Evaluates current step status based on target form entry status
- *
- * If target form entry has associated workflow current step will complete its status
- * only when target form entry workflow is completed
- * @return string
- */
- public function status_evaluation() {
+ public function workflow_detail_box($form, $args) {
+ parent::workflow_detail_box($form, $args);
- # retrieve target form entry to check its workflow status
- $target_form_entry = $this->get_target_form_entry();
+ $target_form = GFAPI::get_form( $this->target_form_id );
- # if there is no target form entry just complete the step
- if(!$target_form_entry) {
- return 'complete';
+ if (empty( $target_form)) {
+
+ return;
}
- # retrieve target form entry workflow status
- $api = new Gravity_Flow_API( $this->target_form_id );
- $status = $api->get_status($target_form_entry);
+ ?>
+ Step: get_name() ?>
+ Action:
+ get_form_id()) {
- $entry_meta['wiaas_delivery_step_' . $this->get_id() .'_entry_id'] = null;
+ $entry_meta['wiaas_delivery_step_' . $this->get_id() . '_action_entry_ids'] = array();
}
return $entry_meta;
}
/**
* Retrieves forms that are valid options for delivery step action
+ *
* @return array
*/
- public function get_target_forms_choices() {
- return GFFormsModel::search_forms(self::$delivery_action_form_title_prefix, true);
- }
+ public function get_action_forms_choices() {
- /**
- * Retrieves delivery action type that is executed with this step
- * @return string
- */
- public function get_delivery_action_type() {
- $target_form = GFAPI::get_form( $this->target_form_id );
- return self::$delivery_action_types[$target_form['title']];
- }
-
- public function get_target_actual_date() {
- $target_entry = $this->get_target_form_entry();
- $target_form = GFAPI::get_form( $this->target_form_id );
-
- if (!is_wp_error($target_entry) && is_array($target_form['fields'])) {
- foreach ( $target_form['fields'] as $field ) {
- if (GFCommon::get_label( $field ) === 'Actual Date') {
- return $target_entry[$field->id];
- }
- }
- }
-
- return null;
- }
-
- public function get_target_step_comments() {
- $notes = RGFormsModel::get_lead_notes( $this->get_target_form_entry_id() );
-
- $comments = array();
- foreach ( $notes as $key => $note ) {
- if ( $note->note_type !== 'gravityflow' ) {
- $comments[] = array(
- 'date' => $note->date_created,
- 'text' => $note->value,
- 'user' => $note->user_name
- );
- }
- }
- return $comments;
- }
-
- /**
- * Retrieves target form entry created when step was started
- * @return array|null
- */
- public function get_target_form_entry() {
- $entry = GFAPI::get_entry($this->get_target_form_entry_id());
- if(is_wp_error($entry)) {
- return null;
- }
- return $entry;
+ return Wiaas_Delivery_Process_Action::get_action_forms();
}
@@ -247,4 +218,67 @@ class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
return absint($value);
}
+
+
+ private function _create_single_action_entry($target_form, $order_id) {
+
+ $action_entries_ids = array();
+
+ $new_entry = Wiaas_Order_Fields::map_order_to_entry($order_id, $target_form);
+
+ if (empty($new_entry)) {
+ // entry cannot be created
+ return $action_entries_ids;
+ }
+
+ $new_entry['form_id'] = $target_form['id'];
+ $new_entry['wiaas_delivery_process_id'] = $this->get_entry_id();
+ $new_entry['wiaas_delivery_order_id'] = $order_id;
+
+ $entry_id = GFAPI::add_entry( $new_entry );
+
+ if ( is_wp_error( $entry_id ) ) {
+ $this->log_debug( __METHOD__ .'(): failed to add entry' );
+ } else {
+ // store entry id
+ $action_entries_ids[] = $entry_id;
+ }
+
+ return $action_entries_ids;
+ }
+
+
+ private function _create_per_bundle_action_entries($target_form, $order_id) {
+
+ $action_entries_ids = array();
+
+ $bundle_items = wiaas_get_order_standard_bundle_items($order_id);
+
+ foreach ($bundle_items as $item) {
+
+ $new_entry = Wiaas_Order_Fields::map_order_to_entry($order_id, $target_form, $item->get_id());
+
+ if (empty($new_entry)) {
+ // entry cannot be created
+ continue;
+ }
+
+ $new_entry['form_id'] = $target_form['id'];
+ $new_entry['wiaas_delivery_process_id'] = $this->get_entry_id();
+ $new_entry['wiaas_delivery_order_id'] = $order_id;
+
+ $entry_id = GFAPI::add_entry( $new_entry );
+
+ if ( is_wp_error( $entry_id ) ) {
+
+ $this->log_debug( __METHOD__ .'(): failed to add entry' );
+ } else {
+ // store entry id
+
+ $action_entries_ids[] = $entry_id;
+ }
+ }
+
+ return $action_entries_ids;
+ }
}
diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-bundle-document.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-bundle-document.php
new file mode 100644
index 0000000..5611ed0
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-bundle-document.php
@@ -0,0 +1,73 @@
+ 'wiaas_order_fields',
+ 'text' => $this->get_form_editor_field_title(),
+ );
+ }
+
+ public function get_form_editor_field_title() {
+ return esc_attr__( 'Bundle Document', 'wiaas' );
+ }
+
+ public function get_download_url( $file, $force_download = false ) {
+
+ $upload_root = GFFormsModel::get_upload_url( $this->formId );
+ $upload_root = trailingslashit( $upload_root );
+
+ // handle download for order documents not uploaded by gravity forms
+ if ( strpos( $file, $upload_root ) === false ) {
+
+ return admin_url() . '?gf-wiaas-order-doc=' . urlencode($file);
+ }
+
+ return parent::get_download_url( $file, $force_download );
+ }
+
+ public function sanitize_settings() {
+ parent::sanitize_settings();
+
+ $this->wiaasDocTypeFilter = sanitize_key($this->wiaasDocTypeFilter);
+ }
+}
+
+GF_Fields::register( new Wiaas_Field_Order_Bundle_Document() );
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-bundle.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-bundle.php
new file mode 100644
index 0000000..418708b
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-bundle.php
@@ -0,0 +1,63 @@
+ 'wiaas_order_fields',
+ 'text' => $this->get_form_editor_field_title(),
+ );
+ }
+
+ public function get_value_entry_list( $value, $entry, $field_id, $columns, $form ) {
+ return $this->get_bundle_display_name($value);
+ }
+
+
+ public function get_value_merge_tag( $value, $input_id, $entry, $form, $modifier, $raw_value, $url_encode, $esc_html, $format, $nl2br ) {
+ return $this->get_bundle_display_name($value);
+ }
+
+
+ public function get_value_entry_detail( $value, $currency = '', $use_text = false, $format = 'html', $media = 'screen' ) {
+ return $this->get_bundle_display_name($value);
+ }
+
+ public function get_bundle_item($value) {
+
+ list($order_id, $item_id) = rgexplode('|', $value, 2);
+
+ if (! empty($order_id) && ! empty($item_id) && $order = wc_get_order($order_id)) {
+
+ return $order->get_item($item_id);
+ }
+
+ return null;
+ }
+
+ public function get_bundle_display_name($value) {
+
+ $item = $this->get_bundle_item($value);
+
+ if (! empty($item)) {
+
+ return $item->get_name();
+ }
+
+ return '';
+ }
+}
+
+GF_Fields::register( new Wiaas_Field_Order_Bundle() );
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-document.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-document.php
new file mode 100644
index 0000000..f15ca11
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-document.php
@@ -0,0 +1,74 @@
+ 'wiaas_order_fields',
+ 'text' => $this->get_form_editor_field_title(),
+ );
+ }
+
+ public function get_download_url( $file, $force_download = false ) {
+
+ $upload_root = GFFormsModel::get_upload_url( $this->formId );
+ $upload_root = trailingslashit( $upload_root );
+
+ // handle download for order documents not uploaded by gravity forms
+ if ( strpos( $file, $upload_root ) === false ) {
+
+ return admin_url() . '?gf-wiaas-order-doc=' . urlencode($file);
+ }
+
+ return parent::get_download_url( $file, true );
+ }
+
+ public function sanitize_settings() {
+ parent::sanitize_settings();
+
+ $this->wiaasDocTypeFilter = sanitize_key($this->wiaasDocTypeFilter);
+ }
+}
+
+
+GF_Fields::register( new Wiaas_Field_Order_Document() );
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-installation-select.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-installation-select.php
new file mode 100644
index 0000000..f19967a
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-installation-select.php
@@ -0,0 +1,123 @@
+ 'wiaas_order_fields',
+ 'text' => $this->get_form_editor_field_title(),
+ );
+ }
+
+ public function get_field_input( $form, $value = '', $entry = null ) {
+
+ if ( empty($entry) ) {
+
+ return parent::get_field_input($form, $value, $entry);
+ }
+
+ // get bundle item field
+ $bundle_item_field = GFCommon::get_fields_by_type($form, array( 'wiaas_order_bundle') )[0];
+
+ if (! empty($bundle_item_field) &&
+ $bundle_item = $bundle_item_field->get_bundle_item($entry[$bundle_item_field->id])) {
+
+ $bundled_items = wc_pb_get_bundled_order_items($bundle_item);
+
+ $installation_items = array();
+
+ foreach ($bundled_items as $id => $bundled_item) {
+
+ $product = $bundled_item->get_product();
+
+ if ($product && Wiaas_Product_Category::is_installation($product)) {
+
+ $installation_items[] = $bundled_item;
+ }
+ }
+
+ $choices = array(
+ array( 'value' => '0', 'text' => 'Select installation ...')
+ );
+
+ $order_id = $bundle_item->get_order_id();
+
+ foreach ($installation_items as $installation_item) {
+
+ $choices[] = array(
+ 'value' => 'wiaas_installation_' . $order_id . '|' . $installation_item->get_id(),
+ 'text' => $installation_item->get_name()
+ );
+ }
+
+ $this->choices = $choices;
+ }
+
+ return parent::get_field_input($form, $value, $entry);
+ }
+
+ public function get_form_editor_field_title() {
+ return esc_attr__( 'Installation Select', 'wiaas' );
+ }
+
+ public function get_value_entry_list( $value, $entry, $field_id, $columns, $form ) {
+ return $this->get_selected_installation_display_name($value);
+ }
+
+
+ public function get_value_merge_tag( $value, $input_id, $entry, $form, $modifier, $raw_value, $url_encode, $esc_html, $format, $nl2br ) {
+ return $this->get_selected_installation_display_name($value);
+ }
+
+
+ public function get_value_entry_detail( $value, $currency = '', $use_text = false, $format = 'html', $media = 'screen' ) {
+ return $this->get_selected_installation_display_name($value);
+ }
+
+
+ public function get_selected_installation_display_name($value) {
+
+ $value = $value ? str_replace('wiaas_installation_', '', $value) : '';
+
+ list ($order_id, $item_id) = explode('|', $value);
+
+ if (! empty($order_id) && ! empty($item_id) && $order = wc_get_order($order_id)) {
+
+ $item = $order->get_item($item_id);
+
+ return $item->get_name();
+ }
+
+ return '';
+ }
+
+ public function post_convert_field() {
+
+ if ($this->is_form_editor()) {
+
+ $this->choices = array(
+ array( 'value' => '0', 'text' => 'Select installation ...')
+ );
+ }
+ }
+}
+
+
+GF_Fields::register( new Wiaas_Order_Installation_Select() );
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-number.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-number.php
new file mode 100644
index 0000000..e3d3f4f
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-field-order-number.php
@@ -0,0 +1,66 @@
+ 'wiaas_order_fields',
+ 'text' => $this->get_form_editor_field_title(),
+ );
+ }
+
+
+ public function get_value_entry_list( $value, $entry, $field_id, $columns, $form ) {
+ return "#100000$value";
+ }
+
+ public function get_value_entry_detail( $value, $currency = '', $use_text = false, $format = 'html', $media = 'screen' ) {
+ return "#100000$value";
+ }
+
+ public function get_value_merge_tag( $value, $input_id, $entry, $form, $modifier, $raw_value, $url_encode, $esc_html, $format, $nl2br ) {
+ return "#100000$value";
+ }
+}
+
+GF_Fields::register( new Wiaas_Field_Order_Number() );
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-order-fields.php b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-order-fields.php
new file mode 100644
index 0000000..35168fe
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/delivery-process/class-wiaas-order-fields.php
@@ -0,0 +1,251 @@
+ 'wiaas_order_fields',
+ 'label' => __( 'Order Fields', 'wiaas' ),
+ 'fields' => array()
+ );
+
+ return $field_groups;
+ }
+
+
+ public static function display_order_document_fields($file_path, $field) {
+
+ if (strpos($file_path, 'gf-download') === false &&
+ strpos($file_path, 'gf-wiaas-order-doc') === false) {
+
+ $field = new Wiaas_Field_Order_Bundle_Document();
+
+ return $field->get_download_url($file_path);
+ }
+
+ return $file_path;
+ }
+
+ /**
+ * Add custom settings for form order fields
+ *
+ * @param int $position
+ */
+ public static function field_settings( $position ) {
+ if ( $position === 20 ) {
+ // After Field description setting.
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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 '':
+
+ }
+ }
+
+
+ public static function map_order_to_entry($order_id, $form, $bundle_item_id = null) {
+
+ if (empty($form['fields']) ||
+ empty(GFCommon::get_fields_by_type( $form, array('wiaas_order')) ) ) {
+ // form does not have order field so cannot be mapped
+ return false;
+ }
+
+ $order = wc_get_order($order_id);
+
+ $entry = array();
+
+ foreach ($form['fields'] as $field) {
+
+ switch ($field->type) {
+
+ case 'wiaas_order':
+
+ $entry[(string) $field->id] = $order->get_id();
+
+ break;
+
+ case 'workflow_user':
+ $entry[(string) $field->id] = $order->get_customer_id(); // save customer if needed
+
+ break;
+
+ case 'wiaas_order_bundle':
+
+ $bundle_item = $order->get_item($bundle_item_id);
+
+ if ( empty($bundle_item) && $field->isRequired) {
+ // there is no data for required field so entry cannot be created
+ return false;
+ }
+
+ if (! empty($bundle_item)) {
+
+ $entry[(string) $field->id] = $order->get_id() . '|' . $bundle_item->get_id();
+ }
+
+ break;
+
+ case 'wiaas_order_bundle_document':
+
+ $bundle_item = $order->get_item($bundle_item_id);
+
+ if ( empty($bundle_item) && $field->isRequired) {
+ // there is no data for required field so entry cannot be created
+ return false;
+ }
+
+ if (! empty($bundle_item)) {
+
+ $documents = wiaas_get_standard_package_order_item_documents($order, $bundle_item_id);
+
+ $filtered_documents = array();
+
+ foreach ($documents as $document) {
+
+ if ($document['type'] === $field->wiaasDocTypeFilter) {
+
+ $filtered_documents[] = $document;
+ }
+ }
+
+ if ( empty($filtered_documents) && $field->isRequired ) {
+ // there is no data for required field so entry cannot be created
+ return false;
+ }
+
+ if (! empty ($filtered_documents) && ! $field->multipleFiles) {
+
+ $document = $filtered_documents[0];
+
+ $entry[$field->id] = $document['version'];
+
+ } else if (! empty ($filtered_documents) ) {
+
+ $versions = array();
+ foreach ($filtered_documents as $filtered_document) {
+ $versions[] = $filtered_document['version'];
+ }
+
+ $entry[$field->id] = json_encode($versions);
+ }
+ }
+
+ break;
+
+ case 'wiaas_order_installation_select':
+
+ $bundle_item = $order->get_item($bundle_item_id);
+
+ if ( empty($bundle_item) && $field->isRequired) {
+ // there is no data for required field so entry cannot be created
+ return false;
+ }
+
+ $bundled_items = wc_pb_get_bundled_order_items($bundle_item, $order);
+
+ $installation_items = array();
+
+ foreach ($bundled_items as $id => $bundled_item) {
+
+ $product = $bundled_item->get_product();
+
+ if ($product && Wiaas_Product_Category::is_installation($product)) {
+
+ $installation_items[] = $bundled_item;
+ }
+ }
+
+ if (empty($installation_items) && $field->isRequired) {
+ // there is no data for required field so entry cannot be created
+ return false;
+ }
+
+ if (count($installation_items) === 1) {
+
+ $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
+ $entry[(string) $field->id] = '0';
+ }
+
+ }
+ }
+
+ return $entry;
+ }
+
+}
+
+Wiaas_Order_Fields::init();
diff --git a/backend/app/plugins/wiaas/includes/document/class-wiaas-document-download.php b/backend/app/plugins/wiaas/includes/document/class-wiaas-document-download.php
index df4b6f0..916d113 100644
--- a/backend/app/plugins/wiaas/includes/document/class-wiaas-document-download.php
+++ b/backend/app/plugins/wiaas/includes/document/class-wiaas-document-download.php
@@ -12,6 +12,35 @@ class Wiaas_Document_Download {
if ( isset($_GET['wiaasdoc']) ) {
add_action( 'init', array( __CLASS__, 'admin_download' ) );
}
+
+ if (isset($_GET['gf-wiaas-order-doc'])) {
+
+ add_action( 'init', array( __CLASS__, 'admin_gf_order_document_download' ) );
+ }
+ }
+
+ /**
+ * Handle download for order documents by gravity flow steps
+ */
+ public static function admin_gf_order_document_download() {
+
+ if (!is_user_logged_in()) {
+ wp_die( __( 'No Access.', 'wiaas' ), __( 'Download Error', 'wiaas' ), array( 'response' => 403 ) );
+ }
+
+ // relative file path from upload dir for document
+ $version = urldecode($_GET['gf-wiaas-order-doc']);
+
+ $file_path = wiaas_get_document_version_path($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 )
+ );
}
/**
diff --git a/backend/app/plugins/wiaas/includes/document/wiaas-document-functions.php b/backend/app/plugins/wiaas/includes/document/wiaas-document-functions.php
index a6d43f5..524b2ef 100644
--- a/backend/app/plugins/wiaas/includes/document/wiaas-document-functions.php
+++ b/backend/app/plugins/wiaas/includes/document/wiaas-document-functions.php
@@ -187,4 +187,39 @@ function wiaas_get_standard_package_order_item_documents($order, $package_item_i
return $doc;
}, $order_documents);
+}
+
+/**
+ * Retrieve documents for order item
+ *
+ * @param $order_item
+ * @param string|null $doc_type
+ *
+ * @return array {
+ * $param string key Unique key used for frontend downloand
+ * $param string name Document name visible in download link
+ * $param string version Relative path from upload directory to physical document file
+ * $param string type Document type
+ *
+ * @reference Wiaas_Document
+ * }
+ */
+function wiaas_get_order_item_documents($order_item, $doc_type = null) {
+
+ $documents = empty($order_item['wiaas_documents']) ? array() : $order_item['wiaas_documents'];
+
+ if (empty($doc_type)) {
+ return $documents;
+ }
+
+ $filtered_documents = array();
+
+ foreach ($documents as $document) {
+
+ if ($document['type'] === $doc_type) {
+ $filtered_documents[] = $document;
+ }
+ }
+
+ return $filtered_documents;
}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/order/wiaas-order-functions.php b/backend/app/plugins/wiaas/includes/order/wiaas-order-functions.php
new file mode 100644
index 0000000..6522ced
--- /dev/null
+++ b/backend/app/plugins/wiaas/includes/order/wiaas-order-functions.php
@@ -0,0 +1,92 @@
+get_items();
+
+ $standard_bundle_items = array();
+
+ foreach ($items as $item) {
+
+ if (isset($item['wiaas_standard_package'])) {
+
+ $standard_bundle_items[] = $item;
+ }
+ }
+
+ return $standard_bundle_items;
+}
+
+/**
+ * Retrieve order summary data for procurement order for suppliers
+ *
+ * @param int $order_id
+ *
+ * @return array
+ */
+function wiaas_get_order_procurement_info($order_id) {
+
+ $order = wc_get_order($order_id);
+
+ $order_items = $order->get_items();
+
+ $order_suppliers_info = array();
+ $order_delivery_suppliers_info = $order->get_meta('_wiaas_delivery_suppliers');
+ $order_installation_suppliers_info = $order->get_meta('_wiaas_installation_suppliers');
+
+ foreach ($order_delivery_suppliers_info as $id => $order_delivery_supplier_info) {
+ $order_suppliers_info[$id] = $order_delivery_supplier_info;
+ }
+ foreach ($order_installation_suppliers_info as $id => $order_installation_supplier_info) {
+ $order_suppliers_info[$id] = $order_installation_supplier_info;
+ }
+
+ $data = array();
+
+ foreach ($order_items as $order_item_id => $order_item) {
+
+ $category = $order_item['wiaas_category'];
+ $supplier_organization_id = $order_item['wiaas_supplier_organization_id'];
+ $supplier_info = $order_suppliers_info[$supplier_organization_id];
+
+ if (empty($category)) {
+
+ continue;
+ }
+
+ $data[$category] ?: array();
+
+ // get price and quantity
+ $single_product_item_cost = floatval($order_item['wiaas_product_price']);
+
+ $quantity = absint($order_item['quantity']);
+ $total_price = $quantity * $single_product_item_cost;
+
+ $data[$category][] = array(
+ 'Name' => $order_item->get_name(),
+ 'Category' => ucfirst(strtolower($category)),
+ 'Manufacturer Product No' => $order_item['wiaas_manufacturer_product_no'],
+ 'Supplier Product No' => $order_item['wiaas_supplier_product_no'],
+ 'Units' => $quantity,
+ 'Price' => $total_price,
+ 'Supplier Company' => $supplier_info['name'],
+ 'Supplier VAT' => $supplier_info['vat_code'],
+ 'Supplier Phone' => $supplier_info['phone'],
+ 'Supplier Email' => $supplier_info['email'],
+ );
+ }
+
+ return $data;
+}
\ No newline at end of file
diff --git a/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php b/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php
index 6d25327..5982a13 100644
--- a/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php
+++ b/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php
@@ -68,15 +68,24 @@ class Wiaas_Product_Supplier {
* Retrieve organisation id of the supplier of the product
*
* @param $product_id
- * @return int organization_id
+ * @return int|false organization_id
*/
public static function get_supplier_organisation_id_from_product($product_id) {
$supplier_terms = wp_get_object_terms($product_id, 'supplier');
- $supplier_organisation_slug = $supplier_terms[0]->slug;
- $supplier_organisation_id = get_term_by('slug', $supplier_organisation_slug, 'wiaas-user-organization')->term_id;
+ if (empty( $supplier_terms )) {
- return $supplier_organisation_id;
+ return false;
+ }
+
+ $supplier_organisation_slug = $supplier_terms[0]->slug;
+ $supplier_organisation = get_term_by('slug', $supplier_organisation_slug, 'wiaas-user-organization');
+
+ if ($supplier_organisation) {
+ return $supplier_organisation->term_id;
+ }
+
+ return $supplier_organisation ? $supplier_organisation->term_id : false;
}
}
diff --git a/backend/app/plugins/wiaas/includes/user/wiaas-organization-functions.php b/backend/app/plugins/wiaas/includes/user/wiaas-organization-functions.php
index b011408..041d04d 100644
--- a/backend/app/plugins/wiaas/includes/user/wiaas-organization-functions.php
+++ b/backend/app/plugins/wiaas/includes/user/wiaas-organization-functions.php
@@ -103,4 +103,38 @@ function wiaas_get_user_organization_id($user_id) {
*/
function wiaas_get_current_user_organization_id() {
return wiaas_get_user_organization_id(get_current_user_id());
+}
+
+function wiaas_get_organization_user_ids($organization_id) {
+
+ $user_ids = get_objects_in_term($organization_id, Wiaas_User_Organization::TAXONOMY_NAME);
+
+ return is_wp_error($user_ids) ? array() : $user_ids;
+}
+
+function wiaas_get_organization_info($organization_id) {
+
+ $organization = get_term($organization_id);
+
+ if ($organization) {
+
+ $user_ids = wiaas_get_organization_user_ids($organization_id);
+
+ $email = null;
+
+ if (! empty($user_ids)) {
+
+ $user = get_userdata($user_ids[0]);
+
+ $email = $user ? $user->user_email : null;
+ }
+
+ return array(
+ 'name' => $organization->name,
+ 'description' => $organization->description,
+ 'vat_code' => get_term_meta($organization_id, '_wiaas_organization_vat', true),
+ 'phone' => get_term_meta($organization_id, '_wiaas_organization_phone', true),
+ 'email' => $email
+ );
+ }
}
\ No newline at end of file
diff --git a/backend/composer.json b/backend/composer.json
index 1d32732..dcb40e3 100644
--- a/backend/composer.json
+++ b/backend/composer.json
@@ -49,6 +49,7 @@
"johnpbloch/wordpress": "4.9.7",
"oscarotero/env": "1.1.0",
"roots/wp-password-bcrypt": "1.0.0",
+ "phpoffice/phpspreadsheet": "1.5",
"woocommerce/woocommerce": "3.5.0",
"3rdparty/woocommerce-product-bundles": "*",
diff --git a/backend/composer.lock b/backend/composer.lock
index 8cc35ab..3afb615 100644
--- a/backend/composer.lock
+++ b/backend/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "46d983092d336b15b357f8569468977c",
+ "content-hash": "6e6e270e7e619ff0ceaa12a0f586d517",
"packages": [
{
"name": "3rdparty/gravityflow",
@@ -285,6 +285,101 @@
],
"time": "2018-01-29T14:49:29+00:00"
},
+ {
+ "name": "markbaker/complex",
+ "version": "1.4.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MarkBaker/PHPComplex.git",
+ "reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/1ea674a8308baf547cbcbd30c5fcd6d301b7c000",
+ "reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6.0|^7.0.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3",
+ "phpcompatibility/php-compatibility": "^8.0",
+ "phpdocumentor/phpdocumentor": "2.*",
+ "phploc/phploc": "2.*",
+ "phpmd/phpmd": "2.*",
+ "phpunit/phpunit": "^4.8.35|^5.4.0",
+ "sebastian/phpcpd": "2.*",
+ "squizlabs/php_codesniffer": "^3.3.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Complex\\": "classes/src/"
+ },
+ "files": [
+ "classes/src/functions/abs.php",
+ "classes/src/functions/acos.php",
+ "classes/src/functions/acosh.php",
+ "classes/src/functions/acot.php",
+ "classes/src/functions/acoth.php",
+ "classes/src/functions/acsc.php",
+ "classes/src/functions/acsch.php",
+ "classes/src/functions/argument.php",
+ "classes/src/functions/asec.php",
+ "classes/src/functions/asech.php",
+ "classes/src/functions/asin.php",
+ "classes/src/functions/asinh.php",
+ "classes/src/functions/atan.php",
+ "classes/src/functions/atanh.php",
+ "classes/src/functions/conjugate.php",
+ "classes/src/functions/cos.php",
+ "classes/src/functions/cosh.php",
+ "classes/src/functions/cot.php",
+ "classes/src/functions/coth.php",
+ "classes/src/functions/csc.php",
+ "classes/src/functions/csch.php",
+ "classes/src/functions/exp.php",
+ "classes/src/functions/inverse.php",
+ "classes/src/functions/ln.php",
+ "classes/src/functions/log2.php",
+ "classes/src/functions/log10.php",
+ "classes/src/functions/negative.php",
+ "classes/src/functions/pow.php",
+ "classes/src/functions/rho.php",
+ "classes/src/functions/sec.php",
+ "classes/src/functions/sech.php",
+ "classes/src/functions/sin.php",
+ "classes/src/functions/sinh.php",
+ "classes/src/functions/sqrt.php",
+ "classes/src/functions/tan.php",
+ "classes/src/functions/tanh.php",
+ "classes/src/functions/theta.php",
+ "classes/src/operations/add.php",
+ "classes/src/operations/subtract.php",
+ "classes/src/operations/multiply.php",
+ "classes/src/operations/divideby.php",
+ "classes/src/operations/divideinto.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Baker",
+ "email": "mark@lange.demon.co.uk"
+ }
+ ],
+ "description": "PHP Class for working with complex numbers",
+ "homepage": "https://github.com/MarkBaker/PHPComplex",
+ "keywords": [
+ "complex",
+ "mathematics"
+ ],
+ "time": "2018-10-13T23:28:42+00:00"
+ },
{
"name": "oscarotero/env",
"version": "v1.1.0",
@@ -327,6 +422,141 @@
],
"time": "2017-07-17T20:41:59+00:00"
},
+ {
+ "name": "phpoffice/phpspreadsheet",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
+ "reference": "2dfd06c59825914a1a325f2a2ed13634b9d8c411"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/2dfd06c59825914a1a325f2a2ed13634b9d8c411",
+ "reference": "2dfd06c59825914a1a325f2a2ed13634b9d8c411",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-dom": "*",
+ "ext-gd": "*",
+ "ext-iconv": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-simplexml": "*",
+ "ext-xml": "*",
+ "ext-xmlreader": "*",
+ "ext-xmlwriter": "*",
+ "ext-zip": "*",
+ "ext-zlib": "*",
+ "markbaker/complex": "^1.4.1",
+ "php": "^5.6|^7.0",
+ "psr/simple-cache": "^1.0"
+ },
+ "require-dev": {
+ "dompdf/dompdf": "^0.8.0",
+ "friendsofphp/php-cs-fixer": "@stable",
+ "jpgraph/jpgraph": "^4.0",
+ "mpdf/mpdf": "^7.0.0",
+ "phpunit/phpunit": "^5.7",
+ "squizlabs/php_codesniffer": "^3.3",
+ "tecnickcom/tcpdf": "^6.2"
+ },
+ "suggest": {
+ "dompdf/dompdf": "Option for rendering PDF with PDF Writer",
+ "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
+ "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
+ "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Maarten Balliauw",
+ "homepage": "http://blog.maartenballiauw.be"
+ },
+ {
+ "name": "Erik Tilt"
+ },
+ {
+ "name": "Franck Lefevre",
+ "homepage": "http://rootslabs.net"
+ },
+ {
+ "name": "Mark Baker",
+ "homepage": "http://markbakeruk.net"
+ }
+ ],
+ "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
+ "homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
+ "keywords": [
+ "OpenXML",
+ "excel",
+ "gnumeric",
+ "ods",
+ "php",
+ "spreadsheet",
+ "xls",
+ "xlsx"
+ ],
+ "time": "2018-10-21T10:04:54+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "time": "2017-10-23T01:57:42+00:00"
+ },
{
"name": "roots/wp-password-bcrypt",
"version": "1.0.0",
diff --git a/frontend/src/actions/dashboard/nextActionsActions.js b/frontend/src/actions/dashboard/nextActionsActions.js
index cfaff25..9c3ce11 100644
--- a/frontend/src/actions/dashboard/nextActionsActions.js
+++ b/frontend/src/actions/dashboard/nextActionsActions.js
@@ -19,7 +19,7 @@ export const fetchNextActions = () => {
return dispatch => {
dispatch(requestNextActions());
return client.fetch({
- url: `${API_SERVER}/wp-json/wiaas/next-delivery-steps`
+ url: `${API_SERVER}/wp-json/wiaas/delivery/next-actions`
})
.then(response => dispatch(recieveNextActions(response.data)))
.catch(error => {
diff --git a/frontend/src/actions/orders/customerAcceptanceActions.js b/frontend/src/actions/orders/customerAcceptanceActions.js
index 642a22d..7fec4e1 100644
--- a/frontend/src/actions/orders/customerAcceptanceActions.js
+++ b/frontend/src/actions/orders/customerAcceptanceActions.js
@@ -23,11 +23,11 @@ const recieveCustomerAcceptance = (json) => ({
customerAcceptance: json
});
-export const fetchCustomerAcceptance = (idEntry) => {
+export const fetchCustomerAcceptance = (idOrder) => {
return dispatch => {
dispatch(requestCustomerAcceptance());
return htmlClient.fetch({
- url: `${API_SERVER}/wp-json/wiaas/customer-acceptance/${idEntry}`,
+ url: `${API_SERVER}/wp-json/wiaas/delivery/${idOrder}/customer-acceptance`,
method: 'get'
})
.then(response => {
@@ -45,15 +45,15 @@ const uploadAcceptanceAction = () => ({
type: UPLOAD_CUSTOMER_ACCEPTANCE
});
-export const uploadAcceptance = (idEntry, file) => {
+export const uploadAcceptance = (idOrder, file) => {
return dispatch => {
dispatch(uploadAcceptanceAction());
return htmlClient.uploadFile(file, {
- url: `${API_SERVER}/wp-json/wiaas/customer-acceptance/${idEntry}/upload-file`
+ url: `${API_SERVER}/wp-json/wiaas/delivery/${idOrder}/customer-acceptance/upload`
}).then(response => {
if (typeof response.data !== 'undefined') {
dispatch(updateMessages(response.data.messages, orderMessages));
- dispatch(fetchCustomerAcceptance(idEntry));
+ dispatch(fetchCustomerAcceptance(idOrder));
}
}).catch(error => {
htmlClient.onError(error, dispatch);
@@ -71,21 +71,21 @@ const sendCustomerAcceptance = () => ({
type: SEND_CUSTOMER_ACCEPTANCE
});
-export const acceptDeclineInstallation = (idEntry, actionType, declineReason) => {
+export const acceptDeclineInstallation = (idOrder, actionType, declineReason) => {
return dispatch => {
dispatch(sendCustomerAcceptance());
return htmlClient.fetch({
- url: `${API_SERVER}/wp-json/wiaas/customer-acceptance/${idEntry}`,
+ url: `${API_SERVER}/wp-json/wiaas/delivery/${idOrder}/customer-acceptance`,
method: 'post',
data: {
- actionType,
- declineReason
+ 'action_type': actionType,
+ 'decline_reason': declineReason
}
})
.then(response => {
if (response.data) {
dispatch(updateMessages(response.data.messages, orderMessages));
- dispatch(fetchCustomerAcceptance(idEntry));
+ dispatch(fetchCustomerAcceptance(idOrder));
}
})
.catch(error => {
diff --git a/frontend/src/actions/orders/customerQuestionnairesActions.js b/frontend/src/actions/orders/customerQuestionnairesActions.js
new file mode 100644
index 0000000..5a86e86
--- /dev/null
+++ b/frontend/src/actions/orders/customerQuestionnairesActions.js
@@ -0,0 +1,68 @@
+import {
+ API_SERVER
+} from '../../config';
+
+import {
+ UPLOAD_CUSTOMER_QUESTIONNAIRE,
+ REQUEST_CUSTOMER_QUESTIONNAIRES,
+ RECEIVE_CUSTOMER_QUESTIONNAIRES,
+ orderMessages, REQUEST_CUSTOMER_ACCEPTANCE, RECEIVE_CUSTOMER_ACCEPTANCE, UPLOAD_CUSTOMER_ACCEPTANCE
+} from '../../constants/ordersConstants';
+
+import {
+ updateMessages
+} from '../notification/notificationActions';
+import HtmlClient from '../../helpers/HtmlClient';
+import {fetchCustomerAcceptance} from "./customerAcceptanceActions";
+
+const htmlClient = new HtmlClient();
+
+
+const requestCustomerQuestionnaires = () => ({
+ type: REQUEST_CUSTOMER_QUESTIONNAIRES
+});
+
+const receiveCustomerQuestionnaires = (json) => ({
+ type: RECEIVE_CUSTOMER_QUESTIONNAIRES,
+ customerQuestionnaires: json
+});
+
+const uploadCustomerQuestionnaireAction = () => ({
+ type: UPLOAD_CUSTOMER_QUESTIONNAIRE
+});
+
+
+export const fetchCustomerQuestionnaires = (idOrder) => {
+ return dispatch => {
+ dispatch(requestCustomerQuestionnaires());
+ return htmlClient.fetch({
+ url: `${API_SERVER}/wp-json/wiaas/delivery/${idOrder}/customer-questionnaires`,
+ method: 'get'
+ })
+ .then(response => {
+ if (typeof response.data !== 'undefined') {
+ dispatch(receiveCustomerQuestionnaires(response.data));
+ }
+ })
+ .catch(error => {
+ htmlClient.onError(error, dispatch);
+ });
+ }
+}
+
+export const uploadCustomerQuestionnaire = (orderId, actionId, file) => {
+
+ return dispatch => {
+ dispatch(uploadCustomerQuestionnaireAction());
+ return htmlClient.uploadFile(file, {
+ url: `${API_SERVER}/wp-json/wiaas/delivery/${orderId}/customer-questionnaires/upload/${actionId}`,
+ }).then(response => {
+ if (typeof response.data !== 'undefined') {
+ dispatch(updateMessages(response.data.messages, orderMessages));
+ dispatch(fetchCustomerQuestionnaires(orderId));
+ }
+ }).catch(error => {
+ htmlClient.onError(error, dispatch);
+ });
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/constants/ordersConstants.js b/frontend/src/constants/ordersConstants.js
index b2d9b2e..88fa7fc 100644
--- a/frontend/src/constants/ordersConstants.js
+++ b/frontend/src/constants/ordersConstants.js
@@ -46,6 +46,10 @@ export const SET_VIEW_ALL_ORDERS = MODULE + 'SET_VIEW_ALL_ORDERS';
export const REQUEST_ALL_SHIPPING_DATES_CONFIRMED = MODULE + 'REQUEST_ALL_SHIPPING_DATES_CONFIRMED';
export const RECEIVE_ALL_SHIPPING_DATES_CONFIRMED = MODULE + 'RECEIVE_ALL_SHIPPING_DATES_CONFIRMED';
+export const UPLOAD_CUSTOMER_QUESTIONNAIRE = MODULE + 'UPLOAD_CUSTOMER_QUESTIONNAIRE';
+export const REQUEST_CUSTOMER_QUESTIONNAIRES = MODULE + 'REQUEST_CUSTOMER_QUESTIONNAIRES';
+export const RECEIVE_CUSTOMER_QUESTIONNAIRES = MODULE + 'RECEIVE_CUSTOMER_QUESTIONNAIRES';
+
export const orderMessages = {
SYSTEM_ALLOWED_LANGUAGES_EMPTY: 'There are no languages added in the system.',
ALLOWED_LANGUAGE: 'Allowed languages are:',
diff --git a/frontend/src/containers/cart/components/CartUploadDocument.jsx b/frontend/src/containers/cart/components/CartUploadDocument.jsx
index 4ad72e3..7d87618 100644
--- a/frontend/src/containers/cart/components/CartUploadDocument.jsx
+++ b/frontend/src/containers/cart/components/CartUploadDocument.jsx
@@ -61,7 +61,7 @@ class CartUploadDocument extends Component {
{this.uploadFile(cartItem.key, idDocumentType, acceptedFiles, rejectedFiles, packages)}}>
{
uploadedDocument
diff --git a/frontend/src/containers/orders/components/process/CustomerAcceptance.jsx b/frontend/src/containers/orders/components/process/CustomerAcceptance.jsx
index 4d12479..3c459a3 100644
--- a/frontend/src/containers/orders/components/process/CustomerAcceptance.jsx
+++ b/frontend/src/containers/orders/components/process/CustomerAcceptance.jsx
@@ -31,10 +31,10 @@ class CustomerAcceptance extends Component {
fileHandler.download(fileUrl, fileName);
}
- uploadFile(idEntry, acceptedFiles, rejectedFiles) {
+ uploadFile(idOrder, acceptedFiles, rejectedFiles) {
if(acceptedFiles && acceptedFiles.length){
const file = acceptedFiles[0];
- this.props.dispatch(uploadAcceptance(idEntry, file));
+ this.props.dispatch(uploadAcceptance(idOrder, file));
}
if(rejectedFiles && rejectedFiles.length) {
@@ -59,9 +59,9 @@ class CustomerAcceptance extends Component {
}
acceptDeclineInstallation() {
- const {idProcess} = this.props.step;
+ const {idOrder} = this.props.step;
const {actionType, reason} = this.state;
- this.props.dispatch(acceptDeclineInstallation(idProcess, actionType, reason));
+ this.props.dispatch(acceptDeclineInstallation(idOrder, actionType, reason));
this.setState({reason: ''});
}
@@ -107,8 +107,8 @@ class CustomerAcceptance extends Component {
}
componentDidMount(){
- const {idProcess} = this.props.step;
- this.props.dispatch(fetchCustomerAcceptance(idProcess));
+ const {idOrder} = this.props.step;
+ this.props.dispatch(fetchCustomerAcceptance(idOrder));
}
render() {
@@ -135,9 +135,9 @@ class CustomerAcceptance extends Component {
{this.uploadFile(step.idProcess, acceptedFiles, rejectedFiles)}}>
+ onDrop={(acceptedFiles, rejectedFiles)=>{this.uploadFile(step.idOrder, acceptedFiles, rejectedFiles)}}>
{orderTexts.labels.UPLOAD_ACCEPTANCE_LABEL}
@@ -148,7 +148,7 @@ class CustomerAcceptance extends Component {
{
customerAcceptance.documents.map((document, index) =>
- {document.name} ({document.extension})
+ {document.name}
{document.validation}
diff --git a/frontend/src/containers/orders/components/process/OrderProcess.jsx b/frontend/src/containers/orders/components/process/OrderProcess.jsx
index 3424e32..bc4d8e8 100644
--- a/frontend/src/containers/orders/components/process/OrderProcess.jsx
+++ b/frontend/src/containers/orders/components/process/OrderProcess.jsx
@@ -41,7 +41,11 @@ class OrderProcess extends Component {
{
- visibleSteps.reverse().map((step, index) => )
+ visibleSteps.reverse().map((step, index) => )
}
diff --git a/frontend/src/containers/orders/components/process/ValidateQuestionnaire.jsx b/frontend/src/containers/orders/components/process/ValidateQuestionnaire.jsx
index 08cb7b5..63324b2 100644
--- a/frontend/src/containers/orders/components/process/ValidateQuestionnaire.jsx
+++ b/frontend/src/containers/orders/components/process/ValidateQuestionnaire.jsx
@@ -1,6 +1,6 @@
import React, {Component} from 'react';
import {connect} from 'react-redux';
-import {fetchCustomerDocuments, fetchValidationComments} from '../../../../actions/orders/processActions';
+import {fetchCustomerQuestionnaires} from '../../../../actions/orders/customerQuestionnairesActions';
import ValidateQuestionnaireItem from './ValidateQuestionnaireItem.jsx';
import '../../style/ValidateQuestionnaire.css';
@@ -8,7 +8,7 @@ class ValidateQuestionnaire extends Component {
componentDidMount(){
const {idOrder, idProcessStep} = this.props.step;
- //this.props.dispatch(fetchCustomerDocuments(idOrder, 'orderQuestionaire'));
+ this.props.dispatch(fetchCustomerQuestionnaires(idOrder));
//this.props.dispatch(fetchValidationComments(idOrder, idProcessStep, 'invalidQuestionnaireComment'));
}
@@ -18,18 +18,18 @@ class ValidateQuestionnaire extends Component {
}
render() {
- const {customerDocuments, validationComments, orderPackages} = this.props;
+ const {customerQuestionnaires, orderPackages} = this.props;
return (
{
- customerDocuments &&
- Object.keys(customerDocuments).map((idOrderPackagePair) =>
+ customerQuestionnaires &&
+ customerQuestionnaires.map((customerQuestionnaryAction) =>
{ return this.findById(orderPackage, idOrderPackagePair)})}
- key={'validate-questionnaire-' + idOrderPackagePair}/>
+ action={customerQuestionnaryAction}
+ key={'validate-questionnaire-' + customerQuestionnaryAction.action_id}
+ orderPackage={orderPackages.find( orderPackage => orderPackage.orderItemId === customerQuestionnaryAction.item_id)}
+ />
)
}
@@ -38,8 +38,7 @@ class ValidateQuestionnaire extends Component {
}
const mapStateToProps = (state) => ({
- customerDocuments: state.processReducer.customerDocuments,
- validationComments: state.processReducer.validationComments,
+ customerQuestionnaires: state.processReducer.customerQuestionnaires,
orderPackages: state.processReducer.orderInfo.packages
});
diff --git a/frontend/src/containers/orders/components/process/ValidateQuestionnaireItem.jsx b/frontend/src/containers/orders/components/process/ValidateQuestionnaireItem.jsx
index ab6e811..6ec53ee 100644
--- a/frontend/src/containers/orders/components/process/ValidateQuestionnaireItem.jsx
+++ b/frontend/src/containers/orders/components/process/ValidateQuestionnaireItem.jsx
@@ -2,7 +2,7 @@ import React, {Component} from 'react';
import {connect} from 'react-redux';
import Dropzone from 'react-dropzone';
import {Row, Col} from 'reactstrap';
-import {reUploadOrderDocument, badFile} from '../../../../actions/orders/processActions';
+import {uploadCustomerQuestionnaire, badFile} from '../../../../actions/orders/customerQuestionnairesActions';
import {API_SERVER} from '../../../../config';
import FileDownloader from '../../../../helpers/FileDownloader';
import {orderTexts} from '../../../../constants/ordersConstants';
@@ -16,48 +16,50 @@ class ValidateQuestionnaireItem extends Component {
fileHandler.download(fileUrl, fileName);
}
- uploadFile(idPackage, idOrder, idDocument,acceptedFiles, rejectedFiles) {
+ uploadFile(action,acceptedFiles, rejectedFiles) {
if(acceptedFiles && acceptedFiles.length){
const file = acceptedFiles[0];
- this.props.dispatch(reUploadOrderDocument(idPackage, idOrder, idDocument, file));
+ this.props.dispatch(uploadCustomerQuestionnaire(action.order_id, action.action_id, file));
}
- if(rejectedFiles && rejectedFiles.length) {
- this.props.dispatch(badFile());
- }
+ // if(rejectedFiles && rejectedFiles.length) {
+ // this.props.dispatch(badFile());
+ // }
}
render() {
- const {customerDocuments, validationComments, orderPackage} = this.props;
+ const {action, orderPackage} = this.props;
+
+ const customerDocuments = [ action.document ];
return (
{
customerDocuments &&
- {orderPackage.packageName}
+ {orderPackage.name}
{
- customerDocuments.map(document =>
+ customerDocuments.map(document =>
{
- document.validation === 'invalid'
+ action.status === 'invalid'
?
-
{this.downloadDocument(document)}}>
- {document.documentName} ({document.extension}) {' '}
+
+
+ {document.name}
+
- {document.validation.replace(/-/g,' ')}
+ {action.status.replace(/-/g,' ')}
{
- (validationComments && validationComments.length > 0) &&
+ (action.comments && action.comments.length > 0) &&
- {validationComments.map((comment, key) =>
-
{comment.user} - {comment.addDate}
-
{comment.comment}
+ {action.comments.map((comment, key) =>
)}
}
@@ -65,9 +67,9 @@ class ValidateQuestionnaireItem extends Component {
{this.uploadFile(document.idPackage, document.idOrder, document.idDocument, acceptedFiles, rejectedFiles)}}>
+ onDrop={(acceptedFiles, rejectedFiles)=>{this.uploadFile(action, acceptedFiles, rejectedFiles)}}>
{orderTexts.labels.SELECT_OR_DROP}
@@ -76,12 +78,12 @@ class ValidateQuestionnaireItem extends Component {
:
- {this.downloadDocument(document)}}>
- {document.documentName} ({document.extension}) {' '}
+
+ {document.name}
+
- {document.validation.replace(/-/g,' ')}
+ {action.status.replace(/-/g,' ')}
diff --git a/frontend/src/helpers/HtmlClient.js b/frontend/src/helpers/HtmlClient.js
index bb9059c..31c7a6c 100644
--- a/frontend/src/helpers/HtmlClient.js
+++ b/frontend/src/helpers/HtmlClient.js
@@ -46,7 +46,7 @@ class HtmlClient {
let formData = new FormData();
formData.append('file', file, file.name);
- if(configParams) {
+ if(configParams && configParams.data) {
Object.keys(configParams.data).forEach((paramKey) => {
formData.append(paramKey, configParams.data[paramKey]);
diff --git a/frontend/src/helpers/OrderHelper.js b/frontend/src/helpers/OrderHelper.js
index 1b585c3..409405d 100644
--- a/frontend/src/helpers/OrderHelper.js
+++ b/frontend/src/helpers/OrderHelper.js
@@ -11,10 +11,15 @@ function formatAddress(addressObject) {
}
export const fromWCOrder = (WCOrder) => {
- let processInfo = Object.assign({},WCOrder['delivery-process']);
- if (WCOrder['delivery-process']){
+ let processInfo = undefined;
+
+ if (WCOrder['delivery-process']) {
+
+ processInfo = Object.assign({},WCOrder['delivery-process']);
processInfo.steps = WCOrder['delivery-process'].steps.map(step=>fromWiaasProcessStep(step));
+
}
+
return {
id: WCOrder.id,
number: WCOrder.number,
diff --git a/frontend/src/helpers/ProcessHelper.js b/frontend/src/helpers/ProcessHelper.js
index 74d1c8e..4a068bb 100644
--- a/frontend/src/helpers/ProcessHelper.js
+++ b/frontend/src/helpers/ProcessHelper.js
@@ -3,17 +3,14 @@ import moment from "moment";
export const fromWiaasProcessStep = (step) => {
return {
actionCode: step.action_code,
- actualDate: step.actual_date,
- comments: step.comments,
fullDesc: step.full_desc,
idOrder: step.order_id,
- idProcess: step.step_form_entry_id, //not sure about this
+ idProcess: step.process_id, //not sure about this
idProcessStep: step.step_id, //not sure about this
isNewCommentVisible: 1, //TODO : get this from backend
isVisibleForCustomer: 1, //TODO : get this from backend
now: moment().format("Do MMM YY"),
shortDesc: step.short_desc,
status: step.status,
- stepType: step.step_type,
}
};
\ No newline at end of file
diff --git a/frontend/src/reducers/orders/processReducers.js b/frontend/src/reducers/orders/processReducers.js
index a240d4a..a43ca1a 100644
--- a/frontend/src/reducers/orders/processReducers.js
+++ b/frontend/src/reducers/orders/processReducers.js
@@ -4,6 +4,7 @@ import {
RECEIVE_CUSTOMER_DOCUMENTS,
RECEIVE_VALIDATION_COMMENTS,
RECEIVE_CUSTOMER_ACCEPTANCE,
+ RECEIVE_CUSTOMER_QUESTIONNAIRES,
RECEIVE_IS_COMPONENT_DISABLED,
RECEIVE_IS_NEXT_STEP_WANTED,
SET_EARLIEST_INSTALLATION_DATE,
@@ -53,6 +54,14 @@ moduleReducers[RECEIVE_CUSTOMER_ACCEPTANCE] = (state, action) => {
});
};
+
+moduleReducers[RECEIVE_CUSTOMER_QUESTIONNAIRES] = (state, action) => {
+
+ return Object.assign({}, state, {
+ customerQuestionnaires: action.customerQuestionnaires
+ });
+};
+
moduleReducers[RECEIVE_IS_COMPONENT_DISABLED] = (state, action) => {
const newState = {isComponentDisabled : {}};
newState.isComponentDisabled.installationScheduling = state.isComponentDisabled && state.isComponentDisabled.installationScheduling