From 6c11650b25fdd70cb1a05230c047849787d32cb6 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 17 Feb 2020 07:20:37 +0000 Subject: [PATCH 01/12] Add service charge entity. #341 --- src/Entity/ServiceCharge.php | 64 ++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/Entity/ServiceCharge.php diff --git a/src/Entity/ServiceCharge.php b/src/Entity/ServiceCharge.php new file mode 100644 index 00000000..8ba224cf --- /dev/null +++ b/src/Entity/ServiceCharge.php @@ -0,0 +1,64 @@ +amount = 0; + } + + public function getID() + { + return $this->id; + } + + public function setName($name) + { + $this->name = $name; + return $this; + } + + public function getName() + { + return $this->name; + } + + public function setAmount($amount) + { + $this->amount = $amount; + return $this; + } + + public function getAmount() + { + return $this->amount; + } +} From 147e949aff3df08658b1b2e58f2d9424a39f8f2c Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Mon, 17 Feb 2020 15:25:12 +0800 Subject: [PATCH 02/12] Add initial UI for service charge support in one step job order form #341 --- .../job-order/cmb.form.onestep.html.twig | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 34fe7af4..08d20ee3 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -477,6 +477,38 @@ +
+
+
+

+ Service Charges +

+
+
+
+ +
+
+
+
+
+ + +
+
+
+ +
+
+ +
+
+
+
@@ -1607,6 +1639,41 @@ $(function() { }); }); }); + + // service charge add + $('#btn-sc-add').click(function(e) { + console.log('adding service charge'); + // add dropdown before the button + var html = '
'; + html += '
'; + html += '
'; + html += ''; + html += ''; + html += '
'; + html += '
'; + html += '
'; + html += ''; + html += '
'; + html += '
'; + html += ''; + html += '
'; + html += '
'; + + $('#sc-section').append(html); + return false; + }); + + // service charge remove + $('body').on('click', '.btn-sc-remove', function(e) { + console.log('removing service charge'); + + $(this).closest('.row').remove(); + return false; + }); }); {% endblock %} From 11bf116e683bc7b2eb93f89c9cb1c84fe845abe7 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 17 Feb 2020 07:44:04 +0000 Subject: [PATCH 03/12] Add sql file to populate service charge table. #341 --- initial_sql/sql_insert_service_charge_data.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 initial_sql/sql_insert_service_charge_data.sql diff --git a/initial_sql/sql_insert_service_charge_data.sql b/initial_sql/sql_insert_service_charge_data.sql new file mode 100644 index 00000000..bab3fdf5 --- /dev/null +++ b/initial_sql/sql_insert_service_charge_data.sql @@ -0,0 +1 @@ +INSERT INTO `service_charge` VALUES(1,'Bangi',20),(2,'Banting',30),(3,'Bdr Saujana Utama',20),(4,'Bdr Seri Coalfields',30),(5,'Bdr Baru Bangi',20),(6,'Bdr Saujana Putra',20),(7,'Bukit Beruntung',30),(8,'Cyberjaya',20),(9,'Dengkil',30),(10,'Hulu Langat',20),(11,'Jenjarom',30),(12,'Klia',30),(13,'Meru',20),(14,'Port Klang',20),(15,'Pulau Indah',30),(16,'Puncak Alam',20),(17,'Putrajaya',20),(18,'Rawang',30),(19,'Salak Tinggi',30),(20,'Semenyih',20),(21,'Sepang',30),(22,'Serendah',30),(23,'Sungai Buloh',20),(24,'Teluk Panglima Garang',30),(25,'Uitm Puncak Alam',20),(26,'12am - 7am',10),(27,'Out of define Klg Valley',20),(28,'Airport',35),(29,'Jump start',50),(30,'Product warranty service charge - existing BA customer',20),(31,'Product warranty service charge - non BA customer',40); From 34e90912973bb215c99761d6ac2bd49aafccc22f Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Mon, 17 Feb 2020 16:12:35 +0800 Subject: [PATCH 04/12] Fix dropdown for service charges in one-step JO form #341 --- .../JobOrderHandler/CMBJobOrderHandler.php | 2 ++ .../job-order/cmb.form.onestep.html.twig | 29 ++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index cfdab814..a7712042 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -26,6 +26,7 @@ use App\Entity\Rider; use App\Entity\JORejection; use App\Entity\Warranty; use App\Entity\Customer; +use App\Entity\ServiceCharge; use App\Ramcar\InvoiceCriteria; use App\Ramcar\CMBServiceType; @@ -2674,6 +2675,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // db loaded $params['bmfgs'] = $em->getRepository(BatteryManufacturer::class)->findAll(); $params['promos'] = $em->getRepository(Promo::class)->findAll(); + $params['service_charges'] = $em->getRepository(ServiceCharge::class)->findAll(); // list of hubs $hubs = $em->getRepository(Hub::class)->findBy([], ['name' => 'ASC']); diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 08d20ee3..6662facf 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -489,24 +489,26 @@
+ +
@@ -1647,16 +1649,15 @@ $(function() { var html = '
'; html += '
'; html += '
'; - html += ''; + {% for key, sc in service_charges %} + html += ''; {% endfor %} html += ''; - html += ''; html += '
'; html += '
'; html += '
'; - html += ''; + html += ''; html += '
'; html += '
'; html += ''; @@ -1664,6 +1665,9 @@ $(function() { html += '
'; $('#sc-section').append(html); + + // trigger change in select + $('#sc-section').find('.sc-select').last().change(); return false; }); @@ -1674,6 +1678,11 @@ $(function() { $(this).closest('.row').remove(); return false; }); + + $('body').on('change', '.sc-select', function(e) { + var amount = $(this).children('option:selected').data('amount'); + $(this).closest('.row').find('.sc-amount').val(amount); + }); }); {% endblock %} From 663698f0873af944e05fcb087f5f756da3aeb76d Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 17 Feb 2020 08:12:51 +0000 Subject: [PATCH 05/12] Rename promo to discount in JO service, JO forms, and invoice generator. #341 --- .../InvoiceGenerator/CMBInvoiceGenerator.php | 3 +-- .../JobOrderHandler/CMBJobOrderHandler.php | 22 ++++++++++--------- .../job-order/cmb.form.onestep.html.twig | 18 +++++++-------- templates/job-order/cmb.form.walkin.html.twig | 20 ++++++++--------- 4 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php index 73f4524e..cb404c6c 100644 --- a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php @@ -126,7 +126,7 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface } // generate invoice criteria - public function generateInvoiceCriteria($jo, $promo_id, $invoice_items, &$error_array) + public function generateInvoiceCriteria($jo, $discount, $invoice_items, &$error_array) { $em = $this->em; @@ -135,7 +135,6 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface $criteria->setServiceType($jo->getServiceType()) ->setCustomerVehicle($jo->getCustomerVehicle()); - $discount = $promo_id; $ierror = $this->validateDiscount($criteria, $discount); if (!$ierror && !empty($invoice_items)) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index cfdab814..df9834a0 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -351,13 +351,13 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // call service to generate job order and invoice $invoice_items = $req->request->get('invoice_items', []); - $promo_id = $req->request->get('invoice_promo'); + $discount = $req->request->get('invoice_discount'); $invoice_change = $req->request->get('invoice_change', 0); // check if invoice changed if ($invoice_change) { - $this->ic->generateInvoiceCriteria($jo, $promo_id, $invoice_items, $error_array); + $this->ic->generateInvoiceCriteria($jo, $discount, $invoice_items, $error_array); } // validate @@ -523,11 +523,13 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface } // get discount and set to meta - $discount = $req->request->get('invoice_promo'); + $discount = $req->request->get('invoice_discount'); // check if discount is greater than 50 or negative number if (($discount > 50) || ($discount < 0)) - $error_array['invoice_promo'] = 'Invalid discount specified'; + $error_array['invoice_discount'] = 'Invalid discount specified'; + + // get list of service charges if (empty($error_array)) { @@ -580,13 +582,13 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // call service to generate job order and invoice $invoice_items = $req->request->get('invoice_items', []); - $promo_id = $req->request->get('invoice_promo'); + $discount = $req->request->get('invoice_discount'); $invoice_change = $req->request->get('invoice_change', 0); // check if invoice changed if ($invoice_change) { - $this->ic->generateInvoiceCriteria($jo, $promo_id, $invoice_items, $error_array); + $this->ic->generateInvoiceCriteria($jo, $discount, $invoice_items, $error_array); } // validate @@ -2498,11 +2500,11 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface } // get discount and set to meta - $discount = $req->request->get('invoice_promo'); + $discount = $req->request->get('invoice_discount'); // check if discount is greater than 50 or negative number if (($discount > 50) || ($discount < 0)) - $error_array['invoice_promo'] = 'Invalid discount specified'; + $error_array['invoice_discount'] = 'Invalid discount specified'; if (empty($error_array)) { @@ -2551,13 +2553,13 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // call service to generate job order and invoice $invoice_items = $req->request->get('invoice_items', []); - $promo_id = $req->request->get('invoice_promo'); + $discount = $req->request->get('invoice_discount'); $invoice_change = $req->request->get('invoice_change', 0); // check if invoice changed if ($invoice_change) { - $this->ic->generateInvoiceCriteria($jo, $promo_id, $invoice_items, $error_array); + $this->ic->generateInvoiceCriteria($jo, $discount, $invoice_items, $error_array); } // validate diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 08d20ee3..0653d85a 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -530,12 +530,12 @@
- + {% if ftags.invoice_edit %} - - + + {% else %} - + {% endif %}
@@ -1354,7 +1354,7 @@ $(function() { }); // update invoice when promo is changed - $("#invoice-promo").change(function() { + $("#invoice-discount").change(function() { generateInvoice(); }); @@ -1365,7 +1365,7 @@ $(function() { // reset the invoice table $("#btn-reset-invoice").click(function() { - $("#invoice-promo").prop('selectedIndex', 0); + $("#invoice-discount").prop('selectedIndex', 0); invoiceItems = []; generateInvoice(); }); @@ -1376,7 +1376,7 @@ $(function() { }); function generateInvoice() { - var promo = $("#invoice-promo").val(); + var discount = $("#invoice-discount").val(); var table = $("#invoice-table tbody"); var stype = $("#service_type").val(); var cvid = $("#customer-vehicle").val(); @@ -1388,7 +1388,7 @@ $(function() { data: { 'stype': stype, 'items': invoiceItems, - 'promo': promo, + 'promo': discount, 'cvid': cvid } }).done(function(response) { @@ -1397,7 +1397,7 @@ $(function() { var invoice = response.invoice; // populate totals - $("#invoice-promo-discount").val(invoice.discount); + $("#invoice-discount").val(invoice.discount); $("#invoice-price").val(invoice.price); $("#invoice-trade-in").val(invoice.trade_in); $("#invoice-vat").val(invoice.vat); diff --git a/templates/job-order/cmb.form.walkin.html.twig b/templates/job-order/cmb.form.walkin.html.twig index 8f764956..1a833e63 100644 --- a/templates/job-order/cmb.form.walkin.html.twig +++ b/templates/job-order/cmb.form.walkin.html.twig @@ -393,12 +393,12 @@
- + {% if ftags.invoice_edit %} - - + + {% else %} - + {% endif %}
@@ -936,8 +936,8 @@ var vdata = false; generateInvoice(); }); - // update invoice when promo is changed - $("#invoice-promo").change(function() { + // update invoice when discount is changed + $("#invoice-discount").change(function() { generateInvoice(); }); @@ -948,7 +948,7 @@ var vdata = false; // reset the invoice table $("#btn-reset-invoice").click(function() { - $("#invoice-promo").prop('selectedIndex', 0); + $("#invoice-discount").prop('selectedIndex', 0); invoiceItems = []; generateInvoice(); }); @@ -959,7 +959,7 @@ var vdata = false; }); function generateInvoice() { - var promo = $("#invoice-promo").val(); + var discount = $("#invoice-discount").val(); var table = $("#invoice-table tbody"); var stype = $("#service_type").val(); var cvid = $("#customer-vehicle").val(); @@ -971,7 +971,7 @@ var vdata = false; data: { 'stype': stype, 'items': invoiceItems, - 'promo': promo, + 'promo': discount, 'cvid': cvid } }).done(function(response) { @@ -980,7 +980,7 @@ var vdata = false; var invoice = response.invoice; // populate totals - $("#invoice-promo-discount").val(invoice.discount); + $("#invoice-discount").val(invoice.discount); $("#invoice-price").val(invoice.price); $("#invoice-trade-in").val(invoice.trade_in); $("#invoice-vat").val(invoice.vat); From 115c207868943853a14cdccffd9569772e90a923 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 17 Feb 2020 12:21:18 +0000 Subject: [PATCH 06/12] Add sending of service charge ids to generate invoice. #341 --- .../job-order/cmb.form.onestep.html.twig | 56 +++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 1c1074e7..7d0e3f31 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -1301,6 +1301,7 @@ $(function() { }); var invoiceItems = []; + var sc_array = []; // populate invoiceItems if editing so that we don't lose the battery {% if mode in ['open-edit', 'onestep-edit', 'walk-in-edit'] %} @@ -1377,26 +1378,31 @@ $(function() { generateInvoice(); }); - function generateInvoice() { - var discount = $("#invoice-discount").val(); - var table = $("#invoice-table tbody"); + function generateInvoice() { + var discount = $("#invoice-discount").val(); + var table = $("#invoice-table tbody"); var stype = $("#service_type").val(); var cvid = $("#customer-vehicle").val(); - // generate invoice values - $.ajax({ - method: "POST", - url: "{{ url('jo_gen_invoice') }}", - data: { + $.each(sc_array, function(index){ + console.log('generateInvoice ' + this.id); + }); + + // generate invoice values + $.ajax({ + method: "POST", + url: "{{ url('jo_gen_invoice') }}", + data: { 'stype': stype, - 'items': invoiceItems, - 'promo': discount, - 'cvid': cvid - } - }).done(function(response) { + 'items': invoiceItems, + 'promo': discount, + 'cvid': cvid, + 'service_charges': sc_array, + } + }).done(function(response) { // mark as invoice changed $("#invoice-change").val(1); - var invoice = response.invoice; + var invoice = response.invoice; // populate totals $("#invoice-discount").val(invoice.discount); @@ -1649,9 +1655,9 @@ $(function() { var html = '
'; html += '
'; html += '
'; - html += ''; {% for key, sc in service_charges %} - html += ''; + html += ''; {% endfor %} html += ''; html += '
'; @@ -1666,6 +1672,9 @@ $(function() { $('#sc-section').append(html); + // clear the sc_array + sc_array.length = 0; + // trigger change in select $('#sc-section').find('.sc-select').last().change(); return false; @@ -1682,7 +1691,22 @@ $(function() { $('body').on('change', '.sc-select', function(e) { var amount = $(this).children('option:selected').data('amount'); $(this).closest('.row').find('.sc-amount').val(amount); + + // clear the sc_array + sc_array.length = 0; + + // get the service charges + $('.sc-select').each(function() { + var id = $(this).children('option:selected').val(); + sc_array.push({ + id: id, + }); + + }); + + generateInvoice(); }); + }); {% endblock %} From f3f941e0a002aee867f26619136d33d87be19304 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 17 Feb 2020 13:24:32 +0000 Subject: [PATCH 07/12] Add service charges to invoice generation. #341 --- src/Controller/JobOrderController.php | 4 ++ src/Ramcar/InvoiceCriteria.php | 15 ++++++ .../InvoiceGenerator/CMBInvoiceGenerator.php | 49 +++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index d50471fe..c06383c7 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -694,6 +694,7 @@ class JobOrderController extends Controller $items = $req->request->get('items'); $promo_id = $req->request->get('promo'); $cvid = $req->request->get('cvid'); + $service_charges = $req->request->get('service_charges'); $em = $this->getDoctrine()->getManager(); @@ -740,6 +741,9 @@ class JobOrderController extends Controller // TODO: this snippet should be in the invoice generator $error = $ic->validateDiscount($criteria, $promo_id); + // process service charges + $error = $ic->invoiceServiceCharges($criteria, $service_charges); + if (!$error) $error = $ic->invoiceBatteries($criteria, $items); diff --git a/src/Ramcar/InvoiceCriteria.php b/src/Ramcar/InvoiceCriteria.php index 49290e33..6665226d 100644 --- a/src/Ramcar/InvoiceCriteria.php +++ b/src/Ramcar/InvoiceCriteria.php @@ -5,6 +5,7 @@ namespace App\Ramcar; use App\Entity\Battery; use App\Entity\Promo; use App\Entity\CustomerVehicle; +use App\Entity\ServiceCharge; class InvoiceCriteria { @@ -13,6 +14,7 @@ class InvoiceCriteria protected $cv; protected $flag_coolant; protected $discount; + protected $service_charges; // entries are battery and trade-in combos protected $entries; @@ -25,6 +27,7 @@ class InvoiceCriteria $this->cv = null; $this->flag_coolant = false; $this->discount = 0; + $this->service_charges = []; } public function setServiceType($stype) @@ -138,4 +141,16 @@ class InvoiceCriteria { return $this->discount; } + + public function addServiceCharge(ServiceCharge $service_charge) + { + $this->service_charges[] = $service_charge; + return $this; + } + + public function getServiceCharges() + { + return $this->service_charges; + } + } diff --git a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php index cb404c6c..405dfe33 100644 --- a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php @@ -18,6 +18,7 @@ use App\Entity\Invoice; use App\Entity\InvoiceItem; use App\Entity\Battery; use App\Entity\User; +use App\Entity\ServiceCharge; use App\Service\InvoiceGeneratorInterface; @@ -105,6 +106,13 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface // break; } + // process service charges if any + $service_charges = $criteria->getServiceCharges(); + if (count($service_charges) > 0) + { + $this->processServiceCharges($total, $criteria, $invoice); + } + // get current user $user = $this->security->getUser(); if ($user != null) @@ -286,6 +294,28 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface return null; } + public function invoiceServiceCharges(InvoiceCriteria $criteria, $service_charges) + { + if (!empty($service_charges)) + { + foreach ($service_charges as $service_charge) + { + // check if valid service charge + $sc = $this->em->getRepository(ServiceCharge::class)->find($service_charge['id']); + + if (empty($sc)) + { + $error = 'Invalid service charge specified.'; + return $error; + } + + $criteria->addServiceCharge($sc); + } + } + + return null; + } + protected function processEntries(&$total, InvoiceCriteria $criteria, Invoice $invoice) { @@ -604,4 +634,23 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface $total['vat'] = $vat; } + protected function processServiceCharges(&$total, InvoiceCriteria $criteria, Invoice $invoice) + { + $service_charges = $criteria->getServiceCharges(); + + foreach ($service_charges as $service_charge) + { + $amount = $service_charge->getAmount(); + + $total['total_price'] += $amount; + // add item + $item = new InvoiceItem(); + $item->setInvoice($invoice) + ->setTitle('Service Charge - ' . $service_charge->getName()) + ->setQuantity(1) + ->setPrice($amount); + + $invoice->addItem($item); + } + } } From 0cff722c6a2b2a6c39fffcd4188e6f844f42576d Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 17 Feb 2020 14:18:19 +0000 Subject: [PATCH 08/12] Add saving of service charges to JO and Invoice Item. #341 --- .../InvoiceGenerator/CMBInvoiceGenerator.php | 14 ++++++++++++-- src/Service/JobOrderHandler/CMBJobOrderHandler.php | 6 ++++++ templates/job-order/cmb.form.onestep.html.twig | 3 +++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php index 405dfe33..dcd6946d 100644 --- a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php @@ -161,11 +161,20 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface $ierror = $this->invoiceBatteries($criteria, $invoice_items); } + // get the meta for service charges + $service_charges = $jo->getMeta('service_charges'); + if ($service_charges != null) + { + $service_charges = $jo->getMeta('service_charges'); + + $this->invoiceServiceCharges($criteria, $service_charges); + } + + if ($ierror) { $error_array['invoice'] = $ierror; } - else { // generate the invoice @@ -641,12 +650,13 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface foreach ($service_charges as $service_charge) { $amount = $service_charge->getAmount(); + $title = 'Service Charge - ' . $service_charge->getName(); $total['total_price'] += $amount; // add item $item = new InvoiceItem(); $item->setInvoice($invoice) - ->setTitle('Service Charge - ' . $service_charge->getName()) + ->setTitle($title) ->setQuantity(1) ->setPrice($amount); diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index adb0447d..bcef0c59 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -531,6 +531,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $error_array['invoice_discount'] = 'Invalid discount specified'; // get list of service charges + $service_charges = $req->request->get('service_charges'); if (empty($error_array)) { @@ -563,6 +564,11 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $jo->addMeta('discount', $discount); + if (!empty($service_charges)) + { + $jo->addMeta('service_charges', $service_charges); + } + // check if user is null, meaning call to create came from API if ($user != null) { diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 7d0e3f31..2f25a8cc 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -994,6 +994,9 @@ $(function() { // add invoice items to data fields['invoice_items'] = invoiceItems; + // add service charges to data + fields['service_charges'] = sc_array; + {% if mode in ['update-processing', 'update-reassign-hub'] %} // add selected hub to data fields['hub'] = selectedHub; From f9c304422cc63088b058208c348c04becd030e7b Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 17 Feb 2020 14:43:21 +0000 Subject: [PATCH 09/12] Add fix when saving an invoice with no service charges. #341 --- src/Entity/JobOrder.php | 5 +++++ .../InvoiceGenerator/CMBInvoiceGenerator.php | 9 ++++++--- templates/job-order/cmb.form.onestep.html.twig | 15 ++++++++++++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index 08a1f15a..ed60c7ac 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -821,4 +821,9 @@ class JobOrder { return $this->meta[$id]; } + + public function getAllMeta() + { + return $this->meta; + } } diff --git a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php index dcd6946d..180f7d1f 100644 --- a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php @@ -162,12 +162,15 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface } // get the meta for service charges - $service_charges = $jo->getMeta('service_charges'); - if ($service_charges != null) + if (array_key_exists('service_charges', $jo->getAllMeta())) { $service_charges = $jo->getMeta('service_charges'); + if ($service_charges != null) + { + $service_charges = $jo->getMeta('service_charges'); - $this->invoiceServiceCharges($criteria, $service_charges); + $this->invoiceServiceCharges($criteria, $service_charges); + } } diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 2f25a8cc..3b87f59e 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -1373,6 +1373,7 @@ $(function() { $("#btn-reset-invoice").click(function() { $("#invoice-discount").prop('selectedIndex', 0); invoiceItems = []; + sc_array = []; generateInvoice(); }); @@ -1688,6 +1689,19 @@ $(function() { console.log('removing service charge'); $(this).closest('.row').remove(); + + sc_array.length = 0; + + // get the service charges + $('.sc-select').each(function() { + var id = $(this).children('option:selected').val(); + sc_array.push({ + id: id, + }); + }); + + generateInvoice(); + return false; }); @@ -1704,7 +1718,6 @@ $(function() { sc_array.push({ id: id, }); - }); generateInvoice(); From 504d91062195deb17a1c7f843e589af1fa4bca37 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 17 Feb 2020 14:56:35 +0000 Subject: [PATCH 10/12] Add saving to meta even if service charges are blank. #341 --- src/Entity/JobOrder.php | 4 ---- src/Service/InvoiceGenerator/CMBInvoiceGenerator.php | 10 +++------- src/Service/JobOrderHandler/CMBJobOrderHandler.php | 6 +----- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index ed60c7ac..8484ac8d 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -822,8 +822,4 @@ class JobOrder return $this->meta[$id]; } - public function getAllMeta() - { - return $this->meta; - } } diff --git a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php index 180f7d1f..cc1cb020 100644 --- a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php @@ -162,18 +162,14 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface } // get the meta for service charges - if (array_key_exists('service_charges', $jo->getAllMeta())) + $service_charges = $jo->getMeta('service_charges'); + if (!empty($service_charges)) { $service_charges = $jo->getMeta('service_charges'); - if ($service_charges != null) - { - $service_charges = $jo->getMeta('service_charges'); - $this->invoiceServiceCharges($criteria, $service_charges); - } + $this->invoiceServiceCharges($criteria, $service_charges); } - if ($ierror) { $error_array['invoice'] = $ierror; diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index bcef0c59..67880513 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -563,11 +563,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface ->setRider($rider); $jo->addMeta('discount', $discount); - - if (!empty($service_charges)) - { - $jo->addMeta('service_charges', $service_charges); - } + $jo->addMeta('service_charges', $service_charges); // check if user is null, meaning call to create came from API if ($user != null) From 9a24b08bdd5a48ecab0ee770fe3727324fca7429 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Tue, 18 Feb 2020 01:15:14 +0000 Subject: [PATCH 11/12] Display existing service charges when editing one step JO. #341 --- .../JobOrderHandler/CMBJobOrderHandler.php | 1 + .../job-order/cmb.form.onestep.html.twig | 36 +++++++++---------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 67880513..72fd4883 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -1407,6 +1407,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['mode'] = 'onestep-edit'; $params['cvid'] = $obj->getCustomerVehicle()->getID(); $params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID(); + $params['jo_service_charges'] = $obj->getMeta('service_charges'); $this->fillDropdownParameters($params); $this->fillFormTags($params); diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 3b87f59e..d58b707a 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -490,25 +490,25 @@
- +
+ +
+
+ +
+
+ {% endfor %}
From ebc6867c8f250b4b0ace81e39ed4d91c83b6da7a Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Tue, 18 Feb 2020 01:42:16 +0000 Subject: [PATCH 12/12] Edit for one step JO with service charges. #341 --- src/Service/JobOrderHandler/CMBJobOrderHandler.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 72fd4883..36062f7e 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -524,14 +524,14 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface } // get discount and set to meta - $discount = $req->request->get('invoice_discount'); + $discount = $req->request->get('invoice_discount', []); // check if discount is greater than 50 or negative number if (($discount > 50) || ($discount < 0)) $error_array['invoice_discount'] = 'Invalid discount specified'; // get list of service charges - $service_charges = $req->request->get('service_charges'); + $service_charges = $req->request->get('service_charges', []); if (empty($error_array)) {