diff --git a/src/Controller/VehicleController.php b/src/Controller/VehicleController.php index db82b18b..9fb93544 100644 --- a/src/Controller/VehicleController.php +++ b/src/Controller/VehicleController.php @@ -241,6 +241,10 @@ class VehicleController extends Controller if (empty($row)) throw $this->createNotFoundException('The item does not exist'); + // get current batteries of vehicle to be updated + $current_batteries = $row->getBatteries(); + error_log('count of current batteries ' . count($current_batteries)); + // set and save values $row->setMake($req->request->get('make')) ->setModelYearFrom($req->request->get('model_year_from')) @@ -251,7 +255,6 @@ class VehicleController extends Controller else $row->setDisplayMobile(false); - // validate $errors = $validator->validate($row); @@ -272,6 +275,50 @@ class VehicleController extends Controller else $row->setManufacturer($manufacturer); + // custom validation for batteries + $batteries = $req->request->get('batteries'); + if (!empty($batteries)) + { + // need to check if a battery has been removed + if (count($current_batteries) > count($batteries)) + { + // battery/batteries have been removed + foreach ($current_batteries as $cbatt) + { + $cbatt_id = $cbatt->getID(); + if (in_array($cbatt_id, $batteries)) + { + // do nothing, move to next element + continue; + } + else + { + // cbatt_id has been deleted + $battery = $em->getRepository(Battery::class)->find($cbatt_id); + + if (!empty($battery)) + { + $battery->removeVehicle($row); + } + } + } + } + } + else + { + // no more battery compatible with vehicle + foreach ($current_batteries as $c_battery) + { + $cbatt_id = $c_battery->getID(); + $battery = $em->getRepository(Battery::class)->find($cbatt_id); + + if (!empty($battery)) + { + $battery->removeVehicle($row); + } + } + } + // check if any errors were found if (!empty($error_array)) { // return validation failure response diff --git a/templates/vehicle/form.html.twig b/templates/vehicle/form.html.twig index bd6fa482..4669d1c2 100644 --- a/templates/vehicle/form.html.twig +++ b/templates/vehicle/form.html.twig @@ -135,13 +135,23 @@ $(function() { $("#row-form").submit(function(e) { var form = $(this); + var formdata = form.serialize(); e.preventDefault(); + // add battery data + bdata = ''; + $.each(battRows, function(index, battery) { + bdata += "&batteries%5B%5D=" + battery.id; + }); + + // append to form data + formdata += bdata; + $.ajax({ method: "POST", url: form.prop('action'), - data: form.serialize() + data: formdata }).done(function(response) { // remove all error classes removeErrors(); @@ -192,6 +202,7 @@ $(function() { }); var battRows = []; + var batteryIds = []; {% for batt in obj.getBatteries %} trow = { @@ -202,8 +213,30 @@ $(function() { }; battRows.push(trow); + batteryIds.push({{ batt.getID }}); {% endfor %} + // remove battery from table + $(document).on('click', '.btn-delete', function(e) { + var btn = $(this); + var id = $(this).data('id'); + + $.each(battRows, function(index, battery) { + if (battery.id == id) { + battRows.splice(index, 1); + return false; + } + }); + + // remove from battery ids + batteryIds.splice(batteryIds.indexOf(id), 1); + + // reload table + battTable.row(btn.parents('tr')).remove(); + battTable.originalDataSet = battRows; + battTable.reload(); + }); + // battery data table var battOptions = { data: { @@ -235,7 +268,17 @@ $(function() { { field: 'sell_price', title: 'Price' - } + }, + { + field: 'Actions', + width: 70, + title: 'Actions', + sortable: false, + overflow: 'visible', + template: function (row, index, datatable) { + return ''; + }, + } ], pagination: false };