import React, { useState, useEffect } from 'react'; import { X, Save, MapPin, User, Calendar, CheckSquare, Upload, Trash2, Box, Plus } from 'lucide-react'; export default function EditBranchModal({ isOpen, onClose, onRefresh, branch }) { const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ name: '', location: '', manager_name: '', operational_start_date: '', status: 'Active', payroll_from_day: 1, payroll_to_day: 28, salary_generation_day: 2, }); const [newDocs, setNewDocs] = useState([]); const [activeStaff, setActiveStaff] = useState([]); const [loadingStaff, setLoadingStaff] = useState(false); useEffect(() => { if (branch) { setFormData({ name: branch.name || '', location: branch.location || '', manager_name: branch.manager_name || '', operational_start_date: branch.operational_start_date || '', status: branch.status || 'Active', payroll_from_day: branch.payroll_from_day || 1, payroll_to_day: branch.payroll_to_day || 28, salary_generation_day: branch.salary_generation_day || 2, }); setNewDocs([]); setActiveStaff([]); } }, [branch]); // Fetch active staff when status becomes Inactive useEffect(() => { if (formData.status === 'Inactive' && branch?.id) { const fetchActiveStaff = async () => { setLoadingStaff(true); try { const res = await fetch(`/api/branches/${branch.id}/active-staff`); const data = await res.json(); setActiveStaff(data); } catch (error) { console.error('Error fetching active staff:', error); } finally { setLoadingStaff(false); } }; fetchActiveStaff(); } else { setActiveStaff([]); } }, [formData.status, branch?.id]); const handleAddDocRow = () => { setNewDocs([...newDocs, { name: '', file: null, document_number: '', expiry_date: '', reminder_days: 30 }]); }; const handleNewDocChange = (index, field, value) => { const updated = [...newDocs]; updated[index][field] = value; setNewDocs(updated); }; const handleRemoveDocRow = (index) => { setNewDocs(newDocs.filter((_, i) => i !== index)); }; const handleSubmit = async (e) => { e.preventDefault(); setLoading(true); const data = new FormData(); data.append('_method', 'PUT'); // For Laravel to handle PUT via POST data.append('name', formData.name); data.append('location', formData.location); data.append('manager_name', formData.manager_name); data.append('operational_start_date', formData.operational_start_date); data.append('status', formData.status); data.append('payroll_from_day', formData.payroll_from_day); data.append('payroll_to_day', formData.payroll_to_day); data.append('salary_generation_day', formData.salary_generation_day); newDocs.forEach((doc, index) => { if (doc.file) { data.append(`new_docs[${index}][file]`, doc.file); data.append(`new_docs[${index}][name]`, doc.name || `New Document ${index + 1}`); data.append(`new_docs[${index}][document_number]`, doc.document_number || ''); data.append(`new_docs[${index}][expiry_date]`, doc.expiry_date); data.append(`new_docs[${index}][reminder_days]`, doc.reminder_days || 30); } }); try { const res = await fetch(`/api/branches/${branch.id}`, { method: 'POST', // Using POST with _method=PUT for FormData headers: { 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content, }, body: data, }); if (res.ok) { onRefresh(); onClose(); } else { const err = await res.json(); alert(err.message || 'Error updating branch'); } } catch (error) { alert('An error occurred. Please try again.'); } finally { setLoading(false); } }; if (!isOpen || !branch) return null; return (
Update details for {branch.name}.