From 234d993d8f4529ebbfa29942ce4311ad3b0ba709 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 29 Jan 2020 09:03:56 +0000 Subject: [PATCH] Add deletion of compatible battery from vehicle. #317 --- src/Controller/VehicleController.php | 39 ++++++++++++++++++++++- templates/vehicle/form.html.twig | 47 ++++++++++++++++++++++++++-- 2 files changed, 83 insertions(+), 3 deletions(-) diff --git a/src/Controller/VehicleController.php b/src/Controller/VehicleController.php index db82b18b..4c6a5484 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,40 @@ 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)) + { + error_log('A battery has been removed'); + } + foreach ($batteries as $battery_id) + { + $battery = $em->getRepository(Battery::class)->find($battery_id); + + if (!empty($battery)) + { + error_log('battery id ' . $battery->getID()); + } + } + } + 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 };