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\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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user