// Equipment Management JavaScript // File Upload with Drag & Drop function initializeFileUpload() { const fileInput = document.getElementById('manualFile'); const uploadForm = document.getElementById('uploadManualForm'); if (!fileInput || !uploadForm) return; // Drag and drop handlers const dropZone = uploadForm.querySelector('.file-upload-zone'); if (dropZone) { dropZone.addEventListener('dragover', (e) => { e.preventDefault(); dropZone.classList.add('dragover'); }); dropZone.addEventListener('dragleave', () => { dropZone.classList.remove('dragover'); }); dropZone.addEventListener('drop', (e) => { e.preventDefault(); dropZone.classList.remove('dragover'); const files = e.dataTransfer.files; if (files.length > 0) { fileInput.files = files; uploadForm.dispatchEvent(new Event('submit', { bubbles: true })); } }); } } // Client-side Cost Calculation function initializeCostCalculation() { const laborCostInput = document.querySelector('input[name="LaborCost"]'); const partsCostInput = document.querySelector('input[name="PartsCost"]'); const totalCostDisplay = document.getElementById('totalCostDisplay'); if (!laborCostInput || !partsCostInput) return; function calculateTotal() { const laborCost = parseFloat(laborCostInput.value) || 0; const partsCost = parseFloat(partsCostInput.value) || 0; const totalCost = laborCost + partsCost; if (totalCostDisplay) { totalCostDisplay.textContent = totalCost.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); } } laborCostInput.addEventListener('input', calculateTotal); partsCostInput.addEventListener('input', calculateTotal); // Calculate on page load calculateTotal(); } // Equipment Status Change Handler function initializeStatusChangeHandler() { const statusSelect = document.querySelector('select[name="Status"]'); if (!statusSelect) return; statusSelect.addEventListener('change', function() { const selectedStatus = this.value; // Add visual feedback based on status const card = this.closest('.card'); if (card) { card.classList.remove('border-success', 'border-warning', 'border-danger', 'border-info'); switch(selectedStatus) { case 'Operational': card.classList.add('border-success'); break; case 'NeedsMaintenance': card.classList.add('border-warning'); break; case 'UnderMaintenance': card.classList.add('border-info'); break; case 'OutOfService': card.classList.add('border-danger'); break; } } }); } // Maintenance Due Reminder function checkMaintenanceDue() { const daysUntilMaintenance = document.querySelector('[data-days-until-maintenance]'); if (!daysUntilMaintenance) return; const days = parseInt(daysUntilMaintenance.dataset.daysUntilMaintenance); if (days !== null && days < 7 && days >= 0) { showToast(`Maintenance due in ${days} days!`, 'warning'); } else if (days < 0) { showToast(`Maintenance is overdue by ${Math.abs(days)} days!`, 'danger'); } } // Show Toast Notification function showToast(message, type = 'info') { const toastHTML = `