You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

168 lines
4.3 KiB

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<Order> orders = <Order>[].obs;
late RxList<Map<String, dynamic>> orderItems = <Map<String, dynamic>>[].obs;
late RxList<Order> filteredOrders = <Order>[].obs;
late RxList<String> workDays = <String>[].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<void> fetchOrders() async {
try {
final orderHistory = await _orderDatabase.getOrderHistory();
orders.value = orderHistory;
} catch (e) {
// Handle the error
}
}
Future<void> fetchOrderItems(int orderId) async {
final items = await _orderDatabase.getOrderItems(orderId);
orderItems.value = items;
}
Future<void> refreshOrders() async {
final newOrders = await _orderDatabase.getOrderHistory();
orders.value = newOrders;
}
Future<void> fetchWorkDays() async {
try {
final workDates = await WorkDatabase.instance.getDatesDesc();
workDays.value = workDates;
} catch (e) {
print(e);
// Handle the error
}
}
List<DateTime?> getDistinctDates() {
final currentDate = DateTime.now();
final dates = [...orders.map((order) => order.startDate), currentDate]
.where((date) => date != null)
.toList();
return dates.toSet().toList();
}
List<Order> filterOrdersByDateRange(DateTime startDate) {
final filteredList = orders
.where((order) => order.startDate != null && order.startDate!.isAtSameMomentAs(startDate))
.toList();
filteredOrders.value = filteredList;
return filteredList;
}
Future<List<Order>> 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<RxDouble> 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<Map<String, int>> getProductQuantitiesByDate(DateTime date) async {
try {
return await _orderDatabase.getProductQuantitiesByDate(date);
} catch (e) {
print(e);
return {};
}
}
Future<Map<String, int>> getProductQuantitiesByMonth(DateTime date) async {
try {
return await _orderDatabase.getProductQuantitiesByMonth(date);
} catch (e) {
print(e);
return {};
}
}
Future<List<Order>> getOrdersByMonth(DateTime date) async {
try {
final ordersByMonth = await _orderDatabase.getOrdersByMonth(date);
print("ma");
return ordersByMonth;
} catch (e) {
print(e);
return [];
}
}
Future<List<Order>> getOrdersByYear(DateTime date) async {
try {
final ordersByYear = await _orderDatabase.getOrdersByYear(date);
return ordersByYear;
} catch (e) {
print(e);
return [];
}
}
Future<List<Order>> getOrdersByWeek(int week) async {
try {
final ordersByWeek = await _orderDatabase.getOrdersByWeekNumber(week);
return ordersByWeek;
} catch (e) {
print(e);
return [];
}
}
Future<int> getOrderCountByMonth(DateTime month) async {
List<Order> orders = await getOrdersByMonth(month);
int orderCount = orders.length;
orderQuantity.value = orderCount;
return orderCount;
}
}