Initial commit, 90% there
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
|
||||
with open('/home/mdares/.node-red/flows.json', 'r') as f:
|
||||
flows = json.load(f)
|
||||
|
||||
# Update restore-query handler in Back to UI
|
||||
for node in flows:
|
||||
if node.get('name') == 'Back to UI':
|
||||
func = node['func']
|
||||
|
||||
# Find and replace the restore-query handler
|
||||
old_restore = '''if (mode === "restore-query") {
|
||||
const rows = Array.isArray(msg.payload) ? msg.payload : [];
|
||||
|
||||
if (rows.length > 0) {
|
||||
const row = rows[0];
|
||||
const restoredOrder = {
|
||||
id: row.work_order_id || row.id || "",
|
||||
sku: row.sku || "",
|
||||
target: Number(row.target_qty || row.target || 0),
|
||||
good: Number(row.good_parts || row.good || 0),
|
||||
scrap: Number(row.scrap_parts || row.scrap || 0),
|
||||
progressPercent: Number(row.progress_percent || 0),
|
||||
cycleTime: Number(row.cycle_time || 0),
|
||||
lastUpdateIso: row.updated_at || null
|
||||
};
|
||||
|
||||
// Restore global state
|
||||
global.set("activeWorkOrder", restoredOrder);
|
||||
global.set("cycleCount", Number(row.cycle_count) || 0);
|
||||
// Don't auto-start tracking - user must click START
|
||||
global.set("trackingEnabled", false);
|
||||
global.set("productionStarted", false);
|
||||
|
||||
node.warn('[RESTORE] Restored work order: ' + restoredOrder.id + ' with ' + global.get("cycleCount") + ' cycles');
|
||||
|
||||
const homeMsg = {
|
||||
topic: "activeWorkOrder",
|
||||
payload: restoredOrder
|
||||
};
|
||||
return [null, homeMsg, null, null];
|
||||
} else {
|
||||
node.warn('[RESTORE] No running work order found');
|
||||
}
|
||||
return [null, null, null, null];
|
||||
}'''
|
||||
|
||||
new_restore = '''if (mode === "restore-query") {
|
||||
const rows = Array.isArray(msg.payload) ? msg.payload : [];
|
||||
|
||||
if (rows.length > 0) {
|
||||
const row = rows[0];
|
||||
const restoredOrder = {
|
||||
id: row.work_order_id || row.id || "",
|
||||
sku: row.sku || "",
|
||||
target: Number(row.target_qty || row.target || 0),
|
||||
good: Number(row.good_parts || row.good || 0),
|
||||
scrap: Number(row.scrap_parts || row.scrap || 0),
|
||||
progressPercent: Number(row.progress_percent || 0),
|
||||
cycleTime: Number(row.cycle_time || 0),
|
||||
lastUpdateIso: row.updated_at || null
|
||||
};
|
||||
|
||||
// Restore global state
|
||||
global.set("activeWorkOrder", restoredOrder);
|
||||
global.set("cycleCount", Number(row.cycle_count) || 0);
|
||||
// Don't auto-start tracking - user must click START
|
||||
global.set("trackingEnabled", false);
|
||||
global.set("productionStarted", false);
|
||||
|
||||
node.warn('[RESTORE] Restored work order: ' + restoredOrder.id + ' with ' + global.get("cycleCount") + ' cycles');
|
||||
|
||||
// Set status back to RUNNING in database (if not already DONE)
|
||||
// This prevents user from having to "Load" the work order again
|
||||
const dbMsg = {
|
||||
topic: "UPDATE work_orders SET status = 'RUNNING', updated_at = NOW() WHERE work_order_id = ? AND status != 'DONE'",
|
||||
payload: [restoredOrder.id]
|
||||
};
|
||||
|
||||
const homeMsg = {
|
||||
topic: "activeWorkOrder",
|
||||
payload: restoredOrder
|
||||
};
|
||||
|
||||
// Output 1: workOrderMsg (to refresh WO table)
|
||||
// Output 2: homeMsg (to update UI)
|
||||
// Output 3: dbMsg (to update DB status)
|
||||
return [dbMsg, homeMsg, null, null];
|
||||
} else {
|
||||
node.warn('[RESTORE] No running work order found');
|
||||
}
|
||||
return [null, null, null, null];
|
||||
}'''
|
||||
|
||||
if old_restore in func:
|
||||
func = func.replace(old_restore, new_restore)
|
||||
node['func'] = func
|
||||
print("✓ Updated restore-query handler to set status to RUNNING")
|
||||
else:
|
||||
print("✗ Could not find exact restore-query handler - may have been modified")
|
||||
break
|
||||
|
||||
# Write back
|
||||
with open('/home/mdares/.node-red/flows.json', 'w') as f:
|
||||
json.dump(flows, f, indent=4)
|
||||
|
||||
print("✓ flows.json updated successfully")
|
||||
Reference in New Issue
Block a user