Claculate Box Quantity while adding prescrption

merge-requests/337/head
hussam al-habibeh 5 years ago
parent 780599a8b2
commit c239dbc620

@ -209,6 +209,8 @@ const GET_ITEM_BY_MEDICINE =
const GET_PROCEDURE_VALIDATION = const GET_PROCEDURE_VALIDATION =
'Services/DoctorApplication.svc/REST/ValidateProcedures'; 'Services/DoctorApplication.svc/REST/ValidateProcedures';
const GET_BOX_QUANTITY =
'Services/DoctorApplication.svc/REST/CalculateBoxQuantity';
var selectedPatientType = 1; var selectedPatientType = 1;

@ -0,0 +1,32 @@
class CalculateBoxQuantityRequestModel {
int itemCode;
double strength;
int frequency;
int duration;
String vidaAuthTokenID;
CalculateBoxQuantityRequestModel(
{this.itemCode,
this.strength,
this.frequency,
this.duration,
this.vidaAuthTokenID});
CalculateBoxQuantityRequestModel.fromJson(Map<String, dynamic> json) {
itemCode = json['ItemCode'];
strength = json['Strength'];
frequency = json['Frequency'];
duration = json['Duration'];
vidaAuthTokenID = json['VidaAuthTokenID'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ItemCode'] = this.itemCode;
data['Strength'] = this.strength;
data['Frequency'] = this.frequency;
data['Duration'] = this.duration;
data['VidaAuthTokenID'] = this.vidaAuthTokenID;
return data;
}
}

@ -6,7 +6,7 @@ class GetMedicationResponseModel {
dynamic price; dynamic price;
dynamic quantity; dynamic quantity;
bool isNarcotic; bool isNarcotic;
String uom;
GetMedicationResponseModel( GetMedicationResponseModel(
{this.description, {this.description,
this.genericName, this.genericName,
@ -14,7 +14,8 @@ class GetMedicationResponseModel {
this.keywords, this.keywords,
this.price, this.price,
this.quantity, this.quantity,
this.isNarcotic}); this.isNarcotic,
this.uom});
GetMedicationResponseModel.fromJson(Map<String, dynamic> json) { GetMedicationResponseModel.fromJson(Map<String, dynamic> json) {
description = json['Description']; description = json['Description'];
@ -24,6 +25,7 @@ class GetMedicationResponseModel {
price = json['Price']; price = json['Price'];
quantity = json['Quantity']; quantity = json['Quantity'];
isNarcotic = json['isNarcotic']; isNarcotic = json['isNarcotic'];
uom = json['uom'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -35,6 +37,7 @@ class GetMedicationResponseModel {
data['Price'] = this.price; data['Price'] = this.price;
data['Quantity'] = this.quantity; data['Quantity'] = this.quantity;
data['isNarcotic'] = this.isNarcotic; data['isNarcotic'] = this.isNarcotic;
data['uom'] = this.uom;
return data; return data;
} }
} }

@ -1,5 +1,6 @@
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/model/Prescription_model.dart'; import 'package:doctor_app_flutter/core/model/Prescription_model.dart';
import 'package:doctor_app_flutter/core/model/calculate_box_request_model.dart';
import 'package:doctor_app_flutter/core/model/get_medication_response_model.dart'; import 'package:doctor_app_flutter/core/model/get_medication_response_model.dart';
import 'package:doctor_app_flutter/core/model/item_by_medicine_request_model.dart'; import 'package:doctor_app_flutter/core/model/item_by_medicine_request_model.dart';
import 'package:doctor_app_flutter/core/model/prescription_req_model.dart'; import 'package:doctor_app_flutter/core/model/prescription_req_model.dart';
@ -27,6 +28,7 @@ class PrescriptionService extends LookupService {
List<dynamic> itemMedicineList = []; List<dynamic> itemMedicineList = [];
List<dynamic> itemMedicineListRoute = []; List<dynamic> itemMedicineListRoute = [];
List<dynamic> itemMedicineListUnit = []; List<dynamic> itemMedicineListUnit = [];
dynamic boxQuantity;
PrescriptionReqModel _prescriptionReqModel = PrescriptionReqModel(); PrescriptionReqModel _prescriptionReqModel = PrescriptionReqModel();
ItemByMedicineRequestModel _itemByMedicineRequestModel = ItemByMedicineRequestModel _itemByMedicineRequestModel =
@ -36,6 +38,9 @@ class PrescriptionService extends LookupService {
search: ["Amoxicillin"], search: ["Amoxicillin"],
); );
CalculateBoxQuantityRequestModel _boxQuantityRequestModel =
CalculateBoxQuantityRequestModel();
PostPrescriptionReqModel _postPrescriptionReqModel = PostPrescriptionReqModel _postPrescriptionReqModel =
PostPrescriptionReqModel(); PostPrescriptionReqModel();
@ -232,4 +237,23 @@ class PrescriptionService extends LookupService {
super.error = error; super.error = error;
}, body: request); }, body: request);
} }
Future calculateBoxQuantity(
{int freq, int duration, int itemCode, double strength}) async {
_boxQuantityRequestModel = CalculateBoxQuantityRequestModel(
frequency: freq,
duration: duration,
itemCode: itemCode,
strength: strength);
hasError = false;
await baseAppClient.post(GET_BOX_QUANTITY,
onSuccess: (dynamic response, int statusCode) {
boxQuantity = response['BoxQuantity'];
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: _boxQuantityRequestModel.toJson());
}
} }

@ -25,6 +25,7 @@ class MedicineViewModel extends BaseViewModel {
get medicationRouteList => _prescriptionService.medicationRouteList; get medicationRouteList => _prescriptionService.medicationRouteList;
get medicationFrequencyList => _prescriptionService.medicationFrequencyList; get medicationFrequencyList => _prescriptionService.medicationFrequencyList;
get boxQuintity => _prescriptionService.boxQuantity;
get medicationIndicationsList => get medicationIndicationsList =>
_prescriptionService.medicationIndicationsList; _prescriptionService.medicationIndicationsList;
@ -149,6 +150,18 @@ class MedicineViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future getBoxQuantity(
{int itemCode, int duration, double strength, int freq}) async {
setState(ViewState.Busy);
await _prescriptionService.calculateBoxQuantity(
strength: strength, itemCode: itemCode, duration: duration, freq: freq);
if (_prescriptionService.hasError) {
error = _prescriptionService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future getPharmaciesList(int itemId) async { Future getPharmaciesList(int itemId) async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _medicineService.getPharmaciesList(itemId); await _medicineService.getPharmaciesList(itemId);

@ -128,6 +128,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
dynamic doseTime; dynamic doseTime;
dynamic indication; dynamic indication;
dynamic units; dynamic units;
dynamic uom;
dynamic box;
dynamic x; dynamic x;
List<dynamic> indicationList; List<dynamic> indicationList;
@ -222,7 +224,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
(BuildContext context, ScrollController scrollController) { (BuildContext context, ScrollController scrollController) {
return SingleChildScrollView( return SingleChildScrollView(
child: Container( child: Container(
height: 1010, height: MediaQuery.of(context).size.height * 1.45,
child: Padding( child: Padding(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
horizontal: 12.0, vertical: 10.0), horizontal: 12.0, vertical: 10.0),
@ -262,12 +264,35 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
? AutoCompleteTextField< ? AutoCompleteTextField<
GetMedicationResponseModel>( GetMedicationResponseModel>(
onFocusChanged: (__) { onFocusChanged: (__) {
_selectedMedication != null if (_selectedMedication !=
? model.getItem( null) {
itemID: model.getItem(
_selectedMedication itemID:
.itemId) _selectedMedication
: null; .itemId);
uom = _selectedMedication.uom;
} else {
null;
}
if (_selectedMedication !=
null &&
duration != null &&
frequency != null &&
strengthController.text !=
null) {
model.getBoxQuantity(
freq: frequency[
'parameterCode'],
duration: duration['id'],
itemCode:
_selectedMedication
.itemId,
strength: double.parse(
strengthController
.text));
return;
}
}, },
decoration: decoration:
textFieldSelectorDecoration( textFieldSelectorDecoration(
@ -383,6 +408,26 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
"Only 5 Digits allowed for strength"); "Only 5 Digits allowed for strength");
} }
}, },
onSubmit: (_) {
if (_selectedMedication != null &&
duration != null &&
frequency != null &&
strengthController.text !=
null) {
model.getBoxQuantity(
freq: frequency[
'parameterCode'],
duration: duration['id'],
itemCode:
_selectedMedication
.itemId,
strength: double.parse(
strengthController
.text));
return;
}
},
// validator: (value) { // validator: (value) {
// if (value.isEmpty && // if (value.isEmpty &&
// strengthController.text.length > // strengthController.text.length >
@ -524,6 +569,27 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
frequency = selectedValue; frequency = selectedValue;
frequency['isDefault'] = frequency['isDefault'] =
true; true;
if (_selectedMedication !=
null &&
duration != null &&
frequency != null &&
strengthController
.text !=
null) {
model.getBoxQuantity(
freq: frequency[
'parameterCode'],
duration:
duration['id'],
itemCode:
_selectedMedication
.itemId,
strength: double.parse(
strengthController
.text));
return;
}
}); });
}, },
); );
@ -706,6 +772,29 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
okFunction: (selectedValue) { okFunction: (selectedValue) {
setState(() { setState(() {
duration = selectedValue; duration = selectedValue;
if (_selectedMedication !=
null &&
duration != null &&
frequency != null &&
strengthController
.text !=
null) {
model.getBoxQuantity(
freq: frequency[
'parameterCode'],
duration:
duration['id'],
itemCode:
_selectedMedication
.itemId,
strength: double.parse(
strengthController
.text),
);
box = model.boxQuintity;
return;
}
}); });
}, },
); );
@ -732,6 +821,90 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
), ),
), ),
SizedBox(height: spaceBetweenTextFileds), SizedBox(height: spaceBetweenTextFileds),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.allMedicationList != null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list: model.allMedicationList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText:
TranslationBase.of(context)
.ok,
okFunction: (selectedValue) {
setState(() {
duration = selectedValue;
});
},
);
showDialog(
barrierDismissible: false,
context: context,
builder:
(BuildContext context) {
return dialog;
},
);
}
: null,
child: TextField(
decoration: textFieldSelectorDecoration(
"UOM",
uom != null ? uom : null,
true),
//enabled: false,
readOnly: true,
),
),
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.allMedicationList != null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list: model.allMedicationList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText:
TranslationBase.of(context)
.ok,
okFunction: (selectedValue) {
setState(() {
duration = selectedValue;
});
},
);
showDialog(
barrierDismissible: false,
context: context,
builder:
(BuildContext context) {
return dialog;
},
);
}
: null,
child: TextField(
decoration: textFieldSelectorDecoration(
"Box Quantity",
box != null
? "Box Quantity: " +
model.boxQuintity.toString()
: null,
true),
//enabled: false,
readOnly: true,
),
),
),
SizedBox(height: spaceBetweenTextFileds),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(

@ -585,6 +585,18 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
.edit), .edit),
onTap: () { onTap: () {
updatePrescriptionForm( updatePrescriptionForm(
box: model
.prescriptionList[
0]
.entityList[
index]
.quantity,
uom: model
.prescriptionList[
0]
.entityList[
index]
.uom,
drugNameGeneric: model drugNameGeneric: model
.prescriptionList[ .prescriptionList[
0] 0]
@ -595,8 +607,9 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
.toString(), .toString(),
doseStreangth: model.prescriptionList[0].entityList[index].doseDailyQuantity doseStreangth: model.prescriptionList[0].entityList[index].doseDailyQuantity
.toString(), .toString(),
duration: model.prescriptionList[0].entityList[index].doseDurationDays duration:
.toString(), model.prescriptionList[0].entityList[index].doseDurationDays
.toString(),
startDate: startDate:
model.prescriptionList[0].entityList[index].startDate model.prescriptionList[0].entityList[index].startDate
.toString(), .toString(),
@ -611,18 +624,12 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
model.prescriptionList[0].entityList[index].frequencyID model.prescriptionList[0].entityList[index].frequencyID
.toString(), .toString(),
rouat: model rouat: model
.prescriptionList[
0]
.entityList[
index]
.routeID
.toString(),
patient:
patient,
drugId: model
.prescriptionList[0] .prescriptionList[0]
.entityList[index] .entityList[index]
.medicineCode, .routeID
.toString(),
patient: patient,
drugId: model.prescriptionList[0].entityList[index].medicineCode,
drugName: model.prescriptionList[0].entityList[index].doseDetail, drugName: model.prescriptionList[0].entityList[index].doseDetail,
remarks: model.prescriptionList[0].entityList[index].remarks, remarks: model.prescriptionList[0].entityList[index].remarks,
model: model, model: model,

@ -37,6 +37,8 @@ class UpdatePrescriptionForm extends StatefulWidget {
final String startDate; final String startDate;
final String frequency; final String frequency;
final String drugNameGeneric; final String drugNameGeneric;
final String uom;
final int box;
final PrescriptionViewModel model; final PrescriptionViewModel model;
@ -54,7 +56,9 @@ class UpdatePrescriptionForm extends StatefulWidget {
this.enteredRemarks, this.enteredRemarks,
this.frequency, this.frequency,
this.model, this.model,
this.drugNameGeneric}); this.drugNameGeneric,
this.uom,
this.box});
@override @override
_UpdatePrescriptionFormState createState() => _UpdatePrescriptionFormState(); _UpdatePrescriptionFormState createState() => _UpdatePrescriptionFormState();
} }
@ -116,7 +120,7 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
(BuildContext context, StateSetter setState /*You can rename this!*/) { (BuildContext context, StateSetter setState /*You can rename this!*/) {
return BaseView<MedicineViewModel>( return BaseView<MedicineViewModel>(
onModelReady: (model) async { onModelReady: (model) async {
//await model.getMedicationList(); await model.getMedicationList();
await model.getMedicationStrength(); await model.getMedicationStrength();
await model.getMedicationDuration(); await model.getMedicationDuration();
await model.getMedicationRoute(); await model.getMedicationRoute();
@ -151,7 +155,7 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
(BuildContext context, ScrollController scrollController) { (BuildContext context, ScrollController scrollController) {
return SingleChildScrollView( return SingleChildScrollView(
child: Container( child: Container(
height: MediaQuery.of(context).size.height * 2.0, height: MediaQuery.of(context).size.height * 1.5,
child: Form( child: Form(
child: Padding( child: Padding(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
@ -678,6 +682,96 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
SizedBox( SizedBox(
height: 12.0, height: 12.0,
), ),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.allMedicationList != null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list: model.allMedicationList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText: TranslationBase.of(
context)
.ok,
okFunction: (selectedValue) {
setState(() {
// duration = selectedValue;
});
},
);
showDialog(
barrierDismissible: false,
context: context,
builder:
(BuildContext context) {
return dialog;
},
);
}
: null,
child: TextField(
decoration:
textFieldSelectorDecoration(
"UOM",
widget.uom != null
? widget.uom
: null,
true),
// enabled: false,
readOnly: true,
),
),
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.allMedicationList != null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list: model.allMedicationList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText: TranslationBase.of(
context)
.ok,
okFunction: (selectedValue) {
setState(() {
// duration = selectedValue;
});
},
);
showDialog(
barrierDismissible: false,
context: context,
builder:
(BuildContext context) {
return dialog;
},
);
}
: null,
child: TextField(
decoration:
textFieldSelectorDecoration(
'Box Quantity',
widget.box != null
? "Box Quantity: " +
widget.box.toString()
: null,
true),
// enabled: false,
readOnly: true,
),
),
),
SizedBox(
height: 12.0,
),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(
@ -931,6 +1025,8 @@ void updatePrescriptionForm(
String doseStreangth, String doseStreangth,
String doseUnit, String doseUnit,
String enteredRemarks, String enteredRemarks,
String uom,
int box,
String startDate}) { String startDate}) {
TextEditingController remarksController = TextEditingController(); TextEditingController remarksController = TextEditingController();
TextEditingController doseController = TextEditingController(); TextEditingController doseController = TextEditingController();
@ -941,6 +1037,8 @@ void updatePrescriptionForm(
isScrollControlled: true, isScrollControlled: true,
builder: (BuildContext context) { builder: (BuildContext context) {
return UpdatePrescriptionForm( return UpdatePrescriptionForm(
box: box,
uom: uom,
drugName: drugName, drugName: drugName,
patient: patient, patient: patient,
doseStreangth: doseStreangth, doseStreangth: doseStreangth,

@ -388,14 +388,14 @@ class _ProcedureScreenState extends State<ProcedureScreen> {
Row( Row(
children: [ children: [
AppText( // AppText(
TranslationBase.of(context) // TranslationBase.of(context)
.price + // .price +
" : ", // " : ",
fontWeight: // fontWeight:
FontWeight // FontWeight
.w700, // .w700,
), // ),
// Expanded( // Expanded(
// child: AppText( // child: AppText(
// model // model

Loading…
Cancel
Save