Refactor submission of updated job order. #265

This commit is contained in:
Korina Cordero 2019-09-25 02:20:16 +00:00
parent ca97897a2a
commit b129609d53
2 changed files with 56 additions and 113 deletions

View file

@ -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');
$ierror = $this->invoicePromo($em, $criteria, $req->request->get('invoice_promo'));
// call service to generate job order and invoice
$joc->generateJobOrder($obj, $promo_id, $invoice_items, $error_array);
// 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);
}

View file

@ -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)