passo_mobile_app/lib/screens/passo/Building/edit_building/AddExtraItems.dart

595 lines
29 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:form_builder_validators/form_builder_validators.dart';
import 'package:intl/intl.dart';
import 'package:searchfield/searchfield.dart';
import 'package:unit2/bloc/passo/bulding/additional_item/additional_item_bloc.dart';
import 'package:unit2/bloc/passo/bulding/additional_items_edit/additional_items_edit_bloc.dart';
import 'package:unit2/model/passo/additional_items.dart';
import 'package:unit2/model/passo/class_components.dart';
import 'package:unit2/model/passo/unit_construct.dart';
import 'package:unit2/theme-data.dart/form-style.dart';
class AddExtraItemsEdit extends StatefulWidget {
final List<UnitConstruct> unit;
final List<ClassComponents> options;
final int tempId;
AddExtraItemsEdit(this.unit, this.options, this.tempId);
@override
_AddExtraItemsEdit createState() => _AddExtraItemsEdit();
}
class _AddExtraItemsEdit extends State<AddExtraItemsEdit> {
GlobalKey<FormBuilderState> formKey = GlobalKey<FormBuilderState>();
final focus = FocusNode();
double _computedValue = 0;
bool isPainted = false;
bool isSecondHand = false;
TextEditingController textEditingController = TextEditingController();
double _unitBase = 0;
int _areaValue = 0;
double _depValue = 0;
double _unitValue = 0;
double _marketValue = 0;
String _className = "";
int _classId = 0;
String _structureType = "";
bool _withoutBUCC = false;
int _notPaintedUnitVal = 0;
int _secondHandUnitVal = 0;
BoxDecoration box1() {
return const BoxDecoration(boxShadow: [
BoxShadow(color: Colors.black12, spreadRadius: 5, blurRadius: 5)
], color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(3)));
}
double _computeValue(double unitbase, double unitvalue, double area) {
// Compute some value based on the text here
return (unitbase * unitvalue) * area;
}
double _amountofDepreciation(unitVal, unitBase, area, depreciation) {
return ((unitVal * unitBase) * area) * depreciation;
}
double _adjustedMarketValue(unitVal, unitBase, area, depreciation) {
double depAmount = ((unitVal * unitBase) * area) * depreciation;
return ((unitVal * unitBase) * area) - depAmount;
}
double _totalMarketValue(unitVal, unitBase, area, depreciation, withBUCC,
className, painted, secondHand, paintedUnitVal, secondhandUntVal) {
if (withBUCC == false) {
if (painted == true || secondHand == true) {
final deductions = (paintedUnitVal + secondhandUntVal) / 100;
print(deductions);
return (((unitVal - deductions) * unitBase) * area);
} else {
return ((unitVal * unitBase) * area);
}
} else {
return (unitVal * area);
}
}
@override
Widget build(BuildContext context) {
return BlocBuilder<AdditionalItemsEditBloc, AdditionalItemsEditState>(
buildWhen: (previous, current) {
return false;
}, builder: (context, state) {
if (state is ShowAddItemsScreenEdit) {
return FormBuilder(
key: formKey,
onChanged: () {
formKey.currentState?.save();
},
autovalidateMode: AutovalidateMode.disabled,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 800,
child: SingleChildScrollView(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
margin: const EdgeInsets.only(
left: 0, top: 10, right: 0, bottom: 0),
child: FormBuilderDropdown(
name: 'extra_item',
autofocus: false,
decoration:
normalTextFieldStyle("Additional Item", ""),
items: widget.options
.map((e) => DropdownMenuItem(
value: e,
child: Text(e.componentName),
))
.toList(),
onChanged: (value) {
if (value!.minBaseUnitvalPercent != '0.00') {
setState(() {
_unitValue =
double.parse(value.minBaseUnitvalPercent);
_className = value.componentName;
_classId = value.id;
_withoutBUCC = value.withoutBucc;
});
formKey.currentState!.patchValue(
{'unitValue': value.minBaseUnitvalPercent});
}
if (value.maxBaseUnitvalPercent != '0.00') {
setState(() {
_unitValue =
double.parse(value.maxBaseUnitvalPercent);
_className = value.componentName;
_classId = value.id;
_withoutBUCC = value.withoutBucc;
});
formKey.currentState!.patchValue(
{'unitValue': value.maxBaseUnitvalPercent});
}
if (value.minUnitvalSqrmtr != '0.00') {
setState(() {
_unitValue =
double.parse(value.minUnitvalSqrmtr);
_className = value.componentName;
_classId = value.id;
_withoutBUCC = value.withoutBucc;
});
formKey.currentState!.patchValue(
{'unitValue': value.minUnitvalSqrmtr});
}
if (value.maxUnitvalSqrmtr != '0.00') {
setState(() {
_unitValue =
double.parse(value.maxUnitvalSqrmtr);
_className = value.componentName;
_classId = value.id;
_withoutBUCC = value.withoutBucc;
});
formKey.currentState!.patchValue(
{'unitValue': value.maxUnitvalSqrmtr});
}
if (value.minAddBaseunitval != '0.00') {
setState(() {
_unitValue =
double.parse(value.minAddBaseunitval);
_className = value.componentName;
_classId = value.id;
_withoutBUCC = value.withoutBucc;
});
formKey.currentState!.patchValue(
{'unitValue': value.minAddBaseunitval});
}
if (value.maxAddBaseunitval != '0.00') {
setState(() {
_unitValue =
double.parse(value.maxAddBaseunitval);
_className = value.componentName;
_classId = value.id;
_withoutBUCC = value.withoutBucc;
});
formKey.currentState!.patchValue(
{'unitValue': value.maxAddBaseunitval});
}
if (value.minDeductBaserate != '0.00') {
setState(() {
_unitValue =
double.parse(value.minDeductBaserate);
_className = value.componentName;
_classId = value.id;
_withoutBUCC = value.withoutBucc;
});
formKey.currentState!.patchValue(
{'unitValue': value.minDeductBaserate});
}
if (value.maxDeductBaserate != '0.00') {
setState(() {
_unitValue =
double.parse(value.maxDeductBaserate);
_className = value.componentName;
_classId = value.id;
_withoutBUCC = value.withoutBucc;
});
formKey.currentState!.patchValue(
{'unitValue': value.maxDeductBaserate});
}
},
),
),
const SizedBox(height: 10),
Container(
margin: const EdgeInsets.only(
left: 0, top: 10, right: 0, bottom: 0),
child: SizedBox(
height: 45,
child: SearchField(
itemHeight: 70,
suggestions: widget.unit
.map((UnitConstruct unit) =>
SearchFieldListItem(
unit.bldgType! +
' - ' +
unit.building,
item: unit,
child: ListTile(
title: Text(
unit.bldgType +
' - ' +
unit.building!.toUpperCase(),
overflow: TextOverflow.ellipsis,
),
)))
.toList(),
validator: FormBuilderValidators.required(
errorText: "This field is required"),
searchInputDecoration: normalTextFieldStyle(
"Structure Type", "")
.copyWith(
suffixIcon:
const Icon(Icons.arrow_drop_down)),
////agency suggestion tap
focusNode: focus,
suggestionState: Suggestion.expand,
onSuggestionTap: (unit) {
setState(() {
_unitBase =
double.parse(unit.item!.unitValue);
_structureType = unit.item!.bldgType +
' - ' +
unit.item!.building;
});
focus.unfocus();
},
),
),
),
// const SizedBox(height: 10),
// Container(
// margin: const EdgeInsets.only(
// left: 0, top: 10, right: 0, bottom: 0),
// child: FormBuilderDropdown(
// name: 'struc_type',
// autofocus: false,
// decoration:
// normalTextFieldStyle("Structure Type", ""),
// items: widget.unit
// .map((e) => DropdownMenuItem(
// value: e,
// child:
// Text(e.bldgType + " - " + e.building),
// ))
// .toList(),
// onChanged: (val) {
// setState(() {
// _unitBase = double.parse(val!.unitValue);
// _structureType = val.bldgType;
// });
// },
// ),
// ),
const SizedBox(height: 10),
Row(
children: [
Expanded(
flex: 1,
child: FormBuilderTextField(
name: 'unitValue',
decoration:
normalTextFieldStyle("Unit Value", ""),
validator: FormBuilderValidators.compose([]),
),
),
const SizedBox(width: 10),
Expanded(
flex: 1,
child: FormBuilderTextField(
name: 'areaValue',
decoration: normalTextFieldStyle("Area", ""),
validator: FormBuilderValidators.compose([]),
onChanged: (value) {
setState(() {
_areaValue = int.parse(value!);
});
},
),
),
],
),
// const SizedBox(height: 10),
// FormBuilderTextField(
// name: 'depRate',
// decoration:
// normalTextFieldStyle("Depreciation Rate", ""),
// validator: FormBuilderValidators.compose([]),
// onChanged: (value) {
// setState(() {
// _depValue = double.parse(value!);
// });
// },
// ),
// const SizedBox(height: 10),
// FormBuilderTextField(
// name: 'marketValue',
// decoration: normalTextFieldStyle(
// NumberFormat.currency(
// locale: 'en-PH', symbol: "₱")
// .format(_totalMarketValue(_unitValue,
// _unitBase, _areaValue, _depValue)),
// ""),
// validator: FormBuilderValidators.compose([]),
// onChanged: (value) {
// setState(() {
// _marketValue = double.parse(value!);
// });
// },
// ),
// const SizedBox(height: 10),
// Text('Amount of Depreciation'),
// const SizedBox(height: 5),
// Container(
// height: 45.0,
// width: double.infinity,
// decoration: BoxDecoration(
// color: Colors.white,
// border: Border.all(
// color: Colors.grey,
// width: 1.0,
// ),
// borderRadius: BorderRadius.circular(5.0),
// ),
// child: Align(
// alignment: Alignment.center,
// child: Text(NumberFormat.currency(
// locale: 'en-PH', symbol: "₱")
// .format(_amountofDepreciation(_unitValue,
// _unitBase, _areaValue, _depValue)))),
// ),
Visibility(
visible: !_withoutBUCC,
child: Column(
children: [
const SizedBox(height: 10),
Text('Building is not painted?'),
const SizedBox(height: 5),
Container(
child: Row(
children: [
Checkbox(
value: isPainted,
onChanged: (bool? value) {
setState(() {
isPainted = value!;
if (value == false) {
_notPaintedUnitVal = 0;
} else {
_notPaintedUnitVal = 10;
}
});
},
),
const SizedBox(width: 10),
Container(
height: 40.0,
width: 100,
decoration: BoxDecoration(
color: Colors.white,
border: Border.all(
color: Colors.grey,
width: 1.0,
),
borderRadius:
BorderRadius.circular(5.0),
),
child: Align(
alignment: Alignment.center,
child: Text(' - ' +
_notPaintedUnitVal.toString() +
'%')),
),
],
),
),
const SizedBox(height: 10),
Text('Uses second hand materials?'),
const SizedBox(height: 5),
Container(
child: Row(
children: [
Checkbox(
value: isSecondHand,
onChanged: (bool? value) {
setState(() {
isSecondHand = value!;
if (isSecondHand == false) {
_secondHandUnitVal = 0;
formKey.currentState!.patchValue(
{'secondHandMat': '0'});
} else {
_secondHandUnitVal = 5;
formKey.currentState!.patchValue(
{'secondHandMat': '5'});
}
});
},
),
const SizedBox(width: 10),
Row(
children: [
SizedBox(
height: 40,
width: 100,
child: FormBuilderTextField(
enabled: isSecondHand,
name: 'secondHandMat',
textAlign: TextAlign.center,
decoration: normalTextFieldStyle(
"Unit Value", ""),
validator:
FormBuilderValidators.compose(
[]),
onChanged: (value) {
// Check if the value is not null before parsing to double
if (value != null &&
value.isNotEmpty) {
setState(() {
_secondHandUnitVal =
int.parse(value);
});
} else {
// Handle the case when the value is empty or null
// For example, set _secondHandUnitVal to a default value or show an error message.
}
},
),
),
SizedBox(
height: 40,
width: 40,
child: Center(
child: Text(
'%',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold),
),
),
)
],
),
],
),
),
],
),
),
const SizedBox(height: 10),
Text('Market Value'),
const SizedBox(height: 5),
Container(
height: 45.0,
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
border: Border.all(
color: Colors.grey,
width: 1.0,
),
borderRadius: BorderRadius.circular(5.0),
),
child: Align(
alignment: Alignment.center,
child: Text(NumberFormat.currency(
locale: 'en-PH', symbol: "")
.format(_totalMarketValue(
_unitValue,
_unitBase,
_areaValue,
_depValue,
_withoutBUCC,
_className,
isPainted,
isSecondHand,
_notPaintedUnitVal,
_secondHandUnitVal)))),
),
const SizedBox(height: 10),
Row(
children: [
Container(
width: 120,
height: 60,
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () {
var itemss = AdditionalItems(
id: 1,
bldgapprDetailsId: widget.tempId,
classId: _classId,
className: _className,
structType: _structureType,
unitValue:
_withoutBUCC == true ? 0 : _unitValue,
baseUnitValue: _unitBase,
area: _areaValue,
marketValue:
(_unitValue * _unitBase) * _areaValue,
depreciationRate: _depValue,
adjustedMarketVal: _totalMarketValue(
_unitValue,
_unitBase,
_areaValue,
_depValue,
_withoutBUCC,
_className,
isPainted,
isSecondHand,
_notPaintedUnitVal,
_secondHandUnitVal),
actualUse: 'Test',
amtDepreciation: _amountofDepreciation(
_unitValue,
_unitBase,
_areaValue,
_depValue,
),
painted: true,
secondhand: true,
paintedUnitval: '1',
secondhandUnitval: '1');
context.read<AdditionalItemsEditBloc>().add(
AddAdditionalItemsEdit(items: itemss));
},
style: ElevatedButton.styleFrom(
primary: Colors.black,
),
child: const Text("Submit"),
),
),
SizedBox(
width:
5), // Use SizedBox for horizontal spacing in a Row
Container(
width: 120,
height: 60,
padding: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () {
context
.read<AdditionalItemBloc>()
.add(LoadAdditionalItems());
},
style: ElevatedButton.styleFrom(
primary: Colors.black,
),
child: const Text("Cancel"),
),
),
],
)
],
),
),
)));
}
return Container();
});
}
}