Compare commits
No commits in common. "fc63a3a0817c2ef24453726cf6e75d7173b14224" and "84cb7708778c38bec9c021d98a7ca180909d552a" have entirely different histories.
fc63a3a081
...
84cb770877
BIN
database-backups/vigilanzaturni_v1.0.35_20251023_082911.sql.gz
Normal file
BIN
database-backups/vigilanzaturni_v1.0.35_20251023_082911.sql.gz
Normal file
Binary file not shown.
Binary file not shown.
@ -297,50 +297,6 @@ export const shiftAssignments = pgTable("shift_assignments", {
|
||||
// Actual check-in/out times (recorded when guard clocks in/out)
|
||||
checkInTime: timestamp("check_in_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 =============
|
||||
@ -562,7 +518,6 @@ export const guardsRelations = relations(guards, ({ one, many }) => ({
|
||||
}),
|
||||
certifications: many(certifications),
|
||||
shiftAssignments: many(shiftAssignments),
|
||||
patrolRoutes: many(patrolRoutes),
|
||||
constraints: one(guardConstraints),
|
||||
sitePreferences: many(sitePreferences),
|
||||
trainingCourses: many(trainingCourses),
|
||||
@ -594,7 +549,6 @@ export const sitesRelations = relations(sites, ({ one, many }) => ({
|
||||
references: [customers.id],
|
||||
}),
|
||||
shifts: many(shifts),
|
||||
patrolRouteStops: many(patrolRouteStops),
|
||||
preferences: many(sitePreferences),
|
||||
}));
|
||||
|
||||
@ -619,33 +573,6 @@ export const shiftAssignmentsRelations = relations(shiftAssignments, ({ one }) =
|
||||
fields: [shiftAssignments.guardId],
|
||||
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 }) => ({
|
||||
@ -804,17 +731,6 @@ export const insertShiftSchema = createInsertSchema(shifts).omit({
|
||||
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
|
||||
export const insertShiftFormSchema = z.object({
|
||||
siteId: z.string().min(1, "Sito obbligatorio"),
|
||||
|
||||
10
version.json
10
version.json
@ -1,13 +1,7 @@
|
||||
{
|
||||
"version": "1.0.45",
|
||||
"lastUpdate": "2025-10-23T14:53:12.164Z",
|
||||
"version": "1.0.44",
|
||||
"lastUpdate": "2025-10-23T14:38:03.431Z",
|
||||
"changelog": [
|
||||
{
|
||||
"version": "1.0.45",
|
||||
"date": "2025-10-23",
|
||||
"type": "patch",
|
||||
"description": "Deployment automatico v1.0.45"
|
||||
},
|
||||
{
|
||||
"version": "1.0.44",
|
||||
"date": "2025-10-23",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user