// ignore_for_file: use_build_context_synchronously import 'dart:async'; 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'; import 'package:fikoyt_mesaici/apps/mesaici/model/calisma_kayit/calisma_kayit.dart'; import 'package:fikoyt_mesaici/apps/mesaici/model/model_hareketler.dart'; import 'package:fikoyt_mesaici/apps/mesaici/servisler/fikoyt.mesaici.service.dart'; import 'package:fikoyt_mesaici/core/Extensions/fiko_tarih.dart'; import 'package:fikoyt_mesaici/core/fikoyt.service.dart'; import 'package:fikoyt_mesaici/core/interface/fiko_dialog_ayarlari.dart'; import 'package:fikoyt_ui/ui/ui.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:isar/isar.dart'; import 'package:path_provider/path_provider.dart'; enum VeriEkleIslemTuru { YOK, EKLENIYOR, SILINIYOR, EKLEME_ISTEGI, SILME_ISTEGI; } class VeriEkleyicisiLogic extends GetxController { // late BasePageMesaiciLogic basePageMesaiciLogic; late FikoYTMesaiciService servisMesaici; final FikoYTService servisFikoYT = FikoYTService(); /** */ RxBool calisilmisOlarakEkle = true.obs; Rx baslangicTarihi = Rx(null); Rx bitisTarihi = Rx(null); Rx ilerleme = Rx(null); RxString ilerlemeAciklama = "Hazırlık Yapılıyor".obs; Rx ilerlemeSayac = Rx(null); Rx islemTuru = VeriEkleIslemTuru.YOK.obs; late StreamSubscription takipAktifAy; baslangicSec(BuildContext context) async { baslangicTarihi.value = baslangicTarihi.value != null ? await baslangicTarihi.value!.tarihSec(context, varsayilanTarihSaat: baslangicTarihi.value ?? DateTime.now(), ayarlar: FikoDialogAyarlari(altButonlar: [])) : await DateTime.now().tarihSec(context); if (baslangicTarihi.value != null) { baslangicTarihi.value = baslangicTarihi.value!.ayarlaGununSaati(const TimeOfDay(hour: 0, minute: 0)); } baslangicTarihi.refresh(); } bitisSec(BuildContext context) async { bitisTarihi.value = bitisTarihi.value != null ? await bitisTarihi.value!.tarihSec(context, varsayilanTarihSaat: bitisTarihi.value ?? DateTime.now()) : await DateTime.now().tarihSec(context); if (bitisTarihi.value != null) { bitisTarihi.value = bitisTarihi.value!.ayarlaGununSaati(const TimeOfDay(hour: 23, minute: 59)); } bitisTarihi.refresh(); } static void IsolateFonkVerileriEkle(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]; bool calisilmisOlarakEkle = Params[4]; /** */ 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 = await isar.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(ilkTarih, sonTarih)).calismaKartiProperty().findAll(); /** */ DateTime ilkGun = ilkTarih; DateTime sonGun = sonTarih; int gunSayisi = sonGun.difference(ilkGun).inDays; // İşlem bitince sonucu geri gönderiyoruz sendPort.send({ "komut": "guncelle", "aciklama": "İşlem Başlatılıyor.${gunSayisi + 1} Adet Kayıt Eklenecek.", "ilerleme": 0.0, }); await Future.delayed(const Duration(seconds: 1)); /** */ ModelAyarlar? ayarlar = isar.modelAyarlars.where().idEqualTo(0).findFirstSync(); Vardiya? aktifVardiya = ayarlar?.calismaSuresiAyarlari.vardiyalar[ayarlar.calismaSuresiAyarlari.aktifVardiya ?? 0]; void gunAyarlariniAktar(CalismaKayitEmbedded hrkt) { hrkt.tarih = hrkt.tarih ?? DateTime.now(); hrkt.maas = ayarlar?.maasParametreleri.toListe()[hrkt.tarih!.month - 1]; hrkt.aktifVardiya = aktifVardiya; GunAyari bugununAyari = aktifVardiya!.gunAyarlari.toListe()[(hrkt.tarih ?? DateTime.now()).weekday - 1]; hrkt.calismaSuresi = bugununAyari.calismaSuresi; hrkt.ekOdemeler = bugununAyari.ekOdemeler?.copy(); hrkt.kesintiler = bugununAyari.kesintiler?.copy(); hrkt.vergiler = bugununAyari.vergiler?.copy(); hrkt.gunTuru = bugununAyari.turu; hrkt.mesaiOrani = bugununAyari.mesaiOrani; //gecerliMesaiOraniAl(); // gecerliMolalariAl(); hrkt.molalar = bugununAyari.molalar?.copy(); hrkt.molalar?.forEach( (ml) { ml.girisSaati?.ayarlaTarih(hrkt.tarih!); ml.cikisSaati?.ayarlaTarih(hrkt.tarih!); }, ); } /** */ // double guncelBrutMaas = 0; // double kumulatifMatrahGuncelleSync(DateTime? tarih) { // /** */ // List liste = isar.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(tarih?.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.gelirVergisiMatrahi; // if (tarih!.ayinIlkGunu().ilkSaatler().isBefore(item.tarih!)) { // if (item.tarih!.isBefore(tarih!.sonSaatler())) { // guncelBrutMaas += item.gelirVergisiMatrahi; // } // } // } // } // return sonuc; // } /** */ DateTime trh = ilkGun; List hrktlr = []; await isar.writeTxn( () async { for (var i = 0; i < gunSayisi + 1; i++) { // await Future.delayed(const Duration(milliseconds: 100)); trh = ilkGun.add(Duration(days: i)); ModelHareketler hrkt = ModelHareketler(); hrkt.tarih = trh; CalismaKayitEmbedded kyt = CalismaKayitEmbedded(); kyt.tarih = trh; // kyt.gunAyarlariniAktar(); gunAyarlariniAktar(kyt); hrkt.calismaKarti = kyt; // hrkt.calismaKarti?.kumulatifMatrah = kumulatifMatrahGuncelleSync(hrkt.tarih) ?? 0.0; if (calisilmisOlarakEkle) { if (hrkt.calismaKarti?.gunTuru == GunTuru.CALISMA_GUNU) { GunAyari bugununAyari = aktifVardiya!.gunAyarlari.toListe()[(hrkt.tarih ?? DateTime.now()).weekday - 1]; hrkt.calismaKarti?.giris = hrkt.calismaKarti?.tarih?.ayarlaGununSaati((bugununAyari.girisSaati ?? DateTime.now()).gununSaati()); hrkt.calismaKarti?.cikis = hrkt.calismaKarti?.tarih?.ayarlaGununSaati((bugununAyari.cikisSaati ?? DateTime.now()).gununSaati()); } } // hrkt.calismaKarti?.guncelBrutMaas = guncelBrutMaas; await isar.modelHareketlers.put(hrkt); /** */ ModelHareketler altHrkt = ModelHareketler()..turu = KartTuru.ALT_KART; altHrkt.tarih = DateTime.now(); AltKart altKart = AltKart(); altKart.aciklama = "Veri Ekleyicisi İle ${DateTime.now().formatla('dd.MM.yyyy HH:mm:ss')} Zamanında Kaydedildi"; altHrkt.altKart = altKart; altKart.ustKartid = hrkt.id; hrkt.altKartlar.clear(); hrkt.altKartlar.add(altHrkt); // await isar.writeTxn(() async { await isar.modelHareketlers.put(altHrkt); altHrkt.ustKart.value = hrkt; altHrkt.ustKart.save(); // }); /** */ await hrkt.altKartlar.save(); sendPort.send({ "komut": "guncelle", "aciklama": "Veriler Ekleniyor.", "sayac": "(${i + 1} / ${gunSayisi + 1})", "ilerleme": i / gunSayisi, }); await Future.delayed( const Duration( milliseconds: 50, ), ); } }, ); sendPort.send({ "komut": "guncelle", "aciklama": "İşlem Tamamlanıyor.Bitti Sayılır", "ilerleme": 1.0, }); await Future.delayed( const Duration( milliseconds: 1500, ), ); sendPort.send({ "komut": "Tamamlandı", "aciklama": "İşlem Tamamlandı.${gunSayisi + 1} Adet Kayıt Eklendi", "ilerleme": 1.0, }); /** */ Isolate.current.kill(priority: Isolate.immediate); } Future verileriEkle(BuildContext context) async { final receivePort = ReceivePort(); var rootToken = RootIsolateToken.instance!; islemTuru.value = VeriEkleIslemTuru.EKLENIYOR; ilerlemeAciklama.value = "Hazırlık Yapılıyor"; ilerlemeSayac.value = null; ilerleme.value = null; islemTuru.refresh(); ilerlemeAciklama.refresh(); ilerlemeSayac.refresh(); ilerleme.refresh(); // print({"komut": "", "veri": null, "ilerleme": 0.0}.runtimeType); await Isolate.spawn(IsolateFonkVerileriEkle, [rootToken, receivePort.sendPort, baslangicTarihi.value, bitisTarihi.value, calisilmisOlarakEkle.value]); StreamSubscription? listen; listen = receivePort.listen( (message) async { if (message["komut"] == "guncelle") { ilerlemeAciklama.value = message["aciklama"]; ilerleme.value = message["ilerleme"]; ilerlemeSayac.value = message["sayac"]; ilerlemeAciklama.refresh(); ilerleme.refresh(); ilerlemeSayac.refresh(); } if (message["komut"] == "Tamamlandı") { ilerlemeAciklama.value = message["aciklama"]; ilerleme.value = message["ilerleme"]; ilerlemeSayac.value = message["sayac"]; ilerlemeAciklama.refresh(); ilerleme.refresh(); ilerlemeSayac.refresh(); listen?.cancel(); await Future.delayed(const Duration(milliseconds: 1500)); islemTuru.value = VeriEkleIslemTuru.YOK; servisMesaici.aktifAy.refresh(); } // listen?.cancel(); }, ); } static void IsolateFonkVerileriSil(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]; bool calisilmisOlarakEkle = Params[4]; /** */ 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 = await isar.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(ilkTarih, sonTarih)).calismaKartiProperty().findAll(); /** */ int kayitSayisi = await isar.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(ilkTarih.ilkSaatler(), sonTarih.sonSaatler())).count(); if (kayitSayisi <= 0) { sendPort.send({ "komut": "guncelle", "aciklama": "Silinecek Kayıt Bulunamadı. İşlem İptal Ediliyor", "ilerleme": null, }); await Future.delayed( const Duration( milliseconds: 1500, ), ); sendPort.send({ "komut": "Tamamlandı", "aciklama": "İşlem İptal Edildi.Hiç Bir Kayıt Silinmedi.", "ilerleme": null, }); /** */ Isolate.current.kill(priority: Isolate.immediate); return; } /** */ // İşlem bitince sonucu geri gönderiyoruz sendPort.send({ "komut": "guncelle", "aciklama": "$kayitSayisi Adet Kayıt Silinecek.İşlem Başlatılıyor.", "ilerleme": null, }); await Future.delayed(const Duration(seconds: 1)); /** */ List kayitlar = await isar.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(ilkTarih.ilkSaatler(), sonTarih.sonSaatler())).findAll(); for (var i = 0; i < kayitSayisi; i++) { ModelHareketler mevcutKayit = kayitlar[i]; for (var k = 0; k < mevcutKayit.altKartlar.length; k++) { ModelHareketler mevcutAltKart = mevcutKayit.altKartlar.elementAt(k); await isar.writeTxn( () async { await isar.modelHareketlers.delete(mevcutAltKart.id); }, ); } await isar.writeTxn( () async { await isar.modelHareketlers.delete(mevcutKayit.id); }, ); // await isar.modelHareketlers.where().filter().calismaKarti((q) => q.tarihBetween(ilkTarih.ilkSaatler(), sonTarih.sonSaatler())).altKartProperty().deleteAll(); // await isar.modelHareketlers.where().filter().calismaKarti((q) => q.tarihBetween(ilkTarih.ilkSaatler(), sonTarih.sonSaatler())).deleteAll(); sendPort.send({ "komut": "guncelle", "aciklama": "Veriler Siliniyor.", "sayac": "(${i + 1} / ${kayitSayisi + 1})", "ilerleme": i / kayitSayisi, }); await Future.delayed( const Duration( milliseconds: 50, ), ); } /** */ sendPort.send({ "komut": "guncelle", "aciklama": "İşlem Tamamlanıyor.Bitti Sayılır", "ilerleme": 1.0, }); await Future.delayed( const Duration( milliseconds: 1500, ), ); sendPort.send({ "komut": "Tamamlandı", "aciklama": "İşlem Tamamlandı.$kayitSayisi Adet Kayıt Silindi", "ilerleme": 1.0, }); /** */ Isolate.current.kill(priority: Isolate.immediate); } Future verileriSil(BuildContext context) async { final receivePort = ReceivePort(); var rootToken = RootIsolateToken.instance!; islemTuru.value = VeriEkleIslemTuru.SILINIYOR; ilerlemeAciklama.value = "Hazırlık Yapılıyor"; ilerlemeSayac.value = null; ilerleme.value = null; islemTuru.refresh(); ilerlemeAciklama.refresh(); ilerleme.refresh(); // print({"komut": "", "veri": null, "ilerleme": 0.0}.runtimeType); await Isolate.spawn(IsolateFonkVerileriSil, [rootToken, receivePort.sendPort, baslangicTarihi.value, bitisTarihi.value, calisilmisOlarakEkle.value]); StreamSubscription? listen; listen = receivePort.listen( (message) async { if (message["komut"] == "guncelle") { ilerlemeAciklama.value = message["aciklama"]; ilerleme.value = message["ilerleme"]; ilerlemeSayac.value = message["sayac"]; ilerlemeAciklama.refresh(); ilerleme.refresh(); ilerlemeSayac.refresh(); } if (message["komut"] == "Tamamlandı") { ilerlemeAciklama.value = message["aciklama"]; ilerleme.value = message["ilerleme"]; ilerlemeSayac.value = message["sayac"]; ilerlemeAciklama.refresh(); ilerleme.refresh(); ilerlemeSayac.refresh(); listen?.cancel(); await Future.delayed(const Duration(milliseconds: 1500)); islemTuru.value = VeriEkleIslemTuru.YOK; servisMesaici.aktifAy.refresh(); } // listen?.cancel(); }, ); } verileriSil1(BuildContext context) async { FikoYTService.dialogGoster( context, const Text("Seçtiğiniz Tarihler Arasındaki Tüm Çalışma Kartları Silinecektir.Bu İşlem Geri Alınamaz. Onaylıyormunuz?"), FikoDialogAyarlari(baslik: "Onay", baslikSimge: "❔", altButonlar: [ FikoYTButton( text: "✔️ Onaylıyorum", tema: Theme.of(context).extension()?.copyWith( textColor: Colors.green, textStrokeColor: Colors.transparent, ), onPressed: () async { await servisMesaici.isar?.writeTxn( () async { await servisMesaici.isar?.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(baslangicTarihi.value, bitisTarihi.value)).sortByTarihDesc().deleteAll(); servisMesaici.aktifAy.refresh(); }, ); servisMesaici.aktifAy.refresh(); Navigator.pop( context, ); }, ), const Spacer(), FikoYTButton( text: "❌ Onaylamıyorum", tema: Theme.of(context).extension()?.copyWith( textColor: Colors.red, textStrokeColor: Colors.transparent, ), onPressed: (() { servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }), ), ]), ); } @override void onInit() { // basePageMesaiciLogic = Get.put(BasePageMesaiciLogic()); servisMesaici = Get.put(FikoYTMesaiciService()); baslangicTarihi.value = servisMesaici.aktifAy.value.ayinIlkGunu(); bitisTarihi.value = servisMesaici.aktifAy.value.ayinSonGunu(); takipAktifAy = servisMesaici.aktifAy.listen( (data) { baslangicTarihi.value = servisMesaici.aktifAy.value.ayinIlkGunu(); bitisTarihi.value = servisMesaici.aktifAy.value.ayinSonGunu(); baslangicTarihi.refresh(); bitisTarihi.refresh(); }, ); super.onInit(); } @override void dispose() { takipAktifAy.cancel(); // TODO: implement dispose super.dispose(); } } class VeriEkleyicisi extends StatefulWidget { VeriEkleyicisi({super.key}); @override State createState() => _VeriEkleyicisiState(); } class _VeriEkleyicisiState extends State { late VeriEkleyicisiLogic logic; @override void initState() { logic = Get.put(VeriEkleyicisiLogic()); // TODO: implement initState super.initState(); } @override void dispose() { Get.delete(); // TODO: implement dispose super.dispose(); } @override Widget build(BuildContext context) { return Column( children: [ Obx( () => AnimatedSwitcher( layoutBuilder: (currentChild, previousChildren) { return Stack( alignment: Alignment.topCenter, children: [ ...previousChildren, if (currentChild != null) currentChild, ], ); }, // transitionBuilder: (Widget child, Animation animation) { // return FadeTransition( // opacity: animation, // child: SizeTransition( // sizeFactor: animation, // // axisAlignment: 1.0, // child: child, // ), // ); // }, duration: const Duration(seconds: 1), child: logic.islemTuru.value == VeriEkleIslemTuru.EKLENIYOR ? Container( key: UniqueKey(), // height: 200, padding: const EdgeInsets.all(5), width: double.infinity, decoration: BoxDecoration(color: Theme.of(context).extension()?.cardBackgroundColor, borderRadius: BorderRadius.circular(10), border: Border.all(color: Colors.black26, width: 1)), child: Column( children: [ const CupertinoActivityIndicator( color: Colors.blue, radius: 20, ), Obx( () => AnimatedSwitcher( duration: const Duration(seconds: 1), child: logic.ilerlemeSayac.value != null ? FikoYTButton( text: logic.ilerlemeSayac.value ?? "", tema: Theme.of(context).extension()?.copyWith( fontSize: 12, edgePadding: const EdgeInsets.symmetric(vertical: 2.0), // textColor: Colors.black87, // textStrokeColor: Colors.transparent, radius: 0, ), // duration: const Duration(milliseconds: 100), // backColor: Colors.yellow.shade200, ) : null, ), ), Obx( () => AnimatedFikoYTButton1( text: logic.ilerlemeAciklama.value, tema: Theme.of(context).extension()?.copyWith( fontSize: 12, edgePadding: const EdgeInsets.symmetric(vertical: 2.0), // textColor: Colors.black87, // textStrokeColor: Colors.transparent, radius: 0, ), // backColor: Colors.yellow.shade200, ), ), Obx( () => LinearProgressIndicator( value: logic.ilerleme.value, semanticsLabel: 'Linear progress indicator', ), ), ], ), ) : logic.islemTuru.value == VeriEkleIslemTuru.YOK ? /** */ Container( key: UniqueKey(), // height: 200, width: double.infinity, decoration: BoxDecoration(color: Theme.of(context).extension()?.cardBackgroundColor, borderRadius: BorderRadius.circular(10), border: Border.all(color: Colors.black26, width: 1)), child: Column( children: [ Row( children: [ Expanded( child: Column( children: [ Text( "Başlangıç Tarihi", style: TextStyle(color: Colors.blue.shade500, fontWeight: FontWeight.bold), ), ], ), ), Expanded( child: Column( children: [ Text( "Bitiş Tarihi", style: TextStyle(color: Colors.blue.shade500, fontWeight: FontWeight.bold), ), ], ), ), ], ), const Divider(), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( child: Obx( () => FikoYTButton( text: "${logic.baslangicTarihi.value != null ? logic.baslangicTarihi.value?.formatla('dd.MM.yyyy') : 'Seçiniz'}", tema: Theme.of(context).extension()?.copyWith( fontSize: 12, edgePadding: const EdgeInsets.symmetric(vertical: 2.0), textColor: Theme.of(context).extension()?.textColor, textStrokeColor: Colors.transparent, radius: 0, backgroundColor: Theme.of(context).extension()?.cardBackgroundColor, ), onPressed: () => logic.baslangicSec(context), ), ), ), Expanded( child: Obx( () => FikoYTButton( text: "${logic.bitisTarihi.value != null ? logic.bitisTarihi.value?.formatla('dd.MM.yyyy') : 'Seçiniz'}", tema: Theme.of(context).extension()?.copyWith( fontSize: 12, edgePadding: const EdgeInsets.symmetric(vertical: 2.0), textColor: Theme.of(context).extension()?.textColor, textStrokeColor: Colors.transparent, radius: 0, backgroundColor: Theme.of(context).extension()?.cardBackgroundColor, ), onPressed: () => logic.bitisSec(context), ), ), ), ], ), const Divider(), Row( children: [ Text( "👷🏼 Çalışma Günlerini Çalışılmış Olarak Kaydet", style: TextStyle(color: Theme.of(context).extension()?.textColor), ), const Spacer(), SizedBox( height: 25, child: FittedBox( fit: BoxFit.fill, child: Obx( () => Switch( value: logic.calisilmisOlarakEkle.value, onChanged: (value) { logic.calisilmisOlarakEkle.value = value; logic.calisilmisOlarakEkle.refresh(); }, ), ), ), ), ], ), const Divider(), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), child: Row( children: [ FikoYTButton( text: "Verileri Sil", tema: Theme.of(context).extension()?.copyWith( backgroundColor: Colors.red, textColor: Colors.white, textStrokeColor: Colors.transparent, fontSize: 10, edgePadding: const EdgeInsets.symmetric(vertical: 0, horizontal: 10), ), onPressed: () { logic.islemTuru.value = VeriEkleIslemTuru.SILME_ISTEGI; logic.islemTuru.refresh(); }, ), const Spacer(), FikoYTButton( text: "Verileri Ekle", tema: Theme.of(context).extension()?.copyWith( backgroundColor: Colors.blue, textColor: Colors.white, textStrokeColor: Colors.transparent, fontSize: 10, edgePadding: const EdgeInsets.symmetric(vertical: 0, horizontal: 10), ), onPressed: () { logic.islemTuru.value = VeriEkleIslemTuru.EKLEME_ISTEGI; logic.islemTuru.refresh(); }, ), ], ), ), ], ), ) : logic.islemTuru.value == VeriEkleIslemTuru.SILINIYOR ? Container( key: UniqueKey(), // height: 200, padding: const EdgeInsets.all(5), width: double.infinity, decoration: BoxDecoration(color: Theme.of(context).extension()?.cardBackgroundColor, borderRadius: BorderRadius.circular(10), border: Border.all(color: Colors.red.shade700, width: 1)), child: Column( children: [ const CupertinoActivityIndicator( radius: 20, color: Colors.red, ), Obx( () => AnimatedSwitcher( duration: const Duration(seconds: 1), child: logic.ilerlemeSayac.value != null ? FikoYTButton( text: logic.ilerlemeSayac.value ?? "", tema: Theme.of(context).extension()?.copyWith( fontSize: 12, edgePadding: const EdgeInsets.symmetric(vertical: 2.0), textColor: Colors.red, textStrokeColor: Colors.transparent, radius: 0, ), // duration: const Duration(milliseconds: 100), // backColor: Colors.yellow.shade200, ) : null, ), ), Obx( () => AnimatedFikoYTButton1( text: logic.ilerlemeAciklama.value, tema: Theme.of(context).extension()?.copyWith( fontSize: 12, edgePadding: const EdgeInsets.symmetric(vertical: 2.0), textColor: Colors.red.shade700, textStrokeColor: Colors.transparent, radius: 0, ), // backColor: Colors.yellow.shade200, ), ), Obx( () => LinearProgressIndicator( value: logic.ilerleme.value, backgroundColor: Colors.red.shade100, valueColor: const AlwaysStoppedAnimation(Colors.red), ), ), ], ), ) : logic.islemTuru.value == VeriEkleIslemTuru.SILME_ISTEGI ? Container( key: UniqueKey(), // height: 200, padding: const EdgeInsets.all(5), width: double.infinity, decoration: BoxDecoration(color: Theme.of(context).extension()?.cardBackgroundColor, borderRadius: BorderRadius.circular(10), border: Border.all(color: Colors.red.shade700, width: 1)), child: Column( children: [ const Icon( Icons.delete_sweep_outlined, size: 36, color: Colors.red, ), FikoYTButton( text: "${logic.baslangicTarihi.value?.formatla('dd.MM.yyyy')} ile ${logic.bitisTarihi.value?.formatla('dd.MM.yyyy')} Tarihleri Arasındaki Tüm Kayıtlar, Alt Kartları Dahil Acımasızca Silinecek.Bu İşlem Geri Alınamaz. Onaylıyormusunuz?", tema: Theme.of(context).extension()?.copyWith( fontSize: 12, edgePadding: const EdgeInsets.symmetric(vertical: 2.0), textColor: Colors.red.shade700, textStrokeColor: Colors.transparent, radius: 0, ), // backColor: Colors.yellow.shade200, ), Row( children: [ FikoYTButton( text: "İptal", tema: Theme.of(context).extension()?.copyWith( backgroundColor: Colors.blue, textColor: Colors.white, textStrokeColor: Colors.transparent, fontSize: 10, edgePadding: const EdgeInsets.symmetric(vertical: 0, horizontal: 10), ), onPressed: () { logic.islemTuru.value = VeriEkleIslemTuru.YOK; logic.islemTuru.refresh(); }, ), const Spacer(), FikoYTButton( text: "Onaylıyorum", tema: Theme.of(context).extension()?.copyWith( backgroundColor: Colors.red, textColor: Colors.white, textStrokeColor: Colors.transparent, fontSize: 10, edgePadding: const EdgeInsets.symmetric(vertical: 0, horizontal: 10), ), onPressed: () => logic.verileriSil(context), ), ], ), ], ), ) : logic.islemTuru.value == VeriEkleIslemTuru.EKLEME_ISTEGI ? Container( key: UniqueKey(), // height: 200, padding: const EdgeInsets.all(5), width: double.infinity, decoration: BoxDecoration(color: Theme.of(context).extension()?.cardBackgroundColor, borderRadius: BorderRadius.circular(10), border: Border.all(color: Colors.red.shade700, width: 1)), child: Column( children: [ const Icon( Icons.receipt_rounded, size: 36, color: Colors.blue, ), FikoYTButton( text: "${logic.baslangicTarihi.value?.formatla('dd.MM.yyyy')} ile ${logic.bitisTarihi.value?.formatla('dd.MM.yyyy')} Tarihleri Arasına ${logic.bitisTarihi.value!.difference(logic.baslangicTarihi.value!).inDays + 1} Adet Kayıt Eklenecek.Bu İşlem Biraz Sürebilir ve Geri Alınamaz. Onaylıyormusunuz?", tema: Theme.of(context).extension()?.copyWith( fontSize: 12, edgePadding: const EdgeInsets.symmetric(vertical: 2.0), textColor: Theme.of(context).extension()?.textColor, textStrokeColor: Colors.transparent, radius: 0, ), // backColor: Colors.yellow.shade200, ), Row( children: [ FikoYTButton( text: "Onaylıyorum", tema: Theme.of(context).extension()?.copyWith( backgroundColor: Colors.blue, textColor: Colors.white, textStrokeColor: Colors.transparent, fontSize: 10, edgePadding: const EdgeInsets.symmetric(vertical: 0, horizontal: 10), ), onPressed: () => logic.verileriEkle(context), ), const Spacer(), FikoYTButton( text: "İptal", tema: Theme.of(context).extension()?.copyWith( backgroundColor: Colors.red, textColor: Colors.white, textStrokeColor: Colors.transparent, fontSize: 10, edgePadding: const EdgeInsets.symmetric(vertical: 0, horizontal: 10), ), onPressed: () { logic.islemTuru.value = VeriEkleIslemTuru.YOK; logic.islemTuru.refresh(); }, ), ], ), ], ), ) : null, ), ), ], ); } }