53 lines
1.7 KiB
Dart
53 lines
1.7 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/model/attendance/organization_per_project_list_model.dart';
|
|
|
|
class OrganizationController extends GetxController {
|
|
/// List of organizations assigned to the selected project
|
|
List<Organization> organizations = [];
|
|
|
|
/// Currently selected organization (reactive)
|
|
Rxn<Organization> selectedOrganization = Rxn<Organization>();
|
|
|
|
/// Loading state for fetching organizations
|
|
final isLoadingOrganizations = false.obs;
|
|
|
|
/// Fetch organizations assigned to a given project
|
|
Future<void> fetchOrganizations(String projectId) async {
|
|
try {
|
|
isLoadingOrganizations.value = true;
|
|
|
|
final response = await ApiService.getAssignedOrganizations(projectId);
|
|
if (response != null && response.data.isNotEmpty) {
|
|
organizations = response.data;
|
|
logSafe("Organizations fetched: ${organizations.length}");
|
|
} else {
|
|
organizations = [];
|
|
logSafe("No organizations found for project $projectId",
|
|
level: LogLevel.warning);
|
|
}
|
|
} catch (e, stackTrace) {
|
|
logSafe("Failed to fetch organizations: $e",
|
|
level: LogLevel.error, error: e, stackTrace: stackTrace);
|
|
organizations = [];
|
|
} finally {
|
|
isLoadingOrganizations.value = false;
|
|
}
|
|
}
|
|
|
|
/// Select an organization
|
|
void selectOrganization(Organization? org) {
|
|
selectedOrganization.value = org;
|
|
}
|
|
|
|
/// Clear the selection (set to "All Organizations")
|
|
void clearSelection() {
|
|
selectedOrganization.value = null;
|
|
}
|
|
|
|
/// Current selection name for UI
|
|
String get currentSelection =>
|
|
selectedOrganization.value?.name ?? "All Organizations";
|
|
}
|