Move the initialization of the fulfillment and hub forms to the service. #270
This commit is contained in:
parent
365b316dba
commit
a7b5341f0d
4 changed files with 284 additions and 132 deletions
|
|
@ -674,7 +674,7 @@ class JobOrderController extends Controller
|
||||||
return $this->render('job-order/form.html.twig', $params);
|
return $this->render('job-order/form.html.twig', $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function assigningSubmit(Request $req, ValidatorInterface $validator, JobOrderHandlerInterface $jo_handler, MQTTCLient $mclient, APNSClient $aclient, $id)
|
public function assigningSubmit(Request $req, JobOrderHandlerInterface $jo_handler, MQTTCLient $mclient, APNSClient $aclient, $id)
|
||||||
{
|
{
|
||||||
$this->denyAccessUnlessGranted('jo_assign.list', null, 'No access.');
|
$this->denyAccessUnlessGranted('jo_assign.list', null, 'No access.');
|
||||||
|
|
||||||
|
|
@ -708,42 +708,20 @@ class JobOrderController extends Controller
|
||||||
/**
|
/**
|
||||||
* @Menu(selected="jo_fulfill")
|
* @Menu(selected="jo_fulfill")
|
||||||
*/
|
*/
|
||||||
public function fulfillmentForm(MapTools $map_tools, $id)
|
public function fulfillmentForm(JobOrderHandlerInterface $jo_handler, $id)
|
||||||
{
|
{
|
||||||
$this->denyAccessUnlessGranted('jo_fulfill.list', null, 'No access.');
|
$this->denyAccessUnlessGranted('jo_fulfill.list', null, 'No access.');
|
||||||
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
try
|
||||||
|
|
||||||
$params['mode'] = 'update-fulfillment';
|
|
||||||
|
|
||||||
// get row data
|
|
||||||
$obj = $em->getRepository(JobOrder::class)->find($id);
|
|
||||||
|
|
||||||
// make sure this row exists
|
|
||||||
if (empty($obj))
|
|
||||||
{
|
{
|
||||||
throw $this->createNotFoundException('The job order does not exist');
|
$params = $jo_handler->initializeFulfillmentForm($id);
|
||||||
|
}
|
||||||
|
catch (NotFoundHttpException $e)
|
||||||
|
{
|
||||||
|
throw $this->createNotFoundException($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
// check status
|
$params['submit_url'] = $this->generateUrl('jo_fulfill_submit', ['id' => $id]);
|
||||||
if (!in_array($obj->getStatus(), [JOStatus::ASSIGNED, JOStatus::IN_PROGRESS]))
|
|
||||||
{
|
|
||||||
throw $this->createNotFoundException('The job order does not have a fulfillment status');
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if hub is assigned to current user
|
|
||||||
$user_hubs = $this->getUser()->getHubs();
|
|
||||||
if (!in_array($obj->getHub()->getID(), $user_hubs))
|
|
||||||
{
|
|
||||||
throw $this->createNotFoundException('The job order is not on a hub assigned to this user');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->fillDropdownParameters($params);
|
|
||||||
$this->fillFormTags($params);
|
|
||||||
|
|
||||||
$params['obj'] = $obj;
|
|
||||||
$params['status_cancelled'] = JOStatus::CANCELLED;
|
|
||||||
$params['submit_url'] = $this->generateUrl('jo_fulfill_submit', ['id' => $obj->getID()]);
|
|
||||||
$params['return_url'] = $this->generateUrl('jo_fulfill');
|
$params['return_url'] = $this->generateUrl('jo_fulfill');
|
||||||
|
|
||||||
// response
|
// response
|
||||||
|
|
@ -856,83 +834,20 @@ class JobOrderController extends Controller
|
||||||
/**
|
/**
|
||||||
* @Menu(selected="jo_open")
|
* @Menu(selected="jo_open")
|
||||||
*/
|
*/
|
||||||
public function openHubForm(MapTools $map_tools, $id)
|
public function openHubForm(MapTools $map_tools, $id, JobOrderHandlerInterface $jo_handler)
|
||||||
{
|
{
|
||||||
$this->denyAccessUnlessGranted('jo_open.list', null, 'No access.');
|
$this->denyAccessUnlessGranted('jo_open.list', null, 'No access.');
|
||||||
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
try
|
||||||
|
|
||||||
$params['mode'] = 'update-reassign-hub';
|
|
||||||
|
|
||||||
// get row data
|
|
||||||
$obj = $em->getRepository(JobOrder::class)->find($id);
|
|
||||||
|
|
||||||
// make sure this row exists
|
|
||||||
if (empty($obj))
|
|
||||||
{
|
{
|
||||||
throw $this->createNotFoundException('The job order does not exist');
|
$params = $jo_handler->initializeHubForm($id, $map_tools);
|
||||||
|
}
|
||||||
|
catch (NotFoundHttpException $e)
|
||||||
|
{
|
||||||
|
throw $this->createNotFoundException($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fillDropdownParameters($params);
|
$params['submit_url'] = $this->generateUrl('jo_open_hub_submit', ['id' => $id]);
|
||||||
$this->fillFormTags($params);
|
|
||||||
|
|
||||||
// get rejections
|
|
||||||
$rejections = $obj->getHubRejections();
|
|
||||||
|
|
||||||
// get rejection reasons
|
|
||||||
$params['rejection_reasons'] = JORejectionReason::getCollection();
|
|
||||||
|
|
||||||
// get closest hubs
|
|
||||||
$hubs = $map_tools->getClosestHubs($obj->getCoordinates(), 50, date("H:i:s"));
|
|
||||||
|
|
||||||
$params['status_cancelled'] = JOStatus::CANCELLED;
|
|
||||||
$params['hubs'] = [];
|
|
||||||
|
|
||||||
// format duration and distance into friendly time
|
|
||||||
foreach ($hubs as $hub) {
|
|
||||||
// duration
|
|
||||||
$seconds = $hub['duration'];
|
|
||||||
|
|
||||||
if (!empty($seconds) && $seconds > 0) {
|
|
||||||
$hours = floor($seconds / 3600);
|
|
||||||
$minutes = ceil(($seconds / 60) % 60);
|
|
||||||
|
|
||||||
$hub['duration'] = ($hours > 0 ? number_format($hours) . " hr" . ($hours > 1 ? "s" : '') . ($minutes > 0 ? ", " : '') : '') . ($minutes > 0 ? number_format($minutes) . " min" . ($minutes > 1 ? "s" : '') : '');
|
|
||||||
} else {
|
|
||||||
$hub['duration'] = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// distance
|
|
||||||
$meters = $hub['distance'];
|
|
||||||
|
|
||||||
if (!empty($meters) && $meters > 0) {
|
|
||||||
$hub['distance'] = round($meters / 1000) . " km";
|
|
||||||
} else {
|
|
||||||
$hub['distance'] = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// counters
|
|
||||||
$hub['rider_count'] = count($hub['hub']->getAvailableRiders());
|
|
||||||
$hub['jo_count'] = count($hub['hub']->getForAssignmentJobOrders());
|
|
||||||
|
|
||||||
// check for rejection
|
|
||||||
$hub['flag_rejected'] = false;
|
|
||||||
$hub_id = $hub['hub']->getID();
|
|
||||||
|
|
||||||
foreach ($rejections as $robj)
|
|
||||||
{
|
|
||||||
if ($robj->getHub()->getID() === $hub_id)
|
|
||||||
{
|
|
||||||
$hub['flag_rejected'] = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$params['hubs'][] = $hub;
|
|
||||||
}
|
|
||||||
|
|
||||||
$params['obj'] = $obj;
|
|
||||||
$params['submit_url'] = $this->generateUrl('jo_open_hub_submit', ['id' => $obj->getID()]);
|
|
||||||
$params['return_url'] = $this->generateUrl('jo_open');
|
$params['return_url'] = $this->generateUrl('jo_open');
|
||||||
|
|
||||||
// response
|
// response
|
||||||
|
|
|
||||||
|
|
@ -329,12 +329,11 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
// make sure this object exists
|
// make sure this object exists
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
throw $this->createNotFoundException('The item does not exist');
|
throw new NotFoundHttpException('The item does not exist');
|
||||||
|
|
||||||
// check if we can assign
|
// check if we can assign
|
||||||
if (!$obj->canAssign())
|
if (!$obj->canAssign())
|
||||||
throw $this->createNotFoundException('Cannot assign rider to this job order.');
|
throw new NotFoundHttpException('Cannot assign rider to this job order.');
|
||||||
|
|
||||||
|
|
||||||
// check if lat and lng are provided
|
// check if lat and lng are provided
|
||||||
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
|
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
|
||||||
|
|
@ -436,7 +435,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
// make sure this object exists
|
// make sure this object exists
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
throw $this->createNotFoundException('The item does not exist');
|
throw new NotFoundHttpException('The item does not exist');
|
||||||
|
|
||||||
// check if lat and lng are provided
|
// check if lat and lng are provided
|
||||||
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
|
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
|
||||||
|
|
@ -523,7 +522,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
// make sure this object exists
|
// make sure this object exists
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
throw $this->createNotFoundException('The item does not exist');
|
throw new NotFoundHttpException('The item does not exist');
|
||||||
|
|
||||||
$cancel_reason = $req->request->get('cancel_reason');
|
$cancel_reason = $req->request->get('cancel_reason');
|
||||||
$obj->cancel($cancel_reason);
|
$obj->cancel($cancel_reason);
|
||||||
|
|
@ -604,7 +603,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
if (empty($cv))
|
if (empty($cv))
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order does not exist');
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
}
|
}
|
||||||
|
|
||||||
$jo = new JobOrder();
|
$jo = new JobOrder();
|
||||||
|
|
@ -630,7 +629,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
// make sure this row exists
|
// make sure this row exists
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
throw $this->createNotFoundException('The job order does not exist');
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
|
|
||||||
$this->fillDropdownParameters($params);
|
$this->fillDropdownParameters($params);
|
||||||
$this->fillFormTags($params);
|
$this->fillFormTags($params);
|
||||||
|
|
@ -686,14 +685,14 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order does not exist');
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
}
|
}
|
||||||
|
|
||||||
// check status
|
// check status
|
||||||
if ($obj->getStatus() != JOStatus::PENDING)
|
if ($obj->getStatus() != JOStatus::PENDING)
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order does not have a pending status');
|
throw new NotFoundHttpException('The job order does not have a pending status');
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if we are the processor
|
// check if we are the processor
|
||||||
|
|
@ -719,7 +718,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
}
|
}
|
||||||
catch(PessimisticLockException $e)
|
catch(PessimisticLockException $e)
|
||||||
{
|
{
|
||||||
throw $this->createAccessDeniedException('Not the processor');
|
throw new AccessDeniedHttpException('Not the processor');
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: we are able to lock, everything should be fine now
|
// NOTE: we are able to lock, everything should be fine now
|
||||||
|
|
@ -808,14 +807,14 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order does not exist');
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
}
|
}
|
||||||
|
|
||||||
// check status
|
// check status
|
||||||
if ($obj->getStatus() != JOStatus::RIDER_ASSIGN)
|
if ($obj->getStatus() != JOStatus::RIDER_ASSIGN)
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order does not have an assigning status');
|
throw new NotFoundHttpException('The job order does not have an assigning status');
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if super user
|
// check if super user
|
||||||
|
|
@ -833,7 +832,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
if (!in_array($obj->getHub()->getID(), $user_hubs))
|
if (!in_array($obj->getHub()->getID(), $user_hubs))
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order is not on a hub assigned to this user');
|
throw new NotFoundHttpException('The job order is not on a hub assigned to this user');
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if we are the assignor
|
// check if we are the assignor
|
||||||
|
|
@ -842,7 +841,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
if ($assignor != null && $assignor->getID() != $user->getID())
|
if ($assignor != null && $assignor->getID() != $user->getID())
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createAccessDeniedException('Not the assignor');
|
throw new AccessDeniedHttpException('Not the assignor');
|
||||||
}
|
}
|
||||||
|
|
||||||
// make this user be the assignor
|
// make this user be the assignor
|
||||||
|
|
@ -856,7 +855,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
}
|
}
|
||||||
catch (PessimisticLockException $e)
|
catch (PessimisticLockException $e)
|
||||||
{
|
{
|
||||||
throw $this->createAccessDeniedException('Not the assignor');
|
throw new AccessDeniedHttpException('Not the assignor');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fillDropdownParameters($params);
|
$this->fillDropdownParameters($params);
|
||||||
|
|
@ -866,8 +865,126 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$params['status_cancelled'] = JOStatus::CANCELLED;
|
$params['status_cancelled'] = JOStatus::CANCELLED;
|
||||||
|
|
||||||
return $params;
|
return $params;
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize fulflll job order form
|
||||||
|
public function initializeFulfillmentForm($id)
|
||||||
|
{
|
||||||
|
$em = $this->em;
|
||||||
|
|
||||||
|
$params['mode'] = 'update-fulfillment';
|
||||||
|
|
||||||
|
// get row data
|
||||||
|
$obj = $em->getRepository(JobOrder::class)->find($id);
|
||||||
|
|
||||||
|
// make sure this row exists
|
||||||
|
if (empty($obj))
|
||||||
|
{
|
||||||
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
|
}
|
||||||
|
|
||||||
|
// check status
|
||||||
|
if (!in_array($obj->getStatus(), [JOStatus::ASSIGNED, JOStatus::IN_PROGRESS]))
|
||||||
|
{
|
||||||
|
throw new NotFoundHttpException('The job order does not have a fulfillment status');
|
||||||
|
}
|
||||||
|
|
||||||
|
// get current user
|
||||||
|
$user = $this->security->getUser();
|
||||||
|
|
||||||
|
// check if hub is assigned to current user
|
||||||
|
$user_hubs = $user->getHubs();
|
||||||
|
if (!in_array($obj->getHub()->getID(), $user_hubs))
|
||||||
|
{
|
||||||
|
throw new NotFoundHttpException('The job order is not on a hub assigned to this user');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->fillDropdownParameters($params);
|
||||||
|
$this->fillFormTags($params);
|
||||||
|
|
||||||
|
$params['obj'] = $obj;
|
||||||
|
$params['status_cancelled'] = JOStatus::CANCELLED;
|
||||||
|
|
||||||
|
return $params;
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize hub form
|
||||||
|
public function initializeHubForm($id, $map_tools)
|
||||||
|
{
|
||||||
|
$em = $this->em;
|
||||||
|
|
||||||
|
$params['mode'] = 'update-reassign-hub';
|
||||||
|
|
||||||
|
// get row data
|
||||||
|
$obj = $em->getRepository(JobOrder::class)->find($id);
|
||||||
|
|
||||||
|
// make sure this row exists
|
||||||
|
if (empty($obj))
|
||||||
|
{
|
||||||
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->fillDropdownParameters($params);
|
||||||
|
$this->fillFormTags($params);
|
||||||
|
|
||||||
|
// get rejections
|
||||||
|
$rejections = $obj->getHubRejections();
|
||||||
|
|
||||||
|
// get rejection reasons
|
||||||
|
$params['rejection_reasons'] = JORejectionReason::getCollection();
|
||||||
|
|
||||||
|
// get closest hubs
|
||||||
|
$hubs = $map_tools->getClosestHubs($obj->getCoordinates(), 50, date("H:i:s"));
|
||||||
|
|
||||||
|
$params['status_cancelled'] = JOStatus::CANCELLED;
|
||||||
|
$params['hubs'] = [];
|
||||||
|
|
||||||
|
// format duration and distance into friendly time
|
||||||
|
foreach ($hubs as $hub) {
|
||||||
|
// duration
|
||||||
|
$seconds = $hub['duration'];
|
||||||
|
|
||||||
|
if (!empty($seconds) && $seconds > 0) {
|
||||||
|
$hours = floor($seconds / 3600);
|
||||||
|
$minutes = ceil(($seconds / 60) % 60);
|
||||||
|
|
||||||
|
$hub['duration'] = ($hours > 0 ? number_format($hours) . " hr" . ($hours > 1 ? "s" : '') . ($minutes > 0 ? ", " : '') : '') . ($minutes > 0 ? number_format($minutes) . " min" . ($minutes > 1 ? "s" : '') : '');
|
||||||
|
} else {
|
||||||
|
$hub['duration'] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// distance
|
||||||
|
$meters = $hub['distance'];
|
||||||
|
|
||||||
|
if (!empty($meters) && $meters > 0) {
|
||||||
|
$hub['distance'] = round($meters / 1000) . " km";
|
||||||
|
} else {
|
||||||
|
$hub['distance'] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// counters
|
||||||
|
$hub['rider_count'] = count($hub['hub']->getAvailableRiders());
|
||||||
|
$hub['jo_count'] = count($hub['hub']->getForAssignmentJobOrders());
|
||||||
|
|
||||||
|
// check for rejection
|
||||||
|
$hub['flag_rejected'] = false;
|
||||||
|
$hub_id = $hub['hub']->getID();
|
||||||
|
|
||||||
|
foreach ($rejections as $robj)
|
||||||
|
{
|
||||||
|
if ($robj->getHub()->getID() === $hub_id)
|
||||||
|
{
|
||||||
|
$hub['flag_rejected'] = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$params['hubs'][] = $hub;
|
||||||
|
}
|
||||||
|
|
||||||
|
$params['obj'] = $obj;
|
||||||
|
|
||||||
|
return $params;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function fillDropdownParameters(&$params)
|
protected function fillDropdownParameters(&$params)
|
||||||
|
|
|
||||||
|
|
@ -329,12 +329,11 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
// make sure this object exists
|
// make sure this object exists
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
throw $this->createNotFoundException('The item does not exist');
|
throw new NotFoundHttpException('The item does not exist');
|
||||||
|
|
||||||
// check if we can assign
|
// check if we can assign
|
||||||
if (!$obj->canAssign())
|
if (!$obj->canAssign())
|
||||||
throw $this->createNotFoundException('Cannot assign rider to this job order.');
|
throw new NotFoundHttpException('Cannot assign rider to this job order.');
|
||||||
|
|
||||||
|
|
||||||
// check if lat and lng are provided
|
// check if lat and lng are provided
|
||||||
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
|
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
|
||||||
|
|
@ -436,7 +435,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
// make sure this object exists
|
// make sure this object exists
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
throw $this->createNotFoundException('The item does not exist');
|
throw new NotFoundHttpException('The item does not exist');
|
||||||
|
|
||||||
// check if lat and lng are provided
|
// check if lat and lng are provided
|
||||||
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
|
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
|
||||||
|
|
@ -523,7 +522,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
// make sure this object exists
|
// make sure this object exists
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
throw $this->createNotFoundException('The item does not exist');
|
throw new NotFoundHttpException('The item does not exist');
|
||||||
|
|
||||||
$cancel_reason = $req->request->get('cancel_reason');
|
$cancel_reason = $req->request->get('cancel_reason');
|
||||||
$obj->cancel($cancel_reason);
|
$obj->cancel($cancel_reason);
|
||||||
|
|
@ -604,7 +603,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
if (empty($cv))
|
if (empty($cv))
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order does not exist');
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
}
|
}
|
||||||
|
|
||||||
$jo = new JobOrder();
|
$jo = new JobOrder();
|
||||||
|
|
@ -630,7 +629,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
|
|
||||||
// make sure this row exists
|
// make sure this row exists
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
throw $this->createNotFoundException('The job order does not exist');
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
|
|
||||||
$this->fillDropdownParameters($params);
|
$this->fillDropdownParameters($params);
|
||||||
$this->fillFormTags($params);
|
$this->fillFormTags($params);
|
||||||
|
|
@ -686,14 +685,14 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order does not exist');
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
}
|
}
|
||||||
|
|
||||||
// check status
|
// check status
|
||||||
if ($obj->getStatus() != JOStatus::PENDING)
|
if ($obj->getStatus() != JOStatus::PENDING)
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order does not have a pending status');
|
throw new NotFoundHttpException('The job order does not have a pending status');
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if we are the processor
|
// check if we are the processor
|
||||||
|
|
@ -719,7 +718,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
}
|
}
|
||||||
catch(PessimisticLockException $e)
|
catch(PessimisticLockException $e)
|
||||||
{
|
{
|
||||||
throw $this->createAccessDeniedException('Not the processor');
|
throw new AccessDeniedHttpException('Not the processor');
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: we are able to lock, everything should be fine now
|
// NOTE: we are able to lock, everything should be fine now
|
||||||
|
|
@ -808,14 +807,14 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
if (empty($obj))
|
if (empty($obj))
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order does not exist');
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
}
|
}
|
||||||
|
|
||||||
// check status
|
// check status
|
||||||
if ($obj->getStatus() != JOStatus::RIDER_ASSIGN)
|
if ($obj->getStatus() != JOStatus::RIDER_ASSIGN)
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order does not have an assigning status');
|
throw new NotFoundHttpException('The job order does not have an assigning status');
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if super user
|
// check if super user
|
||||||
|
|
@ -833,7 +832,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
if (!in_array($obj->getHub()->getID(), $user_hubs))
|
if (!in_array($obj->getHub()->getID(), $user_hubs))
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createNotFoundException('The job order is not on a hub assigned to this user');
|
throw new NotFoundHttpException('The job order is not on a hub assigned to this user');
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if we are the assignor
|
// check if we are the assignor
|
||||||
|
|
@ -842,7 +841,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
if ($assignor != null && $assignor->getID() != $user->getID())
|
if ($assignor != null && $assignor->getID() != $user->getID())
|
||||||
{
|
{
|
||||||
$em->getConnection()->rollback();
|
$em->getConnection()->rollback();
|
||||||
throw $this->createAccessDeniedException('Not the assignor');
|
throw new AccessDeniedHttpException('Not the assignor');
|
||||||
}
|
}
|
||||||
|
|
||||||
// make this user be the assignor
|
// make this user be the assignor
|
||||||
|
|
@ -856,7 +855,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
}
|
}
|
||||||
catch (PessimisticLockException $e)
|
catch (PessimisticLockException $e)
|
||||||
{
|
{
|
||||||
throw $this->createAccessDeniedException('Not the assignor');
|
throw new AccessDeniedHttpException('Not the assignor');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fillDropdownParameters($params);
|
$this->fillDropdownParameters($params);
|
||||||
|
|
@ -866,8 +865,123 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$params['status_cancelled'] = JOStatus::CANCELLED;
|
$params['status_cancelled'] = JOStatus::CANCELLED;
|
||||||
|
|
||||||
return $params;
|
return $params;
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize fulflll job order form
|
||||||
|
public function initializeFulfillmentForm($id)
|
||||||
|
{
|
||||||
|
$em = $this->em;
|
||||||
|
|
||||||
|
$params['mode'] = 'update-fulfillment';
|
||||||
|
|
||||||
|
// get row data
|
||||||
|
$obj = $em->getRepository(JobOrder::class)->find($id);
|
||||||
|
|
||||||
|
// make sure this row exists
|
||||||
|
if (empty($obj))
|
||||||
|
{
|
||||||
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
|
}
|
||||||
|
|
||||||
|
// check status
|
||||||
|
if (!in_array($obj->getStatus(), [JOStatus::ASSIGNED, JOStatus::IN_PROGRESS]))
|
||||||
|
{
|
||||||
|
throw new NotFoundHttpException('The job order does not have a fulfillment status');
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if hub is assigned to current user
|
||||||
|
$user_hubs = $this->getUser()->getHubs();
|
||||||
|
if (!in_array($obj->getHub()->getID(), $user_hubs))
|
||||||
|
{
|
||||||
|
throw new NotFoundHttpException('The job order is not on a hub assigned to this user');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->fillDropdownParameters($params);
|
||||||
|
$this->fillFormTags($params);
|
||||||
|
|
||||||
|
$params['obj'] = $obj;
|
||||||
|
$params['status_cancelled'] = JOStatus::CANCELLED;
|
||||||
|
|
||||||
|
return $params;
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize hub form
|
||||||
|
public function initializeHubForm($id, $map_tools)
|
||||||
|
{
|
||||||
|
$em = $this->em;
|
||||||
|
|
||||||
|
$params['mode'] = 'update-reassign-hub';
|
||||||
|
|
||||||
|
// get row data
|
||||||
|
$obj = $em->getRepository(JobOrder::class)->find($id);
|
||||||
|
|
||||||
|
// make sure this row exists
|
||||||
|
if (empty($obj))
|
||||||
|
{
|
||||||
|
throw new NotFoundHttpException('The job order does not exist');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->fillDropdownParameters($params);
|
||||||
|
$this->fillFormTags($params);
|
||||||
|
|
||||||
|
// get rejections
|
||||||
|
$rejections = $obj->getHubRejections();
|
||||||
|
|
||||||
|
// get rejection reasons
|
||||||
|
$params['rejection_reasons'] = JORejectionReason::getCollection();
|
||||||
|
|
||||||
|
// get closest hubs
|
||||||
|
$hubs = $map_tools->getClosestHubs($obj->getCoordinates(), 50, date("H:i:s"));
|
||||||
|
|
||||||
|
$params['status_cancelled'] = JOStatus::CANCELLED;
|
||||||
|
$params['hubs'] = [];
|
||||||
|
|
||||||
|
// format duration and distance into friendly time
|
||||||
|
foreach ($hubs as $hub) {
|
||||||
|
// duration
|
||||||
|
$seconds = $hub['duration'];
|
||||||
|
|
||||||
|
if (!empty($seconds) && $seconds > 0) {
|
||||||
|
$hours = floor($seconds / 3600);
|
||||||
|
$minutes = ceil(($seconds / 60) % 60);
|
||||||
|
|
||||||
|
$hub['duration'] = ($hours > 0 ? number_format($hours) . " hr" . ($hours > 1 ? "s" : '') . ($minutes > 0 ? ", " : '') : '') . ($minutes > 0 ? number_format($minutes) . " min" . ($minutes > 1 ? "s" : '') : '');
|
||||||
|
} else {
|
||||||
|
$hub['duration'] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// distance
|
||||||
|
$meters = $hub['distance'];
|
||||||
|
|
||||||
|
if (!empty($meters) && $meters > 0) {
|
||||||
|
$hub['distance'] = round($meters / 1000) . " km";
|
||||||
|
} else {
|
||||||
|
$hub['distance'] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// counters
|
||||||
|
$hub['rider_count'] = count($hub['hub']->getAvailableRiders());
|
||||||
|
$hub['jo_count'] = count($hub['hub']->getForAssignmentJobOrders());
|
||||||
|
|
||||||
|
// check for rejection
|
||||||
|
$hub['flag_rejected'] = false;
|
||||||
|
$hub_id = $hub['hub']->getID();
|
||||||
|
|
||||||
|
foreach ($rejections as $robj)
|
||||||
|
{
|
||||||
|
if ($robj->getHub()->getID() === $hub_id)
|
||||||
|
{
|
||||||
|
$hub['flag_rejected'] = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$params['hubs'][] = $hub;
|
||||||
|
}
|
||||||
|
|
||||||
|
$params['obj'] = $obj;
|
||||||
|
|
||||||
|
return $params;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function fillDropdownParameters(&$params)
|
protected function fillDropdownParameters(&$params)
|
||||||
|
|
|
||||||
|
|
@ -42,4 +42,10 @@ interface JobOrderHandlerInterface
|
||||||
|
|
||||||
// initialize assign job order form
|
// initialize assign job order form
|
||||||
public function initializeAssignForm(int $id);
|
public function initializeAssignForm(int $id);
|
||||||
|
|
||||||
|
// initialize fulflll job order form
|
||||||
|
public function initializeFulfillmentForm(int $id);
|
||||||
|
|
||||||
|
// initialize hub form
|
||||||
|
public function initializeHubForm(int $id, MapTools $map_tools);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue