marco.pms.mobileapp/lib/controller/dashboard/dashboard_controller.dart
Vaibhav Surve e6d05e247e Refactor logging implementation across controllers and services
- Replaced instances of the Logger package with a custom appLogger for consistent logging.
- Introduced app_logger.dart to manage logging with file output and storage permissions.
- Updated all controllers (e.g., DashboardController, EmployeesScreenController, etc.) to use appLogger for logging messages.
- Ensured that logging messages are appropriately categorized (info, warning, error) throughout the application.
- Implemented a file logging mechanism to store logs in a designated directory.
- Cleaned up old log files to maintain only the most recent logs.
2025-06-24 13:11:22 +05:30

99 lines
2.6 KiB
Dart

import 'package:get/get.dart';
import 'package:marco/helpers/services/app_logger.dart';
import 'package:marco/helpers/services/api_service.dart';
import 'package:marco/controller/project_controller.dart';
class DashboardController extends GetxController {
// Observables
final RxList<Map<String, dynamic>> roleWiseData =
<Map<String, dynamic>>[].obs;
final RxBool isLoading = false.obs;
final RxString selectedRange = '15D'.obs;
final RxBool isChartView = true.obs;
// Inject the ProjectController
final ProjectController projectController = Get.find<ProjectController>();
@override
void onInit() {
super.onInit();
// Log to verify order of controller initialization
appLogger.i('DashboardController initialized with project ID: ${projectController.selectedProjectId.value}');
if (projectController.selectedProjectId.value.isNotEmpty) {
fetchRoleWiseAttendance();
}
// React to project change
ever<String>(projectController.selectedProjectId, (id) {
if (id.isNotEmpty) {
appLogger.i('Project changed to $id, fetching attendance');
fetchRoleWiseAttendance();
}
});
// React to range change
ever(selectedRange, (_) {
fetchRoleWiseAttendance();
});
}
int get rangeDays => _getDaysFromRange(selectedRange.value);
int _getDaysFromRange(String range) {
switch (range) {
case '15D':
return 15;
case '30D':
return 30;
case '7D':
default:
return 7;
}
}
void updateRange(String range) {
selectedRange.value = range;
}
void toggleChartView(bool isChart) {
isChartView.value = isChart;
}
Future<void> refreshDashboard() async {
await fetchRoleWiseAttendance();
}
Future<void> fetchRoleWiseAttendance() async {
final String projectId = projectController.selectedProjectId.value;
if (projectId.isEmpty) {
appLogger.w('Project ID is empty, skipping API call.');
return;
}
try {
isLoading.value = true;
final List<dynamic>? response =
await ApiService.getDashboardAttendanceOverview(projectId, rangeDays);
if (response != null) {
roleWiseData.value =
response.map((e) => Map<String, dynamic>.from(e)).toList();
appLogger.i('Attendance overview fetched successfully.');
} else {
appLogger.e('Failed to fetch attendance overview: response is null.');
roleWiseData.clear();
}
} catch (e, st) {
appLogger.e('Error fetching attendance overview', error: e, stackTrace: st);
roleWiseData.clear();
} finally {
isLoading.value = false;
}
}
}