From 6a42e52d87437035c4815f9bfb98e996e1918a53 Mon Sep 17 00:00:00 2001 From: PGAN-MIS Date: Wed, 20 Sep 2023 09:35:34 +0800 Subject: [PATCH] assign area barangay area type add response with bloc --- .../assign_area/assign_area_bloc.dart | 82 +++++++++++-- .../assign_area/assign_area_event.dart | 1 + lib/model/location/barangay2.dart | 41 +++++++ lib/model/profile/assigned_area.dart | 2 +- .../assign_area/assign_area_screen.dart | 109 +++++++++--------- 5 files changed, 165 insertions(+), 70 deletions(-) create mode 100644 lib/model/location/barangay2.dart diff --git a/lib/bloc/rbac/rbac_operations/assign_area/assign_area_bloc.dart b/lib/bloc/rbac/rbac_operations/assign_area/assign_area_bloc.dart index 10c7aff..367d466 100644 --- a/lib/bloc/rbac/rbac_operations/assign_area/assign_area_bloc.dart +++ b/lib/bloc/rbac/rbac_operations/assign_area/assign_area_bloc.dart @@ -1,8 +1,10 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; +import 'package:unit2/model/location/barangay.dart'; import 'package:unit2/model/rbac/assigned_role.dart'; import 'package:unit2/model/rbac/rbac.dart'; import 'package:unit2/sevices/roles/rbac_operations/assigned_area_services.dart'; +import '../../../../model/location/barangay2.dart'; import '../../../../model/profile/assigned_area.dart'; import '../../../../model/profile/basic_information/primary-information.dart'; import '../../../../sevices/roles/rbac_operations/role_assignment_services.dart'; @@ -41,7 +43,10 @@ class AssignAreaBloc extends Bloc { roles.add(role.role!); } emit(AssignedAreaLoadedState( - userAssignedAreas: userAssignedAreas, fullname: fullname!,roles: roles,userId: id)); + userAssignedAreas: userAssignedAreas, + fullname: fullname!, + roles: roles, + userId: id)); } else { id = 0; emit(UserNotExistError()); @@ -50,22 +55,70 @@ class AssignAreaBloc extends Bloc { emit(AssignAreaErorState(message: e.toString())); } }); - on((event,emit)async{ - try{ - emit(AssignAreaLoadingState()); - Map response = await RbacAssignedAreaServices.instance.add(userId: event.userId, roleId: event.roleId, areaTypeId: event.areaTypeId, areaId: event.areaId); - if(response["success"]){ - emit(AssignAreaAddedState(response: response)); - }else{ - emit(AssignAreaAddedState(response: response)); + on((event, emit) async { + // try { + emit(AssignAreaLoadingState()); + Map response = await RbacAssignedAreaServices.instance + .add( + userId: event.userId, + roleId: event.roleId, + areaTypeId: event.areaTypeId, + areaId: event.areaId); + if (response["success"]) { + UserAssignedArea newAssignArea = userAssignedAreas.firstWhere( + (element) => + element.assignedRole!.role!.id == event.roleId && + element.assignedRole!.user!.id == event.userId); + userAssignedAreas.removeWhere((element) => + element.assignedRole!.role!.id == event.roleId && + element.assignedRole!.user!.id == event.userId); + ////barangay + if (event.areaTypeId == 1) { + List newAreas = []; + for (var area in response['data']) { + for (var assignedArea in area['assigned_area']) { + var newArea = {}; + newArea.addAll({"id": assignedArea['id']}); + newArea.addAll({'isactive': assignedArea['isactive']}); + + Barangay2 newBarangay = Barangay2.fromJson(assignedArea['area']); + + newArea.addAll({ + 'area': { + "brgycode": newBarangay.brgycode, + "brgydesc": newBarangay.brgydesc, + "citymuncode": newBarangay.citymuncode + } + }); + + newAreas.add(newArea); + } + } + newAssignArea.assignedArea = newAreas; + userAssignedAreas.add(newAssignArea); + //// purok } - }catch(e){ - emit(AssignAreaErorState(message: e.toString())); + if (event.areaTypeId == 2) { + //// station + } + if (event.areaTypeId == 4) { + ////agency + } + if (event.areaTypeId == 3) {} + emit(AssignAreaAddedState(response: response)); + } else { + emit(AssignAreaAddedState(response: response)); } + // } catch (e) { + // emit(AssignAreaErorState(message: e.toString())); + // } }); on((event, emit) async { emit(AssignedAreaLoadedState( - userAssignedAreas: userAssignedAreas, fullname: fullname!,roles: roles,userId: event.userId)); + userAssignedAreas: userAssignedAreas, + fullname: fullname!, + roles: roles, + userId: event.userId)); }); on((event, emit) async { emit(AssignAreaLoadingState()); @@ -73,6 +126,11 @@ class AssignAreaBloc extends Bloc { bool success = await RbacAssignedAreaServices.instance .deleteAssignedArea(areaId: event.areaId); if (success) { + for (var area in userAssignedAreas) { + area.assignedArea.removeWhere((var a) { + return a['id'] == event.areaId; + }); + } emit(AssignedAreaDeletedState(success: success)); } else { emit(AssignedAreaDeletedState(success: success)); diff --git a/lib/bloc/rbac/rbac_operations/assign_area/assign_area_event.dart b/lib/bloc/rbac/rbac_operations/assign_area/assign_area_event.dart index 3c3817d..6cee9b0 100644 --- a/lib/bloc/rbac/rbac_operations/assign_area/assign_area_event.dart +++ b/lib/bloc/rbac/rbac_operations/assign_area/assign_area_event.dart @@ -41,6 +41,7 @@ class AddAssignArea extends AssignAreaEvent { final int roleId; final int areaTypeId; final String areaId; + const AddAssignArea( {required this.areaId, required this.areaTypeId, diff --git a/lib/model/location/barangay2.dart b/lib/model/location/barangay2.dart new file mode 100644 index 0000000..76667bf --- /dev/null +++ b/lib/model/location/barangay2.dart @@ -0,0 +1,41 @@ +// To parse this JSON data, do +// +// final barangay = barangayFromJson(jsonString); + +import 'package:meta/meta.dart'; +import 'dart:convert'; + +import 'city.dart'; +import 'provinces.dart'; + +Barangay2 barangayFromJson(String str) => Barangay2.fromJson(json.decode(str)); + +String barangayToJson(Barangay2 data) => json.encode(data.toJson()); + +class Barangay2 { + Barangay2({ + required this.brgycode, + required this.brgydesc, + required this.citymuncode, + }); + + final String? brgycode; + final String? brgydesc; + final String? citymuncode; + + factory Barangay2.fromJson(Map json) => Barangay2( + brgycode: json["brgycode"], + brgydesc: json["brgydesc"], + citymuncode: json['citymuncode'] + ); + + Map toJson() => { + "brgycode": brgycode, + "brgydesc": brgydesc, + "citymuncode": citymuncode + }; +} + + + + diff --git a/lib/model/profile/assigned_area.dart b/lib/model/profile/assigned_area.dart index e4424b2..d2d9307 100644 --- a/lib/model/profile/assigned_area.dart +++ b/lib/model/profile/assigned_area.dart @@ -6,7 +6,7 @@ import '../roles/pass_check/assign_role_area_type.dart'; class UserAssignedArea { final AssignedRole? assignedRole; final AssignRoleAreaType? assignedRoleAreaType; - final dynamic assignedArea; + dynamic assignedArea; UserAssignedArea({ required this.assignedRole, diff --git a/lib/screens/superadmin/assign_area/assign_area_screen.dart b/lib/screens/superadmin/assign_area/assign_area_screen.dart index c4a3247..0c8699d 100644 --- a/lib/screens/superadmin/assign_area/assign_area_screen.dart +++ b/lib/screens/superadmin/assign_area/assign_area_screen.dart @@ -1,7 +1,5 @@ import 'package:auto_size_text/auto_size_text.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/src/widgets/framework.dart'; -import 'package:flutter/src/widgets/placeholder.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:flutter_progress_hud/flutter_progress_hud.dart'; @@ -17,24 +15,15 @@ import 'package:unit2/model/location/barangay.dart'; import 'package:unit2/model/location/city.dart'; import 'package:unit2/model/location/provinces.dart'; import 'package:unit2/model/location/purok.dart'; -import 'package:unit2/model/location/region.dart'; -import 'package:unit2/model/login_data/user_info/assigned_area.dart'; -import 'package:unit2/model/profile/assigned_area.dart'; import 'package:unit2/model/rbac/rbac.dart'; import 'package:unit2/model/rbac/rbac_station.dart'; -import 'package:unit2/model/roles/pass_check/agency_area_type.dart'; -import 'package:unit2/model/roles/pass_check/purok_assign_area.dart'; -import 'package:unit2/model/roles/pass_check/station_assign_area.dart'; import 'package:unit2/model/utils/agency.dart'; -import 'package:unit2/model/utils/category.dart'; import 'package:unit2/sevices/roles/rbac_operations/station_services.dart'; -import 'package:unit2/test_data.dart'; import 'package:unit2/theme-data.dart/btn-style.dart'; import 'package:unit2/theme-data.dart/colors.dart'; import 'package:unit2/theme-data.dart/form-style.dart'; import 'package:unit2/utils/alerts.dart'; import 'package:unit2/utils/formatters.dart'; -import 'package:unit2/utils/global_context.dart'; import 'package:unit2/utils/location_utilities.dart'; import 'package:unit2/utils/profile_utilities.dart'; import 'package:unit2/widgets/Leadings/add_leading.dart'; @@ -60,7 +49,6 @@ class _RbacAssignedAreaScreenState extends State { bool cityAsyncCall = false; bool barangayAsyncCall = false; bool purokAsyncCall = false; - List userAssignedAreas = []; final bloc = BlocProvider.of(context); int? areaTypeId; int? roleId; @@ -76,9 +64,7 @@ class _RbacAssignedAreaScreenState extends State { List cities = []; List barangays = []; List puroks = []; - Province? selectedProvince; CityMunicipality? selectedMunicipality; - Barangay? selectedBarangay; return Scaffold( appBar: AppBar( backgroundColor: primary, @@ -152,7 +138,7 @@ class _RbacAssignedAreaScreenState extends State { bloc.add(CallErrorState( message: e.toString())); } - ////=========== + //// purok } else if (e.name!.toLowerCase() == "purok president") { @@ -206,7 +192,7 @@ class _RbacAssignedAreaScreenState extends State { "process server") { try { areaType = "station"; - areaId = "4"; + areaTypeId = 4; setState(() { agencyAsyncCall = true; }); @@ -376,10 +362,23 @@ class _RbacAssignedAreaScreenState extends State { )), ////agency suggestion tap onSuggestionTap: - (agency) { + (agency) async { setState(() { - agencyFocusNode - .unfocus(); + stationAsyncCall = + true; + }); + stations = await RbacStationServices + .instance + .getStations( + agencyId: agency + .item! + .id + .toString()); + agencyFocusNode + .unfocus(); + setState(() { + stationAsyncCall = + false; }); }, emptyWidget: const Text( @@ -415,7 +414,9 @@ class _RbacAssignedAreaScreenState extends State { ); }).toList(), onChanged: - (RbacStation? e) {}, + (RbacStation? e) { + areaId = e!.code; + }, validator: FormBuilderValidators .required( @@ -458,8 +459,6 @@ class _RbacAssignedAreaScreenState extends State { onChanged: (Province? province) async { setState(() { - selectedProvince = - province; cityAsyncCall = true; }); @@ -645,8 +644,7 @@ class _RbacAssignedAreaScreenState extends State { (Province? province) async { setState(() { - selectedProvince = - province; + province; cityAsyncCall = true; }); @@ -736,19 +734,21 @@ class _RbacAssignedAreaScreenState extends State { setState(() { barangayAsyncCall = false; - purokAsyncCall = true; + purokAsyncCall = + true; }); - puroks = await LocationUtils - .instance - .getPurok( - barangay: - barangays[0].code!); + puroks = await LocationUtils + .instance + .getPurok( + barangay: + barangays[0].code!); - setState((){ - purokAsyncCall = false; - }); + setState(() { + purokAsyncCall = + false; + }); }, - + decoration: normalTextFieldStyle( "Municipality*", "Municipality"), @@ -773,7 +773,6 @@ class _RbacAssignedAreaScreenState extends State { ), ////Barangay Expanded( - child: SizedBox( height: 60, child: @@ -784,25 +783,25 @@ class _RbacAssignedAreaScreenState extends State { child: DropdownButtonFormField< Barangay>( - isExpanded: true, - onChanged: - (Barangay? - baragay)async { + onChanged: (Barangay? + baragay) async { areaId = baragay! .code; - setState((){ - purokAsyncCall= true; + setState(() { + purokAsyncCall = + true; }); - puroks = await LocationUtils - .instance - .getPurok( - barangay: - barangays[0].code!); - setState((){ - purokAsyncCall = false; + puroks = await LocationUtils + .instance + .getPurok( + barangay: + barangays[0].code!); + setState(() { + purokAsyncCall = + false; }); }, decoration: @@ -815,7 +814,6 @@ class _RbacAssignedAreaScreenState extends State { errorText: "This field is required"), - items: barangays .isEmpty ? [] @@ -829,8 +827,6 @@ class _RbacAssignedAreaScreenState extends State { child: Text(barangay.description!)); }).toList(), - - ), ), ), @@ -838,7 +834,7 @@ class _RbacAssignedAreaScreenState extends State { const SizedBox( height: 12, ), - ////Purok + ////Purok Expanded( child: SizedBox( height: 60, @@ -851,11 +847,10 @@ class _RbacAssignedAreaScreenState extends State { DropdownButtonFormField< Purok>( isExpanded: true, - onChanged: - (Purok? - purok) { + onChanged: (Purok? + purok) { areaId = - purok!.code; + purok!.code; }, decoration: normalTextFieldStyle( @@ -985,7 +980,7 @@ class _RbacAssignedAreaScreenState extends State { assignedAreas = {}; roles = state.roles; userId = state.userId; - userAssignedAreas = state.userAssignedAreas; + if (state.userAssignedAreas.isNotEmpty) { for (var roleMod in state.userAssignedAreas) { assignedAreas.addAll({