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)
|
// 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"),
|
||||||
|
|||||||
10
version.json
10
version.json
@ -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",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user