Fix issues found during testing of dispatch. #591

This commit is contained in:
Korina Cordero 2021-07-21 10:12:27 +00:00
parent a28b7ec6d0
commit f89ddd73bf
2 changed files with 71 additions and 65 deletions

View file

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

View file

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