From ffd840eac12d5268d885ee25ad6026554ee35126 Mon Sep 17 00:00:00 2001 From: DEls Date: Fri, 28 Aug 2026 12:31:17 +0200 Subject: [PATCH] feat(pb): vehicles.unit_type + plant_hours_log collection Adds the schema needed for the weekly plant-equipment hours log: - vehicles gets a unit_type select (fuel|plant), defaults to fuel for backward-compat with existing rows - plant_hours_log collection with the 13 plant-hours fields plus vehicle_unit_type_at_import snapshot and composite unique index (vehicle_qr, start_date) - data_import_batches.batch_type gains plant_hours --- scripts/pb-bootstrap-schema.py | 38 +++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/scripts/pb-bootstrap-schema.py b/scripts/pb-bootstrap-schema.py index d7244cc..4336b2a 100644 --- a/scripts/pb-bootstrap-schema.py +++ b/scripts/pb-bootstrap-schema.py @@ -58,7 +58,7 @@ DEFS["data_import_batches"] = { "name": "DATA_IMPORT_BATCHES", "type": "base", "fields": [ field("batch_type", "select", required=True, - values=["timesheets", "fuel_logs", "purchase_orders", "delivery_notes"], maxSelect=1), + values=["timesheets", "fuel_logs", "purchase_orders", "delivery_notes", "plant_hours"], maxSelect=1), field("original_file", "file", required=False, maxSelect=1, maxSize=20971520, mimeTypes=["text/csv", "text/plain", "application/vnd.ms-excel", "application/csv"]), @@ -180,6 +180,8 @@ DEFS["vehicles"] = { field("description", "text", required=False), field("standard_work_hours", "text", required=False), field("fuel_limits", "text", required=False), + field("unit_type", "select", required=True, + values=["fuel", "plant"], maxSelect=1), field("attention_dismissed_at", "date", required=False), ], "indexes": [], @@ -215,6 +217,39 @@ DEFS["fuel_logs"] = { "indexes": [], } +DEFS["plant_hours_log"] = { + "name": "PLANT_HOURS_LOG", "type": "base", + "fields": [ + field("date_logged", "date", required=True), + field("vehicle_qr", "text", required=True), + field("vehicle", "relation", required=True, + collectionId="__VEHICLES_ID__", cascadeDelete=False, maxSelect=1, minSelect=1), + field("site", "relation", required=True, + collectionId="__SITES_ID__", cascadeDelete=False, maxSelect=1, minSelect=1), + field("project_code", "text", required=True), + field("start_date", "date", required=True), + field("end_date", "date", required=True), + field("start_time", "text", required=False), + field("end_time", "text", required=False), + field("start_hours", "number", required=True), + field("end_hours", "number", required=True), + field("hours", "number", required=True), + field("notes", "text", required=False), + field("hour_meter_budget", "number", required=True), + field("cost_per_hour", "number", required=True), + field("value", "number", required=True), + field("over_budget", "bool", required=True), + field("hours_mismatch", "bool", required=True), + field("vehicle_unit_type_at_import", "select", required=True, + values=["fuel", "plant"], maxSelect=1), + field("batch_reference", "relation", required=False, + collectionId="__DATA_IMPORT_BATCHES_ID__", cascadeDelete=False, maxSelect=1, minSelect=0), + ], + "indexes": [ + "CREATE UNIQUE INDEX `idx_plant_hours_log_qr_start` ON `plant_hours_log` (`vehicle_qr`, `start_date`)", + ], +} + DEFS["delivery_notes"] = { "name": "DELIVERY_NOTES", "type": "base", "fields": [ @@ -265,6 +300,7 @@ ORDER = [ "vehicles", "timesheets", "fuel_logs", + "plant_hours_log", "delivery_notes", "received_items", ]