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