From 6cd9fbe57ba7bade769745e39eb64d10f3fe9eff Mon Sep 17 00:00:00 2001 From: Vaibhav Surve Date: Sat, 13 Dec 2025 14:36:54 +0530 Subject: [PATCH] improved logic --- .../daily_task_planning_controller.dart | 27 +++++++++---------- lib/helpers/services/api_service.dart | 1 - .../assign_task_bottom_sheet .dart | 8 +++--- .../taskPlanning/daily_task_planning.dart | 13 +-------- 4 files changed, 16 insertions(+), 33 deletions(-) diff --git a/lib/controller/task_planning/daily_task_planning_controller.dart b/lib/controller/task_planning/daily_task_planning_controller.dart index 8ebd877..33cc9b2 100644 --- a/lib/controller/task_planning/daily_task_planning_controller.dart +++ b/lib/controller/task_planning/daily_task_planning_controller.dart @@ -27,6 +27,7 @@ class DailyTaskPlanningController extends GetxController { RxMap buildingLoadingStates = {}.obs; final Set buildingsWithDetails = {}; + RxMap todaysAssignedMap = {}.obs; @override void onInit() { super.onInit(); @@ -72,6 +73,8 @@ class DailyTaskPlanningController extends GetxController { required int plannedTask, required String description, required List taskTeam, + required String buildingId, + required String projectId, DateTime? assignmentDate, String? organizationId, String? serviceId, @@ -93,6 +96,9 @@ class DailyTaskPlanningController extends GetxController { if (response == true) { logSafe("Task assigned successfully", level: LogLevel.info); + await fetchBuildingInfra(buildingId, projectId, serviceId); + Get.back(); + showAppSnackbar( title: "Success", message: "Task assigned successfully!", @@ -164,23 +170,19 @@ class DailyTaskPlanningController extends GetxController { level: LogLevel.error, error: e, stackTrace: stack); } finally { isFetchingTasks.value = false; - update(); + update(); // dailyTasks is non-reactive } } - /// Fetch full infra for a single building (floors, workAreas, workItems). - /// Called lazily when user expands a building in the UI. + /// Fetch full infra for a single building (lazy) Future fetchBuildingInfra( String buildingId, String projectId, String? serviceId) async { if (buildingId.isEmpty) return; - // mark loading buildingLoadingStates.putIfAbsent(buildingId, () => true.obs); - buildingLoadingStates[buildingId]!.value = true; - update(); + buildingLoadingStates[buildingId]!.value = true; // Rx change is enough try { - // Re-use getInfraDetails and find the building entry for the requested buildingId final infraResponse = await ApiService.getInfraDetails(projectId, serviceId: serviceId); final infraData = infraResponse?['data'] as List? ?? []; @@ -196,7 +198,6 @@ class DailyTaskPlanningController extends GetxController { return; } - // Build floors & workAreas for this building final building = Building( id: buildingJson['id'], name: buildingJson['buildingName'], @@ -211,7 +212,7 @@ class DailyTaskPlanningController extends GetxController { return WorkArea( id: areaJson['id'], areaName: areaJson['areaName'], - workItems: [], // will populate later + workItems: [], ); }).toList(), ); @@ -220,7 +221,6 @@ class DailyTaskPlanningController extends GetxController { completedWork: (buildingJson['completedWork'] as num?)?.toDouble() ?? 0, ); - // For each workArea, fetch its work items and populate await Future.wait( building.floors.expand((f) => f.workAreas).map((area) async { try { @@ -255,7 +255,6 @@ class DailyTaskPlanningController extends GetxController { } })); - // Merge/replace the building into dailyTasks bool merged = false; for (var t in dailyTasks) { final idx = t.buildings @@ -267,7 +266,6 @@ class DailyTaskPlanningController extends GetxController { } } if (!merged) { - // If not present, add a new TaskPlanningDetailsModel wrapper (fallback) dailyTasks.add(TaskPlanningDetailsModel( id: building.id, name: building.name, @@ -280,7 +278,6 @@ class DailyTaskPlanningController extends GetxController { )); } - // Mark as loaded buildingsWithDetails.add(buildingId.toString()); } catch (e, stack) { logSafe("Error fetching infra for building $buildingId", @@ -288,7 +285,7 @@ class DailyTaskPlanningController extends GetxController { } finally { buildingLoadingStates.putIfAbsent(buildingId, () => false.obs); buildingLoadingStates[buildingId]!.value = false; - update(); + update(); // dailyTasks mutated } } @@ -361,7 +358,7 @@ class DailyTaskPlanningController extends GetxController { } } finally { isFetchingEmployees.value = false; - update(); + // no update(): RxLists/RxBools notify observers } } } diff --git a/lib/helpers/services/api_service.dart b/lib/helpers/services/api_service.dart index 59db63f..c21ea8e 100644 --- a/lib/helpers/services/api_service.dart +++ b/lib/helpers/services/api_service.dart @@ -2075,7 +2075,6 @@ class ApiService { final parsed = _parseAndDecryptResponse(response, label: "Assign Daily Task", returnFullResponse: true); if (parsed != null && parsed['success'] == true) { - Get.back(); // Retaining Get.back() as per original logic return true; } return false; diff --git a/lib/model/dailyTaskPlanning/assign_task_bottom_sheet .dart b/lib/model/dailyTaskPlanning/assign_task_bottom_sheet .dart index 0757a40..cd16993 100644 --- a/lib/model/dailyTaskPlanning/assign_task_bottom_sheet .dart +++ b/lib/model/dailyTaskPlanning/assign_task_bottom_sheet .dart @@ -82,10 +82,6 @@ class _AssignTaskBottomSheetState extends State { serviceId: selectedService?.id, organizationId: selectedOrganization?.id, ); - await controller.fetchTaskData( - selectedProjectId, - serviceId: selectedService?.id, - ); } @override @@ -421,8 +417,10 @@ class _AssignTaskBottomSheetState extends State { workItemId: widget.workItemId, plannedTask: target.toInt(), description: description, - taskTeam: selectedTeam.map((e) => e.id).toList(), // pass IDs + taskTeam: selectedTeam.map((e) => e.id).toList(), assignmentDate: widget.assignmentDate, + buildingId: widget.buildingName, + projectId: selectedProjectId!, organizationId: selectedOrganization?.id, serviceId: selectedService?.id, ); diff --git a/lib/view/taskPlanning/daily_task_planning.dart b/lib/view/taskPlanning/daily_task_planning.dart index d30f251..a184b6e 100644 --- a/lib/view/taskPlanning/daily_task_planning.dart +++ b/lib/view/taskPlanning/daily_task_planning.dart @@ -492,18 +492,7 @@ class _DailyTaskPlanningScreenState extends State ), ); - final projectId = - widget.projectId; - if (projectId.isNotEmpty) { - await dailyTaskPlanningController - .fetchTaskData( - projectId, - serviceId: - serviceController - .selectedService - ?.id, - ); - } + }), ], ),