fix: show '— No report yet' for assets without dex_report_date
This commit is contained in:
@@ -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
@@ -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
@@ -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 ''
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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('');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user