diff --git a/lib/bloc/passo/bulding/additional_item/additional_item_bloc.dart b/lib/bloc/passo/bulding/additional_item/additional_item_bloc.dart index 167c65e..e7aa87a 100644 --- a/lib/bloc/passo/bulding/additional_item/additional_item_bloc.dart +++ b/lib/bloc/passo/bulding/additional_item/additional_item_bloc.dart @@ -27,18 +27,25 @@ class AdditionalItemBloc } }); on((event, emit) async { - http.Response response = - (await AdditionalItemsServices.instance.add(event.items))!; - print(response.body); + emit(AdditionalItemsLoading()); + try { + http.Response response = + (await AdditionalItemsServices.instance.add(event.items))!; + print(response.body); - if (response.statusCode == 201) { - var jsonResponse = jsonDecode(response.body); - AdditionalItems newAdditional = - AdditionalItems.fromJson(jsonResponse['data']); - print(jsonResponse['data']); - globalAdditionalItems.add(newAdditional); + if (response.statusCode == 201) { + var jsonResponse = jsonDecode(response.body); + AdditionalItems newAdditional = + AdditionalItems.fromJson(jsonResponse['data']); + print(jsonResponse['data']); + globalAdditionalItems.add(newAdditional); - emit(AdditionalItemsLoaded(globalAdditionalItems)); + emit(AdditionalItemsLoaded(globalAdditionalItems)); + } else { + emit(AdditionalItemsErrorState('error')); + } + } catch (e) { + emit(AdditionalItemsErrorState(e.toString())); } }); on((event, emit) async { diff --git a/lib/bloc/passo/bulding/property_appraisal/property_appraisal_bloc.dart b/lib/bloc/passo/bulding/property_appraisal/property_appraisal_bloc.dart index e7953c2..10a5fdc 100644 --- a/lib/bloc/passo/bulding/property_appraisal/property_appraisal_bloc.dart +++ b/lib/bloc/passo/bulding/property_appraisal/property_appraisal_bloc.dart @@ -18,7 +18,7 @@ class PropertyAppraisalBloc emit(PropertyAppraisalLoading()); try { final appraisal = await PropertyAppraisalServices.instance.fetch(); - + print(appraisal); emit(PropertyAppraisalLoaded(appraisal)); } catch (e) { emit(PropertyAppraisalErrorState(e.toString())); @@ -26,19 +26,21 @@ class PropertyAppraisalBloc }); on((event, emit) async { final tempID = await SharedPreferences.getInstance(); - - http.Response response = (await PropertyAppraisalServices.instance - .update(event.appraisal, tempID.getInt('tempid')! - 1))!; - - if (response.statusCode == 201) { - var jsonResponse = jsonDecode(response.body); - PropertyAppraisal newAppraisal = - PropertyAppraisal.fromJson(jsonResponse['data']); - print("PA"); - print(newAppraisal); - print(response.statusCode); - - emit(PropertyAppraisalLoaded(newAppraisal)); + emit(PropertyAppraisalLoading()); + try { + http.Response response = (await PropertyAppraisalServices.instance + .update(event.appraisal, tempID.getInt('tempid')! - 1))!; + print('Appraisal'); + print(tempID.getInt('tempid')! - 1); + print(event.appraisal.toJson()); + print(response.body); + if (response.statusCode == 200) { + emit(ShowPropertyAppraisalSuccessAlertState()); + } + } catch (e) { + print('app error'); + print(e.toString()); + emit(ShowPropertyAppraisalErrorAlertState()); } }); } diff --git a/lib/bloc/passo/bulding/property_appraisal/property_appraisal_state.dart b/lib/bloc/passo/bulding/property_appraisal/property_appraisal_state.dart index 2010d45..6a9296b 100644 --- a/lib/bloc/passo/bulding/property_appraisal/property_appraisal_state.dart +++ b/lib/bloc/passo/bulding/property_appraisal/property_appraisal_state.dart @@ -26,3 +26,7 @@ class PropertyAppraisalErrorState extends PropertyAppraisalState { @override List get props => [error]; } + +class ShowPropertyAppraisalErrorAlertState extends PropertyAppraisalState {} + +class ShowPropertyAppraisalSuccessAlertState extends PropertyAppraisalState {} diff --git a/lib/bloc/passo/bulding/property_assessment/property_assessment_bloc.dart b/lib/bloc/passo/bulding/property_assessment/property_assessment_bloc.dart index 9bf078b..80fd6b3 100644 --- a/lib/bloc/passo/bulding/property_assessment/property_assessment_bloc.dart +++ b/lib/bloc/passo/bulding/property_assessment/property_assessment_bloc.dart @@ -18,10 +18,11 @@ class PropertyAssessmentBloc emit(PropertyAssessmentLoading()); try { final tempID = await SharedPreferences.getInstance(); - + print(tempID.getInt('tempid')! - 1); final assessments = await PropertyAssessmentServices.instance - .fetch(tempID.getInt('tempid')! + 1); + .fetch(tempID.getInt('tempid')! - 1); + print(assessments); emit(PropertyAssessmentLoaded(assessments)); } catch (e) { emit(PropertyAssessmentErrorState(e.toString())); diff --git a/lib/bloc/passo/bulding/property_assessment_edit/property_assessment_edit_bloc.dart b/lib/bloc/passo/bulding/property_assessment_edit/property_assessment_edit_bloc.dart index 517d0fb..c09cf14 100644 --- a/lib/bloc/passo/bulding/property_assessment_edit/property_assessment_edit_bloc.dart +++ b/lib/bloc/passo/bulding/property_assessment_edit/property_assessment_edit_bloc.dart @@ -18,8 +18,6 @@ class PropertyAssessmentEditBloc on((event, emit) async { emit(PropertyAssessmentEditLoading()); try { - final tempID = await SharedPreferences.getInstance(); - final assessments = await PropertyAssessmentServices.instance.fetchEdit(event.id); diff --git a/lib/bloc/passo/bulding/property_info/property_info_bloc.dart b/lib/bloc/passo/bulding/property_info/property_info_bloc.dart index 37a75b9..fd49f51 100644 --- a/lib/bloc/passo/bulding/property_info/property_info_bloc.dart +++ b/lib/bloc/passo/bulding/property_info/property_info_bloc.dart @@ -48,6 +48,7 @@ class PropertyInfoBloc extends Bloc { } }); on(((event, emit) async { + emit(PropertyInfoLoading()); final state = this.state; try { http.Response response = (await PropertyInfoService.instance @@ -60,11 +61,17 @@ class PropertyInfoBloc extends Bloc { })); on(((event, emit) async { final state = this.state; + try { http.Response response = (await PropertyInfoService.instance .updateBldg(event.bldg_loc, event.bldg_loc.id))!; print('bldgLoc'); print(response.statusCode); + if (response.statusCode == 200) { + emit(ShowBldgLocSuccessAlertState()); + } else { + emit(ShowBldgLocErrorAlertState()); + } } catch (e) { emit(PropertyInfoErrorState(e.toString())); } @@ -72,11 +79,17 @@ class PropertyInfoBloc extends Bloc { on( (event, emit) async { final state = this.state; + emit(PropertyInfoLoading()); try { http.Response response = (await PropertyInfoService.instance .updateLandRef(event.land_ref, event.land_ref.id))!; print('landref'); print(response.body); + if (response.statusCode == 200) { + emit(ShowLandRefSuccessAlertState()); + } else { + emit(ShowLandRefErrorAlertState()); + } } catch (e) { emit(PropertyInfoErrorState(e.toString())); } @@ -85,11 +98,17 @@ class PropertyInfoBloc extends Bloc { on((event, emit) async { final state = this.state; + emit(PropertyInfoLoading()); try { http.Response response = (await PropertyInfoService.instance .updateGenDesc(event.gen_desc, event.gen_desc.id))!; print('genDesc'); print(response.body); + if (response.statusCode == 200) { + emit(ShowGenDescSuccessAlertState()); + } else { + emit(ShowGenDescErrorAlertState()); + } } catch (e) { emit(PropertyInfoErrorState(e.toString())); } @@ -97,6 +116,7 @@ class PropertyInfoBloc extends Bloc { on((event, emit) async { final state = this.state; + emit(PropertyInfoLoading()); try { final tempID = await SharedPreferences.getInstance(); print(tempID.getInt('tempid')! - 1); @@ -104,9 +124,25 @@ class PropertyInfoBloc extends Bloc { .update(event.data, event.data.id))!; print('struc Material'); print(response.body); + if (response.statusCode == 200) { + emit(ShowStrucMatSuccessAlertState()); + } else { + emit(ShowStrucMatErrorAlertState()); + } } catch (e) { emit(PropertyInfoErrorState(e.toString())); } }); + + on((event, emit) async { + print(event.id); + emit(PropertyInfoLoading()); + http.Response response = + (await PropertyInfoService.instance.remove(event.id)); + print(response.statusCode); + if (response.statusCode == 200) { + emit(BuildingFaasDeletedState(success: true)); + } + }); } } diff --git a/lib/bloc/passo/bulding/property_info/property_info_event.dart b/lib/bloc/passo/bulding/property_info/property_info_event.dart index 0b678c8..36d02d4 100644 --- a/lib/bloc/passo/bulding/property_info/property_info_event.dart +++ b/lib/bloc/passo/bulding/property_info/property_info_event.dart @@ -73,3 +73,16 @@ class UpdateStrucMaterials extends PropertyInfoEvent { @override List get props => [data]; } + +class DeleteBuildingFaas extends PropertyInfoEvent { + final int id; + + const DeleteBuildingFaas({required this.id}); + + @override + List get props => [id]; +} + +class ShowBldgLocErrorAlert extends PropertyInfoEvent {} + +class ShowLandRefErrorAlert extends PropertyInfoEvent {} diff --git a/lib/bloc/passo/bulding/property_info/property_info_state.dart b/lib/bloc/passo/bulding/property_info/property_info_state.dart index b325da5..4de820f 100644 --- a/lib/bloc/passo/bulding/property_info/property_info_state.dart +++ b/lib/bloc/passo/bulding/property_info/property_info_state.dart @@ -24,3 +24,26 @@ class PropertyInfoErrorState extends PropertyInfoState { @override List get props => [error]; } + +class BuildingFaasDeletedState extends PropertyInfoState { + final bool success; + const BuildingFaasDeletedState({required this.success}); + @override + List get props => [success]; +} + +class ShowBldgLocErrorAlertState extends PropertyInfoState {} + +class ShowLandRefErrorAlertState extends PropertyInfoState {} + +class ShowGenDescErrorAlertState extends PropertyInfoState {} + +class ShowStrucMatErrorAlertState extends PropertyInfoState {} + +class ShowStrucMatSuccessAlertState extends PropertyInfoState {} + +class ShowBldgLocSuccessAlertState extends PropertyInfoState {} + +class ShowLandRefSuccessAlertState extends PropertyInfoState {} + +class ShowGenDescSuccessAlertState extends PropertyInfoState {} diff --git a/lib/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart b/lib/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart index b542dbf..8409c00 100644 --- a/lib/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart +++ b/lib/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart @@ -18,7 +18,7 @@ class LandAppraisalBloc extends Bloc { final tempID = await SharedPreferences.getInstance(); print(tempID.getInt('landid')); final additionalItems = - await LandAppraisalServices.instance.fetch(tempID.getInt('tempid')); + await LandAppraisalServices.instance.fetch(tempID.getInt('landid')); globalLandAppraisal .addAll(additionalItems); // Append all items to the list @@ -27,6 +27,19 @@ class LandAppraisalBloc extends Bloc { emit(LandAppraisalErrorState(e.toString())); } }); + on((event, emit) async { + emit(LandAppraisalLoading()); + try { + final additionalItems = + await LandAppraisalServices.instance.fetch(event.id); + globalLandAppraisal.clear(); + globalLandAppraisal + .addAll(additionalItems); // Append all items to the list + emit(LandAppraisalLoaded(globalLandAppraisal)); + } catch (e) { + emit(LandAppraisalErrorState(e.toString())); + } + }); on((event, emit) async { http.Response response = (await LandAppraisalServices.instance.add(event.land_appr))!; diff --git a/lib/bloc/passo/land/land_appraisal/land_appraisal_event.dart b/lib/bloc/passo/land/land_appraisal/land_appraisal_event.dart index 50c1007..a5a90ba 100644 --- a/lib/bloc/passo/land/land_appraisal/land_appraisal_event.dart +++ b/lib/bloc/passo/land/land_appraisal/land_appraisal_event.dart @@ -16,6 +16,16 @@ class LoadLandAppraisal extends LandAppraisalEvent { List get props => [land_appr]; } +class LoadLandAppraisalEdit extends LandAppraisalEvent { + final List land_appr; + final int id; + + const LoadLandAppraisalEdit({required this.land_appr, required this.id}); + + @override + List get props => [land_appr]; +} + class AddLandAppraisal extends LandAppraisalEvent { final LandAppr land_appr; diff --git a/lib/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_bloc.dart b/lib/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_bloc.dart new file mode 100644 index 0000000..355a378 --- /dev/null +++ b/lib/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_bloc.dart @@ -0,0 +1,54 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:unit2/model/passo/land_property_boundaries.dart'; +import 'package:http/http.dart' as http; +import 'package:unit2/sevices/passo/land/land_boundaries.dart'; +part 'land_boundaries_edit_event.dart'; +part 'land_boundaries_edit_state.dart'; + +class LandBoundariesEditBloc + extends Bloc { + LandBoundariesEditBloc() : super(LandBoundariesEditInitial()) { + on((event, emit) async { + emit(LandBoundariesEditLoading()); + try { + final tempID = await SharedPreferences.getInstance(); + + final assessments = + await LandBoundariesService.instance.fetchEdit(event.id); + + emit(LandBoundariesEditLoaded(assessments)); + } catch (e) { + emit(LandBoundariesEditErrorState(e.toString())); + } + }); + // on((event, emit) async { + // http.Response response = (await LandLocationService.instance + // .addEdit(event.land_loc_edit))!; + // print('Assessment'); + // print(response.statusCode); + // print(response.body); + // if (response.statusCode == 201) { + // var jsonResponse = jsonDecode(response.body); + // LandPropertyLoc newAssessment = + // LandPropertyLoc.fromJson(jsonResponse['data']); + + // globalLandLocationEdit = newAssessment; + + // emit(LandLocationEditLoaded(globalLandBoundariesEdit)); + // } + // }); + on((event, emit) async { + http.Response response = (await LandBoundariesService.instance + .updateEdit(event.land_boundaries_edit, event.id))!; + print('landloc edit'); + print(response.statusCode); + print(response.body); + // if (response.statusCode == 201) { + // final faas = await PropertyInfoRepository.getUsers(); + // emit(FaasLoaded(faas)); + // } + }); + } +} diff --git a/lib/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_event.dart b/lib/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_event.dart new file mode 100644 index 0000000..0fb96ef --- /dev/null +++ b/lib/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_event.dart @@ -0,0 +1,41 @@ +part of 'land_boundaries_edit_bloc.dart'; + +class LandBoundariesEditEvent extends Equatable { + const LandBoundariesEditEvent(); + + @override + List get props => []; +} + +class LoadLandBoundariesEdit extends LandBoundariesEditEvent { + final LandPropertyBoundaries land_boundaries_edit; + final int? id; + + const LoadLandBoundariesEdit( + {required this.land_boundaries_edit, required this.id}); + + @override + List get props => [land_boundaries_edit]; +} + +class AddLandBoundariesEdit extends LandBoundariesEditEvent { + final LandPropertyBoundaries land_boundaries_edit; + + const AddLandBoundariesEdit({required this.land_boundaries_edit}); + + @override + List get props => [land_boundaries_edit]; +} + +class UpdateLandBoundariesEdit extends LandBoundariesEditEvent { + // ignore: non_constant_identifier_names + final LandPropertyBoundaries land_boundaries_edit; + final int id; + + // ignore: non_constant_identifier_names + const UpdateLandBoundariesEdit( + {required this.land_boundaries_edit, required this.id}); + + @override + List get props => [land_boundaries_edit]; +} diff --git a/lib/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_state.dart b/lib/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_state.dart new file mode 100644 index 0000000..2fa8ffe --- /dev/null +++ b/lib/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_state.dart @@ -0,0 +1,28 @@ +part of 'land_boundaries_edit_bloc.dart'; + +class LandBoundariesEditState extends Equatable { + const LandBoundariesEditState(); + + @override + List get props => []; +} + +class LandBoundariesEditInitial extends LandBoundariesEditState {} + +class LandBoundariesEditLoading extends LandBoundariesEditState {} + +class LandBoundariesEditLoaded extends LandBoundariesEditState { + LandBoundariesEditLoaded(this.land_boundaries_edit); + final LandPropertyBoundaries land_boundaries_edit; + + @override + List get props => [land_boundaries_edit]; +} + +class LandBoundariesEditErrorState extends LandBoundariesEditState { + LandBoundariesEditErrorState(this.error); + final String error; + + @override + List get props => [error]; +} diff --git a/lib/bloc/passo/land/land_ext_bloc/land_ext_edit_bloc.dart b/lib/bloc/passo/land/land_ext_bloc/land_ext_edit_bloc.dart new file mode 100644 index 0000000..6f781ab --- /dev/null +++ b/lib/bloc/passo/land/land_ext_bloc/land_ext_edit_bloc.dart @@ -0,0 +1,53 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:unit2/model/passo/land_ext.dart'; +import 'package:unit2/sevices/passo/land/land_ext.dart'; +import 'package:http/http.dart' as http; +part 'land_ext_edit_event.dart'; +part 'land_ext_edit_state.dart'; + +class LandExtEditBloc extends Bloc { + LandExtEditBloc() : super(LandExtEditInitial()) { + on((event, emit) async { + emit(LandExtEditLoading()); + try { + final tempID = await SharedPreferences.getInstance(); + + final assessments = await LandExtServices.instance.fetchEdit(event.id); + + emit(LandExtEditLoaded(assessments)); + } catch (e) { + print(e.toString()); + emit(LandExtEditErrorState(e.toString())); + } + }); + // on((event, emit) async { + // http.Response response = (await LandLocationService.instance + // .addEdit(event.land_loc_edit))!; + // print('Assessment'); + // print(response.statusCode); + // print(response.body); + // if (response.statusCode == 201) { + // var jsonResponse = jsonDecode(response.body); + // LandPropertyLoc newAssessment = + // LandPropertyLoc.fromJson(jsonResponse['data']); + + // globalLandLocationEdit = newAssessment; + + // emit(LandLocationEditLoaded(globalLandLocationEdit)); + // } + // }); + on((event, emit) async { + http.Response response = (await LandExtServices.instance + .updateEdit(event.land_ext_edit, event.id))!; + print('landloc edit'); + print(response.statusCode); + print(response.body); + // if (response.statusCode == 201) { + // final faas = await PropertyInfoRepository.getUsers(); + // emit(FaasLoaded(faas)); + // } + }); + } +} diff --git a/lib/bloc/passo/land/land_ext_bloc/land_ext_edit_event.dart b/lib/bloc/passo/land/land_ext_bloc/land_ext_edit_event.dart new file mode 100644 index 0000000..2ea8f87 --- /dev/null +++ b/lib/bloc/passo/land/land_ext_bloc/land_ext_edit_event.dart @@ -0,0 +1,39 @@ +part of 'land_ext_edit_bloc.dart'; + +class LandExtEditEvent extends Equatable { + const LandExtEditEvent(); + + @override + List get props => []; +} + +class LoadLandExtEdit extends LandExtEditEvent { + final LandExt land_ext_edit; + final int? id; + + const LoadLandExtEdit({required this.land_ext_edit, required this.id}); + + @override + List get props => [land_ext_edit]; +} + +class AddLandExtEdit extends LandExtEditEvent { + final LandExt land_ext_edit; + + const AddLandExtEdit({required this.land_ext_edit}); + + @override + List get props => [land_ext_edit]; +} + +class UpdateLandExtEdit extends LandExtEditEvent { + // ignore: non_constant_identifier_names + final LandExt land_ext_edit; + final int id; + + // ignore: non_constant_identifier_names + const UpdateLandExtEdit({required this.land_ext_edit, required this.id}); + + @override + List get props => [land_ext_edit]; +} diff --git a/lib/bloc/passo/land/land_ext_bloc/land_ext_edit_state.dart b/lib/bloc/passo/land/land_ext_bloc/land_ext_edit_state.dart new file mode 100644 index 0000000..30f3e9a --- /dev/null +++ b/lib/bloc/passo/land/land_ext_bloc/land_ext_edit_state.dart @@ -0,0 +1,28 @@ +part of 'land_ext_edit_bloc.dart'; + +class LandExtEditState extends Equatable { + const LandExtEditState(); + + @override + List get props => []; +} + +class LandExtEditInitial extends LandExtEditState {} + +class LandExtEditLoading extends LandExtEditState {} + +class LandExtEditLoaded extends LandExtEditState { + LandExtEditLoaded(this.land_ext_edit); + final LandExt land_ext_edit; + + @override + List get props => [land_ext_edit]; +} + +class LandExtEditErrorState extends LandExtEditState { + LandExtEditErrorState(this.error); + final String error; + + @override + List get props => [error]; +} diff --git a/lib/bloc/passo/land/land_location_edit/land_location_edit_bloc.dart b/lib/bloc/passo/land/land_location_edit/land_location_edit_bloc.dart new file mode 100644 index 0000000..6b8f9ed --- /dev/null +++ b/lib/bloc/passo/land/land_location_edit/land_location_edit_bloc.dart @@ -0,0 +1,59 @@ +import 'dart:convert'; + +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:unit2/model/passo/land_property_loc.dart'; +import 'package:http/http.dart' as http; +import 'package:unit2/sevices/passo/land/land_location.dart'; +part 'land_location_edit_event.dart'; +part 'land_location_edit_state.dart'; + +class LandLocationEditBloc + extends Bloc { + LandPropertyLoc globalLandLocationEdit; + LandLocationEditBloc() + : globalLandLocationEdit = LandPropertyLoc(), + super(LandLocationEditInitial()) { + on((event, emit) async { + emit(LandLocationEditLoading()); + try { + final tempID = await SharedPreferences.getInstance(); + + final assessments = + await LandLocationService.instance.fetchEdit(event.id); + + emit(LandLocationEditLoaded(assessments)); + } catch (e) { + emit(LandLocationEditErrorState(e.toString())); + } + }); + // on((event, emit) async { + // http.Response response = (await LandLocationService.instance + // .addEdit(event.land_loc_edit))!; + // print('Assessment'); + // print(response.statusCode); + // print(response.body); + // if (response.statusCode == 201) { + // var jsonResponse = jsonDecode(response.body); + // LandPropertyLoc newAssessment = + // LandPropertyLoc.fromJson(jsonResponse['data']); + + // globalLandLocationEdit = newAssessment; + + // emit(LandLocationEditLoaded(globalLandLocationEdit)); + // } + // }); + on((event, emit) async { + http.Response response = (await LandLocationService.instance + .updateEdit(event.land_loc_edit, event.id))!; + print('landloc edit'); + print(response.statusCode); + print(response.body); + // if (response.statusCode == 201) { + // final faas = await PropertyInfoRepository.getUsers(); + // emit(FaasLoaded(faas)); + // } + }); + } +} diff --git a/lib/bloc/passo/land/land_location_edit/land_location_edit_event.dart b/lib/bloc/passo/land/land_location_edit/land_location_edit_event.dart new file mode 100644 index 0000000..bc22948 --- /dev/null +++ b/lib/bloc/passo/land/land_location_edit/land_location_edit_event.dart @@ -0,0 +1,39 @@ +part of 'land_location_edit_bloc.dart'; + +class LandLocationEditEvent extends Equatable { + const LandLocationEditEvent(); + + @override + List get props => []; +} + +class LoadLandLocationEdit extends LandLocationEditEvent { + final LandPropertyLoc land_loc_edit; + final int? id; + + const LoadLandLocationEdit({required this.land_loc_edit, required this.id}); + + @override + List get props => [land_loc_edit]; +} + +class AddLandLocationEdit extends LandLocationEditEvent { + final LandPropertyLoc land_loc_edit; + + const AddLandLocationEdit({required this.land_loc_edit}); + + @override + List get props => [land_loc_edit]; +} + +class UpdateLandLocationEdit extends LandLocationEditEvent { + // ignore: non_constant_identifier_names + final LandPropertyLoc land_loc_edit; + final int id; + + // ignore: non_constant_identifier_names + const UpdateLandLocationEdit({required this.land_loc_edit, required this.id}); + + @override + List get props => [land_loc_edit]; +} diff --git a/lib/bloc/passo/land/land_location_edit/land_location_edit_state.dart b/lib/bloc/passo/land/land_location_edit/land_location_edit_state.dart new file mode 100644 index 0000000..97564c8 --- /dev/null +++ b/lib/bloc/passo/land/land_location_edit/land_location_edit_state.dart @@ -0,0 +1,28 @@ +part of 'land_location_edit_bloc.dart'; + +class LandLocationEditState extends Equatable { + const LandLocationEditState(); + + @override + List get props => []; +} + +class LandLocationEditInitial extends LandLocationEditState {} + +class LandLocationEditLoading extends LandLocationEditState {} + +class LandLocationEditLoaded extends LandLocationEditState { + LandLocationEditLoaded(this.land_loc_edit); + final LandPropertyLoc land_loc_edit; + + @override + List get props => [land_loc_edit]; +} + +class LandLocationEditErrorState extends LandLocationEditState { + LandLocationEditErrorState(this.error); + final String error; + + @override + List get props => [error]; +} diff --git a/lib/bloc/passo/land/land_property_assessment/land_property_assessment_bloc.dart b/lib/bloc/passo/land/land_property_assessment/land_property_assessment_bloc.dart index 08d18b0..7abf025 100644 --- a/lib/bloc/passo/land/land_property_assessment/land_property_assessment_bloc.dart +++ b/lib/bloc/passo/land/land_property_assessment/land_property_assessment_bloc.dart @@ -29,6 +29,19 @@ class LandPropertyAssessmentBloc emit(LandPropertyAssessmentErrorState(e.toString())); } }); + on((event, emit) async { + emit(LandPropertyAssessmentLoading()); + try { + final additionalItems = + await LandPropertyAssessmentServices.instance.fetch(event.id); + globalLandPropertyAssessment.clear(); + globalLandPropertyAssessment + .addAll(additionalItems); // Append all items to the list + emit(LandPropertyAssessmentLoaded(globalLandPropertyAssessment)); + } catch (e) { + emit(LandPropertyAssessmentErrorState(e.toString())); + } + }); on((event, emit) async { http.Response response = (await LandPropertyAssessmentServices.instance .add(event.assessment))!; diff --git a/lib/bloc/passo/land/land_property_assessment/land_property_assessment_event.dart b/lib/bloc/passo/land/land_property_assessment/land_property_assessment_event.dart index 7eb84e0..43b56e5 100644 --- a/lib/bloc/passo/land/land_property_assessment/land_property_assessment_event.dart +++ b/lib/bloc/passo/land/land_property_assessment/land_property_assessment_event.dart @@ -17,6 +17,17 @@ class LoadLandPropertyAssessment extends LandPropertyAssessmentEvent { List get props => [assessment]; } +class LoadLandPropertyAssessmentEdit extends LandPropertyAssessmentEvent { + final List assessment; + final int id; + + const LoadLandPropertyAssessmentEdit( + {required this.assessment, required this.id}); + + @override + List get props => [assessment]; +} + class AddLandPropertyAssessment extends LandPropertyAssessmentEvent { final LandPropertyAssessment assessment; diff --git a/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart b/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart index 1abcfdc..9f9ec3f 100644 --- a/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart +++ b/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart @@ -10,6 +10,7 @@ import 'package:unit2/sevices/passo/land/land_boundaries.dart'; import 'package:unit2/sevices/passo/land/land_location.dart'; import 'package:unit2/sevices/passo/land/land_property_owner.dart'; import 'package:http/http.dart' as http; +import 'package:unit2/utils/text_container.dart'; part 'land_property_owner_info_event.dart'; part 'land_property_owner_info_state.dart'; @@ -25,33 +26,39 @@ class LandPropertyOwnerInfoBloc emit(LandErrorState(e.toString())); } }); + on((event, emit) async { http.Response response = (await LandServices.instance.add(event.land))!; if (response.statusCode == 201) { var jsonResponse = jsonDecode(response.body); - var details = jsonResponse['data']['details']; + var details = jsonResponse['data']; + print(jsonResponse); - if (details != null) { - var id = details['id']; - final tempID = await SharedPreferences.getInstance(); - print(id); - await tempID.setInt('landid', id + 1); - final faas = await LandServices.instance.fetch(); - emit(LandLoaded(faas)); - } else { - print("No 'details' object found in the response."); - // Handle the case when 'details' is missing - } + var id = details['id']; + final tempID = await SharedPreferences.getInstance(); + print(id); + await tempID.setInt('landid', id + 1); + final faas = await LandServices.instance.fetch(); + emit(LandLoaded(faas)); } }); + on((event, emit) async { + final state = this.state; + http.Response response = (await LandServices.instance + .update(event.land_edit, event.land_edit.id))!; + print('Land LOc'); + print(response.body); + }); + on((event, emit) async { final state = this.state; http.Response response = (await LandLocationService.instance .update(event.land_loc, event.land_loc.id))!; + print(event.land_loc.id!); print('Land LOc'); - print(response.body); + print(response.statusCode); }); on((event, emit) async { diff --git a/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_event.dart b/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_event.dart index c05cacf..58820b6 100644 --- a/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_event.dart +++ b/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_event.dart @@ -25,6 +25,18 @@ class AddPropertyOwnerLand extends LandPropertyOwnerInfoEvent { List get props => [land]; } +class UpdateLandPropertyOwner extends LandPropertyOwnerInfoEvent { + // ignore: non_constant_identifier_names + final LandPropertyOwner land_edit; + final int id; + + // ignore: non_constant_identifier_names + const UpdateLandPropertyOwner({required this.land_edit, required this.id}); + + @override + List get props => [land_edit]; +} + class UpdateLandLoc extends LandPropertyOwnerInfoEvent { // ignore: non_constant_identifier_names final LandPropertyLoc land_loc; diff --git a/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_state.dart b/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_state.dart index ec64d5f..a519420 100644 --- a/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_state.dart +++ b/lib/bloc/passo/land/land_property_owner_info/land_property_owner_info_state.dart @@ -17,14 +17,6 @@ class LandLoaded extends LandPropertyOwnerInfoState { List get props => [land]; } -// class PropertyAppraisalLoaded extends AssessorsState { -// PropertyAppraisalLoaded(this.appraisal); -// final List appraisal; - -// @override -// List get props => [appraisal]; -// } - class LandErrorState extends LandPropertyOwnerInfoState { const LandErrorState(this.error); final String error; diff --git a/lib/bloc/passo/land/land_value_adjustments/land_value_adjustments_bloc.dart b/lib/bloc/passo/land/land_value_adjustments/land_value_adjustments_bloc.dart index 7655903..18ee5ff 100644 --- a/lib/bloc/passo/land/land_value_adjustments/land_value_adjustments_bloc.dart +++ b/lib/bloc/passo/land/land_value_adjustments/land_value_adjustments_bloc.dart @@ -25,6 +25,19 @@ class LandValueAdjustmentsBloc emit(LandValueAdjustmentsErrorState(e.toString())); } }); + on((event, emit) async { + emit(LandValueAdjustmentsLoading()); + try { + final additionalItems = + await ValueAdjustmentsServices.instance.fetch(event.id); + globalLandValueAdjustments.clear(); + globalLandValueAdjustments + .addAll(additionalItems); // Append all items to the list + emit(LandValueAdjustmentsLoaded(globalLandValueAdjustments)); + } catch (e) { + emit(LandValueAdjustmentsErrorState(e.toString())); + } + }); on((event, emit) async { http.Response response = (await ValueAdjustmentsServices.instance.add(event.val_adj))!; diff --git a/lib/bloc/passo/land/land_value_adjustments/land_value_adjustments_event.dart b/lib/bloc/passo/land/land_value_adjustments/land_value_adjustments_event.dart index 857e6f8..b94b9fa 100644 --- a/lib/bloc/passo/land/land_value_adjustments/land_value_adjustments_event.dart +++ b/lib/bloc/passo/land/land_value_adjustments/land_value_adjustments_event.dart @@ -16,6 +16,16 @@ class LoadLandValueAdjustments extends LandValueAdjustmentsEvent { List get props => [val_adj]; } +class LoadLandValueAdjustmentsEdit extends LandValueAdjustmentsEvent { + final List val_adj; + final int id; + + const LoadLandValueAdjustmentsEdit({required this.val_adj, required this.id}); + + @override + List get props => [val_adj]; +} + class AddLandValueAdjustments extends LandValueAdjustmentsEvent { final ValueAdjustments val_adj; diff --git a/lib/bloc/passo/land/other_improvements/other_improvements_bloc.dart b/lib/bloc/passo/land/other_improvements/other_improvements_bloc.dart index 3271961..239fcf8 100644 --- a/lib/bloc/passo/land/other_improvements/other_improvements_bloc.dart +++ b/lib/bloc/passo/land/other_improvements/other_improvements_bloc.dart @@ -25,6 +25,21 @@ class OtherImprovementsBloc emit(OtherImprovementErrorState(e.toString())); } }); + on((event, emit) async { + emit(OtherImprovementLoading()); + try { + final additionalItems = + await OtherImprovementServices.instance.fetch(event.ids); + print(additionalItems); + globalOtherImprovement.clear(); + globalOtherImprovement + .addAll(additionalItems); // Append all items to the list + emit(OtherImprovementLoaded(globalOtherImprovement)); + } catch (e) { + print(e.toString()); + emit(OtherImprovementErrorState(e.toString())); + } + }); on((event, emit) async { http.Response response = (await OtherImprovementServices.instance.add(event.other_imp))!; diff --git a/lib/bloc/passo/land/other_improvements/other_improvements_event.dart b/lib/bloc/passo/land/other_improvements/other_improvements_event.dart index 135746f..8adc624 100644 --- a/lib/bloc/passo/land/other_improvements/other_improvements_event.dart +++ b/lib/bloc/passo/land/other_improvements/other_improvements_event.dart @@ -16,6 +16,16 @@ class LoadOtherImprovement extends OtherImprovementsEvent { List get props => [other_imp]; } +class LoadOtherImprovementEdit extends OtherImprovementsEvent { + final List other_imps; + final int ids; + + const LoadOtherImprovementEdit({required this.other_imps, required this.ids}); + + @override + List get props => [other_imps]; +} + class AddOtherImprovement extends OtherImprovementsEvent { final OtherImprovements other_imp; diff --git a/lib/bloc/passo/memoranda/memoranda_bloc.dart b/lib/bloc/passo/memoranda/memoranda_bloc.dart index c1b1a31..4481611 100644 --- a/lib/bloc/passo/memoranda/memoranda_bloc.dart +++ b/lib/bloc/passo/memoranda/memoranda_bloc.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:unit2/model/passo/memoranda.dart'; @@ -7,12 +9,22 @@ part 'memoranda_event.dart'; part 'memoranda_state.dart'; class MemorandaBloc extends Bloc { - MemorandaBloc() : super(MemorandaInitial()) { + MemorandaBloc() : super(MemorandaLoading()) { on((event, emit) async { emit(MemorandaLoading()); try { - final municipality = await MemorandaServices.instance.fetch(); - emit(MemorandaLoaded(municipality)); + final response = await MemorandaServices.instance.fetch(); + print('Memoranda bloc'); + print(response.statusCode); + print(response.body); + if (response.statusCode == 200) { + final List result = jsonDecode(response.body)['data']; + + emit(MemorandaLoaded( + result.map(((e) => Memoranda.fromJson(e))).toList())); + } else { + emit(MemorandaErrorState(response.reasonPhrase!)); + } } catch (e) { emit(MemorandaErrorState(e.toString())); } diff --git a/lib/bloc/passo/memoranda/memoranda_state.dart b/lib/bloc/passo/memoranda/memoranda_state.dart index 1803cd8..08b93c7 100644 --- a/lib/bloc/passo/memoranda/memoranda_state.dart +++ b/lib/bloc/passo/memoranda/memoranda_state.dart @@ -12,15 +12,14 @@ class MemorandaInitial extends MemorandaState {} class MemorandaLoading extends MemorandaState {} class MemorandaLoaded extends MemorandaState { - MemorandaLoaded(this.memorada); final List memorada; - + const MemorandaLoaded(this.memorada); @override List get props => [memorada]; } class MemorandaErrorState extends MemorandaState { - MemorandaErrorState(this.error); + const MemorandaErrorState(this.error); final String error; @override diff --git a/lib/model/passo/property_appraisal.dart b/lib/model/passo/property_appraisal.dart index 9ebe509..24271b0 100644 --- a/lib/model/passo/property_appraisal.dart +++ b/lib/model/passo/property_appraisal.dart @@ -27,6 +27,7 @@ class PropertyAppraisal { final String? totalpercentDepreciation; final String? marketValue; final String? totalArea; + final String? actualUse; PropertyAppraisal( {this.id, @@ -44,31 +45,32 @@ class PropertyAppraisal { this.addItemsSubtotal, this.totalpercentDepreciation, this.marketValue, - this.totalArea}); + this.totalArea, + this.actualUse}); factory PropertyAppraisal.fromJson(Map json) => PropertyAppraisal( - id: json["id"], - bldgapprDetailsId: json["bldgappr_details_id"], - assessedById: json["assessed_by_id"], - assessedByName: json["assessed_by_name"], - dateCreated: json["date_created"] == null - ? null - : DateTime.parse(json["date_created"]), - dateModified: json["date_modified"] == null - ? null - : DateTime.parse(json["date_modified"]), - unitconstructCost: json["unitconstruct_cost"], - buildingCore: json["building_core"], - unitconstructSubtotal: json["unitconstruct_subtotal"], - depreciationRate: json["depreciation_rate"], - depreciationCost: json["depreciation_cost"], - costAddItems: json["cost_add_items"], - addItemsSubtotal: json["add_items_subtotal"], - totalpercentDepreciation: json["totalpercent_depreciation"], - marketValue: json["market_value"], - totalArea: json["total_area"], - ); + id: json["id"], + bldgapprDetailsId: json["bldgappr_details_id"], + assessedById: json["assessed_by_id"], + assessedByName: json["assessed_by_name"], + dateCreated: json["date_created"] == null + ? null + : DateTime.parse(json["date_created"]), + dateModified: json["date_modified"] == null + ? null + : DateTime.parse(json["date_modified"]), + unitconstructCost: json["unitconstruct_cost"], + buildingCore: json["building_core"], + unitconstructSubtotal: json["unitconstruct_subtotal"], + depreciationRate: json["depreciation_rate"], + depreciationCost: json["depreciation_cost"], + costAddItems: json["cost_add_items"], + addItemsSubtotal: json["add_items_subtotal"], + totalpercentDepreciation: json["totalpercent_depreciation"], + marketValue: json["market_value"], + totalArea: json["total_area"], + actualUse: json["actual_use"]); Map toJson() => { "id": id, @@ -86,6 +88,7 @@ class PropertyAppraisal { "add_items_subtotal": addItemsSubtotal, "totalpercent_depreciation": totalpercentDepreciation, "market_value": marketValue, - "total_area": totalArea + "total_area": totalArea, + "actual_use": actualUse }; } diff --git a/lib/screens/passo/Building/add_building.dart b/lib/screens/passo/Building/add_building.dart index d2d94a8..e87d3e9 100644 --- a/lib/screens/passo/Building/add_building.dart +++ b/lib/screens/passo/Building/add_building.dart @@ -120,17 +120,34 @@ class _AddBuilding extends State { if (state is PropertyInfoErrorState) { final progress = ProgressHUD.of(context); progress?.dismiss(); + } + if (state is ShowGenDescErrorAlertState || + state is ShowLandRefErrorAlertState || + state is ShowStrucMatErrorAlertState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); Fluttertoast.showToast( - msg: onError, - fontSize: 24, - toastLength: Toast.LENGTH_LONG, - gravity: ToastGravity.CENTER, - backgroundColor: Colors.black, - textColor: Colors.white); + msg: "Slow internet connection, please try again!"); + } + if (state is ShowLandRefSuccessAlertState || + state is ShowGenDescSuccessAlertState || + state is ShowStrucMatSuccessAlertState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + NextBtn(); } }, builder: (context, state) { - if (state is PropertyInfoLoaded || - state is PropertyInfoErrorState) { + if (state is PropertyInfoLoading || + state is PropertyInfoLoaded || + state is PropertyInfoErrorState || + state is ShowBldgLocErrorAlertState || + state is ShowGenDescErrorAlertState || + state is ShowLandRefErrorAlertState || + state is ShowStrucMatErrorAlertState || + state is ShowBldgLocSuccessAlertState || + state is ShowLandRefSuccessAlertState || + state is ShowGenDescSuccessAlertState || + state is ShowStrucMatSuccessAlertState) { return BlocConsumer( listener: ( context, diff --git a/lib/screens/passo/Building/add_building_components/AddExtraItems.dart b/lib/screens/passo/Building/add_building_components/AddExtraItems.dart index ef4fac4..2140035 100644 --- a/lib/screens/passo/Building/add_building_components/AddExtraItems.dart +++ b/lib/screens/passo/Building/add_building_components/AddExtraItems.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; +import 'package:fluttertoast/fluttertoast.dart'; import 'package:form_builder_validators/form_builder_validators.dart'; import 'package:intl/intl.dart'; import 'package:searchfield/searchfield.dart'; @@ -500,48 +501,56 @@ class _AddExtraItems extends State { padding: const EdgeInsets.all(8.0), child: ElevatedButton( onPressed: () async { - final tempID = - await SharedPreferences.getInstance(); - var itemss = AdditionalItems( - id: 1, - bldgapprDetailsId: - tempID.getInt('tempid')! - 1, - classId: _classId, - className: _className, - structType: _structureType, - unitValue: - _withoutBUCC == true ? 0 : _unitValue, - baseUnitValue: _unitBase, - area: _areaValue, - marketValue: - (_unitValue * _unitBase) * _areaValue, - depreciationRate: _depValue, - adjustedMarketVal: _totalMarketValue( + try { + final tempID = + await SharedPreferences.getInstance(); + var itemss = AdditionalItems( + id: 1, + bldgapprDetailsId: + tempID.getInt('tempid')! - 1, + classId: _classId, + className: _className, + structType: _structureType, + unitValue: _withoutBUCC == true + ? 0 + : _unitValue, + baseUnitValue: _unitBase, + area: _areaValue, + marketValue: (_unitValue * _unitBase) * + _areaValue, + depreciationRate: _depValue, + adjustedMarketVal: _totalMarketValue( + _unitValue, + _unitBase, + _areaValue, + _depValue, + _withoutBUCC, + _className, + isPainted, + isSecondHand, + _notPaintedUnitVal, + _secondHandUnitVal), + actualUse: 'Test', + amtDepreciation: _amountofDepreciation( _unitValue, _unitBase, _areaValue, _depValue, - _withoutBUCC, - _className, - isPainted, - isSecondHand, - _notPaintedUnitVal, - _secondHandUnitVal), - actualUse: 'Test', - amtDepreciation: _amountofDepreciation( - _unitValue, - _unitBase, - _areaValue, - _depValue, - ), - painted: true, - secondhand: true, - paintedUnitval: '1', - secondhandUnitval: '1'); + ), + painted: true, + secondhand: true, + paintedUnitval: '1', + secondhandUnitval: '1'); - context - .read() - .add(AddAdditionalItems(items: itemss)); + context + .read() + .add(AddAdditionalItems(items: itemss)); + } catch (e) { + Fluttertoast.showToast( + msg: + "Slow internet connection, please try again!", + ); + } }, style: ElevatedButton.styleFrom( primary: Colors.black, diff --git a/lib/screens/passo/Building/add_building_components/additional_items.dart b/lib/screens/passo/Building/add_building_components/additional_items.dart index f087534..dd0f133 100644 --- a/lib/screens/passo/Building/add_building_components/additional_items.dart +++ b/lib/screens/passo/Building/add_building_components/additional_items.dart @@ -1,11 +1,15 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_progress_hud/flutter_progress_hud.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:intl/intl.dart'; import 'package:unit2/bloc/passo/bulding/additional_item/additional_item_bloc.dart'; import 'package:unit2/model/passo/class_components.dart'; import 'package:unit2/model/passo/unit_construct.dart'; import 'package:unit2/screens/passo/Building/add_building_components/AddExtraItems.dart'; import 'package:unit2/utils/alerts.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; import 'package:unit2/widgets/passo/custom_button.dart'; class AdditionalItemPage extends StatefulWidget { @@ -37,260 +41,252 @@ class _AdditionalItemPage extends State { @override Widget build(BuildContext context) { - return BlocConsumer( - listener: (context, state) { - // TODO: implement listener - }, - builder: (context, state) { - final state = context.watch().state; - if (state is AdditionalItemsLoaded) { - return Column( - children: [ - Expanded( - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(15.0), - child: Column( - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 10), - child: const Text('ADDITIONAL ITEMS', - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 18), - textAlign: TextAlign.left), - ), - Align( - alignment: Alignment.topRight, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.red, + return Scaffold( + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + if (state is AdditionalItemsLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is AdditionalItemsLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is AdditionalItemsErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + final state = context.watch().state; + if (state is AdditionalItemsLoaded) { + return Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('ADDITIONAL ITEMS', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), ), - onPressed: () { - context - .read() - .add(ShowAdditionalItems()); - }, - child: Row( - mainAxisSize: MainAxisSize.min, - children: const [ - Text('ADD ITEM'), // <-- Text - SizedBox( - width: 5, + Align( + alignment: Alignment.topRight, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Colors.red, ), - Icon( - // <-- Icon - Icons.add, - size: 24.0, + onPressed: () { + context + .read() + .add(ShowAdditionalItems()); + }, + child: Row( + mainAxisSize: MainAxisSize.min, + children: const [ + Text('ADD ITEM'), // <-- Text + SizedBox( + width: 5, + ), + Icon( + // <-- Icon + Icons.add, + size: 24.0, + ), + ], ), - ], + ), ), - ), - ), - SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: DataTable( - // ignore: prefer_const_literals_to_create_immutables - columns: [ - const DataColumn( - label: Text('Items'), - ), - const DataColumn( - label: Text('Unit Value'), - ), - const DataColumn( - label: Text('% of BUCC'), - ), - const DataColumn( - label: Text('Market Value'), - ), - const DataColumn( - label: Text('Action'), - ) - ], - rows: state.items.map((dataRow) { - return DataRow( - cells: [ - DataCell(Text(dataRow.className)), - DataCell(Text(dataRow.baseUnitValue)), - DataCell(Text(dataRow.unitValue)), - DataCell(Text(((double.parse( - dataRow.adjustedMarketVal))) - .toString())), - DataCell(Row( - children: [ - InkWell( - child: Container( - height: 30, - width: 30, - decoration: const BoxDecoration( - shape: BoxShape.circle, - color: Colors.red, - ), - child: const Icon( - Icons.delete, - color: Colors.white, - size: 20.0, - ), - ), - onTap: () { - deleteItem(dataRow.id); - }, - ), - const SizedBox( - width: 10, - ), - InkWell( - child: Container( - height: 30, - width: 30, - decoration: const BoxDecoration( - shape: BoxShape.circle, - color: Colors.red, - ), - child: const Icon( - Icons.edit, - color: Colors.white, - size: 20.0, - ), - ), - onTap: () {}, - ), - ], - )) + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: DataTable( + // ignore: prefer_const_literals_to_create_immutables + columns: [ + const DataColumn( + label: Text('Items'), + ), + const DataColumn( + label: Text('Unit Value'), + ), + const DataColumn( + label: Text('% of BUCC'), + ), + const DataColumn( + label: Text('Market Value'), + ), + const DataColumn( + label: Text('Action'), + ) ], - ); - }).toList(), - ), + rows: state.items.map((dataRow) { + return DataRow( + cells: [ + DataCell(Text(dataRow.className)), + DataCell(Text(dataRow.baseUnitValue)), + DataCell(Text(dataRow.unitValue)), + DataCell(Text(((double.parse( + dataRow.adjustedMarketVal))) + .toString())), + DataCell(Row( + children: [ + InkWell( + child: Container( + height: 30, + width: 30, + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: const Icon( + Icons.delete, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () { + deleteItem(dataRow.id); + }, + ), + const SizedBox( + width: 10, + ), + InkWell( + child: Container( + height: 30, + width: 30, + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: const Icon( + Icons.edit, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () {}, + ), + ], + )) + ], + ); + }).toList(), + ), + ), + ], ), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(left: 20.0, right: 20.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + 'Total', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 15), + ), + Text( + NumberFormat.currency(locale: 'en-PH', symbol: "₱") + .format(_totalMarketValue(state.items)), + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 15), + ) ], ), ), - ), - ), - Padding( - padding: const EdgeInsets.only(left: 20.0, right: 20.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text( - 'Total', - style: - TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + Padding( + padding: const EdgeInsets.all(15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.additionalItemsPrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon(Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () { + { + widget.additionalItemsNextBtn(); + } + ; + }, + ) + ], ), - Text( - NumberFormat.currency(locale: 'en-PH', symbol: "₱") - .format(_totalMarketValue(state.items)), - style: - TextStyle(fontWeight: FontWeight.bold, fontSize: 15), - ) - ], - ), - ), - Padding( - padding: const EdgeInsets.all(15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - CustomButton( - icon: const Icon(Icons.chevron_left_rounded, - color: Colors.white), - onPressed: () { - { - widget.additionalItemsPrevBtn(); - } - ; - }, - ), - CustomButton( - icon: const Icon(Icons.chevron_right_rounded, - color: Colors.white), - onPressed: () { - { - widget.additionalItemsNextBtn(); - } - ; - }, - ) - ], - ), - ), - ], - ); - } - if (state is AdditionalItemsDeletedState) { - if (state.success) { - WidgetsBinding.instance.addPostFrameCallback((_) { - successAlert(context, "Deletion Successful", - "Extra item has been deleted successfully", () { - Navigator.of(context).pop(); - context - .read() - .add(const LoadAdditionalItems()); - }); - }); - } - } - if (state is ShowAddItemsScreen) { - return ConstrainedBox( - constraints: BoxConstraints(maxHeight: 1000.0), - child: AlertDialog( - insetPadding: const EdgeInsets.symmetric( - horizontal: 20.0, - vertical: 10.0, - ), - title: const Text( - 'ADD EXTRA ITEMS', - textAlign: TextAlign.center, - ), - content: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded(child: AddExtraItems(widget.unit, widget.options)) + ), ], - ), - ), - ); - } - return Container( - child: Column( - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 10), - child: const Text('ADDITIONAL MATERIALS', - style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18), - textAlign: TextAlign.left), - ), - Align( - alignment: Alignment.topRight, - child: ElevatedButton( - onPressed: () { + ); + } + if (state is AdditionalItemsDeletedState) { + if (state.success) { + WidgetsBinding.instance.addPostFrameCallback((_) { + successAlert(context, "Deletion Successful", + "Extra item has been deleted successfully", () { + Navigator.of(context).pop(); context .read() - .add(ShowAdditionalItems()); - }, - child: Row( + .add(const LoadAdditionalItems()); + }); + }); + } + } + if (state is ShowAddItemsScreen) { + return ConstrainedBox( + constraints: BoxConstraints(maxHeight: 1000.0), + child: AlertDialog( + insetPadding: const EdgeInsets.symmetric( + horizontal: 20.0, + vertical: 10.0, + ), + title: const Text( + 'ADD EXTRA ITEMS', + textAlign: TextAlign.center, + ), + content: Column( mainAxisSize: MainAxisSize.min, - children: const [ - Text('ADD ITEM'), // <-- Text - SizedBox( - width: 5, - ), - Icon( - // <-- Icon - Icons.add, - size: 24.0, - ), + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: AddExtraItems(widget.unit, widget.options)) ], ), ), - ), - ], - ), - ); - }, + ); + } + if (state is AdditionalItemsErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add(LoadAdditionalItems()); + }, + ); + } + return Container(); + }, + ), + ), ); } } diff --git a/lib/screens/passo/Building/add_building_components/bldg_location_landref.dart b/lib/screens/passo/Building/add_building_components/bldg_location_landref.dart index 0ecfe0a..3374a9e 100644 --- a/lib/screens/passo/Building/add_building_components/bldg_location_landref.dart +++ b/lib/screens/passo/Building/add_building_components/bldg_location_landref.dart @@ -4,6 +4,7 @@ import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:flutter_progress_hud/flutter_progress_hud.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:fluttertoast/fluttertoast.dart'; +import 'package:form_builder_validators/form_builder_validators.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:unit2/bloc/passo/barangay/barangay_bloc.dart'; import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart'; @@ -15,7 +16,9 @@ import 'package:unit2/model/passo/bldg_loc.dart'; import 'package:unit2/model/passo/city.dart'; import 'package:unit2/model/passo/land_ref.dart'; import 'package:unit2/screens/passo/Building/add_building.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/text_container.dart'; import 'package:unit2/widgets/error_state.dart'; import 'package:unit2/widgets/passo/custom_button.dart'; @@ -46,20 +49,10 @@ class _BldgLocationLandrefPage extends State { final progress = ProgressHUD.of(context); progress!.showWithText("Please wait..."); } - if (state is MunicipalityLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } + if (state is MunicipalityErrorState) { final progress = ProgressHUD.of(context); progress?.dismiss(); - // Fluttertoast.showToast( - // msg: onError, - // fontSize: 24, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.CENTER, - // backgroundColor: Colors.black, - // textColor: Colors.white); } }, builder: (context, state) { @@ -72,6 +65,7 @@ class _BldgLocationLandrefPage extends State { final progress = ProgressHUD.of(context); progress!.showWithText("Please wait..."); } + if (state is BarangayLoaded) { final progress = ProgressHUD.of(context); progress?.dismiss(); @@ -79,13 +73,6 @@ class _BldgLocationLandrefPage extends State { if (state is BarangayErrorState) { final progress = ProgressHUD.of(context); progress?.dismiss(); - // Fluttertoast.showToast( - // msg: onError, - // fontSize: 24, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.CENTER, - // backgroundColor: Colors.black, - // textColor: Colors.white); } }, builder: (context, state) { @@ -95,204 +82,298 @@ class _BldgLocationLandrefPage extends State { .map((brgy) => brgy.barangayDescription) .toList() .cast(); - return SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(20.0), - child: Column( - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 10), - child: const Text('BUILDING LOCATION', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18), - textAlign: TextAlign.left), - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - // optional flex property if flex is 1 because the default flex is 1 + return StatefulBuilder(builder: (context, locationState) { + return SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('BUILDING LOCATION', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + child: Container( + height: 45.0, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 1.0, + ), + borderRadius: + BorderRadius.circular(5.0), + ), + child: const Align( + alignment: Alignment.center, + child: Text( + "AGUSAN DEL NORTE", + style: TextStyle(fontSize: 15), + ), + ), + ), + ), + const SizedBox(width: 10.0), + Expanded( + flex: 1, + child: FormBuilderDropdown( + name: 'municipality', + autofocus: false, + decoration: normalTextFieldStyle( + "Municipality", ""), + items: cityList + .map((city) => + DropdownMenuItem( + value: city, + child: Text(city + .cityDescription!), // Use cityDescription instead of cityName + )) + .toList(), + onChanged: (selectedCity) { + if (selectedCity != null) { + final selectedCityCode = + selectedCity.cityCode; + final barangayBloc = + context.read(); + barangayBloc.add(LoadBarangay( + id: selectedCityCode!)); // Use selectedCityCode directly + } + }, + )), + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( flex: 1, child: customTextField( - "Province / City", "", 'province')), - const SizedBox(width: 10.0), - Expanded( + "No. / Street", "", 'street'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customDropDownField( + "Brgy. / District", + "", + 'brgy', + brgyNAmes)) + ]), + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('LAND REFERENCE', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), + ), + customTextField("Land Owner", "", 'l_owner'), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( flex: 1, - child: FormBuilderDropdown( - name: 'municipality', - autofocus: false, - decoration: normalTextFieldStyle( - "Municipality", ""), - items: cityList - .map((city) => - DropdownMenuItem( - value: city, - child: Text(city - .cityDescription!), // Use cityDescription instead of cityName - )) - .toList(), - onChanged: (selectedCity) { - if (selectedCity != null) { - final selectedCityCode = - selectedCity.cityCode; - final barangayBloc = - context.read(); - barangayBloc.add(LoadBarangay( - id: selectedCityCode!)); // Use selectedCityCode directly - } - }, - )), - ]), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "No. / Street", "", 'street'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customDropDownField( - "Brgy. / District", - "", - 'brgy', - brgyNAmes)) - ]), - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 10), - child: const Text('LAND REFERENCE', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18), - textAlign: TextAlign.left), - ), - customTextField("Land Owner", "", 'l_owner'), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "OCT/TCT/CLOA No.", "", 'oct_tct_cloa'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 + child: customTextField("OCT/TCT/CLOA No.", + "", 'oct_tct_cloa'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "Survey No.", "", 'survey_no')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( flex: 1, child: customTextField( - "Survey No.", "", 'survey_no')) - ]), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "Lot No.", "", 'lot_no'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 + "Lot No.", "", 'lot_no'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "Blk No.", "", 'blk_no')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( flex: 1, child: customTextField( - "Blk No.", "", 'blk_no')) - ]), - Row( + "TD / ARP No.", "", 'l_td_arp'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: + customTextField("Area", "", 'area')) + ]), + const SizedBox( + height: 50, + ), + Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "TD / ARP No.", "", 'l_td_arp'), + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: - customTextField("Area", "", 'area')) - ]), - SizedBox( - height: 50, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - CustomButton( - icon: const Icon(Icons.chevron_left_rounded, - color: Colors.white), - onPressed: () { - { - widget.PrevBtn(); - } - ; - }, - ), - CustomButton( - icon: const Icon(Icons.chevron_right_rounded, - color: Colors.white), - onPressed: () async { - { - final tempID = - await SharedPreferences.getInstance(); - var bldgLocData = BldgLoc( - id: tempID.getInt('tempid')! - 1, - street: formKey - .currentState?.value['street'], - barangay: - formKey.currentState?.value['brgy'], - municipality: formKey - .currentState - ?.value['municipality'] - .cityDescription, - province: formKey - .currentState?.value['province'], - ); - var landRefData = LandRef( - id: tempID.getInt('tempid')! - 1, - owner: formKey - .currentState?.value['l_owner'], - cloaNo: formKey.currentState - ?.value['oct_tct_cloa'], - lotNo: formKey - .currentState?.value['lot_no'], - tdn: formKey - .currentState?.value['l_td_arp'], - area: - formKey.currentState?.value['area'], - surveyNo: formKey - .currentState?.value['survey_no'], - blkNo: formKey - .currentState?.value['blk_no'], - ); - context.read() - ..add(UpdateBldgLoc( - bldg_loc: bldgLocData)) - ..add(UpdateLandRef( - land_ref: landRefData)); + // Builder(builder: (context) { + // return CustomButton( + // icon: const Icon( + // Icons.chevron_right_rounded, + // color: Colors.white), + // onPressed: () async { + // { + // try { + // final progress = + // ProgressHUD.of(context); + // Future.delayed(Duration(seconds: 3), + // () { + // progress?.dismiss(); + // }); + // final tempID = await SharedPreferences + // .getInstance(); + // var bldgLocData = BldgLoc( + // id: tempID.getInt('tempid')! - 1, + // street: formKey.currentState + // ?.value['street'], + // barangay: formKey + // .currentState?.value['brgy'], + // municipality: formKey + // .currentState + // ?.value['municipality'] + // .cityDescription, + // province: "Agusan Del Norte"); + // var landRefData = LandRef( + // id: tempID.getInt('tempid')! - 1, + // owner: formKey + // .currentState?.value['l_owner'], + // cloaNo: formKey.currentState + // ?.value['oct_tct_cloa'], + // lotNo: formKey + // .currentState?.value['lot_no'], + // tdn: formKey.currentState + // ?.value['l_td_arp'], + // area: formKey + // .currentState?.value['area'], + // surveyNo: formKey.currentState + // ?.value['survey_no'], + // blkNo: formKey + // .currentState?.value['blk_no'], + // ); + // context.read() + // ..add(UpdateBldgLoc( + // bldg_loc: bldgLocData)) + // ..add(UpdateLandRef( + // land_ref: landRefData)); + // } catch (e) { + // Fluttertoast.showToast( + // msg: + // "Slow internet connection, please try again!"); + // } + // } + // ; + // }, + // ); + // }) + Builder(builder: (context) { + return CustomButton( + icon: const Icon( + Icons.chevron_right_rounded, + color: Colors.white, + ), + onPressed: () async { + try { + // Get the ProgressHUD instance + final progress = + ProgressHUD.of(context); - widget.NextBtn(); - } - ; - }, - ) - ], - ) - ], + // Show the progress indicator + progress?.show(); + + // Dismiss the progress indicator + progress?.dismiss(); + + // Rest of your code... + final tempID = await SharedPreferences + .getInstance(); + var bldgLocData = BldgLoc( + id: tempID.getInt('tempid')! - 1, + street: formKey.currentState + ?.value['street'], + barangay: formKey + .currentState?.value['brgy'], + municipality: formKey + .currentState + ?.value['municipality'] + .cityDescription, + province: "Agusan Del Norte"); + var landRefData = LandRef( + id: tempID.getInt('tempid')! - 1, + owner: formKey + .currentState?.value['l_owner'], + cloaNo: formKey.currentState + ?.value['oct_tct_cloa'], + lotNo: formKey + .currentState?.value['lot_no'], + tdn: formKey.currentState + ?.value['l_td_arp'], + area: formKey + .currentState?.value['area'], + surveyNo: formKey.currentState + ?.value['survey_no'], + blkNo: formKey + .currentState?.value['blk_no'], + ); + context.read() + ..add(UpdateBldgLoc( + bldg_loc: bldgLocData)) + ..add(UpdateLandRef( + land_ref: landRefData)); + } catch (e) { + Fluttertoast.showToast( + msg: + "Slow internet connection, please try again!", + ); + } + }, + ); + }) + ], + ) + ], + ), ), - ), - ); + ); + }); } if (state is BarangayErrorState) { return SomethingWentWrong( @@ -314,6 +395,22 @@ class _BldgLocationLandrefPage extends State { }, ); } + if (state is ShowBldgLocErrorAlertState) { + WidgetsBinding.instance.addPostFrameCallback((_) { + errorAlert( + context, "Something went wrong", "Please try again...", () { + Navigator.of(context).pop(); + }); + }); + } + if (state is ShowLandRefErrorAlertState) { + WidgetsBinding.instance.addPostFrameCallback((_) { + errorAlert( + context, "Something went wrong", "Please try again...", () { + Navigator.of(context).pop(); + }); + }); + } return Container(); }, ), @@ -325,12 +422,13 @@ class _BldgLocationLandrefPage extends State { // Wait for the state change indicating completion final propertyInfoState = context.read().state; - if (propertyInfoState is PropertyInfoErrorState) { + if (propertyInfoState is ShowBldgLocErrorAlertState || + propertyInfoState is ShowLandRefErrorAlertState) { // Check if the add operation was successful - return true; // You'll need to define this in your state class + return false; // You'll need to define this in your state class } // Return false if the state didn't change as expected - return false; + return true; } } diff --git a/lib/screens/passo/Building/add_building_components/general_description.dart b/lib/screens/passo/Building/add_building_components/general_description.dart index 78bbbe2..05077ef 100644 --- a/lib/screens/passo/Building/add_building_components/general_description.dart +++ b/lib/screens/passo/Building/add_building_components/general_description.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; +import 'package:fluttertoast/fluttertoast.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart'; import 'package:unit2/model/passo/general_description.dart'; @@ -177,41 +178,48 @@ class _GeneralDescriptionPage extends State { color: Colors.white), onPressed: () async { { - final tempID = await SharedPreferences.getInstance(); - widget.onPutGeneralDescription(); - var genDescData = GeneralDesc( - id: tempID.getInt('tempid')! - 1, - bldgKind: - formKey.currentState?.value['bldg_type'].building, - strucType: - formKey.currentState?.value['bldg_type'].bldgType, - bldgPermit: - formKey.currentState?.value['bldg_permit'], - dateIssued: formKey.currentState?.value['coc_issued'], - cct: formKey.currentState?.value['cct'], - certCompletionIssued: - formKey.currentState?.value['coc_issued'], - certOccupancyIssued: - formKey.currentState?.value['coo_issued'], - dateCompleted: - formKey.currentState?.value['date_cnstructed'], - dateOccupied: - formKey.currentState?.value['date_occupied'], - bldgAge: int.tryParse( - formKey.currentState?.value['bldg_age']), - noStoreys: int.tryParse( - formKey.currentState?.value['no_of_storeys']), - area1Stfloor: '0', - area2Ndfloor: '0', - area3Rdfloor: '0', - area4Thfloor: '0', - totalFloorArea: - formKey.currentState?.value['total_area'], - floorSketch: null, - actualUse: formKey.currentState?.value['actual_use']); + try { + final tempID = await SharedPreferences.getInstance(); - context.read() - ..add(UpdateGeneralDesc(gen_desc: genDescData)); + var genDescData = GeneralDesc( + id: tempID.getInt('tempid')! - 1, + bldgKind: formKey + .currentState?.value['bldg_type'].building, + strucType: formKey + .currentState?.value['bldg_type'].bldgType, + bldgPermit: + formKey.currentState?.value['bldg_permit'], + dateIssued: + formKey.currentState?.value['coc_issued'], + cct: formKey.currentState?.value['cct'], + certCompletionIssued: + formKey.currentState?.value['coc_issued'], + certOccupancyIssued: + formKey.currentState?.value['coo_issued'], + dateCompleted: + formKey.currentState?.value['date_cnstructed'], + dateOccupied: + formKey.currentState?.value['date_occupied'], + bldgAge: int.tryParse( + formKey.currentState?.value['bldg_age']), + noStoreys: int.tryParse( + formKey.currentState?.value['no_of_storeys']), + area1Stfloor: '0', + area2Ndfloor: '0', + area3Rdfloor: '0', + area4Thfloor: '0', + totalFloorArea: + formKey.currentState?.value['total_area'], + floorSketch: null, + actualUse: + formKey.currentState?.value['actual_use']); + + context.read() + ..add(UpdateGeneralDesc(gen_desc: genDescData)); + } catch (e) { + Fluttertoast.showToast( + msg: "Slow internet connection, please try again!"); + } } ; }, diff --git a/lib/screens/passo/Building/add_building_components/property_appraisal.dart b/lib/screens/passo/Building/add_building_components/property_appraisal.dart index e746860..3ad760d 100644 --- a/lib/screens/passo/Building/add_building_components/property_appraisal.dart +++ b/lib/screens/passo/Building/add_building_components/property_appraisal.dart @@ -1,11 +1,14 @@ import 'package:flutter/material.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'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:form_builder_validators/form_builder_validators.dart'; import 'package:intl/intl.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:unit2/bloc/passo/bulding/additional_item/additional_item_bloc.dart'; import 'package:unit2/bloc/passo/bulding/property_appraisal/property_appraisal_bloc.dart'; +import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart'; import 'package:unit2/model/passo/additional_items.dart'; import 'package:unit2/model/passo/property_appraisal.dart'; import 'package:unit2/screens/passo/Building/add_building.dart'; @@ -501,402 +504,418 @@ class _PropertyAppraisalPage extends State { @override Widget build(BuildContext context) { - return BlocConsumer( - listener: (context, state) {}, - builder: (context, state) { - if (state is AdditionalItemsLoaded) { - return SingleChildScrollView( - child: Container( - margin: const EdgeInsets.only(left: 20.0, right: 20.0), - child: Column( - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 20), - child: const Text('PROPERTY APPRAISAL', - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 18), - textAlign: TextAlign.left), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + return Scaffold( + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + if (state is AdditionalItemsLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is AdditionalItemsLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is AdditionalItemsErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is AdditionalItemsLoaded) { + return SingleChildScrollView( + child: Container( + margin: const EdgeInsets.only(left: 20.0, right: 20.0), + child: Column( children: [ Container( - child: Text( - "Unit Construction Cost", - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13), - textAlign: TextAlign.left, - ), + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 20), + child: const Text('PROPERTY APPRAISAL', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 18), + textAlign: TextAlign.left), ), - Container( - child: Text( - formKey.currentState!.value['bldg_type'].unitValue + - ' sq.m', - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Building Core", - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13), - textAlign: TextAlign.left, - ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Text( + "Unit Construction Cost", + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + formKey.currentState!.value['bldg_type'] + .unitValue + + ' sq.m', + textAlign: TextAlign.right, + ), + ) + ], ), - Container( - child: Text( - '', - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 40), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Sub-total", - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13), - textAlign: TextAlign.left, - ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Text( + "Building Core", + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + '', + textAlign: TextAlign.right, + ), + ) + ], ), - Container( - child: Text( - (double.parse(formKey - .currentState!.value['total_area']) * - double.parse(formKey.currentState! - .value['bldg_type'].unitValue)) - .toString(), - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 40), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Cost of Additional Items", - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - '', - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Sub-total", - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - calculateAdditionalItems(state.items).toString(), - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Total Construction Cost", - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - calculateTotalConstructionCost( - (double.parse(formKey + const SizedBox(height: 40), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Text( + "Sub-total", + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + (double.parse(formKey .currentState!.value['total_area']) * double.parse(formKey.currentState! - .value['bldg_type'].unitValue)), - state.items) - .toString(), - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 40), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Depreciation Rate", - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13), - textAlign: TextAlign.left, - ), + .value['bldg_type'].unitValue)) + .toString(), + textAlign: TextAlign.right, + ), + ) + ], ), - SizedBox( - width: 90, - height: 25, - child: FormBuilderTextField( - name: 'depRate', - decoration: normalTextFieldStyle("", ""), - validator: FormBuilderValidators.compose([]), - onChanged: (value) { - setState(() { - depRate = double.parse(value!); - }); - }, - ), + const SizedBox(height: 40), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Text( + "Cost of Additional Items", + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + '', + textAlign: TextAlign.right, + ), + ) + ], ), - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Depreciation Cost", - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13), - textAlign: TextAlign.left, - ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Text( + "Sub-total", + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + calculateAdditionalItems(state.items).toString(), + textAlign: TextAlign.right, + ), + ) + ], ), - Container( - child: Text( - calculateDepCost( - (double.parse(formKey - .currentState!.value['total_area']) * - double.parse(formKey.currentState! - .value['bldg_type'].unitValue)), - state.items, - depRate) - .toString(), - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Total % Depreciation", - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13), - textAlign: TextAlign.left, - ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Text( + "Total Construction Cost", + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + calculateTotalConstructionCost( + (double.parse(formKey.currentState! + .value['total_area']) * + double.parse(formKey.currentState! + .value['bldg_type'].unitValue)), + state.items) + .toString(), + textAlign: TextAlign.right, + ), + ) + ], ), - Container( - child: Text( - '${(depRate * 100).toStringAsFixed(2)}%', - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Market Value", - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 13), - textAlign: TextAlign.left, - ), + const SizedBox(height: 40), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Text( + "Depreciation Rate", + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + textAlign: TextAlign.left, + ), + ), + SizedBox( + width: 90, + height: 25, + child: FormBuilderTextField( + name: 'depRate', + decoration: normalTextFieldStyle("", ""), + validator: FormBuilderValidators.compose([]), + onChanged: (value) { + setState(() { + depRate = double.parse(value!); + }); + }, + ), + ), + ], ), - Container( - child: Text( - calculateMarketValue( - (double.parse(formKey - .currentState!.value['total_area']) * - double.parse(formKey.currentState! - .value['bldg_type'].unitValue)), - state.items, - depRate) - .toString(), - textAlign: TextAlign.right, - ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Text( + "Depreciation Cost", + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + calculateDepCost( + (double.parse(formKey.currentState! + .value['total_area']) * + double.parse(formKey.currentState! + .value['bldg_type'].unitValue)), + state.items, + depRate) + .toString(), + textAlign: TextAlign.right, + ), + ) + ], ), - ], - ), - Row( - children: [ - Expanded( - flex: 1, - child: SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Container( - margin: const EdgeInsets.only( - left: 20.0, right: 20.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, - top: 20, - right: 0, - bottom: 20), - child: const Text('PROPERTY ASSESSMENT', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18), - textAlign: TextAlign.left), - ), - Column( + const SizedBox(height: 15), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Text( + "Total % Depreciation", + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + '${(depRate * 100).toStringAsFixed(2)}%', + textAlign: TextAlign.right, + ), + ) + ], + ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Text( + "Market Value", + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + calculateMarketValue( + (double.parse(formKey.currentState! + .value['total_area']) * + double.parse(formKey.currentState! + .value['bldg_type'].unitValue)), + state.items, + depRate) + .toString(), + textAlign: TextAlign.right, + ), + ), + ], + ), + Row( + children: [ + Expanded( + flex: 1, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Container( + margin: const EdgeInsets.only( + left: 20.0, right: 20.0), + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, children: [ - Row( - children: [ - Container( - width: 100, - margin: const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all(5.0), - child: const Text( - 'Actual Use', - style: TextStyle( + Container( + margin: const EdgeInsets.only( + left: 0, + top: 20, + right: 0, + bottom: 20), + child: const Text( + 'PROPERTY ASSESSMENT', + style: TextStyle( fontWeight: FontWeight.bold, - fontSize: 13, - ), - textAlign: TextAlign.center, - ), - ), - Container( - width: 100, - margin: const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all(5.0), - child: const Text( - 'Market Value', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13, - ), - textAlign: TextAlign.center, - ), - ), - Container( - width: 100, - margin: const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all(5.0), - child: const Text( - 'Ass. Level', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13, - ), - textAlign: TextAlign.center, - ), - ), - Container( - width: 100, - margin: const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all(5.0), - child: const Text( - 'Ass. Value', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13, - ), - textAlign: TextAlign.center, - ), - ), - ], + fontSize: 18), + textAlign: TextAlign.left), ), - SizedBox( - height: 59, - child: Row( - children: [ - Container( - width: 100, - margin: const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all(5.0), - child: Text( - formKey.currentState - ?.value['actual_use']!, - style: TextStyle( - fontWeight: - FontWeight.bold, - fontSize: 13, + Column( + children: [ + Row( + children: [ + Container( + width: 100, + margin: + const EdgeInsets.only( + top: 15, left: 15), + padding: + const EdgeInsets.all( + 5.0), + child: const Text( + 'Actual Use', + style: TextStyle( + fontWeight: + FontWeight.bold, + fontSize: 13, + ), + textAlign: + TextAlign.center, ), - textAlign: TextAlign.center, ), - ), - Container( - width: 100, - margin: const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all(5.0), - child: Text( - calculateMarketValue( - (double.parse(formKey - .currentState! - .value[ - 'total_area']) * - double.parse(formKey - .currentState! - .value[ - 'bldg_type'] - .unitValue)), - state.items, - depRate) - .toString(), - style: TextStyle( - fontWeight: - FontWeight.bold, - fontSize: 13, + Container( + width: 100, + margin: + const EdgeInsets.only( + top: 15, left: 15), + padding: + const EdgeInsets.all( + 5.0), + child: const Text( + 'Market Value', + style: TextStyle( + fontWeight: + FontWeight.bold, + fontSize: 13, + ), + textAlign: + TextAlign.center, ), - textAlign: TextAlign.center, ), - ), - Container( - width: 100, - margin: const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all(5.0), - child: Text( - assessmentLevel( + Container( + width: 100, + margin: + const EdgeInsets.only( + top: 15, left: 15), + padding: + const EdgeInsets.all( + 5.0), + child: const Text( + 'Ass. Level', + style: TextStyle( + fontWeight: + FontWeight.bold, + fontSize: 13, + ), + textAlign: + TextAlign.center, + ), + ), + Container( + width: 100, + margin: + const EdgeInsets.only( + top: 15, left: 15), + padding: + const EdgeInsets.all( + 5.0), + child: const Text( + 'Ass. Value', + style: TextStyle( + fontWeight: + FontWeight.bold, + fontSize: 13, + ), + textAlign: + TextAlign.center, + ), + ), + ], + ), + SizedBox( + height: 59, + child: Row( + children: [ + Container( + width: 100, + margin: + const EdgeInsets.only( + top: 15, + left: 15), + padding: + const EdgeInsets.all( + 5.0), + child: Text( + formKey.currentState + ?.value[ + 'actual_use']!, + style: TextStyle( + fontWeight: + FontWeight.bold, + fontSize: 13, + ), + textAlign: + TextAlign.center, + ), + ), + Container( + width: 100, + margin: + const EdgeInsets.only( + top: 15, + left: 15), + padding: + const EdgeInsets.all( + 5.0), + child: Text( calculateMarketValue( (double.parse(formKey .currentState! @@ -910,25 +929,26 @@ class _PropertyAppraisalPage extends State { state.items, depRate) .toString(), - formKey.currentState - ?.value[ - 'actual_use']), - style: TextStyle( - fontWeight: - FontWeight.bold, - fontSize: 13, + style: TextStyle( + fontWeight: + FontWeight.bold, + fontSize: 13, + ), + textAlign: + TextAlign.center, + ), ), - textAlign: TextAlign.center, - ), - ), - Container( - width: 100, - margin: const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all(5.0), - child: Text( - assessmentValue( + Container( + width: 100, + margin: + const EdgeInsets.only( + top: 15, + left: 15), + padding: + const EdgeInsets.all( + 5.0), + child: Text( + assessmentLevel( calculateMarketValue( (double.parse(formKey.currentState!.value[ 'total_area']) * @@ -942,91 +962,144 @@ class _PropertyAppraisalPage extends State { .toString(), formKey.currentState ?.value[ - 'actual_use']) - .toString(), - style: TextStyle( - fontWeight: - FontWeight.bold, - fontSize: 13, + 'actual_use']), + style: TextStyle( + fontWeight: + FontWeight.bold, + fontSize: 13, + ), + textAlign: + TextAlign.center, + ), ), - textAlign: TextAlign.center, - ), + Container( + width: 100, + margin: + const EdgeInsets.only( + top: 15, + left: 15), + padding: + const EdgeInsets.all( + 5.0), + child: Text( + assessmentValue( + calculateMarketValue( + (double.parse(formKey.currentState!.value['total_area']) * + double.parse(formKey + .currentState! + .value[ + 'bldg_type'] + .unitValue)), + state + .items, + depRate) + .toString(), + formKey.currentState + ?.value[ + 'actual_use']) + .toString(), + style: TextStyle( + fontWeight: + FontWeight.bold, + fontSize: 13, + ), + textAlign: + TextAlign.center, + ), + ), + ], ), - ], - ), - ) - ], - ), - ]))), + ) + ], + ), + ]))), + ), + ], ), - ], - ), - SizedBox( - height: 50, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - CustomButton( - icon: const Icon(Icons.chevron_left_rounded, - color: Colors.white), - onPressed: () { - { - widget.PrevBtn(); - } - ; - }, + SizedBox( + height: 50, ), - CustomButton( - icon: const Icon(Icons.chevron_right_rounded, - color: Colors.white), - onPressed: () async { - { - final tempID = - await SharedPreferences.getInstance(); - print(tempID.getInt('tempid')); - var appraisals = PropertyAppraisal( - id: 1, - bldgapprDetailsId: tempID.getInt('tempid')!, - unitconstructCost: formKey - .currentState!.value['bldg_type'].unitValue, - buildingCore: 'test', - unitconstructSubtotal: - (double.parse(formKey.currentState!.value['total_area']) * - double.parse(formKey.currentState! - .value['bldg_type'].unitValue)) - .toString(), - depreciationRate: depRate.toString(), - depreciationCost: calculateDepCost( + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon(Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () async { + { + final tempID = + await SharedPreferences.getInstance(); + print(tempID.getInt('tempid')); + var appraisals = PropertyAppraisal( + id: 1, + bldgapprDetailsId: + tempID.getInt('tempid')! - 1, + unitconstructCost: formKey.currentState! + .value['bldg_type'].unitValue, + buildingCore: 'test', + unitconstructSubtotal: (double.parse(formKey.currentState!.value['total_area']) * - double.parse( - formKey.currentState!.value['bldg_type'].unitValue)), - state.items, - depRate) - .toString(), - costAddItems: calculateAdditionalItems(state.items).toString(), - addItemsSubtotal: calculateAdditionalItems(state.items).toString(), - totalpercentDepreciation: (depRate * 100).toStringAsFixed(2), - marketValue: calculateMarketValue((double.parse(formKey.currentState!.value['total_area']) * double.parse(formKey.currentState!.value['bldg_type'].unitValue)), state.items, depRate).toString(), - totalArea: formKey.currentState!.value['total_area']); - context.read() - ..add( - AddPropertyAppraisal(appraisal: appraisals)); + double.parse(formKey + .currentState! + .value['bldg_type'] + .unitValue)) + .toString(), + depreciationRate: depRate.toString(), + depreciationCost: calculateDepCost( + (double.parse(formKey.currentState!.value['total_area']) * + double.parse(formKey.currentState!.value['bldg_type'].unitValue)), + state.items, + depRate) + .toString(), + costAddItems: calculateAdditionalItems(state.items).toString(), + addItemsSubtotal: calculateAdditionalItems(state.items).toString(), + totalpercentDepreciation: (depRate * 100).toStringAsFixed(2), + marketValue: calculateMarketValue((double.parse(formKey.currentState!.value['total_area']) * double.parse(formKey.currentState!.value['bldg_type'].unitValue)), state.items, depRate).toString(), + totalArea: formKey.currentState!.value['total_area'], + actualUse: "Residential"); + context.read() + ..add(AddPropertyAppraisal( + appraisal: appraisals)); - widget.NextBtn(); - } - ; - }, - ) + widget.NextBtn(); + } + ; + }, + ) + ], + ), ], ), - ], - ), - ), - ); - } - return Container(); - }, + ), + ); + } + return Container(); + }, + ), + ), ); } + + Future _waitForAddPropertyInfoToComplete() async { + // Wait for the state change indicating completion + final propertyInfoState = context.read().state; + + if (propertyInfoState is PropertyInfoErrorState) { + // Check if the add operation was unsuccessful + return true; // You'll need to define this in your state class + } + + // Return false if the state didn't change as expected + return false; + } } diff --git a/lib/screens/passo/Building/add_building_components/property_assessment.dart b/lib/screens/passo/Building/add_building_components/property_assessment.dart index ff0d03c..386df67 100644 --- a/lib/screens/passo/Building/add_building_components/property_assessment.dart +++ b/lib/screens/passo/Building/add_building_components/property_assessment.dart @@ -40,1129 +40,585 @@ class _PropertyAssessmentPage extends State { String _memoranda = ''; final focus = FocusNode(); - String assessmentLevel(marketValues, property_class) { - final marketValue = double.parse(marketValues); - switch (property_class) { - case 'Residential': - if (marketValue < 175000) { - // setState(() { - // assessment_level = 0; - // }); - return '0 '; - } else if (marketValue < 300000 && marketValue > 175000) { - // setState(() { - // assessment_level = 0.10; - // }); - return '10 '; - } else if (marketValue < 500000 && marketValue > 300000) { - // setState(() { - // assessment_level = 0.20; - // }); - return '20 '; - } else if (marketValue < 750000 && marketValue > 500000) { - // setState(() { - // assessment_level = 0.25; - // }); - return '25 '; - } else if (marketValue < 1000000 && marketValue > 750000) { - // setState(() { - // assessment_level = 0.30; - // }); - return '30 '; - } else if (marketValue < 2000000 && marketValue > 1000000) { - // setState(() { - // assessment_level = 0.35; - // }); - return '35 '; - } else if (marketValue < 5000000 && marketValue > 2000000) { - // setState(() { - // assessment_level = 0.40; - // }); - return '40 '; - } else if (marketValue < 10000000 && marketValue > 5000000) { - // setState(() { - // assessment_level = 0.50; - // }); - return '50 '; - } else if (marketValue > 10000000) { - // setState(() { - // assessment_level = 0.60; - // }); - return '60 '; - } - break; - case 'Agricultural': - if (marketValue < 300000) { - // setState(() { - // assessment_level = 0.45; - // }); - return '45 '; - } else if (marketValue < 500000 && marketValue > 300000) { - // setState(() { - // assessment_level = 0.50; - // }); - return '50 '; - } else if (marketValue < 750000 && marketValue > 5000000) { - // setState(() { - // assessment_level = 0.55; - // }); - return '55 '; - } else if (marketValue < 1000000 && marketValue > 750000) { - // setState(() { - // assessment_level = 0.60; - // }); - return '60 '; - } else if (marketValue < 2000000 && marketValue > 1000000) { - // setState(() { - // assessment_level = 0.65; - // }); - return '65 '; - } else if (marketValue > 2000000) { - // setState(() { - // assessment_level = 0.70; - // }); - return '70 '; - } - break; - case 'Commercial': - if (marketValue < 300000) { - // setState(() { - // assessment_level = 0.30; - // }); - return '30 '; - } else if (marketValue < 500000 && marketValue > 300000) { - // setState(() { - // assessment_level = 0.35; - // }); - return '35 '; - } else if (marketValue < 750000 && marketValue > 500000) { - // setState(() { - // assessment_level = 0.40; - // }); - return '40 '; - } else if (marketValue < 1000000 && marketValue > 750000) { - // setState(() { - // assessment_level = 0.50; - // }); - return '50 '; - } else if (marketValue < 2000000 && marketValue > 1000000) { - // setState(() { - // assessment_level = 0.60; - // }); - return '60 '; - } else if (marketValue < 5000000 && marketValue > 2000000) { - // setState(() { - // assessment_level = 0.70; - // }); - return '70 '; - } else if (marketValue < 10000000 && marketValue > 5000000) { - // setState(() { - // assessment_level = 0.75; - // }); - return '75 '; - } else if (marketValue > 10000000) { - // setState(() { - // assessment_level = 0.80; - // }); - } - break; - case 'Industrial': - if (marketValue < 300000) { - // setState(() { - // assessment_level = 0.30; - // }); - return '30 '; - } else if (marketValue < 500000 && marketValue > 300000) { - // setState(() { - // assessment_level = 0.35; - // }); - return '35 '; - } else if (marketValue < 750000 && marketValue > 500000) { - // setState(() { - // assessment_level = 0.40; - // }); - return '40 '; - } else if (marketValue < 1000000 && marketValue > 750000) { - // setState(() { - // assessment_level = 0.50; - // }); - return '50 '; - } else if (marketValue < 2000000 && marketValue > 1000000) { - // setState(() { - // assessment_level = 0.60; - // }); - return '60 '; - } else if (marketValue < 5000000 && marketValue > 2000000) { - // setState(() { - // assessment_level = 0.70; - // }); - return '70 '; - } else if (marketValue < 10000000 && marketValue > 5000000) { - // setState(() { - // assessment_level = 0.75; - // }); - return '75 '; - } else if (marketValue > 10000000) { - // setState(() { - // assessment_level = 0.80; - // }); - return '80 '; - } - break; - case 'Mineral': - break; - case 'Timberland': - if (marketValue < 300000) { - // setState(() { - // assessment_level = 0.45; - // }); - return '45 '; - } else if (marketValue < 500000 && marketValue > 300000) { - // setState(() { - // assessment_level = 0.50; - // }); - return '50 '; - } else if (marketValue < 750000 && marketValue > 500000) { - // setState(() { - // assessment_level = 0.55; - // }); - return '55 '; - } else if (marketValue < 1000000 && marketValue > 750000) { - // setState(() { - // assessment_level = 0.60; - // }); - return '60 '; - } else if (marketValue < 2000000 && marketValue > 1000000) { - // setState(() { - // assessment_level = 0.65; - // }); - return '65 '; - } else if (marketValue < 2000000) { - // setState(() { - // assessment_level = 0.70; - // }); - return '70 '; - } - break; - default: - } - return ''; - } - - double assessmentValue(marketValues, property_class) { - final marketValue = double.parse(marketValues); - switch (property_class) { - case 'Residential': - if (marketValue < 175000) { - // setState(() { - // assessment_level = 0; - // }); - return marketValue * 0; - } else if (marketValue < 300000 && marketValue > 175000) { - // setState(() { - // assessment_level = 0.10; - // }); - return marketValue * 0.10; - } else if (marketValue < 500000 && marketValue > 300000) { - // setState(() { - // assessment_level = 0.20; - // }); - return marketValue * 0.20; - } else if (marketValue < 750000 && marketValue > 500000) { - // setState(() { - // assessment_level = 0.25; - // }); - return marketValue * 0.25; - } else if (marketValue < 1000000 && marketValue > 750000) { - // setState(() { - // assessment_level = 0.30; - // }); - return marketValue * 0.30; - } else if (marketValue < 2000000 && marketValue > 1000000) { - // setState(() { - // assessment_level = 0.35; - // }); - return marketValue * 0.35; - } else if (marketValue < 5000000 && marketValue > 2000000) { - // setState(() { - // assessment_level = 0.40; - // }); - return marketValue * 0.40; - } else if (marketValue < 10000000 && marketValue > 5000000) { - // setState(() { - // assessment_level = 0.50; - // }); - return marketValue * 0.50; - } else if (marketValue > 10000000) { - // setState(() { - // assessment_level = 0.60; - // }); - return marketValue * 0.60; - } - break; - case 'Agricultural': - if (marketValue < 300000) { - // setState(() { - // assessment_level = 0.45; - // }); - return marketValue * 0.45; - } else if (marketValue < 500000 && marketValue > 300000) { - // setState(() { - // assessment_level = 0.50; - // }); - return marketValue * 0.50; - } else if (marketValue < 750000 && marketValue > 5000000) { - // setState(() { - // assessment_level = 0.55; - // }); - return marketValue * 0.55; - } else if (marketValue < 1000000 && marketValue > 750000) { - // setState(() { - // assessment_level = 0.60; - // }); - return marketValue * 0.60; - } else if (marketValue < 2000000 && marketValue > 1000000) { - // setState(() { - // assessment_level = 0.65; - // }); - return marketValue * 0.65; - } else if (marketValue > 2000000) { - // setState(() { - // assessment_level = 0.70; - // }); - return marketValue * 0.70; - } - break; - case 'Commercial': - if (marketValue < 300000) { - // setState(() { - // assessment_level = 0.30; - // }); - return marketValue * 0.30; - } else if (marketValue < 500000 && marketValue > 300000) { - // setState(() { - // assessment_level = 0.35; - // }); - return marketValue * 0.35; - } else if (marketValue < 750000 && marketValue > 500000) { - // setState(() { - // assessment_level = 0.40; - // }); - return marketValue * 0.40; - } else if (marketValue < 1000000 && marketValue > 750000) { - // setState(() { - // assessment_level = 0.50; - // }); - return marketValue * 0.50; - } else if (marketValue < 2000000 && marketValue > 1000000) { - // setState(() { - // assessment_level = 0.60; - // }); - return marketValue * 0.60; - } else if (marketValue < 5000000 && marketValue > 2000000) { - // setState(() { - // assessment_level = 0.70; - // }); - return marketValue * 0.70; - } else if (marketValue < 10000000 && marketValue > 5000000) { - // setState(() { - // assessment_level = 0.75; - // }); - return marketValue * 0.75; - } else if (marketValue > 10000000) { - // setState(() { - // assessment_level = 0.80; - // }); - } - break; - case 'Industrial': - if (marketValue < 300000) { - // setState(() { - // assessment_level = 0.30; - // }); - return marketValue * 0.30; - } else if (marketValue < 500000 && marketValue > 300000) { - // setState(() { - // assessment_level = 0.35; - // }); - return marketValue * 0.35; - } else if (marketValue < 750000 && marketValue > 500000) { - // setState(() { - // assessment_level = 0.40; - // }); - return marketValue * 0.40; - } else if (marketValue < 1000000 && marketValue > 750000) { - // setState(() { - // assessment_level = 0.50; - // }); - return marketValue * 0.50; - } else if (marketValue < 2000000 && marketValue > 1000000) { - // setState(() { - // assessment_level = 0.60; - // }); - return marketValue * 0.60; - } else if (marketValue < 5000000 && marketValue > 2000000) { - // setState(() { - // assessment_level = 0.70; - // }); - return marketValue * 0.70; - } else if (marketValue < 10000000 && marketValue > 5000000) { - // setState(() { - // assessment_level = 0.75; - // }); - return marketValue * 0.75; - } else if (marketValue > 10000000) { - // setState(() { - // assessment_level = 0.80; - // }); - return marketValue * 0.80; - } - break; - case 'Mineral': - break; - case 'Timberland': - if (marketValue < 300000) { - // setState(() { - // assessment_level = 0.45; - // }); - return marketValue * 0.45; - } else if (marketValue < 500000 && marketValue > 300000) { - // setState(() { - // assessment_level = 0.50; - // }); - return marketValue * 0.50; - } else if (marketValue < 750000 && marketValue > 500000) { - // setState(() { - // assessment_level = 0.55; - // }); - return marketValue * 0.55; - } else if (marketValue < 1000000 && marketValue > 750000) { - // setState(() { - // assessment_level = 0.60; - // }); - return marketValue * 0.60; - } else if (marketValue < 2000000 && marketValue > 1000000) { - // setState(() { - // assessment_level = 0.65; - // }); - return marketValue * 0.65; - } else if (marketValue < 2000000) { - // setState(() { - // assessment_level = 0.70; - // }); - return marketValue * 0.70; - } - break; - default: - } - return 0; - } - @override Widget build(BuildContext context) { return Scaffold( - resizeToAvoidBottomInset: true, - body: ProgressHUD( - padding: const EdgeInsets.all(24), - backgroundColor: Colors.black87, - indicatorWidget: const SpinKitFadingCircle(color: Colors.white), - child: BlocConsumer( - listener: (context, state) { - if (state is PropertyAssessmentLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Please wait..."); - } - if (state is PropertyAssessmentLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - if (state is PropertyAssessmentErrorState) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - // Fluttertoast.showToast( - // msg: onError, - // fontSize: 24, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.CENTER, - // backgroundColor: Colors.black, - // textColor: Colors.white); - } - }, - builder: (context, state) { - if (state is PropertyAssessmentLoaded) { - return BlocConsumer( - listener: (context, state) { - if (state is SignatoriesLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Please wait..."); - } - if (state is SignatoriesLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - if (state is SignatoriesErrorState) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - // Fluttertoast.showToast( - // msg: onError, - // fontSize: 24, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.CENTER, - // backgroundColor: Colors.black, - // textColor: Colors.white); - } - }, - builder: (context, state) { - if (state is SignatoriesLoaded) { - final signatories = state.signatories; - return BlocConsumer( - listener: (context, state) { - if (state is MemorandaLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Please wait..."); - } - if (state is MemorandaLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - if (state is MemorandaErrorState) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - // Fluttertoast.showToast( - // msg: onError, - // fontSize: 24, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.CENTER, - // backgroundColor: Colors.black, - // textColor: Colors.white); - } - }, - builder: (context, state) { - if (state is MemorandaLoaded) { - final memoranda = state.memorada; - return BlocConsumer( - listener: (context, state) { - if (state is PropertyAppraisalLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Please wait..."); - } - if (state is PropertyAppraisalLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - if (state is PropertyAppraisalErrorState) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - // Fluttertoast.showToast( - // msg: onError, - // fontSize: 24, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.CENTER, - // backgroundColor: Colors.black, - // textColor: Colors.white); - } - }, builder: (context, state) { - if (state is PropertyAppraisalLoaded) { - return ListView( - children: [ + resizeToAvoidBottomInset: true, + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + // TODO: implement listener + }, + builder: (context, state) { + if (state is SignatoriesLoaded) { + final signatories = state.signatories; + return BlocConsumer( + listener: (context, state) { + // TODO: implement listener + }, + builder: (context, state) { + if (state is MemorandaLoaded) { + final memoranda = state.memorada; + return ListView( + children: [ + Align( + alignment: Alignment.center, + child: Container( + margin: const EdgeInsets.fromLTRB(0, 20, 0, 20), + child: const Text( + 'PROPERTY ASSESSMENT cont..', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + ), + textAlign: TextAlign.left, + ), + ), + ), + Expanded( + flex: 3, + child: SingleChildScrollView( + padding: + EdgeInsets.only(left: 20.0, right: 20.0), + scrollDirection: Axis.vertical, + child: Column(children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Row( + children: [ + const Text('Taxable'), + Checkbox( + checkColor: Colors.white, + value: isTaxable, + onChanged: (bool? value) { + setState(() { + isTaxable = value!; + }); + }, + ) + ], + ), + Row( + children: [ + const Text('Exempt'), + Checkbox( + checkColor: Colors.white, + value: isExempt, + onChanged: (bool? value) { + setState(() { + isExempt = value!; + }); + }, + ) + ], + ), + ], + ), + Column( + children: [ + const SizedBox( + height: 20, + ), + const Text( + 'EFFECTIVITY OF ASSESSMENT / REASSESSMENT :', + style: TextStyle( + fontWeight: FontWeight.bold), + ), + const SizedBox( + height: 20, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + const Text('Qtr.'), + SizedBox( + width: 70, + height: 25, + child: FormBuilderTextField( + name: 'qtr', + validator: + FormBuilderValidators.compose( + []), + ), + ), + const SizedBox( + width: 20, + ), + const Text('Yr.'), + SizedBox( + width: 70, + height: 25, + child: FormBuilderTextField( + name: 'yr', + validator: + FormBuilderValidators.compose( + []), + ), + ), + ], + ), + ], + ), + const SizedBox( + height: 30, + ), Align( - alignment: Alignment.center, - child: Container( - margin: const EdgeInsets.fromLTRB( - 0, 20, 0, 20), - child: const Text( - 'PROPERTY ASSESSMENT cont..', + alignment: Alignment.centerLeft, + child: Text( + 'APPRAISED/ASSESSED BY:', + style: TextStyle( + fontWeight: FontWeight.bold), + textAlign: TextAlign.start, + ), + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Column( + children: [ + SizedBox( + width: 200, + child: FormBuilderDropdown< + Signatories>( + name: 'appraised_by', + autofocus: false, + items: signatories + .map((signatories) => + DropdownMenuItem( + value: signatories, + child: Text( + '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), + )) + .toList()), + ), + Text('Name'), + ], + ), + const SizedBox( + width: 15, + ), + Column( + children: [ + SizedBox( + width: 100, + child: FormBuilderDateTimePicker( + name: 'app_date', + initialEntryMode: + DatePickerEntryMode + .calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, + + initialTime: const TimeOfDay( + hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + Text('Date'), + ], + ), + ], + ), + const SizedBox( + height: 30, + ), + const Align( + alignment: Alignment.centerLeft, + child: Text( + 'RECOMMENDING APPROVAL:', + style: TextStyle( + fontWeight: FontWeight.bold), + )), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Column( + children: [ + SizedBox( + width: 200, + child: FormBuilderDropdown< + Signatories>( + name: 'rec_approval', + autofocus: false, + items: signatories + .map((signatories) => + DropdownMenuItem( + value: signatories, + child: Text( + '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), + )) + .toList()), + ), + Text('Name'), + ], + ), + const SizedBox( + width: 15, + ), + Column( + children: [ + SizedBox( + width: 100, + child: FormBuilderDateTimePicker( + name: 'rec_date', + initialEntryMode: + DatePickerEntryMode + .calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, + + initialTime: const TimeOfDay( + hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + Text('Date'), + ], + ), + ], + ), + const SizedBox( + height: 30, + ), + const Align( + alignment: Alignment.centerLeft, + child: Text( + 'APPROVED BY:', style: TextStyle( fontWeight: FontWeight.bold, - fontSize: 18, ), - textAlign: TextAlign.left, + )), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Column( + children: [ + SizedBox( + width: 200, + child: FormBuilderDropdown< + Signatories>( + name: 'apprvd_by', + autofocus: false, + items: signatories + .map((signatories) => + DropdownMenuItem( + value: signatories, + child: Text( + '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), + )) + .toList()), + ), + Text('Name'), + ], + ), + ], + ), + const SizedBox( + height: 50, + ), + const Align( + alignment: Alignment.centerLeft, + child: Text( + 'MEMORANDA: ', + style: TextStyle( + fontWeight: FontWeight.bold, + ), + )), + SizedBox( + height: 30, + ), + SizedBox( + width: 500, + height: 100, + child: SearchField( + itemHeight: 70, + suggestions: memoranda + .map((Memoranda memoranda) => + SearchFieldListItem( + '${memoranda.memoranda}', + item: + memoranda, // Change: Use individual Memoranda object + child: ListTile( + title: Text( + '${memoranda.memoranda}', + overflow: + TextOverflow.ellipsis, + ), + ), + )) + .toList(), + validator: + FormBuilderValidators.required( + errorText: + "This field is required"), + // searchInputDecoration: + // normalTextFieldStyle( + // "Memoranda", "") + // .copyWith( + // suffixIcon: const Icon( + // Icons.arrow_drop_down), + // ), + // focusNode: focus, + suggestionState: Suggestion.expand, + onSuggestionTap: (memoranda) { + setState(() { + _memoranda = + memoranda.item!.memoranda!; + }); + focus.unfocus(); + }, + )), + SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text('Sworn Statement No. :'), + SizedBox( + width: 150, + height: 20, + child: FormBuilderTextField( + name: 'sworn_statement', + decoration: InputDecoration(), + validator: + FormBuilderValidators.compose([]), + ), + ), + ], + ), + SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text('Date Received:'), + SizedBox( + width: 150, + height: 20, + child: FormBuilderDateTimePicker( + name: 'date_received', + initialEntryMode: + DatePickerEntryMode.calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, + + initialTime: const TimeOfDay( + hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + ], + ), + SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + 'Date of Entry in the Rec. of Ass. :'), + SizedBox( + width: 100, + height: 20, + child: FormBuilderDateTimePicker( + name: 'date_of_entry', + initialEntryMode: + DatePickerEntryMode.calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, + + initialTime: const TimeOfDay( + hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + ], + ), + SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text('By:'), + SizedBox( + width: 150, + height: 20, + child: FormBuilderTextField( + name: 'by', + decoration: InputDecoration(), + validator: + FormBuilderValidators.compose([]), + ), + ), + ], + ), + SizedBox( + height: 30, + ), + ElevatedButton( + onPressed: () async { + final tempID = + await SharedPreferences.getInstance(); + print(tempID.getInt('tempid')! - 1); + final List + propertyAssessments = []; + + PropertyAssessment ass = + PropertyAssessment( + id: 1, + bldgapprDetailsId: + tempID.getInt('tempid')! - 1, + actualUse: formKey.currentState! + .value['actual_use'] ?? + '', // Replace null with an empty string + marketValue: '0.00', + assessmentLevel: '0.00', + assessedValue: '0.00', + taxable: isTaxable, + exempt: isExempt, + qtr: int.parse(formKey + .currentState!.value['qtr'] ?? + '0'), // Replace null with '0' + yr: int.parse( + formKey.currentState!.value['yr'] ?? + '0'), // Replace null with '0' + appraisedbyName: (formKey + .currentState! + .value['appraised_by'] + ?.firstname ?? + '') + + ' ' + + (formKey + .currentState! + .value['appraised_by'] + ?.middlename ?? + '') + + ' ' + + (formKey + .currentState! + .value['appraised_by'] + ?.lastname ?? + ''), + appraisedbyDate: formKey.currentState! + .value['app_date'] + as DateTime? ?? + DateTime + .now(), // Replace null with current date + recommendapprName: (formKey + .currentState! + .value['rec_approval'] + ?.firstname ?? + '') + + ' ' + + (formKey + .currentState! + .value['rec_approval'] + ?.middlename ?? + '') + + ' ' + + (formKey + .currentState! + .value['rec_approval'] + ?.lastname ?? + ''), + recommendapprDate: formKey.currentState! + .value['rec_date'] + as DateTime? ?? + DateTime + .now(), // Replace null with current date + approvedbyName: (formKey + .currentState! + .value['apprvd_by'] + ?.firstname ?? + '') + + ' ' + + (formKey + .currentState! + .value['apprvd_by'] + ?.middlename ?? + '') + + ' ' + + (formKey + .currentState! + .value['apprvd_by'] + ?.lastname ?? + ''), + memoranda: _memoranda, + swornstatementNo: formKey.currentState! + .value['sworn_statement'] ?? + '', // Replace null with an empty string + dateReceived: formKey.currentState! + .value['date_received'] + as DateTime? ?? + DateTime + .now(), // Replace null with current date + entryDateAssessment: formKey + .currentState! + .value['date_of_entry'] + as DateTime? ?? + DateTime + .now(), // Replace null with current date + entryDateBy: formKey + .currentState!.value['by'] ?? + '', // Replace null with an empty string + ); + + propertyAssessments.add(ass); + + context.read() + ..add(UpdatePropertyAssessment( + assessment: + propertyAssessments[0])); + widget.function(); + }, + style: ElevatedButton.styleFrom( + backgroundColor: primary, + foregroundColor: Colors.red), + child: SizedBox( + width: 200, + height: 50, + child: Align( + alignment: Alignment.center, + child: Text( + 'Save', + style: TextStyle( + color: Colors.white, + ), + textAlign: TextAlign.center, + ), ), ), ), - Expanded( - flex: 3, - child: SingleChildScrollView( - padding: EdgeInsets.only( - left: 20.0, right: 20.0), - scrollDirection: Axis.vertical, - child: Column(children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceAround, - children: [ - Row( - children: [ - const Text('Taxable'), - Checkbox( - checkColor: Colors.white, - value: isTaxable, - onChanged: (bool? value) { - setState(() { - isTaxable = value!; - }); - }, - ) - ], - ), - Row( - children: [ - const Text('Exempt'), - Checkbox( - checkColor: Colors.white, - value: isExempt, - onChanged: (bool? value) { - setState(() { - isExempt = value!; - }); - }, - ) - ], - ), - ], - ), - Column( - children: [ - const SizedBox( - height: 20, - ), - const Text( - 'EFFECTIVITY OF ASSESSMENT / REASSESSMENT :', - style: TextStyle( - fontWeight: FontWeight.bold), - ), - const SizedBox( - height: 20, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceAround, - children: [ - const Text('Qtr.'), - SizedBox( - width: 70, - height: 25, - child: FormBuilderTextField( - name: 'qtr', - validator: - FormBuilderValidators - .compose([]), - ), - ), - const SizedBox( - width: 20, - ), - const Text('Yr.'), - SizedBox( - width: 70, - height: 25, - child: FormBuilderTextField( - name: 'yr', - validator: - FormBuilderValidators - .compose([]), - ), - ), - ], - ), - ], - ), - const SizedBox( - height: 30, - ), - Align( - alignment: Alignment.centerLeft, - child: Text( - 'APPRAISED/ASSESSED BY:', - style: TextStyle( - fontWeight: FontWeight.bold), - textAlign: TextAlign.start, - ), - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceAround, - children: [ - Column( - children: [ - SizedBox( - width: 200, - child: FormBuilderDropdown< - Signatories>( - name: 'appraised_by', - autofocus: false, - items: signatories - .map((signatories) => - DropdownMenuItem( - value: - signatories, - child: Text( - '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), - )) - .toList()), - ), - Text('Name'), - ], - ), - const SizedBox( - width: 15, - ), - Column( - children: [ - SizedBox( - width: 100, - child: - FormBuilderDateTimePicker( - name: 'app_date', - initialEntryMode: - DatePickerEntryMode - .calendarOnly, - initialValue: - DateTime.now(), - inputType: InputType.date, - - initialTime: - const TimeOfDay( - hour: 8, minute: 0), - // locale: const Locale.fromSubtags(languageCode: 'fr'), - ), - ), - Text('Date'), - ], - ), - ], - ), - const SizedBox( - height: 30, - ), - const Align( - alignment: Alignment.centerLeft, - child: Text( - 'RECOMMENDING APPROVAL:', - style: TextStyle( - fontWeight: FontWeight.bold), - )), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceAround, - children: [ - Column( - children: [ - SizedBox( - width: 200, - child: FormBuilderDropdown< - Signatories>( - name: 'rec_approval', - autofocus: false, - items: signatories - .map((signatories) => - DropdownMenuItem( - value: - signatories, - child: Text( - '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), - )) - .toList()), - ), - Text('Name'), - ], - ), - const SizedBox( - width: 15, - ), - Column( - children: [ - SizedBox( - width: 100, - child: - FormBuilderDateTimePicker( - name: 'rec_date', - initialEntryMode: - DatePickerEntryMode - .calendarOnly, - initialValue: - DateTime.now(), - inputType: InputType.date, - - initialTime: - const TimeOfDay( - hour: 8, minute: 0), - // locale: const Locale.fromSubtags(languageCode: 'fr'), - ), - ), - Text('Date'), - ], - ), - ], - ), - const SizedBox( - height: 30, - ), - const Align( - alignment: Alignment.centerLeft, - child: Text( - 'APPROVED BY:', - style: TextStyle( - fontWeight: FontWeight.bold, - ), - )), - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Column( - children: [ - SizedBox( - width: 200, - child: FormBuilderDropdown< - Signatories>( - name: 'apprvd_by', - autofocus: false, - items: signatories - .map((signatories) => - DropdownMenuItem( - value: - signatories, - child: Text( - '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), - )) - .toList()), - ), - Text('Name'), - ], - ), - ], - ), - const SizedBox( - height: 50, - ), - const Align( - alignment: Alignment.centerLeft, - child: Text( - 'MEMORANDA: ', - style: TextStyle( - fontWeight: FontWeight.bold, - ), - )), - SizedBox( - height: 30, - ), - SizedBox( - width: 500, - height: 100, - child: SearchField( - itemHeight: 70, - suggestions: memoranda - .map((Memoranda memoranda) => - SearchFieldListItem( - '${memoranda.memoranda}', - item: - memoranda, // Change: Use individual Memoranda object - child: ListTile( - title: Text( - '${memoranda.memoranda}', - overflow: - TextOverflow - .ellipsis, - ), - ), - )) - .toList(), - validator: FormBuilderValidators - .required( - errorText: - "This field is required"), - // searchInputDecoration: - // normalTextFieldStyle( - // "Memoranda", "") - // .copyWith( - // suffixIcon: const Icon( - // Icons.arrow_drop_down), - // ), - // focusNode: focus, - suggestionState: - Suggestion.expand, - onSuggestionTap: (memoranda) { - setState(() { - _memoranda = memoranda - .item!.memoranda!; - }); - focus.unfocus(); - }, - )), - SizedBox( - height: 30, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text('Sworn Statement No. :'), - SizedBox( - width: 150, - height: 20, - child: FormBuilderTextField( - name: 'sworn_statement', - decoration: InputDecoration(), - validator: FormBuilderValidators - .compose([]), - ), - ), - ], - ), - SizedBox( - height: 30, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text('Date Received:'), - SizedBox( - width: 150, - height: 20, - child: FormBuilderDateTimePicker( - name: 'date_received', - initialEntryMode: - DatePickerEntryMode - .calendarOnly, - initialValue: DateTime.now(), - inputType: InputType.date, - - initialTime: const TimeOfDay( - hour: 8, minute: 0), - // locale: const Locale.fromSubtags(languageCode: 'fr'), - ), - ), - ], - ), - SizedBox( - height: 30, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Date of Entry in the Rec. of Ass. :'), - SizedBox( - width: 100, - height: 20, - child: FormBuilderDateTimePicker( - name: 'date_of_entry', - initialEntryMode: - DatePickerEntryMode - .calendarOnly, - initialValue: DateTime.now(), - inputType: InputType.date, - - initialTime: const TimeOfDay( - hour: 8, minute: 0), - // locale: const Locale.fromSubtags(languageCode: 'fr'), - ), - ), - ], - ), - SizedBox( - height: 30, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text('By:'), - SizedBox( - width: 150, - height: 20, - child: FormBuilderTextField( - name: 'by', - decoration: InputDecoration(), - validator: FormBuilderValidators - .compose([]), - ), - ), - ], - ), - SizedBox( - height: 30, - ), - ElevatedButton( - onPressed: () async { - final tempID = - await SharedPreferences - .getInstance(); - print(tempID.getInt('tempid')! - 1); - final List - propertyAssessments = []; - - PropertyAssessment ass = - PropertyAssessment( - id: 1, - bldgapprDetailsId: - tempID.getInt('tempid')! - 1, - actualUse: formKey.currentState! - .value['actual_use'], - marketValue: '0.00', - assessmentLevel: '0.00', - assessedValue: '0.00', - taxable: isTaxable, - exempt: isExempt, - qtr: int.parse(formKey - .currentState!.value['qtr']), - yr: int.parse(formKey - .currentState!.value['yr']), - appraisedbyName: formKey - .currentState! - .value['appraised_by'] - .firstname + - ' ' + - formKey - .currentState! - .value['appraised_by'] - .middlename + - ' ' + - formKey - .currentState! - .value['appraised_by'] - .lastname, - appraisedbyDate: formKey - .currentState! - .value['app_date'], - recommendapprName: formKey - .currentState! - .value['rec_approval'] - .firstname + - ' ' + - formKey - .currentState! - .value['rec_approval'] - .middlename + - ' ' + - formKey - .currentState! - .value['rec_approval'] - .lastname, - recommendapprDate: formKey - .currentState! - .value['rec_date'], - approvedbyName: formKey - .currentState! - .value['apprvd_by'] - .firstname + - ' ' + - formKey - .currentState! - .value['apprvd_by'] - .middlename + - ' ' + - formKey - .currentState! - .value['apprvd_by'] - .lastname, - memoranda: _memoranda, - swornstatementNo: formKey - .currentState! - .value['sworn_statement'], - dateReceived: formKey - .currentState! - .value['date_received'], - entryDateAssessment: formKey - .currentState! - .value['date_of_entry'], - entryDateBy: formKey - .currentState!.value['by'], - ); - - propertyAssessments.add(ass); - - context - .read() - ..add(UpdatePropertyAssessment( - assessment: - propertyAssessments[0])); - widget.function(); - }, - style: ElevatedButton.styleFrom( - backgroundColor: primary, - foregroundColor: Colors.red), - child: SizedBox( - width: 200, - height: 50, - child: Align( - alignment: Alignment.center, - child: Text( - 'Save', - style: TextStyle( - color: Colors.white, - ), - textAlign: TextAlign.center, - ), - ), - ), - ), - SizedBox( - height: 30, - ), - ]), - ), - ) - ], - ); - } - if (state is PropertyAppraisalErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context.read().add( - LoadPropertyAppraisal( - appraisal: PropertyAppraisal())); - }, - ); - } - return Container(); - }); - } - if (state is MemorandaErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context - .read() - .add(LoadMemoranda()); - }, - ); - } - return Container(); - }, - ); - } - if (state is SignatoriesErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context.read().add(LoadSignatories()); - }, - ); - } - return Container(); - }, - ); - } - if (state is PropertyAssessmentErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context - .read() - .add(LoadPropertyAssessment()); - }, - ); - } - return Container(); - }, - ), - ), - ); + SizedBox( + height: 30, + ), + ]), + ), + ) + ], + ); + } + return Container(); + }, + ); + } + return Container(); + }, + ))); } } diff --git a/lib/screens/passo/Building/add_building_components/property_info.dart b/lib/screens/passo/Building/add_building_components/property_info.dart index 6cad1fc..80fafaa 100644 --- a/lib/screens/passo/Building/add_building_components/property_info.dart +++ b/lib/screens/passo/Building/add_building_components/property_info.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; +import 'package:fluttertoast/fluttertoast.dart'; import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart'; import 'package:unit2/model/passo/property_info.dart'; import 'package:unit2/screens/passo/Building/add_building.dart'; @@ -98,42 +99,52 @@ class _PropertyInfoPage extends State { CustomButton( icon: const Icon(Icons.chevron_right, color: Colors.white), onPressed: () async { - var property_info = PropertyInfo( - id: 1, - transCode: formKey.currentState!.value['transaction_code'] - .toString(), - tdn: formKey.currentState!.value['arp_td'], - pin: formKey.currentState!.value['pin'], - owner: formKey.currentState!.value['owner'], - address: formKey.currentState!.value['address'], - telno: formKey.currentState!.value['tel_no'], - tin: formKey.currentState!.value['tin'], - adminUser: formKey.currentState!.value['benificiary'], - adminAddress: - formKey.currentState!.value['benificiary_address'], - adminTin: formKey.currentState!.value['benificiary_tin'], - adminTelno: - formKey.currentState!.value['benificiary_telno'], - assessedById: '1', - assessedByName: 'Cyril', - faasType: "BUILDING", - dateModified: DateTime.now(), - dateCreated: DateTime.now()); + try { + var property_info = PropertyInfo( + id: 1, + transCode: formKey + .currentState!.value['transaction_code'] + .toString(), + tdn: formKey.currentState!.value['arp_td'], + pin: formKey.currentState!.value['pin'], + owner: formKey.currentState!.value['owner'], + address: formKey.currentState!.value['address'], + telno: formKey.currentState!.value['tel_no'], + tin: formKey.currentState!.value['tin'], + adminUser: formKey.currentState!.value['benificiary'], + adminAddress: + formKey.currentState!.value['benificiary_address'], + adminTin: + formKey.currentState!.value['benificiary_tin'], + adminTelno: + formKey.currentState!.value['benificiary_telno'], + assessedById: '1', + assessedByName: 'Cyril', + faasType: "BUILDING", + dateModified: DateTime.now(), + dateCreated: DateTime.now()); - // Dispatch the event to add the property_info - context.read().add( - AddPropertyInfo(property_info: property_info), - ); + // Dispatch the event to add the property_info + context.read().add( + AddPropertyInfo(property_info: property_info), + ); + widget.handleButtonPress(); + } catch (e) { + Fluttertoast.showToast( + msg: "Slow internet connection, please try again!"); + } // Wait for the event to complete and get the result - bool success = await _waitForAddPropertyInfoToComplete(); + // bool failed = await _waitForAddPropertyInfoToComplete(); - if (success) { - // Proceed to the next step or perform an action - widget.handleButtonPress(); - } else { - // Stay or show an error message - } + // if (failed) { + // // Proceed to the next step or perform an action + // Fluttertoast.showToast( + // msg: "Slow internet connection, please try again!"); + // } else { + // // Stay or show an error message + // widget.handleButtonPress(); + // } }, ) ]), @@ -145,8 +156,8 @@ class _PropertyInfoPage extends State { // Wait for the state change indicating completion final propertyInfoState = context.read().state; - if (propertyInfoState is PropertyInfoLoaded) { - // Check if the add operation was successful + if (propertyInfoState is PropertyInfoErrorState) { + // Check if the add operation was unsuccessful return true; // You'll need to define this in your state class } diff --git a/lib/screens/passo/Building/add_building_components/structural_materials.dart b/lib/screens/passo/Building/add_building_components/structural_materials.dart index 67f6edd..95c7db4 100644 --- a/lib/screens/passo/Building/add_building_components/structural_materials.dart +++ b/lib/screens/passo/Building/add_building_components/structural_materials.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:fluttertoast/fluttertoast.dart'; import 'package:multiselect/multiselect.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart'; @@ -51,371 +52,380 @@ class _StructuralMaterialsPage extends State { @override Widget build(BuildContext context) { - return SingleChildScrollView( - padding: const EdgeInsets.all(30.0), - child: Column( - children: [ - Container( - margin: - const EdgeInsets.only(left: 0, top: 20, right: 0, bottom: 10), - child: const Text('STRUCTURAL MATERIALS', - style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18), - textAlign: TextAlign.left), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'FOUNDATION', - textAlign: TextAlign.start, + return StatefulBuilder(builder: (context, structuralState) { + return SingleChildScrollView( + padding: const EdgeInsets.all(30.0), + child: Column( + children: [ + Container( + margin: + const EdgeInsets.only(left: 0, top: 20, right: 0, bottom: 10), + child: const Text('STRUCTURAL MATERIALS', + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18), + textAlign: TextAlign.left), ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: foundationOthers, - onChanged: (bool? value) { - setState(() { - foundationOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: foundationOthers, - child: customTextField( - "Enter other foundation", "", "other_foundation"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - foundation = x; - }); - }, - options: const ['Reinforced Concrete', 'Plain Concrete'], - selectedValues: foundation, - whenEmpty: 'Select Foundations', + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Text( + 'FOUNDATION', + textAlign: TextAlign.start, ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'COLUMNS', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: columOthers, - onChanged: (bool? value) { - setState(() { - columOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: columOthers, - child: customTextField("Enter other columns", "", "other_column"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - column = x; - }); - }, - options: const ['Steel', 'Reinforced Concrete', 'Wood'], - selectedValues: column, - whenEmpty: 'Select Column/s', - ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'BEAMS', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: beamsOthers, - onChanged: (bool? value) { - setState(() { - beamsOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: beamsOthers, - child: customTextField("Enter other beam/s", "", "other_beam"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - beam = x; - }); - }, - options: const ['Steel', 'Reinforced Concrete', 'Wood'], - selectedValues: beam, - whenEmpty: 'Select Beam/s', - ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'TRUSS FRAMING', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: tfOthers, - onChanged: (bool? value) { - setState(() { - tfOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: tfOthers, - child: customTextField( - "Enter other truss framing/s", "", "other_tf"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - truss_framing = x; - }); - }, - options: const ['Steel', 'Wood'], - selectedValues: truss_framing, - whenEmpty: 'Select Truss Framing/s', - ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'ROOF', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: roofOthers, - onChanged: (bool? value) { - setState(() { - roofOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: roofOthers, - child: customTextField("Enter other roof/s", "", "other_roof"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - roof = x; - }); - }, - options: const [ - 'Reinforced Concrete', - 'Tiles', - 'G.I Sheet', - 'Aluminum', - 'Asbestos', - 'Long Span', - 'Concrete Desk', - 'Nipa/Anahaw/Cogon' + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: foundationOthers, + onChanged: (bool? value) { + structuralState(() { + foundationOthers = value!; + }); + }, + ) ], - selectedValues: roof, - whenEmpty: 'Select Roof/s', + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: foundationOthers, + child: customTextField( + "Enter other foundation", "", "other_foundation"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + structuralState(() { + foundation = x; + }); + }, + options: const ['Reinforced Concrete', 'Plain Concrete'], + selectedValues: foundation, + whenEmpty: 'Select Foundations', + ), ), ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'FLOORING', - textAlign: TextAlign.start, + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Text( + 'COLUMNS', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: columOthers, + onChanged: (bool? value) { + structuralState(() { + columOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: columOthers, + child: + customTextField("Enter other columns", "", "other_column"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + structuralState(() { + column = x; + }); + }, + options: const ['Steel', 'Reinforced Concrete', 'Wood'], + selectedValues: column, + whenEmpty: 'Select Column/s', + ), + ), + ), + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Text( + 'BEAMS', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: beamsOthers, + onChanged: (bool? value) { + structuralState(() { + beamsOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: beamsOthers, + child: customTextField("Enter other beam/s", "", "other_beam"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + structuralState(() { + beam = x; + }); + }, + options: const ['Steel', 'Reinforced Concrete', 'Wood'], + selectedValues: beam, + whenEmpty: 'Select Beam/s', + ), + ), + ), + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Text( + 'TRUSS FRAMING', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: tfOthers, + onChanged: (bool? value) { + structuralState(() { + tfOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: tfOthers, + child: customTextField( + "Enter other truss framing/s", "", "other_tf"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + structuralState(() { + truss_framing = x; + }); + }, + options: const ['Steel', 'Wood'], + selectedValues: truss_framing, + whenEmpty: 'Select Truss Framing/s', + ), + ), + ), + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Text( + 'ROOF', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: roofOthers, + onChanged: (bool? value) { + structuralState(() { + roofOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: roofOthers, + child: customTextField("Enter other roof/s", "", "other_roof"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + structuralState(() { + roof = x; + }); + }, + options: const [ + 'Reinforced Concrete', + 'Tiles', + 'G.I Sheet', + 'Aluminum', + 'Asbestos', + 'Long Span', + 'Concrete Desk', + 'Nipa/Anahaw/Cogon' + ], + selectedValues: roof, + whenEmpty: 'Select Roof/s', + ), + ), + ), + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Text( + 'FLOORING', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: flooringOthers, + onChanged: (bool? value) { + structuralState(() { + flooringOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: flooringOthers, + child: customTextField( + "Enter other flooring/s", "", "other_flooring"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + structuralState(() { + flooring = x; + }); + }, + options: const [ + 'Reinforced Concrete', + 'Plain Cement', + 'Marble', + 'Wood', + 'Tiles' + ], + selectedValues: flooring, + whenEmpty: 'Select Flooring/s', + ), + ), + ), + Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Text( + 'WALLS & PARTITIONS', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: wpOthers, + onChanged: (bool? value) { + structuralState(() { + wpOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: wpOthers, + child: customTextField( + "Enter other walls & partition/s", "", "other_wp"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + walls = x; + }); + }, + options: const [ + 'Reinforced Concrete', + 'Plain Concrete', + 'Wood', + 'CHIB', + 'G.I Sheet', + 'Build-a-wall', + 'Sawali', + 'Bamboo' + ], + selectedValues: walls, + whenEmpty: 'Select Walls & Partition/s', + ), + ), ), Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: flooringOthers, - onChanged: (bool? value) { - setState(() { - flooringOthers = value!; - }); + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon(Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () async { + { + try { + final tempID = await SharedPreferences.getInstance(); + var strucMaterials = StructureMaterialsII( + id: tempID.getInt('tempid')! - 1, + foundation: foundationOthers + ? formKey + .currentState!.value['other_foundation'] + .split(',') + : foundation, + columns: columOthers + ? formKey.currentState!.value['other_column'] + .split(',') + : column, + beams: beamsOthers + ? formKey.currentState!.value['other_beam'] + .split(',') + : beam, + trussFraming: tfOthers + ? formKey.currentState!.value['other_tf'] + .split(',') + : truss_framing, + roof: roofOthers + ? formKey.currentState!.value['other_roof'] + .split(',') + : roof, + flooring: flooringOthers + ? formKey.currentState!.value['other_flooring'] + .split(',') + : flooring, + walls: wpOthers + ? formKey.currentState!.value['other_wp'] + .split(',') + : walls, + others: ["Others"]); + context.read() + ..add(UpdateStrucMaterials(data: strucMaterials)); + } catch (e) { + Fluttertoast.showToast( + msg: "Slow internet connection, please try again!"); + } + } + ; }, ) ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: flooringOthers, - child: customTextField( - "Enter other flooring/s", "", "other_flooring"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - flooring = x; - }); - }, - options: const [ - 'Reinforced Concrete', - 'Plain Cement', - 'Marble', - 'Wood', - 'Tiles' - ], - selectedValues: flooring, - whenEmpty: 'Select Flooring/s', - ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'WALLS & PARTITIONS', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: wpOthers, - onChanged: (bool? value) { - setState(() { - wpOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: wpOthers, - child: customTextField( - "Enter other walls & partition/s", "", "other_wp"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - walls = x; - }); - }, - options: const [ - 'Reinforced Concrete', - 'Plain Concrete', - 'Wood', - 'CHIB', - 'G.I Sheet', - 'Build-a-wall', - 'Sawali', - 'Bamboo' - ], - selectedValues: walls, - whenEmpty: 'Select Walls & Partition/s', - ), - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - CustomButton( - icon: - const Icon(Icons.chevron_left_rounded, color: Colors.white), - onPressed: () { - { - widget.NextBtn(); - } - ; - }, - ), - CustomButton( - icon: const Icon(Icons.chevron_right_rounded, - color: Colors.white), - onPressed: () async { - { - final tempID = await SharedPreferences.getInstance(); - var strucMaterials = StructureMaterialsII( - id: tempID.getInt('tempid')! - 1, - foundation: foundationOthers - ? formKey.currentState!.value['other_foundation'] - .split(',') - : foundation, - columns: columOthers - ? formKey.currentState!.value['other_column'] - .split(',') - : column, - beams: beamsOthers - ? formKey.currentState!.value['other_beam'] - .split(',') - : beam, - trussFraming: tfOthers - ? formKey.currentState!.value['other_tf'].split(',') - : truss_framing, - roof: roofOthers - ? formKey.currentState!.value['other_roof'] - .split(',') - : roof, - flooring: flooringOthers - ? formKey.currentState!.value['other_flooring'] - .split(',') - : flooring, - walls: wpOthers - ? formKey.currentState!.value['other_wp'].split(',') - : walls, - others: ["Others"]); - context.read() - ..add(UpdateStrucMaterials(data: strucMaterials)); - - widget.PrevBtn(); - } - ; - }, - ) - ], - ) - ], - ), - ); + ) + ], + ), + ); + }); } } diff --git a/lib/screens/passo/Building/edit_building.dart b/lib/screens/passo/Building/edit_building.dart index 6a1dde5..326dd35 100644 --- a/lib/screens/passo/Building/edit_building.dart +++ b/lib/screens/passo/Building/edit_building.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.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'; import 'package:flutter_spinkit/flutter_spinkit.dart'; @@ -16,6 +17,8 @@ import 'package:unit2/screens/passo/Building/edit_building/property_appraisal.da import 'package:unit2/screens/passo/Building/edit_building/property_assessement_edit.dart'; import 'package:unit2/screens/passo/Building/edit_building/property_owner_info.dart'; import 'package:unit2/screens/passo/Building/edit_building/structural_materials.dart'; +import 'package:unit2/screens/passo/Building/edit_building/structural_materials_edit.dart'; +import 'package:unit2/screens/passo/Land/add_land.dart'; import 'package:unit2/theme-data.dart/colors.dart'; import 'package:unit2/utils/text_container.dart'; import 'package:unit2/widgets/error_state.dart'; @@ -54,117 +57,121 @@ class _EditBuilding extends State { @override Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - appBar: AppBar( - centerTitle: true, - backgroundColor: primary, - title: Text('Building FAAS Edit'), - ), - body: ProgressHUD( - padding: const EdgeInsets.all(24), - backgroundColor: Colors.black87, - indicatorWidget: const SpinKitFadingCircle(color: Colors.white), - child: BlocConsumer( - listener: (context, state) { - if (state is UnitConstructLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Please wait..."); - } - if (state is UnitConstructLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - if (state is UnitConstructErrorState) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - // Fluttertoast.showToast( - // msg: onError, - // fontSize: 24, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.CENTER, - // backgroundColor: Colors.black, - // textColor: Colors.white); - } - }, - builder: (context, state) { - if (state is UnitConstructLoaded) { - final unit = state.unit; - return BlocConsumer( - listener: (context, state) { - if (state is ClassComponentLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Please wait..."); - } - if (state is ClassComponentLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - if (state is ClassComponentErrorState) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - // Fluttertoast.showToast( - // msg: onError, - // fontSize: 24, - // toastLength: Toast.LENGTH_LONG, - // gravity: ToastGravity.CENTER, - // backgroundColor: Colors.black, - // textColor: Colors.white); - } - }, - builder: (context, state) { - if (state is ClassComponentLoaded) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - children: [ - NumberStepper( - numbers: [1, 2, 3, 4, 5, 6, 7], - activeStepColor: primary, - numberStyle: TextStyle(color: Colors.white), - lineColor: primary, - // activeStep property set to activeStep variable defined above. - activeStep: activeStep, - activeStepBorderColor: Colors.white, - activeStepBorderWidth: 1, - // This ensures step-tapping updates the activeStep. - onStepReached: (index) { - setState(() { - activeStep = index; - }); - }, - ), - content(unit, state.classes), - ], + return Scaffold( + appBar: AppBar( + centerTitle: true, + backgroundColor: primary, + title: Text('Building FAAS Edit'), + ), + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + if (state is UnitConstructLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is UnitConstructLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is UnitConstructErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + // Fluttertoast.showToast( + // msg: onError, + // fontSize: 24, + // toastLength: Toast.LENGTH_LONG, + // gravity: ToastGravity.CENTER, + // backgroundColor: Colors.black, + // textColor: Colors.white); + } + }, + builder: (context, state) { + if (state is UnitConstructLoaded) { + final unit = state.unit; + return BlocConsumer( + listener: (context, state) { + if (state is ClassComponentLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is ClassComponentLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is ClassComponentErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + // Fluttertoast.showToast( + // msg: onError, + // fontSize: 24, + // toastLength: Toast.LENGTH_LONG, + // gravity: ToastGravity.CENTER, + // backgroundColor: Colors.black, + // textColor: Colors.white); + } + }, + builder: (context, state) { + if (state is ClassComponentLoaded) { + return Column( + children: [ + NumberStepper( + numbers: [1, 2, 3, 4, 5, 6, 7], + activeStepColor: primary, + numberStyle: TextStyle(color: Colors.white), + lineColor: primary, + // activeStep property set to activeStep variable defined above. + activeStep: activeStep, + activeStepBorderColor: Colors.white, + activeStepBorderWidth: 1, + // This ensures step-tapping updates the activeStep. + onStepReached: (index) { + setState(() { + activeStep = index; + }); + }, ), - ); - } - if (state is ClassComponentErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context - .read() - .add(LoadClassComponents()); - }, - ); - } - return Container(); - }, - ); - } - if (state is UnitConstructErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context.read().add(LoadUnitConstruct()); - }, - ); - } - return Container(); - }, - ), + Expanded( + child: StatefulBuilder(builder: + (BuildContext context, StateSetter setState) { + return Container( + child: content( + unit, + state.classes, + ), + ); + }), + ), + ], + ); + } + if (state is ClassComponentErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(LoadClassComponents()); + }, + ); + } + return Container(); + }, + ); + } + if (state is UnitConstructErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add(LoadUnitConstruct()); + }, + ); + } + return Container(); + }, ), ), ); @@ -184,7 +191,7 @@ class _EditBuilding extends State { return GeneralDescriptionEdit(unit, widget.faas.id!, NextBtn, PrevBtn); case 3: - return StructuralMaterialsPageEdit(widget.faas.id!, NextBtn, PrevBtn); + return StructuralMaterialsEditPage(widget.faas.id!, NextBtn, PrevBtn); case 4: return AdditionalItemEditPage( diff --git a/lib/screens/passo/Building/edit_building/additional_items.dart b/lib/screens/passo/Building/edit_building/additional_items.dart index b5b9872..1f8ff0d 100644 --- a/lib/screens/passo/Building/edit_building/additional_items.dart +++ b/lib/screens/passo/Building/edit_building/additional_items.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_progress_hud/flutter_progress_hud.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:intl/intl.dart'; import 'package:unit2/bloc/passo/bulding/additional_item/additional_item_bloc.dart'; import 'package:unit2/bloc/passo/bulding/additional_items_edit/additional_items_edit_bloc.dart'; @@ -41,265 +43,286 @@ class _AdditionalItemEditPage extends State { @override Widget build(BuildContext context) { - return BlocConsumer( - listener: (context, state) { - // TODO: implement listener - }, - builder: (context, state) { - final state = context.watch().state; - if (state is AdditionalItemsEditLoaded) { - return Column( - children: [ - Container( - height: 500, - child: Expanded( - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(15.0), - child: Column( - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 10), - child: const Text('ADDITIONAL ITEMS', - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 18), - textAlign: TextAlign.left), - ), - Align( - alignment: Alignment.topRight, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.red, + return Scaffold( + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + if (state is AdditionalItemsEditLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is AdditionalItemsEditLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is AdditionalItemsEditErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + final state = context.watch().state; + if (state is AdditionalItemsEditLoaded) { + return Column( + children: [ + Container( + height: 500, + child: Expanded( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('ADDITIONAL ITEMS', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), ), - onPressed: () { - context - .read() - .add(ShowAdditionalItemsEdit()); - }, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Text('ADD ITEM'), // <-- Text - const SizedBox( - width: 5, + Align( + alignment: Alignment.topRight, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Colors.red, ), - const Icon( - // <-- Icon - Icons.add, - size: 24.0, + onPressed: () { + context + .read() + .add(ShowAdditionalItemsEdit()); + }, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Text('ADD ITEM'), // <-- Text + const SizedBox( + width: 5, + ), + const Icon( + // <-- Icon + Icons.add, + size: 24.0, + ), + ], ), - ], + ), ), - ), - ), - SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: DataTable( - // ignore: prefer_const_literals_to_create_immutables - columns: [ - const DataColumn( - label: Text('Items'), - ), - const DataColumn( - label: Text('Unit Value'), - ), - const DataColumn( - label: Text('% of BUCC'), - ), - const DataColumn( - label: Text('Market Value'), - ), - const DataColumn( - label: Text('Action'), - ) - ], - rows: state.items.map((dataRow) { - return DataRow( - cells: [ - DataCell(Text(dataRow.className)), - DataCell(Text(dataRow.baseUnitValue)), - DataCell(Text(dataRow.unitValue)), - DataCell(Text(((double.parse( - dataRow.adjustedMarketVal))) - .toString())), - DataCell(Row( - children: [ - InkWell( - child: Container( - height: 30, - width: 30, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Colors.red, - ), - child: Icon( - Icons.delete, - color: Colors.white, - size: 20.0, - ), - ), - onTap: () { - deleteItem(dataRow.id); - }, - ), - SizedBox( - width: 10, - ), - InkWell( - child: Container( - height: 30, - width: 30, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Colors.red, - ), - child: Icon( - Icons.edit, - color: Colors.white, - size: 20.0, - ), - ), - onTap: () {}, - ), - ], - )) + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: DataTable( + // ignore: prefer_const_literals_to_create_immutables + columns: [ + const DataColumn( + label: Text('Items'), + ), + const DataColumn( + label: Text('Unit Value'), + ), + const DataColumn( + label: Text('% of BUCC'), + ), + const DataColumn( + label: Text('Market Value'), + ), + const DataColumn( + label: Text('Action'), + ) ], - ); - }).toList(), - ), + rows: state.items.map((dataRow) { + return DataRow( + cells: [ + DataCell(Text(dataRow.className)), + DataCell(Text(dataRow.baseUnitValue)), + DataCell(Text(dataRow.unitValue)), + DataCell(Text(((double.parse( + dataRow.adjustedMarketVal))) + .toString())), + DataCell(Row( + children: [ + InkWell( + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: Icon( + Icons.delete, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () { + deleteItem(dataRow.id); + }, + ), + SizedBox( + width: 10, + ), + InkWell( + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: Icon( + Icons.edit, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () {}, + ), + ], + )) + ], + ); + }).toList(), + ), + ), + ], + ), + ), + ), + ), + ), + // Padding( + // padding: const EdgeInsets.only(left: 20.0, right: 20.0), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // Text( + // 'Total', + // style: + // TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + // ), + // Text( + // NumberFormat.currency(locale: 'en-PH', symbol: "₱") + // .format(_totalMarketValue(state.items)), + // style: + // TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + // ) + // ], + // ), + // ), + Padding( + padding: const EdgeInsets.all(15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon(Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () { + { + widget.NextBtn(); + } + ; + }, + ) + ], + ), + ), + ], + ); + } + if (state is AdditionalItemsEditDeletedState) { + if (state.success) { + WidgetsBinding.instance.addPostFrameCallback((_) { + successAlert(context, "Deletion Successful", + "Extra item has been deleted successfully", () { + Navigator.of(context).pop(); + context.read().add( + LoadAdditionalItemsEdit( + items: const [], + id: widget.tempId)); + }); + }); + } + } + if (state is ShowAddItemsScreenEdit) { + return ConstrainedBox( + constraints: BoxConstraints(maxHeight: 1000.0), + child: AlertDialog( + insetPadding: EdgeInsets.symmetric( + horizontal: 20.0, + vertical: 10.0, + ), + title: Text( + 'ADD EXTRA ITEMS', + textAlign: TextAlign.center, + ), + content: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: AddExtraItemsEdit( + widget.unit, widget.options, widget.tempId)) + ], + ), + ), + ); + } + return Container( + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('ADDITIONAL MATERIALS', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 18), + textAlign: TextAlign.left), + ), + Align( + alignment: Alignment.topRight, + child: ElevatedButton( + onPressed: () { + context + .read() + .add(ShowAdditionalItems()); + }, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Text('ADD ITEM'), // <-- Text + const SizedBox( + width: 5, + ), + const Icon( + // <-- Icon + Icons.add, + size: 24.0, ), ], ), ), ), - ), - ), - // Padding( - // padding: const EdgeInsets.only(left: 20.0, right: 20.0), - // child: Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - // children: [ - // Text( - // 'Total', - // style: - // TextStyle(fontWeight: FontWeight.bold, fontSize: 15), - // ), - // Text( - // NumberFormat.currency(locale: 'en-PH', symbol: "₱") - // .format(_totalMarketValue(state.items)), - // style: - // TextStyle(fontWeight: FontWeight.bold, fontSize: 15), - // ) - // ], - // ), - // ), - Padding( - padding: const EdgeInsets.all(15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - CustomButton( - icon: const Icon(Icons.chevron_left_rounded, - color: Colors.white), - onPressed: () { - { - widget.PrevBtn(); - } - ; - }, - ), - CustomButton( - icon: const Icon(Icons.chevron_right_rounded, - color: Colors.white), - onPressed: () { - { - widget.NextBtn(); - } - ; - }, - ) - ], - ), - ), - ], - ); - } - if (state is AdditionalItemsEditDeletedState) { - if (state.success) { - WidgetsBinding.instance.addPostFrameCallback((_) { - successAlert(context, "Deletion Successful", - "Extra item has been deleted successfully", () { - Navigator.of(context).pop(); - context.read().add( - LoadAdditionalItemsEdit( - items: const [], id: widget.tempId)); - }); - }); - } - } - if (state is ShowAddItemsScreenEdit) { - return ConstrainedBox( - constraints: BoxConstraints(maxHeight: 1000.0), - child: AlertDialog( - insetPadding: EdgeInsets.symmetric( - horizontal: 20.0, - vertical: 10.0, - ), - title: Text( - 'ADD EXTRA ITEMS', - textAlign: TextAlign.center, - ), - content: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: AddExtraItemsEdit( - widget.unit, widget.options, widget.tempId)) ], ), - ), - ); - } - return Container( - child: Column( - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 10), - child: const Text('ADDITIONAL MATERIALS', - style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18), - textAlign: TextAlign.left), - ), - Align( - alignment: Alignment.topRight, - child: ElevatedButton( - onPressed: () { - context - .read() - .add(ShowAdditionalItems()); - }, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Text('ADD ITEM'), // <-- Text - const SizedBox( - width: 5, - ), - const Icon( - // <-- Icon - Icons.add, - size: 24.0, - ), - ], - ), - ), - ), - ], - ), - ); - }, + ); + }, + ), + ), ); } } diff --git a/lib/screens/passo/Building/edit_building/bldgloc_landref.dart b/lib/screens/passo/Building/edit_building/bldgloc_landref.dart index 0a891fb..f0d70b7 100644 --- a/lib/screens/passo/Building/edit_building/bldgloc_landref.dart +++ b/lib/screens/passo/Building/edit_building/bldgloc_landref.dart @@ -35,388 +35,384 @@ class _BldgLocLandRefEdit extends State { Set seenCityCodes = Set(); @override Widget build(BuildContext context) { - return ProgressHUD( - padding: const EdgeInsets.all(24), - backgroundColor: Colors.black87, - indicatorWidget: const SpinKitFadingCircle(color: Colors.white), - child: BlocConsumer( - listener: (context, state) { - if (state is LocationLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Please wait..."); - } - if (state is LocationLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - if (state is LocationErrorState) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - }, - builder: (context, state) { - if (state is LocationLoaded) { - final bldgloc = state.bldgloc; - return BlocConsumer( - listener: (context, state) { - if (state is LandrefLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Please wait..."); - } - if (state is LandrefLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - if (state is LandrefErrorState) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - }, - builder: (context, state) { - if (state is LandrefLoaded) { - final landRef = state.landRef; - return BlocConsumer( - listener: (context, state) { - if (state is MunicipalityLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Please wait..."); - } - if (state is MunicipalityLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - if (state is MunicipalityErrorState) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - }, builder: (context, state) { - if (state is MunicipalityLoaded) { - final cityList = state.municipality; - Set uniqueItems = {}; + return Scaffold( + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + if (state is LocationLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } - // Iterate through the dropdownItems list to filter out duplicates - for (var item in cityList) { - uniqueItems.add(item); + if (state is LocationErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is LocationLoaded) { + final bldgloc = state.bldgloc; + return BlocConsumer( + listener: (context, state) { + if (state is LandrefLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is LandrefErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is LandrefLoaded) { + final landRef = state.landRef; + return BlocConsumer( + listener: (context, state) { + if (state is MunicipalityLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); } - return BlocConsumer( - listener: (context, state) { - if (state is BarangayLoading) { - final progress = ProgressHUD.of(context); - progress!.showWithText("Please wait..."); + if (state is MunicipalityErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, builder: (context, state) { + if (state is MunicipalityLoaded) { + final cityList = state.municipality; + Set uniqueItems = {}; + + // Iterate through the dropdownItems list to filter out duplicates + for (var item in cityList) { + uniqueItems.add(item); } - if (state is BarangayLoaded) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - if (state is BarangayErrorState) { - final progress = ProgressHUD.of(context); - progress?.dismiss(); - } - }, builder: (context, state) { - if (state is BarangayLoaded) { - List brgyList = state.brgy; - List brgyNAmes = brgyList - .map((brgy) => brgy.barangayDescription) - .toList() - .cast(); - return FormBuilder( - key: keys, - initialValue: { - 'street': bldgloc.street ?? "", - 'province': bldgloc.province ?? "", - 'l_owner': landRef.owner, - 'oct_tct_cloa': landRef.cloaNo ?? "", - 'survey_no': landRef.surveyNo ?? "", - 'lot_no': landRef.lotNo ?? "", - 'blk_no': landRef.blkNo ?? "", - 'l_td_arp': landRef.tdn ?? "", - 'area': landRef.area ?? "" - }, - enabled: true, - onChanged: () { - keys.currentState!.save(); - debugPrint(keys.currentState!.value.toString()); - }, - autovalidateMode: AutovalidateMode.disabled, - skipDisabled: true, - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(20.0), - child: ListView( - shrinkWrap: true, - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, - top: 20, - right: 0, - bottom: 10), - child: const Text('BUILDING LOCATION', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18), - textAlign: TextAlign.left), - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: FormBuilderDropdown( - name: 'municipality', - autofocus: false, - decoration: normalTextFieldStyle( - bldgloc.municipality ?? - "Municipality", - "", + return BlocConsumer( + listener: (context, state) { + if (state is BarangayLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is BarangayLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is BarangayErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, builder: (context, state) { + if (state is BarangayLoaded) { + List brgyList = state.brgy; + List brgyNAmes = brgyList + .map((brgy) => brgy.barangayDescription) + .toList() + .cast(); + return FormBuilder( + key: keys, + initialValue: { + 'street': bldgloc.street ?? "", + 'province': bldgloc.province ?? "", + 'l_owner': landRef.owner, + 'oct_tct_cloa': landRef.cloaNo ?? "", + 'survey_no': landRef.surveyNo ?? "", + 'lot_no': landRef.lotNo ?? "", + 'blk_no': landRef.blkNo ?? "", + 'l_td_arp': landRef.tdn ?? "", + 'area': landRef.area ?? "" + }, + enabled: true, + onChanged: () { + keys.currentState!.save(); + debugPrint(keys.currentState!.value.toString()); + }, + autovalidateMode: AutovalidateMode.disabled, + skipDisabled: true, + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: ListView( + shrinkWrap: true, + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, + top: 20, + right: 0, + bottom: 10), + child: const Text('BUILDING LOCATION', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: FormBuilderDropdown( + name: 'municipality', + autofocus: false, + decoration: + normalTextFieldStyle( + bldgloc.municipality ?? + "Municipality", + "", + ), + items: uniqueItems + .map( + (city) => + DropdownMenuItem< + City>( + value: city, + child: Text( + city.cityDescription ?? + ''), + ), + ) + .toList(), + onChanged: (selectedCityCode) { + // Find the corresponding City object using selectedCityCode + final selectedCity = cityList + .firstWhere((city) => + city.cityCode == + selectedCityCode); + + final barangayBloc = context + .read(); + barangayBloc.add(LoadBarangay( + id: selectedCityCode! + .cityCode!)); + }, ), - items: uniqueItems - .map( - (city) => - DropdownMenuItem( - value: city, - child: Text( - city.cityDescription ?? - ''), - ), - ) - .toList(), - onChanged: (selectedCityCode) { - // Find the corresponding City object using selectedCityCode - final selectedCity = cityList - .firstWhere((city) => - city.cityCode == - selectedCityCode); - - final barangayBloc = context - .read(); - barangayBloc.add(LoadBarangay( - id: selectedCityCode! - .cityCode!)); - }, ), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "Province / City", + "", + 'province')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( flex: 1, child: customTextField( - "Province / City", + "No. / Street", "", 'street'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customDropDownField( + bldgloc.barangay ?? "", + "Barangay", + 'brgy', + brgyNAmes)) + ]), + Container( + margin: const EdgeInsets.only( + left: 0, + top: 20, + right: 0, + bottom: 10), + child: const Text('LAND REFERENCE', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), + ), + customTextField( + "Land Owner", "", 'l_owner'), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "OCT/TCT/CLOA No.", "", - 'province')) - ]), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "No. / Street", "", 'street'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customDropDownField( - bldgloc.barangay ?? "", - "Barangay", - 'brgy', - brgyNAmes)) - ]), - Container( - margin: const EdgeInsets.only( - left: 0, - top: 20, - right: 0, - bottom: 10), - child: const Text('LAND REFERENCE', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18), - textAlign: TextAlign.left), - ), - customTextField( - "Land Owner", "", 'l_owner'), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "OCT/TCT/CLOA No.", - "", - 'oct_tct_cloa'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 + 'oct_tct_cloa'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "Survey No.", + "", + 'survey_no')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( flex: 1, child: customTextField( - "Survey No.", + "Lot No.", "", 'lot_no'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "Blk No.", "", 'blk_no')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "TD / ARP No.", "", - 'survey_no')) - ]), - Row( + 'l_td_arp'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "Area", "", 'area')) + ]), + SizedBox( + height: 50, + ), + Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "Lot No.", "", 'lot_no'), + children: [ + CustomButton( + icon: const Icon( + Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customTextField( - "Blk No.", "", 'blk_no')) - ]), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "TD / ARP No.", "", 'l_td_arp'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customTextField( - "Area", "", 'area')) - ]), - SizedBox( - height: 50, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - CustomButton( - icon: const Icon( - Icons.chevron_left_rounded, - color: Colors.white), - onPressed: () { - { - widget.PrevBtn(); - } - ; - }, - ), - CustomButton( - icon: const Icon( - Icons.chevron_right_rounded, - color: Colors.white), - onPressed: () { - { - var bldgLocData = BldgLoc( - id: widget.tempId, - street: keys.currentState - ?.value['street'], - barangay: keys.currentState - ?.value['brgy'], - municipality: keys - .currentState - ?.value['municipality'] - ?.cityDescription ?? - bldgloc.municipality, - province: keys.currentState - ?.value['province'], - ); - var landRefData = LandRef( - id: widget.tempId, - owner: keys.currentState - ?.value['l_owner'], - cloaNo: keys.currentState - ?.value['oct_tct_cloa'], - lotNo: keys.currentState - ?.value['lot_no'], - tdn: keys.currentState - ?.value['l_td_arp'], - area: keys.currentState - ?.value['area'], - surveyNo: keys.currentState - ?.value['survey_no'], - blkNo: keys.currentState - ?.value['blk_no'], - ); - context.read() - ..add(UpdateBldgLoc( - bldg_loc: bldgLocData)) - ..add(UpdateLandRef( - land_ref: landRefData)); + CustomButton( + icon: const Icon( + Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () { + { + var bldgLocData = BldgLoc( + id: widget.tempId, + street: keys.currentState + ?.value['street'], + barangay: keys.currentState + ?.value['brgy'], + municipality: keys + .currentState + ?.value[ + 'municipality'] + ?.cityDescription ?? + bldgloc.municipality, + province: keys.currentState + ?.value['province'], + ); + var landRefData = LandRef( + id: widget.tempId, + owner: keys.currentState + ?.value['l_owner'], + cloaNo: keys.currentState + ?.value['oct_tct_cloa'], + lotNo: keys.currentState + ?.value['lot_no'], + tdn: keys.currentState + ?.value['l_td_arp'], + area: keys.currentState + ?.value['area'], + surveyNo: keys.currentState + ?.value['survey_no'], + blkNo: keys.currentState + ?.value['blk_no'], + ); + context.read() + ..add(UpdateBldgLoc( + bldg_loc: bldgLocData)) + ..add(UpdateLandRef( + land_ref: landRefData)); - widget.NextBtn(); - } - ; - }, - ) - ], - ) - ], + widget.NextBtn(); + } + ; + }, + ) + ], + ) + ], + ), ), ), - ), - ); - } - if (state is BarangayErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context - .read() - .add(LoadBarangay(id: '01')); - }, - ); - } - return Container(); - }); - } - if (state is MunicipalityErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context - .read() - .add(LoadMunicipality()); - }, - ); - } - return Container(); - }); - } - if (state is LandrefErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context.read().add( - LoadLandref(id: widget.tempId, landRef: LandRef())); - }, - ); - } - return Container(); - }, - ); - } + ); + } + if (state is BarangayErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(LoadBarangay(id: '01')); + }, + ); + } + return Container(); + }); + } + if (state is MunicipalityErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(LoadMunicipality()); + }, + ); + } + return Container(); + }); + } + if (state is LandrefErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add( + LoadLandref(id: widget.tempId, landRef: LandRef())); + }, + ); + } + return Container(); + }, + ); + } - if (state is LocationErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context - .read() - .add(LoadLocation(id: widget.tempId, bldgloc: BldgLoc())); - }, - ); - } - return Container(); - }, + if (state is LocationErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(LoadLocation(id: widget.tempId, bldgloc: BldgLoc())); + }, + ); + } + return Container(); + }, + ), ), ); } diff --git a/lib/screens/passo/Building/edit_building/general_description.dart b/lib/screens/passo/Building/edit_building/general_description.dart index 201d6b7..6fbfc23 100644 --- a/lib/screens/passo/Building/edit_building/general_description.dart +++ b/lib/screens/passo/Building/edit_building/general_description.dart @@ -3,6 +3,7 @@ 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'; import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:unit2/bloc/passo/bulding/general_description/general_description_bloc.dart'; import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart'; import 'package:unit2/model/passo/general_description.dart'; @@ -39,267 +40,322 @@ class _GeneralDescriptionEdit extends State { @override Widget build(BuildContext context) { - return Expanded( - child: ProgressHUD( - padding: const EdgeInsets.all(24), - backgroundColor: Colors.black87, - indicatorWidget: const SpinKitFadingCircle(color: Colors.white), - child: BlocConsumer( - listener: (context, state) { - // TODO: implement listener - }, - builder: (context, state) { - if (state is GenDescLoaded) { - return FormBuilder( - key: keys, - initialValue: { - 'bldg_permit': state.gendesc.bldgPermit, - 'date_issued': state.gendesc.dateIssued.toString(), - 'cct': state.gendesc.cct.toString(), - 'coc_issued': state.gendesc.certCompletionIssued.toString(), - 'coo_issued': state.gendesc.certOccupancyIssued.toString(), - 'date_cnstructed': state.gendesc.dateIssued.toString(), - 'date_occupied': state.gendesc.dateOccupied.toString(), - 'bldg_age': state.gendesc.bldgAge.toString(), - 'no_of_storeys': state.gendesc.noStoreys.toString(), - 'area_of_1stFl': state.gendesc.area1Stfloor, - 'area_of_2ndFl': state.gendesc.area2Ndfloor, - 'area_of_3rdFl': state.gendesc.area3Rdfloor, - 'area_of_4thFl': state.gendesc.area4Thfloor, - 'total_area': state.gendesc.totalFloorArea.toString(), - 'actual_use': state.gendesc.actualUse + return Scaffold( + body: Column( + children: [ + Expanded( + child: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: + BlocConsumer( + listener: (context, state) async { + if (state is GenDescLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is GenDescLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + + final tempID = await SharedPreferences.getInstance(); + await tempID.setInt( + 'totalValue', int.parse(state.gendesc.totalFloorArea!)); + await tempID.setString( + 'actualUse', state.gendesc.actualUse!); + + } + if (state is GenDescErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } }, - enabled: true, - onChanged: () { - keys.currentState!.save(); - debugPrint(keys.currentState!.value.toString()); - }, - autovalidateMode: AutovalidateMode.disabled, - skipDisabled: true, - child: Expanded( - child: SingleChildScrollView( - scrollDirection: Axis.vertical, - child: Padding( - padding: const EdgeInsets.all(20.0), - child: Column( - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 10), - child: const Text('GENERAL DESCRIPTION', - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 18), - textAlign: TextAlign.left), - ), - Container( - margin: const EdgeInsets.only( - left: 0, top: 10, right: 0, bottom: 0), - child: FormBuilderDropdown( - name: 'bldg_type', - autofocus: false, - decoration: normalTextFieldStyle( - state.gendesc.bldgKind ?? "Kind of Building", - "Kind of Building"), - items: widget.unit - .map((e) => DropdownMenuItem( - value: e, - child: - Text(e.bldgType + '-' + e.building), - )) - .toList(), + builder: (context, state) { + if (state is GenDescLoaded) { + return FormBuilder( + key: keys, + initialValue: { + 'bldg_permit': state.gendesc.bldgPermit, + 'date_issued': state.gendesc.dateIssued.toString(), + 'cct': state.gendesc.cct.toString(), + 'coc_issued': + state.gendesc.certCompletionIssued.toString(), + 'coo_issued': + state.gendesc.certOccupancyIssued.toString(), + 'date_cnstructed': state.gendesc.dateIssued.toString(), + 'date_occupied': state.gendesc.dateOccupied.toString(), + 'bldg_age': state.gendesc.bldgAge.toString(), + 'no_of_storeys': state.gendesc.noStoreys.toString(), + 'area_of_1stFl': state.gendesc.area1Stfloor, + 'area_of_2ndFl': state.gendesc.area2Ndfloor, + 'area_of_3rdFl': state.gendesc.area3Rdfloor, + 'area_of_4thFl': state.gendesc.area4Thfloor, + 'total_area': state.gendesc.totalFloorArea.toString(), + 'actual_use': state.gendesc.actualUse + }, + enabled: true, + onChanged: () { + keys.currentState!.save(); + debugPrint(keys.currentState!.value.toString()); + }, + autovalidateMode: AutovalidateMode.disabled, + skipDisabled: true, + child: Expanded( + child: SingleChildScrollView( + scrollDirection: Axis.vertical, + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('GENERAL DESCRIPTION', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), + ), + Container( + margin: const EdgeInsets.only( + left: 0, top: 10, right: 0, bottom: 0), + child: FormBuilderDropdown( + name: 'bldg_type', + autofocus: false, + decoration: normalTextFieldStyle( + state.gendesc.bldgKind ?? + "Kind of Building", + "Kind of Building"), + items: widget.unit + .map((e) => DropdownMenuItem( + value: e, + child: Text(e.bldgType + + '-' + + e.building), + )) + .toList(), + ), + ), + customDropDownField( + "Actual Use", "", 'actual_use', actual_use), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "Bldg. Permit No.", + "", + 'bldg_permit'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customDatTimePicker( + "Certificate of Occupancy Issued ON", + "", + 'date_issued')) + ]), + customTextField( + "Condominium Certificate of Title (CCT)", + "", + 'cct'), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customDatTimePicker( + "Certificate of Completion Issued ON", + "", + 'coc_issued'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customDatTimePicker( + "Certificate of Occupancy Issued ON", + "", + 'coo_issued')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customDatTimePicker( + "Date Constructed /Completed", + "", + 'date_cnstructed'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customDatTimePicker( + "Date Occupied", + "", + 'date_occupied')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "Bldg. Age", "", 'bldg_age'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "No. of storeys", + "", + 'no_of_storeys')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "Area of 1st Floor", + "", + 'area_of_1stFl'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "Area of 2nd Floor", + "", + 'area_of_2ndFl')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "Area of 3rd Floor", + "", + 'area_of_3rdFl')), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "Area of 4th Floor", + "", + 'area_of_4thFl')) + ]), + customTextField("Total Area", "", 'total_area'), + SizedBox( + height: 50, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon( + Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon( + Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () { + { + keys.currentState!.save(); + var genDescData = GeneralDesc( + id: widget.tempId, + bldgKind: keys + .currentState + ?.value['bldg_type'] + ?.building ?? + state.gendesc.bldgKind, + strucType: keys + .currentState + ?.value['bldg_type'] + ?.bldgType ?? + state.gendesc.strucType, + bldgPermit: keys.currentState + ?.value['bldg_permit'], + dateIssued: keys.currentState + ?.value['coc_issued'], + cct: keys + .currentState?.value['cct'], + certCompletionIssued: keys + .currentState + ?.value['coc_issued'], + certOccupancyIssued: keys + .currentState + ?.value['coo_issued'], + dateCompleted: + keys.currentState?.value['date_cnstructed'], + dateOccupied: keys.currentState?.value['date_occupied'], + bldgAge: int.tryParse(keys.currentState?.value['bldg_age']), + noStoreys: int.tryParse(keys.currentState?.value['no_of_storeys']), + area1Stfloor: keys.currentState?.value['area_of_1stFl'], + area2Ndfloor: keys.currentState?.value['area_of_2ndFl'], + area3Rdfloor: keys.currentState?.value['area_of_3rdFl'], + area4Thfloor: keys.currentState?.value['area_of_4thFl'], + totalFloorArea: keys.currentState?.value['total_area'], + floorSketch: null, + actualUse: keys.currentState?.value['actual_use']); + + context.read() + ..add(UpdateGeneralDesc( + gen_desc: genDescData)); + + widget.NextBtn(); + } + ; + }, + ) + ], + ) + ], ), ), - customDropDownField( - "Actual Use", "", 'actual_use', actual_use), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "Bldg. Permit No.", "", 'bldg_permit'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customDatTimePicker( - "Certificate of Occupancy Issued ON", - "", - 'date_issued')) - ]), - customTextField( - "Condominium Certificate of Title (CCT)", - "", - 'cct'), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customDatTimePicker( - "Certificate of Completion Issued ON", - "", - 'coc_issued'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customDatTimePicker( - "Certificate of Occupancy Issued ON", - "", - 'coo_issued')) - ]), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customDatTimePicker( - "Date Constructed /Completed", - "", - 'date_cnstructed'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customDatTimePicker( - "Date Occupied", "", 'date_occupied')) - ]), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "Bldg. Age", "", 'bldg_age'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customTextField( - "No. of storeys", "", 'no_of_storeys')) - ]), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "Area of 1st Floor", "", 'area_of_1stFl'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customTextField("Area of 2nd Floor", - "", 'area_of_2ndFl')) - ]), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField("Area of 3rd Floor", - "", 'area_of_3rdFl')), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customTextField("Area of 4th Floor", - "", 'area_of_4thFl')) - ]), - customTextField("Total Area", "", 'total_area'), - SizedBox( - height: 50, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - CustomButton( - icon: const Icon(Icons.chevron_left_rounded, - color: Colors.white), - onPressed: () { - { - widget.PrevBtn(); - } - ; - }, - ), - CustomButton( - icon: const Icon(Icons.chevron_right_rounded, - color: Colors.white), - onPressed: () { - { - keys.currentState!.save(); - var genDescData = GeneralDesc( - id: widget.tempId, - bldgKind: keys - .currentState - ?.value['bldg_type'] - ?.building ?? - state.gendesc.bldgKind, - strucType: keys - .currentState - ?.value['bldg_type'] - ?.bldgType ?? - state.gendesc.strucType, - bldgPermit: keys - .currentState?.value['bldg_permit'], - dateIssued: keys - .currentState?.value['coc_issued'], - cct: keys.currentState?.value['cct'], - certCompletionIssued: keys - .currentState?.value['coc_issued'], - certOccupancyIssued: keys - .currentState?.value['coo_issued'], - dateCompleted: keys.currentState - ?.value['date_cnstructed'], - dateOccupied: keys.currentState - ?.value['date_occupied'], - bldgAge: int.tryParse(keys.currentState?.value['bldg_age']), - noStoreys: int.tryParse(keys.currentState?.value['no_of_storeys']), - area1Stfloor: keys.currentState?.value['area_of_1stFl'], - area2Ndfloor: keys.currentState?.value['area_of_2ndFl'], - area3Rdfloor: keys.currentState?.value['area_of_3rdFl'], - area4Thfloor: keys.currentState?.value['area_of_4thFl'], - totalFloorArea: keys.currentState?.value['total_area'], - floorSketch: null, - actualUse: keys.currentState?.value['actual_use']); - - context.read() - ..add(UpdateGeneralDesc( - gen_desc: genDescData)); - - widget.NextBtn(); - } - ; - }, - ) - ], - ) - ], + ), ), - ), - ), - ), - ); - } - if (state is GenDescErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context.read().add( - LoadGenDesc(id: widget.tempId, gendesc: GeneralDesc())); + ); + } + if (state is GenDescErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add(LoadGenDesc( + id: widget.tempId, gendesc: GeneralDesc())); + }, + ); + } + return Container(); }, - ); - } - return Container(); - }, - ), + ), + ), + ), + ], ), ); } diff --git a/lib/screens/passo/Building/edit_building/property_appraisal.dart b/lib/screens/passo/Building/edit_building/property_appraisal.dart index 535eb1f..aa6a967 100644 --- a/lib/screens/passo/Building/edit_building/property_appraisal.dart +++ b/lib/screens/passo/Building/edit_building/property_appraisal.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.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'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:form_builder_validators/form_builder_validators.dart'; import 'package:intl/intl.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -31,6 +33,24 @@ class PropertyAppraisalEditPage extends StatefulWidget { class _PropertyAppraisalEditPage extends State { double depRate = 0; + // int totalAreas = 0; + // String actualUse = ""; + + // @override + // void initState() { + // super.initState(); + // _loadDataFromSharedPreferences(); // Call the method to load data + // } + + // Method to load data from SharedPreferences + // _loadDataFromSharedPreferences() async { + // SharedPreferences prefs = await SharedPreferences.getInstance(); + // setState(() { + // actualUse = prefs.getString('actualUse') ?? ''; + // totalAreas = prefs.getInt('totalArea') ?? + // 0; // Provide a default value if the key doesn't exist + // }); + // } calculateAdditionalItems(List items) { double sum = 0; @@ -498,400 +518,378 @@ class _PropertyAppraisalEditPage extends State { @override Widget build(BuildContext context) { - return BlocConsumer( - listener: (context, state) { - // TODO: implement listener - }, - builder: (context, state) { - if (state is PropertyAppraisalEditLoaded) { - final appraisal = state.appraisalEdit; - return BlocConsumer(listener: (context, state) { - // TODO: implement listener - }, builder: (context, state) { - if (state is AdditionalItemsEditLoaded) { - final item = state.items; - return BlocConsumer(listener: (context, state) { - // TODO: implement listener - }, builder: (context, state) { - if (state is GenDescLoaded) { - double totalArea = double.tryParse( - state.gendesc.totalFloorArea ?? - appraisal.totalArea.toString()) ?? - 0.0; + return ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: + BlocConsumer( + listener: (context, state) { + if (state is PropertyAppraisalEditLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } - double bldgUnitValue = double.tryParse( - keys.currentState?.value['bldg_type']?.unitValue ?? + if (state is PropertyAppraisalEditErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is PropertyAppraisalEditLoaded) { + final appraisal = state.appraisalEdit; + return BlocConsumer(listener: (context, state) { + if (state is PropertyAppraisalEditLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is AdditionalItemsEditLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is AdditionalItemsEditErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, builder: (context, state) { + if (state is AdditionalItemsEditLoaded) { + final item = state.items; + + return BlocConsumer( + listener: (context, state) { + if (state is GenDescLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is GenDescLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is GenDescErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is GenDescLoaded) { + double totalArea = double.tryParse( + (state.gendesc.totalFloorArea ?? + appraisal.totalArea) + ?.toString() ?? + '0.0') ?? + 0.0; + + double bldgUnitValue = double.tryParse(keys.currentState + ?.value['bldg_type']?.unitValue ?? appraisal.unitconstructCost) ?? - 0.0; - return Expanded( - child: SingleChildScrollView( - child: Container( - margin: const EdgeInsets.only(left: 20.0, right: 20.0), - child: Column( - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 20), - child: const Text('PROPERTY APPRAISAL', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18), - textAlign: TextAlign.left), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Unit Construction Cost", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - bldgUnitValue.toString() + ' sq.m', - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Building Core", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - '', - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 40), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Sub-total", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - bldgUnitValue.toString(), - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 40), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Cost of Additional Items", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - '', - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Sub-total", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - appraisal.addItemsSubtotal!, - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Total Construction Cost", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - calculateConstructionCost( - double.parse(appraisal - .unitconstructSubtotal!), - double.parse( - appraisal.addItemsSubtotal!)) - .toString()!, - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 40), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Depreciation Rate", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13), - textAlign: TextAlign.left, - ), - ), - SizedBox( - width: 90, - height: 25, - child: FormBuilderTextField( - name: 'depRate', - decoration: - normalTextFieldStyle("0.00", ""), - validator: - FormBuilderValidators.compose([]), - onChanged: (value) { - setState(() { - depRate = double.parse(value!); - }); - }, - ), - ), - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Depreciation Cost", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - calculateDepCost( - (totalArea * bldgUnitValue), - item, - double.parse(keys.currentState - ?.value['depRate'] ?? - appraisal.depreciationRate)) - .toString(), - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Total % Depreciation", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - '${(double.parse(keys.currentState?.value['depRate'] ?? appraisal.depreciationRate) * 100).toStringAsFixed(2)}%', - textAlign: TextAlign.right, - ), - ) - ], - ), - const SizedBox(height: 15), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Text( - "Market Value", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 13), - textAlign: TextAlign.left, - ), - ), - Container( - child: Text( - calculateMarketValue( - (totalArea * bldgUnitValue), - item, - double.parse(keys.currentState - ?.value['depRate'] ?? - appraisal.depreciationRate)) - .toString(), - textAlign: TextAlign.right, - ), - ) - ], - ), - Row( - children: [ - Expanded( - flex: 1, - child: SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Container( - margin: const EdgeInsets.symmetric( - horizontal: 20.0), - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - Container( - margin: const EdgeInsets.fromLTRB( - 0, 20, 0, 20), - child: const Text( - 'PROPERTY ASSESSMENT', - style: TextStyle( + 0.0; + return Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Container( + margin: const EdgeInsets.only( + left: 20.0, right: 20.0), + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, + top: 20, + right: 0, + bottom: 20), + child: const Text('PROPERTY APPRAISAL', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + child: const Text( + "Unit Construction Cost", + style: TextStyle( fontWeight: FontWeight.bold, - fontSize: 18, - ), - textAlign: TextAlign.left, - ), + fontSize: 13), + textAlign: TextAlign.left, ), - Column( - children: [ - Row( + ), + Container( + child: Text( + bldgUnitValue.toString() + ' sq.m', + textAlign: TextAlign.right, + ), + ) + ], + ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + child: const Text( + "Building Core", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: const Text( + '', + textAlign: TextAlign.right, + ), + ) + ], + ), + const SizedBox(height: 40), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + child: const Text( + "Sub-total", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + bldgUnitValue.toString(), + textAlign: TextAlign.right, + ), + ) + ], + ), + const SizedBox(height: 40), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + child: const Text( + "Cost of Additional Items", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: const Text( + '', + textAlign: TextAlign.right, + ), + ) + ], + ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + child: const Text( + "Sub-total", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + appraisal.addItemsSubtotal ?? + '0.00', + textAlign: TextAlign.right, + ), + ) + ], + ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + child: const Text( + "Total Construction Cost", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + calculateConstructionCost( + double.parse(appraisal + .unitconstructSubtotal!), + double.parse(appraisal + .addItemsSubtotal!)) + .toString(), + textAlign: TextAlign.right, + ), + ) + ], + ), + const SizedBox(height: 40), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + child: const Text( + "Depreciation Rate", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13), + textAlign: TextAlign.left, + ), + ), + SizedBox( + width: 90, + height: 25, + child: FormBuilderTextField( + name: 'depRate', + decoration: normalTextFieldStyle( + "0.00", ""), + validator: + FormBuilderValidators.compose( + []), + onChanged: (value) { + setState(() { + depRate = double.parse(value!); + }); + }, + ), + ), + ], + ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + child: const Text( + "Depreciation Cost", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + calculateDepCost( + (totalArea * bldgUnitValue), + item, + double.parse(keys + .currentState + ?.value[ + 'depRate'] ?? + appraisal + .depreciationRate)) + .toString(), + textAlign: TextAlign.right, + ), + ) + ], + ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + child: const Text( + "Total % Depreciation", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + '${(double.parse(keys.currentState?.value['depRate'] ?? appraisal.depreciationRate) * 100).toStringAsFixed(2)}%', + textAlign: TextAlign.right, + ), + ) + ], + ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + child: const Text( + "Market Value", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13), + textAlign: TextAlign.left, + ), + ), + Container( + child: Text( + calculateMarketValue( + (totalArea * bldgUnitValue), + item, + double.parse(keys + .currentState + ?.value[ + 'depRate'] ?? + appraisal + .depreciationRate)) + .toString(), + textAlign: TextAlign.right, + ), + ) + ], + ), + Row( + children: [ + Expanded( + flex: 1, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Container( + margin: + const EdgeInsets.symmetric( + horizontal: 20.0), + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, children: [ Container( - width: 100, - margin: - const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all( - 5.0), + margin: const EdgeInsets + .fromLTRB(0, 20, 0, 20), child: const Text( - 'Actual Use', + 'PROPERTY ASSESSMENT', style: TextStyle( fontWeight: FontWeight.bold, - fontSize: 13, + fontSize: 18, ), - textAlign: - TextAlign.center, + textAlign: TextAlign.left, ), ), - Container( - width: 150, - margin: - const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all( - 5.0), - child: const Text( - 'Market Value', - style: TextStyle( - fontWeight: - FontWeight.bold, - fontSize: 13, - ), - textAlign: - TextAlign.center, - ), - ), - Container( - width: 100, - margin: - const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all( - 5.0), - child: const Text( - 'Ass. Level', - style: TextStyle( - fontWeight: - FontWeight.bold, - fontSize: 13, - ), - textAlign: - TextAlign.center, - ), - ), - Container( - width: 150, - margin: - const EdgeInsets.only( - top: 15, left: 15), - padding: - const EdgeInsets.all( - 5.0), - child: const Text( - 'Ass. Value', - style: TextStyle( - fontWeight: - FontWeight.bold, - fontSize: 13, - ), - textAlign: - TextAlign.center, - ), - ), - ], - ), - SizedBox( - height: 50, - child: SingleChildScrollView( - scrollDirection: - Axis.horizontal, - child: Row(children: [ - Container( - height: 100, - child: Row( + Column( + children: [ + Row( children: [ Container( width: 100, @@ -903,10 +901,8 @@ class _PropertyAppraisalEditPage extends State { padding: const EdgeInsets .all(5.0), - child: Text( - state.gendesc - .actualUse ?? - "", + child: const Text( + 'Actual Use', style: TextStyle( fontWeight: FontWeight @@ -928,21 +924,8 @@ class _PropertyAppraisalEditPage extends State { padding: const EdgeInsets .all(5.0), - child: Text( - NumberFormat - .currency( - locale: 'en-PH', - symbol: "₱", - ).format( - calculateMarketValue( - (totalArea * - bldgUnitValue), - item, - double.parse(keys - .currentState - ?.value['depRate'] ?? - appraisal.depreciationRate)), - ), + child: const Text( + 'Market Value', style: TextStyle( fontWeight: FontWeight @@ -964,15 +947,8 @@ class _PropertyAppraisalEditPage extends State { padding: const EdgeInsets .all(5.0), - child: Text( - assessmentLevel( - calculateMarketValue( - (totalArea * bldgUnitValue), - item, - double.parse(keys.currentState?.value['depRate'] ?? appraisal.depreciationRate)) - .toString(), - state.gendesc.actualUse) + - '%', + child: const Text( + 'Ass. Level', style: TextStyle( fontWeight: FontWeight @@ -994,22 +970,8 @@ class _PropertyAppraisalEditPage extends State { padding: const EdgeInsets .all(5.0), - child: Text( - NumberFormat - .currency( - locale: 'en-PH', - symbol: "₱", - ).format(assessmentValue( - calculateMarketValue( - (totalArea * - bldgUnitValue), - item, - double.parse(keys.currentState?.value['depRate'] ?? - appraisal - .depreciationRate)) - .toString(), - state.gendesc - .actualUse)), + child: const Text( + 'Ass. Value', style: TextStyle( fontWeight: FontWeight @@ -1021,115 +983,262 @@ class _PropertyAppraisalEditPage extends State { .center, ), ), - const SizedBox( - height: 80, - ), ], ), - ) - ]), - ), - ) - ], - ) - ], - ), + SizedBox( + height: 50, + child: + SingleChildScrollView( + scrollDirection: + Axis.horizontal, + child: Row(children: [ + Container( + height: 100, + child: Row( + children: [ + Container( + width: 100, + margin: const EdgeInsets + .only( + top: 15, + left: + 15), + padding: + const EdgeInsets.all( + 5.0), + child: Text( + state.gendesc + .actualUse ?? + "", + style: + const TextStyle( + fontWeight: + FontWeight.bold, + fontSize: + 13, + ), + textAlign: + TextAlign + .center, + ), + ), + Container( + width: 150, + margin: const EdgeInsets + .only( + top: 15, + left: + 15), + padding: + const EdgeInsets.all( + 5.0), + child: Text( + NumberFormat + .currency( + locale: + 'en-PH', + symbol: + "₱", + ).format( + calculateMarketValue( + (totalArea * + bldgUnitValue), + item, + double.parse(keys.currentState?.value['depRate'] ?? + appraisal.depreciationRate)), + ), + style: + const TextStyle( + fontWeight: + FontWeight.bold, + fontSize: + 13, + ), + textAlign: + TextAlign + .center, + ), + ), + Container( + width: 100, + margin: const EdgeInsets + .only( + top: 15, + left: + 15), + padding: + const EdgeInsets.all( + 5.0), + child: Text( + '${assessmentLevel(calculateMarketValue((totalArea * bldgUnitValue), item, double.parse(keys.currentState?.value['depRate'] ?? appraisal.depreciationRate)).toString(), state.gendesc.actualUse)}%', + style: + const TextStyle( + fontWeight: + FontWeight.bold, + fontSize: + 13, + ), + textAlign: + TextAlign + .center, + ), + ), + Container( + width: 150, + margin: const EdgeInsets + .only( + top: 15, + left: + 15), + padding: + const EdgeInsets.all( + 5.0), + child: Text( + NumberFormat + .currency( + locale: + 'en-PH', + symbol: + "₱", + ).format(assessmentValue( + calculateMarketValue((totalArea * bldgUnitValue), item, double.parse(keys.currentState?.value['depRate'] ?? appraisal.depreciationRate)) + .toString(), + state + .gendesc + .actualUse)), + style: + const TextStyle( + fontWeight: + FontWeight.bold, + fontSize: + 13, + ), + textAlign: + TextAlign + .center, + ), + ), + const SizedBox( + height: 80, + ), + ], + ), + ) + ]), + ), + ) + ], + ) + ], + ), + ), + ), + ), + ], ), - ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon( + Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon( + Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () async { + final tempID = + await SharedPreferences + .getInstance(); + + final id = + tempID.getInt('tempid')! - 1; + { + var appraisals = PropertyAppraisalEdit( + id: 1, + bldgapprDetailsId: id, + unitconstructCost: + bldgUnitValue.toString(), + buildingCore: 'test', + unitconstructSubtotal: + (totalArea * bldgUnitValue) + .toString(), + depreciationRate: + depRate.toString(), + depreciationCost: + calculateDepCost((totalArea * bldgUnitValue), item, depRate) + .toString(), + costAddItems: + calculateAdditionalItems(item) + .toString(), + addItemsSubtotal: + calculateAdditionalItems(item) + .toString(), + totalpercentDepreciation: + (depRate * 100) + .toStringAsFixed(2), + marketValue: calculateMarketValue( + (totalArea * bldgUnitValue), + item, + depRate) + .toString(), + totalArea: totalArea.toString()); + context + .read< + PropertyAppraisalEditBloc>() + .add( + UpdatePropertyAppraisalEdit( + appraisalEdit: + appraisals, + id: widget.tempId)); + + widget.NextBtn(); + } + ; + }, + ) + ], + ) + ], ), - ], + ), ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - CustomButton( - icon: const Icon(Icons.chevron_left_rounded, - color: Colors.white), - onPressed: () { - { - widget.PrevBtn(); - } - ; - }, - ), - CustomButton( - icon: const Icon(Icons.chevron_right_rounded, - color: Colors.white), - onPressed: () async { - final tempID = - await SharedPreferences.getInstance(); - - final id = tempID.getInt('tempid')! - 1; - { - var appraisals = PropertyAppraisalEdit( - id: 1, - bldgapprDetailsId: id, - unitconstructCost: - bldgUnitValue.toString(), - buildingCore: 'test', - unitconstructSubtotal: - (totalArea * bldgUnitValue) - .toString(), - depreciationRate: depRate.toString(), - depreciationCost: calculateDepCost( - (totalArea * bldgUnitValue), - item, - depRate) - .toString(), - costAddItems: - calculateAdditionalItems(item) - .toString(), - addItemsSubtotal: - calculateAdditionalItems(item) - .toString(), - totalpercentDepreciation: - (depRate * 100) - .toStringAsFixed(2), - marketValue: calculateMarketValue( - (totalArea * bldgUnitValue), - item, - depRate) - .toString(), - totalArea: totalArea.toString()); - context.read() - ..add(UpdatePropertyAppraisalEdit( - appraisalEdit: appraisals, - id: widget.tempId)); - - widget.NextBtn(); - } - ; - }, - ) - ], - ) - ], - ), - ), - ), - ); - } - return Container(); - }); - } - return Container(); - }); - } - if (state is PropertyAppraisalEditErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context - .read() - .add(LoadPropertyAppraisalEdit( - appraisalEdit: PropertyAppraisalEdit(), - id: widget.tempId, - )); - }, - ); - } - return Container(); - }, + ), + ], + ); + } + return Container(); + }, + ); + } + return Container(); + }); + } + if (state is PropertyAppraisalEditErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(LoadPropertyAppraisalEdit( + appraisalEdit: PropertyAppraisalEdit(), + id: widget.tempId, + )); + }, + ); + } + return Container(); + }, + ), ); } } diff --git a/lib/screens/passo/Building/edit_building/property_assessement_edit.dart b/lib/screens/passo/Building/edit_building/property_assessement_edit.dart index e2b20e3..dd4dea0 100644 --- a/lib/screens/passo/Building/edit_building/property_assessement_edit.dart +++ b/lib/screens/passo/Building/edit_building/property_assessement_edit.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.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'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:form_builder_validators/form_builder_validators.dart'; import 'package:intl/intl.dart'; import 'package:searchfield/searchfield.dart'; @@ -457,637 +459,698 @@ class _PropertyAssessmentEditPage extends State { @override Widget build(BuildContext context) { - return BlocBuilder( - builder: (context, state) { - if (state is PropertyAssessmentEditLoaded) { - final assessment = state.assessmentsEdit; - return BlocConsumer( - listener: (context, state) { - // TODO: implement listener - }, - builder: (context, state) { - if (state is SignatoriesLoaded) { - final signatories = state.signatories; + return ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: + BlocConsumer( + listener: (context, state) { + if (state is PropertyAssessmentEditLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is PropertyAssessmentEditLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is PropertyAssessmentEditErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is PropertyAssessmentEditLoaded) { + final assessment = state.assessmentsEdit; + return BlocConsumer( + listener: (context, state) { + if (state is SignatoriesLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } - return BlocConsumer( - listener: (context, state) { - // TODO: implement listener - }, - builder: (context, state) { - if (state is MemorandaLoaded) { - return FormBuilder( - key: keys, - initialValue: { - 'qtr': assessment.qtr.toString(), - 'yr': assessment.qtr.toString(), - // 'appraised_by': assessment.appraisedbyName, - 'app_date': assessment.appraisedbyDate.toString(), - // 'rec_approval': assessment.recommendapprName, - 'rec_date': assessment.recommendapprDate.toString(), - // 'apprvd_by': assessment.approvedbyName, - 'memoranda': assessment.memoranda, - 'sworn_statement': assessment.swornstatementNo, - 'date_received': assessment.dateReceived.toString(), - 'date_of_entry': - assessment.entryDateAssessment.toString(), - 'by': assessment.entryDateBy - }, - enabled: true, - onChanged: () { - keys.currentState!.save(); - debugPrint(keys.currentState!.value.toString()); - }, - autovalidateMode: AutovalidateMode.disabled, - skipDisabled: true, - child: Expanded( - child: Column( - children: [ - Container( - margin: const EdgeInsets.fromLTRB(0, 20, 0, 20), - child: const Text( - 'PROPERTY ASSESSMENT cont..', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18, + if (state is SignatoriesErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is SignatoriesLoaded) { + final signatories = state.signatories; + + return BlocConsumer( + listener: (context, state) { + if (state is MemorandaLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is MemorandaLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is MemorandaErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is MemorandaLoaded) { + return FormBuilder( + key: keys, + initialValue: { + 'qtr': assessment.qtr?.toString() ?? '', + 'yr': assessment.qtr?.toString() ?? '', + 'app_date': + assessment.appraisedbyDate?.toString() ?? '', + 'rec_date': + assessment.recommendapprDate?.toString() ?? '', + 'memoranda': assessment.memoranda ?? '', + 'sworn_statement': + assessment.swornstatementNo ?? '', + 'date_received': + assessment.dateReceived?.toString() ?? '', + 'date_of_entry': + assessment.entryDateAssessment?.toString() ?? + '', + 'by': assessment.entryDateBy ?? '', + }, + enabled: true, + onChanged: () { + keys.currentState!.save(); + debugPrint(keys.currentState!.value.toString()); + }, + autovalidateMode: AutovalidateMode.disabled, + skipDisabled: true, + child: Expanded( + child: Column( + children: [ + Container( + margin: + const EdgeInsets.fromLTRB(0, 20, 0, 20), + child: const Text( + 'PROPERTY ASSESSMENT cont..', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + ), + textAlign: TextAlign.left, ), - textAlign: TextAlign.left, ), - ), - Expanded( - flex: 3, - child: SingleChildScrollView( - scrollDirection: Axis.vertical, - child: Column( - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceAround, - children: [ - Row( - children: [ - const Text('Taxable'), - Checkbox( - checkColor: Colors.white, - value: isTaxable, - onChanged: (bool? value) { - setState(() { - isTaxable = value!; - }); - }, - ) - ], - ), - Row( - children: [ - const Text('Exempt'), - Checkbox( - checkColor: Colors.white, - value: isExempt, - onChanged: (bool? value) { - setState(() { - isExempt = value!; - }); - }, - ) - ], - ), - ], - ), - Column( - children: [ - const SizedBox( - height: 20, - ), - const Text( - 'EFFECTIVITY OF ASSESSMENT / REASSESSMENT :', - style: TextStyle( - fontWeight: FontWeight.bold), - ), - const SizedBox( - height: 20, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceAround, - children: [ - const Text('Qtr.'), - SizedBox( - width: 70, - height: 25, - child: FormBuilderTextField( - name: 'qtr', - validator: - FormBuilderValidators - .compose([]), - ), - ), - const SizedBox( - width: 20, - ), - const Text('Yr.'), - SizedBox( - width: 70, - height: 25, - child: FormBuilderTextField( - name: 'yr', - validator: - FormBuilderValidators - .compose([]), - ), - ), - ], - ), - ], - ), - const SizedBox( - height: 30, - ), - Align( - alignment: Alignment.centerLeft, - child: Text( - 'APPRAISED/ASSESSED BY:', - style: TextStyle( - fontWeight: FontWeight.bold), - textAlign: TextAlign.start, + Expanded( + flex: 3, + child: SingleChildScrollView( + scrollDirection: Axis.vertical, + child: Column( + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Row( + children: [ + const Text('Taxable'), + Checkbox( + checkColor: Colors.white, + value: isTaxable, + onChanged: (bool? value) { + setState(() { + isTaxable = value!; + }); + }, + ) + ], + ), + Row( + children: [ + const Text('Exempt'), + Checkbox( + checkColor: Colors.white, + value: isExempt, + onChanged: (bool? value) { + setState(() { + isExempt = value!; + }); + }, + ) + ], + ), + ], ), - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceAround, - children: [ - Column( - children: [ - SizedBox( - width: 200, - child: FormBuilderDropdown< - Signatories>( - name: 'appraised_by', - decoration: - InputDecoration( - labelText: assessment - .appraisedbyName!, - labelStyle: - const TextStyle( - color: Colors - .black), - ), - autofocus: false, - items: signatories - .map((signatories) => - DropdownMenuItem( - value: - signatories, - child: Text( - '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), - )) - .toList()), - ), - Text('Name'), - ], - ), - const SizedBox( - width: 15, - ), - Column( - children: [ - SizedBox( - width: 100, - child: - FormBuilderDateTimePicker( - name: 'app_date', - initialEntryMode: - DatePickerEntryMode - .calendarOnly, - initialValue: - DateTime.now(), - inputType: InputType.date, - - initialTime: - const TimeOfDay( - hour: 8, minute: 0), - // locale: const Locale.fromSubtags(languageCode: 'fr'), + Column( + children: [ + const SizedBox( + height: 20, + ), + const Text( + 'EFFECTIVITY OF ASSESSMENT / REASSESSMENT :', + style: TextStyle( + fontWeight: + FontWeight.bold), + ), + const SizedBox( + height: 20, + ), + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceAround, + children: [ + const Text('Qtr.'), + SizedBox( + width: 70, + height: 25, + child: FormBuilderTextField( + name: 'qtr', + validator: + FormBuilderValidators + .compose([]), + ), ), - ), - Text('Date'), - ], - ), - ], - ), - const SizedBox( - height: 30, - ), - const Align( + const SizedBox( + width: 20, + ), + const Text('Yr.'), + SizedBox( + width: 70, + height: 25, + child: FormBuilderTextField( + name: 'yr', + validator: + FormBuilderValidators + .compose([]), + ), + ), + ], + ), + ], + ), + const SizedBox( + height: 30, + ), + Align( alignment: Alignment.centerLeft, child: Text( - 'RECOMMENDING APPROVAL:', + 'APPRAISED/ASSESSED BY:', style: TextStyle( fontWeight: FontWeight.bold), - )), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceAround, - children: [ - Column( - children: [ - SizedBox( - width: 200, - child: FormBuilderDropdown< - Signatories>( - name: 'rec_approval', - decoration: - InputDecoration( - labelText: assessment - .recommendapprName!, - labelStyle: - const TextStyle( - color: Colors - .black), - ), - autofocus: false, - items: signatories - .map((signatories) => - DropdownMenuItem( - value: - signatories, - child: Text( - '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), - )) - .toList()), - ), - Text('Name'), - ], + textAlign: TextAlign.start, ), - const SizedBox( - width: 15, - ), - Column( - children: [ - SizedBox( - width: 100, - child: - FormBuilderDateTimePicker( - name: 'rec_date', - initialEntryMode: - DatePickerEntryMode - .calendarOnly, - initialValue: - DateTime.now(), - inputType: InputType.date, - - initialTime: - const TimeOfDay( - hour: 8, minute: 0), - // locale: const Locale.fromSubtags(languageCode: 'fr'), - ), - ), - Text('Date'), - ], - ), - ], - ), - const SizedBox( - height: 30, - ), - const Align( - alignment: Alignment.centerLeft, - child: Text( - 'APPROVED BY:', - style: TextStyle( - fontWeight: FontWeight.bold, - ), - )), - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Column( - children: [ - SizedBox( - width: 200, - child: FormBuilderDropdown< - Signatories>( - name: 'apprvd_by', - autofocus: false, - decoration: - InputDecoration( - labelText: assessment - .approvedbyName!, - labelStyle: - const TextStyle( - color: Colors - .black), - ), - items: signatories - .map((signatories) => - DropdownMenuItem( - value: - signatories, - child: Text( - '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), - )) - .toList()), - ), - Text('Name'), - ], - ), - ], - ), - const SizedBox( - height: 50, - ), - const Align( - alignment: Alignment.centerLeft, - child: Text( - 'MEMORANDA: ', - style: TextStyle( - fontWeight: FontWeight.bold, - ), - )), - SizedBox( - height: 30, - ), - SizedBox( - width: 500, - height: 100, - child: SearchField( - itemHeight: 70, - - suggestions: state.memorada - .map((Memoranda memoranda) => - SearchFieldListItem( - '${memoranda.memoranda}', - item: - memoranda, // Change: Use individual Memoranda object - child: ListTile( - title: Text( - '${memoranda.memoranda}', - overflow: - TextOverflow - .ellipsis, - ), + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Column( + children: [ + SizedBox( + width: 200, + child: FormBuilderDropdown< + Signatories>( + name: 'appraised_by', + decoration: + InputDecoration( + labelText: assessment + .appraisedbyName ?? + "", + labelStyle: + const TextStyle( + color: Colors + .black), ), - )) - .toList(), - validator: FormBuilderValidators - .required( - errorText: - "This field is required"), - // searchInputDecoration: - // normalTextFieldStyle( - // "Memoranda", "") - // .copyWith( - // suffixIcon: const Icon( - // Icons.arrow_drop_down), - // ), - // focusNode: focus, - suggestionState: - Suggestion.expand, - onSuggestionTap: (memoranda) { - setState(() { - _memoranda = memoranda - .item!.memoranda!; - }); - focus.unfocus(); - }, - )), - SizedBox( - height: 30, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text('Sworn Statement No. :'), - SizedBox( - width: 150, - height: 20, - child: FormBuilderTextField( - name: 'sworn_statement', - decoration: InputDecoration(), - validator: FormBuilderValidators - .compose([]), - ), - ), - ], - ), - SizedBox( - height: 30, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text('Date Received:'), - SizedBox( - width: 150, - height: 20, - child: FormBuilderDateTimePicker( - name: 'date_received', - initialEntryMode: - DatePickerEntryMode - .calendarOnly, - initialValue: DateTime.now(), - inputType: InputType.date, - - initialTime: const TimeOfDay( - hour: 8, minute: 0), - // locale: const Locale.fromSubtags(languageCode: 'fr'), - ), - ), - ], - ), - SizedBox( - height: 30, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Date of Entry in the Rec. of Ass. :'), - SizedBox( - width: 100, - height: 20, - child: FormBuilderDateTimePicker( - name: 'date_of_entry', - initialEntryMode: - DatePickerEntryMode - .calendarOnly, - initialValue: DateTime.now(), - inputType: InputType.date, - - initialTime: const TimeOfDay( - hour: 8, minute: 0), - // locale: const Locale.fromSubtags(languageCode: 'fr'), - ), - ), - ], - ), - SizedBox( - height: 30, - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text('By:'), - SizedBox( - width: 150, - height: 20, - child: FormBuilderTextField( - name: 'by', - decoration: InputDecoration(), - validator: FormBuilderValidators - .compose([]), - ), - ), - ], - ), - SizedBox( - height: 30, - ), - SizedBox( - width: - MediaQuery.of(context).size.width, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: primary, - foregroundColor: Colors.red), - child: SizedBox( - width: 200, - height: 50, - child: Align( - alignment: Alignment.center, - child: Text( - 'Save', - style: TextStyle( - color: Colors.white, + autofocus: false, + items: signatories + .map((signatories) => + DropdownMenuItem( + value: + signatories, + child: Text( + '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), + )) + .toList()), ), - textAlign: TextAlign.center, + Text('Name'), + ], + ), + const SizedBox( + width: 15, + ), + Column( + children: [ + SizedBox( + width: 100, + child: + FormBuilderDateTimePicker( + name: 'app_date', + initialEntryMode: + DatePickerEntryMode + .calendarOnly, + initialValue: + DateTime.now(), + inputType: InputType.date, + + initialTime: + const TimeOfDay( + hour: 8, + minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + Text('Date'), + ], + ), + ], + ), + const SizedBox( + height: 30, + ), + const Align( + alignment: Alignment.centerLeft, + child: Text( + 'RECOMMENDING APPROVAL:', + style: TextStyle( + fontWeight: + FontWeight.bold), + )), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Column( + children: [ + SizedBox( + width: 200, + child: FormBuilderDropdown< + Signatories>( + name: 'rec_approval', + decoration: + InputDecoration( + labelText: assessment + .recommendapprName ?? + "", + labelStyle: + const TextStyle( + color: Colors + .black), + ), + autofocus: false, + items: signatories + .map((signatories) => + DropdownMenuItem( + value: + signatories, + child: Text( + '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), + )) + .toList()), + ), + Text('Name'), + ], + ), + const SizedBox( + width: 15, + ), + Column( + children: [ + SizedBox( + width: 100, + child: + FormBuilderDateTimePicker( + name: 'rec_date', + initialEntryMode: + DatePickerEntryMode + .calendarOnly, + initialValue: + DateTime.now(), + inputType: InputType.date, + + initialTime: + const TimeOfDay( + hour: 8, + minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + Text('Date'), + ], + ), + ], + ), + const SizedBox( + height: 30, + ), + const Align( + alignment: Alignment.centerLeft, + child: Text( + 'APPROVED BY:', + style: TextStyle( + fontWeight: FontWeight.bold, + ), + )), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Column( + children: [ + SizedBox( + width: 200, + child: FormBuilderDropdown< + Signatories>( + name: 'apprvd_by', + autofocus: false, + decoration: + InputDecoration( + labelText: assessment + .approvedbyName ?? + "", + labelStyle: + const TextStyle( + color: Colors + .black), + ), + items: signatories + .map((signatories) => + DropdownMenuItem( + value: + signatories, + child: Text( + '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), + )) + .toList()), + ), + Text('Name'), + ], + ), + ], + ), + const SizedBox( + height: 50, + ), + const Align( + alignment: Alignment.centerLeft, + child: Text( + 'MEMORANDA: ', + style: TextStyle( + fontWeight: FontWeight.bold, + ), + )), + SizedBox( + height: 30, + ), + SizedBox( + width: 500, + height: 100, + child: SearchField( + itemHeight: 70, + + suggestions: state.memorada + .map( + (Memoranda memoranda) => + SearchFieldListItem( + '${memoranda.memoranda}', + item: + memoranda, // Change: Use individual Memoranda object + child: ListTile( + title: Text( + '${memoranda.memoranda}', + overflow: + TextOverflow + .ellipsis, + ), + ), + )) + .toList(), + validator: FormBuilderValidators + .required( + errorText: + "This field is required"), + // searchInputDecoration: + // normalTextFieldStyle( + // "Memoranda", "") + // .copyWith( + // suffixIcon: const Icon( + // Icons.arrow_drop_down), + // ), + // focusNode: focus, + suggestionState: + Suggestion.expand, + onSuggestionTap: (memoranda) { + setState(() { + _memoranda = memoranda + .item!.memoranda!; + }); + focus.unfocus(); + }, + )), + SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text('Sworn Statement No. :'), + SizedBox( + width: 150, + height: 20, + child: FormBuilderTextField( + name: 'sworn_statement', + decoration: InputDecoration(), + validator: + FormBuilderValidators + .compose([]), ), ), - ), - onPressed: () { - final List - propertyAssessments = []; + ], + ), + SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text('Date Received:'), + SizedBox( + width: 150, + height: 20, + child: + FormBuilderDateTimePicker( + name: 'date_received', + initialEntryMode: + DatePickerEntryMode + .calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, - PropertyAssessmentEdit ass = - PropertyAssessmentEdit( - id: 1, - bldgapprDetailsId: 440, - actualUse: assessment.actualUse, - marketValue: '0.0', - assessmentLevel: '0.0', - assessedValue: "1.0", - taxable: isTaxable, - exempt: isExempt, - qtr: int.parse(keys - .currentState! - .value['qtr']), - yr: int.parse(keys - .currentState!.value['yr']), - appraisedbyName: keys - .currentState! - .value['appraised_by'] - .firstname + - ' ' + - keys - .currentState! - .value['appraised_by'] - .middlename + - ' ' + - keys - .currentState! - .value['appraised_by'] - .lastname, - appraisedbyDate: keys - .currentState! - .value['app_date'], - recommendapprName: keys - .currentState! - .value['rec_approval'] - .firstname + - ' ' + - keys - .currentState! - .value['rec_approval'] - .middlename + - ' ' + - keys - .currentState! - .value['rec_approval'] - .lastname, - recommendapprDate: keys - .currentState! - .value['rec_date'], - approvedbyName: keys - .currentState! - .value['apprvd_by'] - .firstname + - ' ' + - keys - .currentState! - .value['apprvd_by'] - .middlename + - ' ' + - keys - .currentState! - .value['apprvd_by'] - .lastname, - memoranda: _memoranda, - swornstatementNo: keys - .currentState! - .value['sworn_statement'], - dateReceived: keys.currentState! - .value['date_received'], - entryDateAssessment: keys - .currentState! - .value['date_of_entry'], - entryDateBy: keys - .currentState!.value['by'], - ); + initialTime: const TimeOfDay( + hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + ], + ), + SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + 'Date of Entry in the Rec. of Ass. :'), + SizedBox( + width: 100, + height: 20, + child: + FormBuilderDateTimePicker( + name: 'date_of_entry', + initialEntryMode: + DatePickerEntryMode + .calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, - propertyAssessments.add(ass); + initialTime: const TimeOfDay( + hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + ], + ), + SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text('By:'), + SizedBox( + width: 150, + height: 20, + child: FormBuilderTextField( + name: 'by', + decoration: InputDecoration(), + validator: + FormBuilderValidators + .compose([]), + ), + ), + ], + ), + SizedBox( + height: 30, + ), + SizedBox( + width: MediaQuery.of(context) + .size + .width, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: primary, + foregroundColor: Colors.red), + child: SizedBox( + width: 200, + height: 50, + child: Align( + alignment: Alignment.center, + child: Text( + 'Save', + style: TextStyle( + color: Colors.white, + ), + textAlign: TextAlign.center, + ), + ), + ), + onPressed: () { + final List< + PropertyAssessmentEdit> + propertyAssessments = []; - context.read< - PropertyAssessmentEditBloc>() - ..add( - UpdatePropertyAssessmentEdit( + PropertyAssessmentEdit ass = + PropertyAssessmentEdit( + id: 1, + bldgapprDetailsId: 440, + actualUse: + assessment.actualUse, + marketValue: '0.0', + assessmentLevel: '0.0', + assessedValue: "1.0", + taxable: isTaxable, + exempt: isExempt, + qtr: int.parse(keys + .currentState! + .value['qtr']), + yr: int.parse(keys + .currentState! + .value['yr']), + appraisedbyName: keys + .currentState! + .value['appraised_by'] + .firstname + + ' ' + + keys + .currentState! + .value['appraised_by'] + .middlename + + ' ' + + keys + .currentState! + .value['appraised_by'] + .lastname, + appraisedbyDate: keys + .currentState! + .value['app_date'], + recommendapprName: keys + .currentState! + .value['rec_approval'] + .firstname + + ' ' + + keys + .currentState! + .value['rec_approval'] + .middlename + + ' ' + + keys + .currentState! + .value['rec_approval'] + .lastname, + recommendapprDate: keys + .currentState! + .value['rec_date'], + approvedbyName: keys + .currentState! + .value['apprvd_by'] + .firstname + + ' ' + + keys + .currentState! + .value['apprvd_by'] + .middlename + + ' ' + + keys + .currentState! + .value['apprvd_by'] + .lastname, + memoranda: _memoranda, + swornstatementNo: keys + .currentState! + .value['sworn_statement'], + dateReceived: keys + .currentState! + .value['date_received'], + entryDateAssessment: keys + .currentState! + .value['date_of_entry'], + entryDateBy: keys + .currentState! + .value['by'], + ); + + propertyAssessments.add(ass); + + context + .read< + PropertyAssessmentEditBloc>() + .add(UpdatePropertyAssessmentEdit( assessmentsEdit: propertyAssessments[ 0])); - }, + }, + ), ), - ), - ], - ), - )) - ], + ], + ), + )) + ], + ), ), - ), - ); - } - return Container(); - }, - ); - } - return Container(); - }, - ); - } - if (state is PropertyAssessmentEditErrorState) { - return SomethingWentWrong( - message: onError, - onpressed: () { - context.read().add( - LoadPropertyAssessmentEdit( - assessmentsEdit: PropertyAssessmentEdit(), - id: widget.tempId)); - }, - ); - } - return Container(); - }, + ); + } + return Container(); + }, + ); + } + return Container(); + }, + ); + } + if (state is PropertyAssessmentEditErrorState) { + return SomethingWentWrong( + message: state.error, + onpressed: () { + context.read().add( + LoadPropertyAssessmentEdit( + assessmentsEdit: PropertyAssessmentEdit(), + id: widget.tempId)); + }, + ); + } + return Container(); + }, + ), ); } } diff --git a/lib/screens/passo/Building/edit_building/property_owner_info.dart b/lib/screens/passo/Building/edit_building/property_owner_info.dart index 7e81231..5a32955 100644 --- a/lib/screens/passo/Building/edit_building/property_owner_info.dart +++ b/lib/screens/passo/Building/edit_building/property_owner_info.dart @@ -62,156 +62,185 @@ class _PropertyOwnerInfoEdit extends State { Widget build(BuildContext context) { return BlocConsumer( listener: (context, state) { - // TODO: implement listener + if (state is PropertyInfoLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is PropertyInfoLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + + if (state is PropertyInfoErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } }, builder: (context, state) { if (state is PropertyInfoLoaded) { return SingleChildScrollView( scrollDirection: Axis.vertical, - child: Expanded( - child: Column( - children: [ - FormBuilder( - key: keys, - initialValue: { - 'transaction_code': widget.faas.transCode, - 'arp_td': widget.faas.tdn, - 'pin': widget.faas.pin, - 'owner': widget.faas.owner, - 'address': widget.faas.address, - 'tel_no': widget.faas.telno, - 'tin': widget.faas.tin, - 'benificiary': widget.faas.adminUser, - 'benificiary_telno': widget.faas.adminTelno, - 'benificiary_address': widget.faas.adminAddress, - 'benificaiary_tin': widget.faas.adminTin, - }, - enabled: true, - onChanged: () { - keys.currentState!.save(); - debugPrint(keys.currentState!.value.toString()); - }, - autovalidateMode: AutovalidateMode.disabled, - skipDisabled: true, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 10), - child: const Text('PROPERTY OWNER INFO', - style: TextStyle( - fontWeight: FontWeight.bold, fontSize: 18), - textAlign: TextAlign.left), - ), - const SizedBox(height: 15), - customDropDownField("Transaction Code", "", - "transaction_code", transaction_codes), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customTextField( - "ARP No. / TD No.", "", 'arp_td')), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customTextField("Pin", "", 'pin')), - ], - ), - customTextField("Owner", "", 'owner'), - customTextField("Address", "", 'address'), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(15.0), + child: Expanded( + child: Column( + children: [ + FormBuilder( + key: keys, + initialValue: { + 'transaction_code': widget.faas.transCode, + 'arp_td': widget.faas.tdn, + 'pin': widget.faas.pin, + 'owner': widget.faas.owner, + 'address': widget.faas.address, + 'tel_no': widget.faas.telno, + 'tin': widget.faas.tin, + 'benificiary': widget.faas.adminUser, + 'benificiary_telno': widget.faas.adminTelno, + 'benificiary_address': widget.faas.adminAddress, + 'benificaiary_tin': widget.faas.adminTin, + }, + enabled: true, + onChanged: () { + keys.currentState!.save(); + debugPrint(keys.currentState!.value.toString()); + }, + autovalidateMode: AutovalidateMode.disabled, + skipDisabled: true, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Expanded( - flex: 1, - child: - customTextField("Tel No.", "", 'tel_no'), + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('PROPERTY OWNER INFO', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customTextField("TIN", "", 'tin')) - ]), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "Administrator / Benificial User", - "", - 'benificiary'), + const SizedBox(height: 15), + customDropDownField("Transaction Code", "", + "transaction_code", transaction_codes), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "ARP No. / TD No.", "", 'arp_td')), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: + customTextField("Pin", "", 'pin')), + ], ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customTextField( - "TIN", "", 'benificiary_tin')) - ]), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - flex: 1, - child: customTextField( - "Address", "", 'benificiary_address'), - ), - const SizedBox(width: 10.0), - Expanded( - // optional flex property if flex is 1 because the default flex is 1 - flex: 1, - child: customTextField( - "Tel No.", "", 'benificiary_telno')) - ]), - const SizedBox(height: 25), - SizedBox( - width: MediaQuery.of(context).size.width, - child: CustomButton( - icon: const Icon(Icons.chevron_right, - color: Colors.white), - onPressed: () { - var property_info = PropertyInfo( - id: widget.faas.id, - transCode: keys - .currentState!.value['transaction_code'] - .toString(), - tdn: keys.currentState!.value['arp_td'], - pin: keys.currentState!.value['pin'], - owner: keys.currentState!.value['owner'], - address: - keys.currentState!.value['address'], - telno: keys.currentState!.value['tel_no'], - tin: keys.currentState!.value['tin'], - adminUser: - keys.currentState!.value['benificiary'], - adminAddress: keys.currentState! - .value['benificiary_address'], - adminTin: keys - .currentState!.value['benificiary_tin'], - adminTelno: keys.currentState! - .value['benificiary_telno'], - assessedById: '1', - assessedByName: 'Cyril', - dateModified: DateTime.now(), - dateCreated: DateTime.now()); + customTextField("Owner", "", 'owner'), + customTextField("Address", "", 'address'), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "Tel No.", "", 'tel_no'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: + customTextField("TIN", "", 'tin')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "Administrator / Benificial User", + "", + 'benificiary'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "TIN", "", 'benificiary_tin')) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField("Address", "", + 'benificiary_address'), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField("Tel No.", "", + 'benificiary_telno')) + ]), + const SizedBox(height: 25), + SizedBox( + width: MediaQuery.of(context).size.width, + child: CustomButton( + icon: const Icon(Icons.chevron_right, + color: Colors.white), + onPressed: () { + var property_info = PropertyInfo( + id: widget.faas.id, + transCode: keys.currentState! + .value['transaction_code'] + .toString(), + tdn: keys + .currentState!.value['arp_td'], + pin: keys.currentState!.value['pin'], + owner: + keys.currentState!.value['owner'], + address: keys + .currentState!.value['address'], + telno: keys + .currentState!.value['tel_no'], + tin: keys.currentState!.value['tin'], + adminUser: keys.currentState! + .value['benificiary'], + adminAddress: keys.currentState! + .value['benificiary_address'], + adminTin: keys.currentState! + .value['benificiary_tin'], + adminTelno: keys.currentState! + .value['benificiary_telno'], + assessedById: '1', + assessedByName: 'Cyril', + dateModified: DateTime.now(), + dateCreated: DateTime.now()); - context.read().add( - UpdatPropertyInfo( - property_info: property_info)); + context.read().add( + UpdatPropertyInfo( + property_info: property_info)); - widget.NextBtn(); - }, - ), - ), - ])), - ], - ), + widget.NextBtn(); + }, + ), + ), + ])), + ], + ), + ), + ), + ], ), ); } diff --git a/lib/screens/passo/Building/edit_building/structural_materials.dart b/lib/screens/passo/Building/edit_building/structural_materials.dart index efeacf3..24580b3 100644 --- a/lib/screens/passo/Building/edit_building/structural_materials.dart +++ b/lib/screens/passo/Building/edit_building/structural_materials.dart @@ -56,356 +56,388 @@ class _StructuralMaterialsPageEdit extends State { // TODO: implement listener }, builder: (context, state) { if (state is StructuralMaterialsLoaded) { - return Expanded( - child: SingleChildScrollView( - padding: const EdgeInsets.all(30.0), + return SingleChildScrollView( + scrollDirection: Axis.vertical, child: Column( children: [ - Container( - margin: const EdgeInsets.only( - left: 0, top: 20, right: 0, bottom: 10), - child: const Text('STRUCTURAL MATERIALS', - style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18), - textAlign: TextAlign.left), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'FOUNDATION', - textAlign: TextAlign.start, - ), - Row( + Expanded( + child: Column( children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: foundationOthers, - onChanged: (bool? value) { - setState(() { - foundationOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: foundationOthers, - child: customTextField( - "Enter other foundation", "", "other_foundation"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - foundation = x; - }); - }, - options: const ['Reinforced Concrete', 'Plain Concrete'], - selectedValues: foundation, - whenEmpty: 'Select Foundations', - ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'COLUMNS', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: columOthers, - onChanged: (bool? value) { - setState(() { - columOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: columOthers, - child: customTextField( - "Enter other columns", "", "other_column"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - column = x; - }); - }, - options: const ['Steel', 'Reinforced Concrete', 'Wood'], - selectedValues: column, - whenEmpty: 'Select Column/s', - ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'BEAMS', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: beamsOthers, - onChanged: (bool? value) { - setState(() { - beamsOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: beamsOthers, - child: - customTextField("Enter other beam/s", "", "other_beam"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - beam = x; - }); - }, - options: const ['Steel', 'Reinforced Concrete', 'Wood'], - selectedValues: beam, - whenEmpty: 'Select Beam/s', - ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'TRUSS FRAMING', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: tfOthers, - onChanged: (bool? value) { - setState(() { - tfOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: tfOthers, - child: customTextField( - "Enter other truss framing/s", "", "other_tf"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - truss_framing = x; - }); - }, - options: const ['Steel', 'Wood'], - selectedValues: truss_framing, - whenEmpty: 'Select Truss Framing/s', - ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'ROOF', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: roofOthers, - onChanged: (bool? value) { - setState(() { - roofOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: roofOthers, - child: - customTextField("Enter other roof/s", "", "other_roof"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - roof = x; - }); - }, - options: const [ - 'Reinforced Concrete', - 'Tiles', - 'G.I Sheet', - 'Aluminum', - 'Asbestos', - 'Long Span', - 'Concrete Desk', - 'Nipa/Anahaw/Cogon' - ], - selectedValues: roof, - whenEmpty: 'Select Roof/s', - ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'FLOORING', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: flooringOthers, - onChanged: (bool? value) { - setState(() { - flooringOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: flooringOthers, - child: customTextField( - "Enter other flooring/s", "", "other_flooring"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - flooring = x; - }); - }, - options: const [ - 'Reinforced Concrete', - 'Plain Cement', - 'Marble', - 'Wood', - 'Tiles' - ], - selectedValues: flooring, - whenEmpty: 'Select Flooring/s', - ), - ), - ), - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'WALLS & PARTITIONS', - textAlign: TextAlign.start, - ), - Row( - children: [ - const Text('Others'), - Checkbox( - checkColor: Colors.white, - value: wpOthers, - onChanged: (bool? value) { - setState(() { - wpOthers = value!; - }); - }, - ) - ], - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), - child: Visibility( - visible: wpOthers, - child: customTextField( - "Enter other walls & partition/s", "", "other_wp"), - replacement: DropDownMultiSelect( - selected_values_style: TextStyle(color: Colors.black), - onChanged: (List x) { - setState(() { - walls = x; - }); - }, - options: const [ - 'Reinforced Concrete', - 'Plain Concrete', - 'Wood', - 'CHIB', - 'G.I Sheet', - 'Build-a-wall', - 'Sawali', - 'Bamboo' - ], - selectedValues: walls, - whenEmpty: 'Select Walls & Partition/s', - ), - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - CustomButton( - icon: const Icon(Icons.chevron_left_rounded, - color: Colors.white), - onPressed: () { - { - widget.PrevBtn(); - } - ; - }, - ), - CustomButton( - icon: const Icon(Icons.chevron_right_rounded, - color: Colors.white), - onPressed: () { - { - var strucMaterials = StructureMaterialsII( - id: widget.tempId, - foundation: foundation, - columns: column, - beams: beam, - trussFraming: truss_framing, - roof: roof, - flooring: flooring, - walls: walls, - others: ["Others"]); - context.read() - ..add(UpdateStrucMaterials(data: strucMaterials)); + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('STRUCTURAL MATERIALS', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 18), + textAlign: TextAlign.left), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'FOUNDATION', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: foundationOthers, + onChanged: (bool? value) { + setState(() { + foundationOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: foundationOthers, + child: customTextField( + "Enter other foundation", "", "other_foundation"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + foundation = x; + }); + }, + options: const [ + 'Reinforced Concrete', + 'Plain Concrete' + ], + selectedValues: foundation, + whenEmpty: 'Select Foundations', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'COLUMNS', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: columOthers, + onChanged: (bool? value) { + setState(() { + columOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: columOthers, + child: customTextField( + "Enter other columns", "", "other_column"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + column = x; + }); + }, + options: const [ + 'Steel', + 'Reinforced Concrete', + 'Wood' + ], + selectedValues: column, + whenEmpty: 'Select Column/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'BEAMS', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: beamsOthers, + onChanged: (bool? value) { + setState(() { + beamsOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: beamsOthers, + child: customTextField( + "Enter other beam/s", "", "other_beam"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + beam = x; + }); + }, + options: const [ + 'Steel', + 'Reinforced Concrete', + 'Wood' + ], + selectedValues: beam, + whenEmpty: 'Select Beam/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'TRUSS FRAMING', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: tfOthers, + onChanged: (bool? value) { + setState(() { + tfOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: tfOthers, + child: customTextField( + "Enter other truss framing/s", "", "other_tf"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + truss_framing = x; + }); + }, + options: const ['Steel', 'Wood'], + selectedValues: truss_framing, + whenEmpty: 'Select Truss Framing/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'ROOF', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: roofOthers, + onChanged: (bool? value) { + setState(() { + roofOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: roofOthers, + child: customTextField( + "Enter other roof/s", "", "other_roof"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + roof = x; + }); + }, + options: const [ + 'Reinforced Concrete', + 'Tiles', + 'G.I Sheet', + 'Aluminum', + 'Asbestos', + 'Long Span', + 'Concrete Desk', + 'Nipa/Anahaw/Cogon' + ], + selectedValues: roof, + whenEmpty: 'Select Roof/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'FLOORING', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: flooringOthers, + onChanged: (bool? value) { + setState(() { + flooringOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: flooringOthers, + child: customTextField( + "Enter other flooring/s", "", "other_flooring"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + flooring = x; + }); + }, + options: const [ + 'Reinforced Concrete', + 'Plain Cement', + 'Marble', + 'Wood', + 'Tiles' + ], + selectedValues: flooring, + whenEmpty: 'Select Flooring/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'WALLS & PARTITIONS', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: wpOthers, + onChanged: (bool? value) { + setState(() { + wpOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: wpOthers, + child: customTextField( + "Enter other walls & partition/s", "", "other_wp"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + walls = x; + }); + }, + options: const [ + 'Reinforced Concrete', + 'Plain Concrete', + 'Wood', + 'CHIB', + 'G.I Sheet', + 'Build-a-wall', + 'Sawali', + 'Bamboo' + ], + selectedValues: walls, + whenEmpty: 'Select Walls & Partition/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon(Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () { + { + var strucMaterials = StructureMaterialsII( + id: widget.tempId, + foundation: foundation, + columns: column, + beams: beam, + trussFraming: truss_framing, + roof: roof, + flooring: flooring, + walls: walls, + others: ["Others"]); + context.read() + ..add( + UpdateStrucMaterials(data: strucMaterials)); - widget.NextBtn(); - } - ; - }, - ) - ], - ) + widget.NextBtn(); + } + ; + }, + ) + ], + ) + ], + ), + ), ], ), - )); + ); } if (state is StructuralMaterialsErrorState) { return Text(state.error); diff --git a/lib/screens/passo/Building/edit_building/structural_materials_edit.dart b/lib/screens/passo/Building/edit_building/structural_materials_edit.dart new file mode 100644 index 0000000..57f9d3c --- /dev/null +++ b/lib/screens/passo/Building/edit_building/structural_materials_edit.dart @@ -0,0 +1,481 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_progress_hud/flutter_progress_hud.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:multiselect/multiselect.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart'; +import 'package:unit2/bloc/passo/bulding/structural_material/structural_material_bloc.dart'; +import 'package:unit2/model/passo/structural_materials_ii.dart'; +import 'package:unit2/screens/passo/Building/add_building.dart'; +import 'package:unit2/widgets/passo/custom_button.dart'; +import 'package:unit2/widgets/passo/custom_formBuilder_fields.dart'; + +class MaterialOption { + final String id; + final String label; + + MaterialOption(this.id, this.label); +} + +class StructuralMaterialsEditPage extends StatefulWidget { + final int tempId; + final VoidCallback NextBtn; + final VoidCallback PrevBtn; + + StructuralMaterialsEditPage(this.tempId, this.NextBtn, this.PrevBtn); + + @override + _StructuralMaterialsEditPage createState() => _StructuralMaterialsEditPage(); +} + +class _StructuralMaterialsEditPage extends State { + List foundation = []; + List column = []; + List beam = []; + List truss_framing = []; + List roof = []; + List flooring = []; + List walls = []; + bool foundationOthers = false; + bool columOthers = false; + bool beamsOthers = false; + bool tfOthers = false; + bool roofOthers = false; + bool flooringOthers = false; + bool wpOthers = false; + + List columnOptions = [ + MaterialOption('steel', 'Steel'), + MaterialOption('concrete', 'Reinforced Concrete'), + MaterialOption('wood', 'Wood'), + ]; + + List selectedColumnValues = []; + + @override + Widget build(BuildContext context) { + return Scaffold( + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + if (state is StructuralMaterialsLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + + if (state is StructuralMaterialsLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + setState(() { + foundation = state.structure.foundation!.split(','); + column = state.structure.columns!.split(','); + beam = state.structure.beams!.split(','); + truss_framing = state.structure.trussFraming!.split(','); + roof = state.structure.roof!.split(','); + flooring = state.structure.flooring!.split(','); + walls = state.structure.walls!.split(','); + // Update other local state variables here if needed + }); + } + if (state is StructuralMaterialsErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, builder: (context, state) { + return SingleChildScrollView( + padding: const EdgeInsets.all(30.0), + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('STRUCTURAL MATERIALS', + style: + TextStyle(fontWeight: FontWeight.bold, fontSize: 18), + textAlign: TextAlign.left), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'FOUNDATION', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: foundationOthers, + onChanged: (bool? value) { + setState(() { + foundationOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: foundationOthers, + child: customTextField( + "Enter other foundation", "", "other_foundation"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + foundation = x; + }); + }, + options: const ['Reinforced Concrete', 'Plain Concrete'], + selectedValues: foundation, + whenEmpty: 'Select Foundations', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'COLUMNS', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: columOthers, + onChanged: (bool? value) { + setState(() { + columOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: columOthers, + child: customTextField( + "Enter other columns", "", "other_column"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + column = x; + }); + }, + options: const ['Steel', 'Reinforced Concrete', 'Wood'], + selectedValues: column, + whenEmpty: 'Select Column/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'BEAMS', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: beamsOthers, + onChanged: (bool? value) { + setState(() { + beamsOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: beamsOthers, + child: + customTextField("Enter other beam/s", "", "other_beam"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + beam = x; + }); + }, + options: const ['Steel', 'Reinforced Concrete', 'Wood'], + selectedValues: beam, + whenEmpty: 'Select Beam/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'TRUSS FRAMING', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: tfOthers, + onChanged: (bool? value) { + setState(() { + tfOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: tfOthers, + child: customTextField( + "Enter other truss framing/s", "", "other_tf"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + truss_framing = x; + }); + }, + options: const ['Steel', 'Wood'], + selectedValues: truss_framing, + whenEmpty: 'Select Truss Framing/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'ROOF', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: roofOthers, + onChanged: (bool? value) { + setState(() { + roofOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: roofOthers, + child: + customTextField("Enter other roof/s", "", "other_roof"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + roof = x; + }); + }, + options: const [ + 'Reinforced Concrete', + 'Tiles', + 'G.I Sheet', + 'Aluminum', + 'Asbestos', + 'Long Span', + 'Concrete Desk', + 'Nipa/Anahaw/Cogon' + ], + selectedValues: roof, + whenEmpty: 'Select Roof/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'FLOORING', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: flooringOthers, + onChanged: (bool? value) { + setState(() { + flooringOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: flooringOthers, + child: customTextField( + "Enter other flooring/s", "", "other_flooring"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + flooring = x; + }); + }, + options: const [ + 'Reinforced Concrete', + 'Plain Cement', + 'Marble', + 'Wood', + 'Tiles' + ], + selectedValues: flooring, + whenEmpty: 'Select Flooring/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'WALLS & PARTITIONS', + textAlign: TextAlign.start, + ), + Row( + children: [ + const Text('Others'), + Checkbox( + checkColor: Colors.white, + value: wpOthers, + onChanged: (bool? value) { + setState(() { + wpOthers = value!; + }); + }, + ) + ], + ), + ]), + Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Visibility( + visible: wpOthers, + child: customTextField( + "Enter other walls & partition/s", "", "other_wp"), + replacement: DropDownMultiSelect( + selected_values_style: TextStyle(color: Colors.black), + onChanged: (List x) { + setState(() { + walls = x; + }); + }, + options: const [ + 'Reinforced Concrete', + 'Plain Concrete', + 'Wood', + 'CHIB', + 'G.I Sheet', + 'Build-a-wall', + 'Sawali', + 'Bamboo' + ], + selectedValues: walls, + whenEmpty: 'Select Walls & Partition/s', + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.NextBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon(Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () async { + { + final tempID = await SharedPreferences.getInstance(); + var strucMaterials = StructureMaterialsII( + id: tempID.getInt('tempid')! - 1, + foundation: foundationOthers + ? formKey + .currentState!.value['other_foundation'] + .split(',') + : foundation, + columns: columOthers + ? formKey.currentState!.value['other_column'] + .split(',') + : column, + beams: beamsOthers + ? formKey.currentState!.value['other_beam'] + .split(',') + : beam, + trussFraming: tfOthers + ? formKey.currentState!.value['other_tf'] + .split(',') + : truss_framing, + roof: roofOthers + ? formKey.currentState!.value['other_roof'] + .split(',') + : roof, + flooring: flooringOthers + ? formKey + .currentState!.value['other_flooring'] + .split(',') + : flooring, + walls: wpOthers + ? formKey.currentState!.value['other_wp'] + .split(',') + : walls, + others: ["Others"]); + context.read() + ..add(UpdateStrucMaterials(data: strucMaterials)); + + widget.PrevBtn(); + } + ; + }, + ) + ], + ) + ], + ), + ); + }), + ), + ); + } +} diff --git a/lib/screens/passo/Land/add_land/AddLandAppraisal.dart b/lib/screens/passo/Land/add_land/AddLandAppraisal.dart index 02e4e74..a271e40 100644 --- a/lib/screens/passo/Land/add_land/AddLandAppraisal.dart +++ b/lib/screens/passo/Land/add_land/AddLandAppraisal.dart @@ -107,7 +107,6 @@ class _AddLandAppraisalModal extends State { child: Padding( padding: const EdgeInsets.all(8.0), child: Container( - height: 800, child: SingleChildScrollView( padding: const EdgeInsets.all(8.0), child: Column( @@ -387,7 +386,7 @@ class _AddLandAppraisalModal extends State { ), ), ], - ) + ), ], ), ), diff --git a/lib/screens/passo/Land/add_land/land_appraisal.dart b/lib/screens/passo/Land/add_land/land_appraisal.dart index fa0ca77..e881636 100644 --- a/lib/screens/passo/Land/add_land/land_appraisal.dart +++ b/lib/screens/passo/Land/add_land/land_appraisal.dart @@ -5,6 +5,8 @@ import 'package:unit2/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart'; import 'package:unit2/model/passo/land_appr.dart'; import 'package:unit2/screens/passo/Land/add_land/AddLandAppraisal.dart'; import 'package:unit2/utils/alerts.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; import 'package:unit2/widgets/passo/custom_button.dart'; class LandAppraisal extends StatefulWidget { @@ -237,11 +239,21 @@ class _LandAppraisal extends State { content: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, - children: [Expanded(child: AddLandAppraisalModal())], + children: [ + Expanded(child: AddLandAppraisalModal()), + ], ), ), ); } + if (state is LandAppraisalErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add(LoadLandAppraisal()); + }, + ); + } return Container(); }); } diff --git a/lib/screens/passo/Land/add_land/location_and_boundaries.dart b/lib/screens/passo/Land/add_land/location_and_boundaries.dart index f27db38..e81d200 100644 --- a/lib/screens/passo/Land/add_land/location_and_boundaries.dart +++ b/lib/screens/passo/Land/add_land/location_and_boundaries.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:unit2/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart'; import 'package:unit2/model/passo/land_property_boundaries.dart'; import 'package:unit2/model/passo/land_property_loc.dart'; @@ -107,16 +108,18 @@ class _LandLocationAndBoundaries extends State { CustomButton( icon: const Icon(Icons.chevron_right, color: Colors.white), - onPressed: () { + onPressed: () async { + final tempID = await SharedPreferences.getInstance(); + print(tempID.getInt('landid')); var boundaries = LandPropertyBoundaries( - id: 3, + id: tempID.getInt('landid')! - 1, north: landKey.currentState?.value['north'], east: landKey.currentState?.value['east'], west: landKey.currentState?.value['west'], south: landKey.currentState?.value['south'], ); var location = LandPropertyLoc( - id: 3, + id: tempID.getInt('landid')! - 1, street: landKey.currentState?.value['street'], barangay: landKey.currentState?.value['brgy'], municipality: diff --git a/lib/screens/passo/Land/add_land/property_owner_info.dart b/lib/screens/passo/Land/add_land/property_owner_info.dart index ec1391f..f8fea59 100644 --- a/lib/screens/passo/Land/add_land/property_owner_info.dart +++ b/lib/screens/passo/Land/add_land/property_owner_info.dart @@ -76,7 +76,6 @@ class _LandPropertyOwnerInfo extends State { flex: 1, child: customTextField("Blk", "", "blk")), ]), - Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ @@ -117,45 +116,6 @@ class _LandPropertyOwnerInfo extends State { flex: 1, child: customTextField("Tel No.", "", "admin_telno")) ]), - - // SizedBox( - // width: double.infinity, - // height: 50, - // child: ElevatedButton( - // style: secondaryBtnStyle(const Color(0xffd92828), - // Color.fromARGB(0, 253, 252, 252), Colors.white54), - // child: const Text( - // "SUBMIT & PROCEED", - // style: TextStyle( - // color: Color.fromARGB(239, 255, 255, 255), - // fontWeight: FontWeight.w700), - // ), - // onPressed: () { - // // formKey.currentState?.save(); - // // // var faas = PropertyInfo( - // // // id: 1, - // // // transCode: formKey - // // // .currentState!.value['transaction_code'] - // // // .toString(), - // // // tdn: formKey.currentState!.value['arp_td'], - // // // pin: formKey.currentState!.value['pin'], - // // // owner: formKey.currentState!.value['owner'], - // // // address: formKey.currentState!.value['address'], - // // // telno: formKey.currentState!.value['tel_no'], - // // // tin: formKey.currentState!.value['tin'], - // // // adminUser: formKey.currentState!.value['benificiary'], - // // // adminAddress: formKey - // // // .currentState!.value['benificiary_address'], - // // // adminTin: - // // // formKey.currentState!.value['benificiary_tin'], - // // // adminTelno: - // // // formKey.currentState!.value['benificiary_telno']); - // // // context.read().add(AddFaas(faas: faas)); - // // // _loadTempId(); - // // _pageController.nextPage( - // // duration: _kDuration, curve: _kCurve); - // }), - // ), SizedBox( height: 30, ), diff --git a/lib/screens/passo/Land/edit_land.dart b/lib/screens/passo/Land/edit_land.dart new file mode 100644 index 0000000..2491dce --- /dev/null +++ b/lib/screens/passo/Land/edit_land.dart @@ -0,0 +1,117 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_form_builder/flutter_form_builder.dart'; + +import 'package:im_stepper/stepper.dart'; +import 'package:unit2/model/passo/land_property_owner.dart'; +import 'package:unit2/screens/passo/Land/edit_land/land_appraisal.dart'; +import 'package:unit2/screens/passo/Land/edit_land/location_and_boundaries_edit.dart'; +import 'package:unit2/screens/passo/Land/edit_land/other_improvements_edit.dart'; +import 'package:unit2/screens/passo/Land/edit_land/property_assessment_cont_edit.dart'; +import 'package:unit2/screens/passo/Land/edit_land/property_assessment_edit.dart'; +import 'package:unit2/screens/passo/Land/edit_land/property_owner_info_edit.dart'; +import 'package:unit2/screens/passo/Land/edit_land/value_adjustments_edit.dart'; +import 'package:unit2/theme-data.dart/colors.dart'; + +GlobalKey landKey = GlobalKey(); + +class EditLand extends StatefulWidget { + final int index; + final LandPropertyOwner faas; + final String title; + + const EditLand( + {super.key, + required this.title, + required this.index, + required this.faas}); + @override + _EditLand createState() => _EditLand(); +} + +class _EditLand extends State { + // THE FOLLOWING TWO VARIABLES ARE REQUIRED TO CONTROL THE STEPPER. + int activeStep = 0; // Initial step set to 5. + + int upperBound = 6; // upperBound MUST BE total number of icons minus 1. + + void PrevBtn() { + setState(() { + activeStep--; + }); + } + + void NextBtn() { + setState(() { + activeStep++; + }); + } + + void onSAveAll() { + return Navigator.of(context).pop(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + centerTitle: true, + backgroundColor: primary, + title: Text('Land FAAS'), + ), + body: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + NumberStepper( + numbers: [1, 2, 3, 4, 5, 6, 7], + activeStepColor: primary, + numberStyle: TextStyle(color: Colors.white), + lineColor: primary, + // activeStep property set to activeStep variable defined above. + activeStep: activeStep, + activeStepBorderColor: Colors.white, + activeStepBorderWidth: 1, + // This ensures step-tapping updates the activeStep. + onStepReached: (index) { + setState(() { + activeStep = index; + }); + }, + ), + Expanded( + child: Container( + child: content(PrevBtn, NextBtn, onSAveAll), + ), + ), + ], + ), + ), + ); + } + + /// Returns the next button. + + // Returns the content widget based on the activeStep. + Widget content(PrevBtn, NextBtn, onSAveAll) { + switch (activeStep) { + case 0: + return LandPropertyOwnerInfoEdit(NextBtn, widget.faas!); + case 1: + return LandLocationAndBoundariesEdit(PrevBtn, NextBtn, widget.faas!); + case 2: + return LandAppraisalEdit(PrevBtn, NextBtn, widget.faas.id!); + case 3: + return OtherImprovementEditPage(PrevBtn, NextBtn, widget.faas.id!); + case 4: + return ValueAdjustmentEditPage(PrevBtn, NextBtn, widget.faas.id!); + case 5: + return LandPropertyAssessmentEditPage( + PrevBtn, NextBtn, widget.faas.id!); + case 6: + return LandSignatoriesEdit(onSAveAll, widget.faas.id!); + + default: + return LandPropertyOwnerInfoEdit(NextBtn, widget.faas!); + } + } +} diff --git a/lib/screens/passo/Land/edit_land/AddLandAppraisalEdit.dart b/lib/screens/passo/Land/edit_land/AddLandAppraisalEdit.dart new file mode 100644 index 0000000..10da057 --- /dev/null +++ b/lib/screens/passo/Land/edit_land/AddLandAppraisalEdit.dart @@ -0,0 +1,464 @@ +import 'package:flutter/material.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'; +import 'package:form_builder_validators/form_builder_validators.dart'; +import 'package:intl/intl.dart'; +import 'package:searchfield/searchfield.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:unit2/bloc/passo/bulding/additional_item/additional_item_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_classification/land_classification_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_subclassification/land_subclassification_bloc.dart'; +import 'package:unit2/bloc/passo/municipality/municipality_bloc.dart'; +import 'package:unit2/model/passo/additional_items.dart'; +import 'package:unit2/model/passo/city.dart'; +import 'package:unit2/model/passo/class_components.dart'; +import 'package:unit2/model/passo/land_appr.dart'; +import 'package:unit2/model/passo/land_classification.dart'; +import 'package:unit2/model/passo/land_subclassification.dart'; +import 'package:unit2/model/passo/unit_construct.dart'; +import 'package:unit2/screens/passo/Land/add_land.dart'; +import 'package:unit2/theme-data.dart/form-style.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; +import 'package:unit2/widgets/passo/custom_formBuilder_fields.dart'; + +class AddLandAppraisalEditModal extends StatefulWidget { + // final List unit; + // final List options; + final int tempId; + + AddLandAppraisalEditModal(this.tempId); + + @override + _AddLandAppraisalEditModal createState() => _AddLandAppraisalEditModal(); +} + +class _AddLandAppraisalEditModal extends State { + final focus = FocusNode(); + bool isPainted = false; + bool isSecondHand = false; + TextEditingController textEditingController = TextEditingController(); + double _unitBase = 0; + int _areaValue = 0; + final double _depValue = 0; + double _unitValue = 0; + String _subClassDesc = ""; + int _classId = 0; + String _structureType = ""; + bool _withoutBUCC = false; + int _notPaintedUnitVal = 0; + int _secondHandUnitVal = 0; + String cityCode = ''; + String cityDesc = ''; + int classCode = 1; + String _classDesc = ''; + + GlobalKey appraisalLandKey = GlobalKey(); + + BoxDecoration box1() { + return const BoxDecoration(boxShadow: [ + BoxShadow(color: Colors.black12, spreadRadius: 5, blurRadius: 5) + ], color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(3))); + } + + double _amountofDepreciation(unitVal, unitBase, area, depreciation) { + return ((unitVal * unitBase) * area) * depreciation; + } + + double _totalMarketValue(unitBase, area) { + return unitBase * area; + } + + @override + Widget build(BuildContext context) { + return BlocConsumer( + listener: (context, state) { + if (state is LandAppraisalLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is LandAppraisalLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is LandAppraisalErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, buildWhen: (previous, current) { + return false; + }, builder: (context, state) { + if (state is ShowAddLandAppraisalScreen) { + return BlocConsumer( + listener: (context, state) { + // TODO: implement listener + }, + builder: (context, state) { + if (state is LandClassificationLoaded) { + final classification = state.land_classification; + return BlocConsumer( + listener: (context, state) { + // TODO: implement listener + }, + builder: (context, state) { + if (state is LandSubClassificationLoaded) { + final subclassification = state.land_subclassification; + return BlocConsumer( + listener: (context, state) { + // TODO: implement listener + }, + builder: (context, state) { + if (state is MunicipalityLoaded) { + return FormBuilder( + key: appraisalLandKey, + onChanged: () { + appraisalLandKey.currentState?.save(); + }, + autovalidateMode: AutovalidateMode.disabled, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Container( + child: SingleChildScrollView( + padding: const EdgeInsets.all(8.0), + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, + top: 10, + right: 0, + bottom: 0), + child: Expanded( + flex: 1, + child: + FormBuilderDropdown( + name: + 'appraisal_municipality', + autofocus: false, + decoration: + normalTextFieldStyle( + cityDesc ?? + "Municipality", + ""), + items: state.municipality + .map((municipality) => + DropdownMenuItem< + City>( + value: municipality, + child: Text(municipality + .cityDescription!), // Use cityDescription instead of cityName + )) + .toList(), + onChanged: (selectedCity) { + if (selectedCity != null) { + final selectedCityCode = + selectedCity.cityCode; + setState(() { + cityCode = + selectedCityCode!; + cityDesc = selectedCity + .cityDescription!; + }); + final barangayBloc = + context.read< + LandSubClassificationBloc>(); + barangayBloc.add( + LoadLandSubClassification( + classCode: + classCode!, + cityCode: + selectedCityCode!)); // Use selectedCityCode directly + } + }, + )), + ), + Container( + margin: const EdgeInsets.only( + left: 0, + top: 10, + right: 0, + bottom: 0), + child: Expanded( + flex: 1, + child: FormBuilderDropdown< + LandClassification>( + name: 'classification', + autofocus: false, + decoration: + normalTextFieldStyle( + _classDesc + .toString() ?? + "Classification", + ""), + items: classification + .map((classification) => + DropdownMenuItem< + LandClassification>( + value: + classification, + child: Text( + classification + .description!), // Use cityDescription instead of cityName + )) + .toList(), + onChanged: (selectedClass) { + if (selectedClass != null) { + final selectedClassCode = + selectedClass.id; + setState(() { + classCode = + selectedClassCode!; + _classDesc = + selectedClass + .description!; + }); + final barangayBloc = + context.read< + LandSubClassificationBloc>(); + barangayBloc.add( + LoadLandSubClassification( + classCode: + selectedClassCode!, + cityCode: + cityCode)); // Use selectedCityCode directly + } + }, + )), + ), + Container( + margin: const EdgeInsets.only( + left: 0, + top: 10, + right: 0, + bottom: 0), + child: SizedBox( + height: 45, + child: SearchField( + itemHeight: 70, + suggestions: subclassification + .map((LandSubClassification + subclass) => + SearchFieldListItem( + '${subclass.subclassCode} - ${subclass.subclassDescription}', + item: subclass, + child: ListTile( + title: Text( + '${subclass.subclassCode} - ${subclass.subclassDescription!.toUpperCase()}', + overflow: + TextOverflow + .ellipsis, + ), + ))) + .toList(), + + validator: FormBuilderValidators + .required( + errorText: + "This field is required"), + + searchInputDecoration: + normalTextFieldStyle( + "Structure Type", + "") + .copyWith( + suffixIcon: + const Icon(Icons + .arrow_drop_down)), + ////agency suggestion tap + focusNode: focus, + suggestionState: + Suggestion.expand, + onSuggestionTap: (subclass) { + setState(() { + _unitBase = double.parse( + subclass.item! + .baseUnitMarketval!); + _subClassDesc = + '${subclass.item!.subclassCode} - ${subclass.item!.subclassDescription}'; + }); + focus.unfocus(); + }, + ), + ), + ), + const SizedBox(height: 10), + FormBuilderTextField( + name: 'land_appraisal_area', + decoration: normalTextFieldStyle( + "Area", ""), + validator: + FormBuilderValidators.compose( + []), + onChanged: (value) { + setState(() { + _areaValue = int.parse(value!); + }); + }, + ), + const SizedBox(height: 10), + const Text('Market Value'), + const SizedBox(height: 5), + Container( + height: 45.0, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 1.0, + ), + borderRadius: + BorderRadius.circular(5.0), + ), + child: Align( + alignment: Alignment.center, + child: Text( + NumberFormat.currency( + locale: 'en-PH', + symbol: "₱") + .format( + _totalMarketValue( + _unitBase, + _areaValue)))), + ), + const SizedBox(height: 10), + Row( + children: [ + Container( + width: 120, + height: 60, + padding: + const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () async { + final tempID = + await SharedPreferences + .getInstance(); + print(tempID + .getInt('landid')); + var land_appraisal = LandAppr( + landapprDetailsId: + widget.tempId, + classification: + _classDesc, + subClass: _subClassDesc, + area: _areaValue + .toString(), + unitValue: _unitBase + .toString(), + baseMarketval: + _totalMarketValue( + _unitBase, + _areaValue) + .toString()); + + context + .read< + LandAppraisalBloc>() + .add(AddLandAppraisal( + land_appr: + land_appraisal)); + }, + style: + ElevatedButton.styleFrom( + primary: Colors.black, + ), + child: const Text("Submit"), + ), + ), + const SizedBox( + width: + 5), // Use SizedBox for horizontal spacing in a Row + Container( + width: 120, + height: 60, + padding: + const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () { + context + .read< + LandAppraisalBloc>() + .add( + LoadLandAppraisalEdit( + land_appr: < + LandAppr>[], + id: widget.tempId, + )); + }, + style: + ElevatedButton.styleFrom( + primary: Colors.black, + ), + child: const Text("Cancel"), + ), + ), + ], + ), + ], + ), + ), + ))); + } + if (state is MunicipalityErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(LoadMunicipality()); + }, + ); + } + return Container(); + }, + ); + } + if (state is LandSubClassificationErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add( + const LoadLandSubClassification( + cityCode: '1', classCode: 1)); + }, + ); + } + return Container(); + }, + ); + } + if (state is LandClassificationErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(LoadLandClassification()); + }, + ); + } + return Container(); + }, + ); + } + if (state is LandAppraisalErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add(LoadLandAppraisal()); + }, + ); + } + return Container(); + }); + } +} diff --git a/lib/screens/passo/Land/edit_land/AddOtherImprovementEditModal.dart b/lib/screens/passo/Land/edit_land/AddOtherImprovementEditModal.dart new file mode 100644 index 0000000..30df942 --- /dev/null +++ b/lib/screens/passo/Land/edit_land/AddOtherImprovementEditModal.dart @@ -0,0 +1,357 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_form_builder/flutter_form_builder.dart'; +import 'package:form_builder_validators/form_builder_validators.dart'; +import 'package:intl/intl.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:unit2/bloc/passo/land/land_trees_improvements/land_trees_improvements_bloc.dart'; +import 'package:unit2/bloc/passo/land/other_improvements/other_improvements_bloc.dart'; +import 'package:unit2/model/passo/other_improvements.dart'; +import 'package:unit2/model/passo/trees_improvements.dart'; +import 'package:unit2/theme-data.dart/form-style.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; + +class AddOtherImprovementEditModal extends StatefulWidget { + // final List unit; + // final List options; + final int tempId; + + AddOtherImprovementEditModal(this.tempId); + + @override + _AddOtherImprovementEditModal createState() => + _AddOtherImprovementEditModal(); +} + +class _AddOtherImprovementEditModal + extends State { + final focus = FocusNode(); + bool isPainted = false; + bool isSecondHand = false; + TextEditingController textEditingController = TextEditingController(); + double _unitBase = 0; + int _areaValue = 0; + final double _depValue = 0; + double _unitValue = 0; + String _subClassDesc = ""; + int _classId = 0; + String _structureType = ""; + int _notPaintedUnitVal = 0; + int _secondHandUnitVal = 0; + String cityCode = ''; + String cityDesc = ''; + int classCode = 1; + String _classDesc = ''; + String _treeType = ""; + bool _nonfruitBearing = false; + bool _fruitBearing = false; + int qty = 0; + int pr_qty = 0; + int nonpr_qty = 0; + + GlobalKey otherImpKey = GlobalKey(); + + final typeOfTree = [ + "Non-Fruit Bearing", + "Fruit Bearing", + ]; + + _calculateBaseMarketValue() { + double base = 0.00; + if (_fruitBearing) { + base = (pr_qty + nonpr_qty) * _unitValue; + } else { + base = qty * _unitValue; + } + return base; + } + + BoxDecoration box1() { + return const BoxDecoration(boxShadow: [ + BoxShadow(color: Colors.black12, spreadRadius: 5, blurRadius: 5) + ], color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(3))); + } + + double _amountofDepreciation(unitVal, unitBase, area, depreciation) { + return ((unitVal * unitBase) * area) * depreciation; + } + + double _totalMarketValue(unitBase, area) { + return unitBase * area; + } + + @override + Widget build(BuildContext context) { + return BlocBuilder( + buildWhen: (previous, current) { + return false; + }, builder: (context, state) { + if (state is ShowAddOtherImprovementScreen) { + return BlocConsumer(listener: (context, state) { + // TODO: implement listener + }, builder: (context, state) { + if (state is LandTreesImprovementsLoaded) { + final trees = state.trees_imp; + return FormBuilder( + key: otherImpKey, + onChanged: () { + otherImpKey.currentState?.save(); + }, + autovalidateMode: AutovalidateMode.disabled, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Container( + child: SingleChildScrollView( + padding: const EdgeInsets.all(8.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 10, right: 0, bottom: 0), + child: Expanded( + flex: 1, + child: FormBuilderDropdown( + name: 'kinds_of_trees', + autofocus: false, + decoration: normalTextFieldStyle( + "Kinds of Trees", ""), + items: state.trees_imp + .map((trees) => + DropdownMenuItem( + value: trees, + child: Text( + (trees.improvement ?? "") + + " " + + (trees.subclassCode ?? ""), + ), + )) + .toList(), + onChanged: (selectedTree) { + if (selectedTree != null) { + setState(() { + _unitValue = double.parse( + selectedTree.pricePerTree!); + _treeType = selectedTree.improvement!; + }); + } + }, + )), + ), + Container( + child: Row( + children: [ + Row( + children: [ + Checkbox( + value: _fruitBearing, + onChanged: (bool? value) { + setState(() { + _fruitBearing = value!; + }); + }, + ), + Text('Fruit Bearing ?'), + ], + ), + ], + ), + ), + Visibility( + visible: !_fruitBearing, + child: Row( + children: [ + Expanded( + child: FormBuilderTextField( + name: 'subClass', + decoration: normalTextFieldStyle( + "SubClass/Age", ""), + validator: + FormBuilderValidators.compose([]), + onChanged: (value) { + setState(() { + _subClassDesc = value!; + }); + }, + ), + ), + SizedBox( + width: 10, + ), + Expanded( + child: FormBuilderTextField( + name: 'qty', + decoration: normalTextFieldStyle("No.", ""), + validator: + FormBuilderValidators.compose([]), + onChanged: (value) { + setState(() { + qty = int.parse(value!); + }); + }, + ), + ), + ], + ), + replacement: Column( + children: [ + FormBuilderTextField( + name: 'no_of_productive', + decoration: normalTextFieldStyle( + "No. of Productive", ""), + validator: FormBuilderValidators.compose([]), + onChanged: (value) { + setState(() { + pr_qty = int.parse(value!); + }); + }, + ), + const SizedBox(height: 10), + FormBuilderTextField( + name: 'no_of_nonproductive', + decoration: normalTextFieldStyle( + "No. of Non-Productive", ""), + validator: FormBuilderValidators.compose([]), + onChanged: (value) { + setState(() { + nonpr_qty = int.parse(value!); + }); + }, + ), + ], + ), + ), + const SizedBox(height: 10), + const Text('Market Value'), + const SizedBox(height: 5), + Container( + height: 45.0, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 1.0, + ), + borderRadius: BorderRadius.circular(5.0), + ), + child: Align( + alignment: Alignment.center, + child: Text(NumberFormat.currency( + locale: 'en-PH', symbol: "₱") + .format(_unitValue))), + ), + const SizedBox(height: 10), + const Text('Base Market Value'), + const SizedBox(height: 5), + Container( + height: 45.0, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 1.0, + ), + borderRadius: BorderRadius.circular(5.0), + ), + child: Align( + alignment: Alignment.center, + child: Text(NumberFormat.currency( + locale: 'en-PH', + symbol: "₱", + ).format(_calculateBaseMarketValue().toString() == + "0.00" + ? "00.0" + : _calculateBaseMarketValue())), + ), + ), + const SizedBox(height: 10), + Row( + children: [ + Container( + width: 120, + height: 60, + padding: const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () async { + var improvement = OtherImprovements( + landapprDetailsId: widget.tempId, + kindsOfTrees: _treeType, + subclassAge: _subClassDesc, + quantity: qty, + unitValue: _unitValue.toString(), + baseMarketval: + _calculateBaseMarketValue() + .toString(), + noOfProductive: pr_qty, + noOfNonproductive: nonpr_qty, + fruitBearing: _fruitBearing); + + context.read().add( + AddOtherImprovement( + other_imp: improvement)); + }, + style: ElevatedButton.styleFrom( + primary: Colors.black, + ), + child: const Text("Submit"), + ), + ), + const SizedBox( + width: + 5), // Use SizedBox for horizontal spacing in a Row + Container( + width: 120, + height: 60, + padding: const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () { + context.read().add( + LoadOtherImprovementEdit( + other_imps: [], + ids: widget.tempId)); + }, + style: ElevatedButton.styleFrom( + primary: Colors.black, + ), + child: const Text("Cancel"), + ), + ), + ], + ) + ], + ), + ), + ), + )); + } + if (state is LandTreesImprovementsErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(LoadLandTreesImprovements()); + }, + ); + } + return Container(); + }); + } + if (state is OtherImprovementErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add(LoadOtherImprovement()); + }, + ); + } + return Container(); + }); + } +} diff --git a/lib/screens/passo/Land/edit_land/AddPropertyAssessmentEditModal.dart b/lib/screens/passo/Land/edit_land/AddPropertyAssessmentEditModal.dart new file mode 100644 index 0000000..b96977d --- /dev/null +++ b/lib/screens/passo/Land/edit_land/AddPropertyAssessmentEditModal.dart @@ -0,0 +1,356 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_form_builder/flutter_form_builder.dart'; +import 'package:intl/intl.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:unit2/bloc/passo/land/land_property_assessment/land_property_assessment_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_value_adjustments/land_value_adjustments_bloc.dart'; +import 'package:unit2/model/passo/land_property_assessment.dart'; +import 'package:unit2/model/passo/land_value_adjustment.dart'; +import 'package:unit2/theme-data.dart/form-style.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; + +class AddPropertyAssessmentEditModal extends StatefulWidget { + // final List unit; + // final List options; + final int tempId; + + AddPropertyAssessmentEditModal(this.tempId); + + @override + _AddPropertyAssessmentEditModal createState() => + _AddPropertyAssessmentEditModal(); +} + +class _AddPropertyAssessmentEditModal + extends State { + final focus = FocusNode(); + bool isPainted = false; + bool isSecondHand = false; + TextEditingController textEditingController = TextEditingController(); + double _unitBase = 0; + int _areaValue = 0; + final double _depValue = 0; + double _unitValue = 0; + String _subClassDesc = ""; + int _classId = 0; + String _structureType = ""; + int _notPaintedUnitVal = 0; + int _secondHandUnitVal = 0; + String cityCode = ''; + String cityDesc = ''; + int classCode = 1; + String _classDesc = ''; + String _treeType = ""; + bool _nonfruitBearing = false; + bool _fruitBearing = false; + int qty = 0; + int pr_qty = 0; + int nonpr_qty = 0; + String _actualUse = "Residential"; + String _assessmentLevel = ""; + + GlobalKey assessmentKey = GlobalKey(); + + final typeOfTree = [ + "Non-Fruit Bearing", + "Fruit Bearing", + ]; + + final actual_use = [ + "Residential", + "Agricultural", + "Commercial", + "Industrial", + "Mineral", + "Timberland", + ]; + + calculateAssessmentValue() { + switch (_actualUse) { + case "Residential": + return _unitValue * 0.20; + break; + case "Agricultural": + return _unitValue * 0.40; + break; + case "Commercial": + return _unitValue * 0.50; + break; + case "Industrial": + return _unitValue * 0.50; + break; + case "Mineral": + return _unitValue * 0.50; + break; + case "Timberland": + return _unitValue * 0.20; + break; + default: + } + } + + BoxDecoration box1() { + return const BoxDecoration(boxShadow: [ + BoxShadow(color: Colors.black12, spreadRadius: 5, blurRadius: 5) + ], color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(3))); + } + + double _amountofDepreciation(unitVal, unitBase, area, depreciation) { + return ((unitVal * unitBase) * area) * depreciation; + } + + double _totalMarketValue(unitBase, area) { + return unitBase * area; + } + + @override + Widget build(BuildContext context) { + return BlocBuilder( + buildWhen: (previous, current) { + return false; + }, builder: (context, state) { + if (state is ShowAddLandPropertyAssessmentScreen) { + return BlocConsumer(listener: (context, state) { + // TODO: implement listener + }, builder: (context, state) { + if (state is LandValueAdjustmentsLoaded) { + final assessment = state.val_adj; + return FormBuilder( + key: assessmentKey, + onChanged: () { + assessmentKey.currentState?.save(); + }, + autovalidateMode: AutovalidateMode.disabled, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Container( + child: SingleChildScrollView( + padding: const EdgeInsets.all(8.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 10, right: 0, bottom: 0), + child: Expanded( + flex: 1, + child: FormBuilderDropdown( + name: 'value_adjustments', + autofocus: false, + decoration: normalTextFieldStyle( + "Value Adjustments", ""), + items: state.val_adj + .map((adj) => + DropdownMenuItem( + value: adj, + child: Text( + (adj.adjustmentFactors ?? ""), + ), + )) + .toList(), + onChanged: (selectedAdj) { + if (selectedAdj != null) { + setState(() { + _unitValue = double.parse( + selectedAdj.marketValue!); + }); + } + }, + )), + ), + SizedBox( + height: 10, + ), + FormBuilderDropdown( + name: "land_actual_use", + autofocus: false, + decoration: normalTextFieldStyle("Actual Use", ""), + items: actual_use + .map((item) => DropdownMenuItem( + value: item, + child: Text(item), + )) + .toList(), + onChanged: (value) { + setState(() { + _actualUse = value!; + + switch (value) { + case "Residential": + setState(() { + _assessmentLevel = '20'; + }); + + break; + case "Agricultural": + setState(() { + _assessmentLevel = '40'; + }); + + break; + case "Commercial": + setState(() { + _assessmentLevel = '50'; + }); + + break; + case "Industrial": + setState(() { + _assessmentLevel = '50'; + }); + + break; + case "Mineral": + setState(() { + _assessmentLevel = '50'; + }); + + break; + case "Timberland": + setState(() { + _assessmentLevel = '20'; + }); + + break; + default: + } + }); + }, + ), + SizedBox( + height: 10, + ), + Text('Assessment Level'), + Container( + height: 45.0, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 1.0, + ), + borderRadius: BorderRadius.circular(5.0), + ), + child: Align( + alignment: Alignment.center, + child: Text(_assessmentLevel + '%'), + ), + ), + SizedBox( + height: 10, + ), + Text('Assessment Value'), + Container( + height: 45.0, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: Colors.grey, + width: 1.0, + ), + borderRadius: BorderRadius.circular(5.0), + ), + child: Align( + alignment: Alignment.center, + child: Text(NumberFormat.currency( + locale: 'en-PH', + symbol: "₱", + ).format(calculateAssessmentValue().toString() == + "0.00" + ? "00.0" + : calculateAssessmentValue())), + ), + ), + const SizedBox(height: 10), + Row( + children: [ + Container( + width: 120, + height: 60, + padding: const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () async { + var assessment = LandPropertyAssessment( + landapprDetailsId: widget.tempId, + actualUse: _actualUse, + marketval: _unitValue.toString(), + assessmentLevel: _assessmentLevel, + assessedValue: + calculateAssessmentValue() + .toString(), + totalMarketval: '0', + totalAssessedval: '0'); + + context + .read() + .add(AddLandPropertyAssessment( + assessment: assessment)); + }, + style: ElevatedButton.styleFrom( + primary: Colors.black, + ), + child: const Text("Submit"), + ), + ), + const SizedBox( + width: + 5), // Use SizedBox for horizontal spacing in a Row + Container( + width: 120, + height: 60, + padding: const EdgeInsets.all(8.0), + child: ElevatedButton( + onPressed: () { + context + .read() + .add( + const LoadLandPropertyAssessment()); + }, + style: ElevatedButton.styleFrom( + primary: Colors.black, + ), + child: const Text("Cancel"), + ), + ), + ], + ) + ], + ), + ), + ), + )); + } + if (state is LandValueAdjustmentsErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(LoadLandValueAdjustments()); + }, + ); + } + return Container(); + }); + } + if (state is LandPropertyAssessmentErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(LoadLandPropertyAssessment()); + }, + ); + } + return Container(); + }); + } +} diff --git a/lib/screens/passo/Land/edit_land/land_appraisal.dart b/lib/screens/passo/Land/edit_land/land_appraisal.dart new file mode 100644 index 0000000..7cb966e --- /dev/null +++ b/lib/screens/passo/Land/edit_land/land_appraisal.dart @@ -0,0 +1,294 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_progress_hud/flutter_progress_hud.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:intl/intl.dart'; +import 'package:unit2/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart'; +import 'package:unit2/model/passo/land_appr.dart'; +import 'package:unit2/screens/passo/Land/edit_land/AddLandAppraisalEdit.dart'; + +import 'package:unit2/utils/alerts.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; +import 'package:unit2/widgets/passo/custom_button.dart'; + +class LandAppraisalEdit extends StatefulWidget { + Function PrevBtn; + Function NextBtn; + final int faasId; + LandAppraisalEdit(this.PrevBtn, this.NextBtn, this.faasId); + @override + _LandAppraisalEdit createState() => _LandAppraisalEdit(); +} + +class _LandAppraisalEdit extends State { + // double _totalMarketValue(items) { + // double total = 0; + // items.forEach((row) { + // total += double.parse(row); + // }); + // return total; + // } + + void deleteItem(int itemId) { + context.read().add(DeleteLandAppraisal(id: itemId)); + } + + @override + Widget build(BuildContext context) { + return ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + if (state is LandAppraisalLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is LandAppraisalLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is LandAppraisalErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, builder: (context, state) { + final state = context.watch().state; + if (state is LandAppraisalLoaded) { + return Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('LAND APPRAISAL', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 18), + textAlign: TextAlign.left), + ), + Align( + alignment: Alignment.topRight, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Colors.red, + ), + onPressed: () { + context + .read() + .add(ShowLandAppraisal()); + }, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Text('ADD ITEM'), // <-- Text + const SizedBox( + width: 5, + ), + const Icon( + // <-- Icon + Icons.add, + size: 24.0, + ), + ], + ), + ), + ), + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: DataTable( + // ignore: prefer_const_literals_to_create_immutables + columns: [ + const DataColumn( + label: Text('Classification'), + ), + const DataColumn( + label: Text('Sub-Classification'), + ), + const DataColumn( + label: Text('Area'), + ), + const DataColumn( + label: Text('Unit Value'), + ), + const DataColumn( + label: Text('Base MArket Value'), + ), + const DataColumn( + label: Text('Action'), + ) + ], + rows: state.land_appr.map((dataRow) { + return DataRow( + cells: [ + DataCell(Text(dataRow.classification!)), + DataCell(Text(dataRow.subClass!)), + DataCell(Text(dataRow.area!)), + DataCell(Text( + ((double.parse(dataRow.unitValue!))) + .toString())), + DataCell(Text( + ((double.parse(dataRow.baseMarketval!))) + .toString())), + DataCell(Row( + children: [ + InkWell( + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: Icon( + Icons.delete, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () { + deleteItem(dataRow.id!); + }, + ), + SizedBox( + width: 10, + ), + InkWell( + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: Icon( + Icons.edit, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () {}, + ), + ], + )) + ], + ); + }).toList())) + ], + ), + ), + )), + // Padding( + // padding: const EdgeInsets.only(left: 20.0, right: 20.0), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // Text( + // 'Total', + // style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + // ), + // Text( + // NumberFormat.currency(locale: 'en-PH', symbol: "₱") + // .format('1.0'), + // style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + // ) + // ], + // ), + // ), + Padding( + padding: const EdgeInsets.all(15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon(Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () { + { + widget.NextBtn(); + } + ; + }, + ) + ], + ), + ), + ], + ); + } + if (state is LandAppraisalDeletedState) { + if (state.success) { + WidgetsBinding.instance.addPostFrameCallback((_) { + successAlert(context, "Deletion Successful", + "Extra item has been deleted successfully", () { + Navigator.of(context).pop(); + context.read().add(LoadLandAppraisalEdit( + land_appr: const [], id: widget.faasId!)); + }); + }); + } + } + if (state is ShowAddLandAppraisalScreen) { + return ConstrainedBox( + constraints: const BoxConstraints( + maxHeight: 700.0, + ), + child: AlertDialog( + insetPadding: const EdgeInsets.symmetric( + horizontal: 20.0, + vertical: 10.0, + ), + title: const Text( + 'ADD LAND APPRAISAL', + textAlign: TextAlign.center, + ), + content: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topCenter, + child: Container( + child: ConstrainedBox( + constraints: BoxConstraints(maxHeight: 500), + child: Container( + child: AddLandAppraisalEditModal(widget.faasId), + ), + ), + ), + ), + ], + ), + ), + ); + } + if (state is LandAppraisalErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add(LoadLandAppraisalEdit( + land_appr: [], id: widget.faasId!)); + }, + ); + } + return Container(); + }), + ); + } +} diff --git a/lib/screens/passo/Land/edit_land/location_and_boundaries_edit.dart b/lib/screens/passo/Land/edit_land/location_and_boundaries_edit.dart new file mode 100644 index 0000000..658720b --- /dev/null +++ b/lib/screens/passo/Land/edit_land/location_and_boundaries_edit.dart @@ -0,0 +1,270 @@ +import 'package:flutter/material.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'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:unit2/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_location_edit/land_location_edit_bloc.dart'; +import 'package:unit2/model/passo/land_property_boundaries.dart'; +import 'package:unit2/model/passo/land_property_loc.dart'; +import 'package:unit2/model/passo/land_property_owner.dart'; +import 'package:unit2/screens/passo/Land/edit_land/property_owner_info_edit.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; +import 'package:unit2/widgets/passo/custom_button.dart'; +import 'package:unit2/widgets/passo/custom_formBuilder_fields.dart'; + +class LandLocationAndBoundariesEdit extends StatefulWidget { + Function PrevBtn; + Function NextBtn; + LandPropertyOwner land; + LandLocationAndBoundariesEdit(this.PrevBtn, this.NextBtn, this.land); + @override + _LandLocationAndBoundariesEdit createState() => + _LandLocationAndBoundariesEdit(); +} + +class _LandLocationAndBoundariesEdit + extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + if (state is LandLocationEditLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + + if (state is LandLocationEditErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is LandLocationEditLoaded) { + final landLoc = state.land_loc_edit; + return BlocConsumer( + listener: (context, state) { + if (state is LandBoundariesEditLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is LandBoundariesEditErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is LandBoundariesEditLoaded) { + return FormBuilder( + key: landEditKey, + initialValue: { + 'street': landLoc.street, + 'brgy': landLoc.barangay, + 'municipality': landLoc.municipality, + 'province': landLoc.province, + 'north': state.land_boundaries_edit.north, + 'south': state.land_boundaries_edit.south, + 'east': state.land_boundaries_edit.east, + 'west': state.land_boundaries_edit.west + }, + enabled: true, + onChanged: () { + landEditKey.currentState!.save(); + debugPrint(landEditKey.currentState!.value.toString()); + }, + autovalidateMode: AutovalidateMode.disabled, + skipDisabled: true, + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('PROPERTY LOCATION', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), + ), + const SizedBox(height: 15), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "No. / Street", "", "street")), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "Brgy./District", "", "brgy")), + ], + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "Municipality", "", "municipality"), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "Province/City", "", "province")) + ]), + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('PROPERTY BOUNDARIES', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "North", "", "north"), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "East", "", "east")) + ]), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "South", "", "south"), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField( + "West", "", "west")) + ]), + const SizedBox( + height: 50, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left, + color: Colors.white), + onPressed: () { + widget.PrevBtn(); + }), + CustomButton( + icon: const Icon(Icons.chevron_right, + color: Colors.white), + onPressed: () { + print(widget.land.id); + var boundaries = + LandPropertyBoundaries( + id: widget.land.id, + north: landEditKey + .currentState?.value['north'], + east: landEditKey + .currentState?.value['east'], + west: landEditKey + .currentState?.value['west'], + south: landEditKey + .currentState?.value['south'], + ); + var location = LandPropertyLoc( + id: widget.land.id, + street: landEditKey + .currentState?.value['street'], + barangay: landEditKey + .currentState?.value['brgy'], + municipality: landEditKey + .currentState + ?.value['municipality'], + province: landEditKey.currentState + ?.value['province'], + ); + + context + .read() + .add(UpdateLandLocationEdit( + land_loc_edit: location, + id: widget.land.id!)); + + context + .read() + .add(UpdateLandBoundariesEdit( + land_boundaries_edit: + boundaries, + id: widget.land.id!)); + + widget.NextBtn(); + }) + ], + ) + ]), + ), + ), + ); + } + if (state is LandBoundariesEditErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add( + LoadLandBoundariesEdit( + land_boundaries_edit: LandPropertyBoundaries(), + id: widget.land.id!)); + }, + ); + } + return Container(); + }, + ); + } + ; + if (state is LandLocationEditErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add(LoadLandLocationEdit( + land_loc_edit: LandPropertyLoc(), id: widget.land.id!)); + }, + ); + } + return Container(); + }, + ), + ), + ); + } +} diff --git a/lib/screens/passo/Land/edit_land/other_improvements_edit.dart b/lib/screens/passo/Land/edit_land/other_improvements_edit.dart new file mode 100644 index 0000000..13cf33c --- /dev/null +++ b/lib/screens/passo/Land/edit_land/other_improvements_edit.dart @@ -0,0 +1,313 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_progress_hud/flutter_progress_hud.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:unit2/bloc/passo/land/other_improvements/other_improvements_bloc.dart'; +import 'package:unit2/model/passo/other_improvements.dart'; +import 'package:unit2/screens/passo/Land/add_land/AddOtherImprovementModal.dart'; +import 'package:unit2/screens/passo/Land/edit_land/AddOtherImprovementEditModal.dart'; +import 'package:unit2/utils/alerts.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; +import 'package:unit2/widgets/passo/custom_button.dart'; + +class OtherImprovementEditPage extends StatefulWidget { + Function PrevBtn; + Function NextBtn; + final int faasId; + OtherImprovementEditPage(this.PrevBtn, this.NextBtn, this.faasId); + @override + _OtherImprovementEditPage createState() => _OtherImprovementEditPage(); +} + +class _OtherImprovementEditPage extends State { + // double _totalMarketValue(items) { + // double total = 0; + // items.forEach((row) { + // total += double.parse(row); + // }); + // return total; + // } + + void deleteItem(int itemId) { + context + .read() + .add(DeleteOtherImprovement(id: itemId)); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + if (state is OtherImprovementLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is OtherImprovementLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is OtherImprovementErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, builder: (context, state) { + final state = context.watch().state; + if (state is OtherImprovementLoaded) { + return Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('OTHER IMPROVEMENTS', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 18), + textAlign: TextAlign.left), + ), + Align( + alignment: Alignment.topRight, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Colors.red, + ), + onPressed: () { + context + .read() + .add(ShowOtherImprovement()); + }, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Text('ADD ITEM'), // <-- Text + const SizedBox( + width: 5, + ), + const Icon( + // <-- Icon + Icons.add, + size: 24.0, + ), + ], + ), + ), + ), + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: DataTable( + // ignore: prefer_const_literals_to_create_immutables + columns: [ + const DataColumn( + label: Text('Kinds of Tress'), + ), + const DataColumn( + label: Text('Sub-Class / Age'), + ), + const DataColumn( + label: Text('Type of Tree'), + ), + const DataColumn( + label: Text('No.'), + ), + const DataColumn( + label: Text('No. of Productive'), + ), + const DataColumn( + label: Text('No. of Non-Productive'), + ), + const DataColumn( + label: Text('Unit Value'), + ), + const DataColumn( + label: Text('Base Market Value'), + ), + const DataColumn( + label: Text('Action'), + ) + ], + rows: state.other_imp.map((dataRow) { + return DataRow( + cells: [ + DataCell(Text(dataRow.kindsOfTrees!)), + DataCell(Text(dataRow.subclassAge!)), + DataCell(Text(dataRow.fruitBearing! + ? "Fruit Bearing" + : "Non-Fruit Bearing")), + DataCell( + Text(dataRow.quantity.toString()!)), + DataCell(Text( + dataRow.noOfProductive.toString()!)), + DataCell(Text(dataRow.noOfNonproductive + .toString()!)), + DataCell( + Text(dataRow.unitValue.toString()!)), + DataCell(Text( + dataRow.baseMarketval.toString()!)), + DataCell(Row( + children: [ + InkWell( + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: Icon( + Icons.delete, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () { + deleteItem(dataRow.id!); + }, + ), + SizedBox( + width: 10, + ), + InkWell( + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: Icon( + Icons.edit, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () {}, + ), + ], + )) + ], + ); + }).toList())) + ], + ), + ), + )), + // Padding( + // padding: const EdgeInsets.only(left: 20.0, right: 20.0), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // Text( + // 'Total', + // style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + // ), + // Text( + // NumberFormat.currency(locale: 'en-PH', symbol: "₱") + // .format('1.0'), + // style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + // ) + // ], + // ), + // ), + Padding( + padding: const EdgeInsets.all(15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon(Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () { + { + widget.NextBtn(); + } + ; + }, + ) + ], + ), + ), + ], + ); + } + if (state is OtherImprovementDeletedState) { + if (state.success) { + WidgetsBinding.instance.addPostFrameCallback((_) { + successAlert(context, "Deletion Successful", + "Extra item has been deleted successfully", () { + Navigator.of(context).pop(); + context + .read() + .add(const LoadOtherImprovement()); + }); + }); + } + } + if (state is ShowAddOtherImprovementScreen) { + return ConstrainedBox( + constraints: BoxConstraints(maxHeight: 1000.0), + child: AlertDialog( + insetPadding: EdgeInsets.symmetric( + horizontal: 20.0, + vertical: 10.0, + ), + title: Text( + 'ADD OTHER IMPROVEMENTS', + textAlign: TextAlign.center, + ), + content: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topCenter, + child: Container( + child: ConstrainedBox( + constraints: BoxConstraints(maxHeight: 500), + child: Container( + child: AddOtherImprovementEditModal(widget.faasId), + ), + ), + ), + ), + ], + ), + ), + ); + } + if (state is OtherImprovementErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add( + LoadOtherImprovementEdit( + other_imps: const [], + ids: widget.faasId)); + }, + ); + } + return Container(); + }), + ), + ); + } +} diff --git a/lib/screens/passo/Land/edit_land/property_assessment_cont_edit.dart b/lib/screens/passo/Land/edit_land/property_assessment_cont_edit.dart new file mode 100644 index 0000000..4d43bb5 --- /dev/null +++ b/lib/screens/passo/Land/edit_land/property_assessment_cont_edit.dart @@ -0,0 +1,660 @@ +import 'package:flutter/material.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'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:form_builder_validators/form_builder_validators.dart'; +import 'package:searchfield/searchfield.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:unit2/bloc/passo/land/land_ext_bloc/land_ext_edit_bloc.dart'; +import 'package:unit2/bloc/passo/memoranda/memoranda_bloc.dart'; +import 'package:unit2/bloc/passo/signatories/signatories_bloc.dart'; +import 'package:unit2/model/passo/land_ext.dart'; +import 'package:unit2/model/passo/memoranda.dart'; +import 'package:unit2/model/passo/signatories.dart'; +import 'package:unit2/screens/passo/Land/edit_land/property_owner_info_edit.dart'; +import 'package:unit2/theme-data.dart/colors.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; + +class LandSignatoriesEdit extends StatefulWidget { + Function onSAve; + final int faasId; + LandSignatoriesEdit(this.onSAve, this.faasId); + + @override + _LandSignatoriesEdit createState() => _LandSignatoriesEdit(); +} + +class _LandSignatoriesEdit extends State { + bool isTaxable = false; + bool isExempt = false; + final focus = FocusNode(); + String _memoranda = ""; + @override + Widget build(BuildContext context) { + return Scaffold( + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer( + listener: (context, state) { + if (state is LandExtEditLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + + if (state is LandExtEditErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is LandExtEditLoaded) { + final landext = state.land_ext_edit; + return BlocConsumer( + listener: (context, state) { + if (state is SignatoriesErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is SignatoriesLoaded) { + final signatories = state.signatories; + return BlocConsumer( + listener: (context, state) { + if (state is MemorandaLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is MemorandaErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, + builder: (context, state) { + if (state is MemorandaLoaded) { + return FormBuilder( + key: landEditKey, + initialValue: { + 'land_qtr': landext.qtr.toString(), + 'land_yr': landext.yr.toString(), + 'app_date_land': landext.appraisedbyDate, + 'rec_date_land': landext.recommendapprDate, + 'apprvd_by_date_land': landext.approvedbyDate, + 'sworn_statement_land': landext.swornstatementNo, + 'date_received_land': landext.dateReceived, + 'date_of_entry_land': landext.entryDateAssessment, + 'by_land': landext.entryDateBy + }, + enabled: true, + onChanged: () { + landEditKey.currentState!.save(); + debugPrint( + landEditKey.currentState!.value.toString()); + }, + autovalidateMode: AutovalidateMode.disabled, + skipDisabled: true, + child: SingleChildScrollView( + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text( + 'PROPERTY ASSESSMENT cont..', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Row( + children: [ + const Text('Taxable'), + Checkbox( + checkColor: Colors.white, + value: isTaxable, + onChanged: (bool? value) { + setState(() { + isTaxable = value!; + }); + }, + ) + ], + ), + Row( + children: [ + const Text('Exempt'), + Checkbox( + checkColor: Colors.white, + value: isExempt, + onChanged: (bool? value) { + setState(() { + isExempt = value!; + }); + }, + ) + ], + ), + ], + ), + Column( + children: [ + const SizedBox( + height: 20, + ), + const Text( + 'EFFECTIVITY OF ASSESSMENT / REASSESSMENT :', + style: TextStyle( + fontWeight: FontWeight.bold), + ), + const SizedBox( + height: 20, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + const Text('Qtr.'), + SizedBox( + width: 70, + height: 25, + child: FormBuilderTextField( + name: 'land_qtr', + validator: + FormBuilderValidators.compose( + []), + ), + ), + const SizedBox( + width: 20, + ), + const Text('Yr.'), + SizedBox( + width: 70, + height: 25, + child: FormBuilderTextField( + name: 'land_yr', + validator: + FormBuilderValidators.compose( + []), + ), + ), + ], + ), + ], + ), + Container( + margin: const EdgeInsets.only( + left: 0, top: 40, right: 0, bottom: 10), + child: const Text('SIGNATORIES', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18), + textAlign: TextAlign.left), + ), + const SizedBox( + height: 30, + ), + const Align( + alignment: Alignment.centerLeft, + child: Text( + 'APPRAISED/ASSESSED BY:', + style: + TextStyle(fontWeight: FontWeight.bold), + textAlign: TextAlign.start, + ), + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Column( + children: [ + SizedBox( + width: 200, + child: + FormBuilderDropdown( + name: 'appraised_by_land', + decoration: InputDecoration( + labelText: landext + .appraisedbyName!, + labelStyle: const TextStyle( + color: Colors.black), + ), + autofocus: false, + items: signatories + .map((signatories) => + DropdownMenuItem( + value: signatories, + child: Text( + '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), + )) + .toList()), + ), + const Text('Name'), + ], + ), + const SizedBox( + width: 15, + ), + Column( + children: [ + SizedBox( + width: 100, + child: FormBuilderDateTimePicker( + name: 'app_date_land', + initialEntryMode: + DatePickerEntryMode + .calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, + + initialTime: const TimeOfDay( + hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + const Text('Date'), + ], + ), + ], + ), + const SizedBox( + height: 30, + ), + const Align( + alignment: Alignment.centerLeft, + child: Text( + 'RECOMMENDING APPROVAL:', + style: TextStyle( + fontWeight: FontWeight.bold), + )), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Column( + children: [ + SizedBox( + width: 200, + child: + FormBuilderDropdown( + name: 'rec_approval_land', + decoration: InputDecoration( + labelText: landext + .recommendapprName!, + labelStyle: const TextStyle( + color: Colors.black), + ), + autofocus: false, + items: signatories + .map((signatories) => + DropdownMenuItem( + value: signatories, + child: Text( + '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), + )) + .toList()), + ), + const Text('Name'), + ], + ), + const SizedBox( + width: 15, + ), + Column( + children: [ + SizedBox( + width: 100, + child: FormBuilderDateTimePicker( + name: 'rec_date_land', + initialEntryMode: + DatePickerEntryMode + .calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, + + initialTime: const TimeOfDay( + hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + const Text('Date'), + ], + ), + ], + ), + const SizedBox( + height: 30, + ), + const Align( + alignment: Alignment.centerLeft, + child: Text( + 'APPROVED BY:', + style: TextStyle( + fontWeight: FontWeight.bold, + ), + )), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Column( + children: [ + SizedBox( + width: 200, + child: + FormBuilderDropdown( + name: 'apprvd_by_land', + decoration: InputDecoration( + labelText: + landext.approvedbyName!, + labelStyle: const TextStyle( + color: Colors.black), + ), + autofocus: false, + items: signatories + .map((signatories) => + DropdownMenuItem( + value: signatories, + child: Text( + '${signatories.firstname} ${signatories.middlename} ${signatories.lastname}'), + )) + .toList()), + ), + const Text('Name'), + ], + ), + const SizedBox( + width: 15, + ), + Column( + children: [ + SizedBox( + width: 100, + child: FormBuilderDateTimePicker( + name: 'apprvd_by_date_land', + initialEntryMode: + DatePickerEntryMode + .calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, + + initialTime: const TimeOfDay( + hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + Text('Date'), + ], + ), + ], + ), + const SizedBox( + height: 50, + ), + const Align( + alignment: Alignment.centerLeft, + child: Text( + 'MEMORANDA: ', + style: TextStyle( + fontWeight: FontWeight.bold, + ), + )), + const SizedBox( + height: 50, + ), + SizedBox( + width: 500, + height: 100, + child: SearchField( + suggestions: state.memorada + .map((Memoranda memoranda) => + SearchFieldListItem( + '${memoranda.memoranda}', + item: + memoranda, // Change: Use individual Memoranda object + child: ListTile( + title: Text( + '${memoranda.memoranda}', + overflow: + TextOverflow.ellipsis, + ), + ), + )) + .toList(), + validator: FormBuilderValidators.required( + errorText: "This field is required"), + // searchInputDecoration: + // normalTextFieldStyle( + // "Memoranda", "") + // .copyWith( + // suffixIcon: const Icon( + // Icons.arrow_drop_down), + // ), + // focusNode: focus, + suggestionState: Suggestion.expand, + onSuggestionTap: (memoranda) { + setState(() { + _memoranda = + memoranda.item!.memoranda!; + }); + focus.unfocus(); + }, + )), + const SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text('Sworn Statement No. :'), + SizedBox( + width: 150, + height: 20, + child: FormBuilderTextField( + name: 'sworn_statement_land', + decoration: InputDecoration(), + validator: + FormBuilderValidators.compose([]), + ), + ), + ], + ), + const SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text('Date Received:'), + SizedBox( + width: 150, + height: 20, + child: FormBuilderDateTimePicker( + name: 'date_received_land', + initialEntryMode: + DatePickerEntryMode.calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, + + initialTime: + const TimeOfDay(hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + ], + ), + const SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + const Text( + 'Date of Entry in the Rec. of Ass. :'), + SizedBox( + width: 100, + height: 20, + child: FormBuilderDateTimePicker( + name: 'date_of_entry_land', + initialEntryMode: + DatePickerEntryMode.calendarOnly, + initialValue: DateTime.now(), + inputType: InputType.date, + + initialTime: + const TimeOfDay(hour: 8, minute: 0), + // locale: const Locale.fromSubtags(languageCode: 'fr'), + ), + ), + ], + ), + const SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + const Text('By:'), + SizedBox( + width: 150, + height: 20, + child: FormBuilderTextField( + name: 'by_land', + decoration: const InputDecoration(), + validator: + FormBuilderValidators.compose([]), + ), + ), + ], + ), + const SizedBox( + height: 30, + ), + ElevatedButton( + onPressed: () async { + final tempID = + await SharedPreferences.getInstance(); + var ext = LandExt( + landapprDetailsId: + tempID.getInt('landid')! - 1, + taxable: isTaxable, + exempt: isExempt, + qtr: int.parse(landEditKey + .currentState!.value['land_qtr']), + yr: int.parse(landEditKey + .currentState!.value['land_yr']), + appraisedbyName: landEditKey.currentState!.value['appraised_by_land'].firstname + + ' ' + + landEditKey + .currentState! + .value['appraised_by_land'] + .middlename + + ' ' + + landEditKey + .currentState! + .value['appraised_by_land'] + .lastname, + appraisedbyDate: landEditKey + .currentState! + .value['app_date_land'], + recommendapprName: landEditKey.currentState!.value['rec_approval_land'].firstname + + ' ' + + landEditKey.currentState!.value['rec_approval_land'].middlename + + ' ' + + landEditKey.currentState!.value['rec_approval_land'].lastname, + recommendapprDate: landEditKey.currentState!.value['rec_date_land'], + approvedbyName: landEditKey.currentState!.value['apprvd_by_land'].firstname + ' ' + landEditKey.currentState!.value['apprvd_by_land'].middlename + ' ' + landEditKey.currentState!.value['apprvd_by_land'].lastname, + approvedbyDate: landEditKey.currentState!.value['apprvd_by_date_land'], + memoranda: _memoranda, + swornstatementNo: landEditKey.currentState!.value['sworn_statement_land'], + dateReceived: landEditKey.currentState!.value['date_received_land'], + entryDateAssessment: landEditKey.currentState!.value['date_of_entry_land'], + entryDateBy: landEditKey.currentState!.value['by_land']); + + context.read().add( + UpdateLandExtEdit( + land_ext_edit: ext, + id: widget.faasId)); + widget.onSAve(); + }, + style: ElevatedButton.styleFrom( + backgroundColor: primary, + foregroundColor: Colors.red), + child: const SizedBox( + width: 250, + height: 50, + child: Align( + alignment: Alignment.center, + child: Text( + 'Save', + style: TextStyle( + color: Colors.white, + ), + textAlign: TextAlign.center, + ), + ), + ), + ), + const SizedBox( + height: 30, + ), + ], + )), + ); + } + if (state is MemorandaErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(const LoadMemoranda()); + }, + ); + } + return Container(); + }, + ); + } + if (state is SignatoriesErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context + .read() + .add(const LoadSignatories()); + }, + ); + } + return Container(); + }, + ); + } + if (state is LandExtEditErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add(LoadLandExtEdit( + land_ext_edit: LandExt(), id: widget.faasId)); + }, + ); + } + return Container(); + }, + ), + ), + ); + } +} diff --git a/lib/screens/passo/Land/edit_land/property_assessment_edit.dart b/lib/screens/passo/Land/edit_land/property_assessment_edit.dart new file mode 100644 index 0000000..097dabe --- /dev/null +++ b/lib/screens/passo/Land/edit_land/property_assessment_edit.dart @@ -0,0 +1,287 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_progress_hud/flutter_progress_hud.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:unit2/bloc/passo/bulding/property_assessment_edit/property_assessment_edit_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_property_assessment/land_property_assessment_bloc.dart'; +import 'package:unit2/model/passo/land_property_assessment.dart'; +import 'package:unit2/screens/passo/Land/add_land/AddPropertyAssessmentModal.dart'; +import 'package:unit2/screens/passo/Land/edit_land/AddPropertyAssessmentEditModal.dart'; +import 'package:unit2/utils/alerts.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; +import 'package:unit2/widgets/passo/custom_button.dart'; + +class LandPropertyAssessmentEditPage extends StatefulWidget { + Function PrevBtn; + Function NextBtn; + final int faasId; + LandPropertyAssessmentEditPage(this.PrevBtn, this.NextBtn, this.faasId); + @override + _LandPropertyAssessmentEditPage createState() => + _LandPropertyAssessmentEditPage(); +} + +class _LandPropertyAssessmentEditPage + extends State { + // double _totalMarketValue(items) { + // double total = 0; + // items.forEach((row) { + // total += double.parse(row); + // }); + // return total; + // } + + void deleteItem(int itemId) { + context + .read() + .add(DeleteLandPropertyAssessment(id: itemId)); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: BlocConsumer(listener: (context, state) { + if (state is LandPropertyAssessmentLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is LandPropertyAssessmentLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is LandPropertyAssessmentErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, builder: (context, state) { + final state = context.watch().state; + if (state is LandPropertyAssessmentLoaded) { + return Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('PROPERTY ASSESSMENT', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 18), + textAlign: TextAlign.left), + ), + Align( + alignment: Alignment.topRight, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Colors.red, + ), + onPressed: () { + context + .read() + .add(ShowLandPropertyAssessment()); + }, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Text('ADD ITEM'), // <-- Text + const SizedBox( + width: 5, + ), + const Icon( + // <-- Icon + Icons.add, + size: 24.0, + ), + ], + ), + ), + ), + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: DataTable( + // ignore: prefer_const_literals_to_create_immutables + columns: [ + const DataColumn( + label: Text('Actual Use'), + ), + const DataColumn( + label: Text('Market Value'), + ), + const DataColumn( + label: Text('Assessment Level'), + ), + const DataColumn( + label: Text('Assessed Value'), + ), + const DataColumn( + label: Text('Action'), + ) + ], + rows: state.assessment.map((dataRow) { + return DataRow( + cells: [ + DataCell(Text(dataRow.actualUse!)), + DataCell(Text(dataRow.marketval!)), + DataCell( + Text(dataRow.assessmentLevel! + '%')), + DataCell(Text(dataRow.assessedValue!)), + DataCell(Row( + children: [ + InkWell( + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: Icon( + Icons.delete, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () { + deleteItem(dataRow.id!); + }, + ), + SizedBox( + width: 10, + ), + InkWell( + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: Icon( + Icons.edit, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () {}, + ), + ], + )) + ], + ); + }).toList())) + ], + ), + ), + )), + // Padding( + // padding: const EdgeInsets.only(left: 20.0, right: 20.0), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // Text( + // 'Total', + // style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + // ), + // Text( + // NumberFormat.currency(locale: 'en-PH', symbol: "₱") + // .format('1.0'), + // style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + // ) + // ], + // ), + // ), + Padding( + padding: const EdgeInsets.all(15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon(Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () { + { + widget.NextBtn(); + } + ; + }, + ) + ], + ), + ), + ], + ); + } + if (state is LandPropertyAssessmentDeletedState) { + if (state.success) { + WidgetsBinding.instance.addPostFrameCallback((_) { + successAlert(context, "Deletion Successful", + "Extra item has been deleted successfully", () { + Navigator.of(context).pop(); + context.read().add( + LoadLandPropertyAssessmentEdit( + assessment: [], + id: widget.faasId)); + }); + }); + } + } + if (state is ShowAddLandPropertyAssessmentScreen) { + return ConstrainedBox( + constraints: BoxConstraints(maxHeight: 1000.0), + child: AlertDialog( + insetPadding: EdgeInsets.symmetric( + horizontal: 20.0, + vertical: 10.0, + ), + title: Text( + 'ADD PROPERTY ASSESSMENT', + textAlign: TextAlign.center, + ), + content: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + child: AddPropertyAssessmentEditModal(widget.faasId)) + ], + ), + ), + ); + } + if (state is LandPropertyAssessmentErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add( + LoadLandPropertyAssessmentEdit( + assessment: const [], + id: widget.faasId)); + }, + ); + } + + return Container(); + }), + ), + ); + } +} diff --git a/lib/screens/passo/Land/edit_land/property_owner_info_edit.dart b/lib/screens/passo/Land/edit_land/property_owner_info_edit.dart new file mode 100644 index 0000000..73fddbf --- /dev/null +++ b/lib/screens/passo/Land/edit_land/property_owner_info_edit.dart @@ -0,0 +1,223 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_form_builder/flutter_form_builder.dart'; +import 'package:unit2/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart'; +import 'package:unit2/model/passo/land_property_owner.dart'; +import 'package:unit2/screens/passo/Land/add_land.dart'; +import 'package:unit2/widgets/passo/custom_button.dart'; +import 'package:unit2/widgets/passo/custom_formBuilder_fields.dart'; + +GlobalKey landEditKey = GlobalKey(); + +class LandPropertyOwnerInfoEdit extends StatefulWidget { + Function NextBtn; + LandPropertyOwner land; + LandPropertyOwnerInfoEdit(this.NextBtn, this.land); + @override + _LandPropertyOwnerInfoEdit createState() => _LandPropertyOwnerInfoEdit(); +} + +class _LandPropertyOwnerInfoEdit extends State { + final transaction_codes = ['New', 'Revision']; + @override + Widget build(BuildContext context) { + return BlocConsumer( + listener: (context, state) { + // TODO: implement listener + }, + builder: (context, state) { + return FormBuilder( + key: landEditKey, + initialValue: { + 'transaction_code': widget.land.transCode ?? '', + 'td_no': widget.land.tdn ?? '', + 'owner': widget.land.owner ?? '', + 'pin': widget.land.pin ?? '', + 'tin': widget.land.tin ?? '', + 'cloa_no': widget.land.cloaNo ?? '', + 'dated': widget.land.dated ?? '', + 'survey_no': widget.land.surveyNo ?? '', + 'lot_no': widget.land.lotNo ?? '', + 'blk': widget.land.blkNo ?? '', + 'address': widget.land.address ?? '', + 'tel_no': widget.land.telno ?? '', + 'admin': widget.land.adminUser ?? '', + 'admin_tin': widget.land.adminTin ?? '', + 'admin_address': widget.land.adminAddress ?? '', + 'admin_telno': widget.land.adminTelno ?? '', + }, + enabled: true, + onChanged: () { + landEditKey.currentState!.save(); + debugPrint(landEditKey.currentState!.value.toString()); + }, + autovalidateMode: AutovalidateMode.disabled, + skipDisabled: true, + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('PROPERTY OWNER INFO', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 18), + textAlign: TextAlign.left), + ), + const SizedBox(height: 15), + customDropDownField("Transaction Code", "", + "transaction_code", transaction_codes), + customTextField("ARP No./ TD No.", "", "td_no"), + customTextField("Owner", "", "owner"), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, child: customTextField("PIN", "", "pin")), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField("TIN", "", "tin")) + ]), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "OCT/TCT CLOA No.", "", "cloa_no"), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customDatTimePicker("Dated", "", "dated")) + ]), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField("Survey No.", "", "survey_no"), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField("Lot No.", "", "lot_no")), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField("Blk", "", "blk")), + ]), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField("Address", "", "address"), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField("Tel No.", "", "tel_no")) + ]), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: customTextField( + "Administrator/Beneficial User", "", "admin"), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: customTextField("TIN", "", "admin_tin")) + ]), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: + customTextField("Address", "", "admin_address"), + ), + const SizedBox(width: 10.0), + Expanded( + // optional flex property if flex is 1 because the default flex is 1 + flex: 1, + child: + customTextField("Tel No.", "", "admin_telno")) + ]), + SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_right, + color: Colors.white), + onPressed: () { + var land = LandPropertyOwner( + id: widget.land.id, + transCode: landEditKey + .currentState!.value['transaction_code'] + .toString(), + tdn: landEditKey.currentState!.value['td_no'], + cloaNo: + landEditKey.currentState!.value['cloa_no'], + dated: landEditKey.currentState!.value['dated'], + assessedById: "1", + assessedByName: "cyril", + dateCreated: + landEditKey.currentState!.value['dated'], + dateModified: + landEditKey.currentState!.value['dated'], + pin: landEditKey.currentState!.value['pin'], + surveyNo: + landEditKey.currentState!.value['survey_no'], + lotNo: landEditKey.currentState!.value['lot_no'], + blkNo: landEditKey.currentState!.value['blk'], + owner: landEditKey.currentState!.value['owner'], + address: + landEditKey.currentState!.value['address'], + telno: landEditKey.currentState!.value['tel_no'], + tin: landEditKey.currentState!.value['tin'], + adminUser: + landEditKey.currentState!.value['admin'], + adminAddress: landEditKey + .currentState!.value['admin_address'], + adminTin: + landEditKey.currentState!.value['admin_tin'], + // faasType: "LAND", + adminTelno: landEditKey + .currentState!.value['admin_telno']); + + context.read().add( + UpdateLandPropertyOwner( + land_edit: land, id: widget.land.id!)); + + widget.NextBtn(); + }, + ) + ], + ), + const SizedBox( + height: 20, + ), + ]), + )), + ); + }, + ); + } +} diff --git a/lib/screens/passo/Land/edit_land/value_adjustments_edit.dart b/lib/screens/passo/Land/edit_land/value_adjustments_edit.dart new file mode 100644 index 0000000..d969ca8 --- /dev/null +++ b/lib/screens/passo/Land/edit_land/value_adjustments_edit.dart @@ -0,0 +1,283 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_progress_hud/flutter_progress_hud.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:unit2/bloc/passo/land/land_value_adjustments/land_value_adjustments_bloc.dart'; +import 'package:unit2/model/passo/land_value_adjustment.dart'; +import 'package:unit2/screens/passo/Land/add_land/AddLandValueAdjustmentModal.dart'; +import 'package:unit2/utils/alerts.dart'; +import 'package:unit2/utils/text_container.dart'; +import 'package:unit2/widgets/error_state.dart'; +import 'package:unit2/widgets/passo/custom_button.dart'; + +class ValueAdjustmentEditPage extends StatefulWidget { + Function PrevBtn; + Function NextBtn; + final int faasId; + ValueAdjustmentEditPage(this.PrevBtn, this.NextBtn, this.faasId); + @override + _ValueAdjustmentEditPage createState() => _ValueAdjustmentEditPage(); +} + +class _ValueAdjustmentEditPage extends State { + // double _totalMarketValue(items) { + // double total = 0; + // items.forEach((row) { + // total += double.parse(row); + // }); + // return total; + // } + + void deleteItem(int itemId) { + context + .read() + .add(DeleteLandValueAdjustments(id: itemId)); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: ProgressHUD( + padding: const EdgeInsets.all(24), + backgroundColor: Colors.black87, + indicatorWidget: const SpinKitFadingCircle(color: Colors.white), + child: + BlocConsumer( + listener: (context, state) { + if (state is LandValueAdjustmentsLoading) { + final progress = ProgressHUD.of(context); + progress!.showWithText("Please wait..."); + } + if (state is LandValueAdjustmentsLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is LandValueAdjustmentsErrorState) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + }, builder: (context, state) { + final state = context.watch().state; + if (state is LandValueAdjustmentsLoaded) { + return Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Container( + margin: const EdgeInsets.only( + left: 0, top: 20, right: 0, bottom: 10), + child: const Text('VALUE ADJUSTMENTS', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 18), + textAlign: TextAlign.left), + ), + Align( + alignment: Alignment.topRight, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Colors.red, + ), + onPressed: () { + context + .read() + .add(ShowLandValueAdjustments()); + }, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Text('ADD ITEM'), // <-- Text + const SizedBox( + width: 5, + ), + const Icon( + // <-- Icon + Icons.add, + size: 24.0, + ), + ], + ), + ), + ), + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: DataTable( + // ignore: prefer_const_literals_to_create_immutables + columns: [ + const DataColumn( + label: Text('Base Market Value'), + ), + const DataColumn( + label: Text('Adjustment Factors'), + ), + const DataColumn( + label: Text('% Adjustment'), + ), + const DataColumn( + label: Text('Value Adjustment'), + ), + const DataColumn( + label: Text('Market Value'), + ), + const DataColumn( + label: Text('Action'), + ) + ], + rows: state.val_adj.map((dataRow) { + return DataRow( + cells: [ + DataCell(Text(dataRow.baseMarketval!)), + DataCell( + Text(dataRow.adjustmentFactors!)), + DataCell(Text(dataRow.adjustment!)), + DataCell(Text(dataRow.valueAdjustment!)), + DataCell(Text(dataRow.marketValue!)), + DataCell(Row( + children: [ + InkWell( + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: Icon( + Icons.delete, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () { + deleteItem(dataRow.id!); + }, + ), + SizedBox( + width: 10, + ), + InkWell( + child: Container( + height: 30, + width: 30, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red, + ), + child: Icon( + Icons.edit, + color: Colors.white, + size: 20.0, + ), + ), + onTap: () {}, + ), + ], + )) + ], + ); + }).toList())) + ], + ), + ), + )), + // Padding( + // padding: const EdgeInsets.only(left: 20.0, right: 20.0), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // Text( + // 'Total', + // style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + // ), + // Text( + // NumberFormat.currency(locale: 'en-PH', symbol: "₱") + // .format('1.0'), + // style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15), + // ) + // ], + // ), + // ), + Padding( + padding: const EdgeInsets.all(15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CustomButton( + icon: const Icon(Icons.chevron_left_rounded, + color: Colors.white), + onPressed: () { + { + widget.PrevBtn(); + } + ; + }, + ), + CustomButton( + icon: const Icon(Icons.chevron_right_rounded, + color: Colors.white), + onPressed: () { + { + widget.NextBtn(); + } + ; + }, + ) + ], + ), + ), + ], + ); + } + if (state is LandValueAdjustmentsDeletedState) { + if (state.success) { + WidgetsBinding.instance.addPostFrameCallback((_) { + successAlert(context, "Deletion Successful", + "Extra item has been deleted successfully", () { + Navigator.of(context).pop(); + context.read().add( + LoadLandValueAdjustmentsEdit( + val_adj: [], id: widget.faasId)); + }); + }); + } + } + if (state is ShowAddLandValueAdjustmentsScreen) { + return ConstrainedBox( + constraints: BoxConstraints(maxHeight: 1000.0), + child: AlertDialog( + insetPadding: EdgeInsets.symmetric( + horizontal: 20.0, + vertical: 10.0, + ), + title: Text( + 'ADD VALUE ADJUSTMENTS', + textAlign: TextAlign.center, + ), + content: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [Expanded(child: AddLandValueAdjustmentModal())], + ), + ), + ); + } + if (state is LandValueAdjustmentsErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add( + LoadLandValueAdjustmentsEdit( + val_adj: const [], + id: widget.faasId)); + }, + ); + } + return Container(); + }), + ), + ); + } +} diff --git a/lib/screens/passo/building_home.dart b/lib/screens/passo/building_home.dart index 7c428b0..08d7cbd 100644 --- a/lib/screens/passo/building_home.dart +++ b/lib/screens/passo/building_home.dart @@ -57,6 +57,7 @@ import 'package:unit2/widgets/error_state.dart'; import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import '../../model/passo/bldg_loc.dart'; +import '../../utils/alerts.dart'; class BuildingHome extends StatelessWidget { const BuildingHome({super.key}); @@ -66,6 +67,11 @@ class BuildingHome extends StatelessWidget { int? profileId; String? token; Profile profile; + + void deleteItem(int itemId) { + context.read().add(DeleteBuildingFaas(id: itemId)); + } + return Scaffold( body: ProgressHUD( backgroundColor: Colors.black87, @@ -84,8 +90,11 @@ class BuildingHome extends StatelessWidget { final progress = ProgressHUD.of(context); progress!.showWithText("Please wait..."); } - if (state is PropertyInfoLoaded || - state is PropertyInfoErrorState) { + if (state is PropertyInfoLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + if (state is PropertyInfoErrorState) { final progress = ProgressHUD.of(context); progress?.dismiss(); } @@ -102,8 +111,8 @@ class BuildingHome extends StatelessWidget { shrinkWrap: true, itemCount: propertyList.length, itemBuilder: (BuildContext context, int index) { - return _listCard( - propertyList[index], context, index); + return _listCard(propertyList[index], context, + index, deleteItem); }, ), ), @@ -121,6 +130,20 @@ class BuildingHome extends StatelessWidget { }, ); } + if (state is BuildingFaasDeletedState) { + if (state.success) { + WidgetsBinding.instance.addPostFrameCallback((_) { + successAlert(context, "Deletion Successful", + "Building FAAS Data has been deleted successfully", + () { + Navigator.of(context).pop(); + context + .read() + .add(const LoadPropertyInfo()); + }); + }); + } + } return Container(); }, ); @@ -269,7 +292,7 @@ class BuildingHome extends StatelessWidget { } } -Card _listCard(PropertyInfo property_info, context, index) { +Card _listCard(PropertyInfo property_info, context, index, deleteItem) { return Card( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), @@ -400,7 +423,13 @@ Card _listCard(PropertyInfo property_info, context, index) { ], ), ), - IconButton(onPressed: () {}, icon: const Icon(Icons.chevron_right)), + IconButton( + onPressed: () { + deleteItem(property_info.id); + }, + icon: const Icon(Icons.delete_rounded), + color: primary, + ), ], ), ), diff --git a/lib/screens/passo/land_home .dart b/lib/screens/passo/land_home .dart index 5ee23c1..a101d7e 100644 --- a/lib/screens/passo/land_home .dart +++ b/lib/screens/passo/land_home .dart @@ -18,8 +18,11 @@ import 'package:unit2/bloc/passo/bulding/property_info/property_info_bloc.dart'; import 'package:unit2/bloc/passo/bulding/structural_material/structural_material_bloc.dart'; import 'package:unit2/bloc/passo/bulding/unit_construct/unit_construct_bloc.dart'; import 'package:unit2/bloc/passo/land/land_appraisal/land_appraisal_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_boundaries_edit/land_boundaries_edit_bloc.dart'; import 'package:unit2/bloc/passo/land/land_classification/land_classification_bloc.dart'; import 'package:unit2/bloc/passo/land/land_ext/land_ext_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_ext_bloc/land_ext_edit_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_location_edit/land_location_edit_bloc.dart'; import 'package:unit2/bloc/passo/land/land_property_assessment/land_property_assessment_bloc.dart'; import 'package:unit2/bloc/passo/land/land_property_owner_info/land_property_owner_info_bloc.dart'; import 'package:unit2/bloc/passo/land/land_subclassification/land_subclassification_bloc.dart'; @@ -37,8 +40,15 @@ import 'package:unit2/bloc/passo/signatories/signatories_bloc.dart'; import 'package:unit2/bloc/user/user_bloc.dart'; import 'package:unit2/model/passo/additional_items.dart'; import 'package:unit2/model/passo/general_description.dart'; +import 'package:unit2/model/passo/land_appr.dart'; +import 'package:unit2/model/passo/land_ext.dart'; +import 'package:unit2/model/passo/land_property_assessment.dart'; +import 'package:unit2/model/passo/land_property_boundaries.dart'; +import 'package:unit2/model/passo/land_property_loc.dart'; import 'package:unit2/model/passo/land_property_owner.dart'; import 'package:unit2/model/passo/land_ref.dart'; +import 'package:unit2/model/passo/land_value_adjustment.dart'; +import 'package:unit2/model/passo/other_improvements.dart'; import 'package:unit2/model/passo/property_appraisal.dart'; import 'package:unit2/model/passo/property_appraisal_edit.dart'; import 'package:unit2/model/passo/property_assessment_edit.dart'; @@ -49,6 +59,7 @@ import 'package:unit2/model/profile/basic_information/primary-information.dart'; import 'package:unit2/screens/passo/Building/add_building.dart'; import 'package:unit2/screens/passo/Building/edit_building.dart'; import 'package:unit2/screens/passo/Land/add_land.dart'; +import 'package:unit2/screens/passo/Land/edit_land.dart'; import 'package:unit2/screens/passo/Test%20Envi/multi_dropdown.dart'; import 'package:unit2/screens/passo/Test%20Envi/speed_dial.dart'; import 'package:unit2/theme-data.dart/colors.dart'; @@ -283,79 +294,84 @@ Card _listCard(LandPropertyOwner property_info, context, index) { padding: const EdgeInsets.all(15.0), child: InkWell( onTap: () async { - // Navigator.push(context, - // MaterialPageRoute(builder: (BuildContext context) { - // return MultiBlocProvider( - // providers: [ - // BlocProvider( - // create: (context) => - // PropertyInfoBloc()..add(LoadPropertyInfo()), - // ), - // BlocProvider( - // create: (context) => - // UnitConstructBloc()..add(LoadUnitConstruct()), - // ), - // BlocProvider( - // create: (context) => - // ClassComponentsBloc()..add(LoadClassComponents()), - // ), - // BlocProvider( - // create: (context) => - // SignatoriesBloc()..add(LoadSignatories())), - // BlocProvider( - // create: (context) => LocationBloc() - // ..add( - // LoadLocation(bldgloc: BldgLoc(), id: property_info.id)), - // ), - // BlocProvider( - // create: (context) => LandrefBloc() - // ..add( - // LoadLandref(landRef: LandRef(), id: property_info.id)), - // ), - // BlocProvider( - // create: (context) => GeneralDescriptionBloc() - // ..add(LoadGenDesc( - // gendesc: GeneralDesc(), id: property_info.id)), - // ), - // BlocProvider( - // create: (context) => AdditionalItemsEditBloc() - // ..add(LoadAdditionalItemsEdit( - // items: const [], - // id: property_info.id)), - // ), - // BlocProvider( - // create: (context) => PropertyAssessmentEditBloc() - // ..add(LoadPropertyAssessmentEdit( - // assessmentsEdit: PropertyAssessmentEdit(), - // id: property_info.id)), - // ), - // BlocProvider( - // create: (context) => PropertyAppraisalEditBloc() - // ..add(LoadPropertyAppraisalEdit( - // appraisalEdit: PropertyAppraisalEdit(), - // id: property_info.id)), - // ), - // BlocProvider( - // create: (context) => - // MunicipalityBloc()..add(LoadMunicipality())), - // BlocProvider( - // create: (context) => - // BarangayBloc()..add(LoadBarangay(id: '01'))), - // BlocProvider( - // create: (context) => MemorandaBloc()..add(LoadMemoranda())), - // BlocProvider( - // create: (context) => StructuralMaterialBloc() - // ..add(LoadStructuralMaterial( - // structure: StructureMaterials(), - // id: property_info.id))), - // ], - // child: EditBuilding( - // index: index, - // faas: property_info, - // title: 'Bldg & Structure Edit', - // ), - // ); - // })); + Navigator.push(context, + MaterialPageRoute(builder: (BuildContext context) { + return MultiBlocProvider( + providers: [ + BlocProvider( + create: (context) => + LandPropertyOwnerInfoBloc()..add(LoadLand())), + BlocProvider( + create: (context) => LandLocationEditBloc() + ..add(LoadLandLocationEdit( + land_loc_edit: LandPropertyLoc(), + id: property_info.id))), + BlocProvider( + create: (context) => LandExtEditBloc() + ..add(LoadLandExtEdit( + land_ext_edit: LandExt(), id: property_info.id))), + BlocProvider( + create: (context) => LandBoundariesEditBloc() + ..add(LoadLandBoundariesEdit( + land_boundaries_edit: LandPropertyBoundaries(), + id: property_info.id))), + BlocProvider( + create: (context) => LandAppraisalBloc() + ..add(LoadLandAppraisalEdit( + land_appr: const [], + id: property_info.id!))), + BlocProvider( + create: (context) => LandClassificationBloc() + ..add(LoadLandClassification())), + BlocProvider( + create: (context) => LandSubClassificationBloc() + ..add(LoadLandSubClassification( + cityCode: "1", classCode: 1))), + BlocProvider( + create: (context) => OtherImprovementsBloc() + ..add(LoadOtherImprovementEdit( + other_imps: const [], + ids: property_info.id!))), + BlocProvider( + create: (context) => + TypeOfLocationBloc()..add(LoadTypeOfLocation())), + BlocProvider( + create: (context) => + TypeOfRoadBloc()..add(LoadTypeOfRoad())), + BlocProvider( + create: (context) => LandPropertyAssessmentBloc() + ..add(LoadLandPropertyAssessmentEdit( + assessment: [], + id: property_info.id!))), + BlocProvider( + create: (context) => LandTreesImprovementsBloc() + ..add(LoadLandTreesImprovements())), + BlocProvider( + create: (context) => LandExtBloc()..add(LoadLandExt())), + BlocProvider( + create: (context) => LandValueAdjustmentsBloc() + ..add(LoadLandValueAdjustmentsEdit( + val_adj: [], + id: property_info.id!))), + BlocProvider( + create: (context) => + SignatoriesBloc()..add(LoadSignatories())), + BlocProvider( + create: (context) => + MunicipalityBloc()..add(LoadMunicipality())), + BlocProvider( + create: (context) => + BarangayBloc()..add(LoadBarangay(id: '01'))), + BlocProvider( + create: (context) => MemorandaBloc()..add(LoadMemoranda())), + ], + child: EditLand( + index: index, + faas: property_info, + title: 'Bldg & Structure Edit', + ), + ); + })); }, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, diff --git a/lib/screens/passo/passo_dashboard.dart b/lib/screens/passo/passo_dashboard.dart index c423b8f..2380afe 100644 --- a/lib/screens/passo/passo_dashboard.dart +++ b/lib/screens/passo/passo_dashboard.dart @@ -51,7 +51,7 @@ class _PassoDashBoard extends State { child: const LandHome(), ), EmptyData( - message: "Development ongoing ...", + message: "Sorry, this page is under construction.", ) ], ), diff --git a/lib/sevices/passo/building/property_appraisal_services.dart b/lib/sevices/passo/building/property_appraisal_services.dart index 2000441..69527ba 100644 --- a/lib/sevices/passo/building/property_appraisal_services.dart +++ b/lib/sevices/passo/building/property_appraisal_services.dart @@ -90,7 +90,7 @@ class PropertyAppraisalServices { http.Response response = await Request.instance .getRequest(param: params, path: path, headers: headers); print('Property_Apraisaledit'); - print(response.statusCode); + print(response.body); if (response.statusCode == 200) { final jsonData = jsonDecode(response.body); final dataList = jsonData['data'] as List; diff --git a/lib/sevices/passo/building/property_assessment_services.dart b/lib/sevices/passo/building/property_assessment_services.dart index 3ac71ca..a18da40 100644 --- a/lib/sevices/passo/building/property_assessment_services.dart +++ b/lib/sevices/passo/building/property_assessment_services.dart @@ -98,6 +98,7 @@ class PropertyAssessmentServices { http.Response response = await Request.instance .getRequest(param: params, path: path, headers: headers); print('Assessment'); + print(response.statusCode); print(response.body); if (response.statusCode == 200) { final jsonData = jsonDecode(response.body); diff --git a/lib/sevices/passo/building/property_info_services.dart b/lib/sevices/passo/building/property_info_services.dart index ac90a92..a3f7206 100644 --- a/lib/sevices/passo/building/property_info_services.dart +++ b/lib/sevices/passo/building/property_info_services.dart @@ -134,4 +134,29 @@ class PropertyInfoService { } return response; } + + Future remove(id) async { + String path = Url.instance.propertyInfo(); + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'X-Client-Key': xClientKey, + 'X-Client-Secret': xClientKeySecret + }; + Map params = { + "id": id.toString(), + }; + try { + http.Response response = await Request.instance + .deleteRequest(path: path, headers: headers, body: {}, param: params); + print(id); + if (response.statusCode == 200) { + print(response.body); + return response; + } else { + throw Exception(response.reasonPhrase); + } + } catch (e) { + throw e.toString(); + } + } } diff --git a/lib/sevices/passo/land/land_boundaries.dart b/lib/sevices/passo/land/land_boundaries.dart index 969d40c..313c6e2 100644 --- a/lib/sevices/passo/land/land_boundaries.dart +++ b/lib/sevices/passo/land/land_boundaries.dart @@ -56,4 +56,57 @@ class LandBoundariesService { } return response; } + + Future updateEdit(LandPropertyBoundaries data, id) async { + String path = Url.instance.getLandPropertyBoundaries(); + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'X-Client-Key': xClientKey, + 'X-Client-Secret': xClientKeySecret + }; + Map params = { + "landappr_details_id": id.toString(), + }; + http.Response? response; + try { + response = await Request.instance.putRequest( + path: path, body: data.toJson(), headers: headers, param: params); + } catch (e) { + log(e.toString()); + } + return response; + } + + Future fetchEdit(tempID) async { + String path = Url.instance.getLandPropertyBoundaries(); + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'X-Client-Key': xClientKey, + 'X-Client-Secret': xClientKeySecret + }; + Map params = { + "landappr_details_id": tempID.toString(), + }; + try { + http.Response response = await Request.instance + .getRequest(param: params, path: path, headers: headers); + + print('LandBoundEdit'); + print(response.body); + + if (response.statusCode == 200) { + final jsonData = jsonDecode(response.body); + final dataList = jsonData['data'] as List; + final result = LandPropertyBoundaries.fromJson( + dataList[0] as Map); + + return result; + } else { + print(response.reasonPhrase); + throw Exception(response.reasonPhrase); + } + } catch (e) { + throw e.toString(); + } + } } diff --git a/lib/sevices/passo/land/land_ext.dart b/lib/sevices/passo/land/land_ext.dart index 4d23162..01194a3 100644 --- a/lib/sevices/passo/land/land_ext.dart +++ b/lib/sevices/passo/land/land_ext.dart @@ -84,53 +84,55 @@ class LandExtServices { return response; } - // Future fetchEdit(tempID) async { - // http.Response response = await http.get(Uri.parse( - // '$baseUrl${Url.instance.getLandExt()}?bldgappr_details_id=$tempID')); - // print('Assessment'); - // print(response.body); - // if (response.statusCode == 200) { - // final jsonData = jsonDecode(response.body); - // final dataList = jsonData['data'] as List; - // final result = - // LandExtEdit.fromJson(dataList[0] as Map); + Future updateEdit(LandExt data, id) async { + String path = Url.instance.getLandExt(); + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'X-Client-Key': xClientKey, + 'X-Client-Secret': xClientKeySecret + }; + Map params = { + "landappr_details_id": id.toString(), + }; + http.Response? response; + try { + response = await Request.instance.putRequest( + path: path, body: data.toJson(), headers: headers, param: params); + } catch (e) { + log(e.toString()); + } + return response; + } - // return result; - // } else { - // throw Exception(response.reasonPhrase); - // } - // } + Future fetchEdit(tempID) async { + String path = Url.instance.getLandExt(); + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'X-Client-Key': xClientKey, + 'X-Client-Secret': xClientKeySecret + }; + Map params = { + "landappr_details_id": tempID.toString(), + }; + try { + http.Response response = await Request.instance + .getRequest(param: params, path: path, headers: headers); - // Future addEdit(LandExtEdit assessment) async { - // http.Response? response; - // try { - // response = await http.post( - // Uri.parse("$baseUrl${Url.instance.getLandExt()}"), - // headers: { - // HttpHeaders.contentTypeHeader: "application/json", - // }, - // body: jsonEncode(assessment.toJson())); - // } catch (e) { - // log(e.toString()); - // } - // return response; - // } + print('Landextedit'); + print(response.body); - // Future updateEdit( - // LandExtEdit assessment, id) async { - // print(id); - // http.Response? response; - // try { - // response = await http.put(Uri.parse( - // // ignore: unnecessary_brace_in_string_interps - // "$baseUrl${Url.instance.getLandExt()}?bldgappr_details_id=${id}"), - // headers: { - // HttpHeaders.contentTypeHeader: "application/json", - // }, - // body: jsonEncode(assessment.toJson())); - // } catch (e) { - // log(e.toString()); - // } - // return response; - // } + if (response.statusCode == 200) { + final jsonData = jsonDecode(response.body); + final dataList = jsonData['data'] as List; + final result = LandExt.fromJson(dataList[0] as Map); + + return result; + } else { + print(response.reasonPhrase); + throw Exception(response.reasonPhrase); + } + } catch (e) { + throw e.toString(); + } + } } diff --git a/lib/sevices/passo/land/land_location.dart b/lib/sevices/passo/land/land_location.dart index 8a2fe5b..c44b301 100644 --- a/lib/sevices/passo/land/land_location.dart +++ b/lib/sevices/passo/land/land_location.dart @@ -55,4 +55,57 @@ class LandLocationService { } return response; } + + Future updateEdit(LandPropertyLoc data, id) async { + String path = Url.instance.getLandPropertyLoc(); + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'X-Client-Key': xClientKey, + 'X-Client-Secret': xClientKeySecret + }; + Map params = { + "landappr_details_id": id.toString(), + }; + http.Response? response; + try { + response = await Request.instance.putRequest( + path: path, body: data.toJson(), headers: headers, param: params); + } catch (e) { + log(e.toString()); + } + return response; + } + + Future fetchEdit(tempID) async { + String path = Url.instance.getLandPropertyLoc(); + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'X-Client-Key': xClientKey, + 'X-Client-Secret': xClientKeySecret + }; + Map params = { + "landappr_details_id": tempID.toString(), + }; + try { + http.Response response = await Request.instance + .getRequest(param: params, path: path, headers: headers); + + print('LandLocEdit'); + print(response.body); + + if (response.statusCode == 200) { + final jsonData = jsonDecode(response.body); + final dataList = jsonData['data'] as List; + final result = + LandPropertyLoc.fromJson(dataList[0] as Map); + + return result; + } else { + print(response.reasonPhrase); + throw Exception(response.reasonPhrase); + } + } catch (e) { + throw e.toString(); + } + } } diff --git a/lib/sevices/passo/land/land_other_improvements.dart b/lib/sevices/passo/land/land_other_improvements.dart index d23652a..52e1f54 100644 --- a/lib/sevices/passo/land/land_other_improvements.dart +++ b/lib/sevices/passo/land/land_other_improvements.dart @@ -24,11 +24,11 @@ class OtherImprovementServices { 'X-Client-Secret': xClientKeySecret }; Map params = { - "landappr_details_id": tempID, + "landappr_details_id": tempID.toString(), }; try { http.Response response = await Request.instance - .getRequest(param: {}, path: path, headers: headers); + .getRequest(param: params, path: path, headers: headers); if (response.statusCode == 200) { final List result = jsonDecode(response.body)['data']; @@ -67,11 +67,11 @@ class OtherImprovementServices { 'X-Client-Secret': xClientKeySecret }; Map params = { - "id": id, + "id": id.toString(), }; try { http.Response response = await Request.instance - .deleteRequest(path: path, headers: headers, body: {}, param: {}); + .deleteRequest(path: path, headers: headers, body: {}, param: params); print(id); if (response.statusCode == 200) { print(response.body); diff --git a/lib/sevices/passo/land/land_property_owner.dart b/lib/sevices/passo/land/land_property_owner.dart index 83798ab..2f788aa 100644 --- a/lib/sevices/passo/land/land_property_owner.dart +++ b/lib/sevices/passo/land/land_property_owner.dart @@ -52,4 +52,24 @@ class LandServices { } return response; } + + Future update(LandPropertyOwner data, id) async { + String path = Url.instance.getLandOwnerInfo(); + Map headers = { + 'Content-Type': 'application/json; charset=UTF-8', + 'X-Client-Key': xClientKey, + 'X-Client-Secret': xClientKeySecret + }; + Map params = { + "id": id.toString(), + }; + http.Response? response; + try { + response = await Request.instance.putRequest( + path: path, body: data.toJson(), headers: headers, param: params); + } catch (e) { + log(e.toString()); + } + return response; + } } diff --git a/lib/sevices/passo/land/land_value_adjustment.dart b/lib/sevices/passo/land/land_value_adjustment.dart index 8fda18f..b52e113 100644 --- a/lib/sevices/passo/land/land_value_adjustment.dart +++ b/lib/sevices/passo/land/land_value_adjustment.dart @@ -25,11 +25,11 @@ class ValueAdjustmentsServices { 'X-Client-Secret': xClientKeySecret }; Map params = { - "landappr_details_id": tempID, + "landappr_details_id": tempID.toString(), }; try { http.Response response = await Request.instance - .getRequest(param: {}, path: path, headers: headers); + .getRequest(param: params, path: path, headers: headers); if (response.statusCode == 200) { final List result = jsonDecode(response.body)['data']; print(result); @@ -67,11 +67,11 @@ class ValueAdjustmentsServices { 'X-Client-Secret': xClientKeySecret }; Map params = { - "id": id, + "id": id.toString(), }; try { http.Response response = await Request.instance - .deleteRequest(path: path, headers: headers, body: {}, param: {}); + .deleteRequest(path: path, headers: headers, body: {}, param: params); print(id); if (response.statusCode == 200) { print(response.body); diff --git a/lib/sevices/passo/memoranda.dart b/lib/sevices/passo/memoranda.dart index c29a6be..3ec32ce 100644 --- a/lib/sevices/passo/memoranda.dart +++ b/lib/sevices/passo/memoranda.dart @@ -1,9 +1,4 @@ -import 'dart:convert'; - -import 'package:unit2/model/passo/barangay.dart'; -import 'package:unit2/model/passo/class_components.dart'; import 'package:http/http.dart' as http; -import 'package:unit2/model/passo/memoranda.dart'; import 'package:unit2/utils/request.dart'; import 'package:unit2/utils/urls.dart'; @@ -14,25 +9,16 @@ class MemorandaServices { String xClientKey = "unitK3CQaXiWlPReDsBzmmwBZPd9Re1z"; String xClientKeySecret = "unitcYqAN7GGalyz"; - Future> fetch() async { + Future fetch() async { String path = Url.instance.getMemoranda(); Map headers = { 'Content-Type': 'application/json; charset=UTF-8', 'X-Client-Key': xClientKey, 'X-Client-Secret': xClientKeySecret }; - try { - http.Response response = await Request.instance - .getRequest(param: {}, path: path, headers: headers); - if (response.statusCode == 200) { - final List result = jsonDecode(response.body)['data']; - return result.map(((e) => Memoranda.fromJson(e))).toList(); - } else { - throw Exception(response.reasonPhrase); - } - } catch (e) { - throw e.toString(); - } + http.Response response = await Request.instance + .getRequest(param: {}, path: path, headers: headers); + return response; } } diff --git a/lib/sevices/passo/signatories_service.dart b/lib/sevices/passo/signatories_service.dart index 1d527f2..26eed58 100644 --- a/lib/sevices/passo/signatories_service.dart +++ b/lib/sevices/passo/signatories_service.dart @@ -19,22 +19,19 @@ class SignatoriesServices { 'X-Client-Key': xClientKey, 'X-Client-Secret': xClientKeySecret }; - try { - http.Response response = await Request.instance - .getRequest(param: {}, path: path, headers: headers); - print('Signatories'); - print(response.statusCode); - if (response.statusCode == 200) { - final List result = jsonDecode(response.body)['data']; + http.Response response = await Request.instance + .getRequest(param: {}, path: path, headers: headers); - return result.map(((e) => Signatories.fromJson(e))).toList(); - } else { - print(response.reasonPhrase); - throw Exception(response.reasonPhrase); - } - } catch (e) { - throw e.toString(); + print('Signatories'); + print(response.statusCode); + if (response.statusCode == 200) { + final List result = jsonDecode(response.body)['data']; + + return result.map(((e) => Signatories.fromJson(e))).toList(); + } else { + print(response.reasonPhrase); + throw Exception(response.reasonPhrase); } } } diff --git a/lib/utils/urls.dart b/lib/utils/urls.dart index 6a88218..544a406 100644 --- a/lib/utils/urls.dart +++ b/lib/utils/urls.dart @@ -5,12 +5,13 @@ class Url { String host() { // return '192.168.10.183:3000'; - // return 'agusandelnorte.gov.ph'; - return "192.168.10.219:3000"; + return 'agusandelnorte.gov.ph'; + // return "192.168.10.219:3000"; // return "192.168.10.241"; // return "192.168.10.221:3004"; // return "playweb.agusandelnorte.gov.ph"; // return 'devapi.agusandelnorte.gov.ph:3004'; + // return "192.168.10.218:8000"; } String prefixHost() { diff --git a/pubspec.lock b/pubspec.lock index a6d51ca..3d36c10 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -77,10 +77,10 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.10.0" audioplayers: dependency: "direct main" description: @@ -285,10 +285,10 @@ packages: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.2.1" checked_yaml: dependency: transitive description: @@ -317,10 +317,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.17.0" convert: dependency: transitive description: @@ -873,26 +873,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.2.0" meta: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.8.0" mime: dependency: transitive description: @@ -993,10 +993,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.8.2" path_drawing: dependency: transitive description: @@ -1422,10 +1422,10 @@ packages: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.9.1" sqflite: dependency: transitive description: @@ -1566,10 +1566,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.4.16" timing: dependency: transitive description: @@ -1682,14 +1682,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" - web: - dependency: transitive - description: - name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 - url: "https://pub.dev" - source: hosted - version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -1731,5 +1723,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">2.19.0 <3.0.0" flutter: ">=3.7.0" diff --git a/pubspec.yaml b/pubspec.yaml index c103c45..167b593 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -98,7 +98,6 @@ dependencies: url_launcher_android: ^6.0.38 share_plus: ^7.1.0 animated_splash_screen: ^1.3.0 - dependency_overrides: intl: ^0.18.0