diff --git a/app/Http/Controllers/Finance/VehicleLogController.php b/app/Http/Controllers/Finance/VehicleLogController.php index 8b240193..0963376f 100644 --- a/app/Http/Controllers/Finance/VehicleLogController.php +++ b/app/Http/Controllers/Finance/VehicleLogController.php @@ -40,21 +40,22 @@ public function list(Request $request): JsonResponse $request->validate([ 'vehicle_id' => 'required|integer', - 'year' => 'required|integer', - 'month' => 'required|integer|min:1|max:12', + 'start_date' => 'required|date', + 'end_date' => 'required|date|after_or_equal:start_date', ]); $vehicleId = $request->vehicle_id; - $year = $request->year; - $month = $request->month; + $startDate = $request->start_date; + $endDate = $request->end_date; // 차량 정보 $vehicle = CorporateVehicle::where('tenant_id', $tenantId) ->findOrFail($vehicleId); - // 해당 월의 운행 기록 - $startDate = sprintf('%04d-%02d-01', $year, $month); - $endDate = date('Y-m-t', strtotime($startDate)); + // 전체 운행기록 수 (해당 차량) + $totalCount = VehicleLog::where('tenant_id', $tenantId) + ->where('vehicle_id', $vehicleId) + ->count(); $logs = VehicleLog::where('tenant_id', $tenantId) ->where('vehicle_id', $vehicleId) @@ -76,6 +77,7 @@ public function list(Request $request): JsonResponse 'vehicle' => $vehicle, 'logs' => $logs, 'totals' => $totals, + 'totalCount' => $totalCount, ], ]); } @@ -174,20 +176,17 @@ public function export(Request $request): StreamedResponse $request->validate([ 'vehicle_id' => 'required|integer', - 'year' => 'required|integer', - 'month' => 'required|integer|min:1|max:12', + 'start_date' => 'required|date', + 'end_date' => 'required|date|after_or_equal:start_date', ]); $vehicleId = $request->vehicle_id; - $year = $request->year; - $month = $request->month; + $startDate = $request->start_date; + $endDate = $request->end_date; $vehicle = CorporateVehicle::where('tenant_id', $tenantId) ->findOrFail($vehicleId); - $startDate = sprintf('%04d-%02d-01', $year, $month); - $endDate = date('Y-m-t', strtotime($startDate)); - $logs = VehicleLog::where('tenant_id', $tenantId) ->where('vehicle_id', $vehicleId) ->whereBetween('log_date', [$startDate, $endDate]) @@ -208,7 +207,7 @@ public function export(Request $request): StreamedResponse $sheet->setCellValue('E3', '구분'); $sheet->setCellValue('F3', $this->getOwnershipTypeLabel($vehicle->ownership_type)); $sheet->setCellValue('A4', '조회기간'); - $sheet->setCellValue('B4', sprintf('%d년 %d월', $year, $month)); + $sheet->setCellValue('B4', sprintf('%s ~ %s', $startDate, $endDate)); // 헤더 $headers = ['일자', '부서', '성명', '구분', '출발지', '도착지', '주행km', '비고']; @@ -244,7 +243,7 @@ public function export(Request $request): StreamedResponse $sheet->setCellValue('G' . $row, number_format($totalKm)); $sheet->setCellValue('H' . $row, '비업무: ' . number_format($personalKm) . 'km'); - $filename = sprintf('운행기록부_%s_%d년%d월.xlsx', $vehicle->plate_number, $year, $month); + $filename = sprintf('운행기록부_%s_%s_%s.xlsx', $vehicle->plate_number, $startDate, $endDate); return response()->streamDownload(function () use ($spreadsheet) { $writer = new Xlsx($spreadsheet); diff --git a/resources/views/finance/vehicle-logs.blade.php b/resources/views/finance/vehicle-logs.blade.php index 4e06be87..5126a521 100644 --- a/resources/views/finance/vehicle-logs.blade.php +++ b/resources/views/finance/vehicle-logs.blade.php @@ -58,14 +58,29 @@ function VehicleLogsManagement() { const { vehicles, tripTypes, locationTypes } = window.INITIAL_DATA; + // 이번 달 시작일/종료일 계산 + const getMonthRange = (date) => { + const year = date.getFullYear(); + const month = date.getMonth(); + const firstDay = new Date(year, month, 1); + const lastDay = new Date(year, month + 1, 0); + return { + start: firstDay.toISOString().split('T')[0], + end: lastDay.toISOString().split('T')[0] + }; + }; + const currentDate = new Date(); + const thisMonthRange = getMonthRange(currentDate); + const [selectedVehicle, setSelectedVehicle] = useState(vehicles[0]?.id || null); - const [selectedYear, setSelectedYear] = useState(currentDate.getFullYear()); - const [selectedMonth, setSelectedMonth] = useState(currentDate.getMonth() + 1); + const [startDate, setStartDate] = useState(thisMonthRange.start); + const [endDate, setEndDate] = useState(thisMonthRange.end); const [vehicleInfo, setVehicleInfo] = useState(null); const [logs, setLogs] = useState([]); const [totals, setTotals] = useState({ business_km: 0, personal_km: 0, total_km: 0 }); + const [totalCount, setTotalCount] = useState(0); const [loading, setLoading] = useState(false); const [saving, setSaving] = useState(false); @@ -103,8 +118,8 @@ function VehicleLogsManagement() { setLoading(true); const params = new URLSearchParams({ vehicle_id: selectedVehicle, - year: selectedYear, - month: selectedMonth + start_date: startDate, + end_date: endDate }); const response = await fetch(`/finance/vehicle-logs/list?${params}`); const result = await response.json(); @@ -112,6 +127,7 @@ function VehicleLogsManagement() { setVehicleInfo(result.data.vehicle); setLogs(result.data.logs); setTotals(result.data.totals); + setTotalCount(result.data.totalCount || 0); } } catch (error) { console.error('Failed to load logs:', error); @@ -122,36 +138,31 @@ function VehicleLogsManagement() { useEffect(() => { loadLogs(); - }, [selectedVehicle, selectedYear, selectedMonth]); + }, [selectedVehicle, startDate, endDate]); - const handlePrevMonth = () => { - if (selectedMonth === 1) { - setSelectedMonth(12); - setSelectedYear(prev => prev - 1); - } else { - setSelectedMonth(prev => prev - 1); - } + const handleThisMonth = () => { + const range = getMonthRange(new Date()); + setStartDate(range.start); + setEndDate(range.end); }; - const handleNextMonth = () => { - if (selectedMonth === 12) { - setSelectedMonth(1); - setSelectedYear(prev => prev + 1); - } else { - setSelectedMonth(prev => prev + 1); - } + const handleLastMonth = () => { + const lastMonth = new Date(); + lastMonth.setMonth(lastMonth.getMonth() - 1); + const range = getMonthRange(lastMonth); + setStartDate(range.start); + setEndDate(range.end); }; const handleAdd = () => { - const today = new Date(); - const dateStr = `${selectedYear}-${String(selectedMonth).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`; + const today = new Date().toISOString().split('T')[0]; setModalMode('add'); setEditingItem(null); setFormData({ ...initialFormState, vehicle_id: selectedVehicle, - log_date: dateStr, + log_date: today, driver_name: vehicleInfo?.driver || '' }); setShowModal(true); @@ -248,8 +259,8 @@ function VehicleLogsManagement() { const handleExport = () => { const params = new URLSearchParams({ vehicle_id: selectedVehicle, - year: selectedYear, - month: selectedMonth + start_date: startDate, + end_date: endDate }); window.location.href = `/finance/vehicle-logs/export?${params}`; }; @@ -290,8 +301,7 @@ function VehicleLogsManagement() {