diff --git a/apps/dispatch-server/routes/mission.ts b/apps/dispatch-server/routes/mission.ts index 3c6f906c..ff9705f1 100644 --- a/apps/dispatch-server/routes/mission.ts +++ b/apps/dispatch-server/routes/mission.ts @@ -87,6 +87,20 @@ router.patch("/:id", async (req, res) => { data: req.body, }); io.to("dispatchers").emit("update-mission", { updatedMission }); + if (req.body.state === "finished") { + updatedMission.missionStationUserIds?.forEach((userId) => { + io.to(`user:${userId}`).emit("notification", { + type: "mission-closed", + status: "closed", + message: `Einsatz ${updatedMission.publicId} wurde beendet`, + data: { + missionId: updatedMission.id, + publicMissionId: updatedMission.publicId, + }, + } as NotificationPayload); + }); + } + res.json(updatedMission); } catch (error) { console.error(error); diff --git a/apps/dispatch-server/socket-events/connect-pilot.ts b/apps/dispatch-server/socket-events/connect-pilot.ts index d8710639..bd9fcc85 100644 --- a/apps/dispatch-server/socket-events/connect-pilot.ts +++ b/apps/dispatch-server/socket-events/connect-pilot.ts @@ -97,6 +97,7 @@ export const handleConnectPilot = posLat: randomPos?.lat, posLng: randomPos?.lng, posXplanePluginActive: debug ? true : undefined, + posH145active: debug ? true : undefined, }, }); diff --git a/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx b/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx index 9fc6e487..2c53cfa6 100644 --- a/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx +++ b/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx @@ -119,11 +119,12 @@ export const MissionForm = () => { }); const { missionFormValues, setOpen } = usePannelStore((state) => state); - const validationRequired = HPGValidationRequired( - form.watch("missionStationIds"), - aircrafts, - form.watch("hpgMissionString"), - ); + const validationRequired = + HPGValidationRequired( + form.watch("missionStationIds"), + aircrafts, + form.watch("hpgMissionString"), + ) && !form.watch("hpgMissionString")?.startsWith("kein Szenario"); useEffect(() => { if (session.data?.user.id) { @@ -145,6 +146,7 @@ export const MissionForm = () => { return; } for (const key in missionFormValues) { + console.debug(key, missionFormValues[key as keyof MissionOptionalDefaults]); if (key === "addressOSMways") continue; // Skip addressOSMways as it is handled separately form.setValue( key as keyof MissionOptionalDefaults, @@ -370,6 +372,7 @@ export const MissionForm = () => { + {keywords && keywords .find((k) => k.name === form.watch("missionKeywordName")) @@ -416,11 +419,20 @@ export const MissionForm = () => { In diesem Einsatz gibt es {form.watch("addressOSMways").length} Gebäude
-- In diesem Einsatz gibt es {form.watch("xPlaneObjects").length} Objekte -
++ In diesem Einsatz gibt es {form.watch("xPlaneObjects").length} Objekte +
+ +