feat(cantaloupe_sync): add dex_report_date, deployed, pulled_date column handling
- Add heuristic entries: dex_report_date, deployed, pulled_date - Include in COMPARE_FIELDS for diff detection - Add to approve_batch() UPDATE field_map and INSERT statement - Add v4 DB migration for three new TEXT columns - Datetime serialization already handled by parse_excel() Kanban: t_3bef3c9c
This commit is contained in:
+6
-1
@@ -330,9 +330,14 @@ def init_db(conn: sqlite3.Connection):
|
||||
conn.execute("ALTER TABLE assets ADD COLUMN longitude REAL DEFAULT NULL")
|
||||
if "geofence_radius_meters" not in asset_cols:
|
||||
conn.execute("ALTER TABLE assets ADD COLUMN geofence_radius_meters INTEGER DEFAULT 50")
|
||||
# v5 migration: dex_report_date + install_date
|
||||
# v4 migration: dex_report_date, deployed, pulled_date
|
||||
if "dex_report_date" not in asset_cols:
|
||||
conn.execute("ALTER TABLE assets ADD COLUMN dex_report_date TEXT DEFAULT NULL")
|
||||
if "deployed" not in asset_cols:
|
||||
conn.execute("ALTER TABLE assets ADD COLUMN deployed TEXT DEFAULT NULL")
|
||||
if "pulled_date" not in asset_cols:
|
||||
conn.execute("ALTER TABLE assets ADD COLUMN pulled_date TEXT DEFAULT NULL")
|
||||
# v5 migration: install_date
|
||||
if "install_date" not in asset_cols:
|
||||
conn.execute("ALTER TABLE assets ADD COLUMN install_date TEXT DEFAULT NULL")
|
||||
cursor = conn.execute("PRAGMA table_info(locations)")
|
||||
|
||||
+13
-2
@@ -119,6 +119,9 @@ COLUMN_HEURISTICS = [
|
||||
(["geofence radius", "geofence_radius", "geo radius"], "geofence_radius_meters"),
|
||||
(["gps lat", "lat"], "latitude"),
|
||||
(["gps lng", "gps long", "long", "lng", "lon"], "longitude"),
|
||||
(["last dex report time", "dex report time", "last dex", "dex report", "dex time"], "dex_report_date"),
|
||||
(["deployed"], "deployed"),
|
||||
(["pulled date", "pulled", "removal date"], "pulled_date"),
|
||||
# Single-word/generic heuristics (last, after specific multi-word ones)
|
||||
(["serial", "s/n"], "serial_number"),
|
||||
(["category", "type", "asset type", "equipment type", "class"], "category"),
|
||||
@@ -305,6 +308,7 @@ def compute_diff(imported_rows: list[dict], live_data: dict) -> dict:
|
||||
"floor", "room", "trailer_number", "walking_directions", "map_link",
|
||||
"parking_location", "photo_path", "latitude", "longitude",
|
||||
"geofence_radius_meters",
|
||||
"dex_report_date", "deployed", "pulled_date",
|
||||
]
|
||||
|
||||
for row in imported_rows:
|
||||
@@ -680,6 +684,9 @@ def approve_batch(batch_id: int, request: Request):
|
||||
"map_link": "map_link",
|
||||
"parking_location": "parking_location",
|
||||
"photo_path": "photo_path",
|
||||
"dex_report_date": "dex_report_date",
|
||||
"deployed": "deployed",
|
||||
"pulled_date": "pulled_date",
|
||||
}
|
||||
for import_key, db_col in field_map.items():
|
||||
val = item.get(import_key)
|
||||
@@ -740,8 +747,9 @@ def approve_batch(batch_id: int, request: Request):
|
||||
floor, room, trailer_number, walking_directions, map_link,
|
||||
parking_location, photo_path,
|
||||
customer_id, location_id, is_disney,
|
||||
latitude, longitude, geofence_radius_meters)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
||||
latitude, longitude, geofence_radius_meters,
|
||||
dex_report_date, deployed, pulled_date)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
||||
(
|
||||
machine_id,
|
||||
str(item.get("serial_number", "")).strip() or "",
|
||||
@@ -767,6 +775,9 @@ def approve_batch(batch_id: int, request: Request):
|
||||
_safe_float(item.get("latitude")),
|
||||
_safe_float(item.get("longitude")),
|
||||
_safe_int(item.get("geofence_radius_meters"), 50),
|
||||
str(item.get("dex_report_date", "")).strip() or "",
|
||||
str(item.get("deployed", "")).strip() or "",
|
||||
str(item.get("pulled_date", "")).strip() or "",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user