Added one step form for CMB. #270
This commit is contained in:
parent
35f0d9c7be
commit
260c218724
3 changed files with 1680 additions and 0 deletions
|
|
@ -383,6 +383,154 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
return $error_array;
|
return $error_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function generateOneStepJobOrder(Request $req, $id)
|
||||||
|
{
|
||||||
|
// initialize error list
|
||||||
|
$error_array = [];
|
||||||
|
|
||||||
|
$em = $this->em;
|
||||||
|
|
||||||
|
$jo = $em->getRepository(JobOrder::class)->find($id);
|
||||||
|
if (empty($jo))
|
||||||
|
{
|
||||||
|
// new job order
|
||||||
|
$jo = new JobOrder();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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 customer vehicle is set
|
||||||
|
if (empty($req->request->get('customer_vehicle'))) {
|
||||||
|
$error_array['customer_vehicle'] = 'No vehicle selected.';
|
||||||
|
} else {
|
||||||
|
// get customer vehicle
|
||||||
|
$cust_vehicle = $em->getRepository(CustomerVehicle::class)->find($req->request->get('customer_vehicle'));
|
||||||
|
|
||||||
|
if (empty($cust_vehicle)) {
|
||||||
|
$error_array['customer_vehicle'] = 'Invalid vehicle specified.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if hub AND rider is selected
|
||||||
|
if ((empty($req->request->get('hub_id'))) &&
|
||||||
|
(empty($req->request->get('rider_id')))) {
|
||||||
|
$error_array['hub'] = 'No hub selected.';
|
||||||
|
} else {
|
||||||
|
if (empty($req->request->get('rider_id'))) {
|
||||||
|
$error_array['rider'] = 'No rider selected.';
|
||||||
|
} else {
|
||||||
|
// get hub
|
||||||
|
$hub = $em->getRepository(Hub::class)->find($req->request->get('hub_id'));
|
||||||
|
|
||||||
|
if (empty($hub)) {
|
||||||
|
$error_array['hub'] = 'Invalid hub specified.';
|
||||||
|
} else {
|
||||||
|
// get rider
|
||||||
|
$rider = $em->getRepository(Rider::class)->find($req->request->get('rider_id'));
|
||||||
|
|
||||||
|
if (empty($rider)) {
|
||||||
|
$error_array['rider'] = 'Invalid rider specified.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
$jo->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'))
|
||||||
|
->setCustomer($cust_vehicle->getCustomer())
|
||||||
|
->setCustomerVehicle($cust_vehicle)
|
||||||
|
->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'))
|
||||||
|
->setORName($req->request->get('or_name'))
|
||||||
|
->setPromoDetail($req->request->get('promo_detail'))
|
||||||
|
->setModeOfPayment($req->request->get('mode_of_payment'))
|
||||||
|
->setLandmark($req->request->get('landmark'))
|
||||||
|
->setHub($hub)
|
||||||
|
->setRider($rider);
|
||||||
|
|
||||||
|
// check if user is null, meaning call to create came from API
|
||||||
|
if ($user != null)
|
||||||
|
{
|
||||||
|
$jo->setCreatedBy($user);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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.';
|
||||||
|
} else {
|
||||||
|
$jo->setReferenceJO($ref_jo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// call service to generate job order and invoice
|
||||||
|
$invoice_items = $req->request->get('invoice_items', []);
|
||||||
|
$promo_id = $req->request->get('invoice_promo');
|
||||||
|
$invoice_change = $req->request->get('invoice_change', 0);
|
||||||
|
|
||||||
|
// check if invoice changed
|
||||||
|
if ($invoice_change)
|
||||||
|
{
|
||||||
|
$this->ic->generateInvoiceCriteria($jo, $promo_id, $invoice_items, $error_array);
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate
|
||||||
|
$errors = $this->validator->validate($jo);
|
||||||
|
|
||||||
|
// add errors to list
|
||||||
|
foreach ($errors as $error) {
|
||||||
|
$error_array[$error->getPropertyPath()] = $error->getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if errors are found
|
||||||
|
if (empty($error_array))
|
||||||
|
{
|
||||||
|
// validated, no error. save the job order
|
||||||
|
$em->persist($jo);
|
||||||
|
|
||||||
|
// the event
|
||||||
|
$event = new JOEvent();
|
||||||
|
$event->setDateHappen(new DateTime())
|
||||||
|
->setTypeID(JOEventType::CREATE)
|
||||||
|
->setJobOrder($jo);
|
||||||
|
|
||||||
|
if ($user != null)
|
||||||
|
{
|
||||||
|
$event->setUser($user);
|
||||||
|
}
|
||||||
|
|
||||||
|
$em->persist($event);
|
||||||
|
$em->flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $error_array;
|
||||||
|
}
|
||||||
|
|
||||||
// dispatch job order
|
// dispatch job order
|
||||||
public function dispatchJobOrder(Request $req, int $id, MQTTClient $mclient)
|
public function dispatchJobOrder(Request $req, int $id, MQTTClient $mclient)
|
||||||
{
|
{
|
||||||
|
|
@ -1095,6 +1243,81 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
return $params;
|
return $params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function initializeOneStepForm()
|
||||||
|
{
|
||||||
|
$params['obj'] = new JobOrder();
|
||||||
|
$params['mode'] = 'onestep';
|
||||||
|
|
||||||
|
$this->fillDropdownParameters($params);
|
||||||
|
$this->fillFormTags($params);
|
||||||
|
|
||||||
|
// get template to display
|
||||||
|
$params['template'] = $this->getTwigTemplate('jo_onestep');
|
||||||
|
|
||||||
|
// return params
|
||||||
|
return $params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function initializeOneStepEditForm($id, $map_tools)
|
||||||
|
{
|
||||||
|
$em = $this->em;
|
||||||
|
$obj = $em->getRepository(JobOrder::class)->find($id);
|
||||||
|
|
||||||
|
$params['obj'] = $obj;
|
||||||
|
$params['mode'] = 'onestep-edit';
|
||||||
|
$params['cvid'] = $obj->getCustomerVehicle()->getID();
|
||||||
|
$params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID();
|
||||||
|
|
||||||
|
$this->fillDropdownParameters($params);
|
||||||
|
$this->fillFormTags($params);
|
||||||
|
|
||||||
|
// get the hubs
|
||||||
|
// TODO: move this snippet to a function
|
||||||
|
$hubs = $map_tools->getClosestHubs($obj->getCoordinates(), 50, date("H:i:s"));
|
||||||
|
|
||||||
|
$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();
|
||||||
|
|
||||||
|
$params['hubs'][] = $hub;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// get template to display
|
||||||
|
$params['template'] = $this->getTwigTemplate('jo_onestep_edit_form');
|
||||||
|
|
||||||
|
return $params;
|
||||||
|
}
|
||||||
|
|
||||||
// initialize open edit job order form
|
// initialize open edit job order form
|
||||||
public function initializeOpenEditForm($id)
|
public function initializeOpenEditForm($id)
|
||||||
{
|
{
|
||||||
|
|
@ -2007,6 +2230,17 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$params['ftags']['invoice_edit'] = true;
|
$params['ftags']['invoice_edit'] = true;
|
||||||
$params['ftags']['preset_vehicle'] = true;
|
$params['ftags']['preset_vehicle'] = true;
|
||||||
break;
|
break;
|
||||||
|
case 'onestep':
|
||||||
|
$params['ftags']['vehicle_dropdown'] = true;
|
||||||
|
$params['ftags']['set_map_coordinate'] = false;
|
||||||
|
$params['ftags']['invoice_edit'] = true;
|
||||||
|
$params['ftags']['ticket_table'] = false;
|
||||||
|
$params['ftags']['cancel_button'] = false;
|
||||||
|
break;
|
||||||
|
case 'onestep-edit':
|
||||||
|
$params['ftags']['invoice_edit'] = true;
|
||||||
|
$params['ftags']['preset_vehicle'] = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2015,6 +2249,10 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$this->template_hash = [];
|
$this->template_hash = [];
|
||||||
|
|
||||||
// add all twig templates for job order to hash
|
// add all twig templates for job order to hash
|
||||||
|
// TODO: put this in an array declaration
|
||||||
|
// $this->template_hash = [
|
||||||
|
// 'blah' => 'blah',
|
||||||
|
// ];
|
||||||
$this->template_hash['jo_incoming_form'] = 'job-order/cmb.form.html.twig';
|
$this->template_hash['jo_incoming_form'] = 'job-order/cmb.form.html.twig';
|
||||||
$this->template_hash['jo_open_edit_form'] = 'job-order/cmb.form.html.twig';
|
$this->template_hash['jo_open_edit_form'] = 'job-order/cmb.form.html.twig';
|
||||||
$this->template_hash['jo_incoming_vehicle_form'] = 'job-order/cmb.form.html.twig';
|
$this->template_hash['jo_incoming_vehicle_form'] = 'job-order/cmb.form.html.twig';
|
||||||
|
|
@ -2029,6 +2267,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$this->template_hash['jo_list_fulfillment'] = 'job-order/list.fulfillment.html.twig';
|
$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_open'] = 'job-order/list.open.html.twig';
|
||||||
$this->template_hash['jo_list_all'] = 'job-order/list.all.html.twig';
|
$this->template_hash['jo_list_all'] = 'job-order/list.all.html.twig';
|
||||||
|
$this->template_hash['jo_onestep'] = 'job-order/cmb.form.onestep.html.twig';
|
||||||
|
$this->template_hash['jo_onestep_edit_form'] = 'job-order/cmb.form.onestep.html.twig';
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function checkTier($tier)
|
protected function checkTier($tier)
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,9 @@ interface JobOrderHandlerInterface
|
||||||
// generate job order
|
// generate job order
|
||||||
public function generateJobOrder(Request $req, int $id);
|
public function generateJobOrder(Request $req, int $id);
|
||||||
|
|
||||||
|
// generate one step job order
|
||||||
|
public function generateOneStepJobOrder(Request $req, int $id);
|
||||||
|
|
||||||
// dispatch job order
|
// dispatch job order
|
||||||
public function dispatchJobOrder(Request $req, int $id, MQTTClient $mclient);
|
public function dispatchJobOrder(Request $req, int $id, MQTTClient $mclient);
|
||||||
|
|
||||||
|
|
@ -76,6 +79,12 @@ interface JobOrderHandlerInterface
|
||||||
// initialize rider form
|
// initialize rider form
|
||||||
public function initializeRiderForm(int $id);
|
public function initializeRiderForm(int $id);
|
||||||
|
|
||||||
|
// initialize one step form
|
||||||
|
public function initializeOneStepForm();
|
||||||
|
|
||||||
|
// initialize one step edit form
|
||||||
|
public function initializeOneStepEditForm(int $id, MapTools $map_tools);
|
||||||
|
|
||||||
// generate pdf form for job order
|
// generate pdf form for job order
|
||||||
public function generatePDFForm(Request $req, int $id, string $proj_path);
|
public function generatePDFForm(Request $req, int $id, string $proj_path);
|
||||||
|
|
||||||
|
|
|
||||||
1431
templates/job-order/cmb.form.onestep.html.twig
Normal file
1431
templates/job-order/cmb.form.onestep.html.twig
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue