add itinerary report page, update map page, add markers for origin and destination, add filter-itinerary-by-case method

This commit is contained in:
Ryan Prather 2025-01-01 05:57:42 +00:00
parent 03c7153565
commit af41590fd3

View File

@ -8,6 +8,7 @@ use App\Entity\Location;
use App\Entity\MemberCase;
use App\Entity\Messages;
use App\Entity\User;
use App\Entity\UserCase;
use App\Libs\Breadcrumb;
use App\Libs\Libs;
use App\Libs\NavList;
@ -38,15 +39,57 @@ class ItineraryController extends AbstractController
$this->navLinks = NavList::LIST;
}
#[Route('/itinerary/map', name: 'app_map_itinerary')]
public function mapItinerary(Request $request, #[CurrentUser()] ?User $user): Response
#[Route('/itinerary/report', name: 'app_report_itinerary')]
public function reportItinerary(Request $request, #[CurrentUser()] ?User $user): Response
{
$this->msgs = $this->entityManager->getRepository(Messages::class)->getUnreadMessages($user);
$this->notificationCount = $this->entityManager->getRepository(Messages::class)->getUnreadMessageCount($user);
$itineraries = $this->entityManager->getRepository(CaseItinerary::class)->findBy([
'memberCase' => $request->getPayload()->get('caseId'),
'date' => new DateTime($request->getPayload()->get('caseDate'))
$itineraries = $this->entityManager->getRepository(CaseItinerary::class)->getRecentTravel(
$user
);
$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');
@ -55,20 +98,48 @@ class ItineraryController extends AbstractController
;
$total_distance = 0;
$total_duration = 0;
$total_duration = new DateTime('00:00:00');
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 */
$map->addPolyline(new Polyline(
points: $itinerary->getGPSPolyLines(),
infoWindow: new InfoWindow(
content: $itinerary->getMemberCase()->getCaseName()
)
),
extra: ['color' => '#FF0000']
));
$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(
'internal/cases/itinerary/map.html.twig',
@ -77,12 +148,13 @@ class ItineraryController extends AbstractController
[
'breadcrumbs' => [
new Breadcrumb($this->generateUrl('app_my_cases'), 'My Cases'),
new Breadcrumb($this->generateUrl('app_itinerary_report'), 'Itinerary Report'),
],
'notifications' => $this->msgs,
'notificationCount' => $this->notificationCount,
'map' => $map,
'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']);
}
#[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);
}
}