149 lines
4.1 KiB
PHP
149 lines
4.1 KiB
PHP
<?php
|
|
|
|
add_action( 'gravityflow_loaded', 'register_delivery_step', 1 );
|
|
|
|
function register_delivery_step() {
|
|
require_once( 'delivery-process/class-wiaas-delivery-process-step.php' );
|
|
|
|
Gravity_Flow_Steps::register( new Wiaas_Delivery_Process_Step() );
|
|
}
|
|
|
|
add_action( 'gravityflow_workflow_complete', 'action_gflow_after_workflow_complete', 5, 3 );
|
|
add_filter( 'gform_entry_meta', 'wiaas_get_entry_meta', 10, 2 );
|
|
|
|
function wiaas_get_entry_meta($entry_meta, $form_id) {
|
|
$entry_meta[ 'wiaas_delivery_order_id' ] = array(
|
|
'label' => 'Wiaas Delivery Process Step Order',
|
|
'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' ),
|
|
),
|
|
);
|
|
|
|
return $entry_meta;
|
|
}
|
|
|
|
function action_gflow_after_workflow_complete($entry_id, $form, $final_status) {
|
|
$entry = GFAPI::get_entry($entry_id);
|
|
$parent_entry_id = $entry['wiaas_delivery_process_id'];
|
|
if (empty($parent_entry_id)) {
|
|
return;
|
|
}
|
|
|
|
|
|
$api = new Gravity_Flow_API( $form['id'] );
|
|
$current_step = $api->get_current_step( $entry );
|
|
|
|
if ( empty( $current_step ) ) {
|
|
$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( 'rest_api_init', 'wiaas_action_rest_api_init' );
|
|
|
|
function wiaas_action_rest_api_init() {
|
|
register_rest_route( 'wiaas', 'next-delivery-steps', array(
|
|
'methods' => 'GET',
|
|
'callback' => 'get_next_actions_for_user',
|
|
'permission_callback' => null,
|
|
) );
|
|
|
|
register_rest_route( 'wiaas', 'order-delivery-process/(?P<id>[\d]+)', array(
|
|
'args' => array(
|
|
'id' => array(
|
|
'description' => __( 'Unique identifier for the resource.', 'wiaas' ),
|
|
'type' => 'integer',
|
|
),
|
|
),
|
|
array(
|
|
'methods' => 'GET',
|
|
'callback' => 'get_delivery_process_for_order',
|
|
'permission_callback' => null,
|
|
)
|
|
) );
|
|
}
|
|
|
|
function get_next_actions_for_user() {
|
|
$current_user = wp_get_current_user();
|
|
|
|
$field_filters = array();
|
|
$field_filters[] = array(
|
|
'key' => 'workflow_user_id_' . $current_user->ID,
|
|
'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();
|
|
$search_criteria['field_filters'] = $field_filters;
|
|
$search_criteria['status'] = 'active';
|
|
|
|
$form_ids = gravity_flow()->get_workflow_form_ids();
|
|
|
|
$total_count = 7;
|
|
|
|
|
|
$entries = GFAPI::get_entries( $form_ids, $search_criteria, null, null, $total_count );
|
|
|
|
$data = array();
|
|
foreach ($entries as $entry) {
|
|
$step = gravity_flow()->get_step( $entry['workflow_step'] );
|
|
$data[] = array(
|
|
'idOrder' => $entry['wiaas_delivery_order_id'],
|
|
'orderNumber' => $entry['wiaas_delivery_order_id'],
|
|
'status' => $entry['workflow_final_status'],
|
|
'stepAction' => $step->get_name(),
|
|
);
|
|
}
|
|
|
|
$response = new WP_REST_Response( $data );
|
|
|
|
return $response;
|
|
}
|
|
|
|
function get_delivery_process_for_order($data) {
|
|
$order_id = $data["id"];
|
|
|
|
$process = GFAPI::get_entry(161);
|
|
|
|
$api = new Gravity_Flow_API($process['form_id']);
|
|
|
|
$steps_info = $api->get_steps();
|
|
|
|
$response = array();
|
|
|
|
foreach ( $steps_info as $step_info ) {
|
|
$step = $api->get_step( $step_info->get_id(), $process );
|
|
|
|
$info = $step->get_feed_meta();
|
|
$response[] = array(
|
|
'step_id' => $step->get_id(),
|
|
'step_form_entry_id' => $step->get_target_form_entry_id() ?: null,
|
|
'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',
|
|
'order_id' => $order_id,
|
|
'actual_date' => $step->get_target_actual_date(),
|
|
'comments' => $step->get_target_step_comments(),
|
|
);
|
|
}
|
|
|
|
return new WP_REST_Response( $response );
|
|
} |