diff --git a/src/lib/components/MonthlyFuelReportContent.svelte b/src/lib/components/MonthlyFuelReportContent.svelte index 08c3a38..bb83174 100644 --- a/src/lib/components/MonthlyFuelReportContent.svelte +++ b/src/lib/components/MonthlyFuelReportContent.svelte @@ -23,10 +23,19 @@ availableYears.push(currentYear - i); } + let initialLoadDone = false; + onMount(async () => { await loadFuelData(); + initialLoadDone = true; }); + // Watch for year changes and reload data + $: if (initialLoadDone && selectedYear) { + loadFuelData(); + expandedMonths = new Set(); + } + async function loadFuelData() { if (!user) { error = 'Kullanıcı bilgisi bulunamadı.'; @@ -38,10 +47,6 @@ error = ''; try { - // Get approved fuel slips for this goods manager for the selected year - const startDate = `${selectedYear}-01-01`; - const endDate = `${selectedYear}-12-31`; - const url = `/api/fuel-slips?manager_id=${user.id}&status=approved`; const response = await fetch(url); @@ -55,15 +60,12 @@ const slipDate = new Date(slip.date); return slipDate.getFullYear() === selectedYear; }) - .sort((a, b) => new Date(b.date) - new Date(a.date)); // Sort by date descending - - console.log(`✅ Loaded ${fuelData.length} fuel slips for year ${selectedYear}`); + .sort((a, b) => new Date(b.date) - new Date(a.date)); } else { error = 'Yakıt verileri yüklenemedi.'; } } catch (err) { - console.error('Load fuel data error:', err); - error = 'Bağlantı hatası.'; + error = `Bağlantı hatası: ${err.message}`; } finally { loading = false; } @@ -75,7 +77,7 @@ } else { expandedMonths.add(monthIndex); } - expandedMonths = expandedMonths; // Trigger reactivity + expandedMonths = expandedMonths; } function getMonthData(monthIndex) { @@ -114,13 +116,34 @@ return getMonthData(monthIndex).length; } - $: monthlyData = Array.from({length: 12}, (_, i) => ({ - month: i, - data: getMonthData(i), - total: getMonthTotal(i), - count: getSlipCount(i), - isExpanded: expandedMonths.has(i) - })); + function getMonthDataSummary() { + const months = ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık']; + return months.map((month, index) => ({ + month, + count: getSlipCount(index), + total: getMonthTotal(index) + })).filter(m => m.count > 0); + } + + // Reactive statement that rebuilds when fuelData or expandedMonths changes + $: monthlyData = (() => { + const months = []; + + // Show all 12 months for the selected year + for (let i = 11; i >= 0; i--) { + const data = getMonthData(i); + const monthData = { + month: i, + data: data, + total: getMonthTotal(i), + count: data.length, + isExpanded: expandedMonths.has(i) + }; + months.push(monthData); + } + + return months; + })();
@@ -171,68 +194,66 @@
{#each monthlyData as month (month.month)} - {#if !isMonthInFuture(month.month)} -
-
0} - class:expanded={month.isExpanded} - on:click={() => toggleMonth(month.month)} - > -
-

- {turkishMonths[month.month]} {selectedYear} -

- {#if month.count > 0} -
- {month.count} Fiş - {formatLiters(month.total)}L -
- {:else} -
- Veri Yok -
- {/if} -
-
- -
-
- - {#if month.isExpanded && month.count > 0} -
-
- - - - - - - - - - - - - - {#each month.data.sort((a, b) => new Date(a.date) - new Date(b.date)) as slip, index} - - - - - - - - - - {/each} - -
S.NoAraç PlakasıTarihYakıt CinsiMiktarTeslim AlanTeslim Eden
{index + 1}{slip.vehicle_info?.plate || '-'}{formatDate(slip.date)}{getFuelTypeLabel(slip.fuel_type)}{formatLiters(slip.liters)}{slip.personnel_info?.rank} {slip.personnel_info?.full_name || '-'}{slip.fuel_manager_info?.full_name || '-'}
+
+
0} + class:expanded={month.isExpanded} + on:click={() => toggleMonth(month.month)} + > +
+

+ {turkishMonths[month.month]} {selectedYear} +

+ {#if month.count > 0} +
+ {month.count} Fiş + {formatLiters(month.total)}L
-
- {/if} + {:else} +
+ Veri Yok +
+ {/if} +
+
+ +
+
+ + {#if month.isExpanded && month.count > 0} +
+
+ + + + + + + + + + + + + + {#each month.data.sort((a, b) => new Date(a.date) - new Date(b.date)) as slip, index} + + + + + + + + + + {/each} + +
S.NoAraç PlakasıTarihYakıt CinsiMiktarTeslim AlanTeslim Eden
{index + 1}{slip.vehicle_info?.plate || '-'}{formatDate(slip.date)}{getFuelTypeLabel(slip.fuel_type)}{formatLiters(slip.liters)}{slip.personnel_info?.rank} {slip.personnel_info?.full_name || '-'}{slip.fuel_manager_info?.full_name || '-'}
+
{/if} +
{/each}
{/if} @@ -350,8 +371,9 @@ gap: 2rem; padding: 1.5rem; margin-bottom: 2rem; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; + background: #E0E7FF; + color: #4338CA; + border: 1px solid #C7D2FE; } .summary-item { diff --git a/src/routes/api/fuel-slips/+server.js b/src/routes/api/fuel-slips/+server.js index 3f07993..9196ee4 100644 --- a/src/routes/api/fuel-slips/+server.js +++ b/src/routes/api/fuel-slips/+server.js @@ -16,6 +16,7 @@ export async function GET({ request, url }) { const status = searchParams.get('status'); const manager_id = searchParams.get('manager_id'); const fuel_manager_id = searchParams.get('fuel_manager_id'); + return new Promise((resolve) => { const db = getDatabase(); @@ -41,9 +42,14 @@ export async function GET({ request, url }) { params.push(fuel_manager_id); } + + // Tarihe göre ters sırala query += ' ORDER BY created_at DESC'; + console.log(`🔍 API Query: ${query}`); + console.log(`📋 API Parameters:`, params); + db.all(query, params, (err, rows) => { db.close(); @@ -53,6 +59,8 @@ export async function GET({ request, url }) { return; } + console.log(`📊 Database returned ${rows.length} rows`); + // JSON string olarak saklanan alanları parse et const fuelSlips = rows.map(row => ({ ...row, @@ -62,6 +70,16 @@ export async function GET({ request, url }) { fuel_manager_info: row.fuel_manager_info ? JSON.parse(row.fuel_manager_info) : null })); + console.log(`✅ Processed ${fuelSlips.length} fuel slips for API response`); + console.log(`📋 Fuel slips summary:`, fuelSlips.map(s => ({ + id: s.id, + date: s.date, + goods_manager_id: s.goods_manager_id, + status: s.status, + liters: s.liters, + vehicle: s.vehicle_info?.plate + }))); + resolve(json({ fuelSlips })); }); });