import 'package:bbm_tracking/model/bensin_m.dart'; import 'package:bbm_tracking/model/kendaraan_m.dart'; import 'package:bbm_tracking/model/photo_m.dart'; import 'package:bbm_tracking/model/transaksiPerMonth_m.dart'; import 'package:bbm_tracking/model/transaksi_m.dart'; import 'package:bbm_tracking/repository/kendaraan/kendaraan_repository.dart'; import 'package:bbm_tracking/repository/transaksi/transaksi_repository.dart'; import 'package:bbm_tracking/resource/data-bensin/data-bensin.dart'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; part 'bbm_event.dart'; part 'bbm_state.dart'; class BbmBloc extends Bloc { final KendaraanRepository kendaraanRepository; final TransaksiRepository transaksiRepository; BbmBloc( {required this.kendaraanRepository, required this.transaksiRepository}) : super(BbmInitial()) { on(_onBBMStarted); on(_onBBMKendaraanAdded); on(_onBBMKendaraanUpdated); on(_onBBMChangeStatusKendaraan); on(_onBBMGetDataKendaraan); on(_onBBMInsertTransaksi); on(_onBBMGetAllKendaraan); on(_onBBMChangeDataTransaction); } Future _onBBMChangeDataTransaction( BBMChangeDataTransaction event, Emitter emit, ) async { try { List dataKendaraan = await kendaraanRepository.loadKendaraan(); List dataTransaksi = await transaksiRepository.loadTransaksi(); List dataTransaksiThisMonth = await transaksiRepository.loadTransaksiThisMonth(event.selectedDate); emit(BBMLoaded(dataKendaraan, dataTransaksi, dataTransaksiThisMonth)); } catch (e) { emit(BBMError(message: "Something Error, ${e}, We Will Fix it")); } } Future _onBBMGetDataKendaraan( BBMDataKendaraan event, Emitter emit, ) async { final state = this.state; try { if (state is BBMLoaded) { late KendaraanModel dataKendaraan; state.kendaraan.forEach((element) { if (element.id == event.kendaraanModel.id) { dataKendaraan = element; } }); emit(BBMSingleData(kendaraan: dataKendaraan)); } } catch (e) { emit(BBMError(message: "Something Error, ${e}, We Will Fix it")); } } Future _onBBMGetAllKendaraan( BBMAllDataKendaraan event, Emitter emit, ) async { try { List dataKendaraan = await kendaraanRepository.loadKendaraan(); emit(BBMKendaraanLoaded(kendaraan: dataKendaraan)); } catch (e) { emit(BBMError(message: "Something Error, ${e}, We Will Fix it")); } } Future _onBBMChangeStatusKendaraan( BBMChangeStatusKendaraan event, Emitter emit, ) async { final state = this.state; try { if (state is BBMLoaded) { await kendaraanRepository.changeStatuKendaraan(event.id, event.status); state.kendaraan.forEach((element) { element.status = 0; }); state.kendaraan .elementAt( state.kendaraan.indexWhere((element) => element.id == event.id)) .status = event.status; // List dataKendaraan = state.kendaraan; // List dataTransaksi = state.transaksi; // print("data dari bloc = "+dataKendaraan[0].status.toString()); // emit(BBMLoaded(dataKendaraan, dataTransaksi, dataTransaksi)); } } catch (e) { emit(BBMError(message: "Something Error, ${e}, We Will Fix it")); } } Future _onBBMKendaraanAdded( BBMDataKendaraanAdded event, Emitter emit, ) async { final state = this.state; try { if (state is BBMLoaded) { await kendaraanRepository.addedKendaraan(event.kendaraanModel); List dataKendaraan = state.kendaraan; event.kendaraanModel.id = state.kendaraan.length + 1; dataKendaraan.add(event.kendaraanModel); List dataTransaksi = state.transaksi; List dataTransaksiThisMonth = await transaksiRepository.loadTransaksiThisMonth( DateFormat("yyyy-MM-dd") .parse(DateTime.now().toString()) .toString()); emit( BBMLoaded(dataKendaraan, dataTransaksi, dataTransaksiThisMonth), ); } } catch (e) { emit(BBMError(message: "Something Error, ${e}, We Will Fix it")); } } Future _onBBMKendaraanUpdated( BBMDataKendaraanUpdated event, Emitter emit, ) async { final state = this.state; try { if (state is BBMLoaded) { await kendaraanRepository.updateDataKendaraan(event.kendaraanModel); List dataKendaraan = state.kendaraan; // event.kendaraanModel.id = state.kendaraan.length + 1; // dataKendaraan.add(event.kendaraanModel); // dataKendaraan.removeWhere((element) => element.id == event.kendaraanModel.id); dataKendaraan[dataKendaraan.indexWhere((element) => element.id == event.kendaraanModel.id)] = event.kendaraanModel; List dataTransaksi = state.transaksi; List dataTransaksiThisMonth = await transaksiRepository.loadTransaksiThisMonth( DateFormat("yyyy-MM-dd") .parse(DateTime.now().toString()) .toString()); emit( BBMLoaded(dataKendaraan, dataTransaksi, dataTransaksiThisMonth), ); } } catch (e) { emit(BBMError(message: "Something Error, ${e}, We Will Fix it")); } } Future _onBBMStarted( BBMStarted event, Emitter emit, ) async { try { List dataKendaraan = await kendaraanRepository.loadKendaraan(); List dataTransaksi = await transaksiRepository.loadTransaksi(); List dataTransaksiThisMonth = await transaksiRepository.loadTransaksiThisMonth( DateFormat("yyyy-MM-dd") .parse(DateTime.now().toString()) .toString()); emit(BBMLoaded(dataKendaraan, dataTransaksi, dataTransaksiThisMonth)); } catch (e) { print("hit here = " + e.toString()); emit(BBMError(message: "Something Error, ${e}, We Will Fix it")); } } Future _onBBMInsertTransaksi( BBMInsertTransaksion event, Emitter emit, ) async { try { final state = this.state; if (state is BBMLoaded) { await transaksiRepository.insertTransaksi(event.transaksi); for (PhotoModel element in event.photo) { await transaksiRepository.insertPhoto(element); } List dataKendaraan = await kendaraanRepository.loadKendaraan(); List dataTransaksi = state.transaksi; event.transaksi.id = dataTransaksi.length + 1; dataTransaksi.add(event.transaksi); // await transaksiRepository.loadTransaksi(); List dataTransaksiThisMonth = state.transaksiThisMonth; // await transaksiRepository.loadTransaksiThisMonth( // DateFormat("yyyy-MM-dd") // .parse(DateTime.now().toString()) // .toString()); // state.transaksiThisMonth; var data = event.transaksi; TransaksiPerMonthModel dtIni = new TransaksiPerMonthModel( totalLiter: double.parse(data.totalLiter), totalBayar: data.totalBayar, kendaraanId: data.kendaraanId, tanggalTransaksi: data.tanggalTransaksi, ); if (data.tanggalTransaksi.month == DateTime.now().month) { int i = 0; dataTransaksiThisMonth.forEach((element) { if (element.tanggalTransaksi.day == dtIni.tanggalTransaksi.day) { element.totalBayar += dtIni.totalBayar; element.totalLiter += dtIni.totalLiter; state.transaksiThisMonth[i].totalBayar += element.totalBayar; state.transaksiThisMonth[i].totalLiter += element.totalLiter; } else { dataTransaksiThisMonth.add(dtIni); } }); } emit(BBMLoaded(dataKendaraan, dataTransaksi, dataTransaksiThisMonth)); } } catch (e) { emit(BBMError(message: "Something Error, ${e}, We Will Fix it")); } } }