add itinerary report page, update map page, add markers for origin and destination, add filter-itinerary-by-case method
This commit is contained in:
parent
03c7153565
commit
af41590fd3
@ -8,6 +8,7 @@ use App\Entity\Location;
|
|||||||
use App\Entity\MemberCase;
|
use App\Entity\MemberCase;
|
||||||
use App\Entity\Messages;
|
use App\Entity\Messages;
|
||||||
use App\Entity\User;
|
use App\Entity\User;
|
||||||
|
use App\Entity\UserCase;
|
||||||
use App\Libs\Breadcrumb;
|
use App\Libs\Breadcrumb;
|
||||||
use App\Libs\Libs;
|
use App\Libs\Libs;
|
||||||
use App\Libs\NavList;
|
use App\Libs\NavList;
|
||||||
@ -38,15 +39,57 @@ class ItineraryController extends AbstractController
|
|||||||
$this->navLinks = NavList::LIST;
|
$this->navLinks = NavList::LIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Route('/itinerary/map', name: 'app_map_itinerary')]
|
#[Route('/itinerary/report', name: 'app_report_itinerary')]
|
||||||
public function mapItinerary(Request $request, #[CurrentUser()] ?User $user): Response
|
public function reportItinerary(Request $request, #[CurrentUser()] ?User $user): Response
|
||||||
{
|
{
|
||||||
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($user);
|
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($user);
|
||||||
$this->notificationCount = $this->entityManager->getRepository(Messages::class)->getUnreadMessageCount($user);
|
$this->notificationCount = $this->entityManager->getRepository(Messages::class)->getUnreadMessageCount($user);
|
||||||
|
|
||||||
$itineraries = $this->entityManager->getRepository(CaseItinerary::class)->findBy([
|
$itineraries = $this->entityManager->getRepository(CaseItinerary::class)->getRecentTravel(
|
||||||
'memberCase' => $request->getPayload()->get('caseId'),
|
$user
|
||||||
'date' => new DateTime($request->getPayload()->get('caseDate'))
|
);
|
||||||
|
|
||||||
|
$ucs = $this->entityManager->getRepository(UserCase::class)->findBy(['user' => $user]);
|
||||||
|
$cases = [];
|
||||||
|
foreach ($ucs as $uc) {
|
||||||
|
/** @var UserCase $uc */
|
||||||
|
$cases[] = $uc->getMemberCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render(
|
||||||
|
'internal/cases/itinerary/report.html.twig',
|
||||||
|
array_merge(
|
||||||
|
$this->navLinks,
|
||||||
|
[
|
||||||
|
'breadcrumbs' => [
|
||||||
|
new Breadcrumb($this->generateUrl('app_dashboard'), 'Dashboard'),
|
||||||
|
],
|
||||||
|
'notifications' => $this->msgs,
|
||||||
|
'notificationCount' => $this->notificationCount,
|
||||||
|
'itineraries' => $itineraries,
|
||||||
|
'cases' => $cases
|
||||||
|
]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Route('/itinerary/map', name: 'app_map_itinerary')]
|
||||||
|
public function mapItinerary(Request $request, #[CurrentUser()] ?User $user): Response
|
||||||
|
{
|
||||||
|
$case = null;
|
||||||
|
if ($request->getPayload()->get('caseId')) {
|
||||||
|
$case = $this->entityManager->getRepository(MemberCase::class)->find($request->getPayload()->get('caseId'));
|
||||||
|
}
|
||||||
|
$startDate = ($request->getPayload()->get('startDate') ?new DateTime($request->getPayload()->get('startDate')) : null);
|
||||||
|
$endDate = ($request->getPayload()->get('endDate') ? new DateTime($request->getPayload()->get('endDate')) : null);
|
||||||
|
|
||||||
|
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($user);
|
||||||
|
$this->notificationCount = $this->entityManager->getRepository(Messages::class)->getUnreadMessageCount($user);
|
||||||
|
|
||||||
|
$itineraries = $this->entityManager->getRepository(CaseItinerary::class)->getRecentTravel($user, [
|
||||||
|
'case' => $case,
|
||||||
|
'from' => $startDate,
|
||||||
|
'to' => $endDate,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$map = new Map('default');
|
$map = new Map('default');
|
||||||
@ -55,20 +98,48 @@ class ItineraryController extends AbstractController
|
|||||||
;
|
;
|
||||||
|
|
||||||
$total_distance = 0;
|
$total_distance = 0;
|
||||||
$total_duration = 0;
|
$total_duration = new DateTime('00:00:00');
|
||||||
|
|
||||||
foreach ($itineraries as $itinerary) {
|
foreach ($itineraries as $itinerary) {
|
||||||
|
/** @var CaseItinerary $itinerary */
|
||||||
|
$map->addMarker(new Marker(
|
||||||
|
position: new Point(
|
||||||
|
$itinerary->getOriginLocation()->getLat(),
|
||||||
|
$itinerary->getOriginLocation()->getLon()
|
||||||
|
),
|
||||||
|
title: $itinerary->getOriginLocation()->getName(),
|
||||||
|
infoWindow: new InfoWindow(
|
||||||
|
content: $itinerary->getOriginLocation()->getName(),
|
||||||
|
)
|
||||||
|
));
|
||||||
|
|
||||||
|
$map->addMarker(new Marker(
|
||||||
|
position: new Point(
|
||||||
|
$itinerary->getDestLocation()->getLat(),
|
||||||
|
$itinerary->getDestLocation()->getLon()
|
||||||
|
),
|
||||||
|
title: $itinerary->getDestLocation()->getName(),
|
||||||
|
infoWindow: new InfoWindow(
|
||||||
|
content: $itinerary->getDestLocation()->getName(),
|
||||||
|
)
|
||||||
|
));
|
||||||
|
|
||||||
/** @var CaseItinerary $itinerary */
|
/** @var CaseItinerary $itinerary */
|
||||||
$map->addPolyline(new Polyline(
|
$map->addPolyline(new Polyline(
|
||||||
points: $itinerary->getGPSPolyLines(),
|
points: $itinerary->getGPSPolyLines(),
|
||||||
infoWindow: new InfoWindow(
|
infoWindow: new InfoWindow(
|
||||||
content: $itinerary->getMemberCase()->getCaseName()
|
content: $itinerary->getMemberCase()->getCaseName()
|
||||||
)
|
),
|
||||||
|
extra: ['color' => '#FF0000']
|
||||||
));
|
));
|
||||||
|
|
||||||
$total_distance += $itinerary->getDistance();
|
$total_distance += $itinerary->getDistance();
|
||||||
$total_duration += $itinerary->getDuration()->s;
|
$total_duration->add($itinerary->getDuration());
|
||||||
}
|
}
|
||||||
|
$map->fitBoundsToMarkers(true);
|
||||||
|
|
||||||
|
$diff = new DateTime('00:00:00');
|
||||||
|
$di = $diff->diff($total_duration);
|
||||||
|
|
||||||
return $this->render(
|
return $this->render(
|
||||||
'internal/cases/itinerary/map.html.twig',
|
'internal/cases/itinerary/map.html.twig',
|
||||||
@ -77,12 +148,13 @@ class ItineraryController extends AbstractController
|
|||||||
[
|
[
|
||||||
'breadcrumbs' => [
|
'breadcrumbs' => [
|
||||||
new Breadcrumb($this->generateUrl('app_my_cases'), 'My Cases'),
|
new Breadcrumb($this->generateUrl('app_my_cases'), 'My Cases'),
|
||||||
|
new Breadcrumb($this->generateUrl('app_itinerary_report'), 'Itinerary Report'),
|
||||||
],
|
],
|
||||||
'notifications' => $this->msgs,
|
'notifications' => $this->msgs,
|
||||||
'notificationCount' => $this->notificationCount,
|
'notificationCount' => $this->notificationCount,
|
||||||
'map' => $map,
|
'map' => $map,
|
||||||
'total_distance' => $total_distance,
|
'total_distance' => $total_distance,
|
||||||
'total_duration' => $total_duration,
|
'total_duration' => $di->format("%H:%i'%s''"),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -142,4 +214,50 @@ class ItineraryController extends AbstractController
|
|||||||
);
|
);
|
||||||
return $this->json(['success' => true, 'message' => 'Location added to itinerary']);
|
return $this->json(['success' => true, 'message' => 'Location added to itinerary']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[Route('/api/filter-itinerary-by-case', name: 'ajax_filter_itinerary_by_case')]
|
||||||
|
public function filterItineraryByCase(Request $request, #[CurrentUser()] ?User $user): Response
|
||||||
|
{
|
||||||
|
$case = null;
|
||||||
|
$startDate = null;
|
||||||
|
$endDate = null;
|
||||||
|
|
||||||
|
//dd($request->getPayload());
|
||||||
|
|
||||||
|
if ($request->getPayload()->get('caseId')) {
|
||||||
|
$caseId = $request->getPayload()->get('caseId');
|
||||||
|
$case = $this->entityManager->getRepository(MemberCase::class)->find($caseId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($request->getPayload()->get('startDate')) {
|
||||||
|
$startDate = new DateTime($request->getPayload()->get('startDate'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($request->getPayload()->get('endDate')) {
|
||||||
|
$endDate = new DateTime($request->getPayload()->get('endDate'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$itineraries = $this->entityManager->getRepository(CaseItinerary::class)->getRecentTravel($user, [
|
||||||
|
'case' => $case,
|
||||||
|
'from' => $startDate,
|
||||||
|
'to' => $endDate,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$ret = [];
|
||||||
|
|
||||||
|
foreach ($itineraries as $itinerary) {
|
||||||
|
/** @var CaseItinerary $itinerary */
|
||||||
|
$ret[] = [
|
||||||
|
'id' => $itinerary->getId()->toString(),
|
||||||
|
'date' => $itinerary->getDate()->format('F j, Y'),
|
||||||
|
'origin' => $itinerary->getOriginLocation(),
|
||||||
|
'destination' => $itinerary->getDestLocation(),
|
||||||
|
'distance' => $itinerary->getDistance(),
|
||||||
|
'duration' => $itinerary->getDuration()->format("%h:%i'%s''"),
|
||||||
|
'case' => $itinerary->getMemberCase()->getCaseName(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->json($ret);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user