2254 lines
116 KiB
Twig
2254 lines
116 KiB
Twig
{% extends 'base.html.twig' %}
|
|
|
|
{% block body %}
|
|
<!-- BEGIN: Subheader -->
|
|
<div class="m-subheader">
|
|
<div class="d-flex align-items-center">
|
|
<div class="mr-auto">
|
|
<h3 class="m-subheader__title">Job Order</h3>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- END: Subheader -->
|
|
<div class="m-content">
|
|
<!--Begin::Section-->
|
|
<div class="row">
|
|
<div class="col-xl-12">
|
|
<div class="m-portlet m-portlet--mobile">
|
|
<div class="m-portlet__head">
|
|
<div class="m-portlet__head-caption">
|
|
<div class="m-portlet__head-title">
|
|
<span class="m-portlet__head-icon">
|
|
<i class="flaticon-transport"></i>
|
|
</span>
|
|
<h3 class="m-portlet__head-text">
|
|
{% if mode == 'update-processing' %}
|
|
Dispatch
|
|
<small>{{ obj.getID() }}</small>
|
|
{% elseif mode == 'update-assigning' %}
|
|
Rider Assignment
|
|
<small>{{ obj.getID() }}</small>
|
|
{% elseif mode == 'update-reassign-hub' %}
|
|
Re-assign Hub
|
|
<small>{{ obj.getID() }}</small>
|
|
{% elseif mode == 'update-reassign-rider' %}
|
|
Re-assign Rider
|
|
<small>{{ obj.getID() }}</small>
|
|
{% elseif mode in ['update-all', 'fulfill-cancel'] %}
|
|
Viewing
|
|
<small>{{ obj.getID() }}</small>
|
|
{% else %}
|
|
Incoming
|
|
{% endif %}
|
|
</h3>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<form id="row-form" class="m-form m-form--fit m-form--label-align-right" method="post" action="{{ submit_url }}">
|
|
<input type="hidden" id="invoice-change" name="invoice_change" value="0">
|
|
<input type="hidden" id="cid" name="cid" value="0">
|
|
{% if mode in ['update-assigning', 'update-processing', 'update-reassign-hub', 'update-reassign-rider', 'update-all', 'open_edit'] %}
|
|
<input type="hidden" id="cid" name="cid" value="{{ obj.getCustomer.getID }}">
|
|
{% endif %}
|
|
<div class="m-portlet__body">
|
|
|
|
{% if ftags.vehicle_dropdown %}
|
|
<div class="m-form__section m-form__section--first">
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="customer_vehicle">Select a vehicle:</label>
|
|
<select class="form-control m-select2" id="customer-vehicle" name="customer_vehicle"></select>
|
|
<div class="form-control-feedback hide" data-field="customer_vehicle"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label></label>
|
|
<div style="display:block; margin-top: 5px">
|
|
<a href="{{ url('customer_create', {'ref':'jo'}) }}" class="btn btn-success">Create New Customer / Vehicle</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="m-form__section">
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="ref_jo">Reference Job Order:</label>
|
|
<select class="form-control m-select2" id="ref-jo" name="ref_jo"></select>
|
|
<div class="form-control-feedback hide" data-field="ref_jo"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% else %}
|
|
<input type="hidden" id="customer-vehicle" name="customer_vehicle" value="{{ obj.getCustomerVehicle.getID|default('0') }}">
|
|
{% endif %}
|
|
{% if obj.getReferenceJO %}
|
|
<div class="m-form__section m-form__section--first">
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="ref_jo">Reference Job Order:</label>
|
|
<input type="text" name="ref_jo" id="ref-jo" class="form-control m-input" value="{{ '#' ~ obj.getReferenceJO.getID ~ ' - ' ~ obj.getReferenceJO.getCustomer.getFirstName ~ ' ' ~ obj.getReferenceJO.getCustomer.getLastName ~ ' (Plate No: ' ~ obj.getReferenceJO.getCustomerVehicle.getPlateNumber ~ ') - ' ~ service_types[obj.getReferenceJO.getServiceType] }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="ref_jo"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
<div class="m-form__section{{ mode != 'create' and not obj.getReferenceJO ? ' m-form__section--first' }}">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Customer Details
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="customer_first_name">First Name</label>
|
|
<input type="text" name="customer_first_name" id="customer-first-name" class="form-control m-input" value="{{ obj.getCustomer.getFirstName|default('') }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="customer_first_name"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="customer_last_name">Last Name</label>
|
|
<input type="text" name="customer_last_name" id="customer-last-name" class="form-control m-input" value="{{ obj.getCustomer.getLastName|default('') }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="customer_last_name"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="customer_phone_mobile">Mobile Phone</label>
|
|
<div class="input-group m-input-group">
|
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
|
<input type="text" name="customer_phone_mobile" id="customer-phone-mobile" class="form-control m-input" value="{{ obj.getCustomer.getPhoneMobile|default('') }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="customer_phone_mobile"></div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="customer_phone_landline">Landline</label>
|
|
<div class="input-group m-input-group">
|
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
|
<input type="text" name="customer_phone_landline" id="customer-phone-landline" class="form-control m-input" value="{{ obj.getCustomer.getPhoneLandline|default('') }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="customer_phone_landline"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="customer_phone_office">Office Phone</label>
|
|
<div class="input-group m-input-group">
|
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
|
<input type="text" name="customer_phone_office" id="customer-phone-office" class="form-control m-input" value="{{ obj.getCustomer.getPhoneOffice|default('') }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="customer_phone_office"></div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="customer_phone_fax">Alternative Phone</label>
|
|
<div class="input-group m-input-group">
|
|
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
|
<input type="text" name="customer_phone_fax" id="customer-phone-fax" class="form-control m-input" value="{{ obj.getCustomer.getPhoneFax|default('') }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="customer_phone_fax"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="customer_customer_notes">Customer Notes</label>
|
|
<textarea name="customer_customer_notes" id="customer-customer-notes" class="form-control m-input" data-vehicle-field="1" rows="4" disabled>{{ obj.getCustomer ? obj.getCustomer.getCustomerNotes }}</textarea>
|
|
<div class="form-control-feedback hide" data-field="customer_customer_notes"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<div class="col-lg-12 form-group-inner">
|
|
<label>Email Address</label>
|
|
<input type="text" name="customer_email" id="customer-email" class="form-control m-input" value="{{ obj.getCustomer ? obj.getCustomer.getEmail|default('') }}" data-vehicle-field="1" >
|
|
<div class="form-control-feedback hide" data-field="customer_email"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-3">
|
|
<div class="col-lg-12 form-group-inner">
|
|
<label data-field="source">Marketing Promo</label>
|
|
<div class="m-checkbox-list">
|
|
<label class="m-checkbox">
|
|
<input type="checkbox" name="flag_promo_sms" id="flag-promo-sms" value="1"{{ obj.getCustomer ? obj.getCustomer.isPromoSms ? ' checked' }} >
|
|
SMS
|
|
<span></span>
|
|
<div class="form-control-feedback hide" data-field="flag_promo_sms"></div>
|
|
</label>
|
|
<label class="m-checkbox">
|
|
<input type="checkbox" name="flag_promo_email" id="flag-promo-email" value="1"{{ obj.getCustomer ? obj.getCustomer.isPromoEmail ? ' checked' }} >
|
|
Email
|
|
<span></span>
|
|
<div class="form-control-feedback hide" data-field="flag_promo_email"></div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<div class="col-lg-12 form-group-inner">
|
|
<label data-field="source">Marketing Research</label>
|
|
<div class="m-checkbox-list">
|
|
<label class="m-checkbox">
|
|
<input type="checkbox" name="flag_research_sms" id="flag-research-sms" value="1"{{ obj.getCustomer ? obj.getCustomer.isResearchSms ? ' checked' }} >
|
|
SMS
|
|
<span></span>
|
|
<div class="form-control-feedback hide" data-field="flag_research_sms"></div>
|
|
</label>
|
|
<label class="m-checkbox">
|
|
<input type="checkbox" name="flag_research_email" id="flag-research-email" "value="1"{{ obj.getCustomer ? obj.getCustomer.isResearchEmail ? ' checked' }} >
|
|
Email
|
|
<span></span>
|
|
<div class="form-control-feedback hide" data-field="flag_research_email"></div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
{% if is_granted('customer.dpa') %}
|
|
<input type="checkbox" name="flag_dpa_consent" id="flag-dpa-consent" value="1"{{ obj.getCustomer ? obj.getCustomer.isDpaConsent ? ' checked' }} >
|
|
<label class="switch-label">With DPA Consent</label>
|
|
<div class="form-control-feedback hide" data-field="flag_dpa_consent"></div>
|
|
{% endif %}
|
|
</div>
|
|
<!-- commenting out car club at request of customer since promo has ended
|
|
<div class="col-lg-3">
|
|
<div class="col-lg-12 form-group-inner">
|
|
<div class="m-checkbox-list">
|
|
{% for customer_tag in customer_tags %}
|
|
<label class="m-checkbox">
|
|
{% if obj.getCustomer %}
|
|
<input type="checkbox" name="customer_tags[]" value="{{ customer_tag.getID() }}"{{ customer_tag.getID() in obj.getCustomer.getCustomerTags() ? ' checked' : '' }} disabled>
|
|
{{ customer_tag.getName() }}
|
|
{% else %}
|
|
<input type="checkbox" name="customer_tags[]" value="{{ customer_tag.getID() }}" disabled>
|
|
{{ customer_tag.getName() }}
|
|
{% endif %}
|
|
<span></span>
|
|
</label>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
</div> -->
|
|
</div>
|
|
</div>
|
|
<div class="m-form__section">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Vehicle Details
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-3">
|
|
<label data-field="vmfg">Manufacturer</label>
|
|
<input type="text" name="vmfg" id="vmfg" class="form-control m-input" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getVehicle.getManufacturer.getName }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="vmfg"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="vehicle_make">Make</label>
|
|
<input type="text" name="vehicle_make" id="vehicle-make" class="form-control m-input" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getVehicle.getMake }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="vehicle_make"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="vehicle_year">Model Year</label>
|
|
<input type="text" name="vehicle_year" id="vehicle-year" class="form-control m-input" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getModelYear }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="vehicle_year"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-3">
|
|
<label data-field="vehicle_plate">Plate #</label>
|
|
<input type="text" name="vehicle_plate" id="vehicle-plate" class="form-control m-input" value="{{ obj.getCustomerVehicle.getPlateNumber|default('') }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="vehicle_color"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="vehicle_color">Color</label>
|
|
<input type="text" name="vehicle_color" id="vehicle-color" class="form-control m-input" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getColor }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="vehicle_color"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="m-form__section">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Battery Details
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-3">
|
|
<label data-field="current_battery">Current Battery</label>
|
|
<input type="text" name="current_battery" id="current-battery" class="form-control m-input" value="{{ obj.getCustomerVehicle and obj.getCustomerVehicle.getCurrentBattery ? obj.getCustomerVehicle.getCurrentBattery.getManufacturer.getName ~ ' ' ~ obj.getCustomerVehicle.getCurrentBattery.getModel.getName ~ ' ' ~ obj.getCustomerVehicle.getCurrentBattery.getSize.getName ~ ' (' ~ obj.getCustomerVehicle.getCurrentBattery.getProductCode ~ ')' }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="current_battery"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="warranty_code">Serial Number</label>
|
|
<input type="text" name="warranty_code" id="warranty-code" class="form-control m-input" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getWarrantyCode }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="warranty_code"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="warranty_expiration">Warranty Expiration Date</label>
|
|
<input type="text" name="warranty_expiration" id="warranty-expiration" class="form-control m-input" value="{{ obj.getCustomerVehicle.getCurrentBattery|default(false) ? obj.getCustomerVehicle.getWarrantyExpiration|date("d M Y") : '' }}" data-vehicle-field="1" disabled>
|
|
<div class="form-control-feedback hide" data-field="warranty_expiration"></div>
|
|
</div>
|
|
<div class="col-g-3">
|
|
<span class="m-switch m-switch--icon block-switch">
|
|
<label>
|
|
<input type="checkbox" name="flag_motolite_battery" id="flag-motolite-battery" value="1" {{ obj.getCustomerVehicle.getCurrentBattery|default(false) ? obj.getCustomerVehicle.hasMotoliteBattery ? ' checked' }} disabled>
|
|
<label class="switch-label">{% trans %}label.jo.vehicle_battery{% endtrans %}</label>
|
|
<span></span>
|
|
</label>
|
|
</span>
|
|
</div>
|
|
{% if obj.getCustomerVehicle %}
|
|
<div class="col-lg-3">
|
|
<div><label> </label></div>
|
|
<a class="btn btn-primary" data-toggle="modal" href="#battery_edit"> Edit </a>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
<div class="m-form__section m-form__section">
|
|
<div class="m-form__heading flex-row">
|
|
<h3 class="m-form__heading-title">
|
|
Transaction Details
|
|
</h3>
|
|
<span class="m-switch m-switch--icon block-switch">
|
|
<label>
|
|
<input type="checkbox" name="flag_advance" id="flag-advance" value="1"{{ obj.isAdvanceOrder ? ' checked' }}>
|
|
<label class="switch-label">This is an advance order</label>
|
|
<span></span>
|
|
</label>
|
|
</span>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="service_type">Service Type</label>
|
|
<select id="service_type" class="form-control m-input" name="service_type">
|
|
<!--<option value=""></option>-->
|
|
{% for key, service in service_types %}
|
|
<option value="{{ key }}"{{ obj.getServiceType == key ? ' selected' }}>{{ service }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="service_type"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="warranty_class">Warranty Class</label>
|
|
<select class="form-control m-input" id="warranty-class" name="warranty_class">
|
|
<!--<option value=""></option>-->
|
|
{% for key, class in warranty_classes %}
|
|
<option value="{{ key }}"{{ obj.getWarrantyClass == key ? ' selected' }}>{{ class }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="warranty_class"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="mode_of_payment">Mode of Payment</label>
|
|
<select class="form-control m-input" id="mode-of-payment" name="mode_of_payment">
|
|
<!--<option value=""></option>-->
|
|
{% for key, class in modes_of_payment %}
|
|
<option value="{{ key }}"{{ obj.getModeOfPayment == key ? ' selected' }}>{{ class }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="mode_of_payment"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label>Transaction Date</label>
|
|
<input type="text" name="date_transaction" class="form-control m-input" value="{{ obj.getDateCreate|default("now")|date('d M Y - g:i A') }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="date_transaction"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="date_schedule">Scheduled Date</label>
|
|
<div class="input-group date dp">
|
|
<input type="text" name="date_schedule_date" class="form-control m-input" data-default-value="{{ obj.getDateSchedule|default("now")|date('Y-m-d') }}" value="{{ obj.getDateSchedule|default("now")|date('d M Y') }}" readonly placeholder="Select a date" disabled>
|
|
<span class="input-group-addon">
|
|
<i class="la la-calendar glyphicon-th"></i>
|
|
</span>
|
|
</div>
|
|
<div class="form-control-feedback hide" data-field="date_schedule_date"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="date_schedule">Scheduled Time</label>
|
|
<div class="input-group">
|
|
<input type="text" name="date_schedule_time" class="form-control m-input tp" data-default-value="{{ obj.getDateSchedule|default("now")|date('g:i A') }}" value="{{ obj.getDateSchedule|default("now")|date('g:i A') }}" readonly placeholder="Select a time" disabled>
|
|
<span class="input-group-addon">
|
|
<i class="la la-clock-o glyphicon-th"></i>
|
|
</span>
|
|
</div>
|
|
<div class="form-control-feedback hide" data-field="date_schedule_time"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="flag_will_wait">Willing to Wait</label>
|
|
<select class="form-control m-input" id="flag-willing-to-wait" name="flag_willing_to_wait">
|
|
{% for key, class in willing_to_wait_content %}
|
|
<option value="{{ key }}"{{ obj.getWillWait == key ? ' selected' }}>{{ class }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="flag_willing_to_wait"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="no_wait_reason">Reason Why Not Willing to Wait</label>
|
|
<select class="form-control m-input" id="no-wait-reason" name="no_wait_reason" disabled>
|
|
<option value="">None</option>
|
|
{% for key, class in no_wait_reasons %}
|
|
<option value="{{ key }}"{{ obj.getReasonNotWait == key ? ' selected' }}>{{ class }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="no_wait_reason"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="emergency_type">Emergency Scenario</label>
|
|
<select class="form-control m-input" id="emergency-type" name="emergency_type" disabled>
|
|
<option value=""></option>
|
|
{% for id, label in emergency_types %}
|
|
{% if obj.getEmergencyType %}
|
|
<option value="{{ id }}"{{ obj.getEmergencyType.getID == id ? ' selected' }}>{{ label }}</option>
|
|
{% else %}
|
|
<option value="{{ id }}">{{ label }}</option>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="emergency_type"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="not_wait_notes">Notes on Not Willing to Wait</label>
|
|
<textarea name="not_wait_notes" id="not-wait-notes" class="form-control m-input" rows="2" disabled>{{ obj.getNotWaitingNotes }}</textarea>
|
|
<div class="form-control-feedback hide" data-field="not_wait_notes"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="initial_concern">Initial Concern of Customer</label>
|
|
<select class="form-control m-input" id="initial-concern" name="initial_concern">
|
|
<option value=""></option>
|
|
{% for key, class in initial_concern %}
|
|
<option value="{{ key }}"{{ obj.getInitialConcern == key ? ' selected' }}>{{ class }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="initial_concern"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="initial_concern_notes">Notes on Initial Concern of Customer</label>
|
|
<textarea name="initial_concern_notes" id="initial-concern-notes" class="form-control m-input" rows="2">{{ obj.getInitialConcernNotes }}</textarea>
|
|
<div class="form-control-feedback hide" data-field="initial_concern_notes"></div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="tier1_notes">Tier 1 Notes</label>
|
|
<textarea name="tier1_notes" class="form-control m-input" rows="15">{{ obj.getTier1Notes }}</textarea>
|
|
<div class="form-control-feedback hide" data-field="tier1_notes"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="tier2_notes">Tier 2 Notes</label>
|
|
<textarea name="tier2_notes" class="form-control m-input" rows="15">{{ obj.getTier2Notes }}</textarea>
|
|
<div class="form-control-feedback hide" data-field="tier2_notes"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<div class="col-lg-12 form-group-inner">
|
|
<label data-field="source">Transaction Origin</label>
|
|
<select class="form-control m-input" id="source" name="source">
|
|
{% for key, class in sources %}
|
|
<option value="{{ key }}"{{ obj.getSource == key ? ' selected' }}>{{ class }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="mode_of_payment"></div>
|
|
</div>
|
|
<br>
|
|
<div class="col-lg-12 form-group-inner">
|
|
<label data-field="delivery_instructions">Delivery Instructions</label>
|
|
<textarea name="delivery_instructions" class="form-control m-input" rows="7">{{ obj.getDeliveryInstructions }}</textarea>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<div class="col-lg-12 form-group-inner">
|
|
<label>Prepared By</label>
|
|
<input type="text" name="created_by" class="form-control m-input" value="{{ obj.getCreatedBy.getFullName|default('') }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="date_transaction"></div>
|
|
</div>
|
|
<br>
|
|
<div class="col-lg-12 form-group-inner">
|
|
<label>Dispatched By</label>
|
|
<input type="text" name="created_by" class="form-control m-input" value="{{ obj.getProcessedBy.getFullName|default('') }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="date_transaction"></div>
|
|
</div>
|
|
<br>
|
|
<div class="col-lg-12 form-group-inner">
|
|
<label>Rider Assigned By</label>
|
|
<input type="text" name="created_by" class="form-control m-input" value="{{ obj.getAssignedBy.getFullName|default('') }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="date_transaction"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="status">Gender of Caller</label>
|
|
<select class="form-control m-input" id="gender" name="gender">
|
|
<option value=""></option>
|
|
{% for key, gender in genders %}
|
|
<option value="{{ key }}"{{ key == obj.getGender ? ' selected' }}>{{ gender }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="gender"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="status">Caller Classification</label>
|
|
<select class="form-control m-input" id="caller-class" name="caller_class">
|
|
<option value=""></option>
|
|
{% for key, caller_class in caller_classifications %}
|
|
<option value="{{ key }}"{{ key == obj.getCallerClassification ? ' selected' }}>{{ caller_class }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="caller_class"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="status">Source of Awareness</label>
|
|
<select class="form-control m-input" id="source-of-awareness" name="source_of_awareness">
|
|
<option value=""></option>
|
|
{% for key, soa in soa_types %}
|
|
<option value="{{ key }}"{{ key == obj.getSourceOfAwareness ? ' selected' }}>{{ soa }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="source_of_awareness"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label for="ownership_type" data-field="ownership_type"> Ownership Type </label>
|
|
<select class="form-control m-input" id="ownership-type" name="ownership_type">
|
|
<option value=""></option>
|
|
{% for id, label in ownership_types %}
|
|
{% if obj.getOwnershipType %}
|
|
<option value="{{ id }}"{{ obj.getOwnershipType.getID == id ? ' selected' }}>{{ label }}</option>
|
|
{% else %}
|
|
<option value="{{ id }}">{{ label }}</option>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="ownership_type"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label for="remarks" data-field="remarks"> Remarks </label>
|
|
<textarea class="form-control m-input" id="remarks" rows="6" name="remarks">{{ obj.getRemarks }}</textarea>
|
|
<div class="form-control-feedback hide" data-field="remarks"></div>
|
|
</div>
|
|
</div>
|
|
<!--
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="status">Status</label>
|
|
<select class="form-control m-input" name="status">
|
|
{% for key, status in statuses %}
|
|
<option value="{{ key }}"{{ obj.getStatus == key ? ' selected' }}>{{ status }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="status"></div>
|
|
</div>
|
|
</div>
|
|
-->
|
|
</div>
|
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
<div class="m-form__section">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Location
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label for="cust_location" data-field="cust_location"> Customer Location </label>
|
|
<select class="form-control m-input" id="cust-location" name="cust_location">
|
|
<option value=""></option>
|
|
{% for id, label in cust_locations %}
|
|
{% if obj.getCustomerLocation %}
|
|
<option value="{{ id }}"{{ obj.getCustomerLocation.getID == id ? ' selected' }}>{{ label }}</option>
|
|
{% else %}
|
|
<option value="{{ id }}">{{ label }}</option>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="cust_location"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="delivery_address">Delivery Address</label>
|
|
<textarea name="delivery_address" class="form-control m-input" rows="4">{{ obj.getDeliveryAddress }}</textarea>
|
|
<div class="form-control-feedback hide" data-field="delivery_address"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="landmark">Landmark</label>
|
|
<textarea name="landmark" class="form-control m-input" rows="4">{{ obj.getLandmark|default('') }}</textarea>
|
|
<div class="form-control-feedback hide" data-field="landmark"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-12">
|
|
<label name="coordinates" data-field="coordinates">Coordinates</label>
|
|
<div class="form-control-feedback hide" data-field="coordinates"></div>
|
|
<input type="hidden" id="map_lat" name="coord_lat" value="">
|
|
<input type="hidden" id="map_lng" name="coord_lng" value="">
|
|
<div class="input-group">
|
|
<input type="text" class="form-control" id="m_gmap_address" placeholder="Search">
|
|
<span class="input-group-btn">
|
|
<button class="btn btn-primary" id="m_gmap_btn">
|
|
<i class="fa fa-search"></i>
|
|
</button>
|
|
</span>
|
|
</div>
|
|
<div id="m_gmap" style="height:600px;"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
<div class="m-form__section{{ ftags.invoice_edit ? ' m-form__section--last' }}">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Invoice
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="or_name">OR Name</label>
|
|
<input type="text" name="or_name" id="or_name" class="form-control m-input" value="{{ obj.getORName|default('') }}">
|
|
<div class="form-control-feedback hide" data-field="or_name"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="promo_detail">Employee ID / Card Number / Referred By</label>
|
|
<input type="text" name="promo_detail" id="promo_detail" class="form-control m-input" value="{{ obj.getPromoDetail|default('') }}">
|
|
<div class="form-control-feedback hide" data-field="promo_detail"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label>Discount Type</label>
|
|
{% if ftags.invoice_edit %}
|
|
<select class="form-control m-input" id="invoice-promo" name="invoice_promo">
|
|
<option value="">None</option>
|
|
{% for promo in promos %}
|
|
{% if obj.getInvoice and obj.getInvoice.getPromo %}
|
|
<option value="{{ promo.getID() }}" {{ obj.getInvoice.getPromo.getID == promo.getID ? ' selected'}}>{{ promo.getName() ~ ' (' ~ promo.getDiscountRate * 100 ~ '% applied to ' ~ discount_apply[promo.getDiscountApply] ~ ')' }}</option>
|
|
{% else %}
|
|
<option value="{{ promo.getID() }}">{{ promo.getName() ~ ' (' ~ promo.getDiscountRate * 100 ~ '% applied to ' ~ discount_apply[promo.getDiscountApply] ~ ')' }}</option>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="invoice_promo"></div>
|
|
{% else %}
|
|
<input type="text" id="invoice-promo" class="form-control m-input" value="{{ obj.getInvoice.getPromo.getName|default('None') }}" disabled>
|
|
{% endif %}
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label>Promo Discount</label>
|
|
<input type="text" id="invoice-promo-discount" class="form-control m-input text-right" value="{{ obj.getInvoice ? obj.getInvoice.getDiscount|number_format(2) : '0.00' }}" disabled>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label>Trade In</label>
|
|
<input type="text" id="invoice-trade-in" class="form-control m-input text-right" value="{{ obj.getInvoice ? obj.getInvoice.getTradeIn|number_format(2) : '0.00' }}" disabled>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-3">
|
|
<label>Price</label>
|
|
<input type="text" id="invoice-price" class="form-control m-input text-right" value="{{ obj.getInvoice ? obj.getInvoice.getVATExclusivePrice|number_format(2) : '0.00' }}" disabled>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label>VAT</label>
|
|
<input type="text" id="invoice-vat" class="form-control m-input text-right" value="{{ obj.getInvoice ? obj.getInvoice.getVAT|number_format(2) : '0.00' }}" disabled>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label>Total Amount</label>
|
|
<input type="text" id="invoice-total-amount" class="form-control m-input text-right" value="{{ obj.getInvoice ? obj.getInvoice.getTotalPrice|number_format(2) : '0.00' }}" disabled>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-12">
|
|
<table id="invoice-table" class="table table-compact m-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Item</th>
|
|
<th class="text-right">Quantity</th>
|
|
<th class="text-right">Unit Price</th>
|
|
<th class="text-right">Amount</th>
|
|
<!--<th style="width: 50px;"></th>-->
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% if not obj.getInvoice or (obj.getInvoice and obj.getInvoice.getItems|length == 0) %}
|
|
<tr class="placeholder-row">
|
|
<td colspan="4">
|
|
No items to display.
|
|
</td>
|
|
</tr>
|
|
{% else %}
|
|
{% for item in obj.getInvoice.getItems %}
|
|
<tr data-key="{{ loop.index0 }}">
|
|
<td>{{ item.getTitle }}</td>
|
|
<td class="text-right">{{ item.getQuantity|number_format }}</td>
|
|
<td class="text-right">{{ item.getPrice|number_format(2) }}</td>
|
|
<td class="text-right">{{ (item.getPrice * item.getQuantity)|number_format(2) }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
{% endif %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
{% if ftags.invoice_edit %}
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-1 hide">
|
|
<label for="invoice-bmfg">Manufacturer</label>
|
|
<select class="form-control m-input" id="invoice-bmfg">
|
|
{% for manufacturer in bmfgs %}
|
|
<option value="{{ manufacturer.getID() }}">{{ manufacturer.getName() }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label for="invoice-battery">Battery</label>
|
|
<select class="form-control m-input" id="invoice-battery" data-value="" disabled>
|
|
<option value="">Select a vehicle and manufacturer first</option>
|
|
</select>
|
|
</div>
|
|
<!--
|
|
<div class="col-lg-2">
|
|
<label for="invoice-trade-in-type">Trade In</label>
|
|
<select class="form-control m-input" name="invoice_trade_in_type" id="invoice-trade-in-type">
|
|
<option value="">None</option>
|
|
{% for key, type in trade_in_types %}
|
|
<option value="{{ key }}">{{ type }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
<div class="col-lg-2">
|
|
<label data-field="no_trade_in_reason">No Trade In Reason</label>
|
|
<select class="form-control m-input" id="no-trade-in-reason" name="no_trade_in_reason">
|
|
<option value="">Select reason</option>
|
|
{% for key, class in no_trade_in_reasons %}
|
|
<option value="{{ key }}"{{ obj.getNoTradeInReason == key ? ' selected' }}>{{ class }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="no_trade_in_reason"></div>
|
|
</div>
|
|
-->
|
|
|
|
<div class="col-lg-1">
|
|
<label for="invoice-quantity">Quantity</label>
|
|
<input type="text" id="invoice-quantity" class="form-control m-input text-right" value="1">
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<div><label> </label></div>
|
|
<button type="button" class="btn btn-primary" id="btn-add-to-invoice">Add</button>
|
|
<!--
|
|
<button type="button" class="btn btn-success" id="btn-recompute-invoice">Recompute</button>
|
|
-->
|
|
<button type="button" class="btn btn-danger" id="btn-reset-invoice">Reset</button>
|
|
</div>
|
|
</div>
|
|
{% include('invoice/trade_in.html.twig') %}
|
|
{% endif %}
|
|
</div>
|
|
|
|
{% if mode in ['update-processing', 'update-reassign-hub'] %}
|
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
<div class="m-form__section">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Nearest Hubs
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-12">
|
|
<label>Click on a row to select a hub</label>
|
|
<div class="form-control-feedback hide" data-field="hub"></div>
|
|
<div class="table-frame" data-name="hub">
|
|
<table id="hubs-table" class="table table-compact table-hover table-clickable m-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Hub</th>
|
|
<th>Branch</th>
|
|
<!--<th class="text-right">Distance</th>
|
|
<th class="text-right">Travel Time</th>
|
|
-->
|
|
<th class="text-right">Total Rider Count</th>
|
|
<th class="text-right">On Duty</th>
|
|
<th class="text-right">In Transit</th>
|
|
<th class="text-right">Available</th>
|
|
<th class="text-right">Job Order Count</th>
|
|
<th class="text-right">Jobs For Assignment</th>
|
|
<th class="text-right">Inventory</th>
|
|
<th>Contact Numbers</th>
|
|
<th>Action</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="placeholder-row{{ hubs|length > 0 ? ' hide' }}">
|
|
<td colspan="11">
|
|
No items to display.
|
|
</td>
|
|
</tr>
|
|
|
|
{% for hub in hubs %}
|
|
<tr data-lat="{{ hub.hub.getCoordinates.getLatitude }}" data-lng="{{ hub.hub.getCoordinates.getLongitude }}" data-id="{{ hub.hub.getID }}" data-invcount={{ hub.inventory }}{{ obj.getHub and obj.getHub.getID == hub.hub.getID ? ' class="m-table__row--primary"' }}>
|
|
<td>{{ hub.hub.getName }}</td>
|
|
<td>{{ hub.hub.getBranch }}</td>
|
|
<!--<td class="text-right">{{ hub.distance ? hub.distance : '-' }}</td>
|
|
<td class="text-right">{{ hub.duration ? hub.duration : '-' }}</td>
|
|
-->
|
|
<td class="text-right">{{ hub.rider_count }}</td>
|
|
<td class="text-right">{{ hub.rider_logged_in|default('0') }}</td>
|
|
<td class="text-right">{{ hub.rider_in_transit|default('0') }}</td>
|
|
<td class="text-right">{{ hub.rider_available|default('0') }}</td>
|
|
<td class="text-right">{{ hub.redis_jo_count }}</td>
|
|
<td class="text-right">{{ hub.jo_count }}</td>
|
|
<td class="text-right">{{ hub.inventory|default('0') }}</td>
|
|
<td>{{ hub.hub.getContactNumbers|replace({"\n": ', '}) }}</td>
|
|
<td>
|
|
{% if hub.flag_rejected %}
|
|
<button type="button" class="btn btn-danger btn-disabled" disabled>Rejected</button>
|
|
{% else %}
|
|
<button type="button" data-hub-id="{{ hub.hub.getID }}" data-hub-name="{{ hub.hub.getName }}" data-hub-branch="{{ hub.hub.getBranch }}" class="btn-reject btn btn-info">Reject</button>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
<div class="m-form__section">
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-2">
|
|
<label for="facilitated-type">Battery Facilitated By</label>
|
|
<select name="facilitated_type" class="form-control m-input" id="facilitated-type">
|
|
<option value="">None</option>
|
|
{% for key, type in facilitated_types %}
|
|
{% if obj.getFacilitatedType %}
|
|
<option value="{{ key }}"{{ obj.getFacilitatedType == key ? ' selected' }}>{{ type }}</option>
|
|
{% else %}
|
|
<option value="{{ key }}">{{ type }}</option>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
<div class="col-lg-8">
|
|
<label for="facilitated-by"> </label>
|
|
<select name="facilitated_by" class="form-control m-input" id="facilitated-by">
|
|
<option value="">None</option>
|
|
{% for key, name in facilitated_hubs %}
|
|
{% if obj.getFacilitatedBy %}
|
|
<option value="{{ key }}"{{ obj.getFacilitatedBy.getID == key ? ' selected' }}>{{ name }}</option>
|
|
{% else %}
|
|
<option value="{{ key }}">{{ name }}</option>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-12">
|
|
<div id="hub_map" style="height:600px;"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if mode in ['update-assigning', 'update-fulfillment', 'update-reassign-rider', 'update-all'] %}
|
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
{% if obj.getHub %}
|
|
<div class="m-form__section">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Hub Details
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="hub_name">Name</label>
|
|
<input type="text" name="hub_name" id="hub-name" class="form-control m-input" value="{{ obj.getHub.getName }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="hub_name"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="hub_time_open">Time Open</label>
|
|
<input type="text" name="hub_time_open" id="hub-time-open" class="form-control m-input" value="{{obj.getHub.getTimeOpen|date("g:i A") }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="hub_time_open"></div>
|
|
</div>
|
|
<div class="col-lg-3">
|
|
<label data-field="hub_time_close">Time Close</label>
|
|
<input type="text" name="hub_time_close" id="hub-time-close" class="form-control m-input" value="{{ obj.getHub.getTimeClose|date("g:i A") }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="hub_time_close"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="hub_address">
|
|
Address
|
|
</label>
|
|
<textarea class="form-control m-input" id="hub-address" rows="4" name="hub_address" disabled>{{ obj.getHub.getAddress }}</textarea>
|
|
<div class="form-control-feedback hide" data-field="hub_address"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="contact_nums">
|
|
Contact Numbers
|
|
</label>
|
|
<textarea class="form-control m-input" id="hub-contact-nums" rows="4" name="hub_contact_nums" disabled>{{ obj.getHub.getContactNumbers }}</textarea>
|
|
<div class="form-control-feedback hide" data-field="hub_contact_nums"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
|
|
{% if mode in ['update-assigning', 'update-reassign-rider'] %}
|
|
<div class="m-form__section">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Rider Assignment
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-12">
|
|
<label>Click on a row to select a rider</label>
|
|
<div class="form-control-feedback hide" data-field="rider"></div>
|
|
<div class="table-frame" data-name="rider">
|
|
<table id="riders-table" class="table table-compact table-hover table-clickable table-vcenter m-table">
|
|
<thead>
|
|
<tr>
|
|
<th></th>
|
|
<th>First Name</th>
|
|
<th>Last Name</th>
|
|
<th>Contact No.</th>
|
|
<th>Plate Number</th>
|
|
<th>Status</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<!--
|
|
{% set avail_riders = obj.getHub.getAvailableRiders|default([]) %}
|
|
<tr class="placeholder-row{{ obj.getHub and avail_riders|length > 0 ? ' hide' }}">
|
|
<td colspan="6">
|
|
No riders available.
|
|
</td>
|
|
</tr>
|
|
|
|
{% if obj.getHub %}
|
|
{% for rider in avail_riders %}
|
|
<tr data-id="{{ rider.getID }}"{{ obj.getRider and obj.getRider.getID == rider.getID ? ' class="m-table__row--primary"' }}>
|
|
<td>
|
|
<div class="user-portrait-sm" style="background-image: url('{{ rider.getImageFile ? "/uploads/" ~ rider.getImageFile : "/assets/images/user.gif" }}');"></div>
|
|
</td>
|
|
<td>{{ rider.getFirstName }}</td>
|
|
<td>{{ rider.getLastName }}</td>
|
|
<td>{{ rider.getContactNumber }}</td>
|
|
<td>{{ rider.getPlateNumber }}</td>
|
|
<td></td>
|
|
</tr>
|
|
{% endfor %}
|
|
{% endif %}
|
|
-->
|
|
{% if obj.getHub %}
|
|
{% for key, data in rider_data %}
|
|
<tr data-id="{{ key }}" {{ obj.getRider and obj.getRider.getID == key ? ' class="m-table__row--primary"' }}>
|
|
<td>
|
|
<div class="user-portrait-sm" style="background-image: url('{{ data['image_file'] ? "/uploads/" ~ data['image_file'] : "/assets/images/user.gif" }}');"></div>
|
|
</td>
|
|
<td> {{ data['first_name'] }} </td>
|
|
<td> {{ data['last_name'] }} </td>
|
|
<td> {{ data['contact_number'] }} </td>
|
|
<td> {{ data['plate_number'] }} </td>
|
|
<td> {{ data['status'] }} </td>
|
|
</tr>
|
|
{% endfor %}
|
|
{% endif %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if mode in ['update-fulfillment', 'update-all'] %}
|
|
{% if obj.getRider %}
|
|
<div class="m-form__section">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Rider Details
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="rider_first_name">First Name</label>
|
|
<input type="text" name="rider_first_name" id="rider-first-name" class="form-control m-input" value="{{ obj.getRider.getFirstName }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="rider_first_name"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="rider_last_name">Last Name</label>
|
|
<input type="text" name="rider_last_name" id="rider-last-name" class="form-control m-input" value="{{obj.getRider.getLastName }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="rider_last_name"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-6">
|
|
<label data-field="rider_contact_no">Contact Number</label>
|
|
<input type="text" name="rider_contact_no" id="rider-contact-no" class="form-control m-input" value="{{ obj.getRider.getContactNumber }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="rider_contact_no"></div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<label data-field="rider_plate_number">Plate Number</label>
|
|
<input type="text" name="rider_plate_number" id="rider-plate-number" class="form-control m-input" value="{{obj.getRider.getPlateNumber }}" disabled>
|
|
<div class="form-control-feedback hide" data-field="rider_plate_number"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-12">
|
|
<label data-field="rider_picture">Picture</label>
|
|
<div class="portrait-box" style="background-image: url('{{ obj.getRider.getImageFile ? '/uploads/' ~ obj.getRider.getImageFile : '/assets/images/user.gif' }}');"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
{% if mode in ['update-all', 'fulfill-cancel'] %}
|
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
|
|
<div class="m-form__section">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Timeline
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-12">
|
|
<div class="m-timeline-2">
|
|
<div class="m-timeline-2__items m--padding-top-25 m--padding-bottom-25">
|
|
{% for event in obj.getEvents %}
|
|
<div class="m-timeline-2__item{{ loop.index > 1 ? ' m--margin-top-40' }}">
|
|
<span class="m-timeline-2__item-time">
|
|
<small>{{ event.getDateHappen|date("M j, Y") }}</small>
|
|
<div>{{ event.getDateHappen|date("h:i:s a") }}</div>
|
|
</span>
|
|
<div class="m-timeline-2__item-cricle">
|
|
<i class="fa fa-genderless" style="color: #f4516c;"></i>
|
|
</div>
|
|
<div class="m-timeline-2__item-text m--padding-top-5">
|
|
{{ event.getTypeName }} by {{ event.getUser.getFullName|default('Application') }} {% if event.getRider %} - Rider - {{ event.getRider.getFullName }}{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if ftags.ticket_table %}
|
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
|
|
|
<div class="m-form__section m-form__section--last">
|
|
<div class="m-form__heading">
|
|
<h3 class="m-form__heading-title">
|
|
Tickets
|
|
</h3>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-12">
|
|
<div class="m_datatable" id="data-tickets"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-12">
|
|
<a href="{{ url('ticket_create', {'customer_id': obj.getCustomer.getID, 'job_order_id': obj.getID}) }}" class="btn btn-primary">Create Ticket</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
</div>
|
|
<div class="m-portlet__foot m-portlet__foot--fit">
|
|
<div class="m-form__actions m-form__actions--solid m-form__actions--right">
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
{% if mode != 'update-all' %}
|
|
{% if mode == 'fulfill-cancel' and is_granted('jo_cancel.fulfill') %}
|
|
<a href="{{ url('jo_fulfill_cancel_submit', {'id': obj.getID}) }}" class="btn btn-success btn-fulfill-cancel-job-order">Fulfill</a>
|
|
{% else %}
|
|
<button type="submit" class="btn btn-success">{{ mode == 'update-fulfillment' ? 'Fulfill' : 'Submit' }}</button>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% if ftags.set_map_coordinate and is_granted('joborder.cancel') and not obj.isCancelled %}
|
|
<a href="{{ url('jo_cancel', {'id': obj.getID}) }}" class="btn btn-danger btn-cancel-job-order">Cancel Job Order</a>
|
|
{% endif %}
|
|
{% if mode != 'create' %}
|
|
<a href="{{ return_url }}" class="btn btn-secondary">Back</a>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal fade" id="battery_edit" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">Customer Battery Details</h4>
|
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form id="battery_edit_form" class="m-form m-form--fit m-form--label-align-right" method="POST" action="{{ url('customer_vehicle_warranty_edit_ajax', {'id' : obj.getCustomerVehicle ? obj.getCustomerVehicle.getID : 0}) }}">
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-lg-12">
|
|
<label>Warranty Serial Number</label>
|
|
<input type="text" name="warr_serial" class="form-control m-input" maxlength="20">
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn dark btn-outline" data-dismiss="modal">Close</button>
|
|
<button type="button" id="battery_edit_submit" class="btn btn-primary">Save Changes</button>
|
|
</div>
|
|
</div>
|
|
<!-- /.modal-content -->
|
|
</div>
|
|
<!-- /.modal-dialog -->
|
|
</div>
|
|
|
|
{% if mode in ['update-processing', 'update-reassign-hub'] %}
|
|
<!-- rejection modal -->
|
|
<div id="modal-rejection" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modal-rejection-label" aria-hidden="true">
|
|
<div class="modal-dialog modal-lg" role="document">
|
|
<form id="hub-reject-form" class="m-form" method="post" action="{{ url('jo_reject_hub', {'id': obj.getID} ) }}">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="modal-rejection-label">Reject Hub</h5>
|
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="m-form__section m-form__section--first m-form__section--last">
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-md-6">
|
|
<label for="hub-reject-name" data-field="hub_name">Hub</label>
|
|
<input type="text" name="hub_name" id="hub-reject-name" class="form-control m-input" readonly>
|
|
<div class="form-control-feedback hide" data-field="hub_name"></div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label for="hub-reject-branch" data-field="hub_branch">Branch</label>
|
|
<input type="text" name="hub_branch" id="hub-reject-branch" class="form-control m-input" readonly>
|
|
<div class="form-control-feedback hide" data-field="hub_branch"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-md-6">
|
|
<label for="hub-reject-reason" data-field="reason">Reason</label>
|
|
<select id="hub-reject-reason" class="form-control m-input" name="reason">
|
|
{% for key, reason in rejection_reasons %}
|
|
<option value="{{ key }}">{{ reason }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div class="form-control-feedback hide" data-field="reason"></div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label for="hub-reject-contact-person" data-field="contact_person">Contact Person</label>
|
|
<input type="text" name="contact_person" id="hub-reject-contact-person" class="form-control m-input">
|
|
<div class="form-control-feedback hide" data-field="contact_person"></div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group m-form__group row">
|
|
<div class="col-12">
|
|
<label for="hub-reject-remarks" data-field="remarks">Remarks</label>
|
|
<textarea name="remarks" id="hub-reject-remarks" class="form-control m-input" rows="8"></textarea>
|
|
<div class="form-control-feedback hide" data-field="remarks"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<input type="hidden" id="hub-reject-id" name="hub">
|
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
|
|
<button type="submit" class="btn btn-primary">Reject</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
{% block scripts %}
|
|
{{ include('map/' ~ map_js_file) }}
|
|
<script src="//maps.googleapis.com/maps/api/js?key={{ gmaps_api_key }}&libraries=places" type="text/javascript"></script>
|
|
<script src="/assets/vendors/custom/gmaps/gmaps.js" type="text/javascript"></script>
|
|
|
|
<script>
|
|
var invoiceItems = [];
|
|
var hasCoolant = 0;
|
|
var hasSealant = 0;
|
|
|
|
// location search autocomplete
|
|
var input = document.getElementById('m_gmap_address');
|
|
|
|
var autocomplete = new google.maps.places.Autocomplete(input);
|
|
autocomplete.setComponentRestrictions({'country': ['{% trans %}default_region{% endtrans %}']});
|
|
autocomplete.addListener('place_changed', function() {
|
|
var place = autocomplete.getPlace();
|
|
|
|
if (!place.geometry) {
|
|
return;
|
|
}
|
|
|
|
var message = {
|
|
'action': 'map.search',
|
|
'params': {
|
|
'lat': place.geometry.location.lat(),
|
|
'lng': place.geometry.location.lng()
|
|
}
|
|
};
|
|
console.log(message);
|
|
});
|
|
|
|
$(function() {
|
|
var form_in_process = false;
|
|
var invoiceItems = [];
|
|
|
|
// openstreet maps stuff
|
|
// TODO: move this to a service
|
|
var default_lat = {% trans %}default_lat{% endtrans %};
|
|
var default_lng = {% trans %}default_long{% endtrans %};
|
|
|
|
var osm_map = mapCreate('m_gmap', default_lat, default_lng, 'road', 13);
|
|
|
|
var markerLayerGroup = L.layerGroup().addTo(osm_map);
|
|
|
|
function populateInvoiceItems()
|
|
{
|
|
{% if invoice_items is defined %}
|
|
{% for item in invoice_items %}
|
|
var qty = {{ item.getQuantity }};
|
|
{% if item.getBattery is not null %}
|
|
var battery_id = {{ item.getBattery.getID }};
|
|
|
|
invoiceItems.push({
|
|
battery: battery_id,
|
|
quantity: qty,
|
|
trade_in: '',
|
|
});
|
|
{% else %}
|
|
{% if item.getBatterySize is not null %}
|
|
var battery_size = {{ item.getBatterySize.GetID }};
|
|
var trade_in_type = '{{ item.getTradeInType }}';
|
|
|
|
// add to invoice array
|
|
invoiceItems.push({
|
|
battery_size: battery_size,
|
|
quantity: qty,
|
|
trade_in: trade_in_type,
|
|
});
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
// need to check if jo has coolant or sealant
|
|
{% if obj.getServiceType == 'overheat' %}
|
|
{% if obj.hasCoolant == 1 %}
|
|
hasCoolant = 1;
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
{% if obj.getServiceType == 'tire' %}
|
|
{% if obj.hasSealant == 1 %}
|
|
hasSealant = 1;
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
}
|
|
|
|
function selectPoint(lat, lng)
|
|
{
|
|
// check if point is in coverage area
|
|
// commenting out the geofence call for CRM
|
|
/*
|
|
$.ajax({
|
|
method: "GET",
|
|
url: "{{ url('jo_geofence') }}",
|
|
data: {
|
|
'lat': lat,
|
|
'lng': lng
|
|
}
|
|
}).done(function(response) {
|
|
if (response.is_covered === false)
|
|
{
|
|
console.log('Not in coverage area');
|
|
swal({
|
|
title: 'Warning!',
|
|
text: 'Our service is limited to some areas in Metro Manila, Laguna, and Baguio only. We will update you as soon as we are able to cover your area',
|
|
type: 'warning',
|
|
});
|
|
}
|
|
}); */
|
|
|
|
// clear markers
|
|
markerLayerGroup.clearLayers();
|
|
|
|
var marker = L.marker([lat, lng]);
|
|
|
|
// add marker to layer group
|
|
markerLayerGroup.addLayer(marker);
|
|
|
|
osm_map.setView(new L.LatLng(lat, lng), 13);
|
|
|
|
// set value in hidden input
|
|
$('#map_lat').val(lat);
|
|
$('#map_lng').val(lng);
|
|
|
|
// regenerate invoice
|
|
generateInvoice();
|
|
|
|
}
|
|
|
|
osm_map.on('click', function(e) {
|
|
selectPoint(e.latlng.lat, e.latlng.lng);
|
|
});
|
|
|
|
var handleAction = function() {
|
|
var text = $.trim($('#m_gmap_address').val());
|
|
GMaps.geocode({
|
|
address: text,
|
|
callback: function(results, status) {
|
|
markerLayerGroup.clearLayers();
|
|
if (status == 'OK') {
|
|
console.log(results);
|
|
var lat = results[0].geometry.location.lat();
|
|
var lng = results[0].geometry.location.lng();
|
|
selectPoint(lat, lng);
|
|
}
|
|
},
|
|
// TODO: change this to get what's in the translation file
|
|
// but for some strange reason, this worked.
|
|
region: 'ph'
|
|
});
|
|
}
|
|
|
|
$('#m_gmap_btn').click(function(e) {
|
|
e.preventDefault();
|
|
handleAction();
|
|
});
|
|
|
|
$("#m_gmap_address").keypress(function(e) {
|
|
var keycode = (e.keyCode ? e.keyCode : e.which);
|
|
if (keycode == '13') {
|
|
e.preventDefault();
|
|
handleAction();
|
|
}
|
|
});
|
|
|
|
{% if ftags.set_map_coordinate %}
|
|
// check if we need to set map
|
|
// OSM code
|
|
var lat = {{ obj.getCoordinates.getLatitude }};
|
|
var lng = {{ obj.getCoordinates.getLongitude }};
|
|
|
|
var promo = $("#invoice-promo").val();
|
|
|
|
populateInvoiceItems();
|
|
|
|
selectPoint(lat, lng);
|
|
|
|
// remove placeholder text
|
|
$("[data-vehicle-field='1']").prop('placeholder', '');
|
|
{% endif %}
|
|
|
|
{% if mode in ['update-processing', 'update-reassign-hub'] %}
|
|
// display hub map
|
|
// OSM code
|
|
|
|
var hub_lat = {{ obj.getCoordinates.getLatitude }};
|
|
var hub_lng = {{ obj.getCoordinates.getLongitude }};
|
|
|
|
var osm_hmap = mapCreate('hub_map', hub_lat, hub_lng, 'road', 13);
|
|
|
|
var destLayerGroup = L.layerGroup().addTo(osm_hmap);
|
|
var hubLayerGroup = L.layerGroup().addTo(osm_hmap);
|
|
|
|
var dest_icon = L.icon({
|
|
iconUrl: '/assets/images/icon-destination.png',
|
|
shadowSize: [0,0]
|
|
});
|
|
|
|
var hub_icon = L.icon({
|
|
iconUrl: '/assets/images/icon-outlet.png',
|
|
shadowSize: [0,0]
|
|
});
|
|
|
|
var dest_marker = new L.Marker([hub_lat, hub_lng], {icon: dest_icon}).bindPopup("Destination");
|
|
|
|
destLayerGroup.addLayer(dest_marker);
|
|
|
|
{% for hub in hubs %}
|
|
var hub_marker = new L.Marker([{{ hub.hub.getCoordinates.getLatitude }},
|
|
{{ hub.hub.getCoordinates.getLongitude }}], {icon: hub_icon}).bindPopup("{{ hub.hub.getName }}");
|
|
|
|
hubLayerGroup.addLayer(hub_marker);
|
|
{% endfor %}
|
|
{% endif %}
|
|
|
|
// disable the enabled customer fields
|
|
{% if mode != 'create' %}
|
|
$("#customer-email").prop("disabled", true);
|
|
$("#flag-dpa-consent").prop("disabled", true);
|
|
$("#flag-promo-sms").prop("disabled", true);
|
|
$("#flag-promo-email").prop("disabled", true);
|
|
$("#flag-research-sms").prop("disabled", true);
|
|
$("#flag-research-email").prop("disabled", true);
|
|
{% endif %}
|
|
|
|
$("#row-form").submit(function(e) {
|
|
if (form_in_process) {
|
|
alert("Cannot submit form twice. First submission still in progress.");
|
|
return false;
|
|
}
|
|
|
|
form_in_process = true;
|
|
|
|
var form = $(this);
|
|
|
|
// get all fields, including disabled ones
|
|
var disabled = form.find(":input:disabled").prop('disabled', false);
|
|
var fields = form.serializeArray().map(function(x){this[x.name] = x.value; return this;}.bind({}))[0];
|
|
disabled.prop('disabled', true);
|
|
|
|
// add invoice items to data
|
|
fields['invoice_items'] = invoiceItems;
|
|
|
|
{% if mode in ['update-processing', 'update-reassign-hub'] %}
|
|
// add selected hub to data
|
|
fields['hub'] = selectedHub;
|
|
|
|
// add inventory count of selected hub to data
|
|
fields['hub_inv_count'] = selectedHubInvCount;
|
|
{% endif %}
|
|
|
|
{% if mode in ['update-assigning', 'update-reassign-rider'] %}
|
|
// add selected rider to data
|
|
fields['rider'] = selectedRider;
|
|
{% endif %}
|
|
|
|
e.preventDefault();
|
|
|
|
$.ajax({
|
|
method: "POST",
|
|
url: form.prop('action'),
|
|
data: fields
|
|
}).done(function(response) {
|
|
// remove all error classes
|
|
removeErrors();
|
|
swal({
|
|
title: 'Done!',
|
|
text: 'Your changes have been saved!',
|
|
type: 'success',
|
|
onClose: function() {
|
|
window.location.href = "{{ return_url }}";
|
|
}
|
|
});
|
|
}).fail(function(response) {
|
|
if (response.status == 422) {
|
|
form_in_process = false;
|
|
var errors = response.responseJSON.errors;
|
|
var firstfield = false;
|
|
|
|
// remove all error classes first
|
|
removeErrors();
|
|
|
|
// display errors contextually
|
|
$.each(errors, function(field, msg) {
|
|
var formfield = $("[name='" + field + "'], [data-name='" + field + "']");
|
|
var label = $("label[data-field='" + field + "']");
|
|
var msgbox = $(".form-control-feedback[data-field='" + field + "']");
|
|
|
|
// add error classes to bad fields
|
|
formfield.addClass('form-control-danger');
|
|
label.addClass('has-danger');
|
|
msgbox.html(msg).addClass('has-danger').removeClass('hide');
|
|
|
|
// check if this field comes first in DOM
|
|
var domfield = formfield.get(0);
|
|
|
|
if (!firstfield || (firstfield && firstfield.compareDocumentPosition(domfield) === 2)) {
|
|
firstfield = domfield;
|
|
}
|
|
});
|
|
|
|
// focus on first bad field
|
|
firstfield.focus();
|
|
|
|
// scroll to above that field to make it visible
|
|
$('html, body').animate({
|
|
scrollTop: $(firstfield).offset().top - 200
|
|
}, 100);
|
|
}
|
|
});
|
|
});
|
|
|
|
// remove all error classes
|
|
function removeErrors(formSelector = '') {
|
|
$(formSelector + " .form-control-danger").removeClass('form-control-danger');
|
|
$(formSelector + " [data-field]").removeClass('has-danger');
|
|
$(formSelector + " .form-control-feedback[data-field]").addClass('hide');
|
|
}
|
|
|
|
// store selected vehicle data
|
|
var vdata = false;
|
|
|
|
{% if ftags.vehicle_dropdown %}
|
|
// vehicle selector
|
|
$('#customer-vehicle').select2({
|
|
ajax: {
|
|
url: "{{ url('customer_vehicle_search') }}",
|
|
dataType: 'json',
|
|
delay: 200,
|
|
data: function (params) {
|
|
var query = {
|
|
search: params.term,
|
|
page: params.page || 1
|
|
}
|
|
|
|
return query;
|
|
}
|
|
},
|
|
placeholder: "Select a vehicle"
|
|
}).on('select2:select', function(e) {
|
|
var data = e.params.data;
|
|
|
|
// get info for this customer vehicle
|
|
$.ajax({
|
|
method: "GET",
|
|
url: "{{ url('customer_vehicle_info') }}",
|
|
data: { id: data.id }
|
|
}).done(function(response) {
|
|
vdata = response.data;
|
|
|
|
// reset vehicle fields
|
|
resetVehicleFields();
|
|
|
|
// reset invoice fields
|
|
$("#btn-reset-invoice").click();
|
|
|
|
// get compatible batteries
|
|
$("#invoice-bmfg").change();
|
|
|
|
// set form fields
|
|
$("[data-vehicle-field='1']").prop('placeholder', '');
|
|
$("#customer-first-name").val(vdata.customer.first_name);
|
|
$("#customer-last-name").val(vdata.customer.last_name);
|
|
$("#customer-phone-mobile").val(vdata.customer.phone_mobile);
|
|
$("#customer-phone-landline").val(vdata.customer.phone_landline);
|
|
$("#customer-phone-office").val(vdata.customer.phone_office);
|
|
$("#customer-phone-fax").val(vdata.customer.phone_fax);
|
|
$("#customer-customer-notes").val(vdata.customer.customer_notes);
|
|
$("#customer-email").val(vdata.customer.email);
|
|
$("#vmfg").val(vdata.vehicle.mfg_name);
|
|
$("#vehicle-make").val(vdata.vehicle.make);
|
|
$("#vehicle-year").val(vdata.vehicle.model_year);
|
|
$("#vehicle-color").val(vdata.vehicle.color);
|
|
$("#vehicle-plate").val(vdata.vehicle.plate_number);
|
|
|
|
// checkboxes
|
|
if (vdata.customer.flag_dpa_consent === true) {
|
|
$("#flag-dpa-consent").prop("checked", true);
|
|
}
|
|
if (vdata.customer.flag_promo_sms === true) {
|
|
$("#flag-promo-sms").prop("checked", true);
|
|
}
|
|
if (vdata.customer.flag_promo_email === true) {
|
|
$("#flag-promo-email").prop("checked", true);
|
|
}
|
|
if (vdata.customer.flag_research_sms === true) {
|
|
$("#flag-research-sms").prop("checked", true);
|
|
}
|
|
if (vdata.customer.flag_research_email === true) {
|
|
$("#flag-research-email").prop("checked", true);
|
|
}
|
|
|
|
if (vdata.customer.customer_tags.length > 0) {
|
|
var checkboxes = document.getElementsByName("customer_tags[]");
|
|
for (var x = 0; checkboxes.length > x; x++)
|
|
{
|
|
if (vdata.customer.customer_tags.indexOf(checkboxes[x].value) !== -1) {
|
|
checkboxes[x].checked = true;
|
|
}
|
|
else {
|
|
checkboxes[x].checked = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// set hidden customer id
|
|
$("#cid").val(vdata.customer.id);
|
|
|
|
if (typeof vdata.battery !== 'undefined') {
|
|
$("#current-battery").val(vdata.battery.mfg_name + " " + vdata.battery.model_name + " " + vdata.battery.size_name + " (" + vdata.battery.prod_code + ")");
|
|
$("#warranty-code").val(vdata.battery.warranty_code);
|
|
$("#warranty-expiration").val(vdata.battery.warranty_expiration);
|
|
$("#flag-motolite-battery").prop("checked", true);
|
|
} else {
|
|
$("#current-battery, #warranty-code, #warranty-expiration").val("No current battery").css('color', '#f4516c');
|
|
$("#flag-motolite-battery").prop("checked", false);
|
|
}
|
|
})
|
|
}).focus();
|
|
{% endif %}
|
|
|
|
{% if ftags.vehicle_dropdown %}
|
|
// reference job order selector
|
|
$('#ref-jo').select2({
|
|
ajax: {
|
|
url: "{{ url('jo_search') }}",
|
|
dataType: 'json',
|
|
delay: 200,
|
|
data: function (params) {
|
|
var query = {
|
|
search: params.term,
|
|
page: params.page || 1
|
|
}
|
|
|
|
return query;
|
|
}
|
|
},
|
|
placeholder: "Select a job order",
|
|
allowClear: true
|
|
});
|
|
{% endif %}
|
|
|
|
// reset all vehicle info form fields
|
|
function resetVehicleFields() {
|
|
$("[data-vehicle-field='1']").val("").css('color', '').prop('placeholder', 'Select a vehicle first');
|
|
|
|
$("#flag-dpa-consent").prop("checked", false);
|
|
$("#flag-promo-sms").prop("checked", false);
|
|
$("#flag-promo-email").prop("checked", false);
|
|
$("#flag-research-sms").prop("checked", false);
|
|
$("#flag-research-email").prop("checked", false);
|
|
|
|
var checkboxes = document.getElementsByName("customer_tags[]");
|
|
for (var x = 0; checkboxes.length > x; x++)
|
|
{
|
|
checkboxes[x].checked = false;
|
|
}
|
|
}
|
|
|
|
// datepicker
|
|
$(".dp").datepicker({
|
|
format: "dd M yyyy",
|
|
todayHighlight: true,
|
|
autoclose: true,
|
|
pickerPosition: 'bottom-left',
|
|
bootcssVer: 3,
|
|
clearBtn: true
|
|
});
|
|
|
|
// timepicker
|
|
$('.tp').timepicker({
|
|
format: "HH:ii P",
|
|
minuteStep: 1,
|
|
showMeridian: true,
|
|
snapToStep: true,
|
|
bootcssVer: 3,
|
|
clearBtn: true,
|
|
todayHighlight: true,
|
|
autoclose: true,
|
|
pickerPosition: 'bottom-left'
|
|
});
|
|
|
|
// toggle advance order fields
|
|
$("#flag-advance").change(function() {
|
|
var dp = $("[name='date_schedule_date']");
|
|
var tp = $("[name='date_schedule_time']");
|
|
var checked = $(this).prop('checked');
|
|
|
|
if (checked) {
|
|
dp.prop('disabled', false);
|
|
tp.prop('disabled', false);
|
|
} else {
|
|
// reset to default values if disabled
|
|
var dateObj = moment(dp.data('default-value'), "YYYY-MM-DD");
|
|
dp.prop('disabled', true).parent().datepicker('setDate', dateObj.toDate());
|
|
tp.prop('disabled', true).timepicker('setTime', tp.data('default-value'));
|
|
}
|
|
}).change();
|
|
|
|
// update battery list when changing manufacturer
|
|
$("#invoice-bmfg").change(function() {
|
|
{% if ftags.preset_vehicle %}
|
|
vdata = {
|
|
'vehicle': {
|
|
'id': {{ vid }}
|
|
}
|
|
};
|
|
{% endif %}
|
|
// must have a selected vehicle
|
|
if (!vdata)
|
|
return;
|
|
|
|
var id = $(this).val();
|
|
var field = $("#invoice-battery");
|
|
|
|
// no id specified
|
|
if (!id) {
|
|
field.html('<option value="">Select a vehicle and manufacturer first</option>').prop('disabled', true);
|
|
return true;
|
|
}
|
|
|
|
// get vehicles for this manufacturer
|
|
$.ajax({
|
|
method: "POST",
|
|
url: "{{ url('vehicle_batteries') }}",
|
|
data: {
|
|
id: id,
|
|
vehicle_id: vdata.vehicle.id
|
|
}
|
|
}).done(function(response) {
|
|
if (response.data.length > 0) {
|
|
var html = '';
|
|
|
|
// TODO: Battery unit price is static for now
|
|
var unitPrice = 1000;
|
|
|
|
$.each(response.data, function(index, battery) {
|
|
html += '<option value="' + battery.id + '" data-index="' + index + '" data-warr-private="' + battery.warr_private + '" data-warr-commercial="' + battery.warr_commercial + '">' + battery.model_name + ' ' + battery.size_name + '</option>';
|
|
});
|
|
|
|
field.html(html).prop('disabled', false);
|
|
} else {
|
|
field.html('<option value="">No batteries found</option>').prop('disabled', true);
|
|
}
|
|
});
|
|
});
|
|
|
|
// populate battery dropdown for create from vehicle mode
|
|
{% if ftags.preset_vehicle %}
|
|
$("#invoice-bmfg").change();
|
|
{% endif %}
|
|
|
|
// mask quantity field
|
|
$("#invoice-quantity").inputmask("mask", {
|
|
mask: "9999999",
|
|
placeholder: ""
|
|
});
|
|
|
|
{% include 'invoice/trade_in.js.twig' %}
|
|
|
|
// add to invoice
|
|
$("#btn-add-to-invoice").click(function() {
|
|
var bmfg = $("#invoice-bmfg").val();
|
|
var battery = $("#invoice-battery").val();
|
|
// var tradeIn = $("#invoice-trade-in-type").val();
|
|
var qty = $("#invoice-quantity").val();
|
|
|
|
if (!bmfg || !battery || !qty) {
|
|
swal({
|
|
title: 'Whoops!',
|
|
text: 'Please fill in all the invoice fields.',
|
|
type: 'warning'
|
|
});
|
|
|
|
return false;
|
|
}
|
|
|
|
if (isNaN(qty)) {
|
|
swal({
|
|
title: 'Whoops!',
|
|
text: 'Invalid quantity specified.',
|
|
type: 'warning'
|
|
});
|
|
|
|
return false;
|
|
}
|
|
|
|
// add to invoice array
|
|
// TODO: need to figure out how to push battery and tradein separately
|
|
// right now, battery and trade in is one entry. Need to separate that into two entries
|
|
invoiceItems.push({
|
|
battery: battery,
|
|
quantity: qty,
|
|
trade_in: '',
|
|
});
|
|
|
|
// regenerate the invoice
|
|
generateInvoice();
|
|
});
|
|
|
|
// update invoice when promo is changed
|
|
$("#invoice-promo").change(function() {
|
|
generateInvoice();
|
|
});
|
|
|
|
// trigger update when service type is changed
|
|
$("#service_type").change(function() {
|
|
generateInvoice();
|
|
});
|
|
|
|
// reset the invoice table
|
|
$("#btn-reset-invoice").click(function() {
|
|
$("#invoice-promo").prop('selectedIndex', 0);
|
|
invoiceItems = [];
|
|
generateInvoice();
|
|
});
|
|
|
|
// recompute
|
|
$("#btn-recompute-invoice").click(function() {
|
|
generateInvoice();
|
|
});
|
|
|
|
function generateInvoice() {
|
|
var promo = $("#invoice-promo").val();
|
|
var table = $("#invoice-table tbody");
|
|
var stype = $("#service_type").val();
|
|
var cvid = $("#customer-vehicle").val();
|
|
var lng = $("#map_lng").val();
|
|
var lat = $("#map_lat").val();
|
|
|
|
console.log(JSON.stringify(invoiceItems));
|
|
|
|
// generate invoice values
|
|
$.ajax({
|
|
method: "POST",
|
|
url: "{{ url('jo_gen_invoice') }}",
|
|
data: {
|
|
'stype': stype,
|
|
'items': invoiceItems,
|
|
'promo': promo,
|
|
'cvid': cvid,
|
|
'coord_lng': lng,
|
|
'coord_lat': lat,
|
|
'flag_coolant': hasCoolant,
|
|
'flag_sealant': hasSealant,
|
|
}
|
|
}).done(function(response) {
|
|
// mark as invoice changed
|
|
$("#invoice-change").val(1);
|
|
var invoice = response.invoice;
|
|
|
|
// populate totals
|
|
$("#invoice-promo-discount").val(invoice.discount);
|
|
$("#invoice-price").val(invoice.price);
|
|
$("#invoice-trade-in").val(invoice.trade_in);
|
|
$("#invoice-vat").val(invoice.vat);
|
|
$("#invoice-total-amount").val(invoice.total_price);
|
|
|
|
// populate rows
|
|
var html = '';
|
|
|
|
if (invoice.items.length > 0) {
|
|
$.each(invoice.items, function(key, item) {
|
|
html += '<tr data-key="' + key + '">' +
|
|
'<td>' + item.title + '</td>' +
|
|
'<td class="text-right">' + item.quantity + '</td>' +
|
|
'<td class="text-right">' + item.unit_price + '</td>' +
|
|
'<td class="text-right">' + item.amount + '</td>' +
|
|
/*
|
|
'<td><button type="button" class="m-portlet__nav-link btn m-btn m-btn--hover-danger m-btn--icon m-btn--icon-only m-btn--pill btn-invoice-delete" title="Delete"><i class="la la-trash"></i></button></td>' +
|
|
*/
|
|
'</tr>';
|
|
});
|
|
} else {
|
|
html = '<tr class="placeholder-row">' +
|
|
'<td colspan="4">' +
|
|
'No items to display.' +
|
|
'</td>' +
|
|
'</tr>';
|
|
}
|
|
|
|
table.html(html);
|
|
});
|
|
}
|
|
|
|
// remove from invoice table
|
|
// TODO: figure out a way to delete rows, and should deleting trade ins be allowed since they count as items on the table?
|
|
/*
|
|
$(document).on("click", ".btn-invoice-delete", function() {
|
|
var tbody = $("#invoice-table tbody");
|
|
var row = $(this).closest('tr');
|
|
var qty = row.find('.col-quantity').html();
|
|
var unitPrice = row.find('.col-unit-price').html();
|
|
|
|
// recreate the local invoice items object
|
|
var newItems = [];
|
|
|
|
// subtract from totals
|
|
var subtotal = parseFloat(unitPrice) * parseInt(qty);
|
|
invoiceTotal -= subtotal;
|
|
updateInvoiceFigures();
|
|
|
|
// remove from table
|
|
row.remove();
|
|
|
|
// get total item rows and show placeholder if needed
|
|
var visibleRows = tbody.find('tr:not(.placeholder-row)').length;
|
|
|
|
if (visibleRows === 0) {
|
|
tbody.find('.placeholder-row').removeClass('hide');
|
|
}
|
|
});
|
|
*/
|
|
|
|
{% if mode in ['update-processing', 'update-reassign-hub'] %}
|
|
var selectedHub = '{{ obj.getHub ? obj.getHub.getID : "" }}';
|
|
var selectedHubInvCount = 0;
|
|
|
|
$("#hubs-table tbody tr").click(function() {
|
|
var id = $(this).data('id');
|
|
var lat = $(this).data('lat');
|
|
var lng = $(this).data('lng');
|
|
var inv_count = $(this).data('invcount');
|
|
|
|
if (id != selectedHub) {
|
|
// highlight this row, set hub value
|
|
$("#hubs-table").find('.m-table__row--primary').removeClass('m-table__row--primary');
|
|
|
|
$(this).addClass('m-table__row--primary');
|
|
|
|
// set value
|
|
selectedHub = id;
|
|
|
|
// set value for inventory count
|
|
selectedHubInvCount = inv_count;
|
|
|
|
// center the map
|
|
osm_hmap.flyTo(L.latLng(lat, lng));
|
|
} else {
|
|
// unhighlight this row
|
|
$(this).removeClass('m-table__row--primary');
|
|
|
|
// remove id value
|
|
selectedHub = '';
|
|
|
|
// reset inventory count
|
|
selectedHubInvCount = 0;
|
|
}
|
|
});
|
|
{% endif %}
|
|
|
|
{% if mode in ['update-assigning', 'update-reassign-rider'] %}
|
|
var selectedRider = '{{ obj.getRider ? obj.getRider.getID : "" }}';
|
|
|
|
$("#riders-table tbody tr").click(function() {
|
|
var id = $(this).data('id');
|
|
|
|
if (id != selectedRider) {
|
|
// highlight this row, set hub value
|
|
$("#riders-table").find('.m-table__row--primary').removeClass('m-table__row--primary');
|
|
|
|
$(this).addClass('m-table__row--primary');
|
|
|
|
// set value
|
|
selectedRider = id;
|
|
} else {
|
|
// unhighlight this row
|
|
$(this).removeClass('m-table__row--primary');
|
|
|
|
// remove id value
|
|
selectedRider = '';
|
|
}
|
|
});
|
|
{% endif %}
|
|
|
|
{% if ftags.ticket_table %}
|
|
var ticketRows = [];
|
|
|
|
{% for ticket in obj.getTickets %}
|
|
trow = {
|
|
id: "{{ ticket.getID }}",
|
|
date_create: "{{ ticket.getDateCreate|date('d M Y - h:i A') }}",
|
|
ticket_type: "{{ ticket.getTicketTypeText }}",
|
|
status: "{{ ticket.getStatusText }}",
|
|
edit_url: "{{ url('ticket_update', {'id': ticket.getID}) }}"
|
|
};
|
|
|
|
ticketRows.push(trow);
|
|
{% endfor %}
|
|
|
|
// tickets data table
|
|
var ticketOptions = {
|
|
data: {
|
|
type: 'local',
|
|
source: ticketRows,
|
|
saveState: {
|
|
cookie: false,
|
|
webstorage: false
|
|
}
|
|
},
|
|
layout: {
|
|
scroll: true
|
|
},
|
|
columns: [
|
|
{
|
|
field: 'id',
|
|
title: 'ID',
|
|
width: 30
|
|
},
|
|
{
|
|
field: 'date_create',
|
|
title: 'Date Created',
|
|
width: 200
|
|
},
|
|
{
|
|
field: 'ticket_type',
|
|
title: 'Ticket Type'
|
|
},
|
|
{
|
|
field: 'status',
|
|
title: 'Status'
|
|
},
|
|
{
|
|
field: 'Actions',
|
|
width: 70,
|
|
title: 'Actions',
|
|
sortable: false,
|
|
overflow: 'visible',
|
|
template: function (row, index, datatable) {
|
|
return '<a href="' + row.edit_url + '" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill btn-edit-ticket" title="Edit"><i class="la la-edit"></i></a>';
|
|
},
|
|
}
|
|
],
|
|
pagination: false
|
|
};
|
|
|
|
var ticketTable = $("#data-tickets").mDatatable(ticketOptions);
|
|
{% endif %}
|
|
|
|
{% if mode in ['update-processing', 'update-reassign-hub'] %}
|
|
// reject hub
|
|
$(".btn-reject").click(function(e) {
|
|
var hubID = $(this).data('hub-id');
|
|
var hubName = $(this).data('hub-name');
|
|
var hubBranch = $(this).data('hub-branch');
|
|
|
|
$("#hub-reject-id").val(hubID);
|
|
$("#hub-reject-name").val(hubName);
|
|
$("#hub-reject-branch").val(hubBranch);
|
|
$("#modal-rejection").modal('show');
|
|
|
|
return false;
|
|
});
|
|
|
|
// focus on reason field
|
|
$("#modal-rejection").on('shown.bs.modal', function() {
|
|
$("#hub-reject-reason").focus();
|
|
});
|
|
|
|
// reset reject form on close modal
|
|
$("#modal-rejection").on('hidden.bs.modal', function() {
|
|
$("#hub-reject-contact-person, #hub-reject-remarks").val("");
|
|
$("#hub-reject-reason").prop('selectedIndex', 0);
|
|
});
|
|
|
|
// submit hub rejection
|
|
$("#hub-reject-form").submit(function(e) {
|
|
var form = $(this);
|
|
var btnSubmit = form.find('[type="submit"]');
|
|
|
|
// disable the button
|
|
btnSubmit.prop('disabled', true).html('<i class="fas fa-spinner fa-spin fa-fw"></i> Please wait');
|
|
|
|
e.preventDefault();
|
|
|
|
$.ajax({
|
|
method: "POST",
|
|
url: form.prop('action'),
|
|
data: form.serialize()
|
|
}).done(function(response) {
|
|
// set button state
|
|
var btnReject = $("#hubs-table").find("tr[data-id='" + $("#hub-reject-id").val() + "']").find('.btn-reject');
|
|
btnReject.removeClass('btn-reject btn-info').addClass('btn-danger btn-disabled').prop('disabled', true).html('Rejected');
|
|
|
|
// remove all error classes
|
|
removeErrors("#hub-reject-form");
|
|
btnSubmit.prop('disabled', false).html('Reject');
|
|
|
|
// hide modal
|
|
$("#modal-rejection").modal('hide');
|
|
}).fail(function(response) {
|
|
if (response.status == 422) {
|
|
form_in_process = false;
|
|
var errors = response.responseJSON.errors;
|
|
var firstfield = false;
|
|
|
|
// remove all error classes first
|
|
removeErrors("#hub-reject-form");
|
|
btnSubmit.prop('disabled', false).html('Reject');
|
|
|
|
// display errors contextually
|
|
$.each(errors, function(field, msg) {
|
|
var formfield = form.find("[name='" + field + "'], [data-name='" + field + "']");
|
|
var label = form.find("label[data-field='" + field + "']");
|
|
var msgbox = form.find(".form-control-feedback[data-field='" + field + "']");
|
|
|
|
// add error classes to bad fields
|
|
formfield.addClass('form-control-danger');
|
|
label.addClass('has-danger');
|
|
msgbox.html(msg).addClass('has-danger').removeClass('hide');
|
|
|
|
// check if this field comes first in DOM
|
|
var domfield = formfield.get(0);
|
|
|
|
if (!firstfield || (firstfield && firstfield.compareDocumentPosition(domfield) === 2)) {
|
|
firstfield = domfield;
|
|
}
|
|
});
|
|
|
|
// focus on first bad field
|
|
firstfield.focus();
|
|
}
|
|
});
|
|
});
|
|
{% endif %}
|
|
|
|
// cancel job order
|
|
$(".btn-cancel-job-order").click(function(e) {
|
|
var url = $(this).prop('href');
|
|
|
|
e.preventDefault();
|
|
|
|
var inputOptionsPromise = new Promise(function(resolve) {
|
|
// get your data and pass it to resolve()
|
|
$.getJSON("{{ url('jo_cancel_reasons') }}", function(data) {
|
|
resolve(data.cancel_reasons)
|
|
});
|
|
});
|
|
|
|
swal({
|
|
title: 'Cancel Job Order',
|
|
html: 'Please select the reason for cancellation of this job order:',
|
|
input: 'select',
|
|
inputOptions: inputOptionsPromise,
|
|
type: 'warning',
|
|
showCancelButton: true,
|
|
closeOnCancel: true,
|
|
width: '40rem',
|
|
inputValidator: (value) => {
|
|
return new Promise((resolve) => {
|
|
resolve()
|
|
})
|
|
}
|
|
}).then((result) => {
|
|
if (result.value) {
|
|
$.ajax({
|
|
method: "DELETE",
|
|
url: url,
|
|
data: {
|
|
'cancel_reason': result.value
|
|
}
|
|
}).done(function(response) {
|
|
swal({
|
|
title: 'Done!',
|
|
text: response.success,
|
|
type: 'success',
|
|
onClose: function() {
|
|
window.location.href = "{{ return_url }}";
|
|
}
|
|
});
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
// fulfill cancelled job order
|
|
$(".btn-fulfill-cancel-job-order").click(function(e) {
|
|
var url = $(this).prop('href');
|
|
|
|
e.preventDefault();
|
|
|
|
$.ajax({
|
|
method: "POST",
|
|
url: url,
|
|
}).done(function(response) {
|
|
swal({
|
|
title: 'Done!',
|
|
text: response.success,
|
|
type: 'success',
|
|
onClose: function() {
|
|
window.location.href = "{{ return_url }}";
|
|
}
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
$("#flag-willing-to-wait").change(function() {
|
|
var field_value = $(this).val();
|
|
var field = $("#flag-willing-to-wait");
|
|
console.log(field_value);
|
|
|
|
if (field_value == 'not_willing_to_wait') {
|
|
$("#no-wait-reason").attr("disabled", false);
|
|
$("#not-wait-notes").attr("disabled", false);
|
|
} else {
|
|
$("#no-wait-reason").attr("disabled", true);
|
|
$("#not-wait-notes").attr("disabled", true);
|
|
|
|
// remove selected from option that might have already been selected
|
|
$("#no-wait-reason option:selected").prop("selected", false);
|
|
|
|
// set first option
|
|
$("#no-wait-reason option:first").prop("selected", "selected");
|
|
|
|
// empty the reason text field
|
|
$("#not-wait-notes").val('');
|
|
|
|
// remove selected option that might have already been selected
|
|
$("#emergency-type option:selected").prop("selected", false);
|
|
}
|
|
});
|
|
|
|
$("#no-wait-reason").change(function() {
|
|
var field_value = $(this).val();
|
|
console.log(field_value);
|
|
if (field_value == 'emergency') {
|
|
$("#emergency-type").attr("disabled", false);
|
|
} else {
|
|
$("#emergency-type").attr("disabled", true);
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
<script>
|
|
// battery warranty edit
|
|
$('#battery_edit_submit').click(function(e) {
|
|
e.preventDefault();
|
|
|
|
var url = $('#battery_edit_form').attr('action');
|
|
var data = $('#battery_edit_form').serialize();
|
|
$.post(url, data, function(data) {
|
|
$('#warranty-code').val(data.data.warranty_code);
|
|
$('#battery_edit').modal('hide');
|
|
}, 'json');
|
|
|
|
});
|
|
</script>
|
|
{% endblock %}
|
|
|