Merge branch '270-final-cmb-fixes' of gitlab.com:jankstudio/resq into 311-cmb-refactor-rapicontroller-into-a-service

This commit is contained in:
Korina Cordero 2020-02-05 08:25:18 +00:00
commit 36657cbdf0
9 changed files with 672 additions and 339 deletions

View file

@ -19,6 +19,7 @@ doctrine:
point: CrEOF\Spatial\DBAL\Types\Geometry\PointType point: CrEOF\Spatial\DBAL\Types\Geometry\PointType
polygon: CrEOF\Spatial\DBAL\Types\Geometry\PolygonType polygon: CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
linestring: CrEOF\Spatial\DBAL\Types\Geometry\LineStringType linestring: CrEOF\Spatial\DBAL\Types\Geometry\LineStringType
multipolygon: CrEOF\Spatial\DBAL\Types\Geometry\MultiPolygonType
orm: orm:
auto_generate_proxy_classes: '%kernel.debug%' auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore naming_strategy: doctrine.orm.naming_strategy.underscore

View file

@ -10,6 +10,8 @@ use App\Entity\CustomerVehicle;
use App\Entity\Promo; use App\Entity\Promo;
use App\Entity\Battery; use App\Entity\Battery;
use App\Entity\JobOrder; use App\Entity\JobOrder;
use App\Entity\VehicleManufacturer;
use App\Entity\Vehicle;
use App\Service\InvoiceGeneratorInterface; use App\Service\InvoiceGeneratorInterface;
use App\Service\JobOrderHandlerInterface; use App\Service\JobOrderHandlerInterface;
@ -196,6 +198,7 @@ class JobOrderController extends Controller
$template = $jo_handler->getTwigTemplate('jo_list_fulfillment'); $template = $jo_handler->getTwigTemplate('jo_list_fulfillment');
$params = $jo_handler->getOtherParameters();
$params['table_refresh_rate'] = $this->container->getParameter('job_order_refresh_interval'); $params['table_refresh_rate'] = $this->container->getParameter('job_order_refresh_interval');
return $this->render($template, $params); return $this->render($template, $params);
@ -210,6 +213,7 @@ class JobOrderController extends Controller
$template = $jo_handler->getTwigTemplate('jo_list_open'); $template = $jo_handler->getTwigTemplate('jo_list_open');
$params = $jo_handler->getOtherParameters();
$params['table_refresh_rate'] = $this->container->getParameter('job_order_refresh_interval'); $params['table_refresh_rate'] = $this->container->getParameter('job_order_refresh_interval');
$params['statuses'] = JOStatus::getCollection(); $params['statuses'] = JOStatus::getCollection();
@ -225,6 +229,7 @@ class JobOrderController extends Controller
$template = $jo_handler->getTwigTemplate('jo_list_all'); $template = $jo_handler->getTwigTemplate('jo_list_all');
$params = $jo_handler->getOtherParameters();
$params['table_refresh_rate'] = $this->container->getParameter('job_order_refresh_interval'); $params['table_refresh_rate'] = $this->container->getParameter('job_order_refresh_interval');
return $this->render($template, $params); return $this->render($template, $params);
@ -691,8 +696,10 @@ class JobOrderController extends Controller
// get customer vehicle // get customer vehicle
$cv = $em->getRepository(CustomerVehicle::class)->find($cvid); $cv = $em->getRepository(CustomerVehicle::class)->find($cvid);
/*
if ($cv == null) if ($cv == null)
throw new \Exception('Could not get customer vehicle'); throw new \Exception('Could not get customer vehicle');
*/
// instantiate invoice criteria // instantiate invoice criteria
@ -833,7 +840,7 @@ class JobOrderController extends Controller
/** /**
* @Menu(selected="jo_onestep_form") * @Menu(selected="jo_onestep_form")
*/ */
public function oneStepForm(JobOrderHandlerInterface $jo_handler, GISManagerInterface $gis) public function oneStepForm(EntityManagerInterface $em, JobOrderHandlerInterface $jo_handler, GISManagerInterface $gis)
{ {
$this->denyAccessUnlessGranted('jo_onestep.form', null, 'No access.'); $this->denyAccessUnlessGranted('jo_onestep.form', null, 'No access.');
@ -841,6 +848,8 @@ class JobOrderController extends Controller
$params['submit_url'] = $this->generateUrl('jo_onestep_submit'); $params['submit_url'] = $this->generateUrl('jo_onestep_submit');
$params['return_url'] = $this->generateUrl('jo_onestep_form'); $params['return_url'] = $this->generateUrl('jo_onestep_form');
$params['map_js_file'] = $gis->getJSJOFile(); $params['map_js_file'] = $gis->getJSJOFile();
$params['vmfgs'] = $em->getRepository(VehicleManufacturer::class)->findAll();
$params['vmakes'] = $em->getRepository(Vehicle::class)->findAll();
$template = $params['template']; $template = $params['template'];
@ -877,7 +886,7 @@ class JobOrderController extends Controller
/** /**
* @Menu(selected="jo_onestep_edit_form") * @Menu(selected="jo_onestep_edit_form")
*/ */
public function oneStepEditForm($id, JobOrderHandlerInterface $jo_handler, public function oneStepEditForm($id, EntityManagerInterface $em, JobOrderHandlerInterface $jo_handler,
GISManagerInterface $gis, MapTools $map_tools) GISManagerInterface $gis, MapTools $map_tools)
{ {
$this->denyAccessUnlessGranted('jo_onestep.edit', null, 'No access.'); $this->denyAccessUnlessGranted('jo_onestep.edit', null, 'No access.');
@ -886,6 +895,8 @@ class JobOrderController extends Controller
$params['submit_url'] = $this->generateUrl('jo_onestep_edit_submit', ['id' => $id]); $params['submit_url'] = $this->generateUrl('jo_onestep_edit_submit', ['id' => $id]);
$params['return_url'] = $this->generateUrl('jo_open'); $params['return_url'] = $this->generateUrl('jo_open');
$params['map_js_file'] = $gis->getJSJOFile(); $params['map_js_file'] = $gis->getJSJOFile();
$params['vmfgs'] = $em->getRepository(VehicleManufacturer::class)->findAll();
$params['vmakes'] = $em->getRepository(Vehicle::class)->findAll();
$template = $params['template']; $template = $params['template'];

View file

@ -104,7 +104,7 @@ class InvoiceCriteria
return $this->entries; return $this->entries;
} }
public function setCustomerVehicle(CustomerVehicle $cv) public function setCustomerVehicle(CustomerVehicle $cv = null)
{ {
$this->cv = $cv; $this->cv = $cv;
return $this; return $this;

View file

@ -519,6 +519,7 @@ class CMBCustomerHandler implements CustomerHandlerInterface
], ],
'vehicle' => [ 'vehicle' => [
'id' => $vehicle->getID(), 'id' => $vehicle->getID(),
'mfg_id' => $vehicle->getManufacturer()->getID(),
'mfg_name' => $vehicle->getManufacturer()->getName(), 'mfg_name' => $vehicle->getManufacturer()->getName(),
'make' => $vehicle->getMake(), 'make' => $vehicle->getMake(),
'model_year_from' => $vehicle->getModelYearFrom(), 'model_year_from' => $vehicle->getModelYearFrom(),

View file

@ -2197,6 +2197,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
return null; return null;
} }
<<<<<<< HEAD
public function updateVehicleBattery(JobOrder $jo) public function updateVehicleBattery(JobOrder $jo)
{ {
// check if new battery // check if new battery
@ -2248,6 +2249,14 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
->setWarrantyExpiration($warr_date); ->setWarrantyExpiration($warr_date);
} }
public function getOtherParameters()
{
// get riders for dropdown
$params['riders'] = $this->em->getRepository(Rider::class)->findAll();
return $params;
}
protected function fillDropdownParameters(&$params) protected function fillDropdownParameters(&$params)
{ {
$em = $this->em; $em = $this->em;
@ -2434,7 +2443,36 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
switch ($tier) switch ($tier)
{ {
case 'fulfill': case 'fulfill':
$query->where('q.status IN (:statuses)') if (isset($datatable['query']['data-rows-search']))
{
$query->innerJoin('q.cus_vehicle', 'cv')
->innerJoin('q.customer', 'c')
->where('cv.plate_number like :filter')
->orWhere('c.phone_mobile like :filter')
->orWhere('c.first_name like :filter or c.last_name like :filter')
->setParameter('filter', $datatable['query']['data-rows-search'] . '%');
}
if (isset($datatable['query']['rider']))
{
$query->innerJoin('q.rider', 'r')
->andWhere('r.id = :rider_id')
->setParameter('rider_id', $datatable['query']['rider']);
}
if (isset($datatable['query']['schedule_date']))
{
$start = $datatable['query']['schedule_date'][0] . ' ' . '00:00:00';
$end = $datatable['query']['schedule_date'][1] . ' ' . '23:59:00';
$date_start = DateTime::createFromFormat('m/d/Y H:i:s', $start);
$date_end = DateTime::createFromFormat('m/d/Y H:i:s', $end);
$query->andWhere('q.date_schedule >= :date_start')
->andWhere('q.date_schedule <= :date_end')
->setParameter('date_start', $date_start)
->setParameter('date_end', $date_end);
}
$query->andWhere('q.status IN (:statuses)')
->andWhere('q.hub IN (:hubs)') ->andWhere('q.hub IN (:hubs)')
->setParameter('statuses', $status, Connection::PARAM_STR_ARRAY) ->setParameter('statuses', $status, Connection::PARAM_STR_ARRAY)
->setParameter('hubs', $hubs, Connection::PARAM_STR_ARRAY); ->setParameter('hubs', $hubs, Connection::PARAM_STR_ARRAY);
@ -2460,6 +2498,25 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
$query->where('q.status IN (:statuses)') $query->where('q.status IN (:statuses)')
->setParameter('statuses', $status, Connection::PARAM_STR_ARRAY); ->setParameter('statuses', $status, Connection::PARAM_STR_ARRAY);
} }
if (isset($datatable['query']['rider']))
{
$query->innerJoin('q.rider', 'r')
->andWhere('r.id = :rider_id')
->setParameter('rider_id', $datatable['query']['rider']);
}
if (isset($datatable['query']['schedule_date']))
{
$start = $datatable['query']['schedule_date'][0] . ' ' . '00:00:00';
$end = $datatable['query']['schedule_date'][1] . ' ' . '23:59:00';
$date_start = DateTime::createFromFormat('m/d/Y H:i:s', $start);
$date_end = DateTime::createFromFormat('m/d/Y H:i:s', $end);
$query->andWhere('q.date_schedule >= :date_start')
->andWhere('q.date_schedule <= :date_end')
->setParameter('date_start', $date_start)
->setParameter('date_end', $date_end);
}
break; break;
case 'all': case 'all':
if (isset($datatable['query']['data-rows-search'])) if (isset($datatable['query']['data-rows-search']))
@ -2471,6 +2528,25 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
->orWhere('c.first_name like :filter or c.last_name like :filter') ->orWhere('c.first_name like :filter or c.last_name like :filter')
->setParameter('filter', $datatable['query']['data-rows-search'] . '%'); ->setParameter('filter', $datatable['query']['data-rows-search'] . '%');
} }
if (isset($datatable['query']['rider']))
{
$query->innerJoin('q.rider', 'r')
->andWhere('r.id = :rider_id')
->setParameter('rider_id', $datatable['query']['rider']);
}
if (isset($datatable['query']['schedule_date']))
{
$start = $datatable['query']['schedule_date'][0] . ' ' . '00:00:00';
$end = $datatable['query']['schedule_date'][1] . ' ' . '23:59:00';
$date_start = DateTime::createFromFormat('m/d/Y H:i:s', $start);
$date_end = DateTime::createFromFormat('m/d/Y H:i:s', $end);
$query->andWhere('q.date_schedule >= :date_start')
->andWhere('q.date_schedule <= :date_end')
->setParameter('date_start', $date_start)
->setParameter('date_end', $date_end);
}
break; break;
default: default:
$query->where('q.status = :status') $query->where('q.status = :status')

View file

@ -30,6 +30,7 @@
</div> </div>
</div> </div>
<form id="row-form" class="m-form m-form--fit m-form--label-align-right" method="post" action="{{ submit_url }}"> <form id="row-form" class="m-form m-form--fit m-form--label-align-right" method="post" action="{{ submit_url }}">
<input type="hidden" id="vid" name="vid" value="0">
<input type="hidden" id="invoice-change" name="invoice_change" value="0"> <input type="hidden" id="invoice-change" name="invoice_change" value="0">
<div class="m-portlet__body"> <div class="m-portlet__body">
{%if ftags.vehicle_dropdown %} {%if ftags.vehicle_dropdown %}
@ -42,12 +43,14 @@
<select class="form-control m-select2" id="customer-vehicle" name="customer_vehicle"></select> <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 class="form-control-feedback hide" data-field="customer_vehicle"></div>
</div> </div>
<!--
<div class="col-lg-6"> <div class="col-lg-6">
<label></label> <label></label>
<div style="display:block; margin-top: 5px"> <div style="display:block; margin-top: 5px">
<a href="{{ url('customer_create', {'ref':'jo'}) }}" class="btn btn-success">Create New Customer / Vehicle</a> <a href="{{ url('customer_create', {'ref':'jo'}) }}" class="btn btn-success">Create New Customer / Vehicle</a>
</div> </div>
</div> </div>
-->
</div> </div>
</div> </div>
<div class="m-form__section"> <div class="m-form__section">
@ -75,20 +78,27 @@
{% endif %} {% endif %}
<div class="m-form__section{{ mode != 'create' and not obj.getReferenceJO ? ' m-form__section--first' }}"> <div class="m-form__section{{ mode != 'create' and not obj.getReferenceJO ? ' m-form__section--first' }}">
<div class="m-form__heading"> <div class="m-form__heading flex-row">
<h3 class="m-form__heading-title"> <h3 class="m-form__heading-title">
Customer Details Customer Details
</h3> </h3>
<span class="m-switch m-switch--icon block-switch">
<label>
<input type="checkbox" name="new_customer" id="flag-new-customer" value="1"{{ obj.isAdvanceOrder ? ' checked' }}>
<label class="switch-label">New Customer</label>
<span></span>
</label>
</span>
</div> </div>
<div class="form-group m-form__group row"> <div class="form-group m-form__group row">
<div class="col-lg-6"> <div class="col-lg-6">
<label data-field="customer_first_name">First Name</label> <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> <input type="text" name="customer_first_name" id="customer-first-name" class="form-control m-input cust_field" value="{{ obj.getCustomer.getFirstName|default('') }}" data-vehicle-field="1" disabled>
<div class="form-control-feedback hide" data-field="customer_first_name"></div> <div class="form-control-feedback hide" data-field="customer_first_name"></div>
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
<label data-field="customer_last_name">Last Name</label> <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> <input type="text" name="customer_last_name" id="customer-last-name" class="form-control m-input cust_field" value="{{ obj.getCustomer.getLastName|default('') }}" data-vehicle-field="1" disabled>
<div class="form-control-feedback hide" data-field="customer_last_name"></div> <div class="form-control-feedback hide" data-field="customer_last_name"></div>
</div> </div>
</div> </div>
@ -97,7 +107,7 @@
<label data-field="customer_phone_mobile">Mobile Phone</label> <label data-field="customer_phone_mobile">Mobile Phone</label>
<div class="input-group m-input-group"> <div class="input-group m-input-group">
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span> <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> <input type="text" name="customer_phone_mobile" id="customer-phone-mobile" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneMobile|default('') }}" data-vehicle-field="1" disabled>
<div class="form-control-feedback hide" data-field="customer_phone_mobile"></div> <div class="form-control-feedback hide" data-field="customer_phone_mobile"></div>
</div> </div>
</div> </div>
@ -105,7 +115,7 @@
<label data-field="customer_phone_landline">Landline</label> <label data-field="customer_phone_landline">Landline</label>
<div class="input-group m-input-group"> <div class="input-group m-input-group">
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span> <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> <input type="text" name="customer_phone_landline" id="customer-phone-landline" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneLandline|default('') }}" data-vehicle-field="1" disabled>
<div class="form-control-feedback hide" data-field="customer_phone_landline"></div> <div class="form-control-feedback hide" data-field="customer_phone_landline"></div>
</div> </div>
</div> </div>
@ -115,7 +125,7 @@
<label data-field="customer_phone_office">Office Phone</label> <label data-field="customer_phone_office">Office Phone</label>
<div class="input-group m-input-group"> <div class="input-group m-input-group">
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span> <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> <input type="text" name="customer_phone_office" id="customer-phone-office" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneOffice|default('') }}" data-vehicle-field="1" disabled>
<div class="form-control-feedback hide" data-field="customer_phone_office"></div> <div class="form-control-feedback hide" data-field="customer_phone_office"></div>
</div> </div>
</div> </div>
@ -123,7 +133,7 @@
<label data-field="customer_phone_fax">Fax</label> <label data-field="customer_phone_fax">Fax</label>
<div class="input-group m-input-group"> <div class="input-group m-input-group">
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span> <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> <input type="text" name="customer_phone_fax" id="customer-phone-fax" class="form-control m-input cust_field" value="{{ obj.getCustomer.getPhoneFax|default('') }}" data-vehicle-field="1" disabled>
<div class="form-control-feedback hide" data-field="customer_phone_fax"></div> <div class="form-control-feedback hide" data-field="customer_phone_fax"></div>
</div> </div>
</div> </div>
@ -131,7 +141,7 @@
<div class="form-group m-form__group row"> <div class="form-group m-form__group row">
<div class="col-lg-6"> <div class="col-lg-6">
<label data-field="customer_customer_notes">Customer Notes</label> <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> <textarea name="customer_customer_notes" id="customer-customer-notes" class="form-control m-input cust_field" 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 class="form-control-feedback hide" data-field="customer_customer_notes"></div>
</div> </div>
</div> </div>
@ -144,32 +154,47 @@
</div> </div>
<div class="form-group m-form__group row"> <div class="form-group m-form__group row">
<div class="col-lg-3"> <div class="col-lg-3">
<label data-field="vmfg">Manufacturer</label> <label data-field="cv_mfg">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> <select name="cv_mfg" class="form-control m-input cv_field" id="cv-mfg" data-required="0" disabled>
<div class="form-control-feedback hide" data-field="vmfg"></div> <option value="">Select a manufacturer</option>
{% for manufacturer in vmfgs %}
{% set vmfg_id = obj.getCustomerVehicle ? obj.getCustomerVehicle.getVehicle.getManufacturer.getID : 0 %}
<option value="{{ manufacturer.getID() }}" {% if vmfg_id == manufacturer.getID %}selected{% endif %}>{{ manufacturer.getName() }}</option>
{% endfor %}
</select>
<div class="form-control-feedback hide" data-field="cv-mfg"></div>
</div>
<div class="col-lg-6">
<label data-field="cv-make">Make</label>
<select name="cv_make" class="form-control m-input" id="cv-make" data-required="0" disabled>
<option value="">Select a make</option>
{% for make in vmakes %}
{% set vmake_id = obj.getCustomerVehicle ? obj.getCustomerVehicle.getVehicle.getID : 0 %}
<option value="{{ make.getID() }}" {% if vmake_id == make.getID %}selected{% endif %}>{{ make.getMake() }}</option>
{% endfor %}
</select>
<div class="form-control-feedback hide" data-field="cv_make"></div>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<label data-field="vehicle_make">Make</label> <label data-field="cv_year">Model Year</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> <input type="text" name="cv_year" id="cv-year" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getModelYear }}" data-vehicle-field="1" disabled>
<div class="form-control-feedback hide" data-field="vehicle_make"></div> <div class="form-control-feedback hide" data-field="cv_year"></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> </div>
<div class="form-group m-form__group row"> <div class="form-group m-form__group row">
<div class="col-lg-3"> <div class="col-lg-3">
<label data-field="vehicle_plate">Plate #</label> <label data-field="cv_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> <input type="text" name="cv_plate" id="cv-plate" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle.getPlateNumber|default('') }}" data-vehicle-field="1" disabled>
<div class="form-control-feedback hide" data-field="vehicle_color"></div> <div class="form-control-feedback hide" data-field="cv_color"></div>
</div> </div>
<!--
<div class="col-lg-3"> <div class="col-lg-3">
<label data-field="vehicle_color">Color</label> <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> <input type="text" name="vehicle_color" id="vehicle-color" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getColor }}" data-vehicle-field="1" disabled>
<div class="form-control-feedback hide" data-field="vehicle_color"></div> <div class="form-control-feedback hide" data-field="vehicle_color"></div>
</div> </div>
-->
</div> </div>
</div> </div>
<div class="m-form__section"> <div class="m-form__section">
@ -607,6 +632,33 @@
<script> <script>
function get_vehicle_makes(mfg_id, vid = 0) {
var field = $("#cv-make");
$.ajax({
method: "POST",
url: "{{ url('vmfg_vehicles') }}",
data: {id: mfg_id}
}).done(function(response) {
if (response.data.length > 0) {
var html = '';
$.each(response.data, function(index, vehicle) {
html += '<option value="' + vehicle.id + '" data-index="' + index + '">' + vehicle.make + ' (' + vehicle.model_year_from + '-' + vehicle.model_year_to + ')</option>';
});
field.html(html).prop('disabled', false);
field.val(field.data('id'));
} else {
field.html('<option value="">No vehicles found</option>').prop('disabled', true);
}
if (vid != 0) {
field.val(vid);
field.prop('disabled', true);
}
})
}
$(function() { $(function() {
var form_in_process = false; var form_in_process = false;
@ -1021,6 +1073,9 @@ $(function() {
data: { id: data.id } data: { id: data.id }
}).done(function(response) { }).done(function(response) {
vdata = response.data; vdata = response.data;
$('#vid').val(vdata.vehicle.id);
$('#flag-new-customer').prop('checked', false).change();
// reset vehicle fields // reset vehicle fields
resetVehicleFields(); resetVehicleFields();
@ -1040,11 +1095,14 @@ $(function() {
$("#customer-phone-office").val(vdata.customer.phone_office); $("#customer-phone-office").val(vdata.customer.phone_office);
$("#customer-phone-fax").val(vdata.customer.phone_fax); $("#customer-phone-fax").val(vdata.customer.phone_fax);
$("#customer-customer-notes").val(vdata.customer.customer_notes); $("#customer-customer-notes").val(vdata.customer.customer_notes);
$("#vmfg").val(vdata.vehicle.mfg_name); $("#cv-mfg").val(vdata.vehicle.mfg_id);
// get vehicles for this manufacturer
get_vehicle_makes(vdata.vehicle.mfg_id, vdata.vehicle.id);
$("#vehicle-make").val(vdata.vehicle.make); $("#vehicle-make").val(vdata.vehicle.make);
$("#vehicle-year").val(vdata.vehicle.model_year); $("#cv-year").val(vdata.vehicle.model_year);
$("#vehicle-color").val(vdata.vehicle.color); $("#cv-color").val(vdata.vehicle.color);
$("#vehicle-plate").val(vdata.vehicle.plate_number); $("#cv-plate").val(vdata.vehicle.plate_number);
if (typeof vdata.battery !== 'undefined') { if (typeof vdata.battery !== 'undefined') {
$("#current-battery").val(vdata.battery.mfg_name + " " + vdata.battery.model_name + " " + vdata.battery.size_name + " (" + vdata.battery.prod_code + ")"); $("#current-battery").val(vdata.battery.mfg_name + " " + vdata.battery.model_name + " " + vdata.battery.size_name + " (" + vdata.battery.prod_code + ")");
@ -1123,17 +1181,52 @@ $(function() {
} }
}).change(); }).change();
// toggle new customer
$("#flag-new-customer").change(function() {
checked = $(this).prop('checked');
if (checked) {
$('.cust_field').prop('disabled', false);
$('.cv_field').prop('disabled', false);
$('.cust_field').val('');
$('.cv_field').val('');
$('#cv-make').val('');
} else {
$('.cust_field').prop('disabled', true);
$('.cv_field').prop('disabled', true);
}
}).change();
// vehicle manufacturer change
$("#cv-mfg").change(function() {
var id = $(this).val();
field = $('#cv-make');
// no id specified
if (!id) {
field.html('<option value="">Select a manufacturer first</option>').prop('disabled', true);
return true;
}
// get vehicles for this manufacturer
get_vehicle_makes(id);
});
// vehicle make change (store in vid)
$("#cv-make").change(function() {
$('#vid').val($('#cv-make').val());
$('#invoice-bmfg').change();
});
// update battery list when changing manufacturer // update battery list when changing manufacturer
$("#invoice-bmfg").change(function() { $("#invoice-bmfg").change(function() {
{% if ftags.preset_vehicle %} {% if ftags.preset_vehicle %}
vdata = { $('#vid').val({{ vid }});
'vehicle': {
'id': {{ vid }}
}
};
{% endif %} {% endif %}
// must have a selected vehicle // must have a selected vehicle
if (!vdata) vid = $('#vid').val();
if (vid == 0)
return; return;
var id = $(this).val(); var id = $(this).val();
@ -1151,7 +1244,7 @@ $(function() {
url: "{{ url('vehicle_batteries') }}", url: "{{ url('vehicle_batteries') }}",
data: { data: {
id: id, id: id,
vehicle_id: vdata.vehicle.id vehicle_id: vid
} }
}).done(function(response) { }).done(function(response) {
if (response.data.length > 0) { if (response.data.length > 0) {

View file

@ -30,6 +30,30 @@
</span> </span>
</div> </div>
</div> </div>
<div class="col-md-4">
<div class="m-input-icon m-input-icon--left">
<div class="input-group">
<label>Rider:</label>
<select class="form-control m-input" id="rider_list" name="rider_list">
<option value=""></option>
{% for rider in riders %}
<option value="{{ rider.getID }}">{{ rider.getFirstName ~ ' ' ~ rider.getLastName }} </option>
{% endfor %}
</select>
</div>
</div>
</div>
<div class="col-md-4">
<div class="m-input-icon m-input-icon--left">
<div class="input-daterange input-group" id="date-range">
<input role="presentation" type="text" class="form-control m-input" id="date_start" name="date_start" placeholder="Start date" />
<div class="input-group-append">
<span class="input-group-text"><i class="la la-ellipsis-h"></i></span>
</div>
<input role="presentation" type="text" class="form-control" id="date_end" name="date_end" placeholder="End date" />
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -47,6 +71,10 @@
{% block scripts %} {% block scripts %}
<script> <script>
$(function() { $(function() {
$("#date-range").datepicker({
orientation: "bottom"
});
var options = { var options = {
data: { data: {
type: 'remote', type: 'remote',
@ -132,6 +160,28 @@
setInterval(function() { setInterval(function() {
table.reload(); table.reload();
}, {{ table_refresh_rate }}); }, {{ table_refresh_rate }});
$("#rider_list").on("change", function() {
table.search($(this).val(), "rider");
});
$("#date_start").on("change", function() {
var date_start = $(this).val();
var date_end = $("[name='date_end']").val();
var date_array = [date_start, date_end];
table.search(date_array, "schedule_date");
});
$("#date_end").on("change", function() {
console.log($(this).val());
var date_end = $(this).val();
var date_start = $("[name='date_start']").val();
var date_array = [date_start, date_end];
table.search(date_array, "schedule_date");
});
}); });
</script> </script>
{% endblock %} {% endblock %}

View file

@ -30,6 +30,30 @@
</span> </span>
</div> </div>
</div> </div>
<div class="col-md-4">
<div class="m-input-icon m-input-icon--left">
<div>
<label>Rider:</label>
<select class="form-control m-input" id="rider_list" name="rider_list">
<option value=""></option>
{% for rider in riders %}
<option value="{{ rider.getID }}">{{ rider.getFirstName ~ ' ' ~ rider.getLastName }} </option>
{% endfor %}
</select>
</div>
</div>
</div>
<div class="col-md-4">
<div class="m-input-icon m-input-icon--left">
<div class="input-daterange input-group" id="date-range">
<input role="presentation" type="text" class="form-control m-input" id="date_start" name="date_start" placeholder="Start date" />
<div class="input-group-append">
<span class="input-group-text"><i class="la la-ellipsis-h"></i></span>
</div>
<input role="presentation" type="text" class="form-control" id="date_end" name="date_end" placeholder="End date" />
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -47,6 +71,10 @@
{% block scripts %} {% block scripts %}
<script> <script>
$(function() { $(function() {
$("#date-range").datepicker({
orientation: "bottom"
});
var options = { var options = {
data: { data: {
type: 'remote', type: 'remote',
@ -127,6 +155,30 @@
setInterval(function() { setInterval(function() {
table.reload(); table.reload();
}, {{ table_refresh_rate }}); }, {{ table_refresh_rate }});
$("#rider_list").on("change", function() {
console.log($(this).val());
table.search($(this).val(), "rider");
});
$("#date_start").on("change", function() {
var date_start = $(this).val();
var date_end = $("[name='date_end']").val();
var date_array = [date_start, date_end];
table.search(date_array, "schedule_date");
});
$("#date_end").on("change", function() {
console.log($(this).val());
var date_end = $(this).val();
var date_start = $("[name='date_start']").val();
var date_array = [date_start, date_end];
table.search(date_array, "schedule_date");
});
}); });
</script> </script>
{% endblock %} {% endblock %}

View file

@ -30,6 +30,30 @@
</span> </span>
</div> </div>
</div> </div>
<div class="col-md-4">
<div class="m-input-icon m-input-icon--left">
<div>
<label>Rider:</label>
<select class="form-control m-input" id="rider_list" name="rider_list">
<option value=""></option>
{% for rider in riders %}
<option value="{{ rider.getID }}">{{ rider.getFirstName ~ ' ' ~ rider.getLastName }} </option>
{% endfor %}
</select>
</div>
</div>
</div>
<div class="col-md-4">
<div class="m-input-icon m-input-icon--left">
<div class="input-daterange input-group" id="date-range">
<input role="presentation" type="text" class="form-control m-input" id="date_start" name="date_start" placeholder="Start date" />
<div class="input-group-append">
<span class="input-group-text"><i class="la la-ellipsis-h"></i></span>
</div>
<input role="presentation" type="text" class="form-control" id="date_end" name="date_end" placeholder="End date" />
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -47,6 +71,9 @@
{% block scripts %} {% block scripts %}
<script> <script>
$(function() { $(function() {
$("#date-range").datepicker({
orientation: "bottom"
});
var options = { var options = {
data: { data: {
type: 'remote', type: 'remote',
@ -143,6 +170,28 @@
setInterval(function() { setInterval(function() {
table.reload(); table.reload();
}, {{ table_refresh_rate }}); }, {{ table_refresh_rate }});
$("#rider_list").on("change", function() {
table.search($(this).val(), "rider");
});
$("#date_start").on("change", function() {
var date_start = $(this).val();
var date_end = $("[name='date_end']").val();
var date_array = [date_start, date_end];
table.search(date_array, "schedule_date");
});
$("#date_end").on("change", function() {
console.log($(this).val());
var date_end = $(this).val();
var date_start = $("[name='date_start']").val();
var date_array = [date_start, date_end];
table.search(date_array, "schedule_date");
});
}); });
</script> </script>
{% endblock %} {% endblock %}