From b129609d53c83505307f404cdcd4b50e2e532f39 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 25 Sep 2019 02:20:16 +0000 Subject: [PATCH] Refactor submission of updated job order. #265 --- src/Controller/JobOrderController.php | 79 ++-------------- .../ResqJobOrderGenerator.php | 90 +++++++++++-------- 2 files changed, 56 insertions(+), 113 deletions(-) diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index d77d7ece..fe02416d 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -251,7 +251,7 @@ class JobOrderController extends Controller return $this->render('job-order/form.html.twig', $params); } - public function openEditSubmit(Request $req, ValidatorInterface $validator, InvoiceGeneratorInterface $ic, $id) + public function openEditSubmit(Request $req, ValidatorInterface $validator, JobOrderGeneratorInterface $joc, $id) { $this->denyAccessUnlessGranted('jo_open.edit', null, 'No access.'); @@ -296,68 +296,11 @@ class JobOrderController extends Controller // did they change invoice? $invoice_items = $req->request->get('invoice_items', []); - $invoice_change = $req->request->get('invoice_change', 0); - if ($invoice_change) - { - // instantiate invoice criteria - $criteria = new InvoiceCriteria(); - $criteria->setServiceType($stype) - ->setCustomerVehicle($obj->getCustomerVehicle()); + $promo_id = $req->request->get('invoice_promo'); + + // call service to generate job order and invoice + $joc->generateJobOrder($obj, $promo_id, $invoice_items, $error_array); - $ierror = $this->invoicePromo($em, $criteria, $req->request->get('invoice_promo')); - - // check for trade in so we can mark it for mobile app - foreach ($invoice_items as $item) - { - // get first trade-in - if (!empty($item['trade_in'])) - { - $obj->setTradeInType($item['trade_in']); - break; - } - } - - if (!$ierror) - $ierror = $this->invoiceBatteries($em, $criteria, $invoice_items); - - if ($ierror) - { - $error_array['invoice'] = $ierror; - } - else - { - // generate the invoice - $iobj = $ic->generateInvoice($criteria); - - // validate - $ierrors = $validator->validate($iobj); - - // add errors to list - foreach ($ierrors as $error) { - $error_array[$error->getPropertyPath()] = $error->getMessage(); - } - - // remove previous invoice - $old_invoice = $obj->getInvoice(); - $em->remove($old_invoice); - $em->flush(); - - // add invoice to JO - $obj->setInvoice($iobj); - - // persist invoice - $em->persist($iobj); - } - } - - - // validate - $errors = $validator->validate($obj); - - // add errors to list - foreach ($errors as $error) { - $error_array[$error->getPropertyPath()] = $error->getMessage(); - } } // check if any errors were found @@ -369,17 +312,6 @@ class JobOrderController extends Controller ], 422); } - // the event - $event = new JOEvent(); - $event->setDateHappen(new DateTime()) - ->setTypeID(JOEventType::OPEN_EDIT) - ->setUser($this->getUser()) - ->setJobOrder($obj); - $em->persist($event); - - // validated! save the entity - $em->flush(); - // return successful response return $this->json([ 'success' => 'Changes have been saved!' @@ -494,7 +426,6 @@ class JobOrderController extends Controller $invoice_items = $req->request->get('invoice_items', []); $promo_id = $req->request->get('invoice_promo'); - error_log('number of invoice items ' . count($invoice_items)); $joc->generateJobOrder($obj, $promo_id, $invoice_items, $error_array); } diff --git a/src/Service/JobOrderGenerator/ResqJobOrderGenerator.php b/src/Service/JobOrderGenerator/ResqJobOrderGenerator.php index 949a4a62..38e347bc 100644 --- a/src/Service/JobOrderGenerator/ResqJobOrderGenerator.php +++ b/src/Service/JobOrderGenerator/ResqJobOrderGenerator.php @@ -37,9 +37,47 @@ class ResqJobOrderGenerator implements JobOrderGeneratorInterface public function generateJobOrder(JobOrder $jo, $promo_id, $invoice_items, &$error_array) { // TODO: data validation to be moved here - $validator = $this->validator; - $em = $this->em; + + $this->processInvoice($jo, $promo_id, $invoice_items, $error_array); + // validate + $errors = $this->validator->validate($jo); + + // add errors to list + foreach ($errors as $error) { + $error_array[$error->getPropertyPath()] = $error->getMessage(); + } + + // check if errors are found + if (empty($error_array)) + { + // validated, no error. save the job order + $this->em->persist($jo); + + // get current user + $user = $this->security->getUser(); + + // the event + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::CREATE) + ->setJobOrder($jo); + + if ($user != null) + { + $event->setUser($user); + } + + $this->em->persist($event); + + $this->em->flush(); + } + + return $error_array; + } + + protected function processInvoice($jo, $promo_id, $invoice_items, &$error_array) + { // instantiate the invoice criteria $criteria = new InvoiceCriteria(); $criteria->setServiceType($jo->getServiceType()) @@ -73,54 +111,28 @@ class ResqJobOrderGenerator implements JobOrderGeneratorInterface $iobj = $this->ic->generateInvoice($criteria); // validate - $ierrors = $validator->validate($iobj); + $ierrors = $this->validator->validate($iobj); // add errors to list foreach ($ierrors as $error) { $error_array[$error->getPropertyPath()] = $error->getMessage(); } + // check if invoice already exists for JO + $old_invoice = $jo->getInvoice(); + if ($old_invoice != null) + { + // remove old invoice + $this->em->remove($old_invoice); + $this->em->flush(); + } + // add invoice to JO $jo->setInvoice($iobj); - $em->persist($iobj); + $this->em->persist($iobj); } - - // validate - $errors = $validator->validate($jo); - - // add errors to list - foreach ($errors as $error) { - $error_array[$error->getPropertyPath()] = $error->getMessage(); - } - - // check if errors are found - if (empty($error_array)) - { - // validated, no error. save the job order - $em->persist($jo); - - // get current user - $user = $this->security->getUser(); - - // the event - $event = new JOEvent(); - $event->setDateHappen(new DateTime()) - ->setTypeID(JOEventType::CREATE) - ->setJobOrder($jo); - - if ($user != null) - { - $event->setUser($user); - } - - $em->persist($event); - - $em->flush(); - } - - return $error_array; } protected function invoicePromo(InvoiceCriteria $criteria, $promo_id)