resq/src/Controller/HomeController.php
2020-04-15 07:32:05 +00:00

147 lines
4.2 KiB
PHP

<?php
namespace App\Controller;
use Catalyst\MenuBundle\Annotation\Menu;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Doctrine\ORM\EntityManagerInterface;
use App\Service\RiderTracker;
use App\Service\GISManagerInterface;
use App\Service\JobOrderCache;
use App\Service\RiderCache;
use App\Entity\Rider;
use App\Entity\JobOrder;
use App\Ramcar\TransactionOrigin;
class HomeController extends Controller
{
/**
* @Menu(selected="home")
*/
public function index(
EntityManagerInterface $em,
RiderTracker $rider_tracker,
GISManagerInterface $gis_manager
)
{
// get map
$params['map_js_file'] = $gis_manager->getJSInitFile();
return $this->render('home.html.twig', $params);
}
public function getMapLocations(JobOrderCache $jo_cache)
{
$active_jos = $jo_cache->getAllActiveJobOrders();
// get active JOs from cache
}
public function getRiderLocations(JobOrderCache $jo_cache, RiderCache $rider_cache, EntityManagerInterface $em, RiderTracker $rider_tracker)
{
// get active JOs from cache
$active_jos = $jo_cache->getAllActiveJobOrders();
$riders = $rider_cache->getAllActiveRiders();
// TODO: optimize this
// get all riders and figure out if they have active jos
foreach ($riders as $rider_id => $rider_data)
{
$rider = $em->getRepository(Rider::class)->find($rider_id);
if ($rider == null)
{
unset($riders[$rider_id]);
continue;
}
$jo = $rider->getActiveJobOrder();
if ($jo == null)
$riders[$rider_id]['has_jo'] = false;
else
$riders[$rider_id]['has_jo'] = true;
}
// get JOs with transaction origin TransactionOrigin::MOBILE_APP from list of active_jos
$mobile_jos = [];
foreach ($active_jos as $jo_id => $jo_data)
{
$jo = $em->getRepository(JobOrder::class)->find($jo_id);
if ($jo == null)
{
unset($active_jos[$jo_id]);
continue;
}
if ($jo->getSource() == TransactionOrigin::MOBILE_APP)
{
$mobile_jos[$jo_id] = $jo_data;
unset($active_jos[$jo_id]);
}
}
// get active riders from cache
// get all riders
/*
$riders = $em->getRepository(Rider::class)->findAll();
$locations = [];
foreach ($riders as $rider)
{
// get location for each rider
$rider_id = $rider->getID();
$coordinates = $rider_tracker->getRiderLocation($rider_id);
$lat = $coordinates->getLatitude();
$long = $coordinates->getLongitude();
$jo = $rider->getActiveJobOrder();
if ($jo == null)
{
$has_jo = false;
$clat = 0;
$clong = 0;
$jo_data = [];
}
else
{
$has_jo = true;
$cust_loc = $jo->getCoordinates();
$clat = $cust_loc->getLatitude();
$clong = $cust_loc->getLongitude();
$jo_id = $jo->getID();
$jo_data = [
'id' => $jo_id,
'status' => $jo->getStatusText(),
'stype' => $jo->getServiceTypeName(),
'url' => $this->generateUrl('jo_all_form', ['id' => $jo_id]),
'plate' => $jo->getCustomerVehicle()->getPlateNumber(),
'cname' => $jo->getCustomer()->getNameDisplay(),
];
}
// use rider map label as key
$rider_map_label = $rider->getMapLabel();
$locations[$rider_id] = [
'label' => $rider->getMapLabel(),
'loc' => [$lat, $long],
'has_jo' => $has_jo,
'cust_loc' => [$clat, $clong],
'jo' => $jo_data,
];
}
*/
return $this->json([
'jos' => $active_jos,
'riders' => $riders,
'mobile_jos' => $mobile_jos,
]);
}
}