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..2d77bc3 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,23 @@ 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)); + } + } 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..cd11afb 100644 --- a/lib/bloc/passo/bulding/property_appraisal/property_appraisal_bloc.dart +++ b/lib/bloc/passo/bulding/property_appraisal/property_appraisal_bloc.dart @@ -26,19 +26,16 @@ class PropertyAppraisalBloc }); on((event, emit) async { final tempID = await SharedPreferences.getInstance(); + emit(PropertyAppraisalLoading()); + try { + http.Response response = (await PropertyAppraisalServices.instance + .update(event.appraisal, tempID.getInt('tempid')! - 1))!; - 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)); + if (response.statusCode == 200) { + emit(ShowPropertyAppraisalSuccessAlertState()); + } + } catch (e) { + 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_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..9d8ac0d 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 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_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_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/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..7346172 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'; @@ -95,204 +98,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: 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')) + ]), + 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 +411,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 +438,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..e4a5abd 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!"); + } } ; }, @@ -223,4 +231,17 @@ class _GeneralDescriptionPage extends State { ), ); } + + Future _waitForAddPropertyInfoToComplete() async { + // Wait for the state change indicating completion + final propertyInfoState = context.read().state; + + if (propertyInfoState is ShowGenDescErrorAlertState) { + // 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_appraisal.dart b/lib/screens/passo/Building/add_building_components/property_appraisal.dart index e746860..e53d76d 100644 --- a/lib/screens/passo/Building/add_building_components/property_appraisal.dart +++ b/lib/screens/passo/Building/add_building_components/property_appraisal.dart @@ -6,6 +6,7 @@ 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'; @@ -1029,4 +1030,17 @@ class _PropertyAppraisalPage extends State { }, ); } + + 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..e670b78 100644 --- a/lib/screens/passo/Building/add_building_components/property_assessment.dart +++ b/lib/screens/passo/Building/add_building_components/property_assessment.dart @@ -1002,76 +1002,104 @@ class _PropertyAssessmentPage extends State { bldgapprDetailsId: tempID.getInt('tempid')! - 1, actualUse: formKey.currentState! - .value['actual_use'], + .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']), + .currentState! + .value['qtr'] ?? + '0'), // Replace null with '0' yr: int.parse(formKey - .currentState!.value['yr']), - appraisedbyName: formKey .currentState! - .value['appraised_by'] - .firstname + + .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'] + ?.middlename ?? + '') + ' ' + - formKey - .currentState! - .value['appraised_by'] - .lastname, + (formKey + .currentState! + .value['appraised_by'] + ?.lastname ?? + ''), appraisedbyDate: formKey - .currentState! - .value['app_date'], - recommendapprName: formKey - .currentState! - .value['rec_approval'] - .firstname + + .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'] + ?.middlename ?? + '') + ' ' + - formKey - .currentState! - .value['rec_approval'] - .lastname, + (formKey + .currentState! + .value['rec_approval'] + ?.lastname ?? + ''), recommendapprDate: formKey - .currentState! - .value['rec_date'], - approvedbyName: formKey - .currentState! - .value['apprvd_by'] - .firstname + + .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'] + ?.middlename ?? + '') + ' ' + - formKey - .currentState! - .value['apprvd_by'] - .lastname, + (formKey + .currentState! + .value['apprvd_by'] + ?.lastname ?? + ''), memoranda: _memoranda, swornstatementNo: formKey - .currentState! - .value['sworn_statement'], + .currentState!.value[ + 'sworn_statement'] ?? + '', // Replace null with an empty string dateReceived: formKey - .currentState! - .value['date_received'], + .currentState! + .value['date_received'] + as DateTime? ?? + DateTime + .now(), // Replace null with current date entryDateAssessment: formKey - .currentState! - .value['date_of_entry'], - entryDateBy: formKey - .currentState!.value['by'], + .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); 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..24ed3cd 100644 --- a/lib/screens/passo/Building/edit_building/bldgloc_landref.dart +++ b/lib/screens/passo/Building/edit_building/bldgloc_landref.dart @@ -35,388 +35,395 @@ 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 = {}; - - // Iterate through the dropdownItems list to filter out duplicates - for (var item in cityList) { - uniqueItems.add(item); + 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..."); + } + 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..."); } - return BlocConsumer( - listener: (context, state) { - if (state is BarangayLoading) { - 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 = {}; + + // 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..b6dc672 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,638 +518,626 @@ 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..."); + } + if (state is PropertyAppraisalEditLoaded) { + final progress = ProgressHUD.of(context); + progress?.dismiss(); + } + 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) { + // TODO: implement listener + }, builder: (context, state) { + if (state is AdditionalItemsEditLoaded) { + final item = state.items; - 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', + double totalArea = double.tryParse(totalAreas.toString() ?? + appraisal.totalArea.toString()) ?? + 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: 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, - ), + 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( + bldgUnitValue.toString() + ' 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( - 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, ), - 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, - ), + ) + ], + ), + 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( - 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( + bldgUnitValue.toString(), + textAlign: TextAlign.right, ), - 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, - ), + ) + ], + ), + 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, ), - SizedBox( - width: 90, - height: 25, - child: FormBuilderTextField( - name: 'depRate', - decoration: - normalTextFieldStyle("0.00", ""), - validator: - FormBuilderValidators.compose([]), - onChanged: (value) { - setState(() { - depRate = double.parse(value!); - }); - }, - ), + ), + 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( - 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( + appraisal.addItemsSubtotal ?? '0.00', + textAlign: TextAlign.right, ), - 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, - ), + ) + ], + ), + 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( - 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( - fontWeight: FontWeight.bold, - fontSize: 18, - ), - 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( + fontWeight: FontWeight.bold, + fontSize: 18, ), + textAlign: TextAlign.left, ), - 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, + ), + 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, ), - 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( - children: [ - Container( - width: 100, - margin: - const EdgeInsets - .only( - top: 15, - left: 15), - padding: - const EdgeInsets - .all(5.0), - child: Text( - state.gendesc - .actualUse ?? - "", - 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: Text( - NumberFormat - .currency( - locale: 'en-PH', - symbol: "₱", - ).format( - calculateMarketValue( - (totalArea * - bldgUnitValue), - item, - double.parse(keys - .currentState - ?.value['depRate'] ?? - appraisal.depreciationRate)), - ), - 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( - assessmentLevel( - calculateMarketValue( - (totalArea * bldgUnitValue), - item, - double.parse(keys.currentState?.value['depRate'] ?? appraisal.depreciationRate)) - .toString(), - state.gendesc.actualUse) + - '%', - 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: 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: TextStyle( - fontWeight: - FontWeight - .bold, - fontSize: 13, - ), - textAlign: - TextAlign - .center, - ), - ), - const SizedBox( - height: 80, - ), - ], - ), - ) - ]), ), - ) - ], - ) - ], - ), + 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( + children: [ + Container( + width: 100, + margin: + const EdgeInsets + .only( + top: 15, + left: 15), + padding: + const EdgeInsets + .all(5.0), + child: Text( + actualUse ?? "", + 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: Text( + NumberFormat + .currency( + locale: 'en-PH', + symbol: "₱", + ).format( + calculateMarketValue( + (totalArea * + bldgUnitValue), + item, + double.parse(keys + .currentState + ?.value[ + 'depRate'] ?? + appraisal + .depreciationRate)), + ), + 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( + assessmentLevel( + calculateMarketValue( + (totalArea * + bldgUnitValue), + item, + double.parse(keys.currentState?.value['depRate'] ?? + appraisal.depreciationRate)) + .toString(), + actualUse) + + '%', + 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: Text( + NumberFormat + .currency( + locale: 'en-PH', + symbol: "₱", + ).format(assessmentValue( + calculateMarketValue( + (totalArea * + bldgUnitValue), + item, + double.parse(keys.currentState?.value['depRate'] ?? + appraisal.depreciationRate)) + .toString(), + actualUse)), + style: 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(); + ), + ], + ), + 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)); + 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(); - } - ; - }, - ) - ], - ) - ], - ), + 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(); + }); + } + 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..3439bba 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,673 @@ 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) { + // 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) { - 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, - ), - 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, - ), - ), - 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'), - ), - ), - 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([]), - ), - ), - ], - ), - 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, - ), - textAlign: TextAlign.center, - ), - ), - ), - onPressed: () { - final List - propertyAssessments = []; - - 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 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, ), - )) - ], + 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, + ), + ), + 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'), + ), + ), + 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([]), + ), + ), + ], + ), + 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, + ), + textAlign: TextAlign.center, + ), + ), + ), + onPressed: () { + final List< + PropertyAssessmentEdit> + propertyAssessments = []; + + 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: onError, + 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..f184b9a 100644 --- a/lib/screens/passo/Building/edit_building/property_owner_info.dart +++ b/lib/screens/passo/Building/edit_building/property_owner_info.dart @@ -67,151 +67,168 @@ class _PropertyOwnerInfoEdit extends 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..13a7513 --- /dev/null +++ b/lib/screens/passo/Land/edit_land.dart @@ -0,0 +1,128 @@ +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: FormBuilder( + key: landKey, + + // enabled: false, + onChanged: () { + landKey.currentState?.save(); + + print(landKey.currentState?.value.toString()); + }, + autovalidateMode: AutovalidateMode.disabled, + skipDisabled: true, + 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); + case 3: + return OtherImprovementEditPage(PrevBtn, NextBtn); + case 4: + return ValueAdjustmentEditPage(PrevBtn, NextBtn); + case 5: + return LandPropertyAssessmentEditPage(PrevBtn, NextBtn); + case 6: + return LandSignatoriesEdit(onSAveAll); + + default: + return LandPropertyOwnerInfoEdit(NextBtn, widget.faas!); + } + } +} 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..9c6a6b2 --- /dev/null +++ b/lib/screens/passo/Land/edit_land/land_appraisal.dart @@ -0,0 +1,262 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.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/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 LandAppraisalEdit extends StatefulWidget { + Function PrevBtn; + Function NextBtn; + LandAppraisalEdit(this.PrevBtn, this.NextBtn); + @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 BlocConsumer( + listener: (context, state) { + // TODO: implement listener + }, 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(const LoadLandAppraisal()); + }); + }); + } + } + if (state is ShowAddLandAppraisalScreen) { + return ConstrainedBox( + constraints: BoxConstraints( + maxHeight: 700.0, + ), + child: AlertDialog( + insetPadding: EdgeInsets.symmetric( + horizontal: 20.0, + vertical: 10.0, + ), + title: Text( + 'ADD LAND APPRAISAL', + textAlign: TextAlign.center, + ), + content: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container(child: AddLandAppraisalModal()), + ], + ), + ), + ); + } + if (state is LandAppraisalErrorState) { + return SomethingWentWrong( + message: onError, + onpressed: () { + context.read().add(LoadLandAppraisal()); + }, + ); + } + 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..12f786d --- /dev/null +++ b/lib/screens/passo/Land/edit_land/location_and_boundaries_edit.dart @@ -0,0 +1,266 @@ +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/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'; +import 'package:unit2/model/passo/land_property_owner.dart'; +import 'package:unit2/screens/passo/Land/add_land.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 LandLocationEditLoaded) { + 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 + }, + 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")) + ]), + 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..a750977 --- /dev/null +++ b/lib/screens/passo/Land/edit_land/other_improvements_edit.dart @@ -0,0 +1,263 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:unit2/bloc/passo/land/other_improvements/other_improvements_bloc.dart'; +import 'package:unit2/screens/passo/Land/add_land/AddOtherImprovementModal.dart'; +import 'package:unit2/utils/alerts.dart'; +import 'package:unit2/widgets/passo/custom_button.dart'; + +class OtherImprovementEditPage extends StatefulWidget { + Function PrevBtn; + Function NextBtn; + OtherImprovementEditPage(this.PrevBtn, this.NextBtn); + @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 BlocConsumer( + listener: (context, state) { + // TODO: implement listener + }, 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: [Container(child: AddOtherImprovementModal())], + ), + ), + ); + } + 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..efc7768 --- /dev/null +++ b/lib/screens/passo/Land/edit_land/property_assessment_cont_edit.dart @@ -0,0 +1,541 @@ +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:searchfield/searchfield.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:unit2/bloc/passo/land/land_ext/land_ext_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/add_land.dart'; +import 'package:unit2/theme-data.dart/colors.dart'; + +class LandSignatoriesEdit extends StatefulWidget { + Function onSAve; + LandSignatoriesEdit(this.onSAve); + + @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 BlocConsumer( + listener: (context, state) { + // TODO: implement listener + }, + builder: (context, state) { + if (state is LandExtLoaded) { + return 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) { + return 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, + ), + 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', + 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_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: 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', + 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_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: 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', + 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: '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, + ), + )), + 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(); + }, + )), + 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([]), + ), + ), + ], + ), + 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'), + ), + ), + ], + ), + 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_land', + 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_land', + decoration: InputDecoration(), + validator: FormBuilderValidators.compose([]), + ), + ), + ], + ), + 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( + landKey.currentState!.value['land_qtr']), + yr: int.parse( + landKey.currentState!.value['land_yr']), + appraisedbyName: landKey.currentState!.value['appraised_by_land'].firstname + + ' ' + + landKey + .currentState! + .value['appraised_by_land'] + .middlename + + ' ' + + landKey.currentState! + .value['appraised_by_land'].lastname, + appraisedbyDate: landKey + .currentState!.value['app_date_land'], + recommendapprName: landKey + .currentState! + .value['rec_approval_land'] + .firstname + + ' ' + + landKey + .currentState! + .value['rec_approval_land'] + .middlename + + ' ' + + landKey.currentState! + .value['rec_approval_land'].lastname, + recommendapprDate: landKey + .currentState!.value['rec_date_land'], + approvedbyName: landKey.currentState!.value['apprvd_by_land'].firstname + + ' ' + + landKey.currentState!.value['apprvd_by_land'].middlename + + ' ' + + landKey.currentState!.value['apprvd_by_land'].lastname, + approvedbyDate: landKey.currentState!.value['apprvd_by_date_land'], + memoranda: _memoranda, + swornstatementNo: landKey.currentState!.value['sworn_statement_land'], + dateReceived: landKey.currentState!.value['date_received_land'], + entryDateAssessment: landKey.currentState!.value['date_of_entry_land'], + entryDateBy: landKey.currentState!.value['by_land']); + + context.read() + ..add(UpdateLandExt(landext: ext)); + widget.onSAve(); + }, + style: ElevatedButton.styleFrom( + backgroundColor: primary, + foregroundColor: Colors.red), + child: SizedBox( + width: 250, + height: 50, + child: Align( + alignment: Alignment.center, + child: Text( + 'Save', + style: TextStyle( + color: Colors.white, + ), + textAlign: TextAlign.center, + ), + ), + ), + ), + SizedBox( + height: 30, + ), + ], + )); + } + return Container(); + }, + ); + } + return Container(); + }, + ); + } + 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..b009435 --- /dev/null +++ b/lib/screens/passo/Land/edit_land/property_assessment_edit.dart @@ -0,0 +1,245 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_property_assessment/land_property_assessment_bloc.dart'; +import 'package:unit2/screens/passo/Land/add_land/AddPropertyAssessmentModal.dart'; +import 'package:unit2/utils/alerts.dart'; +import 'package:unit2/widgets/passo/custom_button.dart'; + +class LandPropertyAssessmentEditPage extends StatefulWidget { + Function PrevBtn; + Function NextBtn; + LandPropertyAssessmentEditPage(this.PrevBtn, this.NextBtn); + @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 BlocConsumer(listener: (context, state) { + // TODO: implement listener + }, 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(const LoadLandPropertyAssessment()); + }); + }); + } + } + 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: AddPropertyAssessmentModal())], + ), + ), + ); + } + 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..6dabf25 --- /dev/null +++ b/lib/screens/passo/Land/edit_land/value_adjustments_edit.dart @@ -0,0 +1,246 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:unit2/bloc/passo/land/land_value_adjustments/land_value_adjustments_bloc.dart'; +import 'package:unit2/screens/passo/Land/add_land/AddLandValueAdjustmentModal.dart'; +import 'package:unit2/utils/alerts.dart'; +import 'package:unit2/widgets/passo/custom_button.dart'; + +class ValueAdjustmentEditPage extends StatefulWidget { + Function PrevBtn; + Function NextBtn; + ValueAdjustmentEditPage(this.PrevBtn, this.NextBtn); + @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 BlocConsumer( + listener: (context, state) { + // TODO: implement listener + }, 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(const LoadLandValueAdjustments()); + }); + }); + } + } + 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())], + ), + ), + ); + } + return Container(); + }); + } +} diff --git a/lib/screens/passo/building_home.dart b/lib/screens/passo/building_home.dart index 7c428b0..eabc80c 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, @@ -102,8 +108,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 +127,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 +289,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 +420,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..91e26bc 100644 --- a/lib/screens/passo/land_home .dart +++ b/lib/screens/passo/land_home .dart @@ -18,8 +18,10 @@ 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_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,6 +39,8 @@ 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_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/property_appraisal.dart'; @@ -49,6 +53,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 +288,72 @@ 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) => LandBoundariesEditBloc() + ..add(LoadLandBoundariesEdit( + land_boundaries_edit: LandPropertyBoundaries(), + id: property_info.id))), + BlocProvider( + create: (context) => + LandAppraisalBloc()..add(LoadLandAppraisal())), + BlocProvider( + create: (context) => LandClassificationBloc() + ..add(LoadLandClassification())), + BlocProvider( + create: (context) => LandSubClassificationBloc() + ..add(LoadLandSubClassification( + cityCode: "1", classCode: 1))), + BlocProvider( + create: (context) => + OtherImprovementsBloc()..add(LoadOtherImprovement())), + BlocProvider( + create: (context) => + TypeOfLocationBloc()..add(LoadTypeOfLocation())), + BlocProvider( + create: (context) => + TypeOfRoadBloc()..add(LoadTypeOfRoad())), + BlocProvider( + create: (context) => LandPropertyAssessmentBloc() + ..add(LoadLandPropertyAssessment())), + BlocProvider( + create: (context) => LandTreesImprovementsBloc() + ..add(LoadLandTreesImprovements())), + BlocProvider( + create: (context) => LandExtBloc()..add(LoadLandExt())), + BlocProvider( + create: (context) => LandValueAdjustmentsBloc() + ..add(LoadLandValueAdjustments())), + 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/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_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_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/utils/request.dart b/lib/utils/request.dart index 970fac6..562a9fb 100644 --- a/lib/utils/request.dart +++ b/lib/utils/request.dart @@ -19,7 +19,7 @@ class Request { Map? param}) async { Response response; try { - response = await get(Uri.https(host, path!, param), headers: headers) + response = await get(Uri.http(host, path!, param), headers: headers) .timeout(Duration(seconds: requestTimeout)); } on TimeoutException catch (_) { // Fluttertoast.showToast( @@ -61,7 +61,7 @@ class Request { Map? param}) async { Response response; try { - response = await post(Uri.https(host, path!, param), + response = await post(Uri.http(host, path!, param), headers: headers, body: jsonEncode(body)) .timeout(Duration(seconds: requestTimeout)); } on TimeoutException catch (_) { @@ -104,7 +104,7 @@ class Request { required Map? param}) async { Response response; try { - response = await put(Uri.https(host, path, param), + response = await put(Uri.http(host, path, param), headers: headers, body: jsonEncode(body)); } on TimeoutException catch (_) { // Fluttertoast.showToast( @@ -188,7 +188,7 @@ class Request { required Map? param}) async { Response response; try { - response = await delete(Uri.https(host, path, param), + response = await delete(Uri.http(host, path, param), headers: headers, body: jsonEncode(body)) .timeout(Duration(seconds: requestTimeout)); } on TimeoutException catch (_) { diff --git a/lib/utils/urls.dart b/lib/utils/urls.dart index 20385fe..3348415 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 '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 "playweb.agusandelnorte.gov.ph"; // return 'devapi.agusandelnorte.gov.ph:3004'; + // return "192.168.10.218:8000"; } String prefixHost() { @@ -26,7 +27,6 @@ class Url { return 'api/jobnet_app/profile/pds/'; } - String latestApk() { return "/api/system_app/apk_version/latest"; }