import React, { useState, useEffect } from 'react'; import { useApp } from '../../context/AppContext'; import { BarChart3, TrendingUp, Trophy, Target, Award, ArrowUpRight, Pencil } from 'lucide-react'; import { ResponsiveContainer, BarChart, Bar, XAxis, YAxis, Tooltip, CartesianGrid, PieChart, Pie, Cell } from 'recharts'; import { TurkeyHeatMap } from './TurkeyHeatMap'; import { companyStats, monthlyStats, sectorStats, formatTL } from '../../services/analytics'; const PIE_COLORS = ['#2563eb', '#059669', '#7c3aed', '#d97706', '#dc2626', '#0891b2', '#db2777', '#65a30d']; export const AnalyticsDashboard = () => { const { tenders, userProfile } = useApp(); const cs = companyStats(tenders); const monthlyData = monthlyStats(tenders); const sektorler = sectorStats(tenders); const pieData = sektorler.slice(0, 6).map((s, i) => ({ name: s.sektor, value: s.count, color: PIE_COLORS[i % PIE_COLORS.length] })); const pieToplam = pieData.reduce((s, p) => s + p.value, 0); // Ciro hedefi — kullanıcı belirler (localStorage) const [hedef, setHedef] = useState(() => Number(localStorage.getItem('ihaleist_ciro_hedefi') || 0)); const [editing, setEditing] = useState(false); useEffect(() => { localStorage.setItem('ihaleist_ciro_hedefi', String(hedef)); }, [hedef]); const hedefYuzde = hedef > 0 ? Math.min(Math.round((cs.wonTotal / hedef) * 100), 100) : 0; return (
{userProfile.company} — kanban süreçlerinizden hesaplanan gerçek kazanma oranı ve il bazlı ihale yoğunluğu.
Henüz teklif/sonuç verisi yok
Kanban'da ihaleleri "teklif verildi / kazanıldı / kaybedildi" durumuna aldıkça aylık hacim grafiği oluşur.
Sektör dağılımı, ihale verisi yüklendikçe hesaplanır.