Merge branch '319-cmb-one-step-form-display-rider-distance' into '270-final-cmb-fixes'
Resolve "CMB - one step form display rider distance" See merge request jankstudio/resq!366
This commit is contained in:
commit
eee516a6b5
9 changed files with 671 additions and 339 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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'];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -2197,6 +2197,14 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
{
|
{
|
||||||
|
|
@ -2435,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);
|
||||||
|
|
@ -2461,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']))
|
||||||
|
|
@ -2472,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')
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -19,21 +19,45 @@
|
||||||
<div class="m-portlet m-portlet--mobile">
|
<div class="m-portlet m-portlet--mobile">
|
||||||
<div class="m-portlet__body">
|
<div class="m-portlet__body">
|
||||||
<div class="m-form m-form--label-align-right m--margin-top-20 m--margin-bottom-30">
|
<div class="m-form m-form--label-align-right m--margin-top-20 m--margin-bottom-30">
|
||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
<div class="col-xl-12">
|
<div class="col-xl-12">
|
||||||
<div class="form-group m-form__group row align-items-center">
|
<div class="form-group m-form__group row align-items-center">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="m-input-icon m-input-icon--left">
|
<div class="m-input-icon m-input-icon--left">
|
||||||
<input type="text" class="form-control m-input m-input--solid" placeholder="Search..." id="data-rows-search">
|
<input type="text" class="form-control m-input m-input--solid" placeholder="Search..." id="data-rows-search">
|
||||||
<span class="m-input-icon__icon m-input-icon__icon--left">
|
<span class="m-input-icon__icon m-input-icon__icon--left">
|
||||||
<span><i class="la la-search"></i></span>
|
<span><i class="la la-search"></i></span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-md-4">
|
||||||
</div>
|
<div class="m-input-icon m-input-icon--left">
|
||||||
</div>
|
<div class="input-group">
|
||||||
</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>
|
||||||
<!--begin: Datatable -->
|
<!--begin: Datatable -->
|
||||||
<div id="data-rows"></div>
|
<div id="data-rows"></div>
|
||||||
<!--end: Datatable -->
|
<!--end: Datatable -->
|
||||||
|
|
@ -45,93 +69,119 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
var options = {
|
$("#date-range").datepicker({
|
||||||
data: {
|
orientation: "bottom"
|
||||||
type: 'remote',
|
});
|
||||||
source: {
|
|
||||||
read: {
|
var options = {
|
||||||
url: '{{ url('jo_all_rows') }}',
|
data: {
|
||||||
method: 'POST'
|
type: 'remote',
|
||||||
}
|
source: {
|
||||||
},
|
read: {
|
||||||
saveState: {
|
url: '{{ url('jo_all_rows') }}',
|
||||||
cookie: false,
|
method: 'POST'
|
||||||
webstorage: false
|
}
|
||||||
},
|
|
||||||
pageSize: 10,
|
|
||||||
serverPaging: true,
|
|
||||||
serverFiltering: true,
|
|
||||||
serverSorting: true
|
|
||||||
},
|
|
||||||
rows: {
|
|
||||||
beforeTemplate: function (row, data, index) {
|
|
||||||
if (data.flag_advance) {
|
|
||||||
$(row).addClass('m-table__row--danger');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
columns: [
|
|
||||||
{
|
|
||||||
field: 'id',
|
|
||||||
title: 'JO Number'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'plate_number',
|
|
||||||
title: 'Plate #'
|
|
||||||
},
|
},
|
||||||
{
|
saveState: {
|
||||||
field: 'customer_name',
|
cookie: false,
|
||||||
title: 'Customer'
|
webstorage: false
|
||||||
},
|
},
|
||||||
{
|
pageSize: 10,
|
||||||
field: 'delivery_address',
|
serverPaging: true,
|
||||||
title: 'Customer Area'
|
serverFiltering: true,
|
||||||
},
|
serverSorting: true
|
||||||
{
|
},
|
||||||
field: 'type',
|
rows: {
|
||||||
title: 'Schedule'
|
beforeTemplate: function (row, data, index) {
|
||||||
},
|
if (data.flag_advance) {
|
||||||
{
|
$(row).addClass('m-table__row--danger');
|
||||||
field: 'date_schedule',
|
}
|
||||||
title: 'Scheduled Date'
|
}
|
||||||
},
|
},
|
||||||
{
|
columns: [
|
||||||
field: 'status',
|
{
|
||||||
title: 'Status'
|
field: 'id',
|
||||||
},
|
title: 'JO Number'
|
||||||
{
|
},
|
||||||
field: 'processor',
|
{
|
||||||
title: 'Dispatcher'
|
field: 'plate_number',
|
||||||
},
|
title: 'Plate #'
|
||||||
{
|
},
|
||||||
field: 'Actions',
|
{
|
||||||
width: 110,
|
field: 'customer_name',
|
||||||
title: 'Actions',
|
title: 'Customer'
|
||||||
sortable: false,
|
},
|
||||||
overflow: 'visible',
|
{
|
||||||
template: function (row, index, datatable) {
|
field: 'delivery_address',
|
||||||
var actions = '<a href="' + row.meta.update_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" title="View"><i class="la la-edit"></i></a>';
|
title: 'Customer Area'
|
||||||
actions += '<a href="' + row.meta.pdf_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" title="PDF" target="_blank"><i class="la la-file-o"></i></a>';
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
title: 'Schedule'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'date_schedule',
|
||||||
|
title: 'Scheduled Date'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: 'Status'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'processor',
|
||||||
|
title: 'Dispatcher'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'Actions',
|
||||||
|
width: 110,
|
||||||
|
title: 'Actions',
|
||||||
|
sortable: false,
|
||||||
|
overflow: 'visible',
|
||||||
|
template: function (row, index, datatable) {
|
||||||
|
var actions = '<a href="' + row.meta.update_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" title="View"><i class="la la-edit"></i></a>';
|
||||||
|
actions += '<a href="' + row.meta.pdf_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" title="PDF" target="_blank"><i class="la la-file-o"></i></a>';
|
||||||
|
|
||||||
return actions;
|
return actions;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
search: {
|
search: {
|
||||||
onEnter: false,
|
onEnter: false,
|
||||||
input: $('#data-rows-search'),
|
input: $('#data-rows-search'),
|
||||||
delay: 400
|
delay: 400
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var table = $("#data-rows").mDatatable(options);
|
var table = $("#data-rows").mDatatable(options);
|
||||||
|
|
||||||
// auto refresh table
|
// auto refresh table
|
||||||
setInterval(function() {
|
setInterval(function() {
|
||||||
table.reload();
|
table.reload();
|
||||||
}, {{ table_refresh_rate }});
|
}, {{ table_refresh_rate }});
|
||||||
});
|
|
||||||
</script>
|
$("#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>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -19,21 +19,45 @@
|
||||||
<div class="m-portlet m-portlet--mobile">
|
<div class="m-portlet m-portlet--mobile">
|
||||||
<div class="m-portlet__body">
|
<div class="m-portlet__body">
|
||||||
<div class="m-form m-form--label-align-right m--margin-top-20 m--margin-bottom-30">
|
<div class="m-form m-form--label-align-right m--margin-top-20 m--margin-bottom-30">
|
||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
<div class="col-xl-12">
|
<div class="col-xl-12">
|
||||||
<div class="form-group m-form__group row align-items-center">
|
<div class="form-group m-form__group row align-items-center">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="m-input-icon m-input-icon--left">
|
<div class="m-input-icon m-input-icon--left">
|
||||||
<input type="text" class="form-control m-input m-input--solid" placeholder="Search..." id="data-rows-search">
|
<input type="text" class="form-control m-input m-input--solid" placeholder="Search..." id="data-rows-search">
|
||||||
<span class="m-input-icon__icon m-input-icon__icon--left">
|
<span class="m-input-icon__icon m-input-icon__icon--left">
|
||||||
<span><i class="la la-search"></i></span>
|
<span><i class="la la-search"></i></span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-md-4">
|
||||||
</div>
|
<div class="m-input-icon m-input-icon--left">
|
||||||
</div>
|
<div>
|
||||||
</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>
|
||||||
<!--begin: Datatable -->
|
<!--begin: Datatable -->
|
||||||
<div id="data-rows"></div>
|
<div id="data-rows"></div>
|
||||||
<!--end: Datatable -->
|
<!--end: Datatable -->
|
||||||
|
|
@ -45,88 +69,116 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
var options = {
|
$("#date-range").datepicker({
|
||||||
data: {
|
orientation: "bottom"
|
||||||
type: 'remote',
|
});
|
||||||
source: {
|
|
||||||
read: {
|
var options = {
|
||||||
url: '{{ url('jo_fulfill_rows') }}',
|
data: {
|
||||||
method: 'POST'
|
type: 'remote',
|
||||||
}
|
source: {
|
||||||
},
|
read: {
|
||||||
saveState: {
|
url: '{{ url('jo_fulfill_rows') }}',
|
||||||
cookie: false,
|
method: 'POST'
|
||||||
webstorage: false
|
}
|
||||||
},
|
|
||||||
pageSize: 10,
|
|
||||||
serverPaging: true,
|
|
||||||
serverFiltering: true,
|
|
||||||
serverSorting: true
|
|
||||||
},
|
|
||||||
rows: {
|
|
||||||
beforeTemplate: function (row, data, index) {
|
|
||||||
if (data.flag_advance) {
|
|
||||||
$(row).addClass('m-table__row--danger');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
columns: [
|
|
||||||
{
|
|
||||||
field: 'id',
|
|
||||||
title: 'JO Number'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'delivery_address',
|
|
||||||
title: 'Customer Area'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'service_type',
|
|
||||||
title: 'Type of Transaction'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
field: 'type',
|
|
||||||
title: 'Schedule'
|
|
||||||
},
|
},
|
||||||
{
|
saveState: {
|
||||||
field: 'date_schedule',
|
cookie: false,
|
||||||
title: 'Scheduled Date'
|
webstorage: false
|
||||||
},
|
},
|
||||||
{
|
pageSize: 10,
|
||||||
field: 'status',
|
serverPaging: true,
|
||||||
title: 'Status'
|
serverFiltering: true,
|
||||||
},
|
serverSorting: true
|
||||||
{
|
},
|
||||||
field: 'processor',
|
rows: {
|
||||||
title: 'Dispatcher'
|
beforeTemplate: function (row, data, index) {
|
||||||
},
|
if (data.flag_advance) {
|
||||||
{
|
$(row).addClass('m-table__row--danger');
|
||||||
field: 'Actions',
|
}
|
||||||
width: 110,
|
}
|
||||||
title: 'Actions',
|
},
|
||||||
sortable: false,
|
columns: [
|
||||||
overflow: 'visible',
|
{
|
||||||
template: function (row, index, datatable) {
|
field: 'id',
|
||||||
var actions = '<a href="' + row.meta.update_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" title="View / Edit"><i class="la la-edit"></i></a>' + '<a href="' + row.meta.onestep_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" title="One Step Edit"><i class="la la-edit"></i></a>';
|
title: 'JO Number'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'delivery_address',
|
||||||
|
title: 'Customer Area'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'service_type',
|
||||||
|
title: 'Type of Transaction'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
title: 'Schedule'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'date_schedule',
|
||||||
|
title: 'Scheduled Date'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: 'Status'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'processor',
|
||||||
|
title: 'Dispatcher'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'Actions',
|
||||||
|
width: 110,
|
||||||
|
title: 'Actions',
|
||||||
|
sortable: false,
|
||||||
|
overflow: 'visible',
|
||||||
|
template: function (row, index, datatable) {
|
||||||
|
var actions = '<a href="' + row.meta.update_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" title="View / Edit"><i class="la la-edit"></i></a>' + '<a href="' + row.meta.onestep_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" title="One Step Edit"><i class="la la-edit"></i></a>';
|
||||||
|
|
||||||
return actions;
|
return actions;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
search: {
|
search: {
|
||||||
onEnter: false,
|
onEnter: false,
|
||||||
input: $('#data-rows-search'),
|
input: $('#data-rows-search'),
|
||||||
delay: 400
|
delay: 400
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var table = $("#data-rows").mDatatable(options);
|
var table = $("#data-rows").mDatatable(options);
|
||||||
|
|
||||||
// auto refresh table
|
// auto refresh table
|
||||||
setInterval(function() {
|
setInterval(function() {
|
||||||
table.reload();
|
table.reload();
|
||||||
}, {{ table_refresh_rate }});
|
}, {{ table_refresh_rate }});
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
$("#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>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -19,21 +19,45 @@
|
||||||
<div class="m-portlet m-portlet--mobile">
|
<div class="m-portlet m-portlet--mobile">
|
||||||
<div class="m-portlet__body">
|
<div class="m-portlet__body">
|
||||||
<div class="m-form m-form--label-align-right m--margin-top-20 m--margin-bottom-30">
|
<div class="m-form m-form--label-align-right m--margin-top-20 m--margin-bottom-30">
|
||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
<div class="col-xl-12">
|
<div class="col-xl-12">
|
||||||
<div class="form-group m-form__group row align-items-center">
|
<div class="form-group m-form__group row align-items-center">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="m-input-icon m-input-icon--left">
|
<div class="m-input-icon m-input-icon--left">
|
||||||
<input type="text" class="form-control m-input m-input--solid" placeholder="Search..." id="data-rows-search">
|
<input type="text" class="form-control m-input m-input--solid" placeholder="Search..." id="data-rows-search">
|
||||||
<span class="m-input-icon__icon m-input-icon__icon--left">
|
<span class="m-input-icon__icon m-input-icon__icon--left">
|
||||||
<span><i class="la la-search"></i></span>
|
<span><i class="la la-search"></i></span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-md-4">
|
||||||
</div>
|
<div class="m-input-icon m-input-icon--left">
|
||||||
</div>
|
<div>
|
||||||
</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>
|
||||||
<!--begin: Datatable -->
|
<!--begin: Datatable -->
|
||||||
<div id="data-rows"></div>
|
<div id="data-rows"></div>
|
||||||
<!--end: Datatable -->
|
<!--end: Datatable -->
|
||||||
|
|
@ -45,104 +69,129 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
var options = {
|
$("#date-range").datepicker({
|
||||||
data: {
|
orientation: "bottom"
|
||||||
type: 'remote',
|
});
|
||||||
source: {
|
var options = {
|
||||||
read: {
|
data: {
|
||||||
url: '{{ url('jo_open_rows') }}',
|
type: 'remote',
|
||||||
method: 'POST'
|
source: {
|
||||||
}
|
read: {
|
||||||
},
|
url: '{{ url('jo_open_rows') }}',
|
||||||
saveState: {
|
method: 'POST'
|
||||||
cookie: false,
|
}
|
||||||
webstorage: false
|
},
|
||||||
},
|
saveState: {
|
||||||
pageSize: 10,
|
cookie: false,
|
||||||
serverPaging: true,
|
webstorage: false
|
||||||
serverFiltering: true,
|
},
|
||||||
serverSorting: true
|
pageSize: 10,
|
||||||
},
|
serverPaging: true,
|
||||||
rows: {
|
serverFiltering: true,
|
||||||
beforeTemplate: function (row, data, index) {
|
serverSorting: true
|
||||||
if (data.flag_advance) {
|
},
|
||||||
$(row).addClass('m-table__row--danger');
|
rows: {
|
||||||
}
|
beforeTemplate: function (row, data, index) {
|
||||||
|
if (data.flag_advance) {
|
||||||
|
$(row).addClass('m-table__row--danger');
|
||||||
|
}
|
||||||
|
|
||||||
if (data.is_mobile) {
|
if (data.is_mobile) {
|
||||||
$(row).addClass('m-table__row--is_mobile');
|
$(row).addClass('m-table__row--is_mobile');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
field: 'id',
|
field: 'id',
|
||||||
title: 'JO #'
|
title: 'JO #'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'plate_number',
|
field: 'plate_number',
|
||||||
title: 'Plate #'
|
title: 'Plate #'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'customer_name',
|
field: 'customer_name',
|
||||||
title: 'Customer'
|
title: 'Customer'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'delivery_address',
|
field: 'delivery_address',
|
||||||
title: 'Area'
|
title: 'Area'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'type',
|
field: 'type',
|
||||||
title: 'Schedule'
|
title: 'Schedule'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'date_schedule',
|
field: 'date_schedule',
|
||||||
title: 'Scheduled Date'
|
title: 'Scheduled Date'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'status',
|
field: 'status',
|
||||||
title: 'Status'
|
title: 'Status'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'processor',
|
field: 'processor',
|
||||||
title: 'Dispatcher'
|
title: 'Dispatcher'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'Actions',
|
field: 'Actions',
|
||||||
width: 110,
|
width: 110,
|
||||||
title: 'Actions',
|
title: 'Actions',
|
||||||
sortable: false,
|
sortable: false,
|
||||||
overflow: 'visible',
|
overflow: 'visible',
|
||||||
template: function (row, index, datatable) {
|
template: function (row, index, datatable) {
|
||||||
var actions = '<a href="' + row.meta.reassign_hub_url + '" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill btn-reassign-hub" title="Re-assign Hub"><i class="fa fa-home"></i></a>' +
|
var actions = '<a href="' + row.meta.reassign_hub_url + '" class="m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill btn-reassign-hub" title="Re-assign Hub"><i class="fa fa-home"></i></a>' +
|
||||||
(row.status != '{{ statuses["pending"] }}' ? '<a href="' + row.meta.reassign_rider_url + '" class="m-portlet__nav-link btn m-btn m-btn--hover-focus m-btn--icon m-btn--icon-only m-btn--pill btn-reassign-rider" title="Re-assign Rider"><i class="fa fa-truck"></i></a>' : '');
|
(row.status != '{{ statuses["pending"] }}' ? '<a href="' + row.meta.reassign_rider_url + '" class="m-portlet__nav-link btn m-btn m-btn--hover-focus m-btn--icon m-btn--icon-only m-btn--pill btn-reassign-rider" title="Re-assign Rider"><i class="fa fa-truck"></i></a>' : '');
|
||||||
|
|
||||||
{% if is_granted('jo_open.edit') %}
|
{% if is_granted('jo_open.edit') %}
|
||||||
actions += '<a href="' + row.meta.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-reassign-hub" title="Edit"><i class="fa fa-file"></i></a>';
|
actions += '<a href="' + row.meta.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-reassign-hub" title="Edit"><i class="fa fa-file"></i></a>';
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if is_granted('jo_onestep.edit') %}
|
{% if is_granted('jo_onestep.edit') %}
|
||||||
actions += '<a href="' + row.meta.onestep_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-reassign-hub" title="One Step Edit"><i class="fa fa-file"></i></a>';
|
actions += '<a href="' + row.meta.onestep_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-reassign-hub" title="One Step Edit"><i class="fa fa-file"></i></a>';
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
return actions;
|
return actions;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
search: {
|
search: {
|
||||||
onEnter: false,
|
onEnter: false,
|
||||||
input: $('#data-rows-search'),
|
input: $('#data-rows-search'),
|
||||||
delay: 400
|
delay: 400
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var table = $("#data-rows").mDatatable(options);
|
var table = $("#data-rows").mDatatable(options);
|
||||||
|
|
||||||
// auto refresh table
|
// auto refresh table
|
||||||
setInterval(function() {
|
setInterval(function() {
|
||||||
table.reload();
|
table.reload();
|
||||||
}, {{ table_refresh_rate }});
|
}, {{ table_refresh_rate }});
|
||||||
});
|
|
||||||
</script>
|
$("#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>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue