Compare commits

..

No commits in common. "fc63a3a0817c2ef24453726cf6e75d7173b14224" and "84cb7708778c38bec9c021d98a7ca180909d552a" have entirely different histories.

4 changed files with 2 additions and 92 deletions

View File

@ -297,50 +297,6 @@ export const shiftAssignments = pgTable("shift_assignments", {
// Actual check-in/out times (recorded when guard clocks in/out) // Actual check-in/out times (recorded when guard clocks in/out)
checkInTime: timestamp("check_in_time"), checkInTime: timestamp("check_in_time"),
checkOutTime: timestamp("check_out_time"), checkOutTime: timestamp("check_out_time"),
// Dotazioni operative per questo turno specifico
isArmedOnDuty: boolean("is_armed_on_duty").default(false), // Guardia armata per questo turno
assignedVehicleId: varchar("assigned_vehicle_id").references(() => vehicles.id, { onDelete: "set null" }), // Automezzo assegnato
});
// ============= PATROL ROUTES (TURNI PATTUGLIA) =============
export const patrolRoutes = pgTable("patrol_routes", {
id: varchar("id").primaryKey().default(sql`gen_random_uuid()`),
guardId: varchar("guard_id").notNull().references(() => guards.id, { onDelete: "cascade" }),
// Data e orari del turno pattuglia
shiftDate: date("shift_date").notNull(), // Data del turno
startTime: varchar("start_time").notNull(), // Orario inizio (HH:MM)
endTime: varchar("end_time").notNull(), // Orario fine (HH:MM)
status: shiftStatusEnum("status").notNull().default("planned"),
location: locationEnum("location").notNull(), // Sede di riferimento
// Dotazioni
vehicleId: varchar("vehicle_id").references(() => vehicles.id, { onDelete: "set null" }),
isArmedRoute: boolean("is_armed_route").default(false), // Percorso con guardia armata
notes: text("notes"),
createdAt: timestamp("created_at").defaultNow(),
updatedAt: timestamp("updated_at").defaultNow(),
});
export const patrolRouteStops = pgTable("patrol_route_stops", {
id: varchar("id").primaryKey().default(sql`gen_random_uuid()`),
patrolRouteId: varchar("patrol_route_id").notNull().references(() => patrolRoutes.id, { onDelete: "cascade" }),
siteId: varchar("site_id").notNull().references(() => sites.id, { onDelete: "cascade" }),
sequenceOrder: integer("sequence_order").notNull(), // Ordine nel percorso (1, 2, 3...)
estimatedArrivalTime: varchar("estimated_arrival_time"), // Orario stimato arrivo (HH:MM)
actualArrivalTime: timestamp("actual_arrival_time"), // Orario effettivo arrivo
// Check completamento tappa
isCompleted: boolean("is_completed").default(false),
completedAt: timestamp("completed_at"),
notes: text("notes"), // Note specifiche per questa tappa
createdAt: timestamp("created_at").defaultNow(),
}); });
// ============= CCNL SETTINGS ============= // ============= CCNL SETTINGS =============
@ -562,7 +518,6 @@ export const guardsRelations = relations(guards, ({ one, many }) => ({
}), }),
certifications: many(certifications), certifications: many(certifications),
shiftAssignments: many(shiftAssignments), shiftAssignments: many(shiftAssignments),
patrolRoutes: many(patrolRoutes),
constraints: one(guardConstraints), constraints: one(guardConstraints),
sitePreferences: many(sitePreferences), sitePreferences: many(sitePreferences),
trainingCourses: many(trainingCourses), trainingCourses: many(trainingCourses),
@ -594,7 +549,6 @@ export const sitesRelations = relations(sites, ({ one, many }) => ({
references: [customers.id], references: [customers.id],
}), }),
shifts: many(shifts), shifts: many(shifts),
patrolRouteStops: many(patrolRouteStops),
preferences: many(sitePreferences), preferences: many(sitePreferences),
})); }));
@ -619,33 +573,6 @@ export const shiftAssignmentsRelations = relations(shiftAssignments, ({ one }) =
fields: [shiftAssignments.guardId], fields: [shiftAssignments.guardId],
references: [guards.id], references: [guards.id],
}), }),
assignedVehicle: one(vehicles, {
fields: [shiftAssignments.assignedVehicleId],
references: [vehicles.id],
}),
}));
export const patrolRoutesRelations = relations(patrolRoutes, ({ one, many }) => ({
guard: one(guards, {
fields: [patrolRoutes.guardId],
references: [guards.id],
}),
vehicle: one(vehicles, {
fields: [patrolRoutes.vehicleId],
references: [vehicles.id],
}),
stops: many(patrolRouteStops),
}));
export const patrolRouteStopsRelations = relations(patrolRouteStops, ({ one }) => ({
patrolRoute: one(patrolRoutes, {
fields: [patrolRouteStops.patrolRouteId],
references: [patrolRoutes.id],
}),
site: one(sites, {
fields: [patrolRouteStops.siteId],
references: [sites.id],
}),
})); }));
export const notificationsRelations = relations(notifications, ({ one }) => ({ export const notificationsRelations = relations(notifications, ({ one }) => ({
@ -804,17 +731,6 @@ export const insertShiftSchema = createInsertSchema(shifts).omit({
updatedAt: true, updatedAt: true,
}); });
export const insertPatrolRouteSchema = createInsertSchema(patrolRoutes).omit({
id: true,
createdAt: true,
updatedAt: true,
});
export const insertPatrolRouteStopSchema = createInsertSchema(patrolRouteStops).omit({
id: true,
createdAt: true,
});
// Form schema that accepts datetime strings and transforms to Date // Form schema that accepts datetime strings and transforms to Date
export const insertShiftFormSchema = z.object({ export const insertShiftFormSchema = z.object({
siteId: z.string().min(1, "Sito obbligatorio"), siteId: z.string().min(1, "Sito obbligatorio"),

View File

@ -1,13 +1,7 @@
{ {
"version": "1.0.45", "version": "1.0.44",
"lastUpdate": "2025-10-23T14:53:12.164Z", "lastUpdate": "2025-10-23T14:38:03.431Z",
"changelog": [ "changelog": [
{
"version": "1.0.45",
"date": "2025-10-23",
"type": "patch",
"description": "Deployment automatico v1.0.45"
},
{ {
"version": "1.0.44", "version": "1.0.44",
"date": "2025-10-23", "date": "2025-10-23",