diff --git a/.env.dist b/.env.dist
index b6766d67..509fee86 100644
--- a/.env.dist
+++ b/.env.dist
@@ -66,3 +66,6 @@ INVENTORY_API_AUTH_TOKEN=insert_auth_token_here
# API logging
API_LOGGING=set_to_true_or_false
+
+# customer distance limit in km
+CUST_DISTANCE_LIMIT=set_to_number
diff --git a/config/cmb.services.yaml b/config/cmb.services.yaml
index d12b2acf..5f24e525 100644
--- a/config/cmb.services.yaml
+++ b/config/cmb.services.yaml
@@ -64,6 +64,7 @@ services:
arguments:
$em: "@doctrine.orm.entity_manager"
$gmaps_api_key: "%env(GMAPS_API_KEY)%"
+ $cust_dist_limit: "%env(CUST_DISTANCE_LIMIT)%"
App\Service\RisingTideGateway:
arguments:
@@ -227,3 +228,8 @@ services:
$redis_prov: "@App\\Service\\RedisClientProvider"
$loc_key: "%env(LOCATION_RIDER_ACTIVE_KEY)%"
$status_key: "%env(STATUS_RIDER_KEY)%"
+
+ # API logging
+ App\EventSubscriber\LogSubscriber:
+ arguments:
+ $api_log_flag: "%env(API_LOGGING)%"
diff --git a/config/menu.yaml b/config/menu.yaml
index 45ceab40..b0096cf5 100644
--- a/config/menu.yaml
+++ b/config/menu.yaml
@@ -122,10 +122,6 @@ main_menu:
acl: jo_all.list
label: View All
parent: joborder
- - id: jo_autoassign
- acl: jo_autoassign.test
- label: Autoassign Test
- parent: joborder
- id: support
acl: support.menu
diff --git a/config/resq.services.yaml b/config/resq.services.yaml
index 0c927f98..284b7b73 100644
--- a/config/resq.services.yaml
+++ b/config/resq.services.yaml
@@ -64,6 +64,7 @@ services:
arguments:
$em: "@doctrine.orm.entity_manager"
$gmaps_api_key: "%env(GMAPS_API_KEY)%"
+ $cust_dist_limit: "%env(CUST_DISTANCE_LIMIT)%"
App\Service\RisingTideGateway:
arguments:
@@ -233,4 +234,9 @@ services:
$api_url: "%env(INVENTORY_API_URL)%"
$api_ocp_key: "%env(INVENTORY_API_OCP)%"
$api_auth_prefix: "%env(INVENTORY_API_AUTH_TOKEN_PREFIX)%"
- $api_auth_token: "%env(INVENTORY_API_AUTH_TOKEN)%"
+ $api_auth_token: "%env(INVENTORY_API_AUTH_TOKEN)%"
+
+ # API logging
+ App\EventSubscriber\LogSubscriber:
+ arguments:
+ $api_log_flag: "%env(API_LOGGING)%"
diff --git a/config/services.yaml b/config/services.yaml
index 4bfaf95a..284b7b73 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -64,6 +64,7 @@ services:
arguments:
$em: "@doctrine.orm.entity_manager"
$gmaps_api_key: "%env(GMAPS_API_KEY)%"
+ $cust_dist_limit: "%env(CUST_DISTANCE_LIMIT)%"
App\Service\RisingTideGateway:
arguments:
@@ -231,7 +232,7 @@ services:
App\Service\InventoryManager:
arguments:
$api_url: "%env(INVENTORY_API_URL)%"
- $api_ocp_key: "%env(INVENTORY_API_OCP)%"
+ $api_ocp_key: "%env(INVENTORY_API_OCP)%"
$api_auth_prefix: "%env(INVENTORY_API_AUTH_TOKEN_PREFIX)%"
$api_auth_token: "%env(INVENTORY_API_AUTH_TOKEN)%"
diff --git a/src/Controller/CustomerController.php b/src/Controller/CustomerController.php
index fd9417cc..17f8e7bc 100644
--- a/src/Controller/CustomerController.php
+++ b/src/Controller/CustomerController.php
@@ -181,15 +181,13 @@ class CustomerController extends Controller
public function getCustomerVehicles(Request $req, CustomerHandlerInterface $cust_handler)
{
- /*
- // TODO: fix
- if ((!$this->isGranted('jo_onestep.form')) ||
- (!$this->isGranted('jo_walkin.form')) ||
- (!$this->isGranted('jo_in.list'))) {
+ if (!(($this->isGranted('jo_onestep.form')) ||
+ ($this->isGranted('jo_walkin.form')) ||
+ ($this->isGranted('jo_in.list'))))
+ {
$exception = $this->createAccessDeniedException('No access.');
throw $exception;
}
- */
$results = $cust_handler->getCustomerVehicles($req);
diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php
index c92de36a..d8866203 100644
--- a/src/Controller/JobOrderController.php
+++ b/src/Controller/JobOrderController.php
@@ -98,7 +98,7 @@ class JobOrderController extends Controller
$this->denyAccessUnlessGranted('jo_open.edit', null, 'No access.');
$error_array = [];
- $result = $jo_handler->generateJobOrder($req, $id);
+ $result = $jo_handler->openEditJobOrder($req, $id);
$error_array = $result['error_array'];
@@ -939,12 +939,18 @@ class JobOrderController extends Controller
/**
* @ParamConverter("jo", class="App\Entity\JobOrder")
*/
- public function popupInfo(JobOrder $jo)
+ public function popupInfo(JobOrder $jo, JobOrderHandlerInterface $jo_handler)
{
if ($jo == null)
return new Response('No job order data');
- return $this->render('job-order/popup.html.twig', [ 'jo' => $jo ]);
+ // get the right template
+ $template = $jo_handler->getTwigTemplate('jo_popup');
+
+ $params['jo'] = $jo;
+
+ // response
+ return $this->render($template, $params);
}
/**
diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php
index d490ce56..862d431b 100644
--- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php
+++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php
@@ -2842,6 +2842,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
$this->template_hash['jo_onestep_edit_form'] = 'job-order/cmb.form.onestep.html.twig';
$this->template_hash['jo_walkin_form'] = 'job-order/cmb.form.walkin.html.twig';
$this->template_hash['jo_walkin_edit_form'] = 'job-order/cmb.form.walkin.html.twig';
+ $this->template_hash['jo_popup'] = 'job-order/cmb.popup.html.twig';
}
protected function checkTier($tier)
diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php
index deeea114..585c6135 100644
--- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php
+++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php
@@ -266,7 +266,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
return $params;
}
- // creates/updates job order
+ // creates job order
public function generateJobOrder(Request $req, $id)
{
// initialize error list
@@ -415,6 +415,105 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
return $data;
}
+ // updates job order
+ public function openEditJobOrder(Request $req, $id)
+ {
+ $em = $this->em;
+
+ $obj = $em->getRepository(JobOrder::class)->find($id);
+
+ // initialize error list
+ $error_array = [];
+
+ // 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.';
+ }
+
+ 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'));
+
+ $stype = $req->request->get('service_type');
+
+ // 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'));
+
+ // did they change invoice?
+ $invoice_items = $req->request->get('invoice_items', []);
+ $promo_id = $req->request->get('invoice_promo');
+ $invoice_change = $req->request->get('invoice_change', 0);
+ if ($invoice_change)
+ {
+ $this->ic->generateInvoiceCriteria($obj, $promo_id, $invoice_items, $error_array);
+ }
+
+ // validate
+ $errors = $this->validator->validate($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)) {
+ // return validation failure response
+ return $this->json([
+ 'success' => false,
+ 'errors' => $error_array
+ ], 422);
+ }
+
+ // the event
+ $event = new JOEvent();
+ $event->setDateHappen(new DateTime())
+ ->setTypeID(JOEventType::OPEN_EDIT)
+ ->setJobOrder($obj);
+
+ if ($user != null)
+ {
+ $event->setUser($user);
+ }
+
+ $em->persist($event);
+
+ // validated! save the entity
+ $em->flush();
+ }
+
+ $data['error_array'] = $error_array;
+
+ if ($obj != null)
+ {
+ $data['job_order'] = $obj;
+ }
+
+ return $data;
+
+ }
+
// dispatch job order
public function dispatchJobOrder(Request $req, int $id, MQTTClient $mclient)
{
@@ -2404,8 +2503,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
$this->template_hash['jo_list_fulfillment'] = 'job-order/list.fulfillment.html.twig';
$this->template_hash['jo_list_open'] = 'job-order/list.open.html.twig';
$this->template_hash['jo_list_all'] = 'job-order/list.all.html.twig';
- $this->template_hash['jo_onestep'] = 'job-order/form.onestep.html.twig';
- $this->template_hash['jo_onestep_edit_form'] = 'job-order/form.onestep.html.twig';
+ $this->template_hash['jo_popup'] = 'job-order/popup.html.twig';
}
protected function checkTier($tier)
diff --git a/src/Service/MapTools.php b/src/Service/MapTools.php
index 17511fba..b60130a0 100644
--- a/src/Service/MapTools.php
+++ b/src/Service/MapTools.php
@@ -17,10 +17,15 @@ class MapTools
// google maps api key
protected $gmaps_api_key;
- public function __construct(EntityManagerInterface $em, $gmaps_api_key)
+ // customer distance limit
+ protected $cust_dist_limit;
+
+ public function __construct(EntityManagerInterface $em, $gmaps_api_key,
+ $cust_dist_limit)
{
$this->em = $em;
$this->gmaps_api_key = $gmaps_api_key;
+ $this->cust_dist_limit = $cust_dist_limit;
}
protected function mapGetDistances(Point $point, $hubs)
@@ -148,7 +153,8 @@ class MapTools
return $final_data;
*/
}
-
+
+ // NOTE: only the API calls this
public function getClosestOpenHubs(Point $point, $limit, $time = false)
{
// get closest hubs based on st_distance function from db
@@ -184,14 +190,18 @@ class MapTools
// get distance in kilometers from customer point to hub point
$dist = $this->distance($cust_lat, $cust_lng, $hub_lat, $hub_lng);
- $final_data[] = [
- 'hub' => $row[0],
- 'db_distance' => $row['dist'],
- 'distance' => $dist,
- 'duration' => 0,
- ];
+ if ($dist < $this->cust_dist_limit)
+ {
+ $final_data[] = [
+ 'hub' => $row[0],
+ 'db_distance' => $row['dist'],
+ 'distance' => $dist,
+ 'duration' => 0,
+ ];
+ }
}
+ error_log('nearest open hubs count: ' . count($final_data));
return $final_data;
}
diff --git a/templates/job-order/cmb.popup.html.twig b/templates/job-order/cmb.popup.html.twig
new file mode 100644
index 00000000..d4e67d48
--- /dev/null
+++ b/templates/job-order/cmb.popup.html.twig
@@ -0,0 +1,13 @@
+{% set cust = jo.getCustomer %}
+{% set cv = jo.getCustomerVehicle %}
+{{ cust.getNameDisplay }}
+{{ cv.getPlateNumber }}
+Job Order #{{ jo.getID }}
+{{ jo.getServiceTypeName }}
+{{ jo.getStatusText }}
+{% if jo.getRider != null %}
+
+{% set rider = jo.getRider %}
+{{ rider.getFullName }}
+{{ rider.getPlateNumber }}
+{% endif %}
diff --git a/templates/job-order/popup.html.twig b/templates/job-order/popup.html.twig
index d4e67d48..b7e96f04 100644
--- a/templates/job-order/popup.html.twig
+++ b/templates/job-order/popup.html.twig
@@ -2,7 +2,7 @@
{% set cv = jo.getCustomerVehicle %}
{{ cust.getNameDisplay }}
{{ cv.getPlateNumber }}
-Job Order #{{ jo.getID }}
+Job Order #{{ jo.getID }}
{{ jo.getServiceTypeName }}
{{ jo.getStatusText }}
{% if jo.getRider != null %}