192 lines
5.1 KiB
PHP
192 lines
5.1 KiB
PHP
<?php
|
|
|
|
class Wiaas_Delivery_Process_Step extends Gravity_Flow_Step {
|
|
|
|
public $_step_type = 'wiaas_delivery_step';
|
|
|
|
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 function get_label() {
|
|
return esc_html__( 'Wiaas Delivery Step', 'wiaas' );
|
|
}
|
|
|
|
public function get_settings() {
|
|
|
|
$settings_api = $this->get_common_settings_api();
|
|
|
|
$forms = $this->get_forms();
|
|
$form_choices[] = array( 'label' => esc_html__( 'Select a Form', 'wiaas' ), 'value' => '' );
|
|
foreach ( $forms as $form ) {
|
|
$form_choices[] = array( 'label' => $form->title, 'value' => $form->id );
|
|
}
|
|
|
|
|
|
$settings = array(
|
|
'title' => esc_html__( 'Wiaas Delivery Step', 'wiaas' ),
|
|
'fields' => array(
|
|
$settings_api->get_setting_instructions(),
|
|
array (
|
|
'name' => 'is_visible_to_customer',
|
|
'label' => __( 'Visible to customer', 'wiaas' ),
|
|
'type' => 'checkbox',
|
|
'choices' => array(
|
|
array(
|
|
'label' => __( 'Show to customer', 'wiaas' ),
|
|
'name' => 'is_visible_to_customer',
|
|
'default_value' => true,
|
|
),
|
|
),
|
|
'tooltip' => __( 'Determines if this step will be shown to customer.', 'wiaas' ),
|
|
),
|
|
array(
|
|
'name' => 'target_form_id',
|
|
'label' => esc_html__( 'Form', 'wiaas' ),
|
|
'type' => 'select',
|
|
'onchange' => "jQuery(this).closest('form').submit();",
|
|
'choices' => $form_choices,
|
|
),
|
|
),
|
|
);
|
|
|
|
$settings['fields'][] = array(
|
|
'name' => 'store_new_entry_id',
|
|
'label' => esc_html__( 'Store New Entry ID', 'wiaas' ),
|
|
'type' => 'checkbox_and_container',
|
|
'checkbox' => array(
|
|
'label' => esc_html__( 'Store the ID of the new entry.', 'wiaas' ),
|
|
),
|
|
'settings' => array(
|
|
array(
|
|
'name' => 'new_entry_id_field',
|
|
'type' => 'field_select',
|
|
'args' => array(
|
|
'input_types' => array(
|
|
'hidden',
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
return $settings;
|
|
}
|
|
|
|
function process() {
|
|
|
|
$form = $this->get_form();
|
|
$entry = $this->get_entry();
|
|
$target_form = GFAPI::get_form( $this->target_form_id );
|
|
$new_entry = array(
|
|
'form_id' => $this->target_form_id,
|
|
);
|
|
|
|
$customer_id_value = null;
|
|
|
|
if ( is_array( $form['fields'] ) ) {
|
|
foreach ( $form['fields'] as $field ) {
|
|
if (GFCommon::get_label( $field ) === 'order-id') {
|
|
$new_entry['wiaas_delivery_order_id'] = $entry[$field->id];
|
|
}
|
|
if (GFCommon::get_label( $field ) === 'customer-id') {
|
|
$customer_id_value = $entry[$field->id];
|
|
}
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
$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);
|
|
}
|
|
|
|
$note = $this->get_name() . ': ' . esc_html__( 'started.', 'wiaas' );
|
|
$this->add_note( $note );
|
|
return false;
|
|
}
|
|
|
|
public function status_evaluation() {
|
|
$target_form_entry = $this->get_target_form_entry();
|
|
|
|
if(is_wp_error($target_form_entry)) {
|
|
return 'complete';
|
|
}
|
|
|
|
$api = new Gravity_Flow_API( $this->target_form_id );
|
|
$status = $api->get_status($target_form_entry);
|
|
|
|
if ( $status === 'complete' || $status === 'approved' ) {
|
|
return 'complete';
|
|
}
|
|
|
|
return 'pending';
|
|
}
|
|
|
|
public function get_entry_meta($entry_meta, $form_id) {
|
|
$entry_meta['wiaas_delivery_step_' . $this->get_id() .'_entry_id'] = null;
|
|
return $entry_meta;
|
|
}
|
|
|
|
public function get_forms() {
|
|
$forms = GFFormsModel::get_forms();
|
|
return $forms;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
public function get_target_form_entry() {
|
|
return GFAPI::get_entry($this->get_target_form_entry_id());
|
|
}
|
|
|
|
public function get_target_form_entry_id() {
|
|
return gform_get_meta($this->get_entry_id(), 'wiaas_delivery_step_' . $this->get_id() .'_entry_id');
|
|
}
|
|
} |