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": { "reset": {
"en": "Reset", "en": "Reset",
"ar": "إعادة تعيين" "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']; 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() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = new Map<String, dynamic>();
data['formularyName'] = this.formularyName; data['formularyName'] = this.formularyName;

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

@ -1,6 +1,7 @@
class CalculateBoxQuantityRequestModel { class CalculateBoxQuantityRequestModel {
int? itemCode; int? itemCode;
double? strength; double? strength;
int? strengthUnitID;
int? frequency; int? frequency;
int? duration; int? duration;
String? vidaAuthTokenID; String? vidaAuthTokenID;
@ -8,6 +9,7 @@ class CalculateBoxQuantityRequestModel {
CalculateBoxQuantityRequestModel( CalculateBoxQuantityRequestModel(
{this.itemCode, {this.itemCode,
this.strength, this.strength,
this.strengthUnitID,
this.frequency, this.frequency,
this.duration, this.duration,
this.vidaAuthTokenID}); this.vidaAuthTokenID});
@ -24,6 +26,7 @@ class CalculateBoxQuantityRequestModel {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = new Map<String, dynamic>();
data['ItemCode'] = this.itemCode; data['ItemCode'] = this.itemCode;
data['Strength'] = this.strength; data['Strength'] = this.strength;
data['StrengthUnitID'] = this.strengthUnitID;
data['Frequency'] = this.frequency; data['Frequency'] = this.frequency;
data['Duration'] = this.duration; data['Duration'] = this.duration;
data['VidaAuthTokenID'] = this.vidaAuthTokenID; data['VidaAuthTokenID'] = this.vidaAuthTokenID;

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

@ -12,6 +12,7 @@ class OutPatientService extends BaseService {
Future getOutPatient(PatientSearchRequestModel patientSearchRequestModel) async { Future getOutPatient(PatientSearchRequestModel patientSearchRequestModel) async {
if(ProjectViewModel.getVidaPlusStatus()){ if(ProjectViewModel.getVidaPlusStatus()){
patientSearchRequestModel.pageSize = 0; patientSearchRequestModel.pageSize = 0;
patientSearchRequestModel.clinicID = null;
} }
hasError = false; hasError = false;
await baseAppClient.post( await baseAppClient.post(

@ -128,7 +128,7 @@ class PatientMedicalReportService extends BaseService {
}, body: body); }, 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; hasError = false;
Map<String, dynamic> body = Map(); Map<String, dynamic> body = Map();
@ -138,13 +138,19 @@ class PatientMedicalReportService extends BaseService {
if (body['InvoiceNo'].toString().isEmpty) { if (body['InvoiceNo'].toString().isEmpty) {
body['InvoiceNo'] = "0"; body['InvoiceNo'] = "0";
} }
body['SummaryID'] = summaryId ?? 0;
body['TemplateID'] = medicalReport.templateID ?? 0;
body['AdmissionNo'] = patient.admissionID ?? 0;
} }
if (ProjectViewModel.getVidaPlusStatus()) {
body['SetupID'] = doctorProfile!.setupID;
} else
body['SetupID'] = body.containsKey('SetupID') body['SetupID'] = body.containsKey('SetupID')
? body['SetupID'] != null ? body['SetupID'] != null
? body['SetupID'] ? body['SetupID']
: SETUP_ID : SETUP_ID
: SETUP_ID; : SETUP_ID;
//body['AdmissionNo'] = int.parse(patient.admissionNo); //body['AdmissionNo'] = int.parse(patient.admissionNo);
body['MedicalReportHTML'] = htmlText; body['MedicalReportHTML'] = htmlText;
if (body['ProjectID'] == null) { if (body['ProjectID'] == null) {

@ -195,8 +195,8 @@ class PrescriptionService extends LookupService {
}, body: request); }, body: request);
} }
Future calculateBoxQuantity({required int freq, required int duration, required int itemCode, required double strength}) async { 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); _boxQuantityRequestModel = CalculateBoxQuantityRequestModel(frequency: freq, duration: duration, itemCode: itemCode, strength: strength, strengthUnitID: unitCode);
hasError = false; 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/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/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/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/core/service/base/lookup-service.dart';
import 'package:doctor_app_flutter/utils/date-utils.dart'; import 'package:doctor_app_flutter/utils/date-utils.dart';
import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart';
@ -1532,34 +1534,68 @@ class SOAPService extends LookupService {
} }
searchCurrentMedication(String query) async { 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; hasError = false;
await baseAppClient.post(SEARCH_CURRENT_MEDICATION,
onSuccess: (dynamic response, int statusCode) {
getSearchCurrentMedication.clear(); getSearchCurrentMedication.clear();
response['ListFormulatorySearch']['resultData'].forEach((v) { await baseAppClient.post(SEARCH_DRUG, onSuccess: (dynamic response, int statusCode) {
getSearchCurrentMedication.add(GetSearchCurrentMedication.fromJson(v)); getSearchCurrentMedication.clear();
response['MedicationList']['entityList'].forEach((v) {
getSearchCurrentMedication.add(GetSearchCurrentMedication.fromJsonForSearchDrug(v));
}); });
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;
}, body: request); }, body: request.toJson());
} }
getCurrentMedicationDetails(String id) async { 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; hasError = false;
await baseAppClient.post(SEARCH_CURRENT_MEDICATION_DETAILS,
onSuccess: (dynamic response, int statusCode) {
getSearchCurrentMedicationDetails.clear(); getSearchCurrentMedicationDetails.clear();
response['ListFormularyMaster']['resultData'].forEach((v) {
await baseAppClient.post(GET_ITEM_BY_MEDICINE, onSuccess: (dynamic response, int statusCode) {
getSearchCurrentMedicationDetails.clear();
getSearchCurrentMedicationDetails getSearchCurrentMedicationDetails
.add(GetSearchCurrentMedicationDetails.fromJson(v)); .add(GetSearchCurrentMedicationDetails.fromJson(response));
});
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;
}, body: request); }, body: itemByMedicineRequestModel.toJson());
} }
removeCurrentMedicationVidaPlus(String medicationID) async { removeCurrentMedicationVidaPlus(String medicationID) async {

@ -72,10 +72,10 @@ class PatientMedicalReportViewModel extends BaseViewModel {
} }
Future updateMedicalReport(PatiantInformtion patient, String htmlText, 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); setState(ViewState.Busy);
await _service.updateMedicalReport( await _service.updateMedicalReport(
patient, htmlText, limitNumber, invoiceNumber); patient, htmlText, limitNumber, invoiceNumber, summaryId, medicalReportModel);
if (_service.hasError) { if (_service.hasError) {
error = _service.error; error = _service.error;
await getMedicalReportList(patient, isVidaPlusProject: isVidaPlusProject == true); await getMedicalReportList(patient, isVidaPlusProject: isVidaPlusProject == true);

@ -348,20 +348,26 @@ class MedicineViewModel extends BaseViewModel {
setState(ViewState.Idle); 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); setState(ViewState.Busy);
await _prescriptionService.calculateBoxQuantity( await _prescriptionService.calculateBoxQuantity(
strength: strength!, strength: strength!,
itemCode: itemCode!, itemCode: itemCode!,
duration: duration!, duration: duration!,
freq: freq!, freq: freq!,
unitCode: unitCode,
); );
if (_prescriptionService.hasError) { if (_prescriptionService.hasError) {
error = _prescriptionService.error; error = _prescriptionService.error;
if(showLoader)
setState(ViewState.Error); setState(ViewState.Error);
} else } else{
if(showLoader)
setState(ViewState.Idle); setState(ViewState.Idle);
} }
}
Future getPharmaciesList(int itemId) async { Future getPharmaciesList(int itemId) async {
setState(ViewState.Busy); setState(ViewState.Busy);

@ -99,7 +99,7 @@ class _AddVerifyMedicalReportState extends State<AddVerifyMedicalReport> {
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(context);
widget.medicalReport != null widget.medicalReport != null
? await widget.model!.updateMedicalReport(widget.patient!, txtOfMedicalReport, widget.medicalReport != null ? widget.medicalReport!.lineItemNo??0: 0, ? 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); : await widget.model!.addMedicalReport(widget.patient!, txtOfMedicalReport, widget.isVidaPlusProject);
//model.getMedicalReportList(patient); //model.getMedicalReportList(patient);

@ -41,8 +41,19 @@ class RadiologyDetailsPage extends StatelessWidget {
finalRadiology.projectID, finalRadiology.projectID,
), ),
), ),
builder: (_, model, widget) => AppScaffold( builder: (_, model, widget) =>
appBar: PatientProfileAppBar( // AppScaffold(
// isShowAppBar: true,
// baseViewModel: model,
// body:
//
Material(
color: Colors.white,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
PatientProfileAppBar(
patient, patient,
appointmentDate: finalRadiology.orderDate!, appointmentDate: finalRadiology.orderDate!,
doctorName: finalRadiology.doctorName, doctorName: finalRadiology.doctorName,
@ -52,21 +63,13 @@ class RadiologyDetailsPage extends StatelessWidget {
invoiceNO: Utils.isVidaPlusProject(projectViewModel, finalRadiology.projectID) ? finalRadiology.invoiceNo_VP.toString() : finalRadiology.invoiceNo.toString(), invoiceNO: Utils.isVidaPlusProject(projectViewModel, finalRadiology.projectID) ? finalRadiology.invoiceNo_VP.toString() : finalRadiology.invoiceNo.toString(),
isAppointmentHeader: true, isAppointmentHeader: true,
), ),
isShowAppBar: true, Expanded(
baseViewModel: model, child: SingleChildScrollView(
body: SingleChildScrollView(
child: Column( child: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Column(
width: double.maxFinite,
margin: EdgeInsets.all(8),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
SizedBox( SizedBox(
@ -94,11 +97,11 @@ class RadiologyDetailsPage extends StatelessWidget {
), ),
], ],
), ),
),
], ],
), ),
), ),
bottomSheet: model.radImageURL.isNotEmpty ),
model.radImageURL.isNotEmpty
? Container( ? Container(
height: 80, height: 80,
width: double.maxFinite, width: double.maxFinite,
@ -118,7 +121,30 @@ 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/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/medicine_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/prescription/prescription_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/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/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/utils/utils.dart'; import 'package:doctor_app_flutter/utils/utils.dart';
@ -118,7 +119,7 @@ class _AddDrugWidgetState extends State<AddDrugWidget> {
patient: widget.patient, patient: widget.patient,
doseTimeIn: widget.doseTime['id'].toString(), doseTimeIn: widget.doseTime['id'].toString(),
model: widget.modelPrescription, model: widget.modelPrescription,
duration: widget.duration['id'].toString(), duration: ProjectViewModel.getVidaPlusStatus()? widget.duration.toString(): widget.duration['id'].toString(),
frequency: widget.medicineModel!.itemMedicineList frequency: widget.medicineModel!.itemMedicineList
.length == .length ==
1 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/service/AnalyticsService.dart';
import 'package:doctor_app_flutter/core/viewModel/medicine_view_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/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/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/locator.dart'; import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/screens/prescription/prescription_text_filed.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/utils/utils.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.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/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/speech-text-popup.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/TextFields.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:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:speech_to_text/speech_recognition_error.dart'; import 'package:speech_to_text/speech_recognition_error.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt; import 'package:speech_to_text/speech_to_text.dart' as stt;
@ -249,6 +252,51 @@ getIcdCodeData() async{
}, },
hintText: TranslationBase.of(context).route, 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), SizedBox(height: spaceBetweenTextFields),
PrescriptionTextFiled( PrescriptionTextFiled(
hintText: TranslationBase.of(context).frequency, hintText: TranslationBase.of(context).frequency,
@ -258,17 +306,24 @@ getIcdCodeData() async{
elementList: widget.medicineViewModel.itemMedicineList, elementList: widget.medicineViewModel.itemMedicineList,
keyId: 'parameterCode', keyId: 'parameterCode',
keyName: 'description', keyName: 'description',
okFunction: (selectedValue) { okFunction: (selectedValue) async {
setState(() { setState(() {
frequency = selectedValue; frequency = selectedValue;
frequency['isDefault'] = true; frequency['isDefault'] = true;
});
if (widget.selectedMedication != null && duration != null && frequency != null && strengthController.text != null) { if (widget.selectedMedication != null && duration != null && frequency != null && strengthController.text != null) {
widget.medicineViewModel if(ProjectViewModel.getVidaPlusStatus() && units == null){
.getBoxQuantity(freq: frequency['parameterCode'], duration: duration['id'], itemCode: widget.selectedMedication.itemId, strength: double.parse(strengthController.text)); 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; return;
} }
});
}), }),
SizedBox(height: spaceBetweenTextFields), SizedBox(height: spaceBetweenTextFields),
PrescriptionTextFiled( PrescriptionTextFiled(
@ -364,34 +419,37 @@ getIcdCodeData() async{
]) ])
: widget.medicineViewModel.patientAssessmentList.isNotEmpty ? : widget.medicineViewModel.patientAssessmentList.isNotEmpty ?
Container( Material(
height: screenSize.height * 0.068,
width: double.infinity,
color: Colors.white, color: Colors.white,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row( child: Row(
children: [ children: [
Container( Flexible(
width: MediaQuery.of(context).size.width * 0.29, flex:1,
child: AppTextFieldCustom( child: AppTextFieldCustom(
hintText: widget.medicineViewModel.patientAssessmentList[0].icdCode10ID.toString(), hintText: "",
enabled: true, hideHint: true,
controller: TextEditingController( text:widget.medicineViewModel.patientAssessmentList.firstOrNull?.icdCode10ID?.toString()??""),
enabled: false,
onChanged: (value) {}, onChanged: (value) {},
onFieldSubmitted: () {}, onFieldSubmitted: () {},
), ),
), ),
Container( Flexible(flex: 2,
width: MediaQuery.of(context).size.width * 0.57,
color: Colors.white,
child: AppTextFieldCustom( child: AppTextFieldCustom(
maxLines: 5, maxLines: 5,
hintText: widget.medicineViewModel.patientAssessmentList[0].asciiDesc.toString(), hintText:"",
enabled: true, hideHint: true,
controller: TextEditingController( text:widget.medicineViewModel.patientAssessmentList.firstOrNull?.asciiDesc?.toString()??""),
enabled: false,
onChanged: (value) {}, onChanged: (value) {},
onFieldSubmitted: () {}, onFieldSubmitted: () {},
), ),
), ),
], ],
), ),
),
) :SizedBox(), ) :SizedBox(),
SizedBox(height: spaceBetweenTextFields), SizedBox(height: spaceBetweenTextFields),
SizedBox(height: 10,), SizedBox(height: 10,),
@ -420,6 +478,10 @@ getIcdCodeData() async{
), ),
), ),
SizedBox(height: spaceBetweenTextFields), SizedBox(height: spaceBetweenTextFields),
Visibility(
visible: ProjectViewModel.getVidaPlusStatus() == false,
child: Column(
children: [
PrescriptionTextFiled( PrescriptionTextFiled(
element: duration, element: duration,
elementError: durationError, elementError: durationError,
@ -438,6 +500,9 @@ getIcdCodeData() async{
}, },
), ),
SizedBox(height: spaceBetweenTextFields), SizedBox(height: spaceBetweenTextFields),
],
),
),
Container( Container(
color: Colors.white, color: Colors.white,
child: AppTextFieldCustom( child: AppTextFieldCustom(
@ -550,6 +615,25 @@ getIcdCodeData() async{
DrAppToastMsg.showErrorToast(TranslationBase.of(context).strengthCanNotBeZero); DrAppToastMsg.showErrorToast(TranslationBase.of(context).strengthCanNotBeZero);
return; 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()) { if (formKey.currentState!.validate()) {
Navigator.push( Navigator.push(

@ -2002,6 +2002,8 @@ class TranslationBase {
String get addDoctorRemarks => localizedValues['addDoctorRemarks']![locale.languageCode]!; String get addDoctorRemarks => localizedValues['addDoctorRemarks']![locale.languageCode]!;
String get kindlySelectCondition => localizedValues['kindlySelectCondition']![locale.languageCode]!; String get kindlySelectCondition => localizedValues['kindlySelectCondition']![locale.languageCode]!;
String get reset => localizedValues['reset']![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> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -34,6 +34,7 @@ class AppTextFieldCustom extends StatefulWidget {
final bool isSecure; final bool isSecure;
final bool focus; final bool focus;
final bool isSearchTextField; final bool isSearchTextField;
final bool hideHint;
AppTextFieldCustom({ AppTextFieldCustom({
this.height = 0, this.height = 0,
@ -57,6 +58,7 @@ class AppTextFieldCustom extends StatefulWidget {
this.isSecure = false, this.isSecure = false,
this.focus = false, this.focus = false,
this.isSearchTextField = false, this.isSearchTextField = false,
this.hideHint = false,
required this.onFieldSubmitted, required this.onFieldSubmitted,
this.onEditingComplete this.onEditingComplete
}); });
@ -130,7 +132,9 @@ class _AppTextFieldCustomState extends State<AppTextFieldCustom> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
AppText( Visibility(
visible: !widget.hideHint,
child: AppText(
widget.hintText!, widget.hintText!,
color: Color(0xFF2E303A), color: Color(0xFF2E303A),
fontSize: widget.isPrscription == false ? 11.0 : 0, fontSize: widget.isPrscription == false ? 11.0 : 0,
@ -138,6 +142,7 @@ class _AppTextFieldCustomState extends State<AppTextFieldCustom> {
letterSpacing: -0.44, letterSpacing: -0.44,
fontFamily: 'Poppins', fontFamily: 'Poppins',
), ),
),
widget.dropDownText == null widget.dropDownText == null
? Container( ? Container(
height: height:

Loading…
Cancel
Save