import 'dart:io'; import 'dart:isolate'; import 'package:fikoyt_mesaici/apps/mesaici/model/alt_kart/alt_kart.dart'; import 'package:fikoyt_mesaici/apps/mesaici/model/ayarlar/model_ayarlar.dart' hide GunTuru; import 'package:fikoyt_mesaici/apps/mesaici/model/calisma_kayit/calisma_kayit.dart'; import 'package:fikoyt_mesaici/core/Extensions/fiko_tarih.dart'; import 'package:fikoyt_mesaici/core/fikoyt.service.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:isar/isar.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:path_provider/path_provider.dart'; part 'model_hareketler.g.dart'; /** */ enum KartTuru { BILINMIYOR(-1, "Bilinmiyor", "❔"), CALISMA_KARTI(0, "Çalışma Kartı", "💳"), ALT_KART(0, "Alt Kart", "💬"); const KartTuru(this.value, this.ismi, this.simge); final int value; final String ismi; final String simge; // List tumu() => [EkOdemeTuru.IKRAMIYE, EkOdemeTuru.PRIM, EkOdemeTuru.YOL, EkOdemeTuru.YEMEK, EkOdemeTuru.SEYYANEN, EkOdemeTuru.DIGER]; } @collection @JsonSerializable() class ModelHareketler { ModelHareketler(); Id id = Isar.autoIncrement; DateTime? tarih; @enumerated KartTuru turu = KartTuru.CALISMA_KARTI; CalismaKayitEmbedded? calismaKarti; AltKart? altKart; // @Backlink(to: 'uuid') final altKartlar = IsarLinks(); final ustKart = IsarLink(); factory ModelHareketler.fromJson(Map json) => _$ModelHareketlerFromJson(json); Map toJson() => _$ModelHareketlerToJson(this); } extension ListeModelHareketler on List { double get brutToplamlar { double snc = 0.0; for (var i = 0; i < length; i++) { snc += this[i].calismaKarti?.brutToplam ?? 0.0; } return snc; } Duration get calismaSaatiToplam { Duration snc = Duration.zero; for (var i = 0; i < length; i++) { snc += this[i].calismaKarti?.calisilanSure ?? Duration.zero; } return snc; } int get altKartSayisi { int snc = 0; for (var i = 0; i < length; i++) { snc += this[i].altKartlar.countSync(); } return snc; } bool get resmiTatilVar { bool snc = false; for (var i = 0; i < length; i++) { if (this[i].calismaKarti?.resmiTatil == true) return true; } return snc; } bool get raporluVar { bool snc = false; for (var i = 0; i < length; i++) { if (this[i].calismaKarti?.raporlu == true) return true; } return snc; } bool get gunlukIzinVar { bool snc = false; for (var i = 0; i < length; i++) { if (this[i].calismaKarti?.gunlukIzinli == true) return true; } return snc; } bool get dinlenmeGunuVar { bool snc = false; for (var i = 0; i < length; i++) { if (this[i].calismaKarti?.gunTuru == GunTuru.DINLENME_GUNU) return true; } return snc; } bool get haftaTatiliVar { bool snc = false; for (var i = 0; i < length; i++) { if (this[i].calismaKarti?.gunTuru == GunTuru.HAFTA_TATILI) return true; } return snc; } } /** * */ @embedded @JsonSerializable() class CalismaKayitEmbedded { CalismaKayitEmbedded(); CalismaKayitEmbedded.fromAktifKart({required CalismaKayit aktifKart}) { // FikoYTMesaiciService FikoYTService.servisMesaici = Get.put(FikoYTMesaiciService()); tarih = aktifKart.tarih; aktifVardiya = aktifKart.aktifVardiya; gunTuru = aktifKart.gunTuru; giris = aktifKart.giris; cikis = aktifKart.cikis; molalar = aktifKart.molalar?.copy(); molalar?.forEach( (ml) { ml.girisSaati?.ayarlaTarih(tarih!); ml.cikisSaati?.ayarlaTarih(tarih!); }, ); maas = aktifKart.maas; calismaSuresi = aktifKart.calismaSuresi; mesaiOrani = aktifKart.mesaiOrani; servisGecikmesi = aktifKart.servisGecikmesi; resmiTatil = aktifKart.resmiTatil; raporlu = aktifKart.raporlu; gunlukIzinli = aktifKart.gunlukIzinli; yillikIzinli = aktifKart.yillikIzinli; yolParasiVar = aktifKart.yolParasiVar; yemekParasiVar = aktifKart.yemekParasiVar; ekOdemeler = aktifKart.ekOdemeler?.copy(); kesintiler = aktifKart.kesintiler?.copy(); vergiler = aktifKart.vergiler?.copy(); } DateTime? tarih; Vardiya? aktifVardiya; @enumerated GunTuru gunTuru = GunTuru.CALISMA_GUNU; DateTime? giris; DateTime? cikis; List? molalar; Maas? maas; int? calismaSuresiInSeconds; @ignore Duration? get calismaSuresi => calismaSuresiInSeconds != null ? Duration(microseconds: calismaSuresiInSeconds!) : null; set calismaSuresi(Duration? value) => calismaSuresiInSeconds = value?.inMicroseconds; double? mesaiOraniNum = 0.0; @ignore num? get mesaiOrani => mesaiOraniNum; set mesaiOrani(num? value) => mesaiOraniNum = value?.toDouble(); bool servisGecikmesi = false; bool resmiTatil = false; bool raporlu = false; bool gunlukIzinli = false; bool yillikIzinli = false; bool yolParasiVar = false; bool yemekParasiVar = false; // List? ekOdemeler = List.empty(growable: true); List? ekOdemeler = List.empty(growable: true); List? kesintiler = List.empty(growable: true); List? vergiler = List.empty(growable: true); @JsonKey(ignore: true) @ignore RxBool? ekSatirlar = false.obs; /** * */ @ignore double get mesaiCarpani { double carpan = (mesaiOrani?.toDouble() ?? 1.0); carpan = (carpan / 100.0) + 1; if (carpan <= 0) carpan = 1.0; return carpan; } @ignore double get brutNormal { return (normalMesai?.inSeconds ?? 0.0) * (maas?.saniyelikMaas ?? 0.0); } @ignore double get brutFazlaMesai { return ((fazlaMesai?.inSeconds ?? 0.0) * (maas?.saniyelikMaas ?? 0.0)) * mesaiCarpani; } @ignore double get brutToplam { return brutNormal + brutFazlaMesai + (ekOdemeler?.toplam() ?? 0.0); } @ignore double get gelirVergisiMatrahi { return brutToplam - (kesintiler?.hesapla(ucret: brutToplam, guncelBrutMaas: 0, guncelBrut: 0) ?? 0.0); } @ignore double get kesintiToplam { return kesintiler?.hesapla(ucret: brutToplam, guncelBrutMaas: 0, guncelBrut: 0) ?? 0.0; } @ignore double get kesintiFazlaMesai { return kesintiler?.hesapla(ucret: brutFazlaMesai, guncelBrutMaas: 0, guncelBrut: 0) ?? 0.0; } @ignore double get kesintiEkOdeme { return kesintiler?.hesapla(ucret: ekOdemeler?.toplam() ?? 0.0, guncelBrutMaas: 0, guncelBrut: 0) ?? 0.0; } @ignore double get vergilerToplam { return vergiler?.hesapla(ucret: gelirVergisiMatrahi, kumulatifMatrah: kumulatifMatrah, guncelBrutMaas: 0, guncelBrut: 0) ?? 0.0; } @ignore double get vergiFazlaMesai { return vergiler?.hesapla(ucret: brutFazlaMesai - kesintiFazlaMesai, kumulatifMatrah: kumulatifMatrah, guncelBrutMaas: 0, guncelBrut: 0) ?? 0.0; } @ignore double get vergiEkOdeme { return vergiler?.hesapla(ucret: (ekOdemeler?.toplam() ?? 0.0) - kesintiEkOdeme, kumulatifMatrah: kumulatifMatrah, guncelBrutMaas: 0, guncelBrut: 0) ?? 0.0; } @ignore double get netFazlaMesai { return brutFazlaMesai - kesintiFazlaMesai - vergiFazlaMesai; } @ignore double get netEkUcretler { return (ekOdemeler?.toplam() ?? 0.0) - kesintiEkOdeme - vergiEkOdeme; } @ignore double get odenecekUcret { return brutToplam - (kesintiToplam + vergilerToplam + 0); } double guncelBrutMaas = 0.0; // @ignore // double get guncelBrutMaas { // final FikoYTMesaiciService FikoYTService.servisMesaici = Get.put(FikoYTMesaiciService()); // /** */ // List liste = FikoYTService.servisMesaici.isar?.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(tarih?.ayinIlkGunu().ilkSaatler(), tarih?.sonSaatler())).calismaKartiProperty().findAllSync(); // /** */ // double sonuc = 0; // for (var i = 0; i < liste.length; i++) { // CalismaKayitEmbedded? item = liste[i]; // if (item != null) { // // await item.hesaplamalar.hesapla(); // sonuc += item.brutToplam; // } // } // // sonuc += odenecekUcret; // return sonuc; // } // @ignore double kumulatifMatrah = 0.0; // Future kumulatifMatrahGuncelle() async { // kumulatifMatrah = await kumulatifMatrahHesapla(); // return kumulatifMatrah; // } double kumulatifMatrahGuncelleSync() { // final FikoYTMesaiciService FikoYTService.servisMesaici = Get.put(FikoYTMesaiciService()); /** */ List liste = FikoYTService.servisMesaici.isar!.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(tarih?.yilinIlkGunu(), tarih?.sonSaatler())).calismaKartiProperty().findAllSync(); /** */ double sonucGelirVergisiMatrahi = 0; guncelBrutMaas = 0; for (var i = 0; i < liste.length; i++) { CalismaKayitEmbedded? item = liste[i]; if (item != null) { // await item.hesaplamalar.hesapla(); sonucGelirVergisiMatrahi += item.gelirVergisiMatrahi; if (tarih!.ayinIlkGunu().ilkSaatler().isBefore(item.tarih!)) { if (item.tarih!.isBefore(tarih!.sonSaatler())) { guncelBrutMaas += item.gelirVergisiMatrahi; } } } } // guncelMaas += odenecekUcret; kumulatifMatrah = sonucGelirVergisiMatrahi; return sonucGelirVergisiMatrahi; } /** * */ bool kartKaydedilebilir() { if (giris == null && ((gunTuru == GunTuru.HAFTA_TATILI || gunTuru == GunTuru.DINLENME_GUNU) || resmiTatil || gunlukIzinli || raporlu || yillikIzinli)) { return true; } if ((giris != null && cikis == null) && (gunlukIzinli || raporlu || yillikIzinli)) { return true; } if (giris != null && cikis == null && ((gunTuru == GunTuru.HAFTA_TATILI || gunTuru == GunTuru.DINLENME_GUNU) || resmiTatil)) { return false; } if (giris == null && cikis == null) { return false; } if ((giris != null && cikis != null)) { return true; } return false; } girisYap() { // DateTime sonuc = DateTime.now(); // final program = r''' // class Cat { // Cat(this.name); // final String name; // String speak() => "I'm $name!"; // } // String main() { // final cat = Cat('Fluffy'); // return cat.name; // } // '''; // print(eval(program, function: 'main')); Duration girisToleransi = bugununAyari.girisToleransi ?? Duration.zero; if (girisToleransi == Duration.zero) { giris = DateTime.now(); return; } DateTime? girisSaati = bugununAyari.girisSaati; if (girisSaati == null) { giris = DateTime.now(); return; } if (tarih == null) { giris = DateTime.now(); return; } DateTime maksZaman = tarih!.ayarlaGununSaati(girisSaati.add(girisToleransi).gununSaati()); DateTime minZaman = tarih!.ayarlaGununSaati(girisSaati.subtract(girisToleransi).gununSaati()); if (DateTime.now().miArasinda(minZaman, maksZaman) == true) { giris = tarih?.ayarlaGununSaati(girisSaati.gununSaati()); } else { giris = DateTime.now(); } } normalGirisiYap() { DateTime? girisSaati = bugununAyari.girisSaati; if (girisSaati == null) { giris = DateTime.now(); return; } giris = tarih?.ayarlaGununSaati(girisSaati.gununSaati()); } cikisYap() { Duration cikisToleransi = bugununAyari.cikisToleransi ?? Duration.zero; if (cikisToleransi == Duration.zero) { cikis = DateTime.now(); return; } DateTime? cikisSaati = bugununAyari.cikisSaati; if (cikisSaati == null) { cikis = DateTime.now(); return; } if (tarih == null) { cikis = DateTime.now(); return; } DateTime maksZaman = tarih!.ayarlaGununSaati(cikisSaati.add(cikisToleransi).gununSaati()); DateTime minZaman = tarih!.ayarlaGununSaati(cikisSaati.subtract(cikisToleransi).gununSaati()); if (DateTime.now().miArasinda(minZaman, maksZaman) == true) { cikis = tarih?.ayarlaGununSaati(cikisSaati.gununSaati()); } else { cikis = DateTime.now(); } } normalCikisiYap() { DateTime? cikisSaati = bugununAyari.cikisSaati; if (cikisSaati == null) { cikis = DateTime.now(); return; } cikis = tarih?.ayarlaGununSaati(cikisSaati.gununSaati()); } sil() { tarih = null; } gecerliMolalariAl() { molalar = bugununAyari.molalar?.copy(); molalar?.forEach( (ml) { ml.girisSaati?.ayarlaTarih(tarih!); ml.cikisSaati?.ayarlaTarih(tarih!); }, ); } gecerliMesaiOraniAl() { mesaiOrani = bugununAyari.mesaiOrani; } gunAyarlariniAktar() { // FikoYTMesaiciService FikoYTService.servisMesaici = Get.put(FikoYTMesaiciService()); tarih = tarih ?? DateTime.now(); maas = FikoYTService.servisMesaici.ayarlarModel?.value.maasParametreleri.toListe()[tarih!.month - 1]; aktifVardiya = FikoYTService.servisMesaici.ayarlarModel?.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel?.value.calismaSuresiAyarlari.aktifVardiya ?? 0]; calismaSuresi = bugununAyari.calismaSuresi; ekOdemeler = bugununAyari.ekOdemeler?.copy(); kesintiler = bugununAyari.kesintiler?.copy(); vergiler = bugununAyari.vergiler?.copy(); gunTuru = bugununAyari.turu; gecerliMesaiOraniAl(); gecerliMolalariAl(); } /** * Toplam Çalışma Süresi Hesapla Fazla Mesai İçin Ayrı yapıcam Büyük İhtimal */ @ignore GunAyari get bugununAyari { return aktifVardiya!.gunAyarlari.toListe()[(tarih ?? DateTime.now()).weekday - 1]; } /** * Toplam Çalışma Süresi Hesapla Fazla Mesai İçin Ayrı yapıcam Büyük İhtimal */ @ignore Duration? get calisilanSure { /// Yıllık İzili İse if (yillikIzinli) return calismaSuresi; if (gunlukIzinli) return Duration.zero; if (raporlu) return Duration.zero; /// Giriş Çıkış Seçilmemiş İse ve Dinlenme Veya Hafta Tatili İse if (giris == null && cikis == null && (gunTuru == GunTuru.DINLENME_GUNU || gunTuru == GunTuru.HAFTA_TATILI)) return calismaSuresi; /// if (giris == null && cikis == null && resmiTatil) return calismaSuresi; /// if (gunlukIzinli && raporlu) return Duration.zero; /// if (giris == null && cikis == null && (gunTuru != GunTuru.DINLENME_GUNU || gunTuru != GunTuru.HAFTA_TATILI)) return Duration.zero; /// if (gunTuru == GunTuru.DINLENME_GUNU || gunTuru == GunTuru.HAFTA_TATILI || resmiTatil) return (calismaSuresi ?? Duration.zero) + ((cikis ?? DateTime.now()).difference((giris ?? DateTime.now())) - (yasananMolaSuresi)); return ((cikis ?? DateTime.now()).difference((giris ?? DateTime.now())) - (yasananMolaSuresi)); } /** * Günlük Normal Mesainiz */ @ignore Duration? get normalMesai { return ((calisilanSure ?? Duration.zero) <= (calismaSuresi ?? Duration.zero)) ? calisilanSure : calismaSuresi; } /** * Günlük Fazla Mesainiz */ @ignore Duration? get fazlaMesai { return ((calisilanSure ?? Duration.zero) > (calismaSuresi ?? Duration.zero)) ? (calisilanSure ?? Duration.zero) - (calismaSuresi ?? Duration.zero) : Duration.zero; } @ignore Duration get yasananMolaSuresi { if (tarih == null) return Duration.zero; if (giris == null) return Duration.zero; if (giris != null && cikis != null) return molalar?.toplamMola ?? Duration.zero; int sonuc = 0; molalar?.forEach((element) { sonuc += element.yasananMola().inMicroseconds; }); return Duration(microseconds: sonuc); } /** * Background Kümülatif Matrah */ static void IsolateFonkKumulatifMatrah(dynamic Params) async { if (Params[0] == null || Params[1] == null || Params[2] == null || Params[3] == null) { Isolate.current.kill(priority: Isolate.immediate); } /** Parametreler */ RootIsolateToken rootToken = Params[0]; SendPort sendPort = Params[1]; DateTime ilkTarih = Params[2]; DateTime sonTarih = Params[3]; /** */ BackgroundIsolateBinaryMessenger.ensureInitialized(rootToken); Future getCustomDirectoryAndroid(String subDirectoryName) async { // Uygulamanın belgeler dizinini al final directory = await getApplicationDocumentsDirectory(); // Alt klasörün yolunu oluştur final customDirectory = Directory('${directory.path}${Platform.pathSeparator}$subDirectoryName'); // Eğer alt klasör mevcut değilse oluştur if (!await customDirectory.exists()) { await customDirectory.create(recursive: true); } return customDirectory; } Future getCustomDirectoryWindows(String subDirectoryName) async { String executablePath; int lastSeparatorIndex; String executableDir; executablePath = Platform.resolvedExecutable; lastSeparatorIndex = executablePath.lastIndexOf(Platform.pathSeparator); executableDir = executablePath.substring(0, lastSeparatorIndex); // Uygulamanın belgeler dizinini al final directory = executableDir; // Alt klasörün yolunu oluştur final customDirectory = Directory('$directory${Platform.pathSeparator}$subDirectoryName'); // Eğer alt klasör mevcut değilse oluştur if (!await customDirectory.exists()) { await customDirectory.create(recursive: true); } return customDirectory; } /** */ String executableDir; if (Platform.isWindows) { executableDir = (await getCustomDirectoryWindows("databases")).path; } else if (Platform.isAndroid) { executableDir = (await getCustomDirectoryAndroid("databases")).path; } else { executableDir = (await getCustomDirectoryAndroid("databases")).path; } Isar isar = Isar.getInstance("FikoYT.db") ?? await Isar.open([CalismaKayitSchema, ModelAyarlarSchema, ModelHareketlerSchema], directory: executableDir, name: "FikoYT.db", inspector: false); /** */ List liste = isar.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(ilkTarih, sonTarih)).calismaKartiProperty().findAllSync(); /** */ double sonuc = 0; for (var i = 0; i < liste.length; i++) { CalismaKayitEmbedded? item = liste[i]; if (item != null) { // await item.hesaplamalar.hesapla(); sonuc += item.gelirVergisiMatrahi; } } // İşlem bitince sonucu geri gönderiyoruz sendPort.send(sonuc); /** */ /** */ Isolate.current.kill(priority: Isolate.immediate); } Future kumulatifMatrahHesapla() async { // FikoYTMesaiciService FikoYTService.servisMesaici = Get.put(FikoYTMesaiciService()); // List liste = FikoYTService.servisMesaici.isar?.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(FikoYTService.servisMesaici.aktifAy.value.yilinIlkGunu(), tarih?.sonSaatler())).calismaKartiProperty().findAllSync(); // double sonuc = 0; // for (var i = 0; i < liste.length; i++) { // CalismaKayitEmbedded? item = liste[i]; // if (item != null) { // await item.hesaplamalar.hesapla(); // sonuc += item.hesaplamalar.glrVrgsMtrh$; // } // } // return sonuc; /** */ // Isolate'lar arasında veri gönderip almak için bir ReceivePort oluşturuyoruz final receivePort = ReceivePort(); // RootIsolateToken'ı elde edin var rootToken = RootIsolateToken.instance!; // BackgroundIsolateBinaryMessenger'ı başlatın // Yeni bir Isolate başlatıyoruz ve ona longRunningTask fonksiyonunu çalıştırmasını söylüyoruz await Isolate.spawn(IsolateFonkKumulatifMatrah, [rootToken, receivePort.sendPort, tarih?.yilinIlkGunu(), tarih?.sonSaatler()]); kumulatifMatrah = await receivePort.first; // ReceivePort ile sonucu bekliyoruz return kumulatifMatrah; } /// A necessary factory constructor for creating a new User instance /// from a map. Pass the map to the generated `_$UserFromJson()` constructor. /// The constructor is named after the source class, in this case, User. factory CalismaKayitEmbedded.fromJson(Map json) => _$CalismaKayitEmbeddedFromJson(json); /// `toJson` is the convention for a class to declare support for serialization /// to JSON. The implementation simply calls the private, generated /// helper method `_$UserToJson`. Map toJson() => _$CalismaKayitEmbeddedToJson(this); } // class CalismaKayitEmbeddedHesaplamalar { // CalismaKayitEmbeddedHesaplamalar({ // required this.aktifCalisma, // }); // CalismaKayitEmbedded 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); // Kümülatif matrah ve bu ayki gelir toplamı // double oncekiVergi = 0.0; // for (var dilim in aktifCalisma.vergiler ?? []) { // if (dilim.turu == VergiTuru.KUMULATIF) { // // Toplam gelirden o dilime kadar olan vergilendirilebilir kısmı hesapla // if (toplamGelir > (dilim.kumulatifAltSinir ?? 0.0)) { // double vergilendirilebilirTutar = toplamGelir > (dilim.kumulatifUstSinir ?? 0.0) ? (dilim.kumulatifUstSinir ?? 0.0) - (dilim.kumulatifAltSinir ?? 0.0) : toplamGelir - (dilim.kumulatifAltSinir ?? 0.0); // toplamVergi += (dilim.miktar ?? 0.0) + vergilendirilebilirTutar * ((dilim.oran ?? 0.0) / 100); // } // // Önceki matraha göre fazla ödeme varsa, bu kısmın vergisini çıkar // if ((kumulatifMatrah ?? 0.0) > (dilim.kumulatifAltSinir ?? 0.0)) { // double vergilendirilebilirTutar = (kumulatifMatrah ?? 0.0) > (dilim.kumulatifUstSinir ?? 0.0) ? (dilim.kumulatifUstSinir ?? 0.0) - (dilim.kumulatifAltSinir ?? 0.0) : (kumulatifMatrah ?? 0.0) - (dilim.kumulatifAltSinir ?? 0.0); // oncekiVergi += (dilim.miktar ?? 0.0) + vergilendirilebilirTutar * ((dilim.oran ?? 0.0) / 100); // } // } // } // kumulatifVergi = toplamVergi - oncekiVergi; // Önceki vergileri çıkararak net vergi buluyoruz // return kumulatifVergi; // } // }