diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 9bad2892..781b589d 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1274,5 +1274,13 @@ const Map> localizedValues = { "reset": { "en": "Reset", "ar": "إعادة تعيين" - } + } , "durationCannotBeNegative": { + "en": "Duration Cannot Be Negative", + "ar": "لا يمكن أن تكون المدة سلبية" + }, + "durationCannotBeGreaterThan365": { + "en": "Duration cannot be greater than 365", + "ar": "لا يمكن أن تكون المدة أكبر من 365" + }, + }; diff --git a/lib/core/model/SOAP/home_medication_vp/GetSearchCurrentMedication.dart b/lib/core/model/SOAP/home_medication_vp/GetSearchCurrentMedication.dart index fd94d9cf..3eb5907a 100644 --- a/lib/core/model/SOAP/home_medication_vp/GetSearchCurrentMedication.dart +++ b/lib/core/model/SOAP/home_medication_vp/GetSearchCurrentMedication.dart @@ -26,6 +26,16 @@ class GetSearchCurrentMedication { outOfStock = json['outOfStock']; } + GetSearchCurrentMedication.fromJsonForSearchDrug(Map json) { + formularyName = json['GenericName']; + genericFormularyCode = json['genericFormularyCode']; + genericFormularyId = json['ItemId'].toString(); + hospitalGroupId = json['hospitalGroupId']; + hospitalId = json['hospitalId']; + itemType = json['itemType']; + outOfStock = json['outOfStock']; + } + Map toJson() { final Map data = new Map(); data['formularyName'] = this.formularyName; diff --git a/lib/core/model/SOAP/home_medication_vp/GetSearchCurrentMedicationDetails.dart b/lib/core/model/SOAP/home_medication_vp/GetSearchCurrentMedicationDetails.dart index 0cdd9ada..e476a4a8 100644 --- a/lib/core/model/SOAP/home_medication_vp/GetSearchCurrentMedicationDetails.dart +++ b/lib/core/model/SOAP/home_medication_vp/GetSearchCurrentMedicationDetails.dart @@ -7,17 +7,17 @@ class GetSearchCurrentMedicationDetails { GetSearchCurrentMedicationDetails({this.genericItemFrequencyDetailsEntity, this.genericItemRouteDetailsEntity, this.itemStrengthDetailsDto, this.patientTypeId}); GetSearchCurrentMedicationDetails.fromJson(Map json) { - if (json['genericItemFrequencyDetailsEntity'] != null) { + if (json['listItemByMedicineCode']['frequencies'] != null) { genericItemFrequencyDetailsEntity = []; - json['genericItemFrequencyDetailsEntity'].forEach((v) { genericItemFrequencyDetailsEntity!.add(new GenericItemFrequencyDetailsEntity.fromJson(v)); }); + json['listItemByMedicineCode']['frequencies'].forEach((v) { genericItemFrequencyDetailsEntity!.add(new GenericItemFrequencyDetailsEntity.fromJsonForMedicationDetails(v)); }); } - if (json['genericItemRouteDetailsEntity'] != null) { + if (json['listItemByMedicineCode']['routes'] != null) { genericItemRouteDetailsEntity = []; - json['genericItemRouteDetailsEntity'].forEach((v) { genericItemRouteDetailsEntity!.add(new GenericItemRouteDetailsEntity.fromJson(v)); }); + json['listItemByMedicineCode']['routes'].forEach((v) { genericItemRouteDetailsEntity!.add(new GenericItemRouteDetailsEntity.fromJsonForMedicationDetails(v)); }); } - if (json['itemStrengthDetailsDto'] != null) { + if (json['listItemByMedicineCode']['strengths'] != null) { itemStrengthDetailsDto = []; - json['itemStrengthDetailsDto'].forEach((v) { itemStrengthDetailsDto!.add(new ItemStrengthDetailsDto.fromJson(v)); }); + json['listItemByMedicineCode']['strengths'].forEach((v) { itemStrengthDetailsDto!.add(new ItemStrengthDetailsDto.fromJsonForMedicationDetails(v)); }); } patientTypeId = json['patientTypeId']; } @@ -53,6 +53,13 @@ frequencyId = json['FrequencyId']; interval = json['Interval']; } +GenericItemFrequencyDetailsEntity.fromJsonForMedicationDetails(Map json) { +Default = json['Default']; +frequency = json['description']; +frequencyId = json['parameterCode']; +interval = json['Interval']; +} + Map toJson() { final Map data = new Map(); data['Default'] = this.Default; @@ -76,6 +83,12 @@ route = json['route']; routeId = json['routeId']; } +GenericItemRouteDetailsEntity.fromJsonForMedicationDetails(Map json) { + Default = json['Default']; + route = json['description']; + routeId = json['parameterCode']; +} + Map toJson() { final Map data = new Map(); data['default'] = this.Default; @@ -97,7 +110,11 @@ Default = json['default']; strength = json['strength']; strengthId = json['strengthId']; } - +ItemStrengthDetailsDto.fromJsonForMedicationDetails(Map json) { + Default = json['Default']; + strength = json['description']; + strengthId = json['parameterCode']; +} Map toJson() { final Map data = new Map(); data['default'] = this.Default; diff --git a/lib/core/model/calculate_box_request_model.dart b/lib/core/model/calculate_box_request_model.dart index 24e75bb7..e63ac0d6 100644 --- a/lib/core/model/calculate_box_request_model.dart +++ b/lib/core/model/calculate_box_request_model.dart @@ -1,6 +1,7 @@ class CalculateBoxQuantityRequestModel { int? itemCode; double? strength; + int? strengthUnitID; int? frequency; int? duration; String? vidaAuthTokenID; @@ -8,6 +9,7 @@ class CalculateBoxQuantityRequestModel { CalculateBoxQuantityRequestModel( {this.itemCode, this.strength, + this.strengthUnitID, this.frequency, this.duration, this.vidaAuthTokenID}); @@ -24,6 +26,7 @@ class CalculateBoxQuantityRequestModel { final Map data = new Map(); data['ItemCode'] = this.itemCode; data['Strength'] = this.strength; + data['StrengthUnitID'] = this.strengthUnitID; data['Frequency'] = this.frequency; data['Duration'] = this.duration; data['VidaAuthTokenID'] = this.vidaAuthTokenID; diff --git a/lib/core/model/patient/MedicalReport/MeidcalReportModel.dart b/lib/core/model/patient/MedicalReport/MeidcalReportModel.dart index 3964826c..d4698e50 100644 --- a/lib/core/model/patient/MedicalReport/MeidcalReportModel.dart +++ b/lib/core/model/patient/MedicalReport/MeidcalReportModel.dart @@ -149,6 +149,6 @@ class MedicalReportModel { clinicName = json['ClinicName']; clinicNameN = json['ClinicNameN']; reportDataHtml = json['ReportDataHtml']; - summaryId = json['summaryId']; + summaryId = json['summaryID']; } } diff --git a/lib/core/service/patient/out_patient_service.dart b/lib/core/service/patient/out_patient_service.dart index da31c169..6431daf6 100644 --- a/lib/core/service/patient/out_patient_service.dart +++ b/lib/core/service/patient/out_patient_service.dart @@ -12,6 +12,7 @@ class OutPatientService extends BaseService { Future getOutPatient(PatientSearchRequestModel patientSearchRequestModel) async { if(ProjectViewModel.getVidaPlusStatus()){ patientSearchRequestModel.pageSize = 0; + patientSearchRequestModel.clinicID = null; } hasError = false; await baseAppClient.post( diff --git a/lib/core/service/patient_medical_file/medical_report/PatientMedicalReportService.dart b/lib/core/service/patient_medical_file/medical_report/PatientMedicalReportService.dart index 36b4dcca..a6fbbeca 100644 --- a/lib/core/service/patient_medical_file/medical_report/PatientMedicalReportService.dart +++ b/lib/core/service/patient_medical_file/medical_report/PatientMedicalReportService.dart @@ -128,7 +128,7 @@ class PatientMedicalReportService extends BaseService { }, body: body); } - Future updateMedicalReport(PatiantInformtion patient, String htmlText, int limitNumber, String invoiceNumber) async { + Future updateMedicalReport(PatiantInformtion patient, String htmlText, int limitNumber, String invoiceNumber, int? summaryId, MedicalReportModel medicalReport) async { hasError = false; Map body = Map(); @@ -138,13 +138,19 @@ class PatientMedicalReportService extends BaseService { if (body['InvoiceNo'].toString().isEmpty) { body['InvoiceNo'] = "0"; } + body['SummaryID'] = summaryId ?? 0; + body['TemplateID'] = medicalReport.templateID ?? 0; + body['AdmissionNo'] = patient.admissionID ?? 0; } - - body['SetupID'] = body.containsKey('SetupID') + if (ProjectViewModel.getVidaPlusStatus()) { + body['SetupID'] = doctorProfile!.setupID; + } else + body['SetupID'] = body.containsKey('SetupID') ? body['SetupID'] != null ? body['SetupID'] : SETUP_ID : SETUP_ID; + //body['AdmissionNo'] = int.parse(patient.admissionNo); body['MedicalReportHTML'] = htmlText; if (body['ProjectID'] == null) { diff --git a/lib/core/service/patient_medical_file/prescription/prescription_service.dart b/lib/core/service/patient_medical_file/prescription/prescription_service.dart index b0991cc7..68ed63a8 100644 --- a/lib/core/service/patient_medical_file/prescription/prescription_service.dart +++ b/lib/core/service/patient_medical_file/prescription/prescription_service.dart @@ -195,8 +195,8 @@ class PrescriptionService extends LookupService { }, body: request); } - Future calculateBoxQuantity({required int freq, required int duration, required int itemCode, required double strength}) async { - _boxQuantityRequestModel = CalculateBoxQuantityRequestModel(frequency: freq, duration: duration, itemCode: itemCode, strength: strength); + Future calculateBoxQuantity({required int freq, required int duration, required int itemCode, required double strength, int? unitCode}) async { + _boxQuantityRequestModel = CalculateBoxQuantityRequestModel(frequency: freq, duration: duration, itemCode: itemCode, strength: strength, strengthUnitID: unitCode); hasError = false; diff --git a/lib/core/service/patient_medical_file/soap/SOAP_service.dart b/lib/core/service/patient_medical_file/soap/SOAP_service.dart index a0dd69f1..3be757dd 100644 --- a/lib/core/service/patient_medical_file/soap/SOAP_service.dart +++ b/lib/core/service/patient_medical_file/soap/SOAP_service.dart @@ -44,6 +44,8 @@ import 'package:doctor_app_flutter/core/model/SOAP/progress_note/get_progress_no import 'package:doctor_app_flutter/core/model/SOAP/progress_note/post_progress_note_request_model.dart'; import 'package:doctor_app_flutter/core/model/SOAP/progress_note/progress_note.dart'; import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; +import 'package:doctor_app_flutter/core/model/search_drug/item_by_medicine_request_model.dart'; +import 'package:doctor_app_flutter/core/model/search_drug/search_drug_request_model.dart'; import 'package:doctor_app_flutter/core/service/base/lookup-service.dart'; import 'package:doctor_app_flutter/utils/date-utils.dart'; import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart'; @@ -1532,34 +1534,68 @@ class SOAPService extends LookupService { } searchCurrentMedication(String query) async { - Map request = {"SearchKey": query}; + await getDrugs(drugName: query); + // Map request = {"SearchKey": query}; + // hasError = false; + // await baseAppClient.post(SEARCH_CURRENT_MEDICATION, + // onSuccess: (dynamic response, int statusCode) { + // getSearchCurrentMedication.clear(); + // response['ListFormulatorySearch']['resultData'].forEach((v) { + // getSearchCurrentMedication.add(GetSearchCurrentMedication.fromJson(v)); + // }); + // }, onFailure: (String error, int statusCode) { + // hasError = true; + // super.error = error; + // }, body: request); + } + + Future getDrugs({required String drugName}) async { + var request = SearchDrugRequestModel(search: [drugName]); + hasError = false; - await baseAppClient.post(SEARCH_CURRENT_MEDICATION, - onSuccess: (dynamic response, int statusCode) { + getSearchCurrentMedication.clear(); + await baseAppClient.post(SEARCH_DRUG, onSuccess: (dynamic response, int statusCode) { getSearchCurrentMedication.clear(); - response['ListFormulatorySearch']['resultData'].forEach((v) { - getSearchCurrentMedication.add(GetSearchCurrentMedication.fromJson(v)); + response['MedicationList']['entityList'].forEach((v) { + getSearchCurrentMedication.add(GetSearchCurrentMedication.fromJsonForSearchDrug(v)); }); }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; - }, body: request); + }, body: request.toJson()); } getCurrentMedicationDetails(String id) async { - Map request = {"genericFormularyId": id}; + await getItem(itemID: int.parse(id)); + // Map request = {"genericFormularyId": id}; + // hasError = false; + // await baseAppClient.post(SEARCH_CURRENT_MEDICATION_DETAILS, + // onSuccess: (dynamic response, int statusCode) { + // getSearchCurrentMedicationDetails.clear(); + // response['ListFormularyMaster']['resultData'].forEach((v) { + // getSearchCurrentMedicationDetails + // .add(GetSearchCurrentMedicationDetails.fromJson(v)); + // }); + // }, onFailure: (String error, int statusCode) { + // hasError = true; + // super.error = error; + // }, body: request); + } + Future getItem({required int itemID}) async { + var itemByMedicineRequestModel = ItemByMedicineRequestModel(medicineCode: itemID); + hasError = false; - await baseAppClient.post(SEARCH_CURRENT_MEDICATION_DETAILS, - onSuccess: (dynamic response, int statusCode) { + getSearchCurrentMedicationDetails.clear(); + + await baseAppClient.post(GET_ITEM_BY_MEDICINE, onSuccess: (dynamic response, int statusCode) { getSearchCurrentMedicationDetails.clear(); - response['ListFormularyMaster']['resultData'].forEach((v) { - getSearchCurrentMedicationDetails - .add(GetSearchCurrentMedicationDetails.fromJson(v)); - }); + getSearchCurrentMedicationDetails + .add(GetSearchCurrentMedicationDetails.fromJson(response)); + }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; - }, body: request); + }, body: itemByMedicineRequestModel.toJson()); } removeCurrentMedicationVidaPlus(String medicationID) async { diff --git a/lib/core/viewModel/PatientMedicalReportViewModel.dart b/lib/core/viewModel/PatientMedicalReportViewModel.dart index 3eef8edf..d5ab5003 100644 --- a/lib/core/viewModel/PatientMedicalReportViewModel.dart +++ b/lib/core/viewModel/PatientMedicalReportViewModel.dart @@ -72,10 +72,10 @@ class PatientMedicalReportViewModel extends BaseViewModel { } Future updateMedicalReport(PatiantInformtion patient, String htmlText, - int limitNumber, String invoiceNumber, bool? isVidaPlusProject) async { + int limitNumber, String invoiceNumber, bool? isVidaPlusProject, int? summaryId, MedicalReportModel medicalReportModel) async { setState(ViewState.Busy); await _service.updateMedicalReport( - patient, htmlText, limitNumber, invoiceNumber); + patient, htmlText, limitNumber, invoiceNumber, summaryId, medicalReportModel); if (_service.hasError) { error = _service.error; await getMedicalReportList(patient, isVidaPlusProject: isVidaPlusProject == true); diff --git a/lib/core/viewModel/medicine_view_model.dart b/lib/core/viewModel/medicine_view_model.dart index c861e1d2..5f9291de 100644 --- a/lib/core/viewModel/medicine_view_model.dart +++ b/lib/core/viewModel/medicine_view_model.dart @@ -348,19 +348,25 @@ class MedicineViewModel extends BaseViewModel { setState(ViewState.Idle); } - Future getBoxQuantity({int? itemCode, int? duration, double? strength, int? freq}) async { + Future getBoxQuantity({int? itemCode, int? duration, double? strength, int? freq, bool showLoader = true, int? unitCode}) async { + + if(showLoader) setState(ViewState.Busy); await _prescriptionService.calculateBoxQuantity( strength: strength!, itemCode: itemCode!, duration: duration!, freq: freq!, + unitCode: unitCode, ); if (_prescriptionService.hasError) { error = _prescriptionService.error; + if(showLoader) setState(ViewState.Error); - } else + } else{ + if(showLoader) setState(ViewState.Idle); + } } Future getPharmaciesList(int itemId) async { diff --git a/lib/screens/patients/profile/medical_report/AddVerifyMedicalReport.dart b/lib/screens/patients/profile/medical_report/AddVerifyMedicalReport.dart index 54a846a3..d7228b00 100644 --- a/lib/screens/patients/profile/medical_report/AddVerifyMedicalReport.dart +++ b/lib/screens/patients/profile/medical_report/AddVerifyMedicalReport.dart @@ -99,7 +99,7 @@ class _AddVerifyMedicalReportState extends State { GifLoaderDialogUtils.showMyDialog(context); widget.medicalReport != null ? await widget.model!.updateMedicalReport(widget.patient!, txtOfMedicalReport, widget.medicalReport != null ? widget.medicalReport!.lineItemNo??0: 0, - widget.medicalReport != null ? widget.medicalReport!.invoiceNo??"" : "", widget.isVidaPlusProject) + widget.medicalReport != null ? widget.medicalReport!.invoiceNo??"" : "", widget.isVidaPlusProject, widget.medicalReport?.summaryId, widget.medicalReport!) : await widget.model!.addMedicalReport(widget.patient!, txtOfMedicalReport, widget.isVidaPlusProject); //model.getMedicalReportList(patient); diff --git a/lib/screens/patients/profile/radiology/radiology_details_page.dart b/lib/screens/patients/profile/radiology/radiology_details_page.dart index 7d4f9134..e0d3090d 100644 --- a/lib/screens/patients/profile/radiology/radiology_details_page.dart +++ b/lib/screens/patients/profile/radiology/radiology_details_page.dart @@ -41,65 +41,68 @@ class RadiologyDetailsPage extends StatelessWidget { finalRadiology.projectID, ), ), - builder: (_, model, widget) => AppScaffold( - appBar: PatientProfileAppBar( - patient, - appointmentDate: finalRadiology.orderDate!, - doctorName: finalRadiology.doctorName, - clinic: finalRadiology.clinicDescription, - branch: finalRadiology.projectName, - profileUrl: finalRadiology.doctorImageURL, - invoiceNO: Utils.isVidaPlusProject(projectViewModel, finalRadiology.projectID) ? finalRadiology.invoiceNo_VP.toString() : finalRadiology.invoiceNo.toString(), - isAppointmentHeader: true, - ), - isShowAppBar: true, - baseViewModel: model, - body: SingleChildScrollView( + builder: (_, model, widget) => + // AppScaffold( + // isShowAppBar: true, + // baseViewModel: model, + // body: + // + + Material( + color: Colors.white, child: Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - width: double.maxFinite, - margin: EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(12), - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 5, - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: AppText( - TranslationBase.of(context).generalResult, - color: Color(0xff2E303A), - ), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: AppText( - '${finalRadiology.reportData.trim()}', - textAlign: TextAlign.start, - isCopyable: true, - fontSize: 17, - color: Color(0xff575757), + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + PatientProfileAppBar( + patient, + appointmentDate: finalRadiology.orderDate!, + doctorName: finalRadiology.doctorName, + clinic: finalRadiology.clinicDescription, + branch: finalRadiology.projectName, + profileUrl: finalRadiology.doctorImageURL, + invoiceNO: Utils.isVidaPlusProject(projectViewModel, finalRadiology.projectID) ? finalRadiology.invoiceNo_VP.toString() : finalRadiology.invoiceNo.toString(), + isAppointmentHeader: true, + ), + Expanded( + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 5, + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: AppText( + TranslationBase.of(context).generalResult, + color: Color(0xff2E303A), + ), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: AppText( + '${finalRadiology.reportData.trim()}', + textAlign: TextAlign.start, + isCopyable: true, + fontSize: 17, + color: Color(0xff575757), + ), + ), + SizedBox( + height: 100, + ), + ], ), - ), - SizedBox( - height: 100, - ), - ], + ], + ), ), ), - ], - ), - ), - bottomSheet: model.radImageURL.isNotEmpty - ? Container( + model.radImageURL.isNotEmpty + ? Container( height: 80, width: double.maxFinite, child: Container( @@ -117,8 +120,31 @@ class RadiologyDetailsPage extends StatelessWidget { ), ), ) - : SizedBox(), - ), + : SizedBox(), + ], + ), + ), + // bottomSheet:model.radImageURL.isNotEmpty + // ? Container( + // height: 80, + // width: double.maxFinite, + // child: Container( + // margin: EdgeInsets.only(left: 35, right: 35, top: 12, bottom: 12), + // child: AppButton( + // color: Color(0xffD02127), + // onPressed: () async { + // await locator().logEvent( + // eventCategory: "RadiologyDetailsPage", + // eventAction: "Open Radiology Image", + // ); + // launchUrlString(model.radImageURL); + // }, + // title: TranslationBase.of(context).openRad, + // ), + // ), + // ) + // : SizedBox(), + // ), ); } } diff --git a/lib/screens/prescription/add_prescription/add_drug/add_drug_widget.dart b/lib/screens/prescription/add_prescription/add_drug/add_drug_widget.dart index 2a929a91..0c152dc4 100644 --- a/lib/screens/prescription/add_prescription/add_drug/add_drug_widget.dart +++ b/lib/screens/prescription/add_prescription/add_drug/add_drug_widget.dart @@ -5,6 +5,7 @@ import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/core/model/search_drug/get_medication_response_model.dart'; import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription/prescription_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/bottom_sheet_title.dart'; import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/utils/utils.dart'; @@ -118,7 +119,7 @@ class _AddDrugWidgetState extends State { patient: widget.patient, doseTimeIn: widget.doseTime['id'].toString(), model: widget.modelPrescription, - duration: widget.duration['id'].toString(), + duration: ProjectViewModel.getVidaPlusStatus()? widget.duration.toString(): widget.duration['id'].toString(), frequency: widget.medicineModel!.itemMedicineList .length == 1 diff --git a/lib/screens/prescription/add_prescription/prescription_form_widget.dart b/lib/screens/prescription/add_prescription/prescription_form_widget.dart index f675fa5c..07eff25f 100644 --- a/lib/screens/prescription/add_prescription/prescription_form_widget.dart +++ b/lib/screens/prescription/add_prescription/prescription_form_widget.dart @@ -8,6 +8,7 @@ import 'package:doctor_app_flutter/core/provider/robot_provider.dart'; import 'package:doctor_app_flutter/core/service/AnalyticsService.dart'; import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/prescription/prescription_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; import 'package:doctor_app_flutter/locator.dart'; import 'package:doctor_app_flutter/screens/prescription/prescription_text_filed.dart'; @@ -17,10 +18,12 @@ import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; import 'package:doctor_app_flutter/utils/utils.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/speech-text-popup.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:speech_to_text/speech_recognition_error.dart'; import 'package:speech_to_text/speech_to_text.dart' as stt; @@ -249,6 +252,51 @@ getIcdCodeData() async{ }, hintText: TranslationBase.of(context).route, ), + Visibility( + visible: ProjectViewModel.getVidaPlusStatus() == true, + child: Column( + children: [ + SizedBox(height: spaceBetweenTextFields), + AppTextFieldCustom( + hintText: TranslationBase.of(context).duration, + validationError: durationError, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly + ], + enabled: true, + inputType: TextInputType.numberWithOptions(decimal: false), + onChanged: (value) { + if (value == null || value == "") return; + + if (int.parse(value) < 0) { + DrAppToastMsg.showErrorToast(TranslationBase.of(context).durationCannotBeNegative); + setState(() { + durationError = TranslationBase.of(context).durationCannotBeNegative; + }); + return; + } + if (int.parse(value) > 365) { + DrAppToastMsg.showErrorToast(TranslationBase.of(context).durationCannotBeGreaterThan365); + setState(() { + durationError = TranslationBase.of(context).durationCannotBeGreaterThan365; + }); + return; + } + setState(() { + duration = value; + durationError = null; + frequency = null; + if (widget.selectedMedication != null && duration != null && frequency != null && strengthController.text != null) { + box = widget.medicineViewModel.boxQuintity; + return; + } + }); + }, + onFieldSubmitted: () {}, + ), + ], + ), + ), SizedBox(height: spaceBetweenTextFields), PrescriptionTextFiled( hintText: TranslationBase.of(context).frequency, @@ -258,17 +306,24 @@ getIcdCodeData() async{ elementList: widget.medicineViewModel.itemMedicineList, keyId: 'parameterCode', keyName: 'description', - okFunction: (selectedValue) { + okFunction: (selectedValue) async { setState(() { frequency = selectedValue; frequency['isDefault'] = true; - if (widget.selectedMedication != null && duration != null && frequency != null && strengthController.text != null) { - widget.medicineViewModel - .getBoxQuantity(freq: frequency['parameterCode'], duration: duration['id'], itemCode: widget.selectedMedication.itemId, strength: double.parse(strengthController.text)); - + }); + if (widget.selectedMedication != null && duration != null && frequency != null && strengthController.text != null) { + if(ProjectViewModel.getVidaPlusStatus() && units == null){ return; } - }); + var duration = ProjectViewModel.getVidaPlusStatus() ? int.parse(this.duration) : this.duration['id']; + GifLoaderDialogUtils.showMyDialog(context); + await widget.medicineViewModel.getBoxQuantity( + showLoader: false, freq: frequency['parameterCode'], duration: duration, itemCode: widget.selectedMedication.itemId, strength: double.parse(strengthController.text), unitCode: + units['parameterCode']); + GifLoaderDialogUtils.hideDialog(context); + box = widget.medicineViewModel.boxQuintity; + return; + } }), SizedBox(height: spaceBetweenTextFields), PrescriptionTextFiled( @@ -364,33 +419,36 @@ getIcdCodeData() async{ ]) : widget.medicineViewModel.patientAssessmentList.isNotEmpty ? - Container( - height: screenSize.height * 0.068, - width: double.infinity, + Material( color: Colors.white, - child: Row( - children: [ - Container( - width: MediaQuery.of(context).size.width * 0.29, - child: AppTextFieldCustom( - hintText: widget.medicineViewModel.patientAssessmentList[0].icdCode10ID.toString(), - enabled: true, - onChanged: (value) {}, - onFieldSubmitted: () {}, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Flexible( + flex:1, + child: AppTextFieldCustom( + hintText: "", + hideHint: true, + controller: TextEditingController( text:widget.medicineViewModel.patientAssessmentList.firstOrNull?.icdCode10ID?.toString()??""), + enabled: false, + onChanged: (value) {}, + onFieldSubmitted: () {}, + ), ), - ), - Container( - width: MediaQuery.of(context).size.width * 0.57, - color: Colors.white, - child: AppTextFieldCustom( - maxLines: 5, - hintText: widget.medicineViewModel.patientAssessmentList[0].asciiDesc.toString(), - enabled: true, - onChanged: (value) {}, - onFieldSubmitted: () {}, + Flexible(flex: 2, + child: AppTextFieldCustom( + maxLines: 5, + hintText:"", + hideHint: true, + controller: TextEditingController( text:widget.medicineViewModel.patientAssessmentList.firstOrNull?.asciiDesc?.toString()??""), + enabled: false, + onChanged: (value) {}, + onFieldSubmitted: () {}, + ), ), - ), - ], + ], + ), ), ) :SizedBox(), SizedBox(height: spaceBetweenTextFields), @@ -420,24 +478,31 @@ getIcdCodeData() async{ ), ), SizedBox(height: spaceBetweenTextFields), - PrescriptionTextFiled( - element: duration, - elementError: durationError, - hintText: TranslationBase.of(context).duration, - elementList: widget.medicineViewModel.medicationDurationList, - keyName: 'nameEn', - keyId: 'id', - okFunction: (selectedValue) { - setState(() { - duration = selectedValue; - if (widget.selectedMedication != null && duration != null && frequency != null && strengthController.text != null) { - box = widget.medicineViewModel.boxQuintity; - return; - } - }); - }, + Visibility( + visible: ProjectViewModel.getVidaPlusStatus() == false, + child: Column( + children: [ + PrescriptionTextFiled( + element: duration, + elementError: durationError, + hintText: TranslationBase.of(context).duration, + elementList: widget.medicineViewModel.medicationDurationList, + keyName: 'nameEn', + keyId: 'id', + okFunction: (selectedValue) { + setState(() { + duration = selectedValue; + if (widget.selectedMedication != null && duration != null && frequency != null && strengthController.text != null) { + box = widget.medicineViewModel.boxQuintity; + return; + } + }); + }, + ), + SizedBox(height: spaceBetweenTextFields), + ], + ), ), - SizedBox(height: spaceBetweenTextFields), Container( color: Colors.white, child: AppTextFieldCustom( @@ -550,6 +615,25 @@ getIcdCodeData() async{ DrAppToastMsg.showErrorToast(TranslationBase.of(context).strengthCanNotBeZero); return; } + //adding the vida plus validation for duration + if (ProjectViewModel.getVidaPlusStatus()) { + if (duration == null) { + durationError = TranslationBase.of(context).fieldRequired; + return; + } else if (int.parse(duration) < 0) { + setState(() { + durationError = TranslationBase.of(context).durationCannotBeNegative; + }); + return; + } else if (int.parse(duration) > 365) { + setState(() { + durationError = TranslationBase.of(context).durationCannotBeGreaterThan365; + }); + return; + } else { + durationError = null; + } + } if (formKey.currentState!.validate()) { Navigator.push( diff --git a/lib/utils/translations_delegate_base_utils.dart b/lib/utils/translations_delegate_base_utils.dart index a509ff0d..14e346e5 100644 --- a/lib/utils/translations_delegate_base_utils.dart +++ b/lib/utils/translations_delegate_base_utils.dart @@ -2002,6 +2002,8 @@ class TranslationBase { String get addDoctorRemarks => localizedValues['addDoctorRemarks']![locale.languageCode]!; String get kindlySelectCondition => localizedValues['kindlySelectCondition']![locale.languageCode]!; String get reset => localizedValues['reset']![locale.languageCode]!; + String get durationCannotBeNegative => localizedValues['durationCannotBeNegative']![locale.languageCode]!; + String get durationCannotBeGreaterThan365 => localizedValues['durationCannotBeGreaterThan365']![locale.languageCode]!; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/shared/text_fields/app-textfield-custom.dart b/lib/widgets/shared/text_fields/app-textfield-custom.dart index 2e76ee60..fa8b1cd1 100644 --- a/lib/widgets/shared/text_fields/app-textfield-custom.dart +++ b/lib/widgets/shared/text_fields/app-textfield-custom.dart @@ -34,6 +34,7 @@ class AppTextFieldCustom extends StatefulWidget { final bool isSecure; final bool focus; final bool isSearchTextField; + final bool hideHint; AppTextFieldCustom({ this.height = 0, @@ -57,6 +58,7 @@ class AppTextFieldCustom extends StatefulWidget { this.isSecure = false, this.focus = false, this.isSearchTextField = false, + this.hideHint = false, required this.onFieldSubmitted, this.onEditingComplete }); @@ -130,13 +132,16 @@ class _AppTextFieldCustomState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ - AppText( - widget.hintText!, - color: Color(0xFF2E303A), - fontSize: widget.isPrscription == false ? 11.0 : 0, - fontWeight: FontWeight.w600, - letterSpacing: -0.44, - fontFamily: 'Poppins', + Visibility( + visible: !widget.hideHint, + child: AppText( + widget.hintText!, + color: Color(0xFF2E303A), + fontSize: widget.isPrscription == false ? 11.0 : 0, + fontWeight: FontWeight.w600, + letterSpacing: -0.44, + fontFamily: 'Poppins', + ), ), widget.dropDownText == null ? Container(