diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index 4b02a402..bc18a81c 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -350,10 +350,11 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface // validate and set job order object - $this->validateJobOrder($req, $error_array); + $jo_status = JOStatus::PENDING; + $this->validateJobOrder($req, $error_array, $jo_status); if (empty($error_array)) { - $this->setJobOrderObject($em, $req, $jo, JOStatus::PENDING); + $this->setJobOrderObject($req, $jo, $jo_status); // call service to generate invoice $invoice_items = $req->request->get('invoice_items', []); @@ -432,10 +433,10 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface throw $this->createNotFoundException('The item does not exist'); // validate and set job order object - $this->validateJobOrder($req, $error_array); + $this->validateJobOrder($req, $error_array, $obj->getStatus()); if (empty($error_array)) { - $this->setJobOrderObject($em, $req, $obj, $obj->getStatus()); + $this->setJobOrderObject($req, $obj, $obj->getStatus()); // did they change invoice? $invoice_items = $req->request->get('invoice_items', []); @@ -486,6 +487,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $em = $this->em; $obj = $em->getRepository(JobOrder::class)->find($id); $processor = $obj->getProcessedBy(); + $user = $this->security->getUser(); // check if we're the one processing, return error otherwise if ($processor == null) @@ -510,7 +512,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } // validate - $this->validateJobOrder($req, $error_array); + $jo_status = JOStatus::RIDER_ASSIGN; + $this->validateJobOrder($req, $error_array, $jo_status); // check if hub is set if (empty($req->request->get('hub'))) @@ -525,7 +528,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface if (empty($error_array)) { - $this->setJobOrderObject($em, $req, $obj, JOStatus::RIDER_ASSIGN); + $this->setJobOrderObject($req, $obj, $jo_status); // validate $errors = $this->validator->validate($obj); @@ -544,7 +547,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ], 422); } - $this->jo_manager->processJobOrderEvents($jo, JOEventType::HUB_ASSIGN); + $this->jo_manager->processJobOrderEvents($obj, JOEventType::HUB_ASSIGN); // validated! save the entity $em->flush(); @@ -2752,61 +2755,79 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } } - protected function validateJobOrder(Request $req, &$error_array) + protected function validateJobOrder(Request $req, &$error_array, $jo_status) { - // check if lat and lng are provided - if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) { - $error_array['coordinates'] = 'No map coordinates provided. Please click on a location on the map.'; - } + // new job order + if ($jo_status == JOStatus::PENDING) + { + // check if service is battery sales + $stype = $req->request->get('service_type'); + if ($stype == ServiceType::BATTERY_REPLACEMENT_NEW) + { + // check if trade in + $is_trade_in = $req->request->get('invoice_trade_in_type'); + if (empty($is_trade_in)) + { + if (empty($req->request->get('no_trade_in_reason'))) + $error_array['no_trade_in_reason'] = 'No trade in reason required.'; + } + } + // check if customer vehicle is set + if (empty($req->request->get('customer_vehicle'))) + $error_array['customer_vehicle'] = 'No vehicle selected.'; + else + { + // get customer vehicle + $cust_vehicle = $this->em->getRepository(CustomerVehicle::class)->find($req->request->get('customer_vehicle')); - // check if customer vehicle is set - if (empty($req->request->get('customer_vehicle'))) { - $error_array['customer_vehicle'] = 'No vehicle selected.'; - } else { - // get customer vehicle - $cust_vehicle = $this->em->getRepository(CustomerVehicle::class)->find($req->request->get('customer_vehicle')); + if (empty($cust_vehicle)) + $error_array['customer_vehicle'] = 'Invalid vehicle specified.'; + } + // check if reference JO is set and validate + if (!empty($req->request->get('ref_jo'))) + { + // get reference JO + $ref_jo = $em->getRepository(JobOrder::class)->find($req->request->get('ref_jo')); - if (empty($cust_vehicle)) { - $error_array['customer_vehicle'] = 'Invalid vehicle specified.'; + if (empty($ref_jo)) + $error_array['ref_jo'] = 'Invalid reference job order specified.'; } } + // assign hub/dispatch job order + if ($jo_status == JOStatus::RIDER_ASSIGN) + { + // check if hub is set + if (empty($req->request->get('hub'))) + $error_array['hub'] = 'No hub selected.'; + else + { + // get hub + $hub = $this->em->getRepository(Hub::class)->find($req->request->get('hub')); + + if (empty($hub)) + $error_array['hub'] = 'Invalid hub specified.'; + } + } + + // check if lat and lng are provided + if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) + $error_array['coordinates'] = 'No map coordinates provided. Please click on a location on the map.'; + // check if landmark is set if (empty($req->request->get('landmark'))) $error_array['landmark'] = 'Landmark is required.'; - // check if service is battery sales - $stype = $req->request->get('service_type'); - if ($stype == ServiceType::BATTERY_REPLACEMENT_NEW) - { - // check if trade in - $is_trade_in = $req->request->get('invoice_trade_in_type'); - if (empty($is_trade_in)) - { - if (empty($req->request->get('no_trade_in_reason'))) - $error_array['no_trade_in_reason'] = 'No trade in reason required.'; - } - } - - // check if reference JO is set and validate - if (!empty($req->request->get('ref_jo'))) { - // get reference JO - $ref_jo = $em->getRepository(JobOrder::class)->find($req->request->get('ref_jo')); - - if (empty($ref_jo)) { - $error_array['ref_jo'] = 'Invalid reference job order specified.'; - } - } } - protected function setJobOrderObject(EntityManagerInterface $em, Request $req, JobOrder $jo, $jo_status) + protected function setJobOrderObject(Request $req, JobOrder $jo, $jo_status) { // new job order if ($jo_status == JOStatus::PENDING) { // these are fields that are only set when new job order // get customer vehicle - $cust_vehicle = $em->getRepository(CustomerVehicle::class)->find($req->request->get('customer_vehicle')); + $cust_vehicle = $this->em->getRepository(CustomerVehicle::class)->find($req->request->get('customer_vehicle')); $jo->setCustomer($cust_vehicle->getCustomer()) ->setCustomerVehicle($cust_vehicle) @@ -2821,7 +2842,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface // check if reference JO is set if (!empty($req->request->get('ref_jo'))) { // get reference JO - $ref_jo = $em->getRepository(JobOrder::class)->find($req->request->get('ref_jo')); + $ref_jo = $this->em->getRepository(JobOrder::class)->find($req->request->get('ref_jo')); $jo->setReferenceJO($ref_jo); } } @@ -2846,13 +2867,13 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $fac_by = null; if (!empty($fac_by_id)) { - $fac_by = $em->getRepository(Hub::class)->find($fac_by_id); + $fac_by = $this->em->getRepository(Hub::class)->find($fac_by_id); if (empty($fac_by)) $fac_by = null; } // get hub - $hub = $em->getRepository(Hub::class)->find($req->request->get('hub')); + $hub = $this->em->getRepository(Hub::class)->find($req->request->get('hub')); $jo->setFacilitatedType($fac_type) ->setFacilitatedBy($fac_by) diff --git a/src/Service/JobOrderManager.php b/src/Service/JobOrderManager.php index 0ee7b8fb..a58a5581 100644 --- a/src/Service/JobOrderManager.php +++ b/src/Service/JobOrderManager.php @@ -122,9 +122,10 @@ class JobOrderManager $em->persist($hub_assign_event); } } - // TODO: check for other JO event types. See if all other event types have no special processing - if ($jo_event_type == JOEventType::CANCEL) + else { + // TODO: check for other JO event types. See if all other event types have no special processing + // cancel, edit, dispatch are the same // add event log for JO $event = new JOEvent(); $event->setDateHappen(new DateTime()) @@ -138,22 +139,6 @@ class JobOrderManager $em->persist($event); } - if ($jo_event_type == JOEventType::OPEN_EDIT) - { - // add event log for JO - $event = new JOEvent(); - $event->setDateHappen(new DateTime()) - ->setTypeID($jo_event_type) - ->setJobOrder($jo); - - $user = $this->security->getUser(); - // check if user is User or APIUser - if ($user instanceof User) - $event->setUser($user); - - $em->persist($event); - } - } public function removeCustomerTag(JobOrder $jo, Customer $customer, $customer_tags, $username)