Files
2025-12-02 16:27:21 +00:00

152 lines
5.4 KiB
Python

#!/usr/bin/env python3
import json
with open('/home/mdares/.node-red/flows.json', 'r') as f:
flows = json.load(f)
print("RESTORING WORKING FUNCTIONALITY + CLEAN STOP PROMPT")
print("="*60)
# ============================================================================
# FIX 1: Restore toggleStartStop to working version
# ============================================================================
for node in flows:
if node.get('id') == '1821c4842945ecd8':
template = node.get('format', '')
# Find and replace toggleStartStop with the ORIGINAL working version
# that also shows the stop prompt
toggle_start = template.find('scope.toggleStartStop = function()')
if toggle_start > 0:
toggle_end = template.find('};', toggle_start) + 2
# Replace with working version that shows stop prompt
working_toggle = '''scope.toggleStartStop = function() {
if (scope.isProductionRunning) {
// STOP clicked - show prompt
console.log('[STOP] Showing stop reason prompt');
document.getElementById('stopReasonModal').style.display = 'flex';
// Reset selection state
window._stopCategory = null;
window._stopReason = null;
document.querySelectorAll('.stop-reason-option').forEach(btn => {
btn.classList.remove('selected');
});
if (document.getElementById('submitStopReason')) {
document.getElementById('submitStopReason').disabled = true;
}
if (document.getElementById('stopReasonNotes')) {
document.getElementById('stopReasonNotes').value = '';
}
} else {
// START/RESUME production
scope.send({ action: "start" });
scope.isProductionRunning = true;
}
};'''
template = template[:toggle_start] + working_toggle + template[toggle_end:]
print("✅ Restored toggleStartStop function")
# Make sure submitStopReason properly disables tracking
if 'window.submitStopReason' in template:
submit_start = template.find('window.submitStopReason')
submit_end = template.find('window.hideStopPrompt', submit_start)
correct_submit = '''window.submitStopReason = function() {
const category = window._stopCategory;
const reason = window._stopReason;
if (!category || !reason) {
alert('Please select a stop reason');
return;
}
const notes = document.getElementById('stopReasonNotes').value;
console.log('[STOP SUBMIT] Category:', category, 'Reason:', reason);
// Send stop-reason action to backend
scope.send({
action: 'stop-reason',
payload: {
category: category,
reason: reason,
notes: notes
}
});
// Update UI state - production stopped
scope.isProductionRunning = false;
scope.$apply();
// Close the modal
hideStopPrompt();
};
window.hideStopPrompt = function() {
document.getElementById('stopReasonModal').style.display = 'none';
};'''
template = template[:submit_start] + correct_submit + template[submit_end:]
print("✅ Fixed submitStopReason function")
node['format'] = template
break
# ============================================================================
# FIX 2: Ensure stop-reason case in Work Order buttons disables tracking
# ============================================================================
for node in flows:
if node.get('id') == '9bbd4fade968036d':
func = node.get('func', '')
# Find stop-reason case
if 'case "stop-reason"' in func:
# Check if it has trackingEnabled
case_start = func.find('case "stop-reason"')
case_end = func.find('\n case "', case_start + 10)
if case_end < 0:
case_end = func.find('\n}', case_start + 500)
stop_reason_case = func[case_start:case_end]
if 'global.set("trackingEnabled", false)' in stop_reason_case:
print("✅ stop-reason case already disables tracking")
else:
# Find the opening brace of the case
brace_pos = func.find('{', case_start)
# Insert tracking disable
func = func[:brace_pos+1] + '\n global.set("trackingEnabled", false);\n node.warn("[STOP REASON] Tracking disabled");' + func[brace_pos+1:]
node['func'] = func
print("✅ Added trackingEnabled = false to stop-reason case")
else:
print("⚠️ No stop-reason case found in Work Order buttons")
break
with open('/home/mdares/.node-red/flows.json', 'w') as f:
json.dump(flows, f, indent=4)
print("\n" + "="*60)
print("✅ RESTORATION COMPLETE")
print("="*60)
print("\nWhat was fixed:")
print(" 1. toggleStartStop() restored to working version")
print(" 2. START sends action + sets isProductionRunning = true")
print(" 3. STOP shows prompt (doesn't send action yet)")
print(" 4. submitStopReason() sends stop-reason + updates UI")
print(" 5. Work Order buttons disables tracking on stop-reason")
print("\nExpected behavior:")
print(" - Select WO + mold → START button enables")
print(" - Click START → Production starts, cycles count")
print(" - Click STOP → Prompt appears, cycles KEEP counting")
print(" - Select reason + Submit → Tracking stops, cycles stop")
print("\nRESTART NODE-RED AND TEST!")
EOF