Move JO event creation to job order service. #591
This commit is contained in:
parent
b0c04984ab
commit
19ec112bd2
4 changed files with 229 additions and 157 deletions
|
|
@ -304,3 +304,10 @@ services:
|
||||||
App\Service\MobileAPIHandler:
|
App\Service\MobileAPIHandler:
|
||||||
arguments:
|
arguments:
|
||||||
$em: "@doctrine.orm.entity_manager"
|
$em: "@doctrine.orm.entity_manager"
|
||||||
|
|
||||||
|
# job order service
|
||||||
|
App\Service\JobOrderManager:
|
||||||
|
arguments:
|
||||||
|
$em: "@doctrine.orm.entity_manager"
|
||||||
|
$rah: "@App\\Service\\RiderAssignmentHandlerInterface"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ use App\Service\HubFilterLogger;
|
||||||
use App\Service\HubFilteringGeoChecker;
|
use App\Service\HubFilteringGeoChecker;
|
||||||
use App\Service\MobileAPIHandler;
|
use App\Service\MobileAPIHandler;
|
||||||
use App\Service\RiderTracker;
|
use App\Service\RiderTracker;
|
||||||
|
use App\Service\JobOrderManager;
|
||||||
|
|
||||||
use App\Entity\JobOrder;
|
use App\Entity\JobOrder;
|
||||||
use App\Entity\CustomerVehicle;
|
use App\Entity\CustomerVehicle;
|
||||||
|
|
@ -47,6 +48,7 @@ use App\Entity\Battery;
|
||||||
use App\Entity\JOEvent;
|
use App\Entity\JOEvent;
|
||||||
use App\Entity\Customer;
|
use App\Entity\Customer;
|
||||||
use App\Entity\Hub;
|
use App\Entity\Hub;
|
||||||
|
use App\Entity\Invoice;
|
||||||
|
|
||||||
use Catalyst\APIBundle\Access\Generator as ACLGenerator;
|
use Catalyst\APIBundle\Access\Generator as ACLGenerator;
|
||||||
|
|
||||||
|
|
@ -66,7 +68,7 @@ class JobOrderController extends APIController
|
||||||
InventoryManager $im, MQTTClient $mclient, RiderAssignmentHandlerInterface $rah,
|
InventoryManager $im, MQTTClient $mclient, RiderAssignmentHandlerInterface $rah,
|
||||||
PromoLogger $promo_logger, EntityManagerInterface $em, HubSelector $hub_select,
|
PromoLogger $promo_logger, EntityManagerInterface $em, HubSelector $hub_select,
|
||||||
HubDistributor $hub_dist, HubFilterLogger $hub_filter_logger, HubFilteringGeoChecker $hub_geofence,
|
HubDistributor $hub_dist, HubFilterLogger $hub_filter_logger, HubFilteringGeoChecker $hub_geofence,
|
||||||
MobileAPIHandler $mah)
|
MobileAPIHandler $mah, JobOrderManager $jo_manager)
|
||||||
{
|
{
|
||||||
$this->denyAccessUnlessGranted('mobile_jo.request', null, 'No access.');
|
$this->denyAccessUnlessGranted('mobile_jo.request', null, 'No access.');
|
||||||
|
|
||||||
|
|
@ -134,7 +136,7 @@ class JobOrderController extends APIController
|
||||||
$em->persist($invoice);
|
$em->persist($invoice);
|
||||||
|
|
||||||
// create JO event logs
|
// create JO event logs
|
||||||
$this->processEvents($em, $jo, $rah, $mclient, JOEventType::CREATE);
|
$jo_manager->processJobOrderEvents($jo, JOEventType::CREATE);
|
||||||
|
|
||||||
// send mqtt events
|
// send mqtt events
|
||||||
$payload = [
|
$payload = [
|
||||||
|
|
@ -162,7 +164,7 @@ class JobOrderController extends APIController
|
||||||
RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger,
|
RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger,
|
||||||
HubSelector $hub_select, HubDistributor $hub_dist, HubFilterLogger $hub_filter_logger,
|
HubSelector $hub_select, HubDistributor $hub_dist, HubFilterLogger $hub_filter_logger,
|
||||||
HubFilteringGeoChecker $hub_geofence, EntityManagerInterface $em,
|
HubFilteringGeoChecker $hub_geofence, EntityManagerInterface $em,
|
||||||
MobileAPIHandler $mah)
|
MobileAPIHandler $mah, JobOrderManager $jo_manager)
|
||||||
{
|
{
|
||||||
$this->denyAccessUnlessGranted('mobile_jo.request', null, 'No access.');
|
$this->denyAccessUnlessGranted('mobile_jo.request', null, 'No access.');
|
||||||
|
|
||||||
|
|
@ -260,7 +262,7 @@ class JobOrderController extends APIController
|
||||||
$em->persist($invoice);
|
$em->persist($invoice);
|
||||||
|
|
||||||
// create JO event logs
|
// create JO event logs
|
||||||
$this->processEvents($em, $jo, $rah, $mclient, JOEventType::CREATE);
|
$jo_manager->processJobOrderEvents($jo, JOEventType::CREATE);
|
||||||
|
|
||||||
// send mqtt events
|
// send mqtt events
|
||||||
$payload = [
|
$payload = [
|
||||||
|
|
@ -376,7 +378,8 @@ class JobOrderController extends APIController
|
||||||
}
|
}
|
||||||
|
|
||||||
public function cancelJobOrder(Request $req, MQTTClient $mclient, EntityManagerInterface $em,
|
public function cancelJobOrder(Request $req, MQTTClient $mclient, EntityManagerInterface $em,
|
||||||
MobileAPIHandler $mah, RiderAssignmentHandlerInterface $rah)
|
MobileAPIHandler $mah, RiderAssignmentHandlerInterface $rah,
|
||||||
|
JobOrderManager $jo_manager)
|
||||||
{
|
{
|
||||||
$this->denyAccessUnlessGranted('mobile_jo.cancel', null, 'No access.');
|
$this->denyAccessUnlessGranted('mobile_jo.cancel', null, 'No access.');
|
||||||
|
|
||||||
|
|
@ -420,7 +423,7 @@ class JobOrderController extends APIController
|
||||||
$jo->cancel($cancel_reason);
|
$jo->cancel($cancel_reason);
|
||||||
|
|
||||||
// create event logs
|
// create event logs
|
||||||
$this->processEvents($em, $jo, $rah, $mclient, JOEventType::CANCEL);
|
$jo_manager->processJobOrderEvents($jo, JOEventType::CANCEL);
|
||||||
|
|
||||||
// send mqtt events
|
// send mqtt events
|
||||||
$payload = [
|
$payload = [
|
||||||
|
|
@ -1110,47 +1113,6 @@ class JobOrderController extends APIController
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function processEvents(EntityManagerInterface $em, JobOrder $jo,
|
|
||||||
RiderAssignmentHandlerInterface $rah, MQTTClient $mclient,
|
|
||||||
$jo_event_type)
|
|
||||||
{
|
|
||||||
// add event log for JO
|
|
||||||
$event = new JOEvent();
|
|
||||||
$event->setDateHappen(new DateTime())
|
|
||||||
->setTypeID($jo_event_type)
|
|
||||||
->setJobOrder($jo);
|
|
||||||
$em->persist($event);
|
|
||||||
|
|
||||||
// check JO status
|
|
||||||
if ($jo->getStatus() == JOStatus::ASSIGNED)
|
|
||||||
{
|
|
||||||
// add event logs for hub and rider assignments
|
|
||||||
$hub_assign_event = new JOEvent();
|
|
||||||
$hub_assign_event->setDateHappen(new DateTime())
|
|
||||||
->setTypeID(JOEventType::HUB_ASSIGN)
|
|
||||||
->setJobOrder($jo);
|
|
||||||
|
|
||||||
$em->persist($hub_assign_event);
|
|
||||||
|
|
||||||
$rider_assign_event = new JOEvent();
|
|
||||||
$rider_assign_event->setDateHappen(new DateTime())
|
|
||||||
->setTypeID(JOEventType::RIDER_ASSIGN)
|
|
||||||
->setJobOrder($jo);
|
|
||||||
|
|
||||||
$em->persist($rider_assign_event);
|
|
||||||
}
|
|
||||||
if ($jo->getStatus() == JOStatus::RIDER_ASSIGN)
|
|
||||||
{
|
|
||||||
// add event logs for hub assignments
|
|
||||||
$hub_assign_event = new JOEvent();
|
|
||||||
$hub_assign_event->setDateHappen(new DateTime())
|
|
||||||
->setTypeID(JOEventType::HUB_ASSIGN)
|
|
||||||
->setJobOrder($jo);
|
|
||||||
|
|
||||||
$em->persist($hub_assign_event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function processMQTTEvents(JobOrder $jo, $payload, MQTTClient $mclient,
|
protected function processMQTTEvents(JobOrder $jo, $payload, MQTTClient $mclient,
|
||||||
RiderAssignmentHandlerInterface$rah)
|
RiderAssignmentHandlerInterface$rah)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,7 @@ use App\Service\PromoLogger;
|
||||||
use App\Service\HubSelector;
|
use App\Service\HubSelector;
|
||||||
use App\Service\HubDistributor;
|
use App\Service\HubDistributor;
|
||||||
use App\Service\HubFilteringGeoChecker;
|
use App\Service\HubFilteringGeoChecker;
|
||||||
|
use App\Service\JobOrderManager;
|
||||||
|
|
||||||
use CrEOF\Spatial\PHP\Types\Geometry\Point;
|
use CrEOF\Spatial\PHP\Types\Geometry\Point;
|
||||||
|
|
||||||
|
|
@ -80,6 +81,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
protected $promo_logger;
|
protected $promo_logger;
|
||||||
protected $hub_dist;
|
protected $hub_dist;
|
||||||
protected $hub_geofence;
|
protected $hub_geofence;
|
||||||
|
protected $mclient;
|
||||||
|
protected $jo_manager;
|
||||||
|
|
||||||
protected $template_hash;
|
protected $template_hash;
|
||||||
|
|
||||||
|
|
@ -87,7 +90,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
InvoiceGeneratorInterface $ic, ValidatorInterface $validator,
|
InvoiceGeneratorInterface $ic, ValidatorInterface $validator,
|
||||||
TranslatorInterface $translator, RiderAssignmentHandlerInterface $rah,
|
TranslatorInterface $translator, RiderAssignmentHandlerInterface $rah,
|
||||||
string $country_code, WarrantyHandler $wh, RisingTideGateway $rt,
|
string $country_code, WarrantyHandler $wh, RisingTideGateway $rt,
|
||||||
PromoLogger $promo_logger, HubDistributor $hub_dist, HubFilteringGeoChecker $hub_geofence)
|
PromoLogger $promo_logger, HubDistributor $hub_dist, HubFilteringGeoChecker $hub_geofence,
|
||||||
|
MQTTClient $mclient, JobOrderManager $jo_manager)
|
||||||
{
|
{
|
||||||
$this->em = $em;
|
$this->em = $em;
|
||||||
$this->ic = $ic;
|
$this->ic = $ic;
|
||||||
|
|
@ -101,6 +105,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$this->promo_logger = $promo_logger;
|
$this->promo_logger = $promo_logger;
|
||||||
$this->hub_dist = $hub_dist;
|
$this->hub_dist = $hub_dist;
|
||||||
$this->hub_geofence = $hub_geofence;
|
$this->hub_geofence = $hub_geofence;
|
||||||
|
$this->mclient = $mclient;
|
||||||
|
$this->jo_manager = $jo_manager;
|
||||||
|
|
||||||
$this->loadTemplates();
|
$this->loadTemplates();
|
||||||
}
|
}
|
||||||
|
|
@ -342,106 +348,18 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
->setDpaConsent($is_dpa_checked);
|
->setDpaConsent($is_dpa_checked);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
// validate and set job order object
|
||||||
if (empty($req->request->get('customer_vehicle'))) {
|
$this->validateJobOrder($req, $error_array);
|
||||||
$error_array['customer_vehicle'] = 'No vehicle selected.';
|
if (empty($error_array))
|
||||||
} else {
|
{
|
||||||
// get customer vehicle
|
// get customer vehicle
|
||||||
$cust_vehicle = $em->getRepository(CustomerVehicle::class)->find($req->request->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 landmark is set
|
|
||||||
if (empty($req->request->get('landmark')))
|
|
||||||
$error_array['landmark'] = 'Landmark is required.';
|
|
||||||
|
|
||||||
// check if customer is not willing to wait
|
|
||||||
$will_wait = $req->request->get('flag_willing_to_wait');
|
|
||||||
$reason = '';
|
|
||||||
$more_reason = '';
|
|
||||||
if ($will_wait == WillingToWaitContent::NOT_WILLING_TO_WAIT)
|
|
||||||
{
|
|
||||||
// get the reason and text
|
|
||||||
$reason = $req->request->get('no_wait_reason');
|
|
||||||
$more_reason = $req->request->get('not_wait_notes');
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if service is battery sales
|
|
||||||
$stype = $req->request->get('service_type');
|
|
||||||
$no_trade_in_reason = '';
|
|
||||||
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))
|
|
||||||
{
|
|
||||||
$no_trade_in_reason = $req->request->get('no_trade_in_reason');
|
|
||||||
|
|
||||||
if (empty($no_trade_in_reason))
|
|
||||||
$error_array['no_trade_in_reason'] = 'No trade in reason required.';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: check status before saving since JO might already
|
// TODO: check status before saving since JO might already
|
||||||
// have a status that needs to be retained
|
// have a status that needs to be retained
|
||||||
|
$this->setJobOrderObject($req, $jo, $cust_vehicle);
|
||||||
|
|
||||||
if (empty($error_array)) {
|
// call service to generate invoice
|
||||||
// get current user
|
|
||||||
$user = $this->security->getUser();
|
|
||||||
|
|
||||||
// coordinates
|
|
||||||
$point = new Point($req->request->get('coord_lng'), $req->request->get('coord_lat'));
|
|
||||||
|
|
||||||
// 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::PENDING)
|
|
||||||
->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'))
|
|
||||||
->setWillWait($req->request->get('flag_willing_to_wait'))
|
|
||||||
->setReasonNotWait($reason)
|
|
||||||
->setNotWaitingNotes($more_reason)
|
|
||||||
->setNoTradeInReason($no_trade_in_reason);
|
|
||||||
|
|
||||||
// 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', []);
|
$invoice_items = $req->request->get('invoice_items', []);
|
||||||
$promo_id = $req->request->get('invoice_promo');
|
$promo_id = $req->request->get('invoice_promo');
|
||||||
$invoice_change = $req->request->get('invoice_change', 0);
|
$invoice_change = $req->request->get('invoice_change', 0);
|
||||||
|
|
@ -467,18 +385,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
$em->persist($jo);
|
$em->persist($jo);
|
||||||
$em->persist($customer);
|
$em->persist($customer);
|
||||||
|
|
||||||
// the event
|
$this->jo_manager->processJobOrderEvents($jo, JOEventType::CREATE);
|
||||||
$event = new JOEvent();
|
|
||||||
$event->setDateHappen(new DateTime())
|
|
||||||
->setTypeID(JOEventType::CREATE)
|
|
||||||
->setJobOrder($jo);
|
|
||||||
|
|
||||||
if ($user != null)
|
|
||||||
{
|
|
||||||
$event->setUser($user);
|
|
||||||
}
|
|
||||||
|
|
||||||
$em->persist($event);
|
|
||||||
$em->flush();
|
$em->flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3004,6 +2912,116 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function validateJobOrder(Request $req, &$error_array)
|
||||||
|
{
|
||||||
|
// 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 = $this->em->getRepository(CustomerVehicle::class)->find($req->request->get('customer_vehicle'));
|
||||||
|
|
||||||
|
if (empty($cust_vehicle)) {
|
||||||
|
$error_array['customer_vehicle'] = 'Invalid vehicle specified.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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(Request $req, JobOrder $jo, $cust_vehicle)
|
||||||
|
{
|
||||||
|
// check if customer is not willing to wait
|
||||||
|
$will_wait = $req->request->get('flag_willing_to_wait');
|
||||||
|
$reason = '';
|
||||||
|
$more_reason = '';
|
||||||
|
if ($will_wait == WillingToWaitContent::NOT_WILLING_TO_WAIT)
|
||||||
|
{
|
||||||
|
// get the reason and text
|
||||||
|
$reason = $req->request->get('no_wait_reason');
|
||||||
|
$more_reason = $req->request->get('not_wait_notes');
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if service is battery sales
|
||||||
|
$stype = $req->request->get('service_type');
|
||||||
|
$no_trade_in_reason = '';
|
||||||
|
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))
|
||||||
|
$no_trade_in_reason = $req->request->get('no_trade_in_reason');
|
||||||
|
}
|
||||||
|
|
||||||
|
// coordinates
|
||||||
|
$point = new Point($req->request->get('coord_lng'), $req->request->get('coord_lat'));
|
||||||
|
|
||||||
|
// 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::PENDING)
|
||||||
|
->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'))
|
||||||
|
->setWillWait($req->request->get('flag_willing_to_wait'))
|
||||||
|
->setReasonNotWait($reason)
|
||||||
|
->setNotWaitingNotes($more_reason)
|
||||||
|
->setNoTradeInReason($no_trade_in_reason);
|
||||||
|
|
||||||
|
// get current user
|
||||||
|
$user = $this->security->getUser();
|
||||||
|
if ($user != null)
|
||||||
|
$jo->setCreatedBy($user);
|
||||||
|
|
||||||
|
// 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'));
|
||||||
|
$jo->setReferenceJO($ref_jo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function getEditRoute($jo_id, $tier)
|
public function getEditRoute($jo_id, $tier)
|
||||||
{
|
{
|
||||||
if (empty($tier))
|
if (empty($tier))
|
||||||
|
|
|
||||||
|
|
@ -2,19 +2,34 @@
|
||||||
|
|
||||||
namespace App\Service;
|
namespace App\Service;
|
||||||
|
|
||||||
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
|
||||||
|
use Symfony\Component\Security\Core\Security;
|
||||||
|
|
||||||
use App\Entity\JobOrder;
|
use App\Entity\JobOrder;
|
||||||
|
use App\Entity\JOEvent;
|
||||||
|
use App\Entity\User;
|
||||||
|
|
||||||
use App\Ramcar\ServiceType;
|
use App\Ramcar\ServiceType;
|
||||||
|
use App\Ramcar\JOStatus;
|
||||||
|
use App\Ramcar\JOEventType;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use DateTime;
|
||||||
|
|
||||||
class JobOrderManager
|
class JobOrderManager
|
||||||
{
|
{
|
||||||
protected $em;
|
protected $em;
|
||||||
|
protected $security;
|
||||||
|
protected $rah;
|
||||||
|
protected $mclient;
|
||||||
|
|
||||||
public function __construct(EntityManagerInterface $em)
|
public function __construct(EntityManagerInterface $em, Security $security,
|
||||||
|
RiderAssignmentHandlerInterface $rah, MQTTClient $mclient)
|
||||||
{
|
{
|
||||||
$this->em = $em;
|
$this->em = $em;
|
||||||
|
$this->security = $security;
|
||||||
|
$this->rah = $rah;
|
||||||
|
$this->mclient = $mclient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function fulfillJobOrder($jo_id)
|
public function fulfillJobOrder($jo_id)
|
||||||
|
|
@ -51,4 +66,74 @@ class JobOrderManager
|
||||||
$this->em->flush();
|
$this->em->flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function processJobOrderEvents(JobOrder $jo, $jo_event_type)
|
||||||
|
{
|
||||||
|
$em = $this->em;
|
||||||
|
|
||||||
|
// check for the jo event type
|
||||||
|
if ($jo_event_type == JOEventType::CREATE)
|
||||||
|
{
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
// check for JO status for additional events
|
||||||
|
// (1) when mobile app gets a new JO, finds a hub and assigns a rider
|
||||||
|
if ($jo->getStatus() == JOStatus::ASSIGNED)
|
||||||
|
{
|
||||||
|
// add event logs for hub and rider assignments
|
||||||
|
$hub_assign_event = new JOEvent();
|
||||||
|
$hub_assign_event->setDateHappen(new DateTime())
|
||||||
|
->setTypeID(JOEventType::HUB_ASSIGN)
|
||||||
|
->setJobOrder($jo);
|
||||||
|
|
||||||
|
$em->persist($hub_assign_event);
|
||||||
|
|
||||||
|
$rider_assign_event = new JOEvent();
|
||||||
|
$rider_assign_event->setDateHappen(new DateTime())
|
||||||
|
->setTypeID(JOEventType::RIDER_ASSIGN)
|
||||||
|
->setJobOrder($jo);
|
||||||
|
|
||||||
|
$em->persist($rider_assign_event);
|
||||||
|
}
|
||||||
|
// (2) when mobile app gets a new JO, finds a hub but no rider
|
||||||
|
if ($jo->getStatus() == JOStatus::RIDER_ASSIGN)
|
||||||
|
{
|
||||||
|
// add event logs for hub assignments
|
||||||
|
$hub_assign_event = new JOEvent();
|
||||||
|
$hub_assign_event->setDateHappen(new DateTime())
|
||||||
|
->setTypeID(JOEventType::HUB_ASSIGN)
|
||||||
|
->setJobOrder($jo);
|
||||||
|
|
||||||
|
$em->persist($hub_assign_event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO: check for other JO event types
|
||||||
|
if ($jo_event_type == JOEventType::CANCEL)
|
||||||
|
{
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue