Add new mih text form field to Pat Prof: Claims

This commit is contained in:
2025-06-04 16:00:25 +02:00
parent 39052c178d
commit cb4117c355

View File

@@ -1,13 +1,16 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_apis/mih_claim_statement_generation_api.dart';
import 'package:mzansi_innovation_hub/mih_apis/mih_icd10_code_api.dart';
import 'package:mzansi_innovation_hub/mih_apis/mih_validation_services.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_date_input.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_inputs_and_buttons/mih_text_input.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart';
import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
import 'package:mzansi_innovation_hub/mih_objects/arguments.dart';
@@ -66,6 +69,7 @@ class _ClaimStatementWindowState extends State<ClaimStatementWindow> {
final ValueNotifier<String> medAid = ValueNotifier("");
List<ICD10Code> icd10codeList = [];
final FocusNode _searchFocusNode = FocusNode();
final _formKey = GlobalKey<FormState>();
void icd10SearchWindow(List<ICD10Code> codeList) {
showDialog(
@@ -81,6 +85,9 @@ class _ClaimStatementWindowState extends State<ClaimStatementWindow> {
Widget getWindowBody() {
return Column(
children: [
MihForm(
formKey: _formKey,
formFields: [
MIHDropdownField(
controller: _docTypeController,
hintText: "Document Type",
@@ -90,16 +97,20 @@ class _ClaimStatementWindowState extends State<ClaimStatementWindow> {
enableSearch: false,
),
const SizedBox(height: 10),
Text(
Center(
child: Text(
"Service Details",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,
fontSize: 25,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
color:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
Divider(color: MzanziInnovationHub.of(context)!.theme.secondaryColor()),
),
Divider(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor()),
const SizedBox(height: 10),
MIHDateField(
controller: _serviceDateController,
@@ -128,9 +139,10 @@ class _ClaimStatementWindowState extends State<ClaimStatementWindow> {
case 'Consultation':
returnWidget = Column(
children: [
MIHDropdownField(
SizedBox(
child: MIHDropdownField(
controller: _serviceDescOptionsController,
hintText: "Service Decription Options",
hintText: "Consultation Type",
dropdownOptions: const [
"General Consultation",
"Follow-Up Consultation",
@@ -141,42 +153,64 @@ class _ClaimStatementWindowState extends State<ClaimStatementWindow> {
editable: true,
enableSearch: false,
),
),
const SizedBox(height: 10),
],
);
case 'Procedure':
returnWidget = Column(
children: [
MIHTextField(
MihTextFormField(
fillColor: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
inputColor: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
controller: _prcedureNameController,
multiLineInput: false,
requiredText: true,
hintText: "Procedure Name",
editable: true,
required: true,
validator: (value) {
return MihValidationServices().isEmpty(value);
},
),
const SizedBox(height: 10),
// MIHDateField(
// controller: _procedureDateController,
// lableText: "Procedure Date",
// required: true,
// ),
// const SizedBox(height: 10),
MIHTextField(
MihTextFormField(
fillColor: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
inputColor: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
controller: _proceedureAdditionalInfoController,
multiLineInput: false,
requiredText: true,
hintText: "Additional Information",
editable: true,
required: true,
validator: (value) {
return MihValidationServices().isEmpty(value);
},
),
const SizedBox(height: 10),
const SizedBox(height: 15),
],
);
case 'Other':
returnWidget = Column(
children: [
MIHTextField(
MihTextFormField(
fillColor: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
inputColor: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
controller: _serviceDescOptionsController,
hintText: "Service Decription text",
editable: false,
required: true,
multiLineInput: false,
requiredText: true,
hintText: "Service Description Details",
validator: (value) {
return MihValidationServices().isEmpty(value);
},
),
const SizedBox(height: 10),
],
@@ -187,15 +221,31 @@ class _ClaimStatementWindowState extends State<ClaimStatementWindow> {
return returnWidget;
},
),
//const SizedBox(height: 10),
Column(
children: [
Align(
alignment: Alignment.centerLeft,
child: Text("ICD-10 Code & Description",
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!
.theme
.secondaryColor(),
)),
),
const SizedBox(height: 4),
MihSearchBar(
controller: _icd10CodeController,
hintText: "ICD-10 Code & Description",
hintText: "ICD-10 Search",
prefixIcon: Icons.search,
fillColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
hintColor: MzanziInnovationHub.of(context)!.theme.primaryColor(),
fillColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
hintColor:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
onPrefixIconTap: () {
MIHIcd10CodeApis.getIcd10Codes(_icd10CodeController.text, context)
MIHIcd10CodeApis.getIcd10Codes(
_icd10CodeController.text, context)
.then((result) {
icd10SearchWindow(result);
});
@@ -205,33 +255,52 @@ class _ClaimStatementWindowState extends State<ClaimStatementWindow> {
},
searchFocusNode: _searchFocusNode,
),
const SizedBox(height: 10),
MIHTextField(
controller: _amountController,
hintText: "Amount",
editable: true,
required: true,
],
),
Text(
const SizedBox(height: 10),
MihTextFormField(
fillColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
inputColor: MzanziInnovationHub.of(context)!.theme.primaryColor(),
controller: _amountController,
multiLineInput: false,
requiredText: true,
numberMode: true,
hintText: "Service Cost",
validator: (value) {
return MihValidationServices().isEmpty(value);
},
),
const SizedBox(height: 10),
Center(
child: Text(
"Additional Infomation",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,
fontSize: 25,
fontWeight: FontWeight.bold,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
color:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
),
),
Divider(color: MzanziInnovationHub.of(context)!.theme.secondaryColor()),
),
Divider(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor()),
const SizedBox(height: 10),
MIHTextField(
MihTextFormField(
fillColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
inputColor: MzanziInnovationHub.of(context)!.theme.primaryColor(),
controller: _preauthNoController,
multiLineInput: false,
requiredText: false,
hintText: "Pre-authorisation No.",
editable: true,
required: false,
),
const SizedBox(height: 15),
MihButton(
const SizedBox(height: 20),
Center(
child: MihButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
if (isInputValid()) {
MIHClaimStatementGenerationApi().generateClaimStatement(
ClaimStatementGenerationArguments(
@@ -275,22 +344,29 @@ class _ClaimStatementWindowState extends State<ClaimStatementWindow> {
showDialog(
context: context,
builder: (context) {
return const MIHErrorMessage(errorType: "Input Error");
return const MIHErrorMessage(
errorType: "Input Error");
},
);
}
}
},
buttonColor: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
buttonColor:
MzanziInnovationHub.of(context)!.theme.secondaryColor(),
width: 300,
child: Text(
"Generate",
style: TextStyle(
color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
],
),
],
);
}
@@ -312,19 +388,6 @@ class _ClaimStatementWindowState extends State<ClaimStatementWindow> {
}
bool isInputValid() {
switch (_serviceDescController.text) {
case 'Procedure':
if (_docTypeController.text.isEmpty ||
_serviceDateController.text.isEmpty ||
_icd10CodeController.text.isEmpty ||
_amountController.text.isEmpty ||
_prcedureNameController.text.isEmpty ||
_proceedureAdditionalInfoController.text.isEmpty) {
return false;
} else {
return true;
}
default:
if (_docTypeController.text.isEmpty ||
_serviceDateController.text.isEmpty ||
_icd10CodeController.text.isEmpty ||
@@ -335,7 +398,6 @@ class _ClaimStatementWindowState extends State<ClaimStatementWindow> {
return true;
}
}
}
String getUserTitle() {
if (widget.businessUser!.title == "Doctor") {