/// Bir PDKS çalışanı (kişi). Kart id ile eşlenir. class Personel { final String id; // kart id (UID) final String isim; final String departman; final String pozisyon; final String? resimBase64; // base64 kodlanmış resim (bilgi.json içinde) Personel({ required this.id, required this.isim, this.departman = '', this.pozisyon = '', this.resimBase64, }); Map toJson() => { 'id': id, 'isim': isim, 'departman': departman, 'pozisyon': pozisyon, 'resim': resimBase64, }; factory Personel.fromJson(Map j) => Personel( id: j['id'] as String, isim: j['isim'] as String? ?? '', departman: j['departman'] as String? ?? '', pozisyon: j['pozisyon'] as String? ?? '', resimBase64: j['resim'] as String?, ); } /// Bir güne ait giriş/çıkış durumu. class GunDurumu { final String personelId; final String uid; final bool girisYapti; final String? sonTip; // 'giris' | 'cikis' GunDurumu({ required this.personelId, required this.uid, required this.girisYapti, this.sonTip, }); /// Bugün bu kişi için çıkış yapılabilir mi? bool cikisYapilabilirMi() { return girisYapti && sonTip == 'giris'; } Map toJson() => { 'personelId': personelId, 'uid': uid, 'girisYapti': girisYapti, 'sonTip': sonTip, }; factory GunDurumu.fromJson(Map j) => GunDurumu( personelId: j['personelId'] as String, uid: j['uid'] as String, girisYapti: j['girisYapti'] as bool, sonTip: j['sonTip'] as String?, ); } /// Bir kart okuma kaydı (giriş/çıkış). class OkumaKaydi { final String personelId; final String uid; final String tip; // 'giris' | 'cikis' final DateTime zaman; OkumaKaydi({ required this.personelId, required this.uid, required this.tip, required this.zaman, }); String get tarih => '${zaman.year.toString().padLeft(4, '0')}-${zaman.month.toString().padLeft(2, '0')}-${zaman.day.toString().padLeft(2, '0')}'; Map toJson() => { 'personelId': personelId, 'uid': uid, 'tip': tip, 'zaman': zaman.toIso8601String(), }; factory OkumaKaydi.fromJson(Map j) => OkumaKaydi( personelId: j['personelId'] as String, uid: j['uid'] as String, tip: j['tip'] as String, zaman: DateTime.parse(j['zaman'] as String), ); }