// 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!.toplam(); //---> 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)); // } // } //---> kesintiHesap = aktifCalisma.kesintiler?.hesapla(ucret: brutToplamlar$) ?? 0.0; kesintiNetFazlaMesaiHesap = aktifCalisma.kesintiler?.hesapla(ucret: brutFazlaMesai) ?? 0.0; kesintiEkOdemeNetHesap = aktifCalisma.kesintiler?.hesapla(ucret: brutEkOdemeler) ?? 0.0; //---> kesintilerToplam = kesintiHesap; //---> gelirVergisiMatrahi = brutToplam - kesintilerToplam; double vergilerHesap = 0.0; double vergilerNetFazlaMesaiHesap = 0.0; double vergilerEkOdemeNetHesap = 0.0; kumulatifVergi = 0; /// Düz Oran Vergilerin Düşülmesi // double vergilerToplamIstisna = 0.0; // double vergilerToplamYuzde = 0.0; // double vergilerToplamSabit = 0.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)); // } // } // vergilerToplam = vergilerHesap; // netFazlaMesai = brutFazlaMesai - (kesintiNetFazlaMesaiHesap + vergilerNetFazlaMesaiHesap); // netEkUcretler = brutEkOdemeler - (kesintiEkOdemeNetHesap + vergilerEkOdemeNetHesap); //---> vergilerToplam = aktifCalisma.vergiler?.hesaplaDuzOran(ucret: brutToplamlar$) ?? 0.0; netFazlaMesai = aktifCalisma.vergiler?.hesaplaDuzOran(ucret: brutFazlaMesai) ?? 0.0; netEkUcretler = aktifCalisma.vergiler?.hesaplaDuzOran(ucret: brutEkOdemeler) ?? 0.0; //---> kumulatifVergi = kumulatifVergiHesapla(); //---> 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; } }