Count Tasking Requests

Count Tasking Requests
Request ID Item Name Current Stock Actual Count Variance Status Created By Created Date Actions

DataLab.M.S Pro

Count Tasking Request

Request ID: ${request.id}

${request.approvedBy ? ` ` : ''}
Item Name ${request.itemName} Category ${request.itemCategory || 'N/A'}
Current Stock ${request.currentStock} ${request.unit} Actual Count ${request.actualStock} ${request.unit}
Variance ${request.variance > 0 ? '+' : ''}${request.variance} ${request.unit} Status ${request.status.toUpperCase()}
Created By ${request.createdBy} Created Date ${request.createdAt && request.createdAt.toDate ? request.createdAt.toDate().toLocaleString() : '-'}
Approved/Rejected By ${request.approvedBy} Action Date ${request.updatedAt && request.updatedAt.toDate ? request.updatedAt.toDate().toLocaleString() : '-'}

Notes

${request.notes || 'No notes provided'}

`; printWindow.document.write(printContent); printWindow.document.close(); printWindow.print(); } // Edit request function editRequest(requestId) { // Implementation for editing a request alert('Edit functionality to be implemented'); } // Delete request function deleteRequest(requestId) { if (!confirm('Are you sure you want to delete this count tasking request?')) { return; } db.collection('inventory_requests').doc('count_tasking') .collection('requests').doc(requestId).delete() .then(() => { loadCountTaskingRequests(); }) .catch(error => { console.error('Error deleting request:', error); alert('Error deleting request. Please try again.'); }); } // Update request status (approve/reject) function updateRequestStatus(requestId, status) { const updates = { status: status, approvedBy: currentUser.email, updatedAt: FieldValue.serverTimestamp() }; db.collection('inventory_requests').doc('count_tasking') .collection('requests').doc(requestId).update(updates) .then(() => { loadCountTaskingRequests(); }) .catch(error => { console.error(`Error ${status}ing request:`, error); alert(`Error ${status}ing request. Please try again.`); }); } // Apply filters function applyFilters() { const fromDate = filterFromDate.value ? new Date(filterFromDate.value) : null; const toDate = filterToDate.value ? new Date(filterToDate.value) : null; const statusFilter = filterStatus.value; const employeeFilter = filterEmployee.value; // Adjust toDate to end of day if (toDate) { toDate.setHours(23, 59, 59, 999); } const filteredRequests = countTaskingRequests.filter(request => { // Date filter if (fromDate && toDate) { const requestDate = request.createdAt && request.createdAt.toDate ? request.createdAt.toDate() : null; if (!requestDate || requestDate < fromDate || requestDate > toDate) { return false; } } // Status filter if (statusFilter !== 'all' && request.status !== statusFilter) { return false; } // Employee filter if (employeeFilter !== 'all' && request.createdBy !== employeeFilter) { return false; } return true; }); renderCountTaskingRequests(filteredRequests); } // Reset filters function resetFilters() { filterFromDate.value = ''; filterToDate.value = ''; filterStatus.value = 'all'; filterEmployee.value = 'all'; renderCountTaskingRequests(countTaskingRequests); } // Load employees for filter function loadEmployeesForFilter() { db.collection('employees').get() .then(snapshot => { snapshot.forEach(doc => { const option = document.createElement('option'); option.value = doc.id; option.textContent = doc.data().fullName || doc.id; filterEmployee.appendChild(option); }); }) .catch(error => { console.error('Error loading employees:', error); }); } // ...existing code... // ...existing code... function exportToPdf() { const { jsPDF } = window.jspdf; const doc = new jsPDF(); doc.text("DataLab PRO - Count Tasking Requests", 14, 14); // Prepare table data const tableColumn = [ "Request ID", "Item Name", "Current Stock", "Actual Count", "Variance", "Status", "Created By", "Created Date" ]; const tableRows = []; // Use filtered data if filters applied, else all const rows = countTaskingBody.querySelectorAll("tr"); rows.forEach(row => { const cells = row.querySelectorAll("td"); if (cells.length === 9) { // Exclude the last column (Actions) for export const rowData = Array.from(cells).slice(0, 8).map(cell => cell.textContent.trim()); tableRows.push(rowData); } }); if (tableRows.length === 0) { alert("No data to export."); return; } doc.autoTable({ head: [tableColumn], body: tableRows, startY: 22, styles: { fontSize: 8 }, didDrawPage: function (data) { // Footer text const footerText = "WhatsApp: +201144957207 | Contact: https://datalab-system.web.app"; doc.setFontSize(10); doc.text( footerText, data.settings.margin.left, doc.internal.pageSize.getHeight() - 10 ); } }); doc.save("count_tasking_requests.pdf"); } // ...existing code... // Export to Excel function exportToExcel() { // Prepare worksheet data const ws_data = [ ["Request ID", "Item Name", "Current Stock", "Actual Count", "Variance", "Status", "Created By", "Created Date"] ]; const rows = countTaskingBody.querySelectorAll("tr"); rows.forEach(row => { const cells = row.querySelectorAll("td"); if (cells.length === 9) { // Exclude the last column (Actions) for export const rowData = Array.from(cells).slice(0, 8).map(cell => cell.textContent.trim()); ws_data.push(rowData); } }); if (ws_data.length === 1) { alert("No data to export."); return; } const wb = XLSX.utils.book_new(); const ws = XLSX.utils.aoa_to_sheet(ws_data); XLSX.utils.book_append_sheet(wb, ws, "Count Tasking Requests"); XLSX.writeFile(wb, "count_tasking_requests.xlsx"); } // ...existing code...