// import 'package:dart_eval/dart_eval.dart'; import 'package:fikoyt_mesaici/apps/mesaici/model/ayarlar/model_ayarlar.dart'; import 'package:fikoyt_mesaici/apps/mesaici/model/calisma_kayit/calisma_kayit.dart'; class CalismaKayitHesaplamalar { CalismaKayitHesaplamalar({ required this.aktifCalisma, }); CalismaKayit aktifCalisma; /** Brüt Ücretler */ double brutNormal = 0.0; double brutFazlaMesai = 0.0; double brutEkOdemeler = 0.0; double brutToplam = 0.0; /** */ double kesintilerToplam = 0.0; double vergilerToplam = 0.0; double vergilerKumulatifToplam = 0.0; /** */ double netNormalUcret = 0.0; double netFazlaMesai = 0.0; double netEkUcretler = 0.0; double? kumulatifMatrah; double kumulatifVergi = 0.0; double odenecekUcret = 0.0; double toplamKesinti = 0.0; double gelirVergisiMatrahi = 0.0; Future hesapla() async { // kumulatifMatrah = await aktifCalisma.kumulatifMatrah(); //---> double saniyelikMaas = (aktifCalisma.maas?.brutMaas ?? 0.0) / (aktifCalisma.maas?.aylikCalismaSaati?.inSeconds ?? 0.0); brutNormal = (aktifCalisma.normalMesai?.inSeconds ?? 0.0) * saniyelikMaas; //---> double carpan = (aktifCalisma.mesaiCarpani?.toDouble() ?? 1.0); carpan = (carpan / 100.0) + 1; if (carpan <= 0) carpan = 1.0; brutFazlaMesai = ((aktifCalisma.fazlaMesai?.inSeconds ?? 0.0) * saniyelikMaas) * carpan; //---> brutEkOdemeler = (aktifCalisma.ekOdemeler ?? []).fold(0, (sum, item) => (item.bruteEkle ?? true) == true ? (sum + (item.miktar ?? 0.0)) : sum); //---> brutToplam = brutNormal + brutFazlaMesai + brutEkOdemeler; //---> double brutToplamlar$ = brutToplam; double kesintiHesap = 0.0; double kesintiNetFazlaMesaiHesap = 0.0; double kesintiEkOdemeNetHesap = 0.0; toplamKesinti = 0.0; /// Kesinti Hesaplama double kesintiToplamIstisna = 0.0; double kesintiToplamYuzde = 0.0; double kesintiToplamSabit = 0.0; for (var kesinti in aktifCalisma.kesintiler ?? []) { if (kesinti.GVMatrahindanDus ?? true) { kesintiToplamIstisna += kesinti.istisna ?? 0.0; kesintiToplamYuzde += (kesinti.kesintiSekli == KesintiSekli.YUZDELIK || kesinti.kesintiSekli == KesintiSekli.DIGER) ? (kesinti.oran ?? 0.0).toDouble() : 0.0; kesintiToplamSabit += (kesinti.kesintiSekli == KesintiSekli.SABIT || kesinti.kesintiSekli == KesintiSekli.DIGER) ? (kesinti.miktar ?? 0.0).toDouble() : 0.0; kesintiHesap = brutToplamlar$ - (kesintiToplamIstisna + kesintiToplamSabit); kesintiHesap = (kesintiHesap * (kesintiToplamYuzde / 100)); kesintiNetFazlaMesaiHesap = brutFazlaMesai - (kesintiToplamIstisna + kesintiToplamSabit); kesintiNetFazlaMesaiHesap = (kesintiNetFazlaMesaiHesap * (kesintiToplamYuzde / 100)); kesintiEkOdemeNetHesap = brutEkOdemeler - (kesintiToplamIstisna + kesintiToplamSabit); kesintiEkOdemeNetHesap = (kesintiEkOdemeNetHesap * (kesintiToplamYuzde / 100)); } } kesintilerToplam = kesintiHesap; //---> gelirVergisiMatrahi = brutToplam - kesintilerToplam; double vergilerHesap = 0.0; double vergilerNetFazlaMesaiHesap = 0.0; double vergilerEkOdemeNetHesap = 0.0; /// Düz Oran Vergilerin Düşülmesi double vergilerToplamIstisna = 0.0; double vergilerToplamYuzde = 0.0; double vergilerToplamSabit = 0.0; // kumulatifMatrah = 0.1; kumulatifVergi = 0; for (var vergi in aktifCalisma.vergiler ?? []) { if (vergi.turu == VergiTuru.DUZORAN) { vergilerToplamIstisna += vergi.istisna ?? 0.0; vergilerToplamYuzde += (vergi.vergiSekli == VergiSekli.YUZDELIK || vergi.vergiSekli == VergiSekli.DIGER) ? vergi.oran ?? 0.0 : 0.0; vergilerToplamSabit += (vergi.vergiSekli == VergiSekli.SABIT || vergi.vergiSekli == VergiSekli.DIGER) ? vergi.miktar ?? 0.0 : 0.0; vergilerHesap = gelirVergisiMatrahi - (vergilerToplamIstisna + vergilerToplamSabit); vergilerHesap = (vergilerHesap * (vergilerToplamYuzde / 100)); vergilerNetFazlaMesaiHesap = brutFazlaMesai - (vergilerToplamIstisna + vergilerToplamSabit); vergilerNetFazlaMesaiHesap = (vergilerNetFazlaMesaiHesap * (vergilerToplamYuzde / 100)); vergilerEkOdemeNetHesap = brutEkOdemeler - (vergilerToplamIstisna + vergilerToplamSabit); vergilerEkOdemeNetHesap = (vergilerEkOdemeNetHesap * (vergilerToplamYuzde / 100)); } // /// Kümülatif Vergiler Burada Ayarlanacak // if (vergi.turu == VergiTuru.KUMULATIF) { // //ChatGpt Buraya Göre Ayarla Kümülatif Vergi Hesaplamalarını Zahmet Olmazsa // double kumulatifVergi_ = kumulatifVergiHesapla1(vergi); // // Toplam kümülatif vergi, diğer vergilere eklenebilir // kumulatifVergi += kumulatifVergi_; // } } kumulatifVergi = kumulatifVergiHesapla(); vergilerToplam = vergilerHesap; netFazlaMesai = brutFazlaMesai - (kesintiNetFazlaMesaiHesap + vergilerNetFazlaMesaiHesap); netEkUcretler = brutEkOdemeler - (kesintiEkOdemeNetHesap + vergilerEkOdemeNetHesap); //---> odenecekUcret = brutToplam - (kesintilerToplam + vergilerToplam + kumulatifVergi); toplamKesinti = brutToplam - odenecekUcret; // print((brutToplamlar1)); return this; } Future kumulatifMatrahGuncelle() async { kumulatifMatrah = await aktifCalisma.kumulatifMatrah(); return kumulatifMatrah ?? 0.0; } double kumulatifVergiHesapla() { double toplamVergi = 0.0; double toplamGelir = gelirVergisiMatrahi + (kumulatifMatrah ?? 0.0); // Bu ayki gelir ve kümülatif gelir toplamı double oncekiVergi = 0.0; double oncekiMatrah = kumulatifMatrah ?? 0.0; for (var dilim in aktifCalisma.vergiler ?? []) { if (dilim.turu == VergiTuru.KUMULATIF) { // Yeni gelir üzerinden vergi hesapla if (toplamGelir > (dilim.kumulatifAltSinir ?? 0.0)) { double altSinir = dilim.kumulatifAltSinir ?? 0.0; double ustSinir = dilim.kumulatifUstSinir ?? double.infinity; // Vergilendirilebilir kısmı hesapla double vergilendirilebilirTutar = (toplamGelir > ustSinir ? ustSinir : toplamGelir) - altSinir; toplamVergi += (dilim.miktar ?? 0.0) + vergilendirilebilirTutar * ((dilim.oran ?? 0.0) / 100); } // Önceki matrah üzerinden vergi hesapla if (toplamGelir > (dilim.kumulatifAltSinir ?? 0.0)) { double altSinir = dilim.kumulatifAltSinir ?? 0.0; double ustSinir = dilim.kumulatifUstSinir ?? double.infinity; double vergilendirilebilirTutar = (oncekiMatrah > ustSinir ? ustSinir : oncekiMatrah) - altSinir; oncekiVergi += (dilim.miktar ?? 0.0) + vergilendirilebilirTutar * ((dilim.oran ?? 0.0) / 100); } } } kumulatifVergi = toplamVergi - oncekiVergi; if (kumulatifVergi < 0) { kumulatifVergi = 0; } return kumulatifVergi; } }