diff --git a/src/Controller/ResqAPI/JobOrderController.php b/src/Controller/ResqAPI/JobOrderController.php index bad7799c..6ac4dd23 100644 --- a/src/Controller/ResqAPI/JobOrderController.php +++ b/src/Controller/ResqAPI/JobOrderController.php @@ -32,7 +32,6 @@ use App\Service\MQTTClient; use App\Service\GeofenceTracker; use App\Service\InventoryManager; use App\Service\RiderAssignmentHandlerInterface; -use App\Service\PromoLogger; use App\Service\HubSelector; use App\Service\HubDistributor; use App\Service\HubFilterLogger; diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index 259c01d4..f569f977 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -355,8 +355,6 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface { // get customer vehicle $cust_vehicle = $em->getRepository(CustomerVehicle::class)->find($req->request->get('customer_vehicle')); - // TODO: check status before saving since JO might already - // have a status that needs to be retained $this->setJobOrderObject($req, $jo, $cust_vehicle); // call service to generate invoice @@ -378,17 +376,21 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $error_array[$error->getPropertyPath()] = $error->getMessage(); } - // check if errors are found - if (empty($error_array)) - { - // validated, no error. save the job order and customer - $em->persist($jo); - $em->persist($customer); - - $this->jo_manager->processJobOrderEvents($jo, JOEventType::CREATE); - - $em->flush(); + // check if any errors were found + if (!empty($error_array)) { + // return validation failure response + return $this->json([ + 'success' => false, + 'errors' => $error_array + ], 422); } + + $em->persist($jo); + $em->persist($customer); + + $this->jo_manager->processJobOrderEvents($jo, JOEventType::CREATE); + + $em->flush(); } $data['error_array'] = $error_array; @@ -431,69 +433,15 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface if (empty($obj)) throw $this->createNotFoundException('The item does not exist'); - // 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 customer is not willing to wait - $will_wait = $req->request->get('flag_willing_to_wait'); - $reason = ''; - $more_reason = ''; - if ($will_wait == WillingToWaitContent::NOT_WILLING_TO_WAIT) + // validate and set job order object + $this->validateJobOrder($req, $error_array); + if (empty($error_array)) { - // get the reason and text - $reason = $req->request->get('no_wait_reason'); - $more_reason = $req->request->get('not_wait_notes'); - } - - // check if service type is battery sales - $stype = $req->request->get('service_type'); - $no_trade_in_reason = ''; - 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)) - { - $no_trade_in_reason = $req->request->get('no_trade_in_reason'); - - if (empty($no_trade_in_reason)) - $error_array['no_trade_in_reason'] = 'No trade in reason required.'; - } - } - - if (empty($error_array)) - { - // get current user - $user = $this->security->getUser(); - - // coordinates - $point = new Point($req->request->get('coord_lng'), $req->request->get('coord_lat')); - - // set and save values - $obj->setDateSchedule(DateTime::createFromFormat("d M Y h:i A", $req->request->get('date_schedule_date') . " " . $req->request->get('date_schedule_time'))) - ->setCoordinates($point) - ->setAdvanceOrder($req->request->get('flag_advance') ?? false) - ->setServiceType($stype) - ->setWarrantyClass($req->request->get('warranty_class')) - ->setSource($req->request->get('source')) - ->setDeliveryInstructions($req->request->get('delivery_instructions')) - ->setTier1Notes($req->request->get('tier1_notes')) - ->setTier2Notes($req->request->get('tier2_notes')) - ->setDeliveryAddress($req->request->get('delivery_address')) - ->setORName($req->request->get('or_name')) - ->setPromoDetail($req->request->get('promo_detail')) - ->setModeOfPayment($req->request->get('mode_of_payment')) - ->setLandmark($req->request->get('landmark')) - ->setWillWait($req->request->get('flag_willing_to_wait')) - ->setReasonNotWait($reason) - ->setNotWaitingNotes($more_reason) - ->setNoTradeInReason($no_trade_in_reason); + // get customer vehicle + $cust_vehicle = $em->getRepository(CustomerVehicle::class)->find($req->request->get('customer_vehicle')); + // TODO: check status before saving since JO might already + // have a status that needs to be retained + $this->setJobOrderObject($req, $obj, $cust_vehicle); // did they change invoice? $invoice_items = $req->request->get('invoice_items', []); @@ -521,20 +469,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ], 422); } - // the event - $event = new JOEvent(); - $event->setDateHappen(new DateTime()) - ->setTypeID(JOEventType::OPEN_EDIT) - ->setJobOrder($obj); - - error_log('open edit?'); - - if ($user != null) - { - $event->setUser($user); - } - - $em->persist($event); + $this->jo_manager->processJobOrderEvents($obj, JOEventType::OPEN_EDIT); // validated! save the entity $em->flush(); @@ -548,7 +483,6 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } return $data; - } // dispatch job order @@ -2977,7 +2911,6 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setCustomer($cust_vehicle->getCustomer()) ->setCustomerVehicle($cust_vehicle) ->setSource($req->request->get('source')) - ->setStatus(JOStatus::PENDING) ->setDeliveryInstructions($req->request->get('delivery_instructions')) ->setTier1Notes($req->request->get('tier1_notes')) ->setTier2Notes($req->request->get('tier2_notes')) @@ -2991,6 +2924,13 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setNotWaitingNotes($more_reason) ->setNoTradeInReason($no_trade_in_reason); + // check if jo status is null + if ($jo->getStatus() == null) + { + // new JO + $jo->setStatus(JOStatus::PENDING); + } + // get current user $user = $this->security->getUser(); if ($user != null) diff --git a/src/Service/JobOrderManager.php b/src/Service/JobOrderManager.php index 8e9d2db7..0ee7b8fb 100644 --- a/src/Service/JobOrderManager.php +++ b/src/Service/JobOrderManager.php @@ -122,7 +122,7 @@ class JobOrderManager $em->persist($hub_assign_event); } } - // TODO: check for other JO event types + // TODO: check for other JO event types. See if all other event types have no special processing if ($jo_event_type == JOEventType::CANCEL) { // add event log for JO @@ -138,6 +138,22 @@ 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)