Move reassignment of hub and rider to the job order service. #270
This commit is contained in:
parent
12555f3452
commit
e6482d44f0
4 changed files with 247 additions and 84 deletions
|
|
@ -788,6 +788,9 @@ class JobOrderController extends Controller
|
|||
{
|
||||
$this->denyAccessUnlessGranted('jo_open.list', null, 'No access.');
|
||||
|
||||
// initialize error list
|
||||
$error_array = [];
|
||||
|
||||
try
|
||||
{
|
||||
$error_array = $jo_handler->setHub($req, $id, $mclient);
|
||||
|
|
@ -835,75 +838,20 @@ class JobOrderController extends Controller
|
|||
return $this->render('job-order/form.html.twig', $params);
|
||||
}
|
||||
|
||||
public function openRiderSubmit(Request $req, ValidatorInterface $validator, MQTTClient $mclient, $id)
|
||||
public function openRiderSubmit(Request $req, JobOrderHandlerInterface $jo_handler, MQTTClient $mclient, $id)
|
||||
{
|
||||
$this->denyAccessUnlessGranted('jo_open.list', null, 'No access.');
|
||||
|
||||
// initialize error list
|
||||
$error_array = [];
|
||||
|
||||
// get object data
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$obj = $em->getRepository(JobOrder::class)->find($id);
|
||||
|
||||
// make sure this object exists
|
||||
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.';
|
||||
try
|
||||
{
|
||||
$error_array = $jo_handler->setRider($req, $id, $mclient);
|
||||
}
|
||||
|
||||
// check if rider is set
|
||||
if (empty($req->request->get('rider'))) {
|
||||
$error_array['rider'] = 'No rider selected.';
|
||||
} else {
|
||||
// get rider
|
||||
$rider = $em->getRepository(Rider::class)->find($req->request->get('rider'));
|
||||
|
||||
if (empty($rider)) {
|
||||
$error_array['rider'] = 'Invalid rider specified.';
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($error_array)) {
|
||||
// rider mqtt event
|
||||
// NOTE: need to send this before saving because rider will be cleared
|
||||
$rider_payload = [
|
||||
'event' => 'cancelled',
|
||||
'reason' => 'Reassigned',
|
||||
'jo_id' => $obj->getID(),
|
||||
];
|
||||
$mclient->sendRiderEvent($obj, $rider_payload);
|
||||
|
||||
// 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::ASSIGNED)
|
||||
->setDeliveryInstructions($req->request->get('delivery_instructions'))
|
||||
->setTier1Notes($req->request->get('tier1_notes'))
|
||||
->setTier2Notes($req->request->get('tier2_notes'))
|
||||
->setDeliveryAddress($req->request->get('delivery_address'))
|
||||
->setAssignedBy($this->getUser())
|
||||
->setDateAssign(new DateTime())
|
||||
->setAssignedBy($this->getUser())
|
||||
->setRider($rider);
|
||||
|
||||
// validate
|
||||
$errors = $validator->validate($obj);
|
||||
|
||||
// add errors to list
|
||||
foreach ($errors as $error) {
|
||||
$error_array[$error->getPropertyPath()] = $error->getMessage();
|
||||
}
|
||||
catch (NotFoundHttpException $e)
|
||||
{
|
||||
throw $this->createNotFoundException($e->getMessage());
|
||||
}
|
||||
|
||||
// check if any errors were found
|
||||
|
|
@ -915,24 +863,6 @@ class JobOrderController extends Controller
|
|||
], 422);
|
||||
}
|
||||
|
||||
// add event
|
||||
$event = new JOEvent();
|
||||
$event->setDateHappen(new DateTime())
|
||||
->setTypeID(JOEventType::RIDER_ASSIGN)
|
||||
->setUser($this->getUser())
|
||||
->setJobOrder($obj);
|
||||
$em->persist($event);
|
||||
|
||||
// validated! save the entity
|
||||
$em->flush();
|
||||
|
||||
// send event to mobile app
|
||||
$payload = [
|
||||
'event' => 'driver_assigned'
|
||||
];
|
||||
$mclient->sendEvent($obj, $payload);
|
||||
$mclient->sendRiderEvent($obj, $payload);
|
||||
|
||||
// return successful response
|
||||
return $this->json([
|
||||
'success' => 'Changes have been saved!'
|
||||
|
|
|
|||
|
|
@ -616,9 +616,13 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
|||
->setTier2Notes($req->request->get('tier2_notes'))
|
||||
->setDeliveryAddress($req->request->get('delivery_address'))
|
||||
->setHub($hub)
|
||||
->setProcessedBy($user)
|
||||
->clearRider();
|
||||
|
||||
if ($user != null)
|
||||
{
|
||||
$obj->setProcessedBy($user);
|
||||
}
|
||||
|
||||
$em->persist($obj);
|
||||
|
||||
// validate
|
||||
|
|
@ -637,8 +641,13 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
|||
$event = new JOEvent();
|
||||
$event->setDateHappen(new DateTime())
|
||||
->setTypeID(JOEventType::HUB_ASSIGN)
|
||||
->setUser($user)
|
||||
->setJobOrder($obj);
|
||||
|
||||
if ($user != null)
|
||||
{
|
||||
$event->setUser($user);
|
||||
}
|
||||
|
||||
$em->persist($event);
|
||||
|
||||
// validated! save the entity
|
||||
|
|
@ -654,6 +663,112 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
|||
return $error_array;
|
||||
}
|
||||
|
||||
// set rider for job order
|
||||
public function setRider($req, $id, $mclient)
|
||||
{
|
||||
// initialize error list
|
||||
$error_array = [];
|
||||
|
||||
// get object data
|
||||
$em = $this->em;
|
||||
$obj = $em->getRepository(JobOrder::class)->find($id);
|
||||
$user = $this->security->getUser();
|
||||
|
||||
// make sure this object exists
|
||||
if (empty($obj))
|
||||
throw new NotFoundHttpException('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 rider is set
|
||||
if (empty($req->request->get('rider'))) {
|
||||
$error_array['rider'] = 'No rider selected.';
|
||||
} else {
|
||||
// get rider
|
||||
$rider = $em->getRepository(Rider::class)->find($req->request->get('rider'));
|
||||
|
||||
if (empty($rider)) {
|
||||
$error_array['rider'] = 'Invalid rider specified.';
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($error_array)) {
|
||||
// rider mqtt event
|
||||
// NOTE: need to send this before saving because rider will be cleared
|
||||
$rider_payload = [
|
||||
'event' => 'cancelled',
|
||||
'reason' => 'Reassigned',
|
||||
'jo_id' => $obj->getID(),
|
||||
];
|
||||
$mclient->sendRiderEvent($obj, $rider_payload);
|
||||
|
||||
// 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::ASSIGNED)
|
||||
->setDeliveryInstructions($req->request->get('delivery_instructions'))
|
||||
->setTier1Notes($req->request->get('tier1_notes'))
|
||||
->setTier2Notes($req->request->get('tier2_notes'))
|
||||
->setDeliveryAddress($req->request->get('delivery_address'))
|
||||
->setDateAssign(new DateTime())
|
||||
->setRider($rider);
|
||||
|
||||
if ($user != null)
|
||||
{
|
||||
$obj->setAssignedBy($user);
|
||||
}
|
||||
|
||||
// validate
|
||||
$errors = $this->validator->validate($obj);
|
||||
|
||||
$em->persist($obj);
|
||||
|
||||
// add errors to list
|
||||
foreach ($errors as $error) {
|
||||
$error_array[$error->getPropertyPath()] = $error->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// check if any errors were found
|
||||
if (empty($error_array))
|
||||
{
|
||||
// add event
|
||||
$event = new JOEvent();
|
||||
$event->setDateHappen(new DateTime())
|
||||
->setTypeID(JOEventType::RIDER_ASSIGN)
|
||||
->setJobOrder($obj);
|
||||
|
||||
if ($user != null)
|
||||
{
|
||||
$event->setUser($user);
|
||||
}
|
||||
|
||||
$em->persist($event);
|
||||
|
||||
// validated! save the entity
|
||||
$em->flush();
|
||||
|
||||
// send event to mobile app
|
||||
$payload = [
|
||||
'event' => 'driver_assigned'
|
||||
];
|
||||
$mclient->sendEvent($obj, $payload);
|
||||
$mclient->sendRiderEvent($obj, $payload);
|
||||
}
|
||||
|
||||
return $error_array;
|
||||
}
|
||||
|
||||
// initialize incoming job order form
|
||||
public function initializeIncomingForm()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -616,9 +616,13 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
|||
->setTier2Notes($req->request->get('tier2_notes'))
|
||||
->setDeliveryAddress($req->request->get('delivery_address'))
|
||||
->setHub($hub)
|
||||
->setProcessedBy($user)
|
||||
->clearRider();
|
||||
|
||||
if ($user != null)
|
||||
{
|
||||
$obj->setProcessedBy($user);
|
||||
}
|
||||
|
||||
$em->persist($obj);
|
||||
|
||||
// validate
|
||||
|
|
@ -637,8 +641,13 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
|||
$event = new JOEvent();
|
||||
$event->setDateHappen(new DateTime())
|
||||
->setTypeID(JOEventType::HUB_ASSIGN)
|
||||
->setUser($user)
|
||||
->setJobOrder($obj);
|
||||
|
||||
if ($user != null)
|
||||
{
|
||||
$event->setUser($user);
|
||||
}
|
||||
|
||||
$em->persist($event);
|
||||
|
||||
// validated! save the entity
|
||||
|
|
@ -654,6 +663,112 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
|||
return $error_array;
|
||||
}
|
||||
|
||||
// set rider for job order
|
||||
public function setRider($req, $id, $mclient)
|
||||
{
|
||||
// initialize error list
|
||||
$error_array = [];
|
||||
|
||||
// get object data
|
||||
$em = $this->em;
|
||||
$obj = $em->getRepository(JobOrder::class)->find($id);
|
||||
$user = $this->security->getUser();
|
||||
|
||||
// make sure this object exists
|
||||
if (empty($obj))
|
||||
throw new NotFoundHttpException('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 rider is set
|
||||
if (empty($req->request->get('rider'))) {
|
||||
$error_array['rider'] = 'No rider selected.';
|
||||
} else {
|
||||
// get rider
|
||||
$rider = $em->getRepository(Rider::class)->find($req->request->get('rider'));
|
||||
|
||||
if (empty($rider)) {
|
||||
$error_array['rider'] = 'Invalid rider specified.';
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($error_array)) {
|
||||
// rider mqtt event
|
||||
// NOTE: need to send this before saving because rider will be cleared
|
||||
$rider_payload = [
|
||||
'event' => 'cancelled',
|
||||
'reason' => 'Reassigned',
|
||||
'jo_id' => $obj->getID(),
|
||||
];
|
||||
$mclient->sendRiderEvent($obj, $rider_payload);
|
||||
|
||||
// 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::ASSIGNED)
|
||||
->setDeliveryInstructions($req->request->get('delivery_instructions'))
|
||||
->setTier1Notes($req->request->get('tier1_notes'))
|
||||
->setTier2Notes($req->request->get('tier2_notes'))
|
||||
->setDeliveryAddress($req->request->get('delivery_address'))
|
||||
->setDateAssign(new DateTime())
|
||||
->setRider($rider);
|
||||
|
||||
if ($user != null)
|
||||
{
|
||||
$obj->setAssignedBy($user);
|
||||
}
|
||||
|
||||
// validate
|
||||
$errors = $this->validator->validate($obj);
|
||||
|
||||
$em->persist($obj);
|
||||
|
||||
// add errors to list
|
||||
foreach ($errors as $error) {
|
||||
$error_array[$error->getPropertyPath()] = $error->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// check if any errors were found
|
||||
if (empty($error_array))
|
||||
{
|
||||
// add event
|
||||
$event = new JOEvent();
|
||||
$event->setDateHappen(new DateTime())
|
||||
->setTypeID(JOEventType::RIDER_ASSIGN)
|
||||
->setJobOrder($obj);
|
||||
|
||||
if ($user != null)
|
||||
{
|
||||
$event->setUser($user);
|
||||
}
|
||||
|
||||
$em->persist($event);
|
||||
|
||||
// validated! save the entity
|
||||
$em->flush();
|
||||
|
||||
// send event to mobile app
|
||||
$payload = [
|
||||
'event' => 'driver_assigned'
|
||||
];
|
||||
$mclient->sendEvent($obj, $payload);
|
||||
$mclient->sendRiderEvent($obj, $payload);
|
||||
}
|
||||
|
||||
return $error_array;
|
||||
}
|
||||
|
||||
// initialize incoming job order form
|
||||
public function initializeIncomingForm()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@ interface JobOrderHandlerInterface
|
|||
// set hub for job order
|
||||
public function setHub(Request $req, int $id, MQTTClient $mclient);
|
||||
|
||||
// set rider for job order
|
||||
public function setRider(Request $req, int $id, MQTTClient $mclient);
|
||||
|
||||
// initialize incoming job order form
|
||||
public function initializeIncomingForm();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue