Added edit feature on land faas

feature/passo/PASSO-#1-Sync-data-from-device-to-postgre-and-vice-versa
cyzoox 2023-09-18 14:14:53 +08:00
parent 42bd0312a4
commit 5e408f5085
37 changed files with 4259 additions and 1635 deletions

View File

@ -27,6 +27,8 @@ class AdditionalItemBloc
}
});
on<AddAdditionalItems>((event, emit) async {
emit(AdditionalItemsLoading());
try {
http.Response response =
(await AdditionalItemsServices.instance.add(event.items))!;
print(response.body);
@ -40,6 +42,9 @@ class AdditionalItemBloc
emit(AdditionalItemsLoaded(globalAdditionalItems));
}
} catch (e) {
emit(AdditionalItemsErrorState(e.toString()));
}
});
on<DeleteAdditionalItems>((event, emit) async {
print(event.id);

View File

@ -26,19 +26,16 @@ class PropertyAppraisalBloc
});
on<AddPropertyAppraisal>((event, emit) async {
final tempID = await SharedPreferences.getInstance();
emit(PropertyAppraisalLoading());
try {
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());
}
});
}

View File

@ -26,3 +26,7 @@ class PropertyAppraisalErrorState extends PropertyAppraisalState {
@override
List<Object> get props => [error];
}
class ShowPropertyAppraisalErrorAlertState extends PropertyAppraisalState {}
class ShowPropertyAppraisalSuccessAlertState extends PropertyAppraisalState {}

View File

@ -48,6 +48,7 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
}
});
on<UpdatPropertyInfo>(((event, emit) async {
emit(PropertyInfoLoading());
final state = this.state;
try {
http.Response response = (await PropertyInfoService.instance
@ -60,6 +61,7 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
}));
on<UpdateBldgLoc>(((event, emit) async {
final state = this.state;
try {
http.Response response = (await PropertyInfoService.instance
.updateBldg(event.bldg_loc, event.bldg_loc.id))!;
@ -77,6 +79,7 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
on<UpdateLandRef>(
(event, emit) async {
final state = this.state;
emit(PropertyInfoLoading());
try {
http.Response response = (await PropertyInfoService.instance
.updateLandRef(event.land_ref, event.land_ref.id))!;
@ -95,6 +98,7 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
on<UpdateGeneralDesc>((event, emit) async {
final state = this.state;
emit(PropertyInfoLoading());
try {
http.Response response = (await PropertyInfoService.instance
.updateGenDesc(event.gen_desc, event.gen_desc.id))!;
@ -112,6 +116,7 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
on<UpdateStrucMaterials>((event, emit) async {
final state = this.state;
emit(PropertyInfoLoading());
try {
final tempID = await SharedPreferences.getInstance();
print(tempID.getInt('tempid')! - 1);
@ -131,6 +136,7 @@ class PropertyInfoBloc extends Bloc<PropertyInfoEvent, PropertyInfoState> {
on<DeleteBuildingFaas>((event, emit) async {
print(event.id);
emit(PropertyInfoLoading());
http.Response response =
(await PropertyInfoService.instance.remove(event.id));
print(response.statusCode);

View File

@ -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<LandBoundariesEditEvent, LandBoundariesEditState> {
LandBoundariesEditBloc() : super(LandBoundariesEditInitial()) {
on<LoadLandBoundariesEdit>((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<AddLandLocationEdit>((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<UpdateLandBoundariesEdit>((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));
// }
});
}
}

View File

@ -0,0 +1,41 @@
part of 'land_boundaries_edit_bloc.dart';
class LandBoundariesEditEvent extends Equatable {
const LandBoundariesEditEvent();
@override
List<Object> 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<Object> get props => [land_boundaries_edit];
}
class AddLandBoundariesEdit extends LandBoundariesEditEvent {
final LandPropertyBoundaries land_boundaries_edit;
const AddLandBoundariesEdit({required this.land_boundaries_edit});
@override
List<Object> 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<Object> get props => [land_boundaries_edit];
}

View File

@ -0,0 +1,28 @@
part of 'land_boundaries_edit_bloc.dart';
class LandBoundariesEditState extends Equatable {
const LandBoundariesEditState();
@override
List<Object> 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<Object> get props => [land_boundaries_edit];
}
class LandBoundariesEditErrorState extends LandBoundariesEditState {
LandBoundariesEditErrorState(this.error);
final String error;
@override
List<Object> get props => [error];
}

View File

@ -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<LandLocationEditEvent, LandLocationEditState> {
LandPropertyLoc globalLandLocationEdit;
LandLocationEditBloc()
: globalLandLocationEdit = LandPropertyLoc(),
super(LandLocationEditInitial()) {
on<LoadLandLocationEdit>((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<AddLandLocationEdit>((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<UpdateLandLocationEdit>((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));
// }
});
}
}

View File

@ -0,0 +1,39 @@
part of 'land_location_edit_bloc.dart';
class LandLocationEditEvent extends Equatable {
const LandLocationEditEvent();
@override
List<Object> 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<Object> get props => [land_loc_edit];
}
class AddLandLocationEdit extends LandLocationEditEvent {
final LandPropertyLoc land_loc_edit;
const AddLandLocationEdit({required this.land_loc_edit});
@override
List<Object> 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<Object> get props => [land_loc_edit];
}

View File

@ -0,0 +1,28 @@
part of 'land_location_edit_bloc.dart';
class LandLocationEditState extends Equatable {
const LandLocationEditState();
@override
List<Object> 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<Object> get props => [land_loc_edit];
}
class LandLocationEditErrorState extends LandLocationEditState {
LandLocationEditErrorState(this.error);
final String error;
@override
List<Object> get props => [error];
}

View File

@ -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<AddPropertyOwnerLand>((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
}
}
});
on<UpdateLandPropertyOwner>((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<UpdateLandLoc>((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<UpdateLandBoundaries>((event, emit) async {

View File

@ -25,6 +25,18 @@ class AddPropertyOwnerLand extends LandPropertyOwnerInfoEvent {
List<Object> 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<Object> get props => [land_edit];
}
class UpdateLandLoc extends LandPropertyOwnerInfoEvent {
// ignore: non_constant_identifier_names
final LandPropertyLoc land_loc;

View File

@ -17,14 +17,6 @@ class LandLoaded extends LandPropertyOwnerInfoState {
List<Object> get props => [land];
}
// class PropertyAppraisalLoaded extends AssessorsState {
// PropertyAppraisalLoaded(this.appraisal);
// final List<PropertyAppraisal> appraisal;
// @override
// List<Object> get props => [appraisal];
// }
class LandErrorState extends LandPropertyOwnerInfoState {
const LandErrorState(this.error);
final String error;

View File

@ -121,20 +121,24 @@ class _AddBuilding extends State<AddBuilding> {
final progress = ProgressHUD.of(context);
progress?.dismiss();
}
if (state is ShowBldgLocErrorAlertState ||
state is ShowGenDescErrorAlertState ||
if (state is ShowGenDescErrorAlertState ||
state is ShowLandRefErrorAlertState ||
state is ShowStrucMatErrorAlertState) {
final progress = ProgressHUD.of(context);
progress?.dismiss();
Fluttertoast.showToast(
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 ||
if (state is PropertyInfoLoading ||
state is PropertyInfoLoaded ||
state is PropertyInfoErrorState ||
state is ShowBldgLocErrorAlertState ||
state is ShowGenDescErrorAlertState ||

View File

@ -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,6 +501,7 @@ class _AddExtraItems extends State<AddExtraItems> {
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () async {
try {
final tempID =
await SharedPreferences.getInstance();
var itemss = AdditionalItems(
@ -509,12 +511,13 @@ class _AddExtraItems extends State<AddExtraItems> {
classId: _classId,
className: _className,
structType: _structureType,
unitValue:
_withoutBUCC == true ? 0 : _unitValue,
unitValue: _withoutBUCC == true
? 0
: _unitValue,
baseUnitValue: _unitBase,
area: _areaValue,
marketValue:
(_unitValue * _unitBase) * _areaValue,
marketValue: (_unitValue * _unitBase) *
_areaValue,
depreciationRate: _depValue,
adjustedMarketVal: _totalMarketValue(
_unitValue,
@ -542,6 +545,12 @@ class _AddExtraItems extends State<AddExtraItems> {
context
.read<AdditionalItemBloc>()
.add(AddAdditionalItems(items: itemss));
} catch (e) {
Fluttertoast.showToast(
msg:
"Slow internet connection, please try again!",
);
}
},
style: ElevatedButton.styleFrom(
primary: Colors.black,

View File

@ -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,9 +41,25 @@ class _AdditionalItemPage extends State<AdditionalItemPage> {
@override
Widget build(BuildContext context) {
return BlocConsumer<AdditionalItemBloc, AdditionalItemState>(
return Scaffold(
body: ProgressHUD(
padding: const EdgeInsets.all(24),
backgroundColor: Colors.black87,
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
child: BlocConsumer<AdditionalItemBloc, AdditionalItemState>(
listener: (context, state) {
// TODO: implement listener
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<AdditionalItemBloc>().state;
@ -57,7 +77,8 @@ class _AdditionalItemPage extends State<AdditionalItemPage> {
left: 0, top: 20, right: 0, bottom: 10),
child: const Text('ADDITIONAL ITEMS',
style: TextStyle(
fontWeight: FontWeight.bold, fontSize: 18),
fontWeight: FontWeight.bold,
fontSize: 18),
textAlign: TextAlign.left),
),
Align(
@ -175,14 +196,14 @@ class _AdditionalItemPage extends State<AdditionalItemPage> {
children: [
const Text(
'Total',
style:
TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
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),
style: TextStyle(
fontWeight: FontWeight.bold, fontSize: 15),
)
],
),
@ -247,50 +268,25 @@ class _AdditionalItemPage extends State<AdditionalItemPage> {
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(child: AddExtraItems(widget.unit, widget.options))
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: () {
context
.read<AdditionalItemBloc>()
.add(ShowAdditionalItems());
if (state is AdditionalItemsErrorState) {
return SomethingWentWrong(
message: onError,
onpressed: () {
context.read<AdditionalItemBloc>().add(LoadAdditionalItems());
},
child: Row(
mainAxisSize: MainAxisSize.min,
children: const [
Text('ADD ITEM'), // <-- Text
SizedBox(
width: 5,
),
Icon(
// <-- Icon
Icons.add,
size: 24.0,
),
],
),
),
),
],
),
);
}
return Container();
},
),
),
);
}
}

View File

@ -98,6 +98,7 @@ class _BldgLocationLandrefPage extends State<BldgLocationLandrefPage> {
.map((brgy) => brgy.barangayDescription)
.toList()
.cast<String>();
return StatefulBuilder(builder: (context, locationState) {
return SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(20.0),
@ -201,8 +202,8 @@ class _BldgLocationLandrefPage extends State<BldgLocationLandrefPage> {
children: <Widget>[
Expanded(
flex: 1,
child: customTextField(
"OCT/TCT/CLOA No.", "", 'oct_tct_cloa'),
child: customTextField("OCT/TCT/CLOA No.",
"", 'oct_tct_cloa'),
),
const SizedBox(width: 10.0),
Expanded(
@ -247,7 +248,8 @@ class _BldgLocationLandrefPage extends State<BldgLocationLandrefPage> {
height: 50,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: [
CustomButton(
icon: const Icon(Icons.chevron_left_rounded,
@ -259,18 +261,90 @@ class _BldgLocationLandrefPage extends State<BldgLocationLandrefPage> {
;
},
),
CustomButton(
icon: const Icon(Icons.chevron_right_rounded,
color: Colors.white),
// 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<PropertyInfoBloc>()
// ..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);
// 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'],
street: formKey.currentState
?.value['street'],
barangay: formKey
.currentState?.value['brgy'],
municipality: formKey
@ -286,12 +360,12 @@ class _BldgLocationLandrefPage extends State<BldgLocationLandrefPage> {
?.value['oct_tct_cloa'],
lotNo: formKey
.currentState?.value['lot_no'],
tdn: formKey
.currentState?.value['l_td_arp'],
tdn: formKey.currentState
?.value['l_td_arp'],
area: formKey
.currentState?.value['area'],
surveyNo: formKey
.currentState?.value['survey_no'],
surveyNo: formKey.currentState
?.value['survey_no'],
blkNo: formKey
.currentState?.value['blk_no'],
);
@ -303,18 +377,19 @@ class _BldgLocationLandrefPage extends State<BldgLocationLandrefPage> {
} catch (e) {
Fluttertoast.showToast(
msg:
"Slow internet connection, please try again!");
"Slow internet connection, please try again!",
);
}
}
;
},
)
);
})
],
)
],
),
),
);
});
}
if (state is BarangayErrorState) {
return SomethingWentWrong(

View File

@ -1002,76 +1002,104 @@ class _PropertyAssessmentPage extends State<PropertyAssessmentPage> {
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['yr'] ??
'0'), // Replace null with '0'
appraisedbyName: (formKey
.currentState!
.value['appraised_by']
.firstname +
?.firstname ??
'') +
' ' +
formKey
(formKey
.currentState!
.value['appraised_by']
.middlename +
?.middlename ??
'') +
' ' +
formKey
(formKey
.currentState!
.value['appraised_by']
.lastname,
?.lastname ??
''),
appraisedbyDate: formKey
.currentState!
.value['app_date'],
recommendapprName: formKey
.value['app_date']
as DateTime? ??
DateTime
.now(), // Replace null with current date
recommendapprName: (formKey
.currentState!
.value['rec_approval']
.firstname +
?.firstname ??
'') +
' ' +
formKey
(formKey
.currentState!
.value['rec_approval']
.middlename +
?.middlename ??
'') +
' ' +
formKey
(formKey
.currentState!
.value['rec_approval']
.lastname,
?.lastname ??
''),
recommendapprDate: formKey
.currentState!
.value['rec_date'],
approvedbyName: formKey
.value['rec_date']
as DateTime? ??
DateTime
.now(), // Replace null with current date
approvedbyName: (formKey
.currentState!
.value['apprvd_by']
.firstname +
?.firstname ??
'') +
' ' +
formKey
(formKey
.currentState!
.value['apprvd_by']
.middlename +
?.middlename ??
'') +
' ' +
formKey
(formKey
.currentState!
.value['apprvd_by']
.lastname,
?.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'],
.value['date_received']
as DateTime? ??
DateTime
.now(), // Replace null with current date
entryDateAssessment: formKey
.currentState!
.value['date_of_entry'],
entryDateBy: formKey
.currentState!.value['by'],
.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);

View File

@ -52,6 +52,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
@override
Widget build(BuildContext context) {
return StatefulBuilder(builder: (context, structuralState) {
return SingleChildScrollView(
padding: const EdgeInsets.all(30.0),
child: Column(
@ -75,7 +76,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
checkColor: Colors.white,
value: foundationOthers,
onChanged: (bool? value) {
setState(() {
structuralState(() {
foundationOthers = value!;
});
},
@ -92,7 +93,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
replacement: DropDownMultiSelect(
selected_values_style: TextStyle(color: Colors.black),
onChanged: (List<String> x) {
setState(() {
structuralState(() {
foundation = x;
});
},
@ -114,7 +115,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
checkColor: Colors.white,
value: columOthers,
onChanged: (bool? value) {
setState(() {
structuralState(() {
columOthers = value!;
});
},
@ -126,11 +127,12 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
padding: const EdgeInsets.only(top: 10.0, bottom: 10.0),
child: Visibility(
visible: columOthers,
child: customTextField("Enter other columns", "", "other_column"),
child:
customTextField("Enter other columns", "", "other_column"),
replacement: DropDownMultiSelect(
selected_values_style: TextStyle(color: Colors.black),
onChanged: (List<String> x) {
setState(() {
structuralState(() {
column = x;
});
},
@ -152,7 +154,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
checkColor: Colors.white,
value: beamsOthers,
onChanged: (bool? value) {
setState(() {
structuralState(() {
beamsOthers = value!;
});
},
@ -168,7 +170,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
replacement: DropDownMultiSelect(
selected_values_style: TextStyle(color: Colors.black),
onChanged: (List<String> x) {
setState(() {
structuralState(() {
beam = x;
});
},
@ -190,7 +192,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
checkColor: Colors.white,
value: tfOthers,
onChanged: (bool? value) {
setState(() {
structuralState(() {
tfOthers = value!;
});
},
@ -207,7 +209,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
replacement: DropDownMultiSelect(
selected_values_style: TextStyle(color: Colors.black),
onChanged: (List<String> x) {
setState(() {
structuralState(() {
truss_framing = x;
});
},
@ -229,7 +231,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
checkColor: Colors.white,
value: roofOthers,
onChanged: (bool? value) {
setState(() {
structuralState(() {
roofOthers = value!;
});
},
@ -245,7 +247,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
replacement: DropDownMultiSelect(
selected_values_style: TextStyle(color: Colors.black),
onChanged: (List<String> x) {
setState(() {
structuralState(() {
roof = x;
});
},
@ -276,7 +278,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
checkColor: Colors.white,
value: flooringOthers,
onChanged: (bool? value) {
setState(() {
structuralState(() {
flooringOthers = value!;
});
},
@ -293,7 +295,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
replacement: DropDownMultiSelect(
selected_values_style: TextStyle(color: Colors.black),
onChanged: (List<String> x) {
setState(() {
structuralState(() {
flooring = x;
});
},
@ -321,7 +323,7 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
checkColor: Colors.white,
value: wpOthers,
onChanged: (bool? value) {
setState(() {
structuralState(() {
wpOthers = value!;
});
},
@ -361,8 +363,8 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
CustomButton(
icon:
const Icon(Icons.chevron_left_rounded, color: Colors.white),
icon: const Icon(Icons.chevron_left_rounded,
color: Colors.white),
onPressed: () {
{
widget.PrevBtn();
@ -380,7 +382,8 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
var strucMaterials = StructureMaterialsII(
id: tempID.getInt('tempid')! - 1,
foundation: foundationOthers
? formKey.currentState!.value['other_foundation']
? formKey
.currentState!.value['other_foundation']
.split(',')
: foundation,
columns: columOthers
@ -423,5 +426,6 @@ class _StructuralMaterialsPage extends State<StructuralMaterialsPage> {
],
),
);
});
}
}

View File

@ -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';
@ -49,7 +50,7 @@ class _GeneralDescriptionEdit extends State<GeneralDescriptionEdit> {
indicatorWidget: const SpinKitFadingCircle(color: Colors.white),
child:
BlocConsumer<GeneralDescriptionBloc, GeneralDescriptionState>(
listener: (context, state) {
listener: (context, state) async {
if (state is GenDescLoading) {
final progress = ProgressHUD.of(context);
progress!.showWithText("Please wait...");
@ -57,6 +58,13 @@ class _GeneralDescriptionEdit extends State<GeneralDescriptionEdit> {
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);

View File

@ -33,6 +33,24 @@ class PropertyAppraisalEditPage extends StatefulWidget {
class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
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<AdditionalItems> items) {
double sum = 0;
@ -529,13 +547,8 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
}, builder: (context, state) {
if (state is AdditionalItemsEditLoaded) {
final item = state.items;
return BlocConsumer<GeneralDescriptionBloc,
GeneralDescriptionState>(listener: (context, state) {
// TODO: implement listener
}, builder: (context, state) {
if (state is GenDescLoaded) {
double totalArea = double.tryParse(
state.gendesc.totalFloorArea ??
double totalArea = double.tryParse(totalAreas.toString() ??
appraisal.totalArea.toString()) ??
0.0;
@ -546,8 +559,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
return Expanded(
child: SingleChildScrollView(
child: Container(
margin:
const EdgeInsets.only(left: 20.0, right: 20.0),
margin: const EdgeInsets.only(left: 20.0, right: 20.0),
child: Column(
children: [
Container(
@ -555,13 +567,11 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
left: 0, top: 20, right: 0, bottom: 20),
child: const Text('PROPERTY APPRAISAL',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18),
fontWeight: FontWeight.bold, fontSize: 18),
textAlign: TextAlign.left),
),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Text(
@ -582,8 +592,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
),
const SizedBox(height: 15),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Text(
@ -604,8 +613,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
),
const SizedBox(height: 40),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Text(
@ -626,8 +634,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
),
const SizedBox(height: 40),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Text(
@ -648,8 +655,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
),
const SizedBox(height: 15),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Text(
@ -670,8 +676,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
),
const SizedBox(height: 15),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Text(
@ -685,8 +690,8 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
Container(
child: Text(
calculateConstructionCost(
double.parse(appraisal
.unitconstructSubtotal!),
double.parse(
appraisal.unitconstructSubtotal!),
double.parse(
appraisal.addItemsSubtotal!))
.toString()!,
@ -697,8 +702,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
),
const SizedBox(height: 40),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Text(
@ -714,10 +718,8 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
height: 25,
child: FormBuilderTextField(
name: 'depRate',
decoration:
normalTextFieldStyle("0.00", ""),
validator:
FormBuilderValidators.compose([]),
decoration: normalTextFieldStyle("0.00", ""),
validator: FormBuilderValidators.compose([]),
onChanged: (value) {
setState(() {
depRate = double.parse(value!);
@ -729,8 +731,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
),
const SizedBox(height: 15),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Text(
@ -757,8 +758,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
),
const SizedBox(height: 15),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Text(
@ -779,8 +779,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
),
const SizedBox(height: 15),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Text(
@ -836,13 +835,10 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
children: [
Container(
width: 100,
margin:
const EdgeInsets.only(
top: 15,
left: 15),
margin: const EdgeInsets.only(
top: 15, left: 15),
padding:
const EdgeInsets.all(
5.0),
const EdgeInsets.all(5.0),
child: const Text(
'Actual Use',
style: TextStyle(
@ -850,19 +846,15 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
FontWeight.bold,
fontSize: 13,
),
textAlign:
TextAlign.center,
textAlign: TextAlign.center,
),
),
Container(
width: 150,
margin:
const EdgeInsets.only(
top: 15,
left: 15),
margin: const EdgeInsets.only(
top: 15, left: 15),
padding:
const EdgeInsets.all(
5.0),
const EdgeInsets.all(5.0),
child: const Text(
'Market Value',
style: TextStyle(
@ -870,19 +862,15 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
FontWeight.bold,
fontSize: 13,
),
textAlign:
TextAlign.center,
textAlign: TextAlign.center,
),
),
Container(
width: 100,
margin:
const EdgeInsets.only(
top: 15,
left: 15),
margin: const EdgeInsets.only(
top: 15, left: 15),
padding:
const EdgeInsets.all(
5.0),
const EdgeInsets.all(5.0),
child: const Text(
'Ass. Level',
style: TextStyle(
@ -890,19 +878,15 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
FontWeight.bold,
fontSize: 13,
),
textAlign:
TextAlign.center,
textAlign: TextAlign.center,
),
),
Container(
width: 150,
margin:
const EdgeInsets.only(
top: 15,
left: 15),
margin: const EdgeInsets.only(
top: 15, left: 15),
padding:
const EdgeInsets.all(
5.0),
const EdgeInsets.all(5.0),
child: const Text(
'Ass. Value',
style: TextStyle(
@ -910,8 +894,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
FontWeight.bold,
fontSize: 13,
),
textAlign:
TextAlign.center,
textAlign: TextAlign.center,
),
),
],
@ -937,18 +920,14 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
const EdgeInsets
.all(5.0),
child: Text(
state.gendesc
.actualUse ??
"",
style:
TextStyle(
actualUse ?? "",
style: TextStyle(
fontWeight:
FontWeight
.bold,
fontSize: 13,
),
textAlign:
TextAlign
textAlign: TextAlign
.center,
),
),
@ -965,8 +944,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
child: Text(
NumberFormat
.currency(
locale:
'en-PH',
locale: 'en-PH',
symbol: "",
).format(
calculateMarketValue(
@ -975,18 +953,18 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
item,
double.parse(keys
.currentState
?.value['depRate'] ??
appraisal.depreciationRate)),
?.value[
'depRate'] ??
appraisal
.depreciationRate)),
),
style:
TextStyle(
style: TextStyle(
fontWeight:
FontWeight
.bold,
fontSize: 13,
),
textAlign:
TextAlign
textAlign: TextAlign
.center,
),
),
@ -1002,21 +980,22 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
.all(5.0),
child: Text(
assessmentLevel(
calculateMarketValue((totalArea * bldgUnitValue), item, double.parse(keys.currentState?.value['depRate'] ?? appraisal.depreciationRate))
calculateMarketValue(
(totalArea *
bldgUnitValue),
item,
double.parse(keys.currentState?.value['depRate'] ??
appraisal.depreciationRate))
.toString(),
state
.gendesc
.actualUse) +
actualUse) +
'%',
style:
TextStyle(
style: TextStyle(
fontWeight:
FontWeight
.bold,
fontSize: 13,
),
textAlign:
TextAlign
textAlign: TextAlign
.center,
),
),
@ -1033,8 +1012,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
child: Text(
NumberFormat
.currency(
locale:
'en-PH',
locale: 'en-PH',
symbol: "",
).format(assessmentValue(
calculateMarketValue(
@ -1042,21 +1020,16 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
bldgUnitValue),
item,
double.parse(keys.currentState?.value['depRate'] ??
appraisal
.depreciationRate))
appraisal.depreciationRate))
.toString(),
state
.gendesc
.actualUse)),
style:
TextStyle(
actualUse)),
style: TextStyle(
fontWeight:
FontWeight
.bold,
fontSize: 13,
),
textAlign:
TextAlign
textAlign: TextAlign
.center,
),
),
@ -1079,8 +1052,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
],
),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
CustomButton(
icon: const Icon(Icons.chevron_left_rounded,
@ -1093,8 +1065,7 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
},
),
CustomButton(
icon: const Icon(
Icons.chevron_right_rounded,
icon: const Icon(Icons.chevron_right_rounded,
color: Colors.white),
onPressed: () async {
final tempID =
@ -1105,14 +1076,13 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
var appraisals = PropertyAppraisalEdit(
id: 1,
bldgapprDetailsId: id,
unitconstructCost:
bldgUnitValue.toString(),
buildingCore: 'test',
unitconstructSubtotal:
(totalArea * bldgUnitValue)
unitconstructCost: bldgUnitValue
.toString(),
depreciationRate:
depRate.toString(),
buildingCore: 'test',
unitconstructSubtotal: (totalArea *
bldgUnitValue)
.toString(),
depreciationRate: depRate.toString(),
depreciationCost: calculateDepCost(
(totalArea * bldgUnitValue),
item,
@ -1123,16 +1093,15 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
addItemsSubtotal:
calculateAdditionalItems(item)
.toString(),
totalpercentDepreciation: (depRate * 100)
.toStringAsFixed(2),
totalpercentDepreciation:
(depRate * 100).toStringAsFixed(2),
marketValue: calculateMarketValue(
(totalArea * bldgUnitValue),
item,
depRate)
.toString(),
totalArea: totalArea.toString());
context
.read<PropertyAppraisalEditBloc>()
context.read<PropertyAppraisalEditBloc>()
..add(UpdatePropertyAppraisalEdit(
appraisalEdit: appraisals,
id: widget.tempId));
@ -1153,9 +1122,6 @@ class _PropertyAppraisalEditPage extends State<PropertyAppraisalEditPage> {
return Container();
});
}
return Container();
});
}
if (state is PropertyAppraisalEditErrorState) {
return SomethingWentWrong(
message: onError,

View File

@ -107,7 +107,6 @@ class _AddLandAppraisalModal extends State<AddLandAppraisalModal> {
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<AddLandAppraisalModal> {
),
),
],
)
),
],
),
),

View File

@ -239,7 +239,9 @@ class _LandAppraisal extends State<LandAppraisal> {
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [Expanded(child: AddLandAppraisalModal())],
children: [
Expanded(child: AddLandAppraisalModal()),
],
),
),
);

View File

@ -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<LandLocationAndBoundaries> {
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:

View File

@ -76,7 +76,6 @@ class _LandPropertyOwnerInfo extends State<LandPropertyOwnerInfo> {
flex: 1,
child: customTextField("Blk", "", "blk")),
]),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
@ -117,45 +116,6 @@ class _LandPropertyOwnerInfo extends State<LandPropertyOwnerInfo> {
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<AssessorsBloc>().add(AddFaas(faas: faas));
// // // _loadTempId();
// // _pageController.nextPage(
// // duration: _kDuration, curve: _kCurve);
// }),
// ),
SizedBox(
height: 30,
),

View File

@ -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<FormBuilderState> landKey = GlobalKey<FormBuilderState>();
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<EditLand> {
// 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!);
}
}
}

View File

@ -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<LandAppraisalEdit> {
// double _totalMarketValue(items) {
// double total = 0;
// items.forEach((row) {
// total += double.parse(row);
// });
// return total;
// }
void deleteItem(int itemId) {
context.read<LandAppraisalBloc>().add(DeleteLandAppraisal(id: itemId));
}
@override
Widget build(BuildContext context) {
return BlocConsumer<LandAppraisalBloc, LandAppraisalState>(
listener: (context, state) {
// TODO: implement listener
}, builder: (context, state) {
final state = context.watch<LandAppraisalBloc>().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<LandAppraisalBloc>()
.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<LandAppraisalBloc>().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<LandAppraisalBloc>().add(LoadLandAppraisal());
},
);
}
return Container();
});
}
}

View File

@ -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<LandLocationAndBoundariesEdit> {
@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<LandLocationEditBloc, LandLocationEditState>(
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<LandBoundariesEditBloc,
LandBoundariesEditState>(
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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<LandLocationEditBloc>()
..add(UpdateLandLocationEdit(
land_loc_edit: location,
id: widget.land.id!));
context.read<LandBoundariesEditBloc>()
..add(UpdateLandBoundariesEdit(
land_boundaries_edit:
boundaries,
id: widget.land.id!));
widget.NextBtn();
})
],
)
]),
),
),
);
}
if (state is LandBoundariesEditErrorState) {
return SomethingWentWrong(
message: onError,
onpressed: () {
context.read<LandBoundariesEditBloc>().add(
LoadLandBoundariesEdit(
land_boundaries_edit: LandPropertyBoundaries(),
id: widget.land.id!));
},
);
}
return Container();
},
);
}
;
if (state is LandLocationEditErrorState) {
return SomethingWentWrong(
message: onError,
onpressed: () {
context.read<LandLocationEditBloc>().add(LoadLandLocationEdit(
land_loc_edit: LandPropertyLoc(), id: widget.land.id!));
},
);
}
return Container();
},
),
),
);
}
}

View File

@ -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<OtherImprovementEditPage> {
// double _totalMarketValue(items) {
// double total = 0;
// items.forEach((row) {
// total += double.parse(row);
// });
// return total;
// }
void deleteItem(int itemId) {
context
.read<OtherImprovementsBloc>()
.add(DeleteOtherImprovement(id: itemId));
}
@override
Widget build(BuildContext context) {
return BlocConsumer<OtherImprovementsBloc, OtherImprovementsState>(
listener: (context, state) {
// TODO: implement listener
}, builder: (context, state) {
final state = context.watch<OtherImprovementsBloc>().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<OtherImprovementsBloc>()
.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<OtherImprovementsBloc>()
.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();
});
}
}

View File

@ -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<LandSignatoriesEdit> {
bool isTaxable = false;
bool isExempt = false;
final focus = FocusNode();
String _memoranda = "";
@override
Widget build(BuildContext context) {
return BlocConsumer<LandExtBloc, LandExtState>(
listener: (context, state) {
// TODO: implement listener
},
builder: (context, state) {
if (state is LandExtLoaded) {
return BlocConsumer<SignatoriesBloc, SignatoriesState>(
listener: (context, state) {
// TODO: implement listener
},
builder: (context, state) {
if (state is SignatoriesLoaded) {
final signatories = state.signatories;
return BlocConsumer<MemorandaBloc, MemorandaState>(
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<Signatories>(
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<Signatories>(
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<Signatories>(
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<LandExtBloc>()
..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();
},
);
}
}

View File

@ -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<LandPropertyAssessmentEditPage> {
// double _totalMarketValue(items) {
// double total = 0;
// items.forEach((row) {
// total += double.parse(row);
// });
// return total;
// }
void deleteItem(int itemId) {
context
.read<LandPropertyAssessmentBloc>()
.add(DeleteLandPropertyAssessment(id: itemId));
}
@override
Widget build(BuildContext context) {
return BlocConsumer<LandPropertyAssessmentBloc,
LandPropertyAssessmentState>(listener: (context, state) {
// TODO: implement listener
}, builder: (context, state) {
final state = context.watch<LandPropertyAssessmentBloc>().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<LandPropertyAssessmentBloc>()
.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<LandPropertyAssessmentBloc>()
.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();
});
}
}

View File

@ -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<FormBuilderState> landEditKey = GlobalKey<FormBuilderState>();
class LandPropertyOwnerInfoEdit extends StatefulWidget {
Function NextBtn;
LandPropertyOwner land;
LandPropertyOwnerInfoEdit(this.NextBtn, this.land);
@override
_LandPropertyOwnerInfoEdit createState() => _LandPropertyOwnerInfoEdit();
}
class _LandPropertyOwnerInfoEdit extends State<LandPropertyOwnerInfoEdit> {
final transaction_codes = ['New', 'Revision'];
@override
Widget build(BuildContext context) {
return BlocConsumer<LandPropertyOwnerInfoBloc, LandPropertyOwnerInfoState>(
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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<LandPropertyOwnerInfoBloc>().add(
UpdateLandPropertyOwner(
land_edit: land, id: widget.land.id!));
widget.NextBtn();
},
)
],
),
const SizedBox(
height: 20,
),
]),
)),
);
},
);
}
}

View File

@ -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<ValueAdjustmentEditPage> {
// double _totalMarketValue(items) {
// double total = 0;
// items.forEach((row) {
// total += double.parse(row);
// });
// return total;
// }
void deleteItem(int itemId) {
context
.read<LandValueAdjustmentsBloc>()
.add(DeleteLandValueAdjustments(id: itemId));
}
@override
Widget build(BuildContext context) {
return BlocConsumer<LandValueAdjustmentsBloc, LandValueAdjustmentsState>(
listener: (context, state) {
// TODO: implement listener
}, builder: (context, state) {
final state = context.watch<LandValueAdjustmentsBloc>().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<LandValueAdjustmentsBloc>()
.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<LandValueAdjustmentsBloc>()
.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();
});
}
}

View File

@ -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 <AdditionalItems>[],
// 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,

View File

@ -56,4 +56,57 @@ class LandBoundariesService {
}
return response;
}
Future<http.Response?> updateEdit(LandPropertyBoundaries data, id) async {
String path = Url.instance.getLandPropertyBoundaries();
Map<String, String> headers = {
'Content-Type': 'application/json; charset=UTF-8',
'X-Client-Key': xClientKey,
'X-Client-Secret': xClientKeySecret
};
Map<String, String> 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<LandPropertyBoundaries> fetchEdit(tempID) async {
String path = Url.instance.getLandPropertyBoundaries();
Map<String, String> headers = {
'Content-Type': 'application/json; charset=UTF-8',
'X-Client-Key': xClientKey,
'X-Client-Secret': xClientKeySecret
};
Map<String, String> 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<dynamic>;
final result = LandPropertyBoundaries.fromJson(
dataList[0] as Map<String, dynamic>);
return result;
} else {
print(response.reasonPhrase);
throw Exception(response.reasonPhrase);
}
} catch (e) {
throw e.toString();
}
}
}

View File

@ -55,4 +55,57 @@ class LandLocationService {
}
return response;
}
Future<http.Response?> updateEdit(LandPropertyLoc data, id) async {
String path = Url.instance.getLandPropertyLoc();
Map<String, String> headers = {
'Content-Type': 'application/json; charset=UTF-8',
'X-Client-Key': xClientKey,
'X-Client-Secret': xClientKeySecret
};
Map<String, String> 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<LandPropertyLoc> fetchEdit(tempID) async {
String path = Url.instance.getLandPropertyLoc();
Map<String, String> headers = {
'Content-Type': 'application/json; charset=UTF-8',
'X-Client-Key': xClientKey,
'X-Client-Secret': xClientKeySecret
};
Map<String, String> 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<dynamic>;
final result =
LandPropertyLoc.fromJson(dataList[0] as Map<String, dynamic>);
return result;
} else {
print(response.reasonPhrase);
throw Exception(response.reasonPhrase);
}
} catch (e) {
throw e.toString();
}
}
}

View File

@ -52,4 +52,24 @@ class LandServices {
}
return response;
}
Future<http.Response?> update(LandPropertyOwner data, id) async {
String path = Url.instance.getLandOwnerInfo();
Map<String, String> headers = {
'Content-Type': 'application/json; charset=UTF-8',
'X-Client-Key': xClientKey,
'X-Client-Secret': xClientKeySecret
};
Map<String, String> 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;
}
}