import 'package:get/get.dart'; import '../Models/Order.dart'; import '../Services/OrderDatabase.dart'; import '../Services/WorkDatabase.dart'; class HistoryController extends GetxController { final OrderDatabase _orderDatabase = OrderDatabase.instance; final WorkDatabase _workDatabase = WorkDatabase.instance; final RxList orders = [].obs; late RxList> orderItems = >[].obs; late RxList filteredOrders = [].obs; late RxList workDays = [].obs; RxDouble totalSum = RxDouble(0.0); RxInt orderQuantity = RxInt(0); @override void onInit() { super.onInit(); // Initialize databases _orderDatabase.initDatabase(); _workDatabase.initDatabase(); // Fetch orders and work days fetchOrders(); fetchWorkDays(); getTotalSumOrdersByMonth(DateTime.now()); getOrdersByMonth(DateTime.now()); getOrderCountByMonth(DateTime.now()); } Future fetchOrders() async { try { final orderHistory = await _orderDatabase.getOrderHistory(); orders.value = orderHistory; } catch (e) { // Handle the error } } Future fetchOrderItems(int orderId) async { final items = await _orderDatabase.getOrderItems(orderId); orderItems.value = items; } Future refreshOrders() async { final newOrders = await _orderDatabase.getOrderHistory(); orders.value = newOrders; } Future fetchWorkDays() async { try { final workDates = await WorkDatabase.instance.getDatesDesc(); workDays.value = workDates; } catch (e) { print(e); // Handle the error } } List getDistinctDates() { final currentDate = DateTime.now(); final dates = [...orders.map((order) => order.startDate), currentDate] .where((date) => date != null) .toList(); return dates.toSet().toList(); } List filterOrdersByDateRange(DateTime startDate) { final filteredList = orders .where((order) => order.startDate != null && order.startDate!.isAtSameMomentAs(startDate)) .toList(); filteredOrders.value = filteredList; return filteredList; } Future> getOrdersByStartDate(DateTime startDate) async { try { final ordersByStartDate = await _orderDatabase.getOrdersByStartDate(startDate); return ordersByStartDate; } catch (e) { print(e); return []; } } double getTotalSumOrdersByStartDate(DateTime startDate) { final filteredOrders = filterOrdersByDateRange(startDate); double totalSum = filteredOrders.fold(0, (sum, order) => sum + order.totalPrice); return totalSum; } Future getTotalSumOrdersByMonth(DateTime date) async { final filteredOrders = await getOrdersByMonth(date); double totalsum = filteredOrders.fold(0, (sum, order) => sum + order.totalPrice); totalSum.value = totalsum; // print(totalSum.value); return totalSum; } Future> getProductQuantitiesByDate(DateTime date) async { try { return await _orderDatabase.getProductQuantitiesByDate(date); } catch (e) { print(e); return {}; } } Future> getProductQuantitiesByMonth(DateTime date) async { try { return await _orderDatabase.getProductQuantitiesByMonth(date); } catch (e) { print(e); return {}; } } Future> getOrdersByMonth(DateTime date) async { try { final ordersByMonth = await _orderDatabase.getOrdersByMonth(date); print("ma"); return ordersByMonth; } catch (e) { print(e); return []; } } Future> getOrdersByYear(DateTime date) async { try { final ordersByYear = await _orderDatabase.getOrdersByYear(date); return ordersByYear; } catch (e) { print(e); return []; } } Future> getOrdersByWeek(int week) async { try { final ordersByWeek = await _orderDatabase.getOrdersByWeekNumber(week); return ordersByWeek; } catch (e) { print(e); return []; } } Future getOrderCountByMonth(DateTime month) async { List orders = await getOrdersByMonth(month); int orderCount = orders.length; orderQuantity.value = orderCount; return orderCount; } }