diff --git a/src/Controller/CAPI/RiderAppController.php b/src/Controller/CAPI/RiderAppController.php index c88aa72d..a980be2f 100644 --- a/src/Controller/CAPI/RiderAppController.php +++ b/src/Controller/CAPI/RiderAppController.php @@ -1207,15 +1207,81 @@ class RiderAppController extends ApiController if (!isset($items['jo_id'])) return new APIResponse(false, 'Missing parameter(s): jo_id'); + // validate jo_id $jo_id = $items['jo_id']; if (empty($jo_id) || $jo_id == null) return new APIResponse(false, 'Missing parameter(s): jo_id'); - // validate the trade in items first - $ti_items = $items['trade_in_items']; - $msg = $this->validateTradeInItems($em, $ti_items); - if (!empty($msg)) - return new APIResponse(false, $msg); + // get the job order + $jo = $em->getRepository(JobOrder::class)->find($jo_id); + + // check if we have trade in items + $ti_items = []; + if (isset($items['trade_in_items'])) + { + // validate the trade in items first + $ti_items = $items['trade_in_items']; + $msg = $this->validateTradeInItems($em, $ti_items); + if (!empty($msg)) + return new APIResponse(false, $msg); + } + + // get the service type + if (!isset($items['stype_id'])) + return new APIResponse(false, 'Missing parameter(s): stype_id'); + + // validate service type + $stype_id = $items['stype_id']; + if (!ServiceType::validate($stype_id)) + return new APIResponse(false, 'Invalid service type - ' . $stype_id); + + // save service type + $jo->setServiceType($stype_id); + + // validate promo if any. Promo not required + $promo = null; + if (isset($items['promo_id'])) + { + $promo_id = $items['promo_id']; + $promo = $em->getRepository(Promo::class)->find($promo_id); + if ($promo == null) + return new APIResponse(false, 'Invalid promo id - ' . $promo_id); + } + + // get other parameters, if any: has motolite battery, has warranty doc, with coolant, payment method + if (isset($items['flag_motolite_battery'])) + { + // get customer vehicle from jo + $cv = $jo->getCustomerVehicle(); + $has_motolite = $items['flag_motolite_battery']; + if ($has_motolite == 'true') + $cv->setHasMotoliteBattery(true); + else + $cv->setHasMotoliteBattery(false); + + $em->persist($cv); + + } + if (isset($items['flag_warranty_doc'])) + { + // TODO: what do we do? + } + if (isset($items['flag_coolant'])) + { + $has_coolant = $items['flag_coolant']; + if ($has_coolant == 'true') + $jo->setHasCoolant(true); + else + $jo->setHasCoolant(false); + + } + if (isset($items['mode_of_payment'])) + { + $payment_method = $items['payment_method']; + if (!ModeOfPayment::validate($payment_method)) + $payment_method = ModeOfPayment::CASH; + $jo->setModeOfPayment($payemnt_method); + } // get capi user $capi_user = $this->getUser(); @@ -1228,9 +1294,9 @@ class RiderAppController extends ApiController return new APIResponse(false, 'No rider found.'); // need to get the existing invoice items using jo id and invoice id - $existing_ii = $this->getInvoiceItems($em, $jo_id); + $existing_ii = $this->getInvoiceItems($em, $jo); - $this->generateUpdatedInvoice($em, $ic, $jo_id, $existing_ii, $ti_items); + $this->generateUpdatedInvoice($em, $ic, $jo, $existing_ii, $ti_items, $promo); $data = []; return new APIResponse(true, 'Job order updated.', $data); @@ -1378,11 +1444,9 @@ class RiderAppController extends ApiController return new APIResponse(true, 'Job order service changed.', $data); } - protected function generateUpdatedInvoice(EntityManagerInterface $em, InvoiceGeneratorInterface $ic, $jo_id, $existing_ii, $trade_in_items) + protected function generateUpdatedInvoice(EntityManagerInterface $em, InvoiceGeneratorInterface $ic, JobOrder $jo, + $existing_ii, $trade_in_items, $promo) { - // get the job order since we need info in the JO for the invoice criteria - $jo = $em->getRepository(JobOrder::class)->find($jo_id); - // get the service type $stype = $jo->getServiceType(); @@ -1392,18 +1456,27 @@ class RiderAppController extends ApiController // get the customer vehicle $cv = $jo->getCustomerVehicle(); - // get the promo id from existing invoice item - $promo_id = $existing_ii['promo_id']; - if ($promo_id == null) - $promo = null; - else - $promo = $em->getRepository(Promo::class)->find($promo_id); + // get coolant if any + $flag_coolant = $jo->hasCoolant(); + + // check if new promo is null + if ($promo == null) + { + // promo not updated from app so check existing invoice + // get the promo id from existing invoice item + $promo_id = $existing_ii['promo_id']; + if ($promo_id == null) + $promo = null; + else + $promo = $em->getRepository(Promo::class)->find($promo_id); + } // populate Invoice Criteria $icrit = new InvoiceCriteria(); $icrit->setServiceType($stype) ->setCustomerVehicle($cv) ->setSource($source) + ->setHasCoolant($flag_coolant) ->setIsTaxable(); // at this point, all information should be valid @@ -1461,8 +1534,9 @@ class RiderAppController extends ApiController $em->flush(); } - protected function getInvoiceItems(EntityManagerInterface $em, $jo_id) + protected function getInvoiceItems(EntityManagerInterface $em, JobOrder $jo) { + $jo_id = $jo->getID(); $conn = $em->getConnection(); // need to get the ordered battery id and quantity from invoice item diff --git a/src/InvoiceRule/Overheat.php b/src/InvoiceRule/Overheat.php index 4c06bddb..d33c219e 100644 --- a/src/InvoiceRule/Overheat.php +++ b/src/InvoiceRule/Overheat.php @@ -94,7 +94,7 @@ class Overheat implements InvoiceRuleInterface // find the service fee using the code // if we can't find the fee, return 0 - $fee = $this->em->getRepository(ServiceOffering::class)->findOneBy($code); + $fee = $this->em->getRepository(ServiceOffering::class)->findOneBy(['code' => $code]); if ($fee == null) return 0;