// ignore_for_file: must_be_immutable, library_private_types_in_public_api, equal_keys_in_map, unnecessary_new, avoid_init_to_null, prefer_typing_uninitialized_variables, unnecessary_string_interpolations, use_build_context_synchronously, avoid_print, avoid_function_literals_in_foreach_calls import 'dart:io'; import 'package:auto_size_text_field/auto_size_text_field.dart'; import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:excel/excel.dart'; import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/services.dart'; import 'package:flutter_email_sender/flutter_email_sender.dart'; import 'package:intl/intl.dart'; import 'package:path_provider/path_provider.dart'; import 'package:taxpayer/side_bar/ana_sayfa.dart'; class Listeler extends StatefulWidget { final List voucherLists; final String userId; const Listeler({super.key, required this.voucherLists, required this.userId}); @override _ListelerState createState() => _ListelerState(); } class _ListelerState extends State { String? userId; @override void initState() { userId = widget.userId; super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Colors.red, title: const Text('Liste Dönemleri'), leading: IconButton( icon: const Icon(Icons.arrow_back_ios_new_rounded), onPressed: () { Navigator.of(context).push(MaterialPageRoute( builder: (context) => const AnaSayfa())); }, ), ), body: userId == null ? const Center(child: CircularProgressIndicator()) : ListView.builder( itemCount: widget.voucherLists.length, itemBuilder: (context, index) { return InkWell( onTap: () { // Navigator.push(context, MaterialPageRoute(builder: (context) => FaturaDetaylari(listName: widget.voucherLists[index], userId: userId!,),),); Navigator.push(context, MaterialPageRoute(builder: (context) => ListeDetayi(voucherLists: widget.voucherLists, listName: widget.voucherLists[index], userId: userId!,),),); }, child: ListTile( title: Text(widget.voucherLists[index]), ), ); }, ), ); } } class ListeDetayi extends StatelessWidget { final List voucherLists; final String listName; final String userId; const ListeDetayi({super.key, required this.listName, required this.userId, required this.voucherLists}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Colors.red, title: const Text('Liste Detayı', style: TextStyle(color: Colors.white),), ), body: StreamBuilder( stream: FirebaseFirestore.instance .collection('Users') .doc(userId) .collection('Lists') .doc(listName) .snapshots(), builder: (context, snapshot) { if (!snapshot.hasData) { print("object"); return const Center( child: CircularProgressIndicator( color: Colors.red, backgroundColor: Colors.red, ), ); } else { Map? listData = snapshot.data!.data(); List vouchers = listData!['girdiler'] ?? []; if (vouchers.isEmpty) { return const Center( child: Text("Gösterilecek veri yok"), ); } else { double toplamGelir = 0; double toplamGider = 0; for (int i = 0; i < vouchers.length; i++) { String stringValue = vouchers[i]['kdvDahil']; String cleanedString = cleanCurrencyString(stringValue); double cleanKdvDahilValue = double.parse(cleanedString); var girdiTuru = vouchers[i]['girdiTuru']; print(cleanKdvDahilValue); if (girdiTuru == 'gelir') { toplamGelir += cleanKdvDahilValue/10; } else if (girdiTuru == 'gider') { toplamGider += cleanKdvDahilValue/10; } } double netGelir = toplamGelir - toplamGider; String toplamGelirS = NumberFormat("#,##0.00", "tr_TR").format(toplamGelir); String toplamGiderS = NumberFormat("#,##0.00", "tr_TR").format(toplamGider); String netGelirS = NumberFormat("#,##0.00", "tr_TR").format(netGelir); return ListView.builder( itemCount: vouchers.isNotEmpty ? 1 :vouchers.length, itemBuilder: (context, index) { if (vouchers.isEmpty) { return const Center( child: Text("Gösterilecek veri yok"), ); }else{ return Column( children: [ Text('${vouchers[index]['defterKayitTarihi']}',style: const TextStyle(fontSize: 35,fontWeight: FontWeight.bold),), // const SizedBox(height: 20,), SizedBox( height: 260, child: _buildChart(toplamGelir,toplamGider), ), const SizedBox( height: 5.0, ), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ _buildLegend(const Color.fromARGB(255, 67, 112, 45), "Gelir"), _buildLegend(const Color.fromARGB(255, 139, 46, 53), "Gider"), ], ), const SizedBox( height: 20.0, ), Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: const BoxDecoration( color: Color.fromARGB(255, 187, 210, 255), borderRadius: BorderRadius.all( Radius.circular(10), ), ), child: Text('Toplam Gelir: $toplamGelirS ₺'), ), ), ], ), ), const SizedBox(height: 20,), Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: const BoxDecoration( color: Color.fromARGB(255, 187, 210, 255), borderRadius: BorderRadius.all( Radius.circular(10)), ), child: Text('Toplam Gider: $toplamGiderS ₺'), ), ), ], ), ), const SizedBox(height: 20,), Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: const BoxDecoration( color: Color.fromARGB(255, 187, 210, 255), borderRadius: BorderRadius.all( Radius.circular(10)), ), child: Text('Net Gelir: $netGelirS ₺'), ), ), ], ), ), const SizedBox(height: 20,), // const Text('Durum',style: TextStyle(fontSize: 25,fontWeight: FontWeight.bold),), // const SizedBox(height: 20,), // Theme( // data: Theme.of(context).copyWith( // canvasColor: const Color(0xFFE7EFFF), // ), // child: Column( // children: [ // // Align( // alignment: Alignment.centerLeft, // child: Container( // alignment: Alignment.center, // margin: const EdgeInsets.symmetric(horizontal: 10), // height: 60, // decoration: const BoxDecoration( // color: Color(0xFFE7EFFF), // borderRadius: BorderRadius.all( // Radius.circular(10)), // ), // child: Text('Net Gelir: ${vouchers[index]['aciklama']}'), // ), // ), // ], // ), // ), const SizedBox(height: 20,), SizedBox( width: MediaQuery.of(context).size.width - 20, height: 60, // ignore: deprecated_member_use child: ElevatedButton.icon( style: ButtonStyle( backgroundColor: MaterialStateProperty.all( const Color.fromARGB(255, 11, 169, 14)), shape: MaterialStateProperty.all( const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(15)), ),)), onPressed: () async { // Firestore'dan verileri al final DocumentSnapshot> querySnapshot = await FirebaseFirestore.instance .collection('Users') .doc(userId) .collection('Lists') .doc(listName) // Belirli bir ay için .get(); // Excel formatına dönüştürülecek veri listesi var excel = Excel.createExcel(); var sheet = excel['Sheet1']; // Sütun başlıklarını oluştur List headers = [ const TextCellValue('Belge Tarihi'), const TextCellValue('Belge Türü'), const TextCellValue('Fatura No'), const TextCellValue('Seri No'), const TextCellValue('Sıra No'), const TextCellValue('Fiş No'), const TextCellValue('VKTCNO'), const TextCellValue('Adı'), const TextCellValue('Soyadı'), const TextCellValue('Vergi Dairesi'), const TextCellValue('Alış Türü'), const TextCellValue('Gider Kayıt'), const TextCellValue('Gider Kayıt Alt'), const TextCellValue('KDV'), const TextCellValue('KDV Tevfikat'), const TextCellValue("KDV'siz"), const TextCellValue('Stopajlı Alım'), const TextCellValue('KDV Oranı'), const TextCellValue('KDV Dahil'), const TextCellValue('KDV Haric'), const TextCellValue('İndirilecek KDV'), const TextCellValue('Belge Toplamı'), const TextCellValue('Açıklama'), ]; // Sütun başlıklarını eklemek için appendRow yöntemini kullan sheet.appendRow(headers); // Firestore'dan alınan belgeleri döngüye al List itemList = querySnapshot.data()!['girdiler']; itemList.forEach((data) { // Tarih bilgisini al Timestamp timestamp = data['belgeTarihi']; DateTime dateTime = timestamp.toDate(); // Tarih bilgisini ayrıştır int day = dateTime.day; int month = dateTime.month; int year = dateTime.year; // Tarihi Excel tablosuna eklemek için uygun formatta bir değer oluştur CellValue dateCellValue = TextCellValue('$day/$month/$year'); // Her bir belgenin verilerini Excel tablosuna ekle sheet.appendRow([ dateCellValue, TextCellValue(data['belgeTuru'].toString()), TextCellValue(data['faturaNo'].toString()), TextCellValue(data['seriNo'].toString()), TextCellValue(data['siraNo'].toString()),TextCellValue(data['fisNo'].toString()), TextCellValue(data['VKTCNO'].toString()),TextCellValue(data['adi'].toString()), TextCellValue(data['soyadi'].toString()), TextCellValue(data['vergiDairesi'].toString()), TextCellValue(data['alisTuru'].toString()), TextCellValue(data['giderKayit'].toString()), TextCellValue(data['giderKayitAlt'].toString()), TextCellValue(data['kdv'].toString()), TextCellValue(data['kdvTevfikat'].toString()), TextCellValue(data['kdvSiz'].toString()), TextCellValue(data['stopajliAlim'].toString()), TextCellValue(data['kdvOrani'].toString()), TextCellValue(data['kdvDahil'].toString()), TextCellValue(data['kdvHaric'].toString()), TextCellValue(data['indirilecekKDV'].toString()), TextCellValue(data['belgeToplami'].toString()), TextCellValue(data['aciklama'].toString()), ]); }); // Excel dosyasını bir dosyaya yaz final String dir = (await getApplicationDocumentsDirectory()).path; final String filePath = '$dir/data.xlsx'; final List? excelBytes = excel.encode(); if (excelBytes != null) { File(filePath).writeAsBytesSync(excelBytes); } else { // Hata durumunu işleyin veya uygun bir hata mesajı gösterin } // E-posta gönderme işlemi final Email email = Email( body: 'Excel dosyası ektedir.', subject: 'Firebase Verileri', recipients: ['ayberke@icloud.com'], attachmentPaths: [filePath], // Dosya yolunu içeren bir liste oluşturun isHTML: false, ); try { await FlutterEmailSender.send(email); } catch (error) { print(error.toString()); } }, icon: const Icon( Icons.upload_file_rounded, color: Color.fromRGBO(255, 255, 255, 1), ), label: const Text('Listeyi Yükle', style: TextStyle(color: Color.fromARGB(255, 255, 255, 255)),), ), ), const SizedBox(height: 20,), SizedBox( width: MediaQuery.of(context).size.width - 20, height: 60, // ignore: deprecated_member_use child: ElevatedButton.icon( style: ButtonStyle( backgroundColor: MaterialStateProperty.all( const Color.fromARGB(255, 11, 169, 14)), shape: MaterialStateProperty.all( const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(15)), ),)), onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) => FaturaDetaylari(listName: vouchers[index]["defterKayitTarihi"], userId: userId,),),); }, icon: const Icon( Icons.remove_red_eye_rounded, color: Color.fromRGBO(255, 255, 255, 1), ), label: const Text('Listeyi Görüntüle', style: TextStyle(color: Color.fromARGB(255, 255, 255, 255)),), ), ), const SizedBox(height: 40,), ], );}});}}}), backgroundColor: const Color.fromARGB(255, 239, 239, 239), ); } Widget _buildLegend(Color color, String text) { return Row( children: [ Container( width: 20, height: 20, color: color, margin: const EdgeInsets.only(right: 5), ), Text(text, style: const TextStyle(color: Color.fromARGB(255, 55, 55, 55))), ], ); } Widget _buildChart(double gelirYuzdesi, double giderYuzdesi) { return PieChart( PieChartData( borderData: FlBorderData(show: false), sectionsSpace: 0, centerSpaceRadius: 70, sections: showingSections(gelirYuzdesi, giderYuzdesi), ), ); } List showingSections(double gelirYuzdesi, double giderYuzdesi) { double total = gelirYuzdesi + giderYuzdesi; double gelirOran = (gelirYuzdesi / total) * 100; double giderOran = (giderYuzdesi / total) * 100; String formattedGelirOran = NumberFormat("#,##0.00", "tr_TR").format(gelirOran); String formattedGelirYuzdesi = NumberFormat("#,##0.00", "tr_TR").format(gelirYuzdesi); String formattedGiderOran = NumberFormat("#,##0.00", "tr_TR").format(giderOran); String formattedGiderYuzdesi = NumberFormat("#,##0.00", "tr_TR").format(giderYuzdesi); return [ PieChartSectionData( color: const Color.fromARGB(255, 50, 114, 32), value: gelirOran, title: '% $formattedGelirOran \n $formattedGelirYuzdesi ₺', radius: 40, titleStyle: const TextStyle( fontSize: 16, shadows: [ Shadow( offset: Offset(1.0, 2.0), blurRadius: 1.5, color: Color.fromARGB(255, 0, 0, 0), ), ], fontWeight: FontWeight.bold, color: Colors.white, ), ), PieChartSectionData( color: const Color.fromARGB(255, 151, 35, 50), value: giderOran, title: '% $formattedGiderOran \n $formattedGiderYuzdesi ₺', radius: 40, titleStyle: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, shadows: [ Shadow( offset: Offset(1.0, 2.0), blurRadius: 1.5, color: Color.fromARGB(255, 0, 0, 0), ), ], color: Colors.white, ), ), ]; } String cleanCurrencyString(String stringValue) { // Kullanıcının girdisindeki sayısal ifadeleri ve "." karakterlerini tutar String digitsAndDots = stringValue.replaceAll(RegExp(r'[^\d\.]'), ''); // Türkçe para birimi formatını uygun hale getirme String cleanedString = digitsAndDots.replaceAll('.', '').replaceAll(',', '.'); return cleanedString; } } class FaturaDetaylari extends StatelessWidget { final String listName; final String userId; const FaturaDetaylari({super.key, required this.listName, required this.userId}); @override Widget build(BuildContext context) { return DefaultTabController( length: 3, child: Scaffold( appBar: AppBar( title: const Text('İşlemler'), bottom: const TabBar( tabs: [ Tab(text: 'Tümü'), Tab(text: 'Gelir'), Tab(text: 'Gider'), ], ), ), body: TabBarView( children: [ _buildTabContent(context, 'tum'), _buildTabContent(context, 'gelir'), _buildTabContent(context, 'gider'), ], ), ), ); } Widget _buildTabContent(BuildContext context, String girdiTuru) { return StreamBuilder( stream: FirebaseFirestore.instance .collection('Users') .doc(userId) .collection('Lists') .doc(listName) .snapshots(), builder: (context, snapshot) { if (!snapshot.hasData) { return const Center(child: Text("Veri yok")); } Map? listData = snapshot.data!.data(); List vouchers = listData!['girdiler'] ?? []; // Filtreleme işlemi List> filteredVouchers = []; for (int i = 0; i < vouchers.length; i++) { var voucher = vouchers[i]; if (girdiTuru == 'gelir' && voucher['girdiTuru'] == 'gelir') { filteredVouchers.add({'veri': voucher, 'originalIndex': i}); } else if (girdiTuru == 'gider' && voucher['girdiTuru'] == 'gider') { filteredVouchers.add({'veri': voucher, 'originalIndex': i}); } else if (girdiTuru == 'tum') { filteredVouchers.add({'veri': voucher, 'originalIndex': i}); } } return ListView.builder( itemCount: filteredVouchers.length, itemBuilder: (context, index) { var voucherData = filteredVouchers[index]; var originalIndex = voucherData['originalIndex']; var voucher = voucherData['veri']; if (filteredVouchers.isEmpty) { return const Center( child: Text("Gösterilecek veri yok"), ); } return ListTile( title: Text('Açıklama: ${voucher['aciklama']}'), subtitle: Text('KDV Dahil Fiyat: ${voucher['kdvDahil'].toString()}'), trailing: Row( mainAxisSize: MainAxisSize.min, children: [ IconButton( icon: const Icon(Icons.edit, color: Color.fromARGB(255, 88, 88, 88)), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => DuzenlemeEkran( veri: voucher, userId: userId, index: originalIndex, ), ), ); }, ), IconButton( icon: const Icon(Icons.delete, color: Color.fromARGB(255, 255, 17, 0)), onPressed: () { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: const Text('Girdi Detayı'), content: const Text('Veriyi silmek üzeresiniz. Silmek istiyor musunuz?'), actions: [ TextButton( onPressed: () { FirebaseFirestore.instance .collection('Users') .doc(userId) .collection('Lists') .doc(listName) .update({ 'girdiler': FieldValue.arrayRemove([voucher]) }); Navigator.of(context).pop(); }, child: const Text('Sil'), ), TextButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text('Kapat'), ), ], ); }, ); }, ), ], ), ); }, ); }, ); } } class DuzenlemeEkran extends StatefulWidget { final Map veri; final String userId; final int index; const DuzenlemeEkran({super.key, required this.veri, required this.userId, required this.index}); @override _DuzenlemeEkranState createState() => _DuzenlemeEkranState(); } class _DuzenlemeEkranState extends State { late TextEditingController _defterKayitTarihiController; late TextEditingController _vergiNoController; late TextEditingController _sirketUnvanController; late TextEditingController _sirketUnvanSoyadController; late TextEditingController _vergiDairesi; final TextEditingController fisNoController = TextEditingController(); final TextEditingController seriNoController = TextEditingController(); final TextEditingController siraNoController = TextEditingController(); final TextEditingController faturaNoController = TextEditingController(); String sirketUnvan = ''; String vergiDairesi = ''; String hesapAdi = ''; String mersisNo = ''; String referans = ''; DateTime today = DateTime.now(); String? selectedValue; final List items = [ 'ÖKC Fişi (Yazarkasa Fişi)', 'Fatura', 'E-Arşiv Fatura', 'E-Fatura', 'Diğer' ]; final List vergiDaireleri = [ 'Düden Vergi Dairesi', 'Lara Vergi Dairesi', 'Kepez Vergi Dairesi', 'MuratPaşa Vergi Dairesi', 'Dokuma Vergi Dairesi' ]; DateTime? selectedDate = null; Future _selectDate(BuildContext context) async { final DateTime? picked = await showDatePicker( context: context, initialDate: selectedDate, firstDate: DateTime(2015, 8), lastDate: DateTime(2101)); if (picked != null && picked != selectedDate) { setState(() { selectedDate = picked; }); } } String secilenIl = ""; String secilenVergiDairesi = ""; List alisTuru = [ 'Normal Alım', 'Satıştan İade', ]; static const _locale = 'tr'; String _formatNumber(String s) => NumberFormat.decimalPattern(_locale).format(int.parse(s)); bool seciciKontrol = false; List secimIcinList = []; bool kontrol = false; List ilListe = []; List> ilceListe = []; final TextEditingController isimController = TextEditingController(); final TextEditingController soyIsimController = TextEditingController(); final TextEditingController kepAdresiController = TextEditingController(); final TextEditingController mersisNoController = TextEditingController(); final TextEditingController ibanNoController = TextEditingController(); final TextEditingController hesapAdiController = TextEditingController(); final TextEditingController referansController = TextEditingController(); final TextEditingController sirketUnvanController = TextEditingController(); final TextEditingController vergiDairesiController = TextEditingController(); final List giderKayit = [ 'Mal Alışı', 'İndirilecek Giderler', 'Gider Kabul Edilemeyen Ödemeler', 'Sabit Kıymet Alışı', ]; final List giderKayitAlt = [ 'Mal Alışı', 'Normal Bakım Onarım Giderleri ( GVK 40/1 - 40/7 )', 'Ofis Giderleri(Çay, Kahve, Şeker, Temizlik vb.) (GVK 40/1)', 'Gıda Harcamaları (GVK 40/1-40/2)', 'Kırtasiye ve Basılı Evrak Giderleri (GVK 40/1)', 'Temsil ve Ağırlama Gideri (İş yemeği vb.) (GVK 40/1)', 'Ulaşım Giderleri (Oto Kiralama, Taksi, Uçak vb) (GVK 40/4-5)', 'Taşıt Akaryakıt Giderleri (GVK 40/1-40/5)', 'Taşıt Bakım Onarım Giderleri ( GVK 40/5)', 'Diğer (GVK 40/1)', 'Yıllara Yaygın İnşaat Maliyetleri', 'Doğrudan Gider Yazılan Demirbaş ( GVK 40/1)', 'Seyahat ve Ulaşım Giderleri (Oto Kiralama, Otobüs, Taksi, Uçak vb) (GVK 40/4-5)', 'Otopark Gideri (GVK Md. 40/5)', 'Dışarıdan Sağlanan Fayda ve Hizmetler ( GVK 40/1)', 'Diğer Sarf Malzeme Giderleri ( GVK 40/1)', 'Otoyol ve Gişe Giderleri (OGS, HGS vb.) (GVK 40/4-5)', 'İlişkili kişilerle emsallere uygunluk ilkesine aykırı olarak oluşan giderler(5615 Sy. Md. 3).', 'Diğer K.K.E.G.( Diğer, SGK Primleri )', 'KDV Kanunu Md. 30/d Uyarınca İndirilemeyen KDV Tutarı', 'İşsizlik Sigortası Fonu’ndan Karşılanan Sigorta Primleri', 'Hazine Tarafından Karşılanan Özürlü Personelin Sigorta Primi', 'Kayıp ve Zayi Olan Mallara Ait Giderler', 'Kiralama Yoluyla Edinilen veya İşletmede Kayıtlı Olan Yat, Kotra, Tekne, Sürat Teknesi Gibi Motorlu Deniz, Uçak ve Helikopter Gibi Hava Taşıtlarından İşletmenin Esas Faaliyet Konusu İle İlgili Olmayanların Giderleri', 'Amortisman Giderleri (GVK 40/7)', 'İşletmenin Esas Faaliyet Konusu İle İlgili Olmayan Vasıtalara Ait Amortismanlar (4008 Md.25)', 'VUK Hükümlerine Aykırı Olarak Ayrılan Amortismanlar', 'Kiralama Yoluyla Edinilen veya İşletmede Kayıtlı Olan Yat, Kotra, Tekne, Sürat Teknesi Gibi Motorlu Deniz, Uçak ve Helikopter Gibi Hava Taşıtlarından İşletmenin Esas Faaliyet Konusu İle İlgili Olmayanların Amortismanları', ]; String? alisTuruS; String? giderKayitS; String? giderAltS; bool lightKDV = false; bool lightKDVT= false; bool lightKDVSiz= false; bool lightGider= false; @override void initState() { super.initState(); _defterKayitTarihiController = TextEditingController(text: widget.veri['defterKayitTarihi']); selectedDate = DateTime.fromMillisecondsSinceEpoch( widget.veri['belgeTarihi'].millisecondsSinceEpoch); selectedValue = widget.veri['belgeTuru']; vergiNo = widget.veri['VKTCNO']; faturaNo = widget.veri['faturaNo']; seriNo = widget.veri['seriNo']; siraNo = widget.veri['siraNo']; fisNo = widget.veri['fisNo']; _vergiNoController = TextEditingController(text: widget.veri['VKTCNO']); _sirketUnvanController = TextEditingController(text: widget.veri['adi']); _sirketUnvanSoyadController = TextEditingController(text: widget.veri['soyadi']); _vergiDairesi = TextEditingController(text: widget.veri['vergiDairesi']); if(widget.veri['kdv'].toString()=="true"){ lightKDV = true; }else{ lightKDV = false; } if(widget.veri['kdvTevfikat'].toString()=="true"){ lightKDVT = true; }else{ lightKDVT = false; } if(widget.veri['kdvSiz'].toString()=="true"){ lightKDVSiz = true; }else{ lightKDVSiz = false; } if(widget.veri['stopajliAlim'].toString()=="true"){ lightGider = true; }else{ lightGider = false; } alisTuruS = widget.veri['alisTuru']; giderKayitS = widget.veri['giderKayit']; giderAltS = widget.veri['giderKayitAlt']; kdvValue = widget.veri["kdvOrani"]; fiyatKDVDahil = widget.veri['kdvDahil']; fiyatKDVHaric = widget.veri['kdvHaric']; indirilenKDV = widget.veri['indirilecekKDV']; belgeToplami = widget.veri['belgeToplami']; urunAciklama = widget.veri["aciklama"]; } late String vergiNo = ""; late String fisNo = ""; late String seriNo = ""; late String siraNo = ""; late String vergisirketUnvanSoyadNo = ""; late String faturaNo = ""; late String sirketUnvanSoyad =""; late String fisNoHint = fisNo; late String seriNoHint = seriNo; late String faturaNoHint = faturaNo; late String siraNoHint = siraNo; late String sirketUnvanHint = ""; late String sirketUnvanSoyadHint = ""; String fiyatKDVHaric = ''; String fiyatKDVDahil = ''; String indirilenKDV = ''; String belgeToplami = ''; String? urunAciklama; String? kdvDahilFiyat; String? kdvHaricFiyat; String? kdvIndirilecekFiyat; TextEditingController urunAciklamaCont = new TextEditingController(); TextEditingController kdvDahilCont = new TextEditingController(); TextEditingController kdvHaricCont = new TextEditingController(); TextEditingController kdvIndirilecekCont = new TextEditingController(); TextEditingController aciklama = new TextEditingController(); late DateTime date; late TimeOfDay time; var fiyatKDV; var fiyatKDV2; final List kdvList = [ '%1', '%10', '%20', '%0' ]; String? kdvValue; String? selectedVergi; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Veri Düzenleme'), ), body: Stack( children: [SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(10.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ TextField( readOnly: true, controller: _defterKayitTarihiController, decoration: const InputDecoration(labelText: 'Defter Kayıt Tarihi'), ), const SizedBox(height: 20), Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), decoration: const BoxDecoration( color: Color(0xFFE7EFFF), borderRadius: BorderRadius.all( Radius.circular(10)), ), child: SizedBox( width: double.infinity, height: 50, child: ElevatedButton( onPressed: () { _selectDate(context); }, style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFFE7EFFF), elevation: 0.0, ), child: selectedDate == null ? const Text("Belge Tarihini Seçin", style: TextStyle(color: Colors.black), ) :Text("Belge Tarihi : ${selectedDate!.day.toString()}/${selectedDate!.month.toString()}/${selectedDate!.year.toString()}", style: const TextStyle(color: Colors.black), textAlign: TextAlign.left, ), ), ), ), const SizedBox(height: 20), Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: BoxDecoration( color: const Color(0xFFE7EFFF), borderRadius: BorderRadius.circular(20.0), ), child: new Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: DropdownButtonFormField2( isExpanded: true, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20), ), // Add more decoration.. ), hint: Text( selectedValue.toString(), style: const TextStyle(fontSize: 14), ), items: items .map((item) => DropdownMenuItem( value: item, child: Text( item, style: const TextStyle( fontSize: 14, ), ), )) .toList(), onChanged: (value) { selectedValue = value.toString(); setState(() { fisNo = ""; fisNoHint = ""; faturaNo = ""; faturaNoHint = ""; seriNo = ""; seriNoHint = ""; siraNo = ""; siraNoHint = ""; selectedValue = selectedValue; }); //Do something when selected item is changed. }, onSaved: (value) { selectedValue = value.toString(); setState(() { fisNo = ""; fisNoHint = ""; faturaNo = ""; faturaNoHint = ""; seriNo = ""; seriNoHint = ""; siraNo = ""; siraNoHint = ""; selectedValue = selectedValue; }); }, buttonStyleData: const ButtonStyleData( padding: EdgeInsets.only(right: 8), ), iconStyleData: const IconStyleData( icon: Icon( Icons.arrow_drop_down, color: Colors.black45, ), iconSize: 24, ), dropdownStyleData: DropdownStyleData( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), ), ), menuItemStyleData: const MenuItemStyleData( padding: EdgeInsets.symmetric(horizontal: 16), ), ), ),), const SizedBox(height: 20), selectedValue == "ÖKC Fişi (Yazarkasa Fişi)" ? Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), child: TextFormField( style: const TextStyle( color: Color(0xFF12213A), ), autofocus: false, readOnly: false, keyboardType: TextInputType.number, inputFormatters: [ new LengthLimitingTextInputFormatter(16), FilteringTextInputFormatter.allow(RegExp(r'[0-9]')), ], cursorColor: const Color(0xFFEEA86C), decoration: InputDecoration( fillColor: const Color(0xFFE7EFFF), filled: true, focusedBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFFEEA86C), ), ), enabledBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFF12213A), ), ), border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, )), hintText: "Fiş numarasını girin.", hintStyle: const TextStyle( color: Color(0xFF12213A), ), prefixIcon: const Icon( Icons.pin_outlined, color: Color(0xFF12213A), ), labelText: "Fiş Numarası: $fisNoHint", labelStyle: const TextStyle( color: Color(0xFF12213A), ), ), controller: fisNoController, onChanged: (value) { fisNo = value; // isValid = EmailValidator.validate(email); }, ), ) : selectedValue == "Fatura" ? Column( children: [ Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), child: TextFormField( style: const TextStyle( color: Color(0xFF12213A), ), autofocus: false, readOnly: false, keyboardType: TextInputType.number, inputFormatters: [ new LengthLimitingTextInputFormatter(16), FilteringTextInputFormatter.allow(RegExp(r'[0-9]')), ], cursorColor: const Color(0xFFEEA86C), decoration: InputDecoration( fillColor: const Color(0xFFE7EFFF), filled: true, focusedBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFFEEA86C), ), ), enabledBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFF12213A), ), ), border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, )), hintText: "Seri numarası girin.", hintStyle: const TextStyle( color: Color(0xFF12213A), ), prefixIcon: const Icon( Icons.pin_outlined, color: Color(0xFF12213A), ), labelText: "Seri Numarası: $seriNoHint", labelStyle: const TextStyle( color: Color(0xFF12213A), ), ), controller: seriNoController, onChanged: (value) { seriNo = value; // isValid = EmailValidator.validate(email); }, ), ), const SizedBox(height: 20), Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), child: TextFormField( style: const TextStyle( color: Color(0xFF12213A), ), autofocus: false, readOnly: false, keyboardType: TextInputType.number, inputFormatters: [ new LengthLimitingTextInputFormatter(16), FilteringTextInputFormatter.allow(RegExp(r'[0-9]')), ], cursorColor: const Color(0xFFEEA86C), decoration: InputDecoration( fillColor: const Color(0xFFE7EFFF), filled: true, focusedBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFFEEA86C), ), ), enabledBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFF12213A), ), ), border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, )), hintText: "Sıra numarasını girin.", hintStyle: const TextStyle( color: Color(0xFF12213A), ), prefixIcon: const Icon( Icons.pin_outlined, color: Color(0xFF12213A), ), labelText: "Sıra Numarası: $siraNoHint", labelStyle: const TextStyle( color: Color(0xFF12213A), ), ), controller: siraNoController, onChanged: (value) { siraNo = value; // isValid = EmailValidator.validate(email); }, ), ), ], ): selectedValue == "E-Arşiv Fatura" ? Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), child: TextFormField( style: const TextStyle( color: Color(0xFF12213A), ), autofocus: false, readOnly: false, keyboardType: TextInputType.number, inputFormatters: [ new LengthLimitingTextInputFormatter(16), FilteringTextInputFormatter.allow(RegExp(r'[0-9]')), ], cursorColor: const Color(0xFFEEA86C), decoration: InputDecoration( fillColor: const Color(0xFFE7EFFF), filled: true, focusedBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFFEEA86C), ), ), enabledBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFF12213A), ), ), border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, )), hintText:"Fatura numarasını girin.", hintStyle: const TextStyle( color: Color(0xFF12213A), ), prefixIcon: const Icon( Icons.pin_outlined, color: Color(0xFF12213A), ), labelText: "Fatura Numarası: $faturaNoHint", labelStyle: const TextStyle( color: Color(0xFF12213A), ), ), controller: faturaNoController, onChanged: (value) { faturaNo = value; // isValid = EmailValidator.validate(email); }, ), ) : selectedValue == "E-Fatura" ? Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), child: TextFormField( style: const TextStyle( color: Color(0xFF12213A), ), autofocus: false, readOnly: false, keyboardType: TextInputType.number, inputFormatters: [ new LengthLimitingTextInputFormatter(16), FilteringTextInputFormatter.allow(RegExp(r'[0-9]')), ], cursorColor: const Color(0xFFEEA86C), decoration: InputDecoration( fillColor: const Color(0xFFE7EFFF), filled: true, focusedBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFFEEA86C), ), ), enabledBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFF12213A), ), ), border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, )), hintText:"Fatura numarasını girin.", hintStyle: const TextStyle( color: Color(0xFF12213A), ), prefixIcon: const Icon( Icons.pin_outlined, color: Color(0xFF12213A), ), labelText: "Fatura Numarası: $faturaNoHint", labelStyle: const TextStyle( color: Color(0xFF12213A), ), ), controller: faturaNoController, onChanged: (value) { faturaNo = value; // isValid = EmailValidator.validate(email); }, ), ) : selectedValue == "Diğer" ? Column( children: [ Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), child: TextFormField( style: const TextStyle( color: Color(0xFF12213A), ), autofocus: false, readOnly: false, keyboardType: TextInputType.number, inputFormatters: [ new LengthLimitingTextInputFormatter(16), FilteringTextInputFormatter.allow(RegExp(r'[0-9]')), ], cursorColor: const Color(0xFFEEA86C), decoration: InputDecoration( fillColor: const Color(0xFFE7EFFF), filled: true, focusedBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFFEEA86C), ), ), enabledBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFF12213A), ), ), border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, )), hintText:"Seri numarasını girin.", hintStyle: const TextStyle( color: Color(0xFF12213A), ), prefixIcon: const Icon( Icons.pin_outlined, color: Color(0xFF12213A), ), labelText: "Seri Numarası: $seriNoHint", labelStyle: const TextStyle( color: Color(0xFF12213A), ), ), controller: seriNoController, onChanged: (value) { seriNo = value; // isValid = EmailValidator.validate(email); }, ), ), const SizedBox(height: 20), Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), child: TextFormField( style: const TextStyle( color: Color(0xFF12213A), ), autofocus: false, readOnly: false, keyboardType: TextInputType.number, inputFormatters: [ new LengthLimitingTextInputFormatter(16), FilteringTextInputFormatter.allow(RegExp(r'[0-9]')), ], cursorColor: const Color(0xFFEEA86C), decoration: InputDecoration( fillColor: const Color(0xFFE7EFFF), filled: true, focusedBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFFEEA86C), ), ), enabledBorder: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, color: Color(0xFF12213A), ), ), border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(20)), borderSide: BorderSide( width: 1, )), hintText:"Sıra numarasını girin.", hintStyle: const TextStyle( color: Color(0xFF12213A), ), prefixIcon: const Icon( Icons.pin_outlined, color: Color(0xFF12213A), ), labelText: "Sıra Numarası: $siraNoHint", labelStyle: const TextStyle( color: Color(0xFF12213A), ), ), controller: siraNoController, onChanged: (value) { siraNo = value; // isValid = EmailValidator.validate(email); }, ), ), ], ) : Container(), const SizedBox(height: 20), TextField( controller: _vergiNoController, decoration: const InputDecoration(labelText: 'TCKN / VKN'), ), const SizedBox(height: 20), TextField( controller: _sirketUnvanController, decoration: const InputDecoration(labelText: 'Adı Ünvanı Devamı'), ), const SizedBox(height: 20), TextField( controller: _sirketUnvanSoyadController, decoration: const InputDecoration(labelText: 'Soyadı Ünvanı'), ), const SizedBox(height: 20), TextField( readOnly: true, controller: _vergiDairesi, decoration: const InputDecoration(labelText: 'Vergi Dairesi'), ), const SizedBox(height: 20), Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: BoxDecoration( color: const Color(0xFFE7EFFF), borderRadius: BorderRadius.circular(20.0), ), child: new Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: DropdownButtonFormField2( isExpanded: true, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20), ), // Add more decoration.. ), hint: Text( alisTuruS.toString(), style: const TextStyle(fontSize: 14), ), items: alisTuru .map((item) => DropdownMenuItem( value: item, child: Text( item, style: const TextStyle( fontSize: 14, ), ), )) .toList(), validator: (value) { if (value == null) { return 'Alış Türünü Seçin'; } return null; }, onChanged: (value) { alisTuruS = value.toString(); setState(() { alisTuruS = alisTuruS; }); //Do something when selected item is changed. }, onSaved: (value) { alisTuruS = value.toString(); setState(() { alisTuruS = alisTuruS; }); }, buttonStyleData: const ButtonStyleData( padding: EdgeInsets.only(right: 8), ), iconStyleData: const IconStyleData( icon: Icon( Icons.arrow_drop_down, color: Colors.black45, ), iconSize: 24, ), dropdownStyleData: DropdownStyleData( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), ), ), menuItemStyleData: const MenuItemStyleData( padding: EdgeInsets.symmetric(horizontal: 16), ), ), ),), const SizedBox(height: 20), Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: BoxDecoration( color: const Color(0xFFE7EFFF), borderRadius: BorderRadius.circular(20.0), ), child: new Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: DropdownButtonFormField2( isExpanded: true, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20), ), // Add more decoration.. ), hint: Text( giderKayitS.toString(), style: const TextStyle(fontSize: 14), ), items: giderKayit .map((item) => DropdownMenuItem( value: item, child: Text( item, style: const TextStyle( fontSize: 14, ), ), )) .toList(), validator: (value) { if (value == null) { return 'Gider Kayıt Türünü Seçin'; } return null; }, onChanged: (value) { giderKayitS = value.toString(); setState(() { giderKayitS = giderKayitS; }); }, onSaved: (value) { giderKayitS = value.toString(); setState(() { giderKayitS = giderKayitS; }); }, buttonStyleData: const ButtonStyleData( padding: EdgeInsets.only(right: 8), ), iconStyleData: const IconStyleData( icon: Icon( Icons.arrow_drop_down, color: Colors.black45, ), iconSize: 24, ), dropdownStyleData: DropdownStyleData( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), ), ), menuItemStyleData: const MenuItemStyleData( padding: EdgeInsets.symmetric(horizontal: 16), ), ), ),), const SizedBox(height: 20), Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: BoxDecoration( color: const Color(0xFFE7EFFF), borderRadius: BorderRadius.circular(20.0), ), child: new Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: DropdownButtonFormField2( isExpanded: true, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20), ), // Add more decoration.. ), hint: Text( giderAltS.toString(), style: const TextStyle(fontSize: 14), ), items: giderKayitAlt .map((item) => DropdownMenuItem( value: item, child: Text( item, style: const TextStyle( fontSize: 14, ), ), )) .toList(), validator: (value) { if (value == null) { return 'Gider Kayıt Alt Türünü Seçin'; } return null; }, onChanged: (value) { giderAltS = value.toString(); setState(() { giderAltS = giderAltS; }); }, onSaved: (value) { giderAltS = value.toString(); setState(() { giderAltS = giderAltS; }); }, buttonStyleData: const ButtonStyleData( padding: EdgeInsets.only(right: 8), ), iconStyleData: const IconStyleData( icon: Icon( Icons.arrow_drop_down, color: Colors.black45, ), iconSize: 24, ), dropdownStyleData: DropdownStyleData( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), ), ), menuItemStyleData: const MenuItemStyleData( padding: EdgeInsets.symmetric(horizontal: 16), ), ), ),), Center( child: Padding( padding: const EdgeInsets.only(top: 20,left: 5,right: 5), child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ const Text("KDV "), Switch( // This bool value toggles the switch. value: lightKDV, activeColor: Colors.green, inactiveThumbColor: Colors.red, inactiveTrackColor: const Color.fromARGB(255, 254, 182, 182), onChanged: (bool value) { // This is called when the user toggles the switch. setState(() { lightKDV = value; }); },),],), Row( children: [ const Text("KDV’siz İşlem "), Switch( // This bool value toggles the switch. value: lightKDVSiz, activeColor: Colors.green, inactiveThumbColor: Colors.red, inactiveTrackColor: const Color.fromARGB(255, 254, 182, 182), onChanged: (bool value) { // This is called when the user toggles the switch. setState(() { lightKDVSiz = value; }); },),],), Row( children: [ const Text("KDV Tevkifatlı Alım "), Switch( // This bool value toggles the switch. value: lightKDVT, activeColor: Colors.green, inactiveThumbColor: Colors.red, inactiveTrackColor: const Color.fromARGB(255, 254, 182, 182), onChanged: (bool value) { // This is called when the user toggles the switch. setState(() { lightKDVT = value; }); },),],), Row( children: [ const Text("(Gider) Stopajlı Alım"), Switch( // This bool value toggles the switch. value: lightGider, activeColor: Colors.green, inactiveThumbColor: Colors.red, inactiveTrackColor: const Color.fromARGB(255, 254, 182, 182), onChanged: (bool value) { // This is called when the user toggles the switch. setState(() { lightGider = value; }); },),],), ], ), const SizedBox( height: 25, ), ], ), ), ), Column( children: [ Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: BoxDecoration( color: const Color(0xFFE7EFFF), borderRadius: BorderRadius.circular(20.0), ), child: new Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: DropdownButtonFormField2( isExpanded: true, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20), ), // Add more decoration.. ), hint: Text( kdvValue.toString(), style: const TextStyle(fontSize: 14), ), items: kdvList .map((item) => DropdownMenuItem( value: item, child: Text( item, style: const TextStyle( fontSize: 14, ), ), )) .toList(), validator: (value) { if (value == null) { setState(() { urunAciklamaCont.clear(); kdvDahilCont.clear(); kdvHaricCont.clear(); kdvIndirilecekCont.clear(); aciklama.clear(); fiyatKDVDahil = ""; fiyatKDVHaric = ""; indirilenKDV = ""; belgeToplami =""; }); return 'KDV Oranını Seçin'; } return null; }, onChanged: (value) { kdvValue = value.toString(); setState(() { urunAciklamaCont.clear(); kdvDahilCont.clear(); kdvHaricCont.clear(); kdvIndirilecekCont.clear(); aciklama.clear(); fiyatKDVDahil = ""; fiyatKDVHaric = ""; indirilenKDV = ""; belgeToplami =""; kdvValue = kdvValue; }); }, onSaved: (value) { kdvValue = value.toString(); setState(() { urunAciklamaCont.clear(); kdvDahilCont.clear(); kdvHaricCont.clear(); kdvIndirilecekCont.clear(); aciklama.clear(); fiyatKDVDahil = ""; fiyatKDVHaric = ""; indirilenKDV = ""; belgeToplami =""; kdvValue = kdvValue; }); }, buttonStyleData: const ButtonStyleData( padding: EdgeInsets.only(right: 8), ), iconStyleData: const IconStyleData( icon: Icon( Icons.arrow_drop_down, color: Colors.black45, ), iconSize: 24, ), dropdownStyleData: DropdownStyleData( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), ), ), menuItemStyleData: const MenuItemStyleData( padding: EdgeInsets.symmetric(horizontal: 16), ), ), ),), const SizedBox(height: 20), kdvValue != null ? new Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: const BoxDecoration( color: Color(0xFFE7EFFF), borderRadius: BorderRadius.all( Radius.circular(10)),), child: AutoSizeTextField( textAlign: TextAlign.center, controller: kdvDahilCont, keyboardType: TextInputType.number, onChanged: (string) { if (string == "") { setState(() { indirilenKDV == ""; fiyatKDVHaric ==""; fiyatKDVDahil == ""; }); }else{ string = '${_formatNumber(string.replaceAll('.', ''))}'; } kdvDahilCont.value = TextEditingValue( text: string, selection: TextSelection.collapsed( offset: string.length), ); kdvDahilFiyat = string; if (string == "") { setState(() { indirilenKDV = ""; fiyatKDVHaric = ""; fiyatKDVDahil = ""; }); }else{ fiyatKDV = double.parse(string.replaceAll('.', '')); } kdvValue == "%1" ? fiyatKDV2 = (fiyatKDV*100)/101 : kdvValue == "%10" ? fiyatKDV2 = (fiyatKDV*100)/110 : kdvValue == "%20" ? fiyatKDV2 = (fiyatKDV*100)/120 : kdvValue == "%0" ? fiyatKDV2 = (fiyatKDV*100)/100 : fiyatKDV2 = ""; var eurosInUSFormat = NumberFormat("#,###.0#", "tr-TR"); setState(() { kdvHaricCont.clear(); kdvIndirilecekCont.clear(); fiyatKDVHaric = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV2)} ₺"; indirilenKDV = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV-fiyatKDV2)} ₺"; belgeToplami = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV)} ₺"; fiyatKDVDahil = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV)} ₺"; }); }, decoration: fiyatKDVDahil == "" ? const InputDecoration( prefixText: " ", suffixText: "₺ ", border: InputBorder.none, hintText: 'KDV Dahil Fiyatını Girin', alignLabelWithHint: true, hintStyle: TextStyle( // color: Color(0xFF29A92D), color: Color(0xFF0A8015), // color: Colors.white, // fontWeight: FontWeight.bold, fontWeight: FontWeight.w400, fontSize: 20, ), ): InputDecoration( prefixText: " ", suffixText: "₺ ", border: InputBorder.none, hintText: 'KDV Dahil Fiyatı: $fiyatKDVDahil', alignLabelWithHint: true, hintStyle: const TextStyle( // color: Color(0xFF29A92D), color: Color(0xFF0A8015), // color: Colors.white, // fontWeight: FontWeight.bold, fontWeight: FontWeight.w400, fontSize: 20, ), ), style: const TextStyle( // color: Color(0xFF29A92D), color: Color(0xFF0A8015), // color: Colors.white, fontWeight: FontWeight.w400, // fontWeight: FontWeight.bold, ), minFontSize: 20, maxLines: 1, autocorrect: false, ), ), ), ], ), ):Container(), const SizedBox(height: 20), kdvValue != null ? new Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: const BoxDecoration( color: Color(0xFFE7EFFF), borderRadius: BorderRadius.all( Radius.circular(10)),), child: AutoSizeTextField( textAlign: TextAlign.center, controller: kdvHaricCont, keyboardType: TextInputType.number, onChanged: (string) { if (string == "") { indirilenKDV = ""; fiyatKDVHaric = ""; fiyatKDVDahil = ""; }else{ string = '${_formatNumber(string.replaceAll('.', ''))}'; } kdvHaricCont.value = TextEditingValue( text: string, selection: TextSelection.collapsed( offset: string.length), ); kdvHaricFiyat = string; if (string == "") { indirilenKDV = ""; fiyatKDVHaric = ""; fiyatKDVDahil = ""; }else{ fiyatKDV = double.parse(string.replaceAll('.', '')); } kdvValue == "%1" ? fiyatKDV2 = fiyatKDV+((fiyatKDV*1)/100): kdvValue == "%10" ? fiyatKDV2 = fiyatKDV+((fiyatKDV*10)/100): kdvValue == "%20" ? fiyatKDV2 = fiyatKDV+((fiyatKDV*20)/100): kdvValue == "%0" ? fiyatKDV2 = fiyatKDV+((fiyatKDV*0)/100): fiyatKDV2 = ""; var eurosInUSFormat = NumberFormat("#,###.0#", "tr-TR"); setState(() { kdvDahilCont.clear(); kdvIndirilecekCont.clear(); fiyatKDVDahil = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV2)} ₺"; indirilenKDV = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV2-fiyatKDV)} ₺"; belgeToplami = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV2)} ₺"; fiyatKDVHaric = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV2-(fiyatKDV2-fiyatKDV))} ₺"; }); }, decoration: fiyatKDVHaric == "" ? const InputDecoration( prefixText: " ", suffixText: "₺ ", border: InputBorder.none, hintText: 'KDV Hariç Fiyatını Girin', alignLabelWithHint: true, hintStyle: TextStyle( // color: Color(0xFF29A92D), color: Color(0xFF0A8015), // color: Colors.white, // fontWeight: FontWeight.bold, fontWeight: FontWeight.w400, fontSize: 20, ), ): InputDecoration( prefixText: " ", suffixText: "₺ ", border: InputBorder.none, hintText: 'KDV Hariç Fiyatı: $fiyatKDVHaric', alignLabelWithHint: true, hintStyle: const TextStyle( // color: Color(0xFF29A92D), color: Color(0xFF0A8015), // color: Colors.white, // fontWeight: FontWeight.bold, fontWeight: FontWeight.w400, fontSize: 20, ), ), style: const TextStyle( // color: Color(0xFF29A92D), color: Color(0xFF0A8015), // color: Colors.white, fontWeight: FontWeight.w400, // fontWeight: FontWeight.bold, ), minFontSize: 20, maxLines: 1, autocorrect: false, ), ), ), ], ), ):Container(), const SizedBox(height: 20), kdvValue != null ? new Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: const BoxDecoration( color: Color(0xFFE7EFFF), borderRadius: BorderRadius.all( Radius.circular(10)),), child: AutoSizeTextField( textAlign: TextAlign.center, controller: kdvIndirilecekCont, keyboardType: TextInputType.number, onChanged: (string) { if (string == "") { indirilenKDV = ""; fiyatKDVHaric = ""; fiyatKDVDahil = ""; }else{ string = '${_formatNumber(string.replaceAll('.', ''))}'; } kdvIndirilecekCont.value = TextEditingValue( text: string, selection: TextSelection.collapsed( offset: string.length), ); kdvIndirilecekFiyat = string; if (string == "") { indirilenKDV = ""; fiyatKDVHaric = ""; fiyatKDVDahil = ""; }else{ fiyatKDV = double.parse(string.replaceAll('.', '')); } kdvValue == "%1" ? fiyatKDV2 = fiyatKDV+((fiyatKDV* 100)/1): kdvValue == "%10" ? fiyatKDV2 = fiyatKDV+((fiyatKDV*100)/10): kdvValue == "%20" ? fiyatKDV2 = fiyatKDV+((fiyatKDV*100)/20): kdvValue == "%0" ? fiyatKDV2 = fiyatKDV: fiyatKDV2 = ""; var eurosInUSFormat = NumberFormat("#,###.0#", "tr-TR"); setState(() { kdvDahilCont.clear(); kdvHaricCont.clear(); kdvHaricFiyat = ""; fiyatKDVDahil = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV2)} ₺"; fiyatKDVHaric = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV2-fiyatKDV)} ₺"; indirilenKDV = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV)} ₺"; belgeToplami = string =="" ? "" : "${eurosInUSFormat.format(fiyatKDV2)} ₺"; }); }, decoration: indirilenKDV == "" ? const InputDecoration( prefixText: " ", suffixText: "₺ ", border: InputBorder.none, hintText: 'İndirilecek KDV Girin', alignLabelWithHint: true, hintStyle: TextStyle( // color: Color(0xFF29A92D), color: Color(0xFF0A8015), // color: Colors.white, // fontWeight: FontWeight.bold, fontWeight: FontWeight.w400, fontSize: 20, ), ): InputDecoration( prefixText: " ", suffixText: "₺ ", border: InputBorder.none, hintText: 'İndirilecek KDV: $indirilenKDV', alignLabelWithHint: true, hintStyle: const TextStyle( // color: Color(0xFF29A92D), color: Color(0xFF0A8015), // color: Colors.white, // fontWeight: FontWeight.bold, fontWeight: FontWeight.w400, fontSize: 20, ), ), style: const TextStyle( // color: Color(0xFF29A92D), color: Color(0xFF0A8015), // color: Colors.white, fontWeight: FontWeight.w400, // fontWeight: FontWeight.bold, ), minFontSize: 20, maxLines: 1, autocorrect: false, ), ), ), ], ), ): Container(), const SizedBox(height: 20), kdvValue != null ? new Theme( data: Theme.of(context).copyWith( canvasColor: const Color(0xFFE7EFFF), ), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), height: 60, decoration: const BoxDecoration( color: Color(0xFFE7EFFF), borderRadius: BorderRadius.all( Radius.circular(10)), ), child: Text( "Belge Toplamı: $belgeToplami" ,style: const TextStyle(fontSize: 20), ), ), ), ], ), ):Container(), const SizedBox(height: 20), kdvValue != null ? Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 10), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: MediaQuery.of(context).size.width - 40, height: 120, decoration: const BoxDecoration( color: Color(0xFFE7EFFF), borderRadius: BorderRadius.all( Radius.circular(10)), ), child: Padding( padding: const EdgeInsets.symmetric( horizontal: 5), child: AutoSizeTextField( fullwidth: false, //ürün başlık controller: urunAciklamaCont, onChanged: (value) { urunAciklama = value; }, decoration: InputDecoration( //counterText: '', border: InputBorder.none, hintText: 'Açıklama: $urunAciklama', hintStyle: const TextStyle( color: Color.fromARGB(255, 0, 0, 0), //color: Colors.white, fontSize: 16, ), ), style: const TextStyle( color: Color(0xFF12213A), fontWeight: FontWeight.w400, ), minFontSize: 16, maxLines: 8, autocorrect: false, maxLength: 80, ), ), ), ], ), ):Container(), const SizedBox(height: 360), ], ), ], ), ), ), Align( alignment: Alignment.bottomCenter, child: Container( color: Colors.orange, child: SafeArea( bottom: true, top: false, child: SizedBox( width: double.infinity, height: 50, // In fact, you don't need a button anymore. child: ElevatedButton( onPressed: () { if (selectedValue == "ÖKC Fişi (Yazarkasa Fişi)" && fisNo.isEmpty) { showSnackBar(context); } else if (selectedValue == "Fatura" && (seriNo.isEmpty || siraNo.isEmpty)) { showSnackBar(context); } else if ((selectedValue == "E-Arşiv Fatura" || selectedValue == "E-Fatura") && faturaNo.isEmpty) { showSnackBar(context); } else if (selectedValue == "Diğer" && (seriNo.isEmpty || siraNo.isEmpty)) { showSnackBar(context); } else { setState(() { kontrol = true; }); } if( selectedDate == null || // vergiNo.isEmpty || // sirketUnvan.isEmpty || // sirketUnvanSoyad.isEmpty || // vergiDairesi.isEmpty || kontrol == false || selectedValue == null || _vergiNoController.text == "" || _sirketUnvanController.text == ""|| _sirketUnvanSoyadController.text== "" || _vergiDairesi.text== "" || alisTuruS == null|| giderKayitS== null || giderAltS== null || kdvValue== null || urunAciklama== null || widget.veri['girdiTuru'] == null ){ showSnackBar(context); }else{ Map updatedInput = { 'defterKayitTarihi': widget.veri['defterKayitTarihi'], 'belgeTarihi': selectedDate, 'belgeTuru': selectedValue, 'faturaNo': faturaNo, 'seriNo': seriNo, 'siraNo': siraNo, 'fisNo': fisNo, 'VKTCNO': _vergiNoController.text, 'adi': _sirketUnvanController.text, 'soyadi': _sirketUnvanSoyadController.text, 'vergiDairesi': _vergiDairesi.text, 'alisTuru': alisTuruS, 'giderKayit': giderKayitS, 'giderKayitAlt': giderAltS, 'kdv': lightKDV, 'kdvTevfikat': lightKDVT, 'kdvSiz': lightKDVSiz, 'stopajliAlim': lightGider, 'kdvOrani': kdvValue, 'kdvDahil': fiyatKDVDahil, 'kdvHaric': fiyatKDVHaric, 'indirilecekKDV': indirilenKDV, 'belgeToplami': belgeToplami, 'aciklama': urunAciklama, 'girdiTuru':widget.veri['girdiTuru'], }; updateInputForMonth(widget.userId, widget.veri['defterKayitTarihi'], updatedInput, widget.index ); } }, style: ElevatedButton.styleFrom( backgroundColor: Colors.orange, elevation: 0.0, ), child: const Text( 'Güncelle', style: TextStyle( fontSize: 24.0, color: Colors.white ), ), ) ), ), ), ), ], ), ); } void showSnackBar(BuildContext context) { final scaffold = ScaffoldMessenger.of(context); scaffold.showSnackBar( SnackBar( content: const Text("Lütfen tüm alanları doldurun!"), action: SnackBarAction( label: 'TAMAM', onPressed: scaffold.hideCurrentSnackBar, textColor: Colors.redAccent, ), ), ); } Future updateInputForMonth(String userID, String monthYear, Map updatedInput, int inputIndex) async { try { final FirebaseFirestore firebaseFirestore = FirebaseFirestore.instance; // Kullanıcının belgesine erişim sağlayın DocumentReference userDocRef = firebaseFirestore.collection('Users').doc(userID); // Kullanıcının belgesindeki listenin referansını alın CollectionReference listsCollectionRef = userDocRef.collection('Lists'); // Belirtilen ay için girdi listesini alın DocumentSnapshot monthListDoc = await listsCollectionRef.doc(monthYear).get(); if (monthListDoc.exists) { // Girdi listesi varsa, belirli indeksteki girdiyi güncelleyin Map? documentData = monthListDoc.data() as Map?; if (documentData != null) { List? inputs = documentData['girdiler']; if (inputs != null && inputIndex >= 0 && inputIndex < inputs.length) { // Belirli indeksteki girdiyi güncelleyin inputs[inputIndex] = updatedInput; // Güncellenmiş girdi listesini Firestore'a yükle await listsCollectionRef.doc(monthYear).update({ 'girdiler': inputs, }); print('Girdi başarıyla güncellendi!'); } else { print('Geçersiz indeks veya girdi bulunamadı!'); } } else { print('Belge verisi bulunamadı!'); } } else { print('Belirtilen ay için girdi listesi bulunamadı!'); } } catch (error) { print('Hata oluştu: $error'); } Navigator.of(context).pop(); } }