prescription and medication changes

ipd-changes-for-vida-plus
parent 2c8c37238e
commit 8c42fff1ab

@ -1274,5 +1274,13 @@ const Map<String, Map<String, String>> localizedValues = {
"reset": {
"en": "Reset",
"ar": "إعادة تعيين"
}
} , "durationCannotBeNegative": {
"en": "Duration Cannot Be Negative",
"ar": "لا يمكن أن تكون المدة سلبية"
},
"durationCannotBeGreaterThan365": {
"en": "Duration cannot be greater than 365",
"ar": "لا يمكن أن تكون المدة أكبر من 365"
},
};

@ -26,6 +26,16 @@ class GetSearchCurrentMedication {
outOfStock = json['outOfStock'];
}
GetSearchCurrentMedication.fromJsonForSearchDrug(Map<String, dynamic> json) {
formularyName = json['GenericName'];
genericFormularyCode = json['genericFormularyCode'];
genericFormularyId = json['ItemId'].toString();
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
itemType = json['itemType'];
outOfStock = json['outOfStock'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['formularyName'] = this.formularyName;

@ -7,17 +7,17 @@ class GetSearchCurrentMedicationDetails {
GetSearchCurrentMedicationDetails({this.genericItemFrequencyDetailsEntity, this.genericItemRouteDetailsEntity, this.itemStrengthDetailsDto, this.patientTypeId});
GetSearchCurrentMedicationDetails.fromJson(Map<String, dynamic> json) {
if (json['genericItemFrequencyDetailsEntity'] != null) {
if (json['listItemByMedicineCode']['frequencies'] != null) {
genericItemFrequencyDetailsEntity = <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 = <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 = <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<String, dynamic> json) {
Default = json['Default'];
frequency = json['description'];
frequencyId = json['parameterCode'];
interval = json['Interval'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Default'] = this.Default;
@ -76,6 +83,12 @@ route = json['route'];
routeId = json['routeId'];
}
GenericItemRouteDetailsEntity.fromJsonForMedicationDetails(Map<String, dynamic> json) {
Default = json['Default'];
route = json['description'];
routeId = json['parameterCode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['default'] = this.Default;
@ -97,7 +110,11 @@ Default = json['default'];
strength = json['strength'];
strengthId = json['strengthId'];
}
ItemStrengthDetailsDto.fromJsonForMedicationDetails(Map<String, dynamic> json) {
Default = json['Default'];
strength = json['description'];
strengthId = json['parameterCode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['default'] = this.Default;

@ -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<String, dynamic> data = new Map<String, dynamic>();
data['ItemCode'] = this.itemCode;
data['Strength'] = this.strength;
data['StrengthUnitID'] = this.strengthUnitID;
data['Frequency'] = this.frequency;
data['Duration'] = this.duration;
data['VidaAuthTokenID'] = this.vidaAuthTokenID;

@ -149,6 +149,6 @@ class MedicalReportModel {
clinicName = json['ClinicName'];
clinicNameN = json['ClinicNameN'];
reportDataHtml = json['ReportDataHtml'];
summaryId = json['summaryId'];
summaryId = json['summaryID'];
}
}

@ -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(

@ -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<String, dynamic> 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) {

@ -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;

@ -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<String, dynamic> request = {"SearchKey": query};
await getDrugs(drugName: query);
// Map<String, dynamic> 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<String, dynamic> request = {"genericFormularyId": id};
await getItem(itemID: int.parse(id));
// Map<String, dynamic> 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 {

@ -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);

@ -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 {

@ -99,7 +99,7 @@ class _AddVerifyMedicalReportState extends State<AddVerifyMedicalReport> {
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);

@ -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: <Widget>[
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: <Widget>[
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<AnalyticsService>().logEvent(
// eventCategory: "RadiologyDetailsPage",
// eventAction: "Open Radiology Image",
// );
// launchUrlString(model.radImageURL);
// },
// title: TranslationBase.of(context).openRad,
// ),
// ),
// )
// : SizedBox(),
// ),
);
}
}

@ -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<AddDrugWidget> {
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

@ -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(

@ -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<TranslationBase> {

@ -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<AppTextFieldCustom> {
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(

Loading…
Cancel
Save