From a28b7ec6d09f28d7d3284f6cc522171a2132a57f Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 21 Jul 2021 09:47:03 +0000 Subject: [PATCH] Modify setting of JO object. #591 --- .../JobOrderHandler/ResqJobOrderHandler.php | 189 +++++++----------- 1 file changed, 75 insertions(+), 114 deletions(-) diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index f569f977..4b02a402 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -353,9 +353,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $this->validateJobOrder($req, $error_array); if (empty($error_array)) { - // get customer vehicle - $cust_vehicle = $em->getRepository(CustomerVehicle::class)->find($req->request->get('customer_vehicle')); - $this->setJobOrderObject($req, $jo, $cust_vehicle); + $this->setJobOrderObject($em, $req, $jo, JOStatus::PENDING); // call service to generate invoice $invoice_items = $req->request->get('invoice_items', []); @@ -437,11 +435,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $this->validateJobOrder($req, $error_array); if (empty($error_array)) { - // 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); + $this->setJobOrderObject($em, $req, $obj, $obj->getStatus()); // did they change invoice? $invoice_items = $req->request->get('invoice_items', []); @@ -492,7 +486,6 @@ 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) @@ -516,87 +509,23 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface // $error_array['dispatch'] = 'Could not dispatch. Job Order is not pending.'; } - // 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.'; - } + // validate + $this->validateJobOrder($req, $error_array); // check if hub is set if (empty($req->request->get('hub'))) - { $error_array['hub'] = 'No hub selected.'; - } else { // get hub $hub = $em->getRepository(Hub::class)->find($req->request->get('hub')); - if (empty($hub)) - { $error_array['hub'] = 'Invalid hub specified.'; - } - } - - // check facilitated type - $fac_type = $req->request->get('facilitated_type'); - if (!empty($fac_type)) - { - if (!FacilitatedType::validate($fac_type)) - $fac_type = null; - } - else - $fac_type = null; - - // check facilitated by - $fac_by_id = $req->request->get('facilitated_by'); - $fac_by = null; - if (!empty($fac_by_id)) - { - $fac_by = $em->getRepository(Hub::class)->find($fac_by_id); - if (empty($fac_by)) - $fac_by = null; - } - - // 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) - { - // get the reason and text - $reason = $req->request->get('no_wait_reason'); - $more_reason = $req->request->get('not_wait_notes'); } if (empty($error_array)) { - // 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($req->request->get('service_type')) - ->setWarrantyClass($req->request->get('warranty_class')) - ->setSource($req->request->get('source')) - ->setStatus(JOStatus::RIDER_ASSIGN) - ->setDeliveryInstructions($req->request->get('delivery_instructions')) - ->setTier1Notes($req->request->get('tier1_notes')) - ->setTier2Notes($req->request->get('tier2_notes')) - ->setDeliveryAddress($req->request->get('delivery_address')) - ->setFacilitatedType($fac_type) - ->setFacilitatedBy($fac_by) - ->setHub($hub) - ->setLandmark($req->request->get('landmark')) - ->setWillWait($req->request->get('flag_willing_to_wait')) - ->setReasonNotWait($reason) - ->setNotWaitingNotes($more_reason); + $this->setJobOrderObject($em, $req, $obj, JOStatus::RIDER_ASSIGN); // validate $errors = $this->validator->validate($obj); @@ -605,22 +534,17 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface foreach ($errors as $error) { $error_array[$error->getPropertyPath()] = $error->getMessage(); } - } - if (empty($error_array)) - { - // the event - $event = new JOEvent(); - $event->setDateHappen(new DateTime()) - ->setTypeID(JOEventType::HUB_ASSIGN) - ->setJobOrder($obj); - - if ($user != null) - { - $event->setUser($user); + // 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($event); + $this->jo_manager->processJobOrderEvents($jo, JOEventType::HUB_ASSIGN); // validated! save the entity $em->flush(); @@ -2875,8 +2799,66 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } } - protected function setJobOrderObject(Request $req, JobOrder $jo, $cust_vehicle) - { + protected function setJobOrderObject(EntityManagerInterface $em, 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')); + + $jo->setCustomer($cust_vehicle->getCustomer()) + ->setCustomerVehicle($cust_vehicle) + ->setORName($req->request->get('or_name')) + ->setPromoDetail($req->request->get('promo_detail')); + + // get current user + $user = $this->security->getUser(); + if ($user != null) + $jo->setCreatedBy($user); + + // 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')); + $jo->setReferenceJO($ref_jo); + } + } + + // dispatch/assign hub + if ($jo_status == JOStatus::RIDER_ASSIGN) + { + // this means JO is in dispatch/assign hub + // for dispatch, set the hub and facilitated by and facilitated type + // check facilitated type + $fac_type = $req->request->get('facilitated_type'); + if (!empty($fac_type)) + { + if (!FacilitatedType::validate($fac_type)) + $fac_type = null; + } + else + $fac_type = null; + + // check facilitated by + $fac_by_id = $req->request->get('facilitated_by'); + $fac_by = null; + if (!empty($fac_by_id)) + { + $fac_by = $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')); + + $jo->setFacilitatedType($fac_type) + ->setFacilitatedBy($fac_by) + ->setHub($hub); + } + // check if customer is not willing to wait $will_wait = $req->request->get('flag_willing_to_wait'); $reason = ''; @@ -2908,40 +2890,19 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setAdvanceOrder($req->request->get('flag_advance') ?? false) ->setServiceType($stype) ->setWarrantyClass($req->request->get('warranty_class')) - ->setCustomer($cust_vehicle->getCustomer()) - ->setCustomerVehicle($cust_vehicle) ->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); + ->setNoTradeInReason($no_trade_in_reason) + ->setStatus($jo_status); - // 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) - $jo->setCreatedBy($user); - - // 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')); - $jo->setReferenceJO($ref_jo); - } } public function getEditRoute($jo_id, $tier)