Fix one step form for CMB to allow for new customer and vehicle #319

This commit is contained in:
Kendrick Chan 2020-02-05 04:36:33 +08:00
parent 4ad0db07e8
commit 746b25ad74
3 changed files with 89 additions and 15 deletions

View file

@ -10,6 +10,8 @@ use App\Entity\CustomerVehicle;
use App\Entity\Promo;
use App\Entity\Battery;
use App\Entity\JobOrder;
use App\Entity\VehicleManufacturer;
use App\Entity\Vehicle;
use App\Service\InvoiceGeneratorInterface;
use App\Service\JobOrderHandlerInterface;
@ -833,7 +835,7 @@ class JobOrderController extends Controller
/**
* @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.');
@ -841,6 +843,10 @@ class JobOrderController extends Controller
$params['submit_url'] = $this->generateUrl('jo_onestep_submit');
$params['return_url'] = $this->generateUrl('jo_onestep_form');
$params['map_js_file'] = $gis->getJSJOFile();
$params['vmfgs'] = $em->getRepository(VehicleManufacturer::class)->findAll();
$params['vmakes'] = $em->getRepository(Vehicle::class)->findAll();
$params['vmodel_year'] = '';
$params['vplate'] = '';
$template = $params['template'];
@ -886,6 +892,7 @@ class JobOrderController extends Controller
$params['submit_url'] = $this->generateUrl('jo_onestep_edit_submit', ['id' => $id]);
$params['return_url'] = $this->generateUrl('jo_open');
$params['map_js_file'] = $gis->getJSJOFile();
$params['vmfgs'] = $em->getRepository(VehicleManufacturer::class)->findAll();
$template = $params['template'];

View file

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

View file

@ -42,12 +42,14 @@
<select class="form-control m-select2" id="customer-vehicle" name="customer_vehicle"></select>
<div class="form-control-feedback hide" data-field="customer_vehicle"></div>
</div>
<!--
<div class="col-lg-6">
<label></label>
<div style="display:block; margin-top: 5px">
<a href="{{ url('customer_create', {'ref':'jo'}) }}" class="btn btn-success">Create New Customer / Vehicle</a>
</div>
</div>
-->
</div>
</div>
<div class="m-form__section">
@ -152,12 +154,25 @@
<div class="form-group m-form__group row">
<div class="col-lg-3">
<label data-field="cv_mfg">Manufacturer</label>
<input type="text" name="cv_mfg" id="vmfg" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getVehicle.getManufacturer.getName }}" data-vehicle-field="1" disabled>
<div class="form-control-feedback hide" data-field="cv_mfg"></div>
<select name="cv_mfg" class="form-control m-input cv_field" id="cv-mfg" data-required="0" disabled>
<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-3">
<label data-field="cv_make">Make</label>
<input type="text" name="cv_make" id="cv-make" class="form-control m-input cv_field" value="{{ obj.getCustomerVehicle ? obj.getCustomerVehicle.getVehicle.getMake }}" data-vehicle-field="1" disabled>
<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 class="col-lg-3">
@ -165,21 +180,21 @@
<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="cv_year"></div>
</div>
</div>
<div class="form-group m-form__group row">
<div class="col-lg-3">
<label data-field="cv_plate">Plate #</label>
<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="cv_color"></div>
</div>
</div>
<!--
<div class="form-group m-form__group row">
<div class="col-lg-3">
<label data-field="vehicle_color">Color</label>
<input type="text" name="vehicle_color" id="vehicle-color" class="form-control m-input 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>
</div>
-->
</div>
</div>
<div class="m-form__section">
<div class="m-form__heading">
@ -616,6 +631,33 @@
<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() {
var form_in_process = false;
@ -1031,6 +1073,8 @@ $(function() {
}).done(function(response) {
vdata = response.data;
$('#flag-new-customer').prop('checked', false).change();
// reset vehicle fields
resetVehicleFields();
@ -1049,11 +1093,14 @@ $(function() {
$("#customer-phone-office").val(vdata.customer.phone_office);
$("#customer-phone-fax").val(vdata.customer.phone_fax);
$("#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-year").val(vdata.vehicle.model_year);
$("#vehicle-color").val(vdata.vehicle.color);
$("#vehicle-plate").val(vdata.vehicle.plate_number);
$("#cv-year").val(vdata.vehicle.model_year);
$("#cv-color").val(vdata.vehicle.color);
$("#cv-plate").val(vdata.vehicle.plate_number);
if (typeof vdata.battery !== 'undefined') {
$("#current-battery").val(vdata.battery.mfg_name + " " + vdata.battery.model_name + " " + vdata.battery.size_name + " (" + vdata.battery.prod_code + ")");
@ -1134,18 +1181,37 @@ $(function() {
// toggle new customer
$("#flag-new-customer").change(function() {
console.log('HERE');
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() {
console.log('mfg dropdown');
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);
});
// update battery list when changing manufacturer
$("#invoice-bmfg").change(function() {
{% if ftags.preset_vehicle %}