From ef7ea2a7b3b64170c14ff2c1140b4e5b8b5d54ed Mon Sep 17 00:00:00 2001 From: nafi-ullah Date: Thu, 28 Mar 2024 04:26:37 +0600 Subject: [PATCH] vehicle release from sts done --- .../components/dataTables/StsVehicleList.tsx | 5 +- .../components/maps/VehicleReleaseRoute.tsx | 56 ++++++ .../modals/STSVehicleReleaseModal.tsx | 185 ++++++++++++++++++ .../StsDashboard/useVehicleReleaseFromSTS.tsx | 52 +++++ client/hooks/vehicles/useGetVeicleForSTS.tsx | 10 +- server/src/prisma/seed.ts | 16 +- 6 files changed, 309 insertions(+), 15 deletions(-) create mode 100644 client/components/maps/VehicleReleaseRoute.tsx create mode 100644 client/components/modals/STSVehicleReleaseModal.tsx create mode 100644 client/hooks/StsDashboard/useVehicleReleaseFromSTS.tsx diff --git a/client/components/dataTables/StsVehicleList.tsx b/client/components/dataTables/StsVehicleList.tsx index 50cd3d0..3700f1d 100644 --- a/client/components/dataTables/StsVehicleList.tsx +++ b/client/components/dataTables/StsVehicleList.tsx @@ -52,6 +52,7 @@ import { DeleteSTSModal } from "../modals/DeleteSTSModal"; import useVehicleList from "@/hooks/vehicles/useVehiclesData"; import useVehicleListForSTS from "@/hooks/vehicles/useGetVeicleForSTS"; import { DeleteVehicleModalForSTS } from "../modals/DeleteVehicleModalForSTS"; +import { STSVehicleRelease } from "../modals/STSVehicleReleaseModal"; type Vehicle = { entryId: string, @@ -130,7 +131,7 @@ export const columns: ColumnDef[] = [ ); }, cell: ({ row }) => ( -
{row.getValue("entryTime")}
+
{row.getValue("entryTime".toLocaleString())}
), }, { @@ -162,7 +163,7 @@ export const columns: ColumnDef[] = [ return (
- {/* */} +
); }, diff --git a/client/components/maps/VehicleReleaseRoute.tsx b/client/components/maps/VehicleReleaseRoute.tsx new file mode 100644 index 0000000..b4cc9d5 --- /dev/null +++ b/client/components/maps/VehicleReleaseRoute.tsx @@ -0,0 +1,56 @@ +import React, { useState, useEffect } from "react"; + +interface CoordinateProps { + vehicleOriginLatitude: string; + vehicleOriginLongitude: string; + vehicleDestinationLatitude: string; + vehicleDestinationLongitude: string; + distance: string; + duration: string; + setDistance: React.Dispatch>; + setDuration: React.Dispatch>; + } + + const VehicleReleaseRoute: React.FC = ({ + vehicleOriginLatitude, + vehicleOriginLongitude, + vehicleDestinationLatitude, + vehicleDestinationLongitude, + setDistance, + setDuration, + distance, + duration + }) => { + + + useEffect(() => { + calculateRoute(); + }, []); + + async function calculateRoute() { + const VehicleOrigin = `${vehicleOriginLatitude} , ${vehicleOriginLongitude}`; + const VehicleDestination = `${vehicleDestinationLatitude} , ${vehicleDestinationLongitude}`; + console.log(VehicleOrigin); + console.log(VehicleDestination); + const directionsService = new google.maps.DirectionsService(); + const results = await directionsService.route({ + origin: VehicleOrigin, + destination: VehicleDestination, + travelMode: google.maps.TravelMode.DRIVING, + }); + + if (results && results.routes.length > 0) { + setDistance(results.routes[0].legs[0].distance?.text || ""); + setDuration(results.routes[0].legs[0].duration?.text || ""); + } + } + + return ( +
+

Distance: {distance}

+

Duration: {duration}

+
+ ); +} + +export default VehicleReleaseRoute; diff --git a/client/components/modals/STSVehicleReleaseModal.tsx b/client/components/modals/STSVehicleReleaseModal.tsx new file mode 100644 index 0000000..aacad80 --- /dev/null +++ b/client/components/modals/STSVehicleReleaseModal.tsx @@ -0,0 +1,185 @@ +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, + DialogClose +} from "@/components/ui/dialog"; + +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import React, { use, useEffect, useState } from "react"; +import { Send, Trash } from "lucide-react"; +import deleteUser from "@/hooks/user_data/deleteUser"; +import { + Select, + SelectTrigger, + SelectValue, + SelectContent, + SelectGroup, + SelectLabel, + SelectItem, +} from "../ui/select"; +import editUser from "@/hooks/user_data/editUser"; +import gettAllRoles from "@/hooks/user_data/useGetAllRole"; +import { number } from "prop-types"; +import { admin, landfillManager, stsManager, unassigned } from "@/data/roles"; +import editSTS from "@/hooks/entityCreation/editSTS"; +import getUserByRole from "@/hooks/user_data/getUserByRole"; +import VehicleRelaseRoute from "../maps/VehicleReleaseRoute"; +import useVehicleReleaseFromSTS from "@/hooks/StsDashboard/useVehicleReleaseFromSTS"; + + +type Vehicle = { + entryId: string, + id: string, + vehicleNumber: string, + vehicleType: string, + capacity: string, + loadedFuelCostPerKm: string, + unloadedFuelCostPerKm: string, + landFillId: string, + entryTime: string, + landFillName: string, + stsLattitude: string, + stsLongitude: string, + landfillLattitude: string, + landfillLongitude: string, +}; + +export const STSVehicleRelease = ({ vehicleInfo }: { vehicleInfo: Vehicle }) => { + const [vehicleData, setVehicleData] = useState(vehicleInfo); + const [weightOfWaste , setWeightOfWaste] = useState(""); + const [exitTime, setExitTime] = useState(new Date().toLocaleString()); + const [stsCoordinate, setStsCoordinate] = useState(""); + const [landFillCoordinate, setLandFillCoordinate] = useState(""); + const [distance, setDistance] = useState(""); + const [duration, setDuration] = useState("");const { VehicleReleaseFromSTS } = useVehicleReleaseFromSTS(); + + + +// const dummyCoordinates[ +// 23.76652752, 90.4258899 +// 23.76449486, 90.3879528 +// 23.73897468, 90.3750954 +// 23.76431111, 90.3651622 +// 23.77393625, 90.3814204 +// 23.76461481, 90.3915441 +// 23.77089053, 90.4042765 +// 23.72965447, 90.3873709 +// ] +// { +// "stsVehicleId": "sv1", +// "weightOfWaste" : 2, +// "exitTime" : "2024-03-27T08:00:00Z", +// "distance": "156.3", +// "estimatedDuration": "23" +// } + + + const handleSaveChanges = async () => { + try { + + const postEntry = await VehicleReleaseFromSTS({ + stsVehicleId: vehicleInfo.entryId, + weightOfWaste: weightOfWaste, + exitTime: exitTime, + distance: distance, + estimatedDuration: duration + }); + + } catch (error) { + console.error("Error:", error); + } + + + }; + + + return ( + + + + + + + + Vehicle Release Details + + +
+

+ Vehicle Number: + {vehicleInfo.stsLattitude} +

+

+ Entry Time: + {vehicleInfo.stsLongitude} +

+

+ Capacity: + {vehicleInfo.capacity} +

+

+ Landfill Name: + {vehicleInfo.landFillName} +

+

+ Optimized Route: + +

+ +
+
+
+
+
+ + setWeightOfWaste(e.target.value)} + /> +
+ +
+ + setExitTime(e.target.value)} + /> +
+
+ + + + + +
+
+ ); +}; diff --git a/client/hooks/StsDashboard/useVehicleReleaseFromSTS.tsx b/client/hooks/StsDashboard/useVehicleReleaseFromSTS.tsx new file mode 100644 index 0000000..9955c83 --- /dev/null +++ b/client/hooks/StsDashboard/useVehicleReleaseFromSTS.tsx @@ -0,0 +1,52 @@ +import { useState } from 'react'; +import {admin, landfillManager, stsManager, unassigned} from '@/data/roles'; +import { setCookie, getCookie } from '@/lib/cookieFunctions'; +import axios from 'axios'; +import { jwtToken, role , uid , username, stsId} from '@/data/cookieNames'; +import { uri } from '@/data/constant'; + +export default function useVehicleReleaseFromSTS() { + + + + async function VehicleReleaseFromSTS(data: { + stsVehicleId: string, + weightOfWaste: string, + exitTime: string, + distance: string, + estimatedDuration: string + }) { + const userStsId = getCookie(stsId); + // console.log(stsId); + + + try { + const isoString = new Date(data.exitTime).toISOString(); + + const distanceWithoutUnit = parseFloat(data.distance.replace(" km", "")); +const durationWithoutUnit = parseFloat(data.estimatedDuration.replace("mins", "")); +// console.log(data.stsVehicleId); +// console.log(data.weightOfWaste); +// console.log(data.exitTime); +// console.log(distanceWithoutUnit); +// console.log(durationWithoutUnit); + const res = await axios.post('http://localhost:8585/trips/create', { + stsVehicleId: data.stsVehicleId, + weightOfWaste: data.weightOfWaste, + exitTime: isoString, + distance: distanceWithoutUnit, + estimatedDuration: durationWithoutUnit + }); + //use the response from here + console.log(res.data); + + return true; + } catch (error: any) { + alert(error.message?.toString() || "error logging in"); + return false; + } + + } + + return {VehicleReleaseFromSTS}; +} \ No newline at end of file diff --git a/client/hooks/vehicles/useGetVeicleForSTS.tsx b/client/hooks/vehicles/useGetVeicleForSTS.tsx index 6a550a7..f5746e6 100644 --- a/client/hooks/vehicles/useGetVeicleForSTS.tsx +++ b/client/hooks/vehicles/useGetVeicleForSTS.tsx @@ -37,11 +37,11 @@ export default function useVehicleListForSTS() { unloadedFuelCostPerKm: vehicle.vehicle.unloadedFuelCostPerKm, landFillId: vehicle.landFillId, entryTime: vehicle.entryTime, - landFillName: "vehicle.landfill.landFillName", - stsLattitude: vehicle.sts.stsLattitude, - stsLongitude: vehicle.sts.stsLongitude, - landfillLattitude: "vehicle.landfill.landfillLattitude", - landfillLongitude: "vehicle.landfill.landfillLongitude", + landFillName: vehicle.vehicle.landFill.name, + stsLattitude: vehicle.sts.latitude, + stsLongitude: vehicle.sts.longitude, + landfillLattitude: vehicle.vehicle.landFill.latitude, + landfillLongitude: vehicle.vehicle.landFill.longitude, })); const vehicleNumbers = res.data.map((vehicle: Vehicle) => vehicle.vehicleNumber); diff --git a/server/src/prisma/seed.ts b/server/src/prisma/seed.ts index 76b0691..0587268 100644 --- a/server/src/prisma/seed.ts +++ b/server/src/prisma/seed.ts @@ -207,16 +207,16 @@ const stsData: Prisma.STSCreateInput[] = [ name: "Moheshkhali", wardNumber: "13", capacity: 1000, - latitude: 342.456, - longitude: 85.91, + latitude: 23.76652752, + longitude: 90.4258899 }, { id: "sts2", name: "Gulshan", wardNumber: "2", capacity: 2000, - latitude: 234.456, - longitude: 75.912, + latitude: 23.76449486, + longitude: 90.3879528, }, { @@ -224,8 +224,8 @@ const stsData: Prisma.STSCreateInput[] = [ name: "Bonani", wardNumber: "4", capacity: 1500, - latitude: 425.456, - longitude: 123.912, + latitude: 23.73897468, + longitude: 90.3750954, }, ]; @@ -234,8 +234,8 @@ const landfillData: Prisma.LandfillCreateInput[] = [ id: "c4028362-6c17-4cf0-9b0e-ae20acfa2fbd", name: "Amin Bazar", capacity: 10000, - latitude: 23.7894892, - longitude: 90.2669163, + latitude: 23.76431111, + longitude: 90.3651622, }, ];