diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 94cede5f..f24e2f6c 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -746,27 +746,45 @@ class ReportController extends Controller // csv output $csv_handle = fopen('php://output', 'w+'); fputcsv($csv_handle, [ - 'Job Order ID', - 'Dispatcher', - 'Coordinate Latitude', - 'Coordinate Longitude', - 'Date and Time Hub Assigned for JO', - 'Date Hub Assigned for JO', - 'Time Hub Assigned for JO', - 'Date and Time Rider Assigned for JO', - 'Date Rider Assigned for JO', - 'Time Rider Assigned for JO', - 'Date and Time Created for Invoice', - 'Date and Time Created for JO', - 'Date Created for JO', - 'Time Created for JO', - 'Outlet Name', - 'Rider Name', + 'Month', + 'Scheduled Date and Time', + 'Scheduled Date', + 'Scheduled Time', + 'Distributor', // hub + 'Battery Facilitated By', // facilitated_hub + 'Job Order Number', 'Service Type', + 'Customer Name', + 'Customer Mobile Number', + 'Plate Number', + 'SKU', + 'Serial Number', + 'Invoice/DR No.', + 'Existing Battery', + 'Rider Name', + 'DPA', + 'Created Date and Time', + 'Date Created', + 'Time Created', + 'Date and Time Dispatched', + 'Date Dispatched', + 'Time Dispatched', + 'Date and Time Arrived', + 'Date Arrived', + 'Time Arrived', + 'Created vs Arrival', + 'Customer Latitude', + 'Customer Longitude', + 'Hub Latitude', + 'Hub Longitude', + 'Facilitated Hub Latitude', + 'Facilitated Hub Longitude', + 'Dispatcher', + 'Agent (Created)', + 'Date Create (Invoice)', 'Source', 'Status', - 'SKU', - + 'Flag Advance', ]); foreach ($data as $row) { @@ -1307,9 +1325,40 @@ class ReportController extends Controller if ($dispatcher != null) $dispatcher_name = $dispatcher->getFullName(); + // get agent if any + $agent_name = ''; + $agent = $jo->getCreatedBy(); + if ($agent != null) + $agent_name = $agent->getFullName(); + + // get customer coordinates $coord_long = $jo->getCoordinates()->getLongitude(); $coord_lat = $jo->getCoordinates()->getLatitude(); + // get hub and hub coordinates, if any + $hub_name = ''; + $hub_coord_long = ''; + $hub_coord_lat = ''; + $hub = $jo->getHub(); + if ($hub != null) + { + $hub_name = $hub->getName(); + $hub_coord_long = $hub->getCoordinates()->getLongitude(); + $hub_coord_lat = $hub->getCoordinates()->getLatitude(); + } + + // get facilitated hub coordinates if any + $fac_hub_name = ''; + $fac_hub_coord_long = ''; + $fac_hub_coord_lat = ''; + $fac_hub = $jo->getFacilitatedBy(); + if ($fac_hub != null) + { + $fac_hub_name = $fac_hub->getName(); + $fac_hub_coord_long = $fac_hub->getCoordinates()->getLongitude(); + $fac_hub_coord_lat = $fac_hub->getCoordinates()->getLatitude(); + } + // find date and time when JO was assigned a hub $datetime_hub_assign_jo = ''; $date_hub_assign_jo = ''; @@ -1322,13 +1371,14 @@ class ReportController extends Controller // right now, this gets the last time hub was assigned. foreach ($hub_assign_events as $hub_assign_event) { - $datetime_hub_assign_jo = $hub_assign_event->getDateHappen()->format('m-d-Y H:i'); - $date_hub_assign_jo = $hub_assign_event->getDateHappen()->format('m-d-Y'); + $datetime_hub_assign_jo = $hub_assign_event->getDateHappen()->format('d-M-Y H:i'); + $date_hub_assign_jo = $hub_assign_event->getDateHappen()->format('d-M-Y'); $time_hub_assign_jo = $hub_assign_event->getDateHappen()->format('H:i'); } } // find date and time when JO was assigned a rider + /* $datetime_rider_assign_jo = ''; $date_rider_assign_jo = ''; $time_rider_assign_jo = ''; @@ -1340,20 +1390,50 @@ class ReportController extends Controller { // TODO: what happens if JO was reassigned a rider multiple times? // right now, this gets the last time rider was assigned. - $datetime_rider_assign_jo = $rider_assign_event->getDateHappen()->format('m-d-Y H:i'); - $date_rider_assign_jo = $rider_assign_event->getDateHappen()->format('m-d-Y'); + $datetime_rider_assign_jo = $rider_assign_event->getDateHappen()->format('d-M-Y H:i'); + $date_rider_assign_jo = $rider_assign_event->getDateHappen()->format('d-M-Y'); $time_rider_assign_jo = $rider_assign_event->getDateHappen()->format('H:i'); } + } */ + + // find date and time when rider arrived at customer + $datetime_rider_arrive_jo = ''; + $date_rider_arrive_jo = ''; + $time_rider_arrive_jo = ''; + $rider_arrive_event_type = JOEventType::RIDER_ARRIVE; + $dt_rider_arrive = null; + $rider_arrive_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_arrive_event_type], ['date_happen' => 'DESC']); + if ($rider_arrive_events != null) + { + foreach ($rider_arrive_events as $rider_arrive_event) + { + $dt_rider_arrive = $rider_arrive_event->getDateHappen(); + $datetime_rider_arrive_jo = $rider_arrive_event->getDateHappen()->format('d-M-Y H:i'); + $date_rider_arrive_jo = $rider_arrive_event->getDateHappen()->format('d-M-Y'); + $time_rider_arrive_jo = $rider_arrive_event->getDateHappen()->format('H:i'); + } } - // get invoice date create and item sku if any + // compute time difference between jo creation and rider arrival + $time_diff_create_arrive = ''; + if ($dt_rider_arrive != null) + { + $jo_create_time = $jo->getDateCreate(); + + // get time difference + $interval = $dt_rider_arrive->diff($jo_create_time); + $time_diff_create_arrive = $interval->format('%h:%i'); + } + + // get invoice date create and item sku and serial if any $datetime_create_invoice = ''; $sku = ''; + $serial = ''; $invoice = $jo->getInvoice(); if ($invoice != null) { $invoice_create = $invoice->getDateCreate(); - $datetime_create_invoice = $invoice_create->format('m-d-Y H:i'); + $datetime_create_invoice = $invoice_create->format('d-M-Y H:i'); // get item sku $invoice_items = $invoice->getItems(); @@ -1361,7 +1441,10 @@ class ReportController extends Controller { $battery = $item->getBattery(); if ($battery != null) + { $sku = $battery->getModel()->getName() . ' ' . $battery->getSize()->getName(); + $serial = $battery->getSAPCode(); + } } } @@ -1371,15 +1454,31 @@ class ReportController extends Controller $time_create_jo = ''; $jo_create = $jo->getDateCreate(); - $datetime_create_jo = $jo_create->format('m-d-Y H:i'); - $date_create_jo = $jo_create->format('m-d-Y'); + $datetime_create_jo = $jo_create->format('d-M-Y H:i'); + $date_create_jo = $jo_create->format('d-M-Y'); $time_create_jo = $jo_create->format('H:i'); - // get hub if any - $hub_name = ''; - $hub = $jo->getHub(); - if ($hub != null) - $hub_name = $hub->getName(); + // get jo date schedule if any + $datetime_sked_jo = ''; + $date_sked_jo = ''; + $time_sked_jo = ''; + $jo_date_scheduled = $jo->getDateSchedule(); + if (empty($jo_date_scheduled)) + { + // set to same date and time as date create of JO + $datetime_sked_jo = $datetime_create_jo; + $date_sked_jo = $date_create_jo; + $time_sked_jo = $time_create_jo; + } + else + { + $datetime_sked_jo = $jo_date_scheduled->format('d-M-Y H:i'); + $date_sked_jo = $jo_date_scheduled->format('d-M-Y'); + $time_sked_jo = $jo_date_scheduled->format('H:i'); + } + + // get month from date_create + $month = $jo_create->format('M'); // get rider if any $rider_name = ''; @@ -1387,27 +1486,82 @@ class ReportController extends Controller if ($rider != null) $rider_name = $rider->getFullName(); + // get customer information + $cust_name = ''; + $cust_mobile_number = ''; + $plate_number = ''; + $dpa = 'No'; + $existing_batt = ''; + + $customer = $jo->getCustomer(); + if ($customer != null) + { + $cust_name = $customer->getNameDisplay(); + if ($customer->isDpaConsent()) + $dpa = 'Yes'; + + // get mobile number from mobile session + // find latest generated mobile session for customer + $mobile_sessions = $em->getRepository(MobileSession::class)->findBy(['customer' => $customer], ['date_generated' => 'DESC']); + if ($mobile_sessions != null) + { + foreach($mobile_sessions as $mobile_session) + { + $cust_mobile_number = $mobile_session->getPhoneNumber(); + } + } + } + + // get customer vehicle + $cust_vehicle = $jo->getCustomerVehicle(); + if ($cust_vehicle != null) + { + $plate_number = $cust_vehicle->getPlateNumber(); + $curr_batt = $cust_vehicle->getCurrentBattery(); + if ($curr_batt != null) + $existing_batt = $curr_batt->getModel()->getName() . ' ' . $curr_batt->getSize()->getName(); + } + $result[] = [ + $month, + $datetime_sked_jo, + $date_sked_jo, + $time_sked_jo, + $hub_name, + $fac_hub_name, $jo->getID(), - $dispatcher_name, - $coord_lat, - $coord_long, - $datetime_hub_assign_jo, - $date_hub_assign_jo, - $time_hub_assign_jo, - $datetime_rider_assign_jo, - $date_rider_assign_jo, - $time_rider_assign_jo, - $datetime_create_invoice, + $jo->getServiceType(), + $cust_name, + $cust_mobile_number, + $plate_number, + $sku, + $serial, + $jo->getORName(), + $existing_batt, + $rider_name, + $dpa, $datetime_create_jo, $date_create_jo, $time_create_jo, - $hub_name, - $rider_name, - $jo->getServiceType(), + $datetime_hub_assign_jo, + $date_hub_assign_jo, + $time_hub_assign_jo, + $datetime_rider_arrive_jo, + $date_rider_arrive_jo, + $time_rider_arrive_jo, + $time_diff_create_arrive, + $coord_lat, + $coord_long, + $hub_coord_lat, + $hub_coord_long, + $fac_hub_coord_lat, + $fac_hub_coord_long, + $dispatcher_name, + $agent_name, + $datetime_create_invoice, $jo->getSource(), $jo->getStatus(), - $sku, + $jo->isAdvanceOrder() ? 'Yes' : 'No' ]; }