From a305766d65524d6304dae9e0cf2dce9e82e4ce4e Mon Sep 17 00:00:00 2001 From: Shawn Date: Sat, 23 May 2026 18:46:58 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20show=20'=E2=80=94=20No=20report=20yet'?= =?UTF-8?q?=20for=20assets=20without=20dex=5Freport=5Fdate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backup-db.sh | 22 ---------------------- classify_makes.py | 10 +++++----- import_machines.py | 4 ++-- server.py | 2 +- static/index.html | 1 + 5 files changed, 9 insertions(+), 30 deletions(-) delete mode 100755 backup-db.sh diff --git a/backup-db.sh b/backup-db.sh deleted file mode 100755 index d6de885..0000000 --- a/backup-db.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -# Auto-backup for canteen-asset-tracker database -# Runs before every server start and on a cron schedule - -set -euo pipefail - -DB_DIR="/home/oplabs/projects/canteen-asset-tracker" -BACKUP_DIR="/home/oplabs/backups/canteen-db" -TIMESTAMP=$(date +%Y%m%d-%H%M%S) - -mkdir -p "$BACKUP_DIR" - -for db in assets.db; do - if [ -f "${DB_DIR}/${db}" ]; then - cp "${DB_DIR}/${db}" "${BACKUP_DIR}/${db}-${TIMESTAMP}" - # Keep only last 30 backups - ls -t "${BACKUP_DIR}/${db}-"* 2>/dev/null | tail -n +31 | xargs rm -f 2>/dev/null || true - echo "✅ Backed up ${db} -> ${BACKUP_DIR}/${db}-${TIMESTAMP}" - else - echo "⚠️ ${db} not found, skipping" - fi -done diff --git a/classify_makes.py b/classify_makes.py index e458dcd..b686631 100644 --- a/classify_makes.py +++ b/classify_makes.py @@ -88,13 +88,13 @@ DN_PREFIXES = [ '112206', '112510', # Other DN 11-prefixed: 11 + 4-digit year/week code ] -DN_RULE = _make_rule(DN_PREFIXES, 'DN', 'BevMax/5800/3800/200E', 'GF Bev', +DN_RULE = _make_rule(DN_PREFIXES, 'DN', 'BevMax/5800/3800/200E', 'Bev', min_len=10, max_len=14) # Broader DN catch: any 12-13 digit serial starting with '11' def _dn_broad(sn_clean): return len(sn_clean) >= 11 and sn_clean.startswith('11') and sn_clean.isdigit() -DN_BROAD = (_dn_broad, 'DN', 'Unknown', 'GF Bev', 'medium') +DN_BROAD = (_dn_broad, 'DN', 'Unknown', 'Bev', 'medium') # ─── CRANE ───────────────────────────────────────────────────────────────── # Multiple serial formats for Crane/National machines @@ -119,12 +119,12 @@ CRANE_222 = (_crane_222, 'Crane', 'Merchant Media', 'Snack', 'high') # 12-digit: 221XXXXXXXXX (Crane Merchant Media, 472) def _crane_221(sn_clean): return len(sn_clean) >= 11 and sn_clean.startswith('221') and sn_clean.isdigit() -CRANE_221 = (_crane_221, 'Crane', 'Merchant Media', 'Snack/GF Food', 'high') +CRANE_221 = (_crane_221, 'Crane', 'Merchant Media', 'Snack/Food', 'high') # 471/472: dash or 9-digit def _crane_47(sn_clean): return (sn_clean.startswith('471') or sn_clean.startswith('472')) and len(sn_clean) >= 8 -CRANE_47 = (_crane_47, 'Crane', '471/472', 'GF Food', 'high') +CRANE_47 = (_crane_47, 'Crane', '471/472', 'Food', 'high') # Dash format: 168-XXXXXX, 167-XXXXXX def _crane_dash(orig_sn): @@ -220,7 +220,7 @@ def _dn_8digit_short(sn_clean): return (len(sn_clean) == 8 and sn_clean.isdigit() and (sn_clean.startswith('114') or sn_clean.startswith('241') or sn_clean.startswith('1149') or sn_clean.startswith('2411'))) -DN_SHORT_8 = (_dn_8digit_short, 'DN', 'BevMax/5800/3800/200E', 'GF Bev', 'medium') +DN_SHORT_8 = (_dn_8digit_short, 'DN', 'BevMax/5800/3800/200E', 'Bev', 'medium') # 10-digit 76/77 prefix → DN (e.g., 76820565BD, 76920191BD, 77090262AE) def _dn_76_77(sn_clean): diff --git a/import_machines.py b/import_machines.py index 35f3429..6fc9659 100644 --- a/import_machines.py +++ b/import_machines.py @@ -77,13 +77,13 @@ def main(xlsx_path): # New columns from export dex_report_date = row[7] if isinstance(dex_report_date, datetime): - dex_report_date = dex_report_date.isoformat() + dex_report_date = dex_report_date.strftime('%Y-%m-%d %H:%M:%S') else: dex_report_date = str(dex_report_date) if dex_report_date else '' deployed = str(row[34]) if row[34] else '' pulled_date = row[35] if isinstance(pulled_date, datetime): - pulled_date = pulled_date.isoformat() + pulled_date = pulled_date.strftime('%Y-%m-%d %H:%M:%S') else: pulled_date = str(pulled_date) if pulled_date else '' device = str(row[0]) if row[0] else '' diff --git a/server.py b/server.py index 222cf2d..9ece980 100644 --- a/server.py +++ b/server.py @@ -1056,7 +1056,7 @@ def list_assets( like = f"%{q}%" params.extend([like, like, like, like]) if no_dex_days is not None: - conditions.append("(dex_report_date IS NULL OR dex_report_date < datetime('now', '-' || ? || ' days'))") + conditions.append("(dex_report_date IS NULL OR REPLACE(dex_report_date, 'T', ' ') < datetime('now', '-' || ? || ' days'))") params.append(no_dex_days) where = " AND ".join(conditions) diff --git a/static/index.html b/static/index.html index 0d50af8..d3ce431 100644 --- a/static/index.html +++ b/static/index.html @@ -3813,6 +3813,7 @@ df('Category', catLabel(a.category)), df('Make', a.make), df('Model', a.model), + df('Last Dex Report', a.dex_report_date || '— No report yet', true), ].filter(Boolean).join('');