fix: show '— No report yet' for assets without dex_report_date

This commit is contained in:
2026-05-23 18:46:58 -04:00
parent 6016f6a5e6
commit a305766d65
5 changed files with 9 additions and 30 deletions
-22
View File
@@ -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
+5 -5
View File
@@ -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):
+2 -2
View File
@@ -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 ''
+1 -1
View File
@@ -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)
+1
View File
@@ -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('');