diff --git a/lib/core/enum/master_lookup_key.dart b/lib/core/enum/master_lookup_key.dart index f1ba1d46..58faa986 100644 --- a/lib/core/enum/master_lookup_key.dart +++ b/lib/core/enum/master_lookup_key.dart @@ -12,7 +12,13 @@ enum MasterKeysService { DiagnosisType, ICD10, TemperatureMethods, - Speciality + Speciality, + MedicationStrength, + MedicationDuration, + MedicationRoute, + MedicationFrequency, + MedicationDoseTime, + MedicationIndications, } extension SelectedMasterKeysService on MasterKeysService { @@ -45,7 +51,8 @@ extension SelectedMasterKeysService on MasterKeysService { break; case MasterKeysService.physiotherapyGoals: return 117; - break;case MasterKeysService.DiagnosisCondition: + break; + case MasterKeysService.DiagnosisCondition: return 34; break; case MasterKeysService.DiagnosisType: @@ -57,6 +64,23 @@ extension SelectedMasterKeysService on MasterKeysService { return 2005; case MasterKeysService.Speciality: return 10; + case MasterKeysService.MedicationStrength: + return 2100; + break; + case MasterKeysService.MedicationDuration: + return 118; + break; + case MasterKeysService.MedicationRoute: + return 32; + break; + case MasterKeysService.MedicationFrequency: + return 31; + break; + case MasterKeysService.MedicationDoseTime: + return 30; + break; + case MasterKeysService.MedicationIndications: + return 450; break; } } diff --git a/lib/core/service/base/lookup-service.dart b/lib/core/service/base/lookup-service.dart index 3bc6e61e..1acc8cec 100644 --- a/lib/core/service/base/lookup-service.dart +++ b/lib/core/service/base/lookup-service.dart @@ -11,6 +11,13 @@ class LookupService extends BaseService { List get allergySeverityList => _allergySeverityList; List _allergySeverityList = []; + List medicationStrengthList = []; + List medicationDurationList = []; + List medicationRouteList = []; + List medicationFrequencyList = []; + List medicationDoseTimeList = []; + List medicationIndicationsList = []; + List get historyFamilyList => _historyFamilyList; List _historyFamilyList = []; @@ -32,11 +39,11 @@ class LookupService extends BaseService { List _physicalExaminationList = []; // List listOfPhysiotherapyGoals = []; - List listOfDiagnosisType = []; - List listOfDiagnosisCondition = []; - List listOfICD10 = []; - List listOfTemperatureMethods = []; - List listOfSpeciality = []; + List listOfDiagnosisType = []; + List listOfDiagnosisCondition = []; + List listOfICD10 = []; + List listOfTemperatureMethods = []; + List listOfSpeciality = []; Future getMasterLookup(MasterKeysService masterKeys) async { hasError = false; @@ -110,42 +117,72 @@ class LookupService extends BaseService { }); break; - case MasterKeysService.DiagnosisType: - listOfDiagnosisType.clear(); + case MasterKeysService.DiagnosisType: + listOfDiagnosisType.clear(); entryList.forEach((v) { - listOfDiagnosisType - .add(MasterKeyModel.fromJson(v)); + listOfDiagnosisType.add(MasterKeyModel.fromJson(v)); }); break; - case MasterKeysService.DiagnosisCondition: - listOfDiagnosisCondition.clear(); + case MasterKeysService.DiagnosisCondition: + listOfDiagnosisCondition.clear(); entryList.forEach((v) { - listOfDiagnosisCondition - .add(MasterKeyModel.fromJson(v)); + listOfDiagnosisCondition.add(MasterKeyModel.fromJson(v)); }); break; case MasterKeysService.ICD10: listOfICD10.clear(); entryList.forEach((v) { - listOfICD10 - .add(MasterKeyModel.fromJson(v)); + listOfICD10.add(MasterKeyModel.fromJson(v)); }); break; case MasterKeysService.TemperatureMethods: listOfTemperatureMethods.clear(); entryList.forEach((v) { - listOfTemperatureMethods - .add(MasterKeyModel.fromJson(v)); + listOfTemperatureMethods.add(MasterKeyModel.fromJson(v)); }); break; case MasterKeysService.Speciality: listOfSpeciality.clear(); entryList.forEach((v) { - listOfSpeciality - .add(MasterKeyModel.fromJson(v)); + listOfSpeciality.add(MasterKeyModel.fromJson(v)); + }); + break; + case MasterKeysService.MedicationStrength: + medicationStrengthList.clear(); + entryList.forEach((v) { + medicationStrengthList.add(v); + }); + break; + case MasterKeysService.MedicationDuration: + medicationDurationList.clear(); + entryList.forEach((v) { + medicationDurationList.add(v); + }); + break; + case MasterKeysService.MedicationRoute: + medicationRouteList.clear(); + entryList.forEach((v) { + medicationRouteList.add(v); + }); + break; + case MasterKeysService.MedicationFrequency: + medicationFrequencyList.clear(); + entryList.forEach((v) { + medicationFrequencyList.add(v); + }); + break; + case MasterKeysService.MedicationDoseTime: + medicationDoseTimeList.clear(); + entryList.forEach((v) { + medicationDoseTimeList.add(v); + }); + break; + case MasterKeysService.MedicationIndications: + medicationIndicationsList.clear(); + entryList.forEach((v) { + medicationIndicationsList.add(v); }); break; } } - } diff --git a/lib/core/service/prescription_service.dart b/lib/core/service/prescription_service.dart index 9fcf4c2d..b7f9e80e 100644 --- a/lib/core/service/prescription_service.dart +++ b/lib/core/service/prescription_service.dart @@ -6,12 +6,13 @@ import 'package:doctor_app_flutter/core/model/post_prescrition_req_model.dart'; import 'package:doctor_app_flutter/core/model/search_drug_model.dart'; import 'package:doctor_app_flutter/core/model/search_drug_request_model.dart'; import 'package:doctor_app_flutter/core/service/base/base_service.dart'; +import 'package:doctor_app_flutter/core/service/base/lookup-service.dart'; import 'package:doctor_app_flutter/models/SOAP/GetAllergiesResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign-data.dart'; -class PrescriptionService extends BaseService { +class PrescriptionService extends LookupService { List _prescriptionList = List(); List get prescriptionList => _prescriptionList; List _drugsList = List(); diff --git a/lib/core/viewModel/medicine_view_model.dart b/lib/core/viewModel/medicine_view_model.dart index 23dd0306..5b7c2f6a 100644 --- a/lib/core/viewModel/medicine_view_model.dart +++ b/lib/core/viewModel/medicine_view_model.dart @@ -1,5 +1,7 @@ +import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/model/get_medication_response_model.dart'; +import 'package:doctor_app_flutter/core/service/SOAP_service.dart'; import 'package:doctor_app_flutter/core/service/medicine_service.dart'; import 'package:doctor_app_flutter/core/service/prescription_service.dart'; @@ -8,10 +10,25 @@ import 'base_view_model.dart'; class MedicineViewModel extends BaseViewModel { MedicineService _medicineService = locator(); + PrescriptionService _prescriptionService = locator(); + get pharmacyItemsList => _medicineService.pharmacyItemsList; + get pharmaciesList => _medicineService.pharmaciesList; - PrescriptionService _prescriptionService = locator(); + get medicationStrengthList => _prescriptionService.medicationStrengthList; + + get medicationDurationList => _prescriptionService.medicationDurationList; + + get medicationRouteList => _prescriptionService.medicationRouteList; + + get medicationFrequencyList => _prescriptionService.medicationFrequencyList; + + get medicationIndicationsList => + _prescriptionService.medicationIndicationsList; + + get medicationDoseTimeList => _prescriptionService.medicationDoseTimeList; + List get allMedicationList => _prescriptionService.allMedicationList; @@ -35,6 +52,72 @@ class MedicineViewModel extends BaseViewModel { setState(ViewState.Idle); } + Future getMedicationStrength() async { + setState(ViewState.Busy); + await _prescriptionService + .getMasterLookup(MasterKeysService.MedicationStrength); + if (_prescriptionService.hasError) { + error = _prescriptionService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + + Future getMedicationRoute() async { + setState(ViewState.Busy); + await _prescriptionService + .getMasterLookup(MasterKeysService.MedicationRoute); + if (_prescriptionService.hasError) { + error = _prescriptionService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + + Future getMedicationIndications() async { + setState(ViewState.Busy); + await _prescriptionService + .getMasterLookup(MasterKeysService.MedicationIndications); + if (_prescriptionService.hasError) { + error = _prescriptionService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + + Future getMedicationDoseTime() async { + setState(ViewState.Busy); + await _prescriptionService + .getMasterLookup(MasterKeysService.MedicationDoseTime); + if (_prescriptionService.hasError) { + error = _prescriptionService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + + Future getMedicationFrequency() async { + setState(ViewState.Busy); + await _prescriptionService + .getMasterLookup(MasterKeysService.MedicationFrequency); + if (_prescriptionService.hasError) { + error = _prescriptionService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + + Future getMedicationDuration() async { + setState(ViewState.Busy); + await _prescriptionService + .getMasterLookup(MasterKeysService.MedicationDuration); + if (_prescriptionService.hasError) { + error = _prescriptionService.error; + setState(ViewState.Error); + } else + setState(ViewState.Idle); + } + Future getPharmaciesList(int itemId) async { setState(ViewState.Busy); await _medicineService.getPharmaciesList(itemId); @@ -44,4 +127,13 @@ class MedicineViewModel extends BaseViewModel { } else setState(ViewState.Idle); } + + dynamic getLookupById(List list, String id) { + for (int i = 0; i < list.length; i++) { + if (list[i]['id'].toString() == id) { + return list[i]; + } + } + return null; + } } diff --git a/lib/screens/prescription/add_prescription_form.dart b/lib/screens/prescription/add_prescription_form.dart index 1d481904..a8279634 100644 --- a/lib/screens/prescription/add_prescription_form.dart +++ b/lib/screens/prescription/add_prescription_form.dart @@ -127,13 +127,7 @@ class _PrescriptionFormWidgetState extends State { dynamic indication; dynamic units; - List strengthList; - List routeList; - List frequencyList; - List durationList; - List doseTimeList; List indicationList; - List unitsList; String routeInatial = 'By Mouth'; //PatiantInformtion patient; @@ -142,111 +136,9 @@ class _PrescriptionFormWidgetState extends State { super.initState(); selectedType = 1; referToList = List(); - strengthList = List(); - routeList = List(); - frequencyList = List(); - durationList = List(); - doseTimeList = List(); - indicationList = List(); - unitsList = List(); - dynamic unit1 = {"id": 1, "name": "MG"}; - dynamic unit2 = {"id": 2, "name": "MCG"}; - dynamic unit3 = {"id": 3, "name": "GM"}; - dynamic regularOrder = {"id": 1, "name": "regular Order"}; - dynamic urgentOrder = {"id": 2, "name": "urgent Order"}; - dynamic strength1 = {"id": 1, "name": "1"}; - dynamic strength2 = {"id": 2, "name": "2"}; - dynamic strength3 = {"id": 3, "name": "3"}; - dynamic strength4 = {"id": 4, "name": "4"}; - dynamic strength5 = {"id": 5, "name": "5"}; - dynamic strength6 = {"id": 6, "name": "6"}; - dynamic strength7 = {"id": 7, "name": "7"}; - dynamic strength8 = {"id": 8, "name": "8"}; - dynamic strength9 = {"id": 9, "name": "9"}; - dynamic route1 = {"id": 7, "name": "By Mouth"}; - dynamic route2 = {"id": 10, "name": "Inhale by Mouth"}; - dynamic route3 = {"id": 15, "name": "for INJECTION"}; - dynamic route4 = {"id": 17, "name": "Drops"}; - dynamic route5 = {"id": 18, "name": "Rub On"}; - dynamic route6 = {"id": 20, "name": "Spary"}; - dynamic route7 = {"id": 27, "name": "In Both EYES"}; - dynamic route8 = {"id": 28, "name": "In Both Ears"}; - dynamic route9 = {"id": 32, "name": "Intramuscular"}; - dynamic route10 = {"id": 60, "name": "TRANSDERMAL"}; - dynamic route11 = {"id": 59, "name": "OROPHARYNGEAL"}; - dynamic route12 = {"id": 15, "name": "for INJECTION"}; - dynamic route13 = {"id": 58, "name": "SUBCUTANEOUS"}; - dynamic route14 = {"id": 57, "name": "NASOGASTRIC"}; - dynamic route15 = {"id": 56, "name": "IRRIGATION"}; - dynamic route16 = {"id": 55, "name": "INTRAVITREAL"}; - dynamic route17 = {"id": 54, "name": "INTRAVENOUS BOLUS"}; - dynamic route18 = {"id": 51, "name": "EPIDURAL"}; - dynamic route19 = {"id": 47, "name": "Parenteral"}; - dynamic route20 = {"id": 43, "name": "IM"}; - dynamic route21 = {"id": 42, "name": "IV"}; - dynamic route22 = {"id": 41, "name": "Sublingual"}; - dynamic route23 = {"id": 40, "name": "For Nebulization"}; - dynamic route24 = {"id": 39, "name": "Nasal"}; - dynamic route25 = {"id": 37, "name": "Inserted into Vagina"}; - dynamic route26 = {"id": 36, "name": "Inserted into Rectum"}; - dynamic route27 = {"id": 31, "name": "In Each Nostril"}; - dynamic frequency1 = {"id": 2, "name": "2 Times a day"}; - dynamic frequency2 = {"id": 3, "name": "3 Times a day"}; - dynamic frequency3 = {"id": 4, "name": "4 Times a day"}; - dynamic frequency4 = {"id": 8, "name": "As Needed"}; - dynamic frequency5 = {"id": 9, "name": "Bed Time"}; - dynamic frequency6 = {"id": 11, "name": "Every Other Day"}; - dynamic frequency7 = {"id": 29, "name": "Every Eight Hours"}; - dynamic frequency8 = {"id": 34, "name": "As Directed"}; - dynamic frequency9 = {"id": 22, "name": "Once Per Month"}; - dynamic frequency10 = {"id": 2, "name": "3 Times a day"}; - dynamic frequency11 = {"id": 21, "name": "Every 3 hours"}; - dynamic frequency12 = {"id": 20, "name": "Once a Week"}; - dynamic frequency13 = {"id": 12, "name": "Every Half Hour"}; - dynamic frequency14 = {"id": 10, "name": "4 Times a Day"}; - dynamic frequency15 = {"id": 24, "name": "Once Every 2 Months"}; - dynamic frequency16 = {"id": 25, "name": "Every One Hour"}; - dynamic frequency17 = {"id": 26, "name": "Every Two Hours"}; - dynamic frequency18 = {"id": 28, "name": "Every Six Hours"}; + indicationList = List(); - dynamic duration1 = {"id": 1, "name": "For 1 Day"}; - dynamic duration2 = {"id": 2, "name": "For 2 Days"}; - dynamic duration3 = {"id": 3, "name": "For 3 Days"}; - dynamic duration4 = {"id": 4, "name": "For 4 Days"}; - dynamic duration5 = {"id": 5, "name": "For 5 Days"}; - dynamic duration6 = {"id": 6, "name": "For 6 Days"}; - dynamic duration7 = {"id": 7, "name": "For 7 Days"}; - dynamic duration8 = {"id": 8, "name": "For 8 Days"}; - dynamic duration9 = {"id": 9, "name": "For 9 Days"}; - dynamic duration10 = {"id": 10, "name": "For 10 Days"}; - dynamic duration11 = {"id": 14, "name": "For 14 Days"}; - dynamic duration12 = {"id": 21, "name": "For 21 Days"}; - dynamic duration13 = {"id": 30, "name": "For 30 Days"}; - dynamic duration14 = {"id": 45, "name": "For 45 Days"}; - dynamic duration15 = {"id": 60, "name": "For 60 Days"}; - dynamic duration16 = {"id": 90, "name": "For 90 Days"}; - dynamic doseTime1 = {"id": 1, "name": "Before Meals"}; - dynamic doseTime2 = {"id": 2, "name": "After Meals"}; - dynamic doseTime3 = {"id": 3, "name": "With Meals"}; - dynamic doseTime4 = {"id": 4, "name": "In The Morning"}; - dynamic doseTime5 = {"id": 5, "name": "In the Evening"}; - dynamic doseTime6 = {"id": 6, "name": "After Supper"}; - dynamic doseTime7 = {"id": 7, "name": "With Supper"}; - dynamic doseTime8 = {"id": 8, "name": "Before Breakfast"}; - dynamic doseTime9 = {"id": 9, "name": "In the Afternoon"}; - dynamic doseTime10 = {"id": 10, "name": "While wake"}; - dynamic doseTime11 = {"id": 12, "name": "Any Time"}; - dynamic doseTime12 = {"id": 21, "name": "Bed Time"}; - dynamic doseTime13 = {"id": 13, "name": "30 Minutes Before Meals"}; - dynamic doseTime14 = {"id": 14, "name": "1 Hour Before Meals"}; - dynamic doseTime15 = {"id": 15, "name": "2 Hours After Meal"}; - dynamic doseTime16 = {"id": 16, "name": "After Breakfast"}; - dynamic doseTime17 = {"id": 17, "name": "Before Lunch"}; - dynamic doseTime18 = {"id": 18, "name": "After Lunch"}; - dynamic doseTime19 = {"id": 20, "name": "After Dinner"}; - dynamic doseTime20 = {"id": 21, "name": "Bed Time"}; - dynamic doseTime21 = {"id": 11, "name": "Now"}; dynamic indication1 = {"id": 545, "name": "Gingival Hyperplasia"}; dynamic indication2 = {"id": 546, "name": "Mild Drowsiness"}; dynamic indication3 = {"id": 547, "name": "Hypertrichosis"}; @@ -261,9 +153,6 @@ class _PrescriptionFormWidgetState extends State { dynamic indication9 = {"id": 554, "name": "Purpuric Dermatitis"}; dynamic indication10 = {"id": 555, "name": "Systemic Lupus Erythematosus"}; - unitsList.add(unit1); - unitsList.add(unit2); - unitsList.add(unit3); indicationList.add(indication1); indicationList.add(indication2); indicationList.add(indication3); @@ -274,102 +163,6 @@ class _PrescriptionFormWidgetState extends State { indicationList.add(indication8); indicationList.add(indication9); indicationList.add(indication10); - - doseTimeList.add(doseTime1); - doseTimeList.add(doseTime2); - doseTimeList.add(doseTime3); - doseTimeList.add(doseTime4); - doseTimeList.add(doseTime5); - doseTimeList.add(doseTime6); - doseTimeList.add(doseTime7); - doseTimeList.add(doseTime8); - doseTimeList.add(doseTime9); - doseTimeList.add(doseTime10); - doseTimeList.add(doseTime11); - doseTimeList.add(doseTime12); - doseTimeList.add(doseTime13); - doseTimeList.add(doseTime14); - doseTimeList.add(doseTime15); - doseTimeList.add(doseTime16); - doseTimeList.add(doseTime17); - doseTimeList.add(doseTime18); - doseTimeList.add(doseTime19); - doseTimeList.add(doseTime20); - doseTimeList.add(doseTime21); - - doseTimeList.add(doseTime12); - frequencyList.add(frequency1); - frequencyList.add(frequency2); - frequencyList.add(frequency3); - frequencyList.add(frequency4); - frequencyList.add(frequency5); - frequencyList.add(frequency6); - frequencyList.add(frequency7); - frequencyList.add(frequency8); - frequencyList.add(frequency9); - frequencyList.add(frequency10); - frequencyList.add(frequency11); - frequencyList.add(frequency12); - frequencyList.add(frequency13); - frequencyList.add(frequency14); - frequencyList.add(frequency15); - frequencyList.add(frequency16); - frequencyList.add(frequency17); - frequencyList.add(frequency18); - routeList.add(route1); - routeList.add(route2); - routeList.add(route3); - routeList.add(route4); - routeList.add(route5); - routeList.add(route6); - routeList.add(route7); - routeList.add(route8); - routeList.add(route9); - routeList.add(route10); - routeList.add(route11); - routeList.add(route12); - routeList.add(route13); - routeList.add(route14); - routeList.add(route15); - routeList.add(route16); - routeList.add(route17); - routeList.add(route18); - routeList.add(route19); - routeList.add(route20); - routeList.add(route21); - routeList.add(route22); - routeList.add(route23); - routeList.add(route24); - routeList.add(route25); - routeList.add(route26); - routeList.add(route27); - strengthList.add(strength1); - strengthList.add(strength2); - strengthList.add(strength3); - strengthList.add(strength4); - strengthList.add(strength5); - strengthList.add(strength6); - strengthList.add(strength7); - strengthList.add(strength8); - strengthList.add(strength9); - durationList.add(duration1); - durationList.add(duration2); - durationList.add(duration3); - durationList.add(duration4); - durationList.add(duration5); - durationList.add(duration6); - durationList.add(duration7); - durationList.add(duration8); - durationList.add(duration9); - durationList.add(duration10); - durationList.add(duration11); - durationList.add(duration12); - durationList.add(duration13); - durationList.add(duration14); - durationList.add(duration15); - durationList.add(duration16); - referToList.add(regularOrder); - referToList.add(urgentOrder); } setSelectedType(int val) { @@ -388,6 +181,12 @@ class _PrescriptionFormWidgetState extends State { return BaseView( onModelReady: (model) async { await model.getMedicationList(); + await model.getMedicationStrength(); + await model.getMedicationDuration(); + await model.getMedicationRoute(); + await model.getMedicationFrequency(); + await model.getMedicationDoseTime(); + await model.getMedicationIndications(); }, builder: (BuildContext context, MedicineViewModel model, Widget child) => NetworkBaseView( @@ -564,12 +363,14 @@ class _PrescriptionFormWidgetState extends State { MediaQuery.of(context).size.width * 0.350, child: InkWell( - onTap: unitsList != null + onTap: model.medicationStrengthList != + null ? () { ListSelectDialog dialog = ListSelectDialog( - list: unitsList, - attributeName: 'name', + list: model + .medicationStrengthList, + attributeName: 'nameEn', attributeValueId: 'id', okText: TranslationBase.of( context) @@ -596,7 +397,7 @@ class _PrescriptionFormWidgetState extends State { textFieldSelectorDecoration( 'UNIT Type', units != null - ? units['name'] + ? units['nameEn'] : null, true), enabled: false, @@ -610,12 +411,12 @@ class _PrescriptionFormWidgetState extends State { Container( height: screenSize.height * 0.070, child: InkWell( - onTap: routeList != null + onTap: model.medicationRouteList != null ? () { ListSelectDialog dialog = ListSelectDialog( - list: routeList, - attributeName: 'name', + list: model.medicationRouteList, + attributeName: 'nameEn', attributeValueId: 'id', okText: TranslationBase.of(context) @@ -642,7 +443,9 @@ class _PrescriptionFormWidgetState extends State { child: TextField( decoration: textFieldSelectorDecoration( TranslationBase.of(context).route, - route != null ? route['name'] : null, + route != null + ? route['nameEn'] + : null, true), enabled: false, ), @@ -652,12 +455,13 @@ class _PrescriptionFormWidgetState extends State { Container( height: screenSize.height * 0.070, child: InkWell( - onTap: frequencyList != null + onTap: model.medicationFrequencyList != null ? () { ListSelectDialog dialog = ListSelectDialog( - list: frequencyList, - attributeName: 'name', + list: + model.medicationFrequencyList, + attributeName: 'nameEn', attributeValueId: 'id', okText: TranslationBase.of(context) @@ -681,7 +485,7 @@ class _PrescriptionFormWidgetState extends State { decoration: textFieldSelectorDecoration( TranslationBase.of(context).frequency, frequency != null - ? frequency['name'] + ? frequency['nameEn'] : null, true), enabled: false, @@ -692,12 +496,13 @@ class _PrescriptionFormWidgetState extends State { Container( height: screenSize.height * 0.070, child: InkWell( - onTap: doseTimeList != null + onTap: model.medicationDoseTimeList != null ? () { ListSelectDialog dialog = ListSelectDialog( - list: doseTimeList, - attributeName: 'name', + list: + model.medicationDoseTimeList, + attributeName: 'nameEn', attributeValueId: 'id', okText: TranslationBase.of(context) @@ -721,7 +526,7 @@ class _PrescriptionFormWidgetState extends State { decoration: textFieldSelectorDecoration( TranslationBase.of(context).doseTime, doseTime != null - ? doseTime['name'] + ? doseTime['nameEn'] : null, true), enabled: false, @@ -795,12 +600,13 @@ class _PrescriptionFormWidgetState extends State { Container( height: screenSize.height * 0.070, child: InkWell( - onTap: durationList != null + onTap: model.medicationDurationList != null ? () { ListSelectDialog dialog = ListSelectDialog( - list: durationList, - attributeName: 'name', + list: + model.medicationDurationList, + attributeName: 'nameEn', attributeValueId: 'id', okText: TranslationBase.of(context) @@ -824,7 +630,7 @@ class _PrescriptionFormWidgetState extends State { decoration: textFieldSelectorDecoration( TranslationBase.of(context).duration, duration != null - ? duration['name'] + ? duration['nameEn'] : null, true), enabled: false, diff --git a/lib/screens/prescription/prescription_screen.dart b/lib/screens/prescription/prescription_screen.dart index 290aadca..c7c4c60e 100644 --- a/lib/screens/prescription/prescription_screen.dart +++ b/lib/screens/prescription/prescription_screen.dart @@ -179,7 +179,6 @@ class _NewPrescriptionScreenState extends State { model.prescriptionList[0] .rowcount, (index) => Container( - //height: 240, child: Column( children: [ Row( diff --git a/lib/screens/prescription/update_prescription_form.dart b/lib/screens/prescription/update_prescription_form.dart index 01986813..5c7c6e76 100644 --- a/lib/screens/prescription/update_prescription_form.dart +++ b/lib/screens/prescription/update_prescription_form.dart @@ -2,14 +2,17 @@ import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/model/post_prescrition_req_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; +import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -60,551 +63,426 @@ class _UpdatePrescriptionFormState extends State { dynamic updatedDuration; dynamic units; - List doseTimeList; - List routeList; - List frequencyList; - List durationList; - List unitsList; - @override void initState() { super.initState(); - routeList = List(); - doseTimeList = List(); - frequencyList = List(); - durationList = List(); - unitsList = List(); - - dynamic unit1 = {"id": 1, "name": "MG"}; - dynamic unit2 = {"id": 2, "name": "MCG"}; - dynamic unit3 = {"id": 3, "name": "GM"}; - dynamic frequency1 = {"id": 2, "name": "2 Times a day"}; - dynamic frequency2 = {"id": 3, "name": "3 Times a day"}; - dynamic frequency3 = {"id": 4, "name": "4 Times a day"}; - dynamic frequency4 = {"id": 8, "name": "As Needed"}; - dynamic frequency5 = {"id": 9, "name": "Bed Time"}; - dynamic frequency6 = {"id": 11, "name": "Every Other Day"}; - dynamic frequency7 = {"id": 29, "name": "Every Eight Hours"}; - dynamic frequency8 = {"id": 34, "name": "As Directed"}; - dynamic frequency9 = {"id": 22, "name": "Once Per Month"}; - dynamic frequency10 = {"id": 2, "name": "3 Times a day"}; - dynamic frequency11 = {"id": 21, "name": "Every 3 hours"}; - dynamic frequency12 = {"id": 20, "name": "Once a Week"}; - dynamic frequency13 = {"id": 12, "name": "Every Half Hour"}; - dynamic frequency14 = {"id": 10, "name": "4 Times a Day"}; - dynamic frequency15 = {"id": 24, "name": "Once Every 2 Months"}; - dynamic frequency16 = {"id": 25, "name": "Every One Hour"}; - dynamic frequency17 = {"id": 26, "name": "Every Two Hours"}; - dynamic frequency18 = {"id": 28, "name": "Every Six Hours"}; - dynamic doseTime1 = {"id": 1, "name": "Before Meals"}; - dynamic doseTime2 = {"id": 2, "name": "After Meals"}; - dynamic doseTime3 = {"id": 3, "name": "With Meals"}; - dynamic doseTime4 = {"id": 4, "name": "In The Morning"}; - dynamic doseTime5 = {"id": 5, "name": "In the Evening"}; - dynamic doseTime6 = {"id": 6, "name": "After Supper"}; - dynamic doseTime7 = {"id": 7, "name": "With Supper"}; - dynamic doseTime8 = {"id": 8, "name": "Before Breakfast"}; - dynamic doseTime9 = {"id": 9, "name": "In the Afternoon"}; - dynamic doseTime10 = {"id": 10, "name": "While wake"}; - dynamic doseTime11 = {"id": 12, "name": "Any Time"}; - dynamic doseTime12 = {"id": 21, "name": "Bed Time"}; - dynamic doseTime13 = {"id": 13, "name": "30 Minutes Before Meals"}; - dynamic doseTime14 = {"id": 14, "name": "1 Hour Before Meals"}; - dynamic doseTime15 = {"id": 15, "name": "2 Hours After Meal"}; - dynamic doseTime16 = {"id": 16, "name": "After Breakfast"}; - dynamic doseTime17 = {"id": 17, "name": "Before Lunch"}; - dynamic doseTime18 = {"id": 18, "name": "After Lunch"}; - dynamic doseTime19 = {"id": 20, "name": "After Dinner"}; - dynamic doseTime20 = {"id": 21, "name": "Bed Time"}; - dynamic doseTime21 = {"id": 11, "name": "Now"}; - dynamic route1 = {"id": 7, "name": "By Mouth"}; - dynamic route2 = {"id": 10, "name": "Inhale by Mouth"}; - dynamic route3 = {"id": 15, "name": "for INJECTION"}; - dynamic route4 = {"id": 17, "name": "Drops"}; - dynamic route5 = {"id": 18, "name": "Rub On"}; - dynamic route6 = {"id": 20, "name": "Spary"}; - dynamic route7 = {"id": 27, "name": "In Both EYES"}; - dynamic route8 = {"id": 28, "name": "In Both Ears"}; - dynamic route9 = {"id": 32, "name": "Intramuscular"}; - dynamic route10 = {"id": 60, "name": "TRANSDERMAL"}; - dynamic route11 = {"id": 59, "name": "OROPHARYNGEAL"}; - dynamic route12 = {"id": 15, "name": "for INJECTION"}; - dynamic route13 = {"id": 58, "name": "SUBCUTANEOUS"}; - dynamic route14 = {"id": 57, "name": "NASOGASTRIC"}; - dynamic route15 = {"id": 56, "name": "IRRIGATION"}; - dynamic route16 = {"id": 55, "name": "INTRAVITREAL"}; - dynamic route17 = {"id": 54, "name": "INTRAVENOUS BOLUS"}; - dynamic route18 = {"id": 51, "name": "EPIDURAL"}; - dynamic route19 = {"id": 47, "name": "Parenteral"}; - dynamic route20 = {"id": 43, "name": "IM"}; - dynamic route21 = {"id": 42, "name": "IV"}; - dynamic route22 = {"id": 41, "name": "Sublingual"}; - dynamic route23 = {"id": 40, "name": "For Nebulization"}; - dynamic route24 = {"id": 39, "name": "Nasal"}; - dynamic route25 = {"id": 37, "name": "Inserted into Vagina"}; - dynamic route26 = {"id": 36, "name": "Inserted into Rectum"}; - dynamic route27 = {"id": 31, "name": "In Each Nostril"}; - dynamic duration1 = {"id": 1, "name": "For 1 Day"}; - dynamic duration2 = {"id": 2, "name": "For 2 Days"}; - dynamic duration3 = {"id": 3, "name": "For 3 Days"}; - dynamic duration4 = {"id": 4, "name": "For 4 Days"}; - dynamic duration5 = {"id": 5, "name": "For 5 Days"}; - dynamic duration6 = {"id": 6, "name": "For 6 Days"}; - dynamic duration7 = {"id": 7, "name": "For 7 Days"}; - dynamic duration8 = {"id": 8, "name": "For 8 Days"}; - dynamic duration9 = {"id": 9, "name": "For 9 Days"}; - dynamic duration10 = {"id": 10, "name": "For 10 Days"}; - dynamic duration11 = {"id": 14, "name": "For 14 Days"}; - dynamic duration12 = {"id": 21, "name": "For 21 Days"}; - dynamic duration13 = {"id": 30, "name": "For 30 Days"}; - dynamic duration14 = {"id": 45, "name": "For 45 Days"}; - dynamic duration15 = {"id": 60, "name": "For 60 Days"}; - dynamic duration16 = {"id": 90, "name": "For 90 Days"}; - - durationList.add(duration1); - durationList.add(duration2); - durationList.add(duration3); - durationList.add(duration4); - durationList.add(duration5); - durationList.add(duration6); - durationList.add(duration7); - durationList.add(duration8); - durationList.add(duration9); - durationList.add(duration10); - durationList.add(duration11); - durationList.add(duration12); - durationList.add(duration13); - durationList.add(duration14); - durationList.add(duration15); - durationList.add(duration16); - frequencyList.add(frequency1); - frequencyList.add(frequency2); - frequencyList.add(frequency3); - frequencyList.add(frequency4); - frequencyList.add(frequency5); - frequencyList.add(frequency6); - frequencyList.add(frequency7); - frequencyList.add(frequency8); - frequencyList.add(frequency9); - frequencyList.add(frequency10); - frequencyList.add(frequency11); - frequencyList.add(frequency12); - frequencyList.add(frequency13); - frequencyList.add(frequency14); - frequencyList.add(frequency15); - frequencyList.add(frequency16); - frequencyList.add(frequency17); - frequencyList.add(frequency18); - doseTimeList.add(doseTime1); - doseTimeList.add(doseTime2); - doseTimeList.add(doseTime3); - doseTimeList.add(doseTime4); - doseTimeList.add(doseTime5); - doseTimeList.add(doseTime6); - doseTimeList.add(doseTime7); - doseTimeList.add(doseTime8); - doseTimeList.add(doseTime9); - doseTimeList.add(doseTime10); - doseTimeList.add(doseTime11); - doseTimeList.add(doseTime12); - doseTimeList.add(doseTime13); - doseTimeList.add(doseTime14); - doseTimeList.add(doseTime15); - doseTimeList.add(doseTime16); - doseTimeList.add(doseTime17); - doseTimeList.add(doseTime18); - doseTimeList.add(doseTime19); - doseTimeList.add(doseTime20); - doseTimeList.add(doseTime21); - routeList.add(route1); - routeList.add(route2); - routeList.add(route3); - routeList.add(route4); - routeList.add(route5); - routeList.add(route6); - routeList.add(route7); - routeList.add(route8); - routeList.add(route9); - routeList.add(route10); - routeList.add(route11); - routeList.add(route12); - routeList.add(route13); - routeList.add(route14); - routeList.add(route15); - routeList.add(route16); - routeList.add(route17); - routeList.add(route18); - routeList.add(route19); - routeList.add(route20); - routeList.add(route21); - routeList.add(route22); - routeList.add(route23); - routeList.add(route24); - routeList.add(route25); - routeList.add(route26); - routeList.add(route27); - unitsList.add(unit1); - unitsList.add(unit2); - unitsList.add(unit3); } @override Widget build(BuildContext context) { return StatefulBuilder(builder: (BuildContext context, StateSetter setState /*You can rename this!*/) { - return DraggableScrollableSheet( - initialChildSize: 0.90, - maxChildSize: 0.90, - minChildSize: 0.6, - builder: (BuildContext context, ScrollController scrollController) { - return Container( - height: MediaQuery.of(context).size.height * 1.0, - child: Form( - child: Padding( - padding: - EdgeInsets.symmetric(horizontal: 20.0, vertical: 12.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText( - widget.drugName.toUpperCase(), - fontWeight: FontWeight.w900, - ), - SizedBox( - height: 10.0, - ), - Column( + return BaseView( + onModelReady: (model) async { + await model.getMedicationList(); + await model.getMedicationStrength(); + await model.getMedicationDuration(); + await model.getMedicationRoute(); + await model.getMedicationFrequency(); + await model.getMedicationDoseTime(); + await model.getMedicationIndications(); + route = model.getLookupById(model.medicationRouteList, widget.route); + doseTime = + model.getLookupById(model.medicationDoseTimeList, widget.dose); + updatedDuration = model.getLookupById( + model.medicationDurationList, widget.duration); + units = model.getLookupById( + model.medicationStrengthList, widget.doseUnit); + frequencyUpdate = model.getLookupById( + model.medicationFrequencyList, widget.frequency); + }, + builder: + (BuildContext context, MedicineViewModel model, Widget child) => + NetworkBaseView( + baseViewModel: model, + child: DraggableScrollableSheet( + initialChildSize: 0.90, + maxChildSize: 0.90, + minChildSize: 0.6, + builder: + (BuildContext context, ScrollController scrollController) { + return Container( + height: MediaQuery.of(context).size.height * 1.0, + child: Form( + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: 20.0, vertical: 12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Container( - height: - MediaQuery.of(context).size.height * 0.060, - width: double.infinity, - child: Row( - children: [ - Container( - width: MediaQuery.of(context).size.width * - 0.500, - child: TextFields( - inputFormatters: [ - LengthLimitingTextInputFormatter(4) - ], - hintText: - TranslationBase.of(context).strength, - controller: strengthController, - keyboardType: TextInputType.number, - onChanged: (String value) { - setState(() { - strengthChar = value.length; - }); - if (strengthChar >= 4) { - DrAppToastMsg.showErrorToast( - "Only 4 Digits allowed for strength"); - } - }, - // validator: (value) { - // if (value.isEmpty && - // strengthController.text.length > - // 4) - // return TranslationBase.of(context) - // .emptyMessage; - // else - // return null; - // }, - ), - ), - SizedBox( - width: 10.0, - ), - Container( - width: MediaQuery.of(context).size.width * - 0.3700, - child: InkWell( - onTap: unitsList != null - ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: unitsList, - attributeName: 'name', - attributeValueId: 'id', - okText: - TranslationBase.of(context) - .ok, - okFunction: (selectedValue) { - setState(() { - units = selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: - (BuildContext context) { - return dialog; - }, - ); - } - : null, - child: TextField( - decoration: textFieldSelectorDecoration( - 'UNIT Type', - units != null - ? units['name'] - : null, - true), - enabled: false, - ), - ), - ), - ], - ), + AppText( + widget.drugName.toUpperCase(), + fontWeight: FontWeight.w900, ), SizedBox( - height: 12, + height: 10.0, ), - Container( - height: - MediaQuery.of(context).size.height * 0.070, - child: InkWell( - onTap: routeList != null - ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: routeList, - attributeName: 'name', - attributeValueId: 'id', - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { + Column( + children: [ + Container( + height: MediaQuery.of(context).size.height * + 0.060, + width: double.infinity, + child: Row( + children: [ + Container( + width: + MediaQuery.of(context).size.width * + 0.500, + child: TextFields( + inputFormatters: [ + LengthLimitingTextInputFormatter(4) + ], + hintText: TranslationBase.of(context) + .strength, + controller: strengthController, + keyboardType: TextInputType.number, + onChanged: (String value) { setState(() { - route = selectedValue; + strengthChar = value.length; }); - if (route == null) { - route = route['id']; + if (strengthChar >= 4) { + DrAppToastMsg.showErrorToast( + "Only 4 Digits allowed for strength"); } }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - child: TextField( - decoration: textFieldSelectorDecoration( - 'Route', - route != null ? route['name'] : null, - true), - enabled: false, + // validator: (value) { + // if (value.isEmpty && + // strengthController.text.length > + // 4) + // return TranslationBase.of(context) + // .emptyMessage; + // else + // return null; + // }, + ), + ), + SizedBox( + width: 10.0, + ), + Container( + width: + MediaQuery.of(context).size.width * + 0.3700, + child: InkWell( + onTap: model.medicationStrengthList != + null + ? () { + ListSelectDialog dialog = + ListSelectDialog( + list: model + .medicationStrengthList, + attributeName: 'nameEn', + attributeValueId: 'id', + okText: TranslationBase.of( + context) + .ok, + okFunction: + (selectedValue) { + setState(() { + units = selectedValue; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: + (BuildContext context) { + return dialog; + }, + ); + } + : null, + child: TextField( + decoration: + textFieldSelectorDecoration( + 'UNIT Type', + units != null + ? units['nameEn'] + : null, + true), + enabled: false, + ), + ), + ), + ], + ), ), - ), - ), - SizedBox( - height: 12.0, - ), - Container( - height: - MediaQuery.of(context).size.height * 0.070, - child: InkWell( - onTap: doseTimeList != null - ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: doseTimeList, - attributeName: 'name', - attributeValueId: 'id', - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - doseTime = selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - child: TextField( - decoration: textFieldSelectorDecoration( - TranslationBase.of(context).doseTime, - doseTime != null - ? doseTime['name'] - : null, - true), - enabled: false, + SizedBox( + height: 12, ), - ), - ), - SizedBox( - height: 12.0, - ), - Container( - height: - MediaQuery.of(context).size.height * 0.070, - child: InkWell( - onTap: frequencyList != null - ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: frequencyList, - attributeName: 'name', - attributeValueId: 'id', - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - frequencyUpdate = selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - child: TextField( - decoration: textFieldSelectorDecoration( - TranslationBase.of(context).frequency, - frequencyUpdate != null - ? frequencyUpdate['name'] - : null, - true), - enabled: false, + Container( + height: MediaQuery.of(context).size.height * + 0.070, + child: InkWell( + onTap: model.medicationRouteList != null + ? () { + ListSelectDialog dialog = + ListSelectDialog( + list: model.medicationRouteList, + attributeName: 'nameEn', + attributeValueId: 'id', + okText: + TranslationBase.of(context) + .ok, + okFunction: (selectedValue) { + setState(() { + route = selectedValue; + }); + if (route == null) { + route = route['id']; + } + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + } + : null, + child: TextField( + decoration: textFieldSelectorDecoration( + 'Route', + route != null + ? route['nameEn'] + : null, + true), + enabled: false, + ), + ), ), - ), - ), - SizedBox( - height: 12.0, - ), - Container( - height: - MediaQuery.of(context).size.height * 0.070, - child: InkWell( - onTap: durationList != null - ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: durationList, - attributeName: 'name', - attributeValueId: 'id', - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - updatedDuration = selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - child: TextField( - decoration: textFieldSelectorDecoration( - TranslationBase.of(context).duration, - updatedDuration != null - ? updatedDuration['name'].toString() - : null, - true), - enabled: false, + SizedBox( + height: 12.0, ), - ), - ), - SizedBox( - height: 12.0, - ), - Container( - decoration: BoxDecoration( - borderRadius: - BorderRadius.all(Radius.circular(6.0)), - border: Border.all( - width: 1.0, color: HexColor("#CCCCCC"))), - child: TextFields( - hintText: widget.remarks, - controller: remarksController, - maxLines: 7, - minLines: 4, - ), - ), - SizedBox( - height: 12.0, - ), - SizedBox( - height: MediaQuery.of(context).size.height * 0.12, - ), - Container( - margin: EdgeInsets.all( - SizeConfig.widthMultiplier * 2), - child: Wrap( - alignment: WrapAlignment.center, - children: [ - AppButton( - title: 'update prescription'.toUpperCase(), - onPressed: () { - updatePrescription( - newDoseStreangth: - strengthController.text.isNotEmpty - ? strengthController.text - : widget.doseStreangth, - newUnit: units != null - ? units['id'].toString() - : widget.doseUnit, - doseUnit: widget.doseUnit, - doseStreangth: widget.doseStreangth, - duration: widget.duration, - startDate: widget.startDate, - doseId: widget.dose, - frequencyId: widget.frequency, - routeId: widget.route, - patient: widget.patient, - model: widget.model, - newDuration: updatedDuration != null - ? updatedDuration['id'].toString() - : widget.duration, - drugId: widget.drugId, - remarks: remarksController.text, - route: route != null - ? route['id'].toString() - : widget.route, - frequency: frequencyUpdate != null - ? frequencyUpdate['id'].toString() - : widget.frequency, - dose: doseTime != null - ? doseTime['id'].toString() - : widget.dose, - enteredRemarks: - widget.enteredRemarks); - Navigator.pop(context); - }, + Container( + height: MediaQuery.of(context).size.height * + 0.070, + child: InkWell( + onTap: model.medicationDoseTimeList != null + ? () { + ListSelectDialog dialog = + ListSelectDialog( + list: + model.medicationDoseTimeList, + attributeName: 'nameEn', + attributeValueId: 'id', + okText: + TranslationBase.of(context) + .ok, + okFunction: (selectedValue) { + setState(() { + doseTime = selectedValue; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + } + : null, + child: TextField( + decoration: textFieldSelectorDecoration( + TranslationBase.of(context).doseTime, + doseTime != null + ? doseTime['nameEn'] + : null, + true), + enabled: false, + ), ), - ], - ), + ), + SizedBox( + height: 12.0, + ), + Container( + height: MediaQuery.of(context).size.height * + 0.070, + child: InkWell( + onTap: model.medicationFrequencyList != null + ? () { + ListSelectDialog dialog = + ListSelectDialog( + list: + model.medicationFrequencyList, + attributeName: 'nameEn', + attributeValueId: 'id', + okText: + TranslationBase.of(context) + .ok, + okFunction: (selectedValue) { + setState(() { + frequencyUpdate = + selectedValue; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + } + : null, + child: TextField( + decoration: textFieldSelectorDecoration( + TranslationBase.of(context).frequency, + frequencyUpdate != null + ? frequencyUpdate['nameEn'] + : null, + true), + enabled: false, + ), + ), + ), + SizedBox( + height: 12.0, + ), + Container( + height: MediaQuery.of(context).size.height * + 0.070, + child: InkWell( + onTap: model.medicationDurationList != null + ? () { + ListSelectDialog dialog = + ListSelectDialog( + list: + model.medicationDurationList, + attributeName: 'nameEn', + attributeValueId: 'id', + okText: + TranslationBase.of(context) + .ok, + okFunction: (selectedValue) { + setState(() { + updatedDuration = + selectedValue; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + } + : null, + child: TextField( + decoration: textFieldSelectorDecoration( + TranslationBase.of(context).duration, + updatedDuration != null + ? updatedDuration['nameEn'] + .toString() + : null, + true), + enabled: false, + ), + ), + ), + SizedBox( + height: 12.0, + ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(6.0)), + border: Border.all( + width: 1.0, + color: HexColor("#CCCCCC"))), + child: TextFields( + hintText: widget.remarks, + controller: remarksController, + maxLines: 7, + minLines: 4, + ), + ), + SizedBox( + height: 12.0, + ), + SizedBox( + height: + MediaQuery.of(context).size.height * 0.12, + ), + Container( + margin: EdgeInsets.all( + SizeConfig.widthMultiplier * 2), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: + 'update prescription'.toUpperCase(), + onPressed: () { + updatePrescription( + newDoseStreangth: + strengthController + .text.isNotEmpty + ? strengthController.text + : widget.doseStreangth, + newUnit: units != + null + ? units['id'].toString() + : widget.doseUnit, + doseUnit: widget.doseUnit, + doseStreangth: widget + .doseStreangth, + duration: widget.duration, + startDate: widget.startDate, + doseId: widget.dose, + frequencyId: widget.frequency, + routeId: widget.route, + patient: widget.patient, + model: widget.model, + newDuration: + updatedDuration != + null + ? updatedDuration[ + 'id'] + .toString() + : widget.duration, + drugId: widget.drugId, + remarks: remarksController.text, + route: route != + null + ? route['id'].toString() + : widget.route, + frequency: + frequencyUpdate != + null + ? frequencyUpdate['id'] + .toString() + : widget.frequency, + dose: doseTime != null + ? doseTime['id'].toString() + : widget.dose, + enteredRemarks: + widget.enteredRemarks); + Navigator.pop(context); + }, + ), + ], + ), + ), + ], ), ], ), - ], - ), - ), - )); - }); + ), + )); + }), + ), + ); }); } diff --git a/lib/screens/procedures/update-procedure.dart b/lib/screens/procedures/update-procedure.dart index 0b0a0c5a..8ed40dc3 100644 --- a/lib/screens/procedures/update-procedure.dart +++ b/lib/screens/procedures/update-procedure.dart @@ -2,14 +2,19 @@ import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/model/procedure/ControlsModel.dart'; +import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart'; import 'package:doctor_app_flutter/core/model/procedure/update_procedure_request_model.dart'; import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/screens/procedures/entity_list_checkbox_search_widget.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; +import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; @@ -68,102 +73,189 @@ class _UpdateProcedureWidgetState extends State { }); } + List entityList = List(); + dynamic selectedCategory; @override Widget build(BuildContext context) { + final screenSize = MediaQuery.of(context).size; return StatefulBuilder(builder: (BuildContext context, StateSetter setState /*You can rename this!*/) { - return Container( - height: MediaQuery.of(context).size.height * 0.55, - child: Form( - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText( - widget.procedureName.toUpperCase(), - fontWeight: FontWeight.w700, - ), - SizedBox( - height: 30.0, - ), - Container( - child: Row( - children: [ - AppText(TranslationBase.of(context).orderType), - Radio( - activeColor: Color(0xFFB9382C), - value: 0, - groupValue: selectedType, - onChanged: (value) { - setSelectedType(value); - }, + return BaseView( + onModelReady: (model) => model.getCategory(), + builder: + (BuildContext context, ProcedureViewModel model, Widget child) => + NetworkBaseView( + baseViewModel: model, + child: Container( + height: MediaQuery.of(context).size.height * 0.95, + child: Form( + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + widget.procedureName.toUpperCase(), + fontWeight: FontWeight.w700, + ), + SizedBox( + height: 30.0, + ), + Container( + height: screenSize.height * 0.070, + child: InkWell( + onTap: model.categoryList != null && + model.categoryList.length > 0 + ? () { + ListSelectDialog dialog = ListSelectDialog( + list: model.categoryList, + attributeName: 'categoryName', + attributeValueId: 'categoryId', + okText: TranslationBase.of(context).ok, + okFunction: (selectedValue) { + setState(() { + selectedCategory = selectedValue; + model.getProcedureCategory( + categoryName: selectedCategory[ + 'categoryName']); + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + //model.getProcedureCategory(); + } + : null, + child: TextField( + decoration: textFieldSelectorDecoration( + TranslationBase.of(context).procedureCategorise, + selectedCategory != null + ? selectedCategory['categoryName'] + : null, + true, + suffixIcon: Icon( + Icons.search, + color: Colors.black, + )), + enabled: false, + ), ), - Text(TranslationBase.of(context).urgent), - Radio( - activeColor: Color(0xFFB9382C), - groupValue: selectedType, - value: 1, - onChanged: (value) { - setSelectedType(value); - }, + ), + if (widget.model.categoriesList.length != 0) + NetworkBaseView( + baseViewModel: model, + child: EntityListCheckboxSearchWidget( + model: widget.model, + masterList: + widget.model.categoriesList[0].entityList, + removeHistory: (item) { + setState(() { + entityList.remove(item); + }); + }, + addHistory: (history) { + setState(() { + entityList.add(history); + }); + }, + addSelectedHistories: () { + //TODO build your fun herr + // widget.addSelectedHistories(); + }, + isEntityListSelected: (master) => + isEntityListSelected(master), + ), ), - Text(TranslationBase.of(context).regular), - ], - ), - ), - SizedBox( - height: 12.0, - ), - Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(6.0)), - border: - Border.all(width: 1.0, color: HexColor("#CCCCCC"))), - child: TextFields( - hintText: widget.remarks, - controller: widget.remarksController, - maxLines: 5, - minLines: 3, - ), - ), - SizedBox( - height: 100.0, - ), - Container( - margin: EdgeInsets.all(SizeConfig.widthMultiplier * 2), - child: Wrap( - alignment: WrapAlignment.center, - children: [ - AppButton( - title: TranslationBase.of(context) - .updateProcedure - .toUpperCase(), - onPressed: () { - Navigator.pop(context); - updateProcedure( - orderType: selectedType.toString(), - categorieId: widget.categoryId, - procedureId: widget.procedureId, - patient: widget.patient, - model: widget.model, - remarks: widget.remarksController.text); - // authorizationForm(context); - }, + Container( + child: Row( + children: [ + AppText(TranslationBase.of(context).orderType), + Radio( + activeColor: Color(0xFFB9382C), + value: 0, + groupValue: selectedType, + onChanged: (value) { + setSelectedType(value); + }, + ), + Text(TranslationBase.of(context).urgent), + Radio( + activeColor: Color(0xFFB9382C), + groupValue: selectedType, + value: 1, + onChanged: (value) { + setSelectedType(value); + }, + ), + Text(TranslationBase.of(context).regular), + ], + ), + ), + SizedBox( + height: 12.0, + ), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: TextFields( + hintText: widget.remarks, + controller: widget.remarksController, + maxLines: 5, + minLines: 3, + ), + ), + SizedBox( + height: 50.0, + ), + Container( + margin: EdgeInsets.all(SizeConfig.widthMultiplier * 2), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: TranslationBase.of(context) + .updateProcedure + .toUpperCase(), + onPressed: () { + Navigator.pop(context); + updateProcedure( + orderType: selectedType.toString(), + categorieId: widget.categoryId, + procedureId: widget.procedureId, + entityList: entityList, + patient: widget.patient, + model: widget.model, + remarks: widget.remarksController.text); + // authorizationForm(context); + }, + ), + ], ), - ], - ), + ), + ], ), - ], - ), - ), - )); + ), + )), + ), + ); }); } updateProcedure( {ProcedureViewModel model, String remarks, + String newProcedureId, + String newCategorieId, + List entityList, String orderType, String procedureId, PatiantInformtion patient, @@ -187,10 +279,15 @@ class _UpdateProcedureWidgetState extends State { Controls(code: "ordertype", controlValue: "1"), ); - controlsProcedure.procedure = procedureId; + entityList.isNotEmpty + ? entityList.forEach((element) { + controlsProcedure.procedure = element.procedureId; + controlsProcedure.category = element.categoryID; + controlsProcedure.controls = controls; + }) + : controlsProcedure.procedure = procedureId; controlsProcedure.category = categorieId; controlsProcedure.controls = controls; - // controlsProcedure.add(ProcedureDetail( // category: categorieId, procedure: procedureId, controls: controls)); updateProcedureReqModel.procedureDetail = controlsProcedure; @@ -206,4 +303,45 @@ class _UpdateProcedureWidgetState extends State { DrAppToastMsg.showSuccesToast('procedure has been updated'); } } + + bool isEntityListSelected(EntityList masterKey) { + Iterable history = entityList + .where((element) => masterKey.procedureId == element.procedureId); + if (history.length > 0) { + return true; + } + return false; + } + + InputDecoration textFieldSelectorDecoration( + String hintText, String selectedText, bool isDropDown, + {Icon suffixIcon}) { + return InputDecoration( + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), + borderRadius: BorderRadius.circular(8), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), + borderRadius: BorderRadius.circular(8), + ), + disabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), + borderRadius: BorderRadius.circular(8), + ), + hintText: selectedText != null ? selectedText : hintText, + suffixIcon: isDropDown + ? suffixIcon != null + ? suffixIcon + : Icon( + Icons.arrow_drop_down, + color: Colors.black, + ) + : null, + hintStyle: TextStyle( + fontSize: 14, + color: Colors.grey.shade600, + ), + ); + } }