merge-requests/250/head
Sultan Khan 5 years ago
commit 909940a6d9

@ -190,4 +190,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 649616dc336b3659ac6b2b25159d8e488e042b69 PODFILE CHECKSUM: 649616dc336b3659ac6b2b25159d8e488e042b69
COCOAPODS: 1.10.0 COCOAPODS: 1.10.0.rc.1

@ -43,14 +43,21 @@ class BaseAppClient {
if (body['DoctorID'] == null) if (body['DoctorID'] == null)
body['DoctorID'] = doctorProfile?.doctorID; body['DoctorID'] = doctorProfile?.doctorID;
if (body['DoctorID'] == "") body['DoctorID'] = null; if (body['DoctorID'] == "") body['DoctorID'] = null;
body['EditedBy'] = doctorProfile?.doctorID; if (body['EditedBy'] == null)
body['EditedBy'] = doctorProfile?.doctorID;
if (body['ProjectID'] == null) { if (body['ProjectID'] == null) {
body['ProjectID'] = doctorProfile?.projectID; body['ProjectID'] = doctorProfile?.projectID;
} }
if (body['ClinicID'] == null) if (body['ClinicID'] == null)
body['ClinicID'] = doctorProfile?.clinicID; body['ClinicID'] = doctorProfile?.clinicID;
} }
body['TokenID'] = token ?? '@dm!n'; if (body['DoctorID'] == '') {
body['DoctorID'] = null;
}
if (body['EditedBy'] == '') {
body.remove("EditedBy");
}
body['TokenID'] = token ?? '';
String lang = await sharedPref.getString(APP_Language); String lang = await sharedPref.getString(APP_Language);
if (lang != null && lang == 'ar') if (lang != null && lang == 'ar')
body['LanguageID'] = 1; body['LanguageID'] = 1;

@ -136,6 +136,9 @@ const GET_PATIENT_ARRIVAL_LIST =
const GET_ALLERGIES = 'Services/DoctorApplication.svc/REST/GetAllergies'; const GET_ALLERGIES = 'Services/DoctorApplication.svc/REST/GetAllergies';
const GET_MASTER_LOOKUP_LIST = const GET_MASTER_LOOKUP_LIST =
'Services/DoctorApplication.svc/REST/GetMasterLookUpList'; 'Services/DoctorApplication.svc/REST/GetMasterLookUpList';
const POST_EPISODE = 'Services/DoctorApplication.svc/REST/PostEpisode';
const POST_ALLERGY = 'Services/DoctorApplication.svc/REST/PostAllergies'; const POST_ALLERGY = 'Services/DoctorApplication.svc/REST/PostAllergies';
const POST_HISTORY = 'Services/DoctorApplication.svc/REST/PostHistory'; const POST_HISTORY = 'Services/DoctorApplication.svc/REST/PostHistory';
const POST_CHIEF_COMPLAINT = const POST_CHIEF_COMPLAINT =
@ -164,6 +167,7 @@ const GET_CHIEF_COMPLAINT =
const GET_PHYSICAL_EXAM = 'Services/DoctorApplication.svc/REST/GetPhysicalExam'; const GET_PHYSICAL_EXAM = 'Services/DoctorApplication.svc/REST/GetPhysicalExam';
const GET_PROGRESS_NOTE = 'Services/DoctorApplication.svc/REST/GetProgressNote'; const GET_PROGRESS_NOTE = 'Services/DoctorApplication.svc/REST/GetProgressNote';
const GET_ASSESSMENT = 'Services/DoctorApplication.svc/REST/GetAssessment'; const GET_ASSESSMENT = 'Services/DoctorApplication.svc/REST/GetAssessment';
const GET_ORDER_PROCEDURE = 'Services/DoctorApplication.svc/REST/GetOrderedProcedure';
const GET_CATEGORISE_PROCEDURE = const GET_CATEGORISE_PROCEDURE =
'Services/DoctorApplication.svc/REST/GetProcedure'; 'Services/DoctorApplication.svc/REST/GetProcedure';

@ -295,7 +295,10 @@ const Map<String, Map<String, String>> localizedValues = {
}, },
'clinicSelect': {'en': "Select Clinic", 'ar': 'اختار عيادة'}, 'clinicSelect': {'en': "Select Clinic", 'ar': 'اختار عيادة'},
'doctorSelect': {'en': "Select Doctor", 'ar': 'اختار طبيب'}, 'doctorSelect': {'en': "Select Doctor", 'ar': 'اختار طبيب'},
"empty-message": {"en": "Please enter message", "ar": "يرجى ادخال الموضوع"}, "empty-message": {
"en": "Please enter this field",
"ar": "يرجى ادخال هذا الحقل"
},
'no-sickleve-applied': { 'no-sickleve-applied': {
'en': "No sick leave applied", 'en': "No sick leave applied",
'ar': 'لم تطبق إجازة مرضية' 'ar': 'لم تطبق إجازة مرضية'
@ -571,4 +574,17 @@ const Map<String, Map<String, String>> localizedValues = {
"en": "The verification code expires in", "en": "The verification code expires in",
"ar": "تنتهي صلاحية رمز التحقق خلال" "ar": "تنتهي صلاحية رمز التحقق خلال"
}, },
'addAssessment': {'en': "Add ASSESSMENT", 'ar': "أضف التقييم"},
'assessment': {'en': "ASSESSMENT", 'ar': " التقييم"},
'physicalSystemExamination': {
'en': "Physical/System Examination",
'ar': " الفحص البدني / النظام"
},
'searchExamination': {'en': "Search Examination", 'ar': "فحص البحث"},
'addExamination': {'en': "Add Examination", 'ar': "اضافه"},
'doc': {'en': "Doc :", 'ar': " د: "},
'patientNoDetailErrMsg': {
'en': "There is no detail for this patient",
'ar': "لا توجد تفاصيل لهذا المريض"
},
}; };

@ -11,6 +11,7 @@ import 'package:doctor_app_flutter/models/SOAP/GetHistoryReqModel.dart';
import 'package:doctor_app_flutter/models/SOAP/GetHistoryResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetHistoryResModel.dart';
import 'package:doctor_app_flutter/models/SOAP/GetPhysicalExamListResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetPhysicalExamListResModel.dart';
import 'package:doctor_app_flutter/models/SOAP/GetPhysicalExamReqModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetPhysicalExamReqModel.dart';
import 'package:doctor_app_flutter/models/SOAP/PostEpisodeReqModel.dart';
import 'package:doctor_app_flutter/models/SOAP/get_Allergies_request_model.dart'; import 'package:doctor_app_flutter/models/SOAP/get_Allergies_request_model.dart';
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/models/SOAP/post_allergy_request_model.dart'; import 'package:doctor_app_flutter/models/SOAP/post_allergy_request_model.dart';
@ -31,6 +32,7 @@ class SOAPService extends LookupService {
List<GetGetProgressNoteResModel> patientProgressNoteList = []; List<GetGetProgressNoteResModel> patientProgressNoteList = [];
List<GetAssessmentResModel> patientAssessmentList = []; List<GetAssessmentResModel> patientAssessmentList = [];
int episodeID;
Future getAllergies(GetAllergiesRequestModel getAllergiesRequestModel) async { Future getAllergies(GetAllergiesRequestModel getAllergiesRequestModel) async {
await baseAppClient.post( await baseAppClient.post(
GET_ALLERGIES, GET_ALLERGIES,
@ -48,6 +50,20 @@ class SOAPService extends LookupService {
); );
} }
Future postEpisode(PostEpisodeReqModel postEpisodeReqModel) async {
hasError = false;
await baseAppClient.post(POST_EPISODE,
onSuccess: (dynamic response, int statusCode) {
print("Success");
episodeID = response['EpisodeID'];
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: postEpisodeReqModel.toJson());
}
Future postAllergy(PostAllergyRequestModel postAllergyRequestModel) async { Future postAllergy(PostAllergyRequestModel postAllergyRequestModel) async {
hasError = false; hasError = false;

@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/client/base_app_client.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
@ -12,7 +13,7 @@ class BaseService {
DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
DoctorProfileModel doctorProfile; DoctorProfileModel doctorProfile;
List<PatientArrivalEntity> patientArrivalList = []; List<PatiantInformtion> patientArrivalList = [];
//TODO add the user login model when we need it //TODO add the user login model when we need it
Future<DoctorProfileModel> getDoctorProfile() async { Future<DoctorProfileModel> getDoctorProfile() async {
@ -30,13 +31,19 @@ class BaseService {
} }
} }
Future getPatientArrivalList(String date,{String fromDate}) async{ Future getPatientArrivalList(String date,{String fromDate, int patientMrn = -1, int appointmentNo = -1}) async{
hasError = false; hasError = false;
Map<String, dynamic> body = Map(); Map<String, dynamic> body = Map();
body['From'] = fromDate == null ? date : fromDate; body['From'] = fromDate == null ? date : fromDate;
body['To'] = date; body['To'] = date;
body['PageIndex'] = 0; body['PageIndex'] = 0;
body['PageSize'] = 0; body['PageSize'] = 0;
if(patientMrn == -1){
body['PatientMRN'] = patientMrn;
}
if(appointmentNo == -1){
body['AppointmentNo'] = appointmentNo;
}
await baseAppClient.post( await baseAppClient.post(
GET_PATIENT_ARRIVAL_LIST, GET_PATIENT_ARRIVAL_LIST,
@ -44,7 +51,7 @@ class BaseService {
patientArrivalList.clear(); patientArrivalList.clear();
response['patientArrivalList']['entityList'].forEach((v) { response['patientArrivalList']['entityList'].forEach((v) {
PatientArrivalEntity item = PatientArrivalEntity.fromJson(v); PatiantInformtion item = PatiantInformtion.fromJson(v);
patientArrivalList.add(item); patientArrivalList.add(item);
}); });
}, },

@ -1,14 +1,19 @@
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/service/base/base_service.dart'; import 'package:doctor_app_flutter/core/service/base/base_service.dart';
import 'package:doctor_app_flutter/core/service/base/lookup-service.dart';
import 'package:doctor_app_flutter/models/SOAP/ChiefComplaint/GetChiefComplaintReqModel.dart'; import 'package:doctor_app_flutter/models/SOAP/ChiefComplaint/GetChiefComplaintReqModel.dart';
import 'package:doctor_app_flutter/models/SOAP/ChiefComplaint/GetChiefComplaintResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/ChiefComplaint/GetChiefComplaintResModel.dart';
import 'package:doctor_app_flutter/models/SOAP/GetAssessmentResModel.dart';
import 'package:doctor_app_flutter/models/SOAP/order-procedure.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign-data.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign-data.dart';
class UcafService extends BaseService { class UcafService extends LookupService {
List<GetChiefComplaintResModel> patientChiefComplaintList = []; List<GetChiefComplaintResModel> patientChiefComplaintList = [];
VitalSignData patientVitalSigns; VitalSignData patientVitalSigns;
List<GetAssessmentResModel> patientAssessmentList = [];
List<OrderProcedure> orderProcedureList = [];
Future getPatientChiefComplaint(PatiantInformtion patient) async { Future getPatientChiefComplaint(PatiantInformtion patient) async {
hasError = false; hasError = false;
@ -55,4 +60,45 @@ class UcafService extends BaseService {
body: body, body: body,
); );
} }
Future getPatientAssessment(PatiantInformtion patient) async {
hasError = false;
Map<String, dynamic> body = Map();
body['PatientMRN'] = patient.patientMRN;
body['AppointmentNo'] = patient.appointmentNo;
body['EpisodeID'] = patient.episodeNo;
await baseAppClient.post (GET_ASSESSMENT,
onSuccess: (dynamic response, int statusCode) {
print("Success");
patientAssessmentList.clear();
response['AssessmentList']['entityList'].forEach((v) {
patientAssessmentList.add(GetAssessmentResModel.fromJson(v));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
Future getOrderProcedures(PatiantInformtion patient) async {
hasError = false;
Map<String, dynamic> body = Map();
body['PatientMRN'] = patient.patientMRN;
// body['AppointmentNo'] = patient.appointmentNo;
// body['EpisodeID'] = patient.episodeNo;
await baseAppClient.post (GET_ORDER_PROCEDURE,
onSuccess: (dynamic response, int statusCode) {
print("Success");
orderProcedureList.clear();
response['OrderedProcedureList']['entityList'].forEach((v) {
orderProcedureList.add(OrderProcedure.fromJson(v));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
} }

@ -15,12 +15,11 @@ class PrescriptionService extends BaseService {
List<dynamic> specialityList = []; List<dynamic> specialityList = [];
PrescriptionReqModel _prescriptionReqModel = PrescriptionReqModel( PrescriptionReqModel _prescriptionReqModel = PrescriptionReqModel(
patientMRN: 3120877, //patientMRN: 3120877,
vidaAuthTokenID:
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyODA0IiwianRpIjoiNzNiNmUyZDctMjA0ZC00NzAyLTkxMDYtODE3MzI3OTZkYzI5IiwiZW1haWwiOiJNb2hhbWVkLlJlc3dhbkBjbG91ZHNvbHV0aW9uLXNhLmNvbSIsImlkIjoiMjgwNCIsIk5hbWUiOiJNVUhBTU1BRCBBWkFNIiwiRW1wbG95ZWVJZCI6IjE0ODUiLCJGYWNpbGl0eUdyb3VwSWQiOiIwMTAyNjYiLCJGYWNpbGl0eUlkIjoiMTUiLCJQaGFyYW1jeUZhY2lsaXR5SWQiOiI1NSIsIklTX1BIQVJNQUNZX0NPTk5FQ1RFRCI6IlRydWUiLCJEb2N0b3JJZCI6IjE0ODUiLCJTRVNTSU9OSUQiOiIyMTU3NjIwOSIsIkNsaW5pY0lkIjoiMyIsInJvbGUiOlsiU0VDVVJJVFkgQURNSU5JU1RSQVRPUlMiLCJTRVRVUCBBRE1JTklTVFJBVE9SUyIsIkNFTydTIiwiRVhFQ1VUSVZFIERJUkVDVE9SUyIsIk1BTkFHRVJTIiwiU1VQRVJWSVNPUlMiLCJDTElFTlQgU0VSVklDRVMgQ09PUkRJTkFUT1JTIiwiQ0xJRU5UIFNFUlZJQ0VTIFNVUEVSVklTT1JTIiwiQ0xJRU5UIFNFUlZJQ0VTIE1BTkdFUlMiLCJIRUFEIE5VUlNFUyIsIkRPQ1RPUlMiLCJDSElFRiBPRiBNRURJQ0FMIFNUQUZGUyIsIkJJTy1NRURJQ0FMIFRFQ0hOSUNJQU5TIiwiQklPLU1FRElDQUwgRU5HSU5FRVJTIiwiQklPLU1FRElDQUwgREVQQVJUTUVOVCBIRUFEUyIsIklUIEhFTFAgREVTSyIsIkFETUlOSVNUUkFUT1JTIiwiTEFCIEFETUlOSVNUUkFUT1IiLCJMQUIgVEVDSE5JQ0lBTiIsIkJVU0lORVNTIE9GRklDRSBTVEFGRiIsIkZJTkFOQ0UgQUNDT1VOVEFOVFMiLCJQSEFSTUFDWSBTVEFGRiIsIkFDQ09VTlRTIFNUQUZGIiwiTEFCIFJFQ0VQVElPTklTVCIsIkVSIE5VUlNFIiwiSU5QQVRJRU5UIEJJTExJTkcgU1VQRVJWSVNPUiIsIkxEUi1PUiBOVVJTRVMiLCJBRE1JU1NJT04gU1RBRkYiLCJIRUxQIERFU0sgQURNSU4iLCJBUFBST1ZBTCBTVEFGRiIsIklOUEFUSUVOVCBCSUxMSU5HIENPT1JESU5BVE9SIiwiQklMTElORyBTVEFGRiIsIkNPTlNFTlQgIiwiQ29uc2VudCAtIERlbnRhbCIsIldFQkVNUiJdLCJuYmYiOjE2MDgyMzY2MjAsImV4cCI6MTYwOTEwMDYyMCwiaWF0IjoxNjA4MjM2NjIwfQ.z4Lh0dCRr9GWXvaTo7x5GPV7R5z8ONyh3-0uk3PXMu8", );
);
SearchDrugRequestModel _drugRequestModel = SearchDrugRequestModel( SearchDrugRequestModel _drugRequestModel = SearchDrugRequestModel(
search: ["panadol"], search: ["Acetaminophen"],
vidaAuthTokenID: vidaAuthTokenID:
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAyIiwianRpIjoiY2QwOWU3MTEtZDEwYy00NjZhLWEwNDctMjc4MDBmNmRkMTYxIiwiZW1haWwiOiIiLCJpZCI6IjEwMDIiLCJOYW1lIjoiVEVNUCAtIERPQ1RPUiIsIkVtcGxveWVlSWQiOiI0NzA5IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiI0NzA5IiwiU0VTU0lPTklEIjoiMjE1OTYyMDMiLCJDbGluaWNJZCI6IjEiLCJyb2xlIjpbIkhFQUQgTlVSU0VTIiwiRE9DVE9SUyIsIkhFQUQgRE9DVE9SUyIsIkFETUlOSVNUUkFUT1JTIiwiUkVDRVBUSU9OSVNUIiwiRVIgTlVSU0UiLCJJVkYgUkVDRVBUSU9OSVNUIiwiRVIgUkVDRVBUSU9OSVNUIiwiUEhBUk1BQ1kgQUNDT1VOVCBTVEFGRiIsIlBIQVJNQUNZIE5VUlNFIiwiSU5QQVRJRU5UIFBIQVJNQUNJU1QiLCJBRE1JU1NJT04gU1RBRkYiLCJBUFBST1ZBTCBTVEFGRiIsIklWRiBET0NUT1IiLCJJVkYgTlVSU0UiLCJJVkYgQ09PUkRJTkFUT1IiLCJJVkYgTEFCIFNUQUZGIiwiQ09OU0VOVCAiLCJNRURJQ0FMIFJFUE9SVCAtIFNJQ0sgTEVBVkUgTUFOQUdFUiJdLCJuYmYiOjE2MDkyNjQ2MTQsImV4cCI6MTYxMDEyODYxNCwiaWF0IjoxNjA5MjY0NjE0fQ.xCJ0jGtSFf36G8uZpdmHVoLfXDyP6e9mBpuOPSlzuio", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAyIiwianRpIjoiY2QwOWU3MTEtZDEwYy00NjZhLWEwNDctMjc4MDBmNmRkMTYxIiwiZW1haWwiOiIiLCJpZCI6IjEwMDIiLCJOYW1lIjoiVEVNUCAtIERPQ1RPUiIsIkVtcGxveWVlSWQiOiI0NzA5IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiI0NzA5IiwiU0VTU0lPTklEIjoiMjE1OTYyMDMiLCJDbGluaWNJZCI6IjEiLCJyb2xlIjpbIkhFQUQgTlVSU0VTIiwiRE9DVE9SUyIsIkhFQUQgRE9DVE9SUyIsIkFETUlOSVNUUkFUT1JTIiwiUkVDRVBUSU9OSVNUIiwiRVIgTlVSU0UiLCJJVkYgUkVDRVBUSU9OSVNUIiwiRVIgUkVDRVBUSU9OSVNUIiwiUEhBUk1BQ1kgQUNDT1VOVCBTVEFGRiIsIlBIQVJNQUNZIE5VUlNFIiwiSU5QQVRJRU5UIFBIQVJNQUNJU1QiLCJBRE1JU1NJT04gU1RBRkYiLCJBUFBST1ZBTCBTVEFGRiIsIklWRiBET0NUT1IiLCJJVkYgTlVSU0UiLCJJVkYgQ09PUkRJTkFUT1IiLCJJVkYgTEFCIFNUQUZGIiwiQ09OU0VOVCAiLCJNRURJQ0FMIFJFUE9SVCAtIFNJQ0sgTEVBVkUgTUFOQUdFUiJdLCJuYmYiOjE2MDkyNjQ2MTQsImV4cCI6MTYxMDEyODYxNCwiaWF0IjoxNjA5MjY0NjE0fQ.xCJ0jGtSFf36G8uZpdmHVoLfXDyP6e9mBpuOPSlzuio",
); );
@ -29,7 +28,7 @@ class PrescriptionService extends BaseService {
PostPrescriptionReqModel(); PostPrescriptionReqModel();
Future getPrescription({int mrn}) async { Future getPrescription({int mrn}) async {
_prescriptionReqModel = PrescriptionReqModel(patientMRN: 3120877); _prescriptionReqModel = PrescriptionReqModel(patientMRN: mrn);
hasError = false; hasError = false;
_prescriptionList.clear(); _prescriptionList.clear();
await baseAppClient.post(GET_PRESCRIPTION_LIST, await baseAppClient.post(GET_PRESCRIPTION_LIST,

@ -13,6 +13,7 @@ import 'package:doctor_app_flutter/models/SOAP/GetHistoryReqModel.dart';
import 'package:doctor_app_flutter/models/SOAP/GetHistoryResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetHistoryResModel.dart';
import 'package:doctor_app_flutter/models/SOAP/GetPhysicalExamListResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetPhysicalExamListResModel.dart';
import 'package:doctor_app_flutter/models/SOAP/GetPhysicalExamReqModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetPhysicalExamReqModel.dart';
import 'package:doctor_app_flutter/models/SOAP/PostEpisodeReqModel.dart';
import 'package:doctor_app_flutter/models/SOAP/get_Allergies_request_model.dart'; import 'package:doctor_app_flutter/models/SOAP/get_Allergies_request_model.dart';
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/models/SOAP/post_allergy_request_model.dart'; import 'package:doctor_app_flutter/models/SOAP/post_allergy_request_model.dart';
@ -78,6 +79,8 @@ class SOAPViewModel extends BaseViewModel {
List<GetAssessmentResModel> get patientAssessmentList => List<GetAssessmentResModel> get patientAssessmentList =>
_SOAPService.patientAssessmentList; _SOAPService.patientAssessmentList;
int get episodeID =>
_SOAPService.episodeID;
Future getAllergies(GetAllergiesRequestModel getAllergiesRequestModel) async { Future getAllergies(GetAllergiesRequestModel getAllergiesRequestModel) async {
setState(ViewState.Busy); setState(ViewState.Busy);
@ -99,6 +102,17 @@ class SOAPViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future postEpisode(PostEpisodeReqModel postEpisodeReqModel) async {
setState(ViewState.BusyLocal);
await _SOAPService.postEpisode(postEpisodeReqModel);
if (_SOAPService.hasError) {
error = _SOAPService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future postAllergy(PostAllergyRequestModel postAllergyRequestModel) async { Future postAllergy(PostAllergyRequestModel postAllergyRequestModel) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await _SOAPService.postAllergy(postAllergyRequestModel); await _SOAPService.postAllergy(postAllergyRequestModel);
@ -222,6 +236,7 @@ class SOAPViewModel extends BaseViewModel {
Future getPatientAllergy(GeneralGetReqForSOAP generalGetReqForSOAP) async { Future getPatientAllergy(GeneralGetReqForSOAP generalGetReqForSOAP) async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _SOAPService.getPatientAllergy(generalGetReqForSOAP); await _SOAPService.getPatientAllergy(generalGetReqForSOAP);
if (_SOAPService.hasError) { if (_SOAPService.hasError) {
@ -231,6 +246,14 @@ class SOAPViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
String getAllergicNames(){
String allergiesString='';
patientAllergiesList.forEach((element) {
allergiesString += element.allergyDiseaseName+' , ';
});
return allergiesString;
}
Future getPatientHistories(GetHistoryReqModel getHistoryReqModel, {bool isFirst = false}) async { Future getPatientHistories(GetHistoryReqModel getHistoryReqModel, {bool isFirst = false}) async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _SOAPService.getPatientHistories(getHistoryReqModel, isFirst: isFirst); await _SOAPService.getPatientHistories(getHistoryReqModel, isFirst: isFirst);

@ -27,7 +27,7 @@ class PatientReferralViewModel extends BaseViewModel {
List<PendingReferral> get pendingReferral => List<PendingReferral> get pendingReferral =>
_referralPatientService.pendingReferralList; _referralPatientService.pendingReferralList;
List<PatientArrivalEntity> get patientArrivalList => List<PatiantInformtion> get patientArrivalList =>
_referralPatientService.patientArrivalList; _referralPatientService.patientArrivalList;
Future getMasterLookup(MasterKeysService masterKeys) async { Future getMasterLookup(MasterKeysService masterKeys) async {
@ -133,4 +133,19 @@ class PatientReferralViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
} }
Future getPatientDetails(String fromDate, String toDate, int patientMrn, int appointmentNo) async {
setState(ViewState.Busy);
await _referralPatientService.getPatientArrivalList(toDate, fromDate: fromDate, patientMrn: patientMrn, appointmentNo: appointmentNo);
if (_referralPatientService.hasError) {
error = _referralPatientService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
/*
* model
.getPatientArrivalList()*/
} }

@ -1,19 +1,42 @@
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/service/patient-ucaf-service.dart'; import 'package:doctor_app_flutter/core/service/patient-ucaf-service.dart';
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
import 'package:doctor_app_flutter/models/SOAP/ChiefComplaint/GetChiefComplaintResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/ChiefComplaint/GetChiefComplaintResModel.dart';
import 'package:doctor_app_flutter/models/SOAP/GetAssessmentResModel.dart';
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/models/SOAP/order-procedure.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign-data.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign-data.dart';
import 'package:flutter/material.dart';
import '../../locator.dart'; import '../../locator.dart';
class UcafViewModel extends BaseViewModel { class UcafViewModel extends BaseViewModel {
UcafService _ucafService = locator<UcafService>(); UcafService _ucafService = locator<UcafService>();
List<GetChiefComplaintResModel> get patientChiefComplaintList => _ucafService.patientChiefComplaintList; List<GetChiefComplaintResModel> get patientChiefComplaintList =>
_ucafService.patientChiefComplaintList;
VitalSignData get patientVitalSigns => _ucafService.patientVitalSigns; VitalSignData get patientVitalSigns => _ucafService.patientVitalSigns;
List<GetAssessmentResModel> get patientAssessmentList =>
_ucafService.patientAssessmentList;
List<MasterKeyModel> get diagnosisTypes => _ucafService.listOfDiagnosisType;
List<MasterKeyModel> get diagnosisConditions =>
_ucafService.listOfDiagnosisCondition;
List<OrderProcedure> get orderProcedures => _ucafService.orderProcedureList;
String selectedLanguage;
Future getLanguage() async {
selectedLanguage = await sharedPref.getString(APP_Language);
}
Future getUCAFData(PatiantInformtion patient) async { Future getUCAFData(PatiantInformtion patient) async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _ucafService.getPatientVitalSign(patient); await _ucafService.getPatientVitalSign(patient);
@ -27,4 +50,69 @@ class UcafViewModel extends BaseViewModel {
} }
} }
} Future getPatientAssessment(PatiantInformtion patient) async {
if (patientAssessmentList.isEmpty) {
setState(ViewState.Busy);
await _ucafService.getPatientAssessment(patient);
if (_ucafService.hasError) {
error = _ucafService.error;
setState(ViewState.Error);
} else {
if (patientAssessmentList.isNotEmpty) {
if (diagnosisConditions.length == 0) {
await _ucafService
.getMasterLookup(MasterKeysService.DiagnosisCondition);
}
if (diagnosisTypes.length == 0) {
await _ucafService.getMasterLookup(MasterKeysService.DiagnosisType);
}
if (_ucafService.hasError) {
error = _ucafService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
} else
setState(ViewState.Idle); // but with empty list
}
}
}
Future getOrderProcedures(PatiantInformtion patient) async {
if (orderProcedures.isEmpty) {
setState(ViewState.Busy);
await _ucafService.getOrderProcedures(patient);
if (_ucafService.hasError) {
error = _ucafService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
}
MasterKeyModel findMasterDataById(
{@required MasterKeysService masterKeys, dynamic id}) {
switch (masterKeys) {
case MasterKeysService.DiagnosisCondition:
List<MasterKeyModel> result = diagnosisConditions.where((element) {
return element.id == id &&
element.typeId == masterKeys.getMasterKeyService();
}).toList();
if (result.isNotEmpty) {
return result.first;
}
return null;
case MasterKeysService.DiagnosisType:
List<MasterKeyModel> result = diagnosisTypes.where((element) {
return element.id == id &&
element.typeId == masterKeys.getMasterKeyService();
}).toList();
if (result.isNotEmpty) {
return result.first;
}
return null;
default:
return null;
}
}
}

@ -11,40 +11,8 @@ import '../../locator.dart';
class VitalSignsViewModel extends BaseViewModel { class VitalSignsViewModel extends BaseViewModel {
VitalSignsService _vitalSignService = locator<VitalSignsService>(); VitalSignsService _vitalSignService = locator<VitalSignsService>();
List<PatientArrivalEntity> get patientArrivalList =>
_vitalSignService.patientArrivalList;
VitalSignData get patientVitalSigns => _vitalSignService.patientVitalSigns; VitalSignData get patientVitalSigns => _vitalSignService.patientVitalSigns;
/*Future getPatientArrivalList(String date, PatiantInformtion patient,
{String fromDate}) async {
// TODO when arrival list work un comment below lines
*//* setState(ViewState.Busy);
await _vitalSignService.getPatientArrivalList(date, fromDate: fromDate);
if (_vitalSignService.hasError) {
error = _vitalSignService.error;
setState(ViewState.Error);
} else {
await getPatientVitalSign(patient);
}*//*
makeVitalSignDemoData();
}
PatientArrivalEntity getPatientAppointmentEntity(PatiantInformtion patient) {
String ffName = "${patient.firstName} ${patient.lastName}";
String fmfName =
"${patient.firstName} ${patient.middleName} ${patient.lastName}";
for (var element in patientArrivalList) {
int index = patientArrivalList.indexOf(element);
if (element.patientName == ffName || element.patientName == fmfName) {
return element;
}
// print("patient index: $index");
}
return null;
}*/
Future getPatientVitalSign(PatiantInformtion patient) async { Future getPatientVitalSign(PatiantInformtion patient) async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _vitalSignService.getPatientVitalSign(patient); await _vitalSignService.getPatientVitalSign(patient);

@ -64,10 +64,9 @@ class _LandingPageState extends State<LandingPage> {
ShowCaseWidget( ShowCaseWidget(
builder: Builder(builder: (context) => DashboardScreen()), builder: Builder(builder: (context) => DashboardScreen()),
), ),
MessagesScreen(), // MessagesScreen(),
//MyScheduleScreen(), MyScheduleScreen(),
NewPrescriptionScreen(), // ServicesScreen()
ServicesScreen()
], ],
), ),
bottomNavigationBar: BottomNavBar(changeIndex: _changeCurrentTab), bottomNavigationBar: BottomNavBar(changeIndex: _changeCurrentTab),

@ -3,16 +3,19 @@ class GetChiefComplaintReqModel {
int appointmentNo; int appointmentNo;
int episodeId; int episodeId;
int episodeID; int episodeID;
dynamic doctorID;
GetChiefComplaintReqModel( GetChiefComplaintReqModel(
{this.patientMRN, this.appointmentNo, this.episodeId, this.episodeID}); {this.patientMRN, this.appointmentNo, this.episodeId, this.episodeID, this.doctorID});
GetChiefComplaintReqModel.fromJson(Map<String, dynamic> json) { GetChiefComplaintReqModel.fromJson(Map<String, dynamic> json) {
patientMRN = json['PatientMRN']; patientMRN = json['PatientMRN'];
appointmentNo = json['AppointmentNo']; appointmentNo = json['AppointmentNo'];
episodeId = json['EpisodeId']; episodeId = json['EpisodeId'];
episodeID = json['EpisodeID']; episodeID = json['EpisodeID'];
} doctorID = json['DoctorID'];
}
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>();
@ -20,6 +23,8 @@ class GetChiefComplaintReqModel {
data['AppointmentNo'] = this.appointmentNo; data['AppointmentNo'] = this.appointmentNo;
data['EpisodeId'] = this.episodeId; data['EpisodeId'] = this.episodeId;
data['EpisodeID'] = this.episodeID; data['EpisodeID'] = this.episodeID;
data['DoctorID'] = this.doctorID;
return data; return data;
} }
} }

@ -2,16 +2,23 @@ class GeneralGetReqForSOAP {
int patientMRN; int patientMRN;
int appointmentNo; int appointmentNo;
int episodeId; int episodeId;
String doctorID; dynamic editedBy;
dynamic doctorID;
GeneralGetReqForSOAP( GeneralGetReqForSOAP({
{this.patientMRN, this.appointmentNo, this.episodeId, this.doctorID}); this.patientMRN,
this.appointmentNo,
this.episodeId,
this.doctorID,
this.editedBy,
});
GeneralGetReqForSOAP.fromJson(Map<String, dynamic> json) { GeneralGetReqForSOAP.fromJson(Map<String, dynamic> json) {
patientMRN = json['PatientMRN']; patientMRN = json['PatientMRN'];
appointmentNo = json['AppointmentNo']; appointmentNo = json['AppointmentNo'];
episodeId = json['EpisodeId']; episodeId = json['EpisodeId'];
doctorID = json['DoctorID']; doctorID = json['DoctorID'];
editedBy = json['EditedBy'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -20,6 +27,8 @@ class GeneralGetReqForSOAP {
data['AppointmentNo'] = this.appointmentNo; data['AppointmentNo'] = this.appointmentNo;
data['EpisodeId'] = this.episodeId; data['EpisodeId'] = this.episodeId;
data['DoctorID'] = this.doctorID; data['DoctorID'] = this.doctorID;
data['EditedBy'] = this.editedBy;
return data; return data;
} }
} }

@ -5,7 +5,8 @@ class GetAssessmentReqModel {
String from; String from;
String to; String to;
int clinicID; int clinicID;
int doctorID; dynamic doctorID;
dynamic editedBy;
GetAssessmentReqModel( GetAssessmentReqModel(
{this.patientMRN, {this.patientMRN,
@ -14,6 +15,7 @@ class GetAssessmentReqModel {
this.from, this.from,
this.to, this.to,
this.clinicID, this.clinicID,
this.editedBy,
this.doctorID}); this.doctorID});
GetAssessmentReqModel.fromJson(Map<String, dynamic> json) { GetAssessmentReqModel.fromJson(Map<String, dynamic> json) {
@ -24,6 +26,7 @@ class GetAssessmentReqModel {
to = json['To']; to = json['To'];
clinicID = json['ClinicID']; clinicID = json['ClinicID'];
doctorID = json['DoctorID']; doctorID = json['DoctorID'];
editedBy = json['EditedBy'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -35,6 +38,7 @@ class GetAssessmentReqModel {
data['To'] = this.to; data['To'] = this.to;
data['ClinicID'] = this.clinicID; data['ClinicID'] = this.clinicID;
data['DoctorID'] = this.doctorID; data['DoctorID'] = this.doctorID;
data['EditedBy'] = this.editedBy;
return data; return data;
} }
} }

@ -5,7 +5,8 @@ class GetGetProgressNoteReqModel {
String from; String from;
String to; String to;
int clinicID; int clinicID;
int doctorID; dynamic doctorID;
dynamic editedBy;
GetGetProgressNoteReqModel( GetGetProgressNoteReqModel(
{this.patientMRN, {this.patientMRN,
@ -14,6 +15,7 @@ class GetGetProgressNoteReqModel {
this.from, this.from,
this.to, this.to,
this.clinicID, this.clinicID,
this.editedBy,
this.doctorID}); this.doctorID});
GetGetProgressNoteReqModel.fromJson(Map<String, dynamic> json) { GetGetProgressNoteReqModel.fromJson(Map<String, dynamic> json) {
@ -24,6 +26,8 @@ class GetGetProgressNoteReqModel {
to = json['To']; to = json['To'];
clinicID = json['ClinicID']; clinicID = json['ClinicID'];
doctorID = json['DoctorID']; doctorID = json['DoctorID'];
editedBy = json['EditedBy'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -35,6 +39,7 @@ class GetGetProgressNoteReqModel {
data['To'] = this.to; data['To'] = this.to;
data['ClinicID'] = this.clinicID; data['ClinicID'] = this.clinicID;
data['DoctorID'] = this.doctorID; data['DoctorID'] = this.doctorID;
data['EditedBy'] = this.editedBy;
return data; return data;
} }
} }

@ -5,8 +5,9 @@ class GetHistoryReqModel {
String from; String from;
String to; String to;
int clinicID; int clinicID;
int doctorID;
int appointmentNo; int appointmentNo;
dynamic editedBy;
dynamic doctorID;
GetHistoryReqModel( GetHistoryReqModel(
{this.patientMRN, {this.patientMRN,
@ -16,6 +17,7 @@ class GetHistoryReqModel {
this.to, this.to,
this.clinicID, this.clinicID,
this.doctorID, this.doctorID,
this.editedBy,
this.appointmentNo}); this.appointmentNo});
GetHistoryReqModel.fromJson(Map<String, dynamic> json) { GetHistoryReqModel.fromJson(Map<String, dynamic> json) {
@ -27,6 +29,7 @@ class GetHistoryReqModel {
clinicID = json['ClinicID']; clinicID = json['ClinicID'];
doctorID = json['DoctorID']; doctorID = json['DoctorID'];
appointmentNo = json['AppointmentNo']; appointmentNo = json['AppointmentNo'];
editedBy = json['EditedBy'];
} }
@ -40,6 +43,8 @@ class GetHistoryReqModel {
data['To'] = this.to; data['To'] = this.to;
data['ClinicID'] = this.clinicID; data['ClinicID'] = this.clinicID;
data['DoctorID'] = this.doctorID; data['DoctorID'] = this.doctorID;
data['EditedBy'] = this.editedBy;
return data; return data;
} }
} }

@ -4,13 +4,18 @@ class GetPhysicalExamReqModel {
String episodeID; String episodeID;
String from; String from;
String to; String to;
dynamic editedBy;
dynamic doctorID;
GetPhysicalExamReqModel( GetPhysicalExamReqModel({
{this.patientMRN, this.patientMRN,
this.appointmentNo, this.appointmentNo,
this.episodeID, this.episodeID,
this.from, this.from,
this.to}); this.to,
this.doctorID,
this.editedBy,
});
GetPhysicalExamReqModel.fromJson(Map<String, dynamic> json) { GetPhysicalExamReqModel.fromJson(Map<String, dynamic> json) {
patientMRN = json['PatientMRN']; patientMRN = json['PatientMRN'];
@ -18,6 +23,8 @@ class GetPhysicalExamReqModel {
episodeID = json['EpisodeID']; episodeID = json['EpisodeID'];
from = json['From']; from = json['From'];
to = json['To']; to = json['To'];
doctorID = json['DoctorID'];
editedBy = json['EditedBy'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -27,6 +34,8 @@ class GetPhysicalExamReqModel {
data['EpisodeID'] = this.episodeID; data['EpisodeID'] = this.episodeID;
data['From'] = this.from; data['From'] = this.from;
data['To'] = this.to; data['To'] = this.to;
data['DoctorID'] = this.doctorID;
data['EditedBy'] = this.editedBy;
return data; return data;
} }
} }

@ -0,0 +1,28 @@
class PostEpisodeReqModel {
int appointmentNo;
int patientMRN;
int doctorID;
String vidaAuthTokenID;
PostEpisodeReqModel(
{this.appointmentNo,
this.patientMRN,
this.doctorID,
this.vidaAuthTokenID});
PostEpisodeReqModel.fromJson(Map<String, dynamic> json) {
appointmentNo = json['AppointmentNo'];
patientMRN = json['PatientMRN'];
doctorID = json['DoctorID'];
vidaAuthTokenID = json['VidaAuthTokenID'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['AppointmentNo'] = this.appointmentNo;
data['PatientMRN'] = this.patientMRN;
data['DoctorID'] = this.doctorID;
data['VidaAuthTokenID'] = this.vidaAuthTokenID;
return data;
}
}

@ -5,9 +5,14 @@ class MySelectedAllergy {
MasterKeyModel selectedAllergy; MasterKeyModel selectedAllergy;
String remark; String remark;
bool isChecked; bool isChecked;
int createdBy;
MySelectedAllergy( MySelectedAllergy(
{this.selectedAllergySeverity, this.selectedAllergy, this.remark, this.isChecked}); {this.selectedAllergySeverity,
this.selectedAllergy,
this.remark,
this.isChecked,
this.createdBy});
MySelectedAllergy.fromJson(Map<String, dynamic> json) { MySelectedAllergy.fromJson(Map<String, dynamic> json) {
selectedAllergySeverity = json['selectedAllergySeverity'] != null selectedAllergySeverity = json['selectedAllergySeverity'] != null
@ -18,6 +23,7 @@ class MySelectedAllergy {
: null; : null;
remark = json['remark']; remark = json['remark'];
remark = json['isChecked']; remark = json['isChecked'];
createdBy = json['createdBy'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -30,6 +36,7 @@ class MySelectedAllergy {
} }
data['remark'] = this.remark; data['remark'] = this.remark;
data['isChecked'] = this.remark; data['isChecked'] = this.remark;
data['createdBy'] = this.createdBy;
return data; return data;
} }
} }

@ -6,12 +6,21 @@ class MySelectedAssessment {
MasterKeyModel selectedDiagnosisType; MasterKeyModel selectedDiagnosisType;
String remark; String remark;
int appointmentId; int appointmentId;
int createdBy;
String createdOn;
int doctorID;
String doctorName;
String icdCode10ID;
MySelectedAssessment( MySelectedAssessment(
{this.selectedICD, {this.selectedICD,
this.selectedDiagnosisCondition, this.selectedDiagnosisCondition,
this.selectedDiagnosisType, this.selectedDiagnosisType,
this.remark, this.appointmentId}); this.remark, this.appointmentId, this.createdBy,
this.createdOn,
this.doctorID,
this.doctorName,
this.icdCode10ID});
MySelectedAssessment.fromJson(Map<String, dynamic> json) { MySelectedAssessment.fromJson(Map<String, dynamic> json) {
selectedICD = json['selectedICD'] != null selectedICD = json['selectedICD'] != null
@ -25,6 +34,11 @@ class MySelectedAssessment {
: null; : null;
remark = json['remark']; remark = json['remark'];
appointmentId = json['appointmentId']; appointmentId = json['appointmentId'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
doctorID = json['doctorID'];
doctorName = json['doctorName'];
icdCode10ID = json['icdCode10ID'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -41,7 +55,11 @@ class MySelectedAssessment {
} }
data['remark'] = this.remark; data['remark'] = this.remark;
data['appointmentId'] = this.appointmentId; data['appointmentId'] = this.appointmentId;
data['createdBy'] = this.createdBy;
data['createdOn'] = this.createdOn;
data['doctorID'] = this.doctorID;
data['doctorName'] = this.doctorName;
data['icdCode10ID'] = this.icdCode10ID;
return data; return data;
} }
} }

@ -5,18 +5,23 @@ class MySelectedExamination {
String remark; String remark;
bool isNormal; bool isNormal;
bool isAbnormal; bool isAbnormal;
int createdBy;
MySelectedExamination( MySelectedExamination(
{this.selectedExamination, this.remark, this.isNormal = true, this.isAbnormal = false}); {this.selectedExamination,
this.remark,
this.isNormal = true,
this.isAbnormal = false,
this.createdBy});
MySelectedExamination.fromJson(Map<String, dynamic> json) { MySelectedExamination.fromJson(Map<String, dynamic> json) {
selectedExamination = json['selectedExamination'] != null selectedExamination = json['selectedExamination'] != null
? new MasterKeyModel.fromJson(json['selectedExamination']) ? new MasterKeyModel.fromJson(json['selectedExamination'])
: null; : null;
remark = json['remark']; remark = json['remark'];
remark = json['isNormal']; remark = json['isNormal'];
remark = json['isAbnormal']; remark = json['isAbnormal'];
createdBy = json['createdBy'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -28,6 +33,7 @@ class MySelectedExamination {
data['remark'] = this.remark; data['remark'] = this.remark;
data['isNormal'] = this.isNormal; data['isNormal'] = this.isNormal;
data['isAbnormal'] = this.isAbnormal; data['isAbnormal'] = this.isAbnormal;
data['createdBy'] = this.createdBy;
return data; return data;
} }
} }

@ -0,0 +1,30 @@
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
class MySelectedHistory {
MasterKeyModel selectedHistory;
String remark;
bool isChecked;
MySelectedHistory(
{ this.selectedHistory, this.remark, this.isChecked});
MySelectedHistory.fromJson(Map<String, dynamic> json) {
selectedHistory = json['selectedHistory'] != null
? new MasterKeyModel.fromJson(json['selectedHistory'])
: null;
remark = json['remark'];
remark = json['isChecked'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.selectedHistory != null) {
data['selectedHistory'] = this.selectedHistory.toJson();
}
data['remark'] = this.remark;
data['isChecked'] = this.remark;
return data;
}
}

@ -0,0 +1,110 @@
class OrderProcedure {
String achiCode;
String appointmentDate;
int appointmentNo;
int categoryID;
String clinicDescription;
String cptCode;
int createdBy;
String createdOn;
String doctorName;
bool isApprovalCreated;
bool isApprovalRequired;
bool isCovered;
bool isInvoiced;
bool isReferralInvoiced;
bool isUncoveredByDoctor;
int lineItemNo;
String orderDate;
int orderNo;
int orderType;
String procedureId;
String procedureName;
String remarks;
String status;
String template;
OrderProcedure(
{this.achiCode,
this.appointmentDate,
this.appointmentNo,
this.categoryID,
this.clinicDescription,
this.cptCode,
this.createdBy,
this.createdOn,
this.doctorName,
this.isApprovalCreated,
this.isApprovalRequired,
this.isCovered,
this.isInvoiced,
this.isReferralInvoiced,
this.isUncoveredByDoctor,
this.lineItemNo,
this.orderDate,
this.orderNo,
this.orderType,
this.procedureId,
this.procedureName,
this.remarks,
this.status,
this.template});
OrderProcedure.fromJson(Map<String, dynamic> json) {
achiCode = json['achiCode'];
appointmentDate = json['appointmentDate'];
appointmentNo = json['appointmentNo'];
categoryID = json['categoryID'];
clinicDescription = json['clinicDescription'];
cptCode = json['cptCode'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
doctorName = json['doctorName'];
isApprovalCreated = json['isApprovalCreated'];
isApprovalRequired = json['isApprovalRequired'];
isCovered = json['isCovered'];
isInvoiced = json['isInvoiced'];
isReferralInvoiced = json['isReferralInvoiced'];
isUncoveredByDoctor = json['isUncoveredByDoctor'];
lineItemNo = json['lineItemNo'];
orderDate = json['orderDate'];
orderNo = json['orderNo'];
orderType = json['orderType'];
procedureId = json['procedureId'];
procedureName = json['procedureName'];
remarks = json['remarks'];
status = json['status'];
template = json['template'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['achiCode'] = this.achiCode;
data['appointmentDate'] = this.appointmentDate;
data['appointmentNo'] = this.appointmentNo;
data['categoryID'] = this.categoryID;
data['clinicDescription'] = this.clinicDescription;
data['cptCode'] = this.cptCode;
data['createdBy'] = this.createdBy;
data['createdOn'] = this.createdOn;
data['doctorName'] = this.doctorName;
data['isApprovalCreated'] = this.isApprovalCreated;
data['isApprovalRequired'] = this.isApprovalRequired;
data['isCovered'] = this.isCovered;
data['isInvoiced'] = this.isInvoiced;
data['isReferralInvoiced'] = this.isReferralInvoiced;
data['isUncoveredByDoctor'] = this.isUncoveredByDoctor;
data['lineItemNo'] = this.lineItemNo;
data['orderDate'] = this.orderDate;
data['orderNo'] = this.orderNo;
data['orderType'] = this.orderType;
data['procedureId'] = this.procedureId;
data['procedureName'] = this.procedureName;
data['remarks'] = this.remarks;
data['status'] = this.status;
data['template'] = this.template;
return data;
}
}

@ -8,17 +8,22 @@ class PostChiefComplaintRequestModel {
bool ispregnant; bool ispregnant;
bool isLactation; bool isLactation;
int numberOfWeeks; int numberOfWeeks;
dynamic doctorID;
dynamic editedBy;
PostChiefComplaintRequestModel( PostChiefComplaintRequestModel(
{this.appointmentNo, {this.appointmentNo,
this.episodeID, this.episodeID,
this.patientMRN, this.patientMRN,
this.chiefComplaint, this.chiefComplaint,
this.hopi, this.hopi,
this.currentMedication, this.currentMedication,
this.ispregnant, this.ispregnant,
this.isLactation, this.isLactation,
this.numberOfWeeks}); this.doctorID,
this.editedBy,
this.numberOfWeeks});
PostChiefComplaintRequestModel.fromJson(Map<String, dynamic> json) { PostChiefComplaintRequestModel.fromJson(Map<String, dynamic> json) {
appointmentNo = json['AppointmentNo']; appointmentNo = json['AppointmentNo'];
@ -30,6 +35,8 @@ class PostChiefComplaintRequestModel {
ispregnant = json['ispregnant']; ispregnant = json['ispregnant'];
isLactation = json['isLactation']; isLactation = json['isLactation'];
numberOfWeeks = json['numberOfWeeks']; numberOfWeeks = json['numberOfWeeks'];
doctorID = json['DoctorID'];
editedBy = json['EditedBy'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -43,6 +50,9 @@ class PostChiefComplaintRequestModel {
data['ispregnant'] = this.ispregnant; data['ispregnant'] = this.ispregnant;
data['isLactation'] = this.isLactation; data['isLactation'] = this.isLactation;
data['numberOfWeeks'] = this.numberOfWeeks; data['numberOfWeeks'] = this.numberOfWeeks;
data['DoctorID'] = this.doctorID;
data['EditedBy'] = this.editedBy;
return data; return data;
} }
} }

@ -1,7 +1,8 @@
class PostHistoriesRequestModel { class PostHistoriesRequestModel {
List<ListMedicalHistoryVM> listMedicalHistoryVM; List<ListMedicalHistoryVM> listMedicalHistoryVM;
dynamic doctorID;
PostHistoriesRequestModel({this.listMedicalHistoryVM}); PostHistoriesRequestModel({this.listMedicalHistoryVM, this.doctorID});
PostHistoriesRequestModel.fromJson(Map<String, dynamic> json) { PostHistoriesRequestModel.fromJson(Map<String, dynamic> json) {
if (json['listMedicalHistoryVM'] != null) { if (json['listMedicalHistoryVM'] != null) {
@ -10,6 +11,7 @@ class PostHistoriesRequestModel {
listMedicalHistoryVM.add(new ListMedicalHistoryVM.fromJson(v)); listMedicalHistoryVM.add(new ListMedicalHistoryVM.fromJson(v));
}); });
} }
doctorID = json['DoctorID'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -18,6 +20,7 @@ class PostHistoriesRequestModel {
data['listMedicalHistoryVM'] = data['listMedicalHistoryVM'] =
this.listMedicalHistoryVM.map((v) => v.toJson()).toList(); this.listMedicalHistoryVM.map((v) => v.toJson()).toList();
} }
data['DoctorID'] = this.doctorID;
return data; return data;
} }
} }

@ -1,4 +1,4 @@
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
class PostPhysicalExamRequestModel { class PostPhysicalExamRequestModel {
List<ListHisProgNotePhysicalExaminationVM> listHisProgNotePhysicalExaminationVM; List<ListHisProgNotePhysicalExaminationVM> listHisProgNotePhysicalExaminationVM;

@ -3,15 +3,24 @@ class PostProgressNoteRequestModel {
int episodeId; int episodeId;
int patientMRN; int patientMRN;
String planNote; String planNote;
dynamic doctorID;
dynamic editedBy;
PostProgressNoteRequestModel( PostProgressNoteRequestModel(
{this.appointmentNo, this.episodeId, this.patientMRN, this.planNote}); {this.appointmentNo,
this.episodeId,
this.patientMRN,
this.planNote,
this.doctorID,
this.editedBy});
PostProgressNoteRequestModel.fromJson(Map<String, dynamic> json) { PostProgressNoteRequestModel.fromJson(Map<String, dynamic> json) {
appointmentNo = json['AppointmentNo']; appointmentNo = json['AppointmentNo'];
episodeId = json['EpisodeID']; episodeId = json['EpisodeID'];
patientMRN = json['PatientMRN']; patientMRN = json['PatientMRN'];
planNote = json['PlanNote']; planNote = json['PlanNote'];
doctorID = json['DoctorID'];
editedBy = json['EditedBy'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -20,6 +29,8 @@ class PostProgressNoteRequestModel {
data['EpisodeID'] = this.episodeId; data['EpisodeID'] = this.episodeId;
data['PatientMRN'] = this.patientMRN; data['PatientMRN'] = this.patientMRN;
data['PlanNote'] = this.planNote; data['PlanNote'] = this.planNote;
data['DoctorID'] = this.doctorID;
data['EditedBy'] = this.editedBy;
return data; return data;
} }
} }

@ -28,13 +28,14 @@ class GetPatientArrivalListRequestModel {
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['VidaAuthTokenID'] = this.vidaAuthTokenID;
data['From'] = this.from; data['From'] = this.from;
data['To'] = this.to; data['To'] = this.to;
data['DoctorID'] = this.doctorID; data['DoctorID'] = this.doctorID;
data['PageIndex'] = this.pageIndex; data['PageIndex'] = this.pageIndex;
data['PageSize'] = this.pageSize; data['PageSize'] = this.pageSize;
data['ClinicID'] = this.clinicID; data['ClinicID'] = this.clinicID;
data['VidaAuthTokenID'] = this.vidaAuthTokenID;
return data; return data;
} }
} }

@ -10,9 +10,11 @@ import 'package:doctor_app_flutter/models/doctor/profile_req_Model.dart';
import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/hospital_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/hospital_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/models/patient/patient_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/profile/referral/my-referral-patient-screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/referral/my-referral-patient-screen.dart';
import 'package:doctor_app_flutter/screens/reschedule-leaves/add-rescheduleleave.dart'; import 'package:doctor_app_flutter/screens/reschedule-leaves/add-rescheduleleave.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart';
import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
@ -86,6 +88,25 @@ class _DashboardScreenState extends State<DashboardScreen> {
if (!currentFocus.hasPrimaryFocus) { if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus(); currentFocus.unfocus();
} }
var _patientSearchFormValues = PatientModel(
FirstName: "0",
MiddleName: "0",
LastName: "0",
PatientMobileNumber: "0",
PatientIdentificationID: "0",
PatientID: 0,
From: DateUtils.convertDateToFormat(DateTime. now(), 'yyyy-MM-dd').toString(),
To: DateUtils.convertDateToFormat(DateTime. now(), 'yyyy-MM-dd').toString(),
LanguageID: 2,
stamp: "2020-03-02T13:56:39.170Z",
IPAdress: "11.11.11.11",
VersionID: 1.2,
Channel: 9,
TokenID: "2Fi7HoIHB0eDyekVa6tCJg==",
SessionID: "5G0yXn0Jnq",
IsLoginForDoctorApp: true,
PatientOutSA: false);
return BaseView<DashboardViewModel>( return BaseView<DashboardViewModel>(
onModelReady: (model) => model.getDashboard(), onModelReady: (model) => model.getDashboard(),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
@ -966,6 +987,8 @@ class _DashboardScreenState extends State<DashboardScreen> {
height: 20, height: 20,
), ),
Row( Row(
// mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
DashboardItem( DashboardItem(
child: Column( child: Column(
@ -993,6 +1016,30 @@ class _DashboardScreenState extends State<DashboardScreen> {
), ),
); );
}, },
),
SizedBox(width: 8,),
DashboardItem(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Icon(
DoctorApp.patient,
size: 50,
),
AppText(
TranslationBase.of(context).arrived,
color: Colors.black,
textAlign: TextAlign.center,
)
],
),
hasBorder: true,
onTap: () {
Navigator.of(context).pushNamed(PATIENTS, arguments: {
"patientSearchForm": _patientSearchFormValues,
"selectedType": "7"
});
},
) )
], ],
), ),

File diff suppressed because it is too large Load Diff

@ -68,21 +68,9 @@ class _PatientSearchScreenState extends State<PatientSearchScreen> {
try { try {
/* Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
DoctorProfileModel doctorProfile =
new DoctorProfileModel.fromJson(profile)*/;
if (_formKey.currentState.validate()) { if (_formKey.currentState.validate()) {
_formKey.currentState.save(); _formKey.currentState.save();
/* sharedPref.setString(SLECTED_PATIENT_TYPE, _selectedType);
String token = await sharedPref.getString(TOKEN);
_patientSearchFormValues.TokenID = token;
_patientSearchFormValues.ProjectID = doctorProfile.projectID; //15
_patientSearchFormValues.DoctorID = doctorProfile.doctorID;
_patientSearchFormValues.ClinicID = doctorProfile.clinicID;*/
if ((_patientSearchFormValues.From == "0" || if ((_patientSearchFormValues.From == "0" ||
_patientSearchFormValues.To == "0") && _patientSearchFormValues.To == "0") &&
_selectedType == "7") { _selectedType == "7") {

@ -274,7 +274,8 @@ class _PatientsScreenState extends State<PatientsScreen> {
.then((res) { .then((res) {
setState(() { setState(() {
_isLoading = false; _isLoading = false;
if (res['MessageStatus'] == 1) {
if (res != null && res['MessageStatus'] == 1) {
if (val2 == 7) { if (val2 == 7) {
if (res[SERVICES_PATIANT2[val2]] == null) { if (res[SERVICES_PATIANT2[val2]] == null) {
_isError = true; _isError = true;
@ -282,6 +283,9 @@ class _PatientsScreenState extends State<PatientsScreen> {
this.error = error.toString(); this.error = error.toString();
} else { } else {
var localList = []; var localList = [];
if(res["patientArrivalList"]["entityList"] == null){
res["patientArrivalList"]["entityList"] = [];
}
res["patientArrivalList"]["entityList"].forEach((v) { res["patientArrivalList"]["entityList"].forEach((v) {
Map<String, dynamic> mergedPatient = { Map<String, dynamic> mergedPatient = {
...v, ...v,
@ -289,7 +293,6 @@ class _PatientsScreenState extends State<PatientsScreen> {
}; };
localList.add(mergedPatient); localList.add(mergedPatient);
}); });
print(localList.toString());
lItems = localList; lItems = localList;
} }
} else { } else {
@ -301,7 +304,7 @@ class _PatientsScreenState extends State<PatientsScreen> {
_isError = false; _isError = false;
} else { } else {
_isError = true; _isError = true;
error = res['ErrorEndUserMessage'] ?? res['ErrorMessage']; error = model.error; //res['ErrorEndUserMessage'] ?? res['ErrorMessage'];
} }
}); });
}).catchError((error) { }).catchError((error) {

@ -1,5 +1,9 @@
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-ucaf-viewmodel.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-ucaf-viewmodel.dart';
import 'package:doctor_app_flutter/models/SOAP/GetAssessmentResModel.dart';
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/models/SOAP/order-procedure.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/helpers.dart';
@ -7,9 +11,12 @@ import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/PatientHeaderWidgetNoAvatar.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/PatientHeaderWidgetNoAvatar.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.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/borderedButton.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import '../../../../routes.dart';
class UcafDetailScreen extends StatefulWidget { class UcafDetailScreen extends StatefulWidget {
@override @override
_UcafDetailScreenState createState() => _UcafDetailScreenState(); _UcafDetailScreenState createState() => _UcafDetailScreenState();
@ -25,39 +32,86 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
final screenSize = MediaQuery.of(context).size; final screenSize = MediaQuery.of(context).size;
return BaseView<UcafViewModel>( return BaseView<UcafViewModel>(
onModelReady: (model) async {
await model.getLanguage();
await model.getPatientAssessment(patient);
},
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
appBarTitle: TranslationBase.of(context).ucaf, appBarTitle: TranslationBase.of(context).ucaf,
body: Container( body: Column(
child: SingleChildScrollView( children: [
child: Column( Expanded(
crossAxisAlignment: CrossAxisAlignment.start, child: Container(
children: [ child: SingleChildScrollView(
PatientHeaderWidgetNoAvatar(patient),
SizedBox(
height: 10,
),
Container(
margin:
EdgeInsets.symmetric(vertical: 16, horizontal: 16),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
treatmentStepsBar(context, screenSize), PatientHeaderWidgetNoAvatar(patient),
SizedBox( SizedBox(
height: 16, height: 10,
),
Container(
margin:
EdgeInsets.symmetric(vertical: 16, horizontal: 16),
child: Column(
children: [
treatmentStepsBar(
context, model, screenSize, patient),
SizedBox(
height: 16,
),
...getSelectedTreatmentStepItem(context, model),
],
),
), ),
...getSelectedTreatmentStepItem(context),
], ],
), ),
), ),
], ),
),
Container(
margin:
EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: BorderedButton(
TranslationBase.of(context).save,
hasBorder: true,
vPadding: 8,
hPadding: 8,
borderColor: HexColor("#B8382B"),
backgroundColor: HexColor("#B8382B"),
textColor: Colors.white,
fontSize: SizeConfig.textMultiplier * 2.0,
handler: () {},
),
),
Container(
margin:
EdgeInsets.only(left: 16, right: 16, top: 0.0, bottom: 8),
child: BorderedButton(
TranslationBase.of(context).cancel,
hasBorder: true,
vPadding: 8,
hPadding: 8,
borderColor: Colors.white,
backgroundColor: Colors.white,
textColor: HexColor("#B8382B"),
fontSize: SizeConfig.textMultiplier * 2.2,
handler: () {
Navigator.of(context).popUntil((route){
return route.settings.name == PATIENTS_PROFILE;
});
},
),
), ),
), ],
), ),
)); ));
} }
Widget treatmentStepsBar(BuildContext _context, Size screenSize) { Widget treatmentStepsBar(BuildContext _context, UcafViewModel model,
Size screenSize, PatiantInformtion patient) {
List<String> __treatmentSteps = [ List<String> __treatmentSteps = [
TranslationBase.of(context).diagnosis.toUpperCase(), TranslationBase.of(context).diagnosis.toUpperCase(),
TranslationBase.of(context).medications.toUpperCase(), TranslationBase.of(context).medications.toUpperCase(),
@ -93,8 +147,16 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
), ),
)), )),
), ),
onTap: () { onTap: () async {
print(__treatmentSteps.indexOf(item)); print(__treatmentSteps.indexOf(item));
if (__treatmentSteps.indexOf(item) == 0) {
await model.getPatientAssessment(patient);
} else if (__treatmentSteps.indexOf(item) == 1) {
print("call Medications");
}
if (__treatmentSteps.indexOf(item) == 2) {
await model.getOrderProcedures(patient);
}
setState(() { setState(() {
_activeTap = __treatmentSteps.indexOf(item); _activeTap = __treatmentSteps.indexOf(item);
}); });
@ -106,14 +168,41 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
); );
} }
List<Widget> getSelectedTreatmentStepItem(BuildContext _context) { List<Widget> getSelectedTreatmentStepItem(
BuildContext _context, UcafViewModel model) {
switch (_activeTap) { switch (_activeTap) {
case 0: case 0:
return [...List.generate(2, (index) => DiagnosisWidget()).toList()]; if (model.patientAssessmentList != null) {
return [
...List.generate(
model.patientAssessmentList.length,
(index) => DiagnosisWidget(
model, model.patientAssessmentList[index])).toList()
];
} else {
return [
Container(),
];
}
break;
case 1: case 1:
return [...List.generate(2, (index) => MedicationWidget()).toList()]; return [...List.generate(2, (index) => MedicationWidget()).toList()];
break;
case 2: case 2:
return [...List.generate(2, (index) => ProceduresWidget()).toList()]; if (model.orderProcedures != null) {
return [
...List.generate(
model.orderProcedures.length,
(index) =>
ProceduresWidget(model, model.orderProcedures[index]))
.toList()
];
} else {
return [
Container(),
];
}
break;
default: default:
return [ return [
Container(), Container(),
@ -123,8 +212,20 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
} }
class DiagnosisWidget extends StatelessWidget { class DiagnosisWidget extends StatelessWidget {
final UcafViewModel model;
final GetAssessmentResModel diagnosis;
DiagnosisWidget(this.model, this.diagnosis);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
MasterKeyModel diagnosisType = model.findMasterDataById(
masterKeys: MasterKeysService.DiagnosisType,
id: diagnosis.diagnosisTypeID);
MasterKeyModel diagnosisCondition = model.findMasterDataById(
masterKeys: MasterKeysService.DiagnosisCondition,
id: diagnosis.conditionID);
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@ -136,7 +237,11 @@ class DiagnosisWidget extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
AppText( AppText(
"Preliminary Diagnosis", diagnosisType != null
? model.selectedLanguage == 'ar'
? diagnosisType.nameAr
: diagnosisType.nameEn
: "-",
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
@ -149,7 +254,7 @@ class DiagnosisWidget extends StatelessWidget {
children: [ children: [
Expanded( Expanded(
child: AppText( child: AppText(
"B34.2 | CORONA VIRUS INFECTION, UNSPECIFIED SITE", diagnosis.asciiDesc,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
@ -167,7 +272,7 @@ class DiagnosisWidget extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
AppText( AppText(
"174.00 Same", "${diagnosis.icdCode10ID} ${diagnosisCondition != null ? model.selectedLanguage == 'ar' ? diagnosisCondition.nameAr : diagnosisCondition.nameEn : "-"}",
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
@ -284,6 +389,11 @@ class MedicationWidget extends StatelessWidget {
} }
class ProceduresWidget extends StatelessWidget { class ProceduresWidget extends StatelessWidget {
final UcafViewModel model;
final OrderProcedure procedure;
ProceduresWidget(this.model, this.procedure);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Column(
@ -296,7 +406,7 @@ class ProceduresWidget extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
AppText( AppText(
"019054846", procedure.achiCode,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
@ -310,14 +420,13 @@ class ProceduresWidget extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
AppText( AppText(
"1", "${procedure.lineItemNo}",
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
], ],
), ),
), ),
], ],
), ),
SizedBox( SizedBox(
@ -327,7 +436,7 @@ class ProceduresWidget extends StatelessWidget {
children: [ children: [
Expanded( Expanded(
child: AppText( child: AppText(
"SCAN - RENAL MASS PROTOCOL", procedure.procedureName,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
@ -345,9 +454,9 @@ class ProceduresWidget extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
AppText( AppText(
"Yes", "${procedure.isCovered}",
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
color: Colors.green, color: procedure.isCovered ? Colors.green : Colors.red,
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
SizedBox( SizedBox(
@ -359,7 +468,7 @@ class ProceduresWidget extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
AppText( AppText(
"Yes", "${procedure.isApprovalRequired}",
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
@ -376,7 +485,7 @@ class ProceduresWidget extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
AppText( AppText(
"Yes", "${procedure.isUncoveredByDoctor}",
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),

@ -3,6 +3,7 @@ import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-referral-viewmodel.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-referral-viewmodel.dart';
import 'package:doctor_app_flutter/models/patient/my_referral/PendingReferral.dart'; import 'package:doctor_app_flutter/models/patient/my_referral/PendingReferral.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/patient-referral-item-widget.dart'; import 'package:doctor_app_flutter/widgets/patients/patient-referral-item-widget.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/PatientProfileButton.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/PatientProfileButton.dart';
@ -11,8 +12,11 @@ import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.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/borderedButton.dart'; import 'package:doctor_app_flutter/widgets/shared/borderedButton.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../../../routes.dart';
class MyReferralDetailScreen extends StatelessWidget { class MyReferralDetailScreen extends StatelessWidget {
PendingReferral pendingReferral; PendingReferral pendingReferral;
@ -25,10 +29,18 @@ class MyReferralDetailScreen extends StatelessWidget {
pendingReferral = routeArgs['referral']; pendingReferral = routeArgs['referral'];
return BaseView<PatientReferralViewModel>( return BaseView<PatientReferralViewModel>(
onModelReady: (model) => model.getPatientDetails(
DateUtils.convertStringToDateFormat(
DateTime.now().subtract(Duration(days: 350)).toString(),
"yyyy-MM-dd"),
DateUtils.convertStringToDateFormat(
DateTime.now().toString(), "yyyy-MM-dd"),
pendingReferral.patientID,
pendingReferral.sourceAppointmentNo),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
appBarTitle: TranslationBase.of(context).referPatient, appBarTitle: TranslationBase.of(context).referPatient,
body: Column( body: model.patientArrivalList != null ? Column(
children: [ children: [
Expanded( Expanded(
child: SingleChildScrollView( child: SingleChildScrollView(
@ -63,8 +75,10 @@ class MyReferralDetailScreen extends StatelessWidget {
patientName: pendingReferral.patientName, patientName: pendingReferral.patientName,
referralStatus: null, referralStatus: null,
isReferredTo: false, isReferredTo: false,
isSameBranch: pendingReferral.isReferralDoctorSameBranch, isSameBranch:
referralDoctorName: pendingReferral.referredByDoctorInfo, pendingReferral.isReferralDoctorSameBranch,
referralDoctorName:
pendingReferral.referredByDoctorInfo,
clinicDescription: null, clinicDescription: null,
remark: pendingReferral.remarksFromSource, remark: pendingReferral.remarksFromSource,
), ),
@ -73,7 +87,8 @@ class MyReferralDetailScreen extends StatelessWidget {
childAspectRatio: 1.8, childAspectRatio: 1.8,
crossAxisSpacing: 8, crossAxisSpacing: 8,
mainAxisSpacing: 10, mainAxisSpacing: 10,
controller: new ScrollController(keepScrollOffset: false), controller:
new ScrollController(keepScrollOffset: false),
shrinkWrap: true, shrinkWrap: true,
padding: const EdgeInsets.all(4.0), padding: const EdgeInsets.all(4.0),
crossAxisCount: 2, crossAxisCount: 2,
@ -82,8 +97,10 @@ class MyReferralDetailScreen extends StatelessWidget {
key: key, key: key,
// patient: patient, // patient: patient,
// route: RADIOLOGY, // route: RADIOLOGY,
nameLine1: TranslationBase.of(context).previewHealth, nameLine1:
nameLine2: TranslationBase.of(context).summaryReport, TranslationBase.of(context).previewHealth,
nameLine2:
TranslationBase.of(context).summaryReport,
icon: 'radiology-1.png'), icon: 'radiology-1.png'),
PatientProfileButton( PatientProfileButton(
key: key, key: key,
@ -94,8 +111,8 @@ class MyReferralDetailScreen extends StatelessWidget {
icon: 'lab.png'), icon: 'lab.png'),
PatientProfileButton( PatientProfileButton(
key: key, key: key,
// patient: patient, patient: model.patientArrivalList[0],
// route: VITAL_SIGN_DETAILS, route: PATIENT_VITAL_SIGN,
nameLine1: TranslationBase.of(context).vital, nameLine1: TranslationBase.of(context).vital,
nameLine2: TranslationBase.of(context).signs, nameLine2: TranslationBase.of(context).signs,
icon: 'heartbeat.png'), icon: 'heartbeat.png'),
@ -119,7 +136,7 @@ class MyReferralDetailScreen extends StatelessWidget {
fontSize: 16, fontSize: 16,
hPadding: 8, hPadding: 8,
vPadding: 12, vPadding: 12,
handler: (){ handler: () {
model.responseReferral(pendingReferral, true); model.responseReferral(pendingReferral, true);
}, },
), ),
@ -135,7 +152,7 @@ class MyReferralDetailScreen extends StatelessWidget {
fontSize: 16, fontSize: 16,
hPadding: 8, hPadding: 8,
vPadding: 12, vPadding: 12,
handler: (){ handler: () {
model.responseReferral(pendingReferral, false); model.responseReferral(pendingReferral, false);
}, },
), ),
@ -144,6 +161,15 @@ class MyReferralDetailScreen extends StatelessWidget {
), ),
), ),
], ],
) : Container(
child: Center(
child: AppText(
TranslationBase.of(context).patientNoDetailErrMsg,
color: HexColor("#B8382B"),
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
), ),
), ),
); );

@ -40,11 +40,7 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
referToList = List();
dynamic sameBranch = {"id": 1, "name": "Same Branch"};
dynamic otherBranch = {"id": 2, "name": "Other Branch"};
referToList.add(sameBranch);
referToList.add(otherBranch);
appointmentDate = DateTime.now(); appointmentDate = DateTime.now();
} }
@ -53,6 +49,12 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
final routeArgs = ModalRoute.of(context).settings.arguments as Map; final routeArgs = ModalRoute.of(context).settings.arguments as Map;
patient = routeArgs['patient']; patient = routeArgs['patient'];
referToList = List();
dynamic sameBranch = {"id": 1, "name": TranslationBase.of(context).sameBranch};
dynamic otherBranch = {"id": 2, "name": TranslationBase.of(context).otherBranch};
referToList.add(sameBranch);
referToList.add(otherBranch);
final screenSize = MediaQuery.of(context).size; final screenSize = MediaQuery.of(context).size;
return BaseView<PatientReferralViewModel>( return BaseView<PatientReferralViewModel>(

File diff suppressed because it is too large Load Diff

@ -453,21 +453,30 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
.edit), .edit),
onTap: () { onTap: () {
updatePrescriptionForm( updatePrescriptionForm(
context, patient:
model patient,
.prescriptionList[ drugId: model
0] .prescriptionList[
.entityList[ 0]
index] .entityList[
.medicationName, index]
model .medicineCode,
.prescriptionList[ drugName: model
0] .prescriptionList[
.entityList[ 0]
index] .entityList[
.medicineCode, index]
model, .medicationName,
); remarks: model
.prescriptionList[
0]
.entityList[
index]
.remarks,
model:
model,
context:
context);
//model.postPrescription(); //model.postPrescription();
}, },
), ),
@ -563,7 +572,12 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
} }
void updatePrescriptionForm( void updatePrescriptionForm(
context, String drugName, int drugId, PrescriptionViewModel model) { {context,
String drugName,
int drugId,
String remarks,
PrescriptionViewModel model,
PatiantInformtion patient}) {
TextEditingController remarksController = TextEditingController(); TextEditingController remarksController = TextEditingController();
TextEditingController doseController = TextEditingController(); TextEditingController doseController = TextEditingController();
TextEditingController frequencyController = TextEditingController(); TextEditingController frequencyController = TextEditingController();
@ -635,6 +649,7 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
SizedBox( SizedBox(
height: 12.0, height: 12.0,
), ),
AppText('Remarks'),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: borderRadius:
@ -642,7 +657,7 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
border: Border.all( border: Border.all(
width: 1.0, color: HexColor("#CCCCCC"))), width: 1.0, color: HexColor("#CCCCCC"))),
child: TextFields( child: TextFields(
hintText: 'Remarks', hintText: remarks,
controller: remarksController, controller: remarksController,
maxLines: 7, maxLines: 7,
minLines: 4, minLines: 4,
@ -664,6 +679,7 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
title: 'update prescription'.toUpperCase(), title: 'update prescription'.toUpperCase(),
onPressed: () { onPressed: () {
updatePrescription( updatePrescription(
patient: patient,
model: model, model: model,
drugId: drugId, drugId: drugId,
remarks: remarksController.text, remarks: remarksController.text,
@ -685,23 +701,23 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
}); });
} }
updatePrescription({ updatePrescription(
PrescriptionViewModel model, {PrescriptionViewModel model,
int drugId, int drugId,
String remarks, String remarks,
String dose, String dose,
String frequency, String frequency,
String route, String route,
}) async { PatiantInformtion patient}) async {
//PrescriptionViewModel model = PrescriptionViewModel(); //PrescriptionViewModel model = PrescriptionViewModel();
PostPrescriptionReqModel updatePrescriptionReqModel = PostPrescriptionReqModel updatePrescriptionReqModel =
new PostPrescriptionReqModel(); new PostPrescriptionReqModel();
List<PrescriptionRequestModel> sss = List(); List<PrescriptionRequestModel> sss = List();
updatePrescriptionReqModel.appointmentNo = 2016055159; updatePrescriptionReqModel.appointmentNo = patient.appointmentNo;
updatePrescriptionReqModel.clinicID = 17; updatePrescriptionReqModel.clinicID = patient.clinicId;
updatePrescriptionReqModel.episodeID = 200012330; updatePrescriptionReqModel.episodeID = patient.episodeNo;
updatePrescriptionReqModel.patientMRN = 3120877; updatePrescriptionReqModel.patientMRN = patient.patientMRN;
updatePrescriptionReqModel.vidaAuthTokenID = updatePrescriptionReqModel.vidaAuthTokenID =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAyIiwianRpIjoiOGFjNDRjZGQtOWE0Mi00M2YxLWE2YTQtMWQ4NzBmZmYwNTUyIiwiZW1haWwiOiIiLCJpZCI6IjEwMDIiLCJOYW1lIjoiVEVNUCAtIERPQ1RPUiIsIkVtcGxveWVlSWQiOiI0NzA5IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiI0NzA5IiwiU0VTU0lPTklEIjoiMjE1OTU2NDkiLCJDbGluaWNJZCI6IjEiLCJyb2xlIjpbIkRPQ1RPUlMiLCJIRUFEIERPQ1RPUlMiLCJBRE1JTklTVFJBVE9SUyIsIlJFQ0VQVElPTklTVCIsIkVSIE5VUlNFIiwiRVIgUkVDRVBUSU9OSVNUIiwiUEhBUk1BQ1kgQUNDT1VOVCBTVEFGRiIsIlBIQVJNQUNZIE5VUlNFIiwiSU5QQVRJRU5UIFBIQVJNQUNJU1QiLCJBRE1JU1NJT04gU1RBRkYiLCJBUFBST1ZBTCBTVEFGRiIsIkNPTlNFTlQgIiwiTUVESUNBTCBSRVBPUlQgLSBTSUNLIExFQVZFIE1BTkFHRVIiXSwibmJmIjoxNjA4NzM2NjY5LCJleHAiOjE2MDk2MDA2NjksImlhdCI6MTYwODczNjY2OX0.9EDgYrbe5fQA2CvgLdFT4s_PL7hD5R_Qggfpv4lDtUY"; "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAyIiwianRpIjoiOGFjNDRjZGQtOWE0Mi00M2YxLWE2YTQtMWQ4NzBmZmYwNTUyIiwiZW1haWwiOiIiLCJpZCI6IjEwMDIiLCJOYW1lIjoiVEVNUCAtIERPQ1RPUiIsIkVtcGxveWVlSWQiOiI0NzA5IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiI0NzA5IiwiU0VTU0lPTklEIjoiMjE1OTU2NDkiLCJDbGluaWNJZCI6IjEiLCJyb2xlIjpbIkRPQ1RPUlMiLCJIRUFEIERPQ1RPUlMiLCJBRE1JTklTVFJBVE9SUyIsIlJFQ0VQVElPTklTVCIsIkVSIE5VUlNFIiwiRVIgUkVDRVBUSU9OSVNUIiwiUEhBUk1BQ1kgQUNDT1VOVCBTVEFGRiIsIlBIQVJNQUNZIE5VUlNFIiwiSU5QQVRJRU5UIFBIQVJNQUNJU1QiLCJBRE1JU1NJT04gU1RBRkYiLCJBUFBST1ZBTCBTVEFGRiIsIkNPTlNFTlQgIiwiTUVESUNBTCBSRVBPUlQgLSBTSUNLIExFQVZFIE1BTkFHRVIiXSwibmJmIjoxNjA4NzM2NjY5LCJleHAiOjE2MDk2MDA2NjksImlhdCI6MTYwODczNjY2OX0.9EDgYrbe5fQA2CvgLdFT4s_PL7hD5R_Qggfpv4lDtUY";
sss.add(PrescriptionRequestModel( sss.add(PrescriptionRequestModel(

@ -598,6 +598,20 @@ class TranslationBase {
localizedValues['verification_message'][locale.languageCode]; localizedValues['verification_message'][locale.languageCode];
String get validationMessage => String get validationMessage =>
localizedValues['validation_message'][locale.languageCode]; localizedValues['validation_message'][locale.languageCode];
String get addAssessment =>
localizedValues['addAssessment'][locale.languageCode];
String get assessment => localizedValues['assessment'][locale.languageCode];
String get physicalSystemExamination =>
localizedValues['physicalSystemExamination'][locale.languageCode];
String get searchExamination =>
localizedValues['searchExamination'][locale.languageCode];
String get addExamination =>
localizedValues['addExamination'][locale.languageCode];
String get doc => localizedValues['doc'][locale.languageCode];
String get patientNoDetailErrMsg =>
localizedValues['patientNoDetailErrMsg'][locale.languageCode];
} }
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -59,22 +59,49 @@ class _DynamicElementsState extends State<DynamicElements> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final screenSize = MediaQuery
.of(context)
.size;
InputDecoration textFieldSelectorDecoration({String hintText,
String selectedText, bool isDropDown,IconData icon}) {
return InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
disabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
borderRadius: BorderRadius.circular(8),
),
hintText: selectedText != null ? selectedText : hintText,
suffixIcon: isDropDown ? Icon(icon ?? Icons.arrow_drop_down) : null,
hintStyle: TextStyle(
fontSize: 14,
color: Colors.grey.shade600,
),
)
;
}
return LayoutBuilder( return LayoutBuilder(
builder: (ctx, constraints) { builder: (ctx, constraints) {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
SizedBox(
height: 10,
),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
AppTextFormField( AppTextFormField(
textInputType: TextInputType.number, onTap: ()=> _presentDatePicker('_selectedFromDate'),
hintText: TranslationBase.of(context).fromDate, hintText: TranslationBase.of(context).fromDate,
controller: _fromDateController, controller: _fromDateController,
inputFormatter: ONLY_DATE, inputFormatter: ONLY_DATE,
onTap: () {
_presentDatePicker('_selectedFromDate');
},
onSaved: (value) { onSaved: (value) {
if (_fromDateController.text.toString().trim().isEmpty) { if (_fromDateController.text.toString().trim().isEmpty) {
widget._patientSearchFormValues.From = "0"; widget._patientSearchFormValues.From = "0";
@ -82,12 +109,14 @@ class _DynamicElementsState extends State<DynamicElements> {
widget._patientSearchFormValues.From = _fromDateController.text.replaceAll("/", "-"); widget._patientSearchFormValues.From = _fromDateController.text.replaceAll("/", "-");
} }
}, },
readOnly: true,
), ),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
AppTextFormField( AppTextFormField(
textInputType: TextInputType.number, readOnly: true,
hintText: TranslationBase hintText: TranslationBase
.of(context) .of(context)
.toDate, .toDate,

@ -1,92 +1,109 @@
import 'package:doctor_app_flutter/core/viewModel/SOAP_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/models/SOAP/GeneralGetReqForSOAP.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_widget.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/network_base_view.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class PatientPageHeaderWidget extends StatelessWidget { class PatientPageHeaderWidget extends StatelessWidget {
final PatiantInformtion patient; final PatiantInformtion patient;
PatientPageHeaderWidget(this.patient); PatientPageHeaderWidget(this.patient);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return BaseView<SOAPViewModel>(
child: Column( onModelReady: (model) async {
mainAxisAlignment: MainAxisAlignment.start, GeneralGetReqForSOAP generalGetReqForSOAP = GeneralGetReqForSOAP(
children: [ patientMRN: patient.patientMRN,
Padding( episodeId: patient.episodeNo,
padding: const EdgeInsets.all(8.0), appointmentNo: patient.appointmentNo,
child: Row( doctorID: '',
crossAxisAlignment: CrossAxisAlignment.start, editedBy: '');
mainAxisSize: MainAxisSize.min, await model.getPatientAllergy(generalGetReqForSOAP);
children: <Widget>[
AvatarWidget( },
Icon( builder: (_, model, w) => Container(
patient.genderDescription == "Male" child: Column(
? DoctorApp.male mainAxisAlignment: MainAxisAlignment.start,
: DoctorApp.female_icon, children: [
size: 70, Padding(
color: Colors.white, padding: const EdgeInsets.all(8.0),
), child: Row(
), crossAxisAlignment: CrossAxisAlignment.start,
SizedBox( mainAxisSize: MainAxisSize.min,
width: 20, children: <Widget>[
), AvatarWidget(
Expanded( Icon(
child: Column( patient.genderDescription == "Male"
crossAxisAlignment: CrossAxisAlignment.start, ? DoctorApp.male
mainAxisAlignment: MainAxisAlignment.start, : DoctorApp.female_icon,
children: [ size: 70,
SizedBox( color: Colors.white,
height: 5,
),
AppText(
patient.firstName + ' ' + patient.lastName,
color: Colors.black,
fontWeight: FontWeight.bold,
),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).age,
color: Colors.black,
fontWeight: FontWeight.bold,
),
SizedBox(
width: 20,
), ),
AppText( ),
patient.age.toString(), SizedBox(
color: Colors.black, width: 20,
fontWeight: FontWeight.normal, ),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
height: 5,
),
AppText(
patient.firstName + ' ' + patient.lastName,
color: Colors.black,
fontWeight: FontWeight.bold,
),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).age,
color: Colors.black,
fontWeight: FontWeight.bold,
),
SizedBox(
width: 20,
),
AppText(
patient.age.toString(),
color: Colors.black,
fontWeight: FontWeight.normal,
),
],
),
NetworkBaseView(
baseViewModel: model,
child: model.patientAllergiesList.isNotEmpty ?AppText(
"ALLERGIC TO: "+model.getAllergicNames(),
color: Color(0xFFB9382C),
fontWeight: FontWeight.bold,
) : AppText(''),
),
],
), ),
], )
), ],
AppText( ),
"ALLERGIC TO: FOOD, ASPIRIN, EGG WHITE", ),
color: Color(0xFFB9382C), Container(
fontWeight: FontWeight.bold, width: double.infinity,
), height: 1,
], color: Color(0xffCCCCCC),
),
SizedBox(
width: 20,
), ),
) ],
], ),
), ));
),
Container(
width: double.infinity,
height: 1,
color: Color(0xffCCCCCC),
),
SizedBox(
width: 20,
),
],
),
);
} }
} }

@ -1,7 +1,13 @@
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
import 'package:doctor_app_flutter/models/SOAP/PostEpisodeReqModel.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/routes.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
@ -22,35 +28,54 @@ class ProfileMedicalInfoWidget extends StatelessWidget {
String patientType; String patientType;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SliverGrid.count( return BaseView<SOAPViewModel>(
onModelReady: (model) async {},
builder: (_, model, w) => SliverGrid.count(
crossAxisSpacing: 10, crossAxisSpacing: 10,
mainAxisSpacing: 20, mainAxisSpacing: 20,
crossAxisCount: 2, crossAxisCount: 2,
childAspectRatio: 1.5, childAspectRatio: 1.5,
children: [ children: [
if (int.parse(patientType) == 7)
PatientProfileButton(
key: key,
patient: patient,
isDisable: patient.episodeNo != 0 ? true : false,
nameLine1: TranslationBase.of(context).createNew,
nameLine2: TranslationBase.of(context).episode,
route: CREATE_EPISODE,
onTap: () async {
PostEpisodeReqModel postEpisodeReqModel = PostEpisodeReqModel(
appointmentNo: patient.appointmentNo,
patientMRN: patient.patientMRN);
await model.postEpisode(postEpisodeReqModel);
patient.episodeNo = model.episodeID;
Navigator.of(context).pushNamed(CREATE_EPISODE, arguments: {'patient': patient});
},
isLoading: model.state == ViewState.BusyLocal,
icon: 'create-episod.png'
),
if(int.parse(patientType) ==7) if(int.parse(patientType) ==7)
PatientProfileButton( PatientProfileButton(
key: key, key: key,
patient: patient, patient: patient,
nameLine1: TranslationBase.of(context).createNew, isDisable: patient.episodeNo == 0 ? true : false,
nameLine2: TranslationBase.of(context).episode, nameLine1: TranslationBase
route: CREATE_EPISODE, .of(context)
icon: 'create-episod.png'), .update,
if(int.parse(patientType) ==7) nameLine2: TranslationBase
PatientProfileButton( .of(context)
key: key, .episode,
patient: patient,
nameLine1: TranslationBase.of(context).update,
nameLine2: TranslationBase.of(context).episode,
route: UPDATE_EPISODE, route: UPDATE_EPISODE,
icon: 'modilfy-episode.png'), icon: 'modilfy-episode.png'),
if(selectedPatientType == 6 || selectedPatientType == 7)
PatientProfileButton( PatientProfileButton(
key: key, key: key,
patient: patient, patient: patient,
nameLine1: TranslationBase.of(context).vital, nameLine1: TranslationBase.of(context).vital,
nameLine2: TranslationBase.of(context).signs, nameLine2: TranslationBase.of(context).signs,
route: PATIENT_VITAL_SIGN, route: (selectedPatientType == 6 || selectedPatientType == 7) ? PATIENT_VITAL_SIGN : VITAL_SIGN_DETAILS,
icon: 'heartbeat.png'), icon: 'heartbeat.png'),
if(selectedPatientType != 7) if(selectedPatientType != 7)
PatientProfileButton( PatientProfileButton(
@ -68,7 +93,7 @@ class ProfileMedicalInfoWidget extends StatelessWidget {
nameLine1: TranslationBase.of(context).previewHealth, nameLine1: TranslationBase.of(context).previewHealth,
nameLine2: TranslationBase.of(context).summaryReport, nameLine2: TranslationBase.of(context).summaryReport,
icon: 'radiology-1.png'), icon: 'radiology-1.png'),
if (selectedPatientType != 0 && selectedPatientType != 5) if (selectedPatientType != 0 && selectedPatientType != 5 && selectedPatientType != 7)
PatientProfileButton( PatientProfileButton(
key: key, key: key,
patient: patient, patient: patient,
@ -146,7 +171,7 @@ class ProfileMedicalInfoWidget extends StatelessWidget {
.of(context) .of(context)
.ucaf, .ucaf,
icon: 'lab.png'), icon: 'lab.png'),
]); ],),);
} }
} }
@ -206,20 +231,25 @@ class PatientProfileButton extends StatelessWidget {
final dynamic route; final dynamic route;
final PatiantInformtion patient; final PatiantInformtion patient;
final String url = "assets/images/"; final String url = "assets/images/";
PatientProfileButton( final bool isDisable;
{Key key, final bool isLoading;
this.patient, final Function onTap;
this.nameLine1,
this.nameLine2,
this.icon, PatientProfileButton({Key key,
this.route}) this.patient,
this.nameLine1,
this.nameLine2,
this.icon,
this.route, this.isDisable = false, this.onTap, this.isLoading = false})
: super(key: key); : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return new Container( return new Container(
margin: new EdgeInsets.symmetric(horizontal: 4.0), margin: new EdgeInsets.symmetric(horizontal: 4.0),
child: InkWell( child: InkWell(
onTap: () { onTap: isDisable?null:onTap != null ? onTap : () {
navigator(context, this.route); navigator(context, this.route);
}, },
child: Column(children: <Widget>[ child: Column(children: <Widget>[
@ -243,6 +273,8 @@ class PatientProfileButton extends StatelessWidget {
textAlign: TextAlign.left, textAlign: TextAlign.left,
fontSize: SizeConfig.textMultiplier * 2, fontSize: SizeConfig.textMultiplier * 2,
), ),
if(isLoading)
DrAppCircularProgressIndeicator()
], ],
), ),
), ),
@ -261,7 +293,7 @@ class PatientProfileButton extends StatelessWidget {
), ),
decoration: BoxDecoration( decoration: BoxDecoration(
// border: Border.all(), // border: Border.all(),
color: Colors.white, color: isDisable ? Colors.grey.withOpacity(0.4) : Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10)), borderRadius: BorderRadius.all(Radius.circular(10)),
border: Border.fromBorderSide(BorderSide( border: Border.fromBorderSide(BorderSide(
color: Color(0xffBBBBBB), color: Color(0xffBBBBBB),

@ -0,0 +1,33 @@
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:flutter/material.dart';
// ignore: must_be_immutable
class CustomValidationError extends StatelessWidget {
String error;
CustomValidationError({
Key key, this.error,
}) : super(key: key);
@override
Widget build(BuildContext context) {
if(error == null )
error = TranslationBase
.of(context)
.emptyMessage;
return Column(
children: [
SizedBox(
height: 2,
),
Container(
margin: EdgeInsets.symmetric(horizontal: 3),
child: AppText(error, color: Theme
.of(context)
.errorColor, fontSize: 14,),
),
],
);
}
}

@ -13,11 +13,14 @@ import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.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/dialogs/master_key_dailog.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/master_key_dailog.dart';
import 'package:doctor_app_flutter/widgets/shared/divider_with_spaces_around.dart';
import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../custom_validation_error.dart';
class UpdateAllergiesWidget extends StatefulWidget { class UpdateAllergiesWidget extends StatefulWidget {
final List<MySelectedAllergy> myAllergiesList; final List<MySelectedAllergy> myAllergiesList;
@ -71,41 +74,42 @@ class _UpdateAllergiesWidgetState extends State<UpdateAllergiesWidget> {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
mainAxisAlignment: mainAxisAlignment: MainAxisAlignment.spaceBetween,
MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Container( Container(
child: Expanded(
child: Expanded( child: Texts(
child: Texts( projectViewModel.isArabic
? selectedAllergy.selectedAllergy.nameAr
: selectedAllergy.selectedAllergy.nameEn
.toUpperCase(),
variant: "bodyText",
textDecoration: selectedAllergy.isChecked
? null
: TextDecoration.lineThrough,
bold: true,
color: Colors.black),
),
width: MediaQuery.of(context).size.width * 0.5,
),
Texts(
projectViewModel.isArabic projectViewModel.isArabic
? selectedAllergy.selectedAllergy.nameAr ? selectedAllergy.selectedAllergySeverity.nameAr
: selectedAllergy.selectedAllergy.nameEn : selectedAllergy.selectedAllergySeverity.nameEn
.toUpperCase(), .toUpperCase(),
variant: "bodyText", variant: "bodyText",
textDecoration: selectedAllergy.isChecked textDecoration: selectedAllergy.isChecked
? null ? null
: TextDecoration.lineThrough, : TextDecoration.lineThrough,
bold: true, bold: true,
color: Colors.black), color: AppGlobal.appPrimaryColor),
), if (selectedAllergy.isChecked)
width: MediaQuery.of(context).size.width * 0.5,
),
Texts(
projectViewModel.isArabic ? selectedAllergy
.selectedAllergySeverity.nameAr : selectedAllergy
.selectedAllergySeverity.nameEn
.toUpperCase(),
variant: "bodyText",
textDecoration: selectedAllergy.isChecked
? null
: TextDecoration.lineThrough,
bold: true,
color: AppGlobal.appPrimaryColor),
if(selectedAllergy.isChecked)
InkWell( InkWell(
child: Icon( child: Icon(
FontAwesomeIcons.trash, FontAwesomeIcons.trash,
@ -115,6 +119,20 @@ class _UpdateAllergiesWidgetState extends State<UpdateAllergiesWidget> {
onTap: () => removeAllergy(selectedAllergy), onTap: () => removeAllergy(selectedAllergy),
) )
], ],
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: Container(
width: MediaQuery.of(context).size.width * 0.6,
child: AppText(
selectedAllergy.remark ?? '',
fontSize: 10,
color: Colors.grey,
),
),
),
DividerWithSpacesAround()
],
), ),
SizedBox( SizedBox(
height: 10, height: 10,
@ -154,31 +172,40 @@ class _UpdateAllergiesWidgetState extends State<UpdateAllergiesWidget> {
builder: (context) { builder: (context) {
return AddAllergies( return AddAllergies(
addAllergiesFun: (MySelectedAllergy mySelectedAllergy) { addAllergiesFun: (MySelectedAllergy mySelectedAllergy) {
setState(() { if (mySelectedAllergy.selectedAllergySeverity == null ||
List<MySelectedAllergy> allergy = mySelectedAllergy.selectedAllergy == null) {
// ignore: missing_return helpers.showErrorToast(TranslationBase
widget.myAllergiesList.where((element) => .of(context)
mySelectedAllergy.selectedAllergy.id == .requiredMsg);
element.selectedAllergy.id
).toList(); } else {
if (allergy.isEmpty) { setState(() {
widget.myAllergiesList.add(mySelectedAllergy); List<MySelectedAllergy> allergy =
Navigator.of(context).pop(); // ignore: missing_return
} else { widget.myAllergiesList
allergy.first.selectedAllergy = .where((element) =>
mySelectedAllergy.selectedAllergy; mySelectedAllergy.selectedAllergy.id ==
allergy.first.selectedAllergySeverity = element.selectedAllergy.id)
mySelectedAllergy.selectedAllergySeverity; .toList();
allergy.first.remark = mySelectedAllergy.remark;
allergy.first.isChecked = mySelectedAllergy.isChecked; if (allergy.isEmpty) {
Navigator.of(context).pop(); widget.myAllergiesList.add(mySelectedAllergy);
Navigator.of(context).pop();
// helpers.showErrorToast(TranslationBase } else {
// .of(context) allergy.first.selectedAllergy =
// .itemExist); mySelectedAllergy.selectedAllergy;
} allergy.first.selectedAllergySeverity =
mySelectedAllergy.selectedAllergySeverity;
}); allergy.first.remark = mySelectedAllergy.remark;
allergy.first.isChecked = mySelectedAllergy.isChecked;
Navigator.of(context).pop();
// helpers.showErrorToast(TranslationBase
// .of(context)
// .itemExist);
}
});
}
},); },);
}); });
} }
@ -201,10 +228,11 @@ class _AddAllergiesState extends State<AddAllergies> {
MasterKeyModel _selectedAllergy; MasterKeyModel _selectedAllergy;
TextEditingController remarkController = TextEditingController(); TextEditingController remarkController = TextEditingController();
GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>(); GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>();
bool isFormSubmitted = false;
InputDecoration textFieldSelectorDecoration(
InputDecoration textFieldSelectorDecoration(String hintText, String hintText, String selectedText, bool isDropDown,
String selectedText, bool isDropDown,{IconData icon}) { {IconData icon}) {
return InputDecoration( return InputDecoration(
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
@ -303,18 +331,24 @@ class _AddAllergiesState extends State<AddAllergies> {
input.toLowerCase()) || input.toLowerCase()) ||
suggestion.nameEn.toLowerCase() suggestion.nameEn.toLowerCase()
.startsWith(input.toLowerCase()), .startsWith(input.toLowerCase()),
):TextField( ) : TextField(
decoration: textFieldSelectorDecoration( decoration: textFieldSelectorDecoration(
TranslationBase TranslationBase
.of(context) .of(context)
.selectAllergy, .selectAllergy,
_selectedAllergy != null _selectedAllergy != null
? projectViewModel.isArabic?_selectedAllergy.nameAr: _selectedAllergy.nameEn ? projectViewModel.isArabic
: null, true, icon: EvaIcons.search), ? _selectedAllergy.nameAr
: _selectedAllergy.nameEn
: null,
true,
icon: EvaIcons.search),
enabled: false, enabled: false,
), ),
), ),
), ),
if(isFormSubmitted && _selectedAllergy == null)
CustomValidationError(),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
@ -357,6 +391,8 @@ class _AddAllergiesState extends State<AddAllergies> {
), ),
), ),
), ),
if(isFormSubmitted && _selectedAllergySeverity == null)
CustomValidationError(),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
@ -383,14 +419,20 @@ class _AddAllergiesState extends State<AddAllergies> {
height: 10, height: 10,
), ),
AppButton( AppButton(
title: "Add".toUpperCase(), title: TranslationBase.of(context).add.toUpperCase(),
onPressed: () { onPressed: () {
MySelectedAllergy mySelectedAllergy = new MySelectedAllergy( setState(() {
remark: remarkController.text, isFormSubmitted = true;
selectedAllergy: _selectedAllergy, });
isChecked: true, if(_selectedAllergy !=null && _selectedAllergySeverity !=null) {
selectedAllergySeverity: _selectedAllergySeverity,); MySelectedAllergy mySelectedAllergy = new MySelectedAllergy(
widget.addAllergiesFun(mySelectedAllergy); remark: remarkController.text,
selectedAllergy: _selectedAllergy,
isChecked: true,
selectedAllergySeverity: _selectedAllergySeverity,);
widget.addAllergiesFun(mySelectedAllergy);
}
}, },
), ),
] ]
@ -408,3 +450,4 @@ class _AddAllergiesState extends State<AddAllergies> {

@ -1,16 +1,14 @@
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/models/SOAP/my_selected_history.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/Text.dart'; import 'package:doctor_app_flutter/widgets/shared/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/TextFields.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/divider_with_spaces_around.dart';
import 'package:doctor_app_flutter/widgets/shared/master_key_checkbox_search_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/master_key_checkbox_search_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:eva_icons_flutter/eva_icons_flutter.dart';
@ -20,7 +18,7 @@ import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class UpdateHistoryWidget extends StatefulWidget { class UpdateHistoryWidget extends StatefulWidget {
final List<MasterKeyModel> myHistoryList; final List<MySelectedHistory> myHistoryList;
const UpdateHistoryWidget({Key key, this.myHistoryList}) : super(key: key); const UpdateHistoryWidget({Key key, this.myHistoryList}) : super(key: key);
@ -86,19 +84,28 @@ class _UpdateHistoryWidgetState extends State<UpdateHistoryWidget>
children: [ children: [
Container( Container(
child: Expanded( child: Expanded(
child: Texts(projectViewModel.isArabic?myHistory.nameAr:myHistory.nameEn, child: Texts(
variant: "bodyText", bold: true, color: Colors.black), projectViewModel.isArabic
? myHistory.selectedHistory.nameAr
: myHistory.selectedHistory.nameEn,
variant: "bodyText",
textDecoration: myHistory.isChecked
? null
: TextDecoration.lineThrough,
bold: true,
color: Colors.black),
), ),
width: MediaQuery.of(context).size.width * 0.7, width: MediaQuery.of(context).size.width * 0.7,
), ),
InkWell( if (myHistory.isChecked)
child: Icon( InkWell(
FontAwesomeIcons.trash, child: Icon(
color: Colors.grey, FontAwesomeIcons.trash,
size: 20, color: Colors.grey,
), size: 20,
onTap: () => removeHistory(myHistory), ),
) onTap: () => removeHistory(myHistory.selectedHistory),
)
], ],
), ),
SizedBox( SizedBox(
@ -113,13 +120,24 @@ class _UpdateHistoryWidgetState extends State<UpdateHistoryWidget>
); );
} }
removeHistory(MasterKeyModel masterKey) { removeHistory(MasterKeyModel historyKey) {
Iterable<MasterKeyModel> history = widget.myHistoryList.where((element) => // Iterable<MasterKeyModel> history = widget.myHistoryList.where((element) =>
masterKey.id == element.id && masterKey.typeId == element.typeId); // masterKey.id == element.id && masterKey.typeId == element.typeId);
//
List<MySelectedHistory> history =
// ignore: missing_return
widget.myHistoryList.where((element) =>
historyKey.id ==
element.selectedHistory.id &&
historyKey.typeId ==
element.selectedHistory.typeId
).toList();
if (history.length > 0) if (history.length > 0)
setState(() { setState(() {
widget.myHistoryList.remove(history.first); history[0].isChecked = false;
}); });
} }
@ -233,7 +251,7 @@ class _PriorityBarState extends State<PriorityBar> {
class AddHistoryDialog extends StatefulWidget { class AddHistoryDialog extends StatefulWidget {
final Function changePageViewIndex; final Function changePageViewIndex;
final PageController controller; final PageController controller;
final List<MasterKeyModel> myHistoryList; final List<MySelectedHistory> myHistoryList;
final Function addSelectedHistories; final Function addSelectedHistories;
final Function (MasterKeyModel) removeHistory; final Function (MasterKeyModel) removeHistory;
@ -254,6 +272,9 @@ class _AddHistoryDialogState extends State<AddHistoryDialog> {
onModelReady: (model) async { onModelReady: (model) async {
if (model.historyFamilyList.length == 0) { if (model.historyFamilyList.length == 0) {
await model.getMasterLookup(MasterKeysService.HistoryFamily); await model.getMasterLookup(MasterKeysService.HistoryFamily);
setState(() {
});
} }
}, },
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
@ -296,59 +317,71 @@ class _AddHistoryDialogState extends State<AddHistoryDialog> {
}, },
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
children: <Widget>[ children: <Widget>[
MasterKeyCheckboxSearchWidget( NetworkBaseView(
model: model, baseViewModel: model,
masterList: model.historyFamilyList, child: MasterKeyCheckboxSearchWidget(
removeHistory: (history){ model: model,
setState(() { masterList: model.historyFamilyList,
widget.removeHistory(history); removeHistory: (history){
}); setState(() {
}, widget.removeHistory(history);
addHistory: (history){ });
setState(() { },
widget.myHistoryList.add(history); addHistory: (history){
}); setState(() {
}, createAndAddHistory(
addSelectedHistories: (){ history);
widget.addSelectedHistories(); });
}, },
isServiceSelected: (master) =>isServiceSelected(master), addSelectedHistories: (){
widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
),
), ),
MasterKeyCheckboxSearchWidget( NetworkBaseView(
model: model, baseViewModel: model,
masterList: model.mergeHistorySurgicalWithHistorySportList, child: MasterKeyCheckboxSearchWidget(
removeHistory: (history){ model: model,
setState(() { masterList: model.mergeHistorySurgicalWithHistorySportList,
widget.removeHistory(history); removeHistory: (history){
}); setState(() {
}, widget.removeHistory(history);
addHistory: (history){ });
setState(() { },
widget.myHistoryList.add(history); addHistory: (history){
}); setState(() {
}, createAndAddHistory(
addSelectedHistories: (){ history);
widget.addSelectedHistories(); });
}, },
isServiceSelected: (master) =>isServiceSelected(master), addSelectedHistories: (){
widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
),
), ),
MasterKeyCheckboxSearchWidget( NetworkBaseView(
model: model, baseViewModel: model,
masterList: model.historyMedicalList, child: MasterKeyCheckboxSearchWidget(
removeHistory: (history){ model: model,
setState(() { masterList: model.historyMedicalList,
widget.removeHistory(history); removeHistory: (history){
}); setState(() {
}, widget.removeHistory(history);
addHistory: (history){ });
setState(() { },
widget.myHistoryList.add(history); addHistory: (history){
}); setState(() {
}, createAndAddHistory(
addSelectedHistories: (){ history);
widget.addSelectedHistories(); });
}, },
isServiceSelected: (master) =>isServiceSelected(master), addSelectedHistories: (){
widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
),
), ),
], ],
), ),
@ -361,12 +394,35 @@ class _AddHistoryDialogState extends State<AddHistoryDialog> {
)); ));
} }
createAndAddHistory(MasterKeyModel history) {
List<MySelectedHistory> myhistory = widget.myHistoryList.where((element) =>
history.id ==
element.selectedHistory.id &&
history.typeId ==
element.selectedHistory.typeId
).toList();
if (myhistory.isEmpty) {
setState(() {
MySelectedHistory mySelectedHistory = MySelectedHistory(
remark: history.remarks ?? "",
selectedHistory: history,
isChecked: true);
widget.myHistoryList.add(mySelectedHistory);
});
} else {
myhistory.first.isChecked = true;
}
}
isServiceSelected(MasterKeyModel masterKey) { isServiceSelected(MasterKeyModel masterKey) {
Iterable<MasterKeyModel> history = Iterable<MySelectedHistory> history =
widget widget
.myHistoryList .myHistoryList
.where((element) => .where((element) =>
masterKey.id == element.id && masterKey.typeId == element.typeId); masterKey.id == element.selectedHistory.id &&
masterKey.typeId == element.selectedHistory.typeId &&
element.isChecked);
if (history.length > 0) { if (history.length > 0) {
return true; return true;
} }

@ -1,5 +1,6 @@
import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/client/base_app_client.dart';
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
@ -8,9 +9,11 @@ import 'package:doctor_app_flutter/models/SOAP/GeneralGetReqForSOAP.dart';
import 'package:doctor_app_flutter/models/SOAP/GetHistoryReqModel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetHistoryReqModel.dart';
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/models/SOAP/my_selected_allergy.dart'; import 'package:doctor_app_flutter/models/SOAP/my_selected_allergy.dart';
import 'package:doctor_app_flutter/models/SOAP/my_selected_history.dart';
import 'package:doctor_app_flutter/models/SOAP/post_allergy_request_model.dart'; import 'package:doctor_app_flutter/models/SOAP/post_allergy_request_model.dart';
import 'package:doctor_app_flutter/models/SOAP/post_chief_complaint_request_model.dart'; import 'package:doctor_app_flutter/models/SOAP/post_chief_complaint_request_model.dart';
import 'package:doctor_app_flutter/models/SOAP/post_histories_request_model.dart'; import 'package:doctor_app_flutter/models/SOAP/post_histories_request_model.dart';
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
@ -28,7 +31,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class UpdateSubjectivePage extends StatefulWidget { class UpdateSubjectivePage extends StatefulWidget {
final Function changePageViewIndex; final Function changePageViewIndex;
final List<MySelectedAllergy> myAllergiesList; final List<MySelectedAllergy> myAllergiesList;
final List<MasterKeyModel> myHistoryList; final List<MySelectedHistory> myHistoryList;
final PatiantInformtion patientInfo; final PatiantInformtion patientInfo;
UpdateSubjectivePage( UpdateSubjectivePage(
@ -53,20 +56,11 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> {
GetHistoryReqModel getHistoryReqModel = GetHistoryReqModel( GetHistoryReqModel getHistoryReqModel = GetHistoryReqModel(
patientMRN: widget.patientInfo.patientMRN, patientMRN: widget.patientInfo.patientMRN,
episodeID: widget.patientInfo.episodeNo.toString(), episodeID: widget.patientInfo.episodeNo.toString(),
appointmentNo: widget.patientInfo.appointmentNo); appointmentNo: widget.patientInfo.appointmentNo,
doctorID: '',
getHistoryReqModel.historyType = editedBy: '');
MasterKeysService.HistoryFamily.getMasterKeyService();
await model.getPatientHistories(getHistoryReqModel, isFirst: true); await model.getPatientHistories(getHistoryReqModel,isFirst: true);
getHistoryReqModel.historyType =
MasterKeysService.HistoryMedical.getMasterKeyService();
await model.getPatientHistories(getHistoryReqModel);
getHistoryReqModel.historyType =
MasterKeysService.HistorySurgical.getMasterKeyService();
await model.getPatientHistories(getHistoryReqModel);
getHistoryReqModel.historyType =
MasterKeysService.HistorySports.getMasterKeyService();
await model.getPatientHistories(getHistoryReqModel);
if (model.patientHistoryList.isNotEmpty) { if (model.patientHistoryList.isNotEmpty) {
if (model.historyFamilyList.isEmpty) { if (model.historyFamilyList.isEmpty) {
@ -90,7 +84,12 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> {
id: element.historyId, id: element.historyId,
); );
if (history != null) { if (history != null) {
widget.myHistoryList.add(history); MySelectedHistory mySelectedHistory = MySelectedHistory(
selectedHistory: history,
isChecked: element.isChecked,
remark: element.remarks);
widget.myHistoryList.add(mySelectedHistory);
} }
} }
if (element.historyType == if (element.historyType ==
@ -100,7 +99,12 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> {
id: element.historyId, id: element.historyId,
); );
if (history != null) { if (history != null) {
widget.myHistoryList.add(history); MySelectedHistory mySelectedHistory = MySelectedHistory(
selectedHistory: history,
isChecked: element.isChecked,
remark: element.remarks);
widget.myHistoryList.add(mySelectedHistory);
} }
} }
if (element.historyType == if (element.historyType ==
@ -110,7 +114,12 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> {
id: element.historyId, id: element.historyId,
); );
if (history != null) { if (history != null) {
widget.myHistoryList.add(history); MySelectedHistory mySelectedHistory = MySelectedHistory(
selectedHistory: history,
isChecked: element.isChecked,
remark: element.remarks);
widget.myHistoryList.add(mySelectedHistory);
} }
} }
if (element.historyType == if (element.historyType ==
@ -120,64 +129,75 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> {
id: element.historyId, id: element.historyId,
); );
if (history != null) { if (history != null) {
widget.myHistoryList.add(history); MySelectedHistory mySelectedHistory = MySelectedHistory(
selectedHistory: history,
isChecked: element.isChecked,
remark: element.remarks);
widget.myHistoryList.add(mySelectedHistory);
} }
} }
}); });
} }
} }
getAllergies(SOAPViewModel model) async {
GeneralGetReqForSOAP generalGetReqForSOAP = GeneralGetReqForSOAP(
patientMRN: widget.patientInfo.patientMRN,
episodeId: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo,
doctorID: '',
editedBy: '');
await model.getPatientAllergy(generalGetReqForSOAP);
if (model.patientAllergiesList.isNotEmpty) {
if (model.allergiesList.isEmpty)
await model.getMasterLookup(MasterKeysService.Allergies);
if (model.allergySeverityList.isEmpty)
await model.getMasterLookup(MasterKeysService.AllergySeverity);
model.patientAllergiesList.forEach((element) {
MasterKeyModel selectedAllergy = model.getOneMasterKey(
masterKeys: MasterKeysService.Allergies,
id: element.allergyDiseaseId,
typeId: element.allergyDiseaseType);
MasterKeyModel selectedAllergySeverity = model.getOneMasterKey(
masterKeys: MasterKeysService.AllergySeverity,
id: element.severity,
);
MySelectedAllergy mySelectedAllergy = MySelectedAllergy(
selectedAllergy: selectedAllergy,
isChecked: element.isChecked,
createdBy: element.createdBy,
selectedAllergySeverity: selectedAllergySeverity);
if (selectedAllergy != null && selectedAllergySeverity != null)
widget.myAllergiesList.add(mySelectedAllergy);
});
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BaseView<SOAPViewModel>(
return BaseView<SOAPViewModel>(
onModelReady: (model) async { onModelReady: (model) async {
widget.myAllergiesList.clear(); widget.myAllergiesList.clear();
widget.myHistoryList.clear(); widget.myHistoryList.clear();
GeneralGetReqForSOAP generalGetReqForSOAP = GeneralGetReqForSOAP(
patientMRN: widget.patientInfo.patientMRN,
episodeId: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo);
GetChiefComplaintReqModel getChiefComplaintReqModel = GetChiefComplaintReqModel getChiefComplaintReqModel =
GetChiefComplaintReqModel( GetChiefComplaintReqModel(
patientMRN: widget.patientInfo.patientMRN, patientMRN: widget.patientInfo.patientMRN,
appointmentNo: widget.patientInfo.appointmentNo, appointmentNo: widget.patientInfo.appointmentNo,
episodeId: widget.patientInfo.episodeNo, episodeId: widget.patientInfo.episodeNo,
episodeID: widget.patientInfo.episodeNo); episodeID: widget.patientInfo.episodeNo,
doctorID: '');
await model.getPatientChiefComplaint(getChiefComplaintReqModel); await model.getPatientChiefComplaint(getChiefComplaintReqModel);
if (model.patientChiefComplaintList.isNotEmpty) { if (model.patientChiefComplaintList.isNotEmpty) {
complaintsController.text = helpers.parseHtmlString(model.patientChiefComplaintList[0].chiefComplaint) complaintsController.text = helpers.parseHtmlString(
; model.patientChiefComplaintList[0].chiefComplaint);
illnessController.text = model.patientChiefComplaintList[0].hopi; illnessController.text = model.patientChiefComplaintList[0].hopi;
} }
await model.getPatientAllergy(generalGetReqForSOAP);
if (model.patientAllergiesList.isNotEmpty) {
if (model.allergiesList.isEmpty)
await model.getMasterLookup(MasterKeysService.Allergies);
if (model.allergySeverityList.isEmpty)
await model.getMasterLookup(MasterKeysService.AllergySeverity);
model.patientAllergiesList.forEach((element) {
MasterKeyModel selectedAllergy = model.getOneMasterKey(
masterKeys: MasterKeysService.Allergies,
id: element.allergyDiseaseId,
typeId: element.allergyDiseaseType);
MasterKeyModel selectedAllergySeverity = model.getOneMasterKey(
masterKeys: MasterKeysService.AllergySeverity,
id: element.severity,
);
MySelectedAllergy mySelectedAllergy = MySelectedAllergy(
selectedAllergy: selectedAllergy,
isChecked: element.isChecked,
selectedAllergySeverity: selectedAllergySeverity);
if (selectedAllergy != null && selectedAllergySeverity != null)
widget.myAllergiesList.add(mySelectedAllergy);
});
}
await getHistory(model); await getHistory(model);
await getAllergies(model);
}, },
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
isShowAppBar: false, isShowAppBar: false,
@ -408,10 +428,9 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> {
); );
} }
addSubjectiveInfo( addSubjectiveInfo({SOAPViewModel model,
{SOAPViewModel model, List<MySelectedAllergy> myAllergiesList,
List<MySelectedAllergy> myAllergiesList, List<MySelectedHistory> myHistoryList}) async {
List<MasterKeyModel> myHistoryList}) async {
formKey.currentState.save(); formKey.currentState.save();
formKey.currentState.validate(); formKey.currentState.validate();
@ -452,29 +471,30 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> {
{List<MySelectedAllergy> myAllergiesList, SOAPViewModel model}) async { {List<MySelectedAllergy> myAllergiesList, SOAPViewModel model}) async {
PostAllergyRequestModel postAllergyRequestModel = PostAllergyRequestModel postAllergyRequestModel =
new PostAllergyRequestModel(); new PostAllergyRequestModel();
Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
widget.myAllergiesList.forEach((allergy) { widget.myAllergiesList.forEach((allergy) {
if (postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM == if (postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM ==
null) null)
postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM = []; postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM = [];
//TODO: make static value dynamic //TODO: make static value dynamic
postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM postAllergyRequestModel.listHisProgNotePatientAllergyDiseaseVM.add(
.add(ListHisProgNotePatientAllergyDiseaseVM( ListHisProgNotePatientAllergyDiseaseVM(
allergyDiseaseId: allergy.selectedAllergy.id, allergyDiseaseId: allergy.selectedAllergy.id,
allergyDiseaseType: allergy.selectedAllergy.typeId, allergyDiseaseType: allergy.selectedAllergy.typeId,
patientMRN: widget.patientInfo.patientMRN, patientMRN: widget.patientInfo.patientMRN,
episodeId: widget.patientInfo.episodeNo, episodeId: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo, appointmentNo: widget.patientInfo.appointmentNo,
severity: allergy.selectedAllergySeverity.id, severity: allergy.selectedAllergySeverity.id,
remarks: allergy.remark, remarks: allergy.remark,
createdBy: 4709, createdBy: allergy.createdBy??doctorProfile.doctorID,
// createdOn: DateTime.now().toIso8601String(),
createdOn: DateTime.now().toIso8601String(), editedBy: doctorProfile.doctorID,
//"2020-08-14T20:37:22.780Z", editedOn: DateTime.now().toIso8601String(),
editedBy: 4709, isChecked: allergy.isChecked,
editedOn: DateTime.now().toIso8601String(), isUpdatedByNurse: false));
//"2020-08-14T20:37:22.780Z",
isChecked: false,
isUpdatedByNurse: false));
}); });
if (model.patientAllergiesList.isEmpty) { if (model.patientAllergiesList.isEmpty) {
await model.postAllergy(postAllergyRequestModel); await model.postAllergy(postAllergyRequestModel);
@ -488,9 +508,9 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> {
} }
postHistories( postHistories(
{List<MasterKeyModel> myHistoryList, SOAPViewModel model}) async { {List<MySelectedHistory> myHistoryList, SOAPViewModel model}) async {
PostHistoriesRequestModel postHistoriesRequestModel = PostHistoriesRequestModel postHistoriesRequestModel =
new PostHistoriesRequestModel(); new PostHistoriesRequestModel(doctorID: '');
widget.myHistoryList.forEach((history) { widget.myHistoryList.forEach((history) {
if (postHistoriesRequestModel.listMedicalHistoryVM == null) if (postHistoriesRequestModel.listMedicalHistoryVM == null)
postHistoriesRequestModel.listMedicalHistoryVM = []; postHistoriesRequestModel.listMedicalHistoryVM = [];
@ -500,9 +520,9 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> {
episodeId: widget.patientInfo.episodeNo, episodeId: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo, appointmentNo: widget.patientInfo.appointmentNo,
remarks: "", remarks: "",
historyId: history.id, historyId: history.selectedHistory.id,
historyType: history.typeId, historyType: history.selectedHistory.typeId,
isChecked: false, isChecked: history.isChecked,
)); ));
}); });
@ -532,10 +552,13 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> {
currentMedication: " currentMedication ", currentMedication: " currentMedication ",
hopi: illnessController.text, hopi: illnessController.text,
isLactation: false, isLactation: false,
ispregnant: true, ispregnant: false,
numberOfWeeks: 22); doctorID: '',
numberOfWeeks: 0);
if (model.patientChiefComplaintList.isEmpty) { if (model.patientChiefComplaintList.isEmpty) {
// TODO: make it postChiefComplaint after it start to work // TODO: make it postChiefComplaint after it start to work
postChiefComplaintRequestModel.editedBy='';
await model.postChiefComplaint(postChiefComplaintRequestModel); await model.postChiefComplaint(postChiefComplaintRequestModel);
} else { } else {
await model.patchChiefComplaint(postChiefComplaintRequestModel); await model.patchChiefComplaint(postChiefComplaintRequestModel);

@ -23,13 +23,17 @@ import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'custom_validation_error.dart';
class UpdateAssessmentPage extends StatefulWidget { class UpdateAssessmentPage extends StatefulWidget {
final Function changePageViewIndex; final Function changePageViewIndex;
final MySelectedAssessment mySelectedAssessment; List<MySelectedAssessment> mySelectedAssessmentList;
final PatiantInformtion patientInfo; final PatiantInformtion patientInfo;
UpdateAssessmentPage( UpdateAssessmentPage({Key key,
{Key key, this.changePageViewIndex, this.mySelectedAssessment, this.patientInfo}); this.changePageViewIndex,
this.mySelectedAssessmentList,
this.patientInfo});
@override @override
_UpdateAssessmentPageState createState() => _UpdateAssessmentPageState(); _UpdateAssessmentPageState createState() => _UpdateAssessmentPageState();
@ -39,15 +43,15 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> {
bool isAssessmentExpand = false; bool isAssessmentExpand = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size;
return BaseView<SOAPViewModel>( return BaseView<SOAPViewModel>(
onModelReady: (model) async{ onModelReady: (model) async{
widget.mySelectedAssessmentList.clear();
widget.mySelectedAssessment.appointmentId =widget.patientInfo.appointmentNo;
GetAssessmentReqModel getAssessmentReqModel = GetAssessmentReqModel( GetAssessmentReqModel getAssessmentReqModel = GetAssessmentReqModel(
patientMRN: widget.patientInfo.patientMRN, patientMRN: widget.patientInfo.patientMRN,
episodeID: widget.patientInfo.episodeNo.toString(), episodeID: widget.patientInfo.episodeNo.toString(),
editedBy: '',
doctorID: '',
appointmentNo: widget.patientInfo.appointmentNo); appointmentNo: widget.patientInfo.appointmentNo);
await model.getPatientAssessment(getAssessmentReqModel); await model.getPatientAssessment(getAssessmentReqModel);
if(model.patientAssessmentList.isNotEmpty){ if(model.patientAssessmentList.isNotEmpty){
@ -60,25 +64,33 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> {
if (model.listOfICD10.length == 0) { if (model.listOfICD10.length == 0) {
await model.getMasterLookup(MasterKeysService.ICD10); await model.getMasterLookup(MasterKeysService.ICD10);
} }
model.patientAssessmentList.forEach((element) {
MasterKeyModel diagnosisType = model.getOneMasterKey(
masterKeys: MasterKeysService.DiagnosisType,
id: element.diagnosisTypeID,
);
MasterKeyModel selectedICD = model.getOneMasterKey(
masterKeys: MasterKeysService.ICD10,
id: element.icdCode10ID,
);
MasterKeyModel diagnosisCondition = model.getOneMasterKey(
masterKeys: MasterKeysService.DiagnosisCondition,
id: element.conditionID,
);
MySelectedAssessment temMySelectedAssessment = MySelectedAssessment(
appointmentId: element.appointmentNo,
remark: element.remarks,
selectedDiagnosisType: diagnosisType,
selectedDiagnosisCondition: diagnosisCondition,
selectedICD: selectedICD,
doctorID: element.doctorID,
doctorName: element.doctorName,
createdBy: element.createdBy,
icdCode10ID: element.icdCode10ID
);
MasterKeyModel selectedICD = model.getOneMasterKey( widget.mySelectedAssessmentList.add(temMySelectedAssessment);
masterKeys: MasterKeysService.ICD10, });
id: model.patientAssessmentList[0].icdCode10ID,
);
widget.mySelectedAssessment.selectedICD= selectedICD;
MasterKeyModel diagnosisCondition = model.getOneMasterKey(
masterKeys: MasterKeysService.DiagnosisCondition,
id: model.patientAssessmentList[0].conditionID,
);
widget.mySelectedAssessment.selectedDiagnosisCondition = diagnosisCondition;
MasterKeyModel diagnosisType = model.getOneMasterKey(
masterKeys: MasterKeysService.DiagnosisType,
id: model.patientAssessmentList[0].diagnosisTypeID,
);
widget.mySelectedAssessment.selectedDiagnosisType = diagnosisType;
widget.mySelectedAssessment.remark = model.patientAssessmentList[0].remarks;
} }
}, },
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
@ -101,7 +113,7 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> {
children: [ children: [
Row( Row(
children: [ children: [
Texts('ASSESSMENT', Texts(TranslationBase.of(context).assessment.toUpperCase(),
variant: variant:
isAssessmentExpand ? "bodyText" : '', isAssessmentExpand ? "bodyText" : '',
bold: isAssessmentExpand ? true : false, bold: isAssessmentExpand ? true : false,
@ -130,23 +142,21 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> {
), ),
Column( Column(
children: [ children: [
if(model.patientAssessmentList.isEmpty)
Container( Container(
margin: margin:
EdgeInsets.only(left: 5, right: 5, top: 15), EdgeInsets.only(left: 5, right: 5, top: 15),
child: TextFields( child: TextFields(
hintText: "Add ASSESSMENT", hintText: TranslationBase.of(context).addAssessment,
fontSize: 13.5, fontSize: 13.5,
onTapTextFields: () { onTapTextFields: () {
openAssessmentDialog(context); openAssessmentDialog(context,isUpdate: false,
model: model);
}, },
readOnly: true, readOnly: true,
// hintColor: Colors.black,
suffixIcon: EvaIcons.plusCircleOutline, suffixIcon: EvaIcons.plusCircleOutline,
suffixIconColor: AppGlobal suffixIconColor: AppGlobal
.appPrimaryColor, .appPrimaryColor,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
// controller: messageController,
validator: (value) { validator: (value) {
if (value == null) if (value == null)
return TranslationBase return TranslationBase
@ -159,266 +169,240 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> {
SizedBox( SizedBox(
height: 20, height: 20,
), ),
if(widget.mySelectedAssessment != null &&
widget.mySelectedAssessment Column(
.appointmentId != children: widget.mySelectedAssessmentList.map((
null && widget.mySelectedAssessment assessment) {
.selectedDiagnosisType != null && return Container(
widget.mySelectedAssessment margin: EdgeInsets.only(
.selectedDiagnosisCondition != null) left: 5, right: 5, top: 15),
Container( child: Row(
margin: EdgeInsets.only( mainAxisAlignment: MainAxisAlignment
left: 5, right: 5, top: 15), .spaceBetween,
child: Row( crossAxisAlignment: CrossAxisAlignment
mainAxisAlignment: MainAxisAlignment .start,
.spaceBetween, children: [
crossAxisAlignment: CrossAxisAlignment Column(
.start, mainAxisAlignment: MainAxisAlignment
children: [ .start,
Column( children: [
mainAxisAlignment: MainAxisAlignment Column(
.start, mainAxisAlignment:
children: [ MainAxisAlignment.start,
Column( crossAxisAlignment:
mainAxisAlignment: CrossAxisAlignment.start,
MainAxisAlignment.start, children: [
crossAxisAlignment: AppText(
CrossAxisAlignment.start, "12".toUpperCase(),
children: [ fontWeight: FontWeight
AppText( .bold,
"12".toUpperCase(), fontSize: 16,
fontWeight: FontWeight.bold, ),
fontSize: 16, AppText(
), "DEC".toUpperCase(),
AppText(
"DEC".toUpperCase(),
fontSize: 10,
color: Colors.grey,
),
],
)
],
),
Column(
crossAxisAlignment: CrossAxisAlignment
.start,
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
AppText(
"Appointment #: ",
fontWeight: FontWeight.bold,
fontSize: 16,
),
AppText(
widget.mySelectedAssessment
.appointmentId
.toString(),
fontSize: 10,
color: Colors.grey,
),
],
),
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
AppText(
widget.mySelectedAssessment
.selectedDiagnosisCondition
.nameEn,
fontWeight: FontWeight.bold,
fontSize: 16,
),
],
),
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
AppText(
"Type : ",
fontWeight: FontWeight.bold,
fontSize: 16,
),
AppText(
widget.mySelectedAssessment
.selectedDiagnosisType
.nameEn,
fontSize: 10,
color: Colors.grey,
),
],
),
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
AppText(
"Doc : ",
fontWeight: FontWeight.bold,
fontSize: 16,
),
AppText(
"Anas Abdullah",
fontSize: 10,
color: Colors.grey,
),
],
),
SizedBox(
height: 6,
),
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
SizedBox(
height: 6,
),
Container(
width: MediaQuery.of(context).size.width * 0.5,
child: AppText(
widget.mySelectedAssessment.remark??"",
fontSize: 10, fontSize: 10,
color: Colors.grey, color: Colors.grey,
), ),
), ],
], )
), ],
], ),
), Column(
Column( crossAxisAlignment: CrossAxisAlignment
crossAxisAlignment: CrossAxisAlignment .start,
.start, children: [
children: [ Row(
Row( mainAxisAlignment:
MainAxisAlignment.start,
children: [ children: [
AppText( AppText(
"ICD: ".toUpperCase(), TranslationBase.of(context).appointmentNo,
fontWeight: FontWeight.bold, fontWeight: FontWeight
fontSize: 16, .bold,
), fontSize: 16,
Container( ),
child: AppText( AppText(
widget.mySelectedAssessment.selectedICD.code.trim().toUpperCase()??"", assessment
.appointmentId
.toString(),
fontSize: 10, fontSize: 10,
color: Colors.grey, color: Colors.grey,
), ),
), ],
], ),
) Row(
], mainAxisAlignment:
), MainAxisAlignment.start,
Column( children: [
children: [ AppText(
InkWell( assessment
onTap: () { .selectedDiagnosisCondition
openAssessmentDialog(context); .nameEn,
}, fontWeight: FontWeight
child: Icon(EvaIcons .bold,
.edit2Outline), fontSize: 16,
) ),
], ],
), ),
], Row(
), mainAxisAlignment:
) MainAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).type +':',
fontWeight: FontWeight
.bold,
fontSize: 16,
),
AppText(
assessment
.selectedDiagnosisType
.nameEn,
fontSize: 10,
color: Colors.grey,
),
],
),
if(assessment.doctorName != null)
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).doc,
fontWeight: FontWeight
.bold,
fontSize: 16,
),
AppText(
assessment.doctorName??'',
fontSize: 10,
color: Colors.grey,
),
],
),
SizedBox(
height: 6,
),
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
SizedBox(
height: 6,
),
Container(
width: MediaQuery
.of(context)
.size
.width * 0.5,
child: AppText(
assessment.remark ?? "",
fontSize: 10,
color: Colors.grey,
),
),
],
),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment
.start,
children: [
Row(
children: [
AppText(
"ICD: ".toUpperCase(),
fontWeight: FontWeight
.bold,
fontSize: 16,
),
Container(
child: AppText(
assessment.selectedICD
.code.trim()
.toUpperCase() ??
"",
fontSize: 10,
color: Colors.grey,
),
),
],
)
],
),
Column(
children: [
InkWell(
onTap: () {
openAssessmentDialog(
context, isUpdate: true,
assessment: assessment,
model: model);
},
child: Icon(EvaIcons
.edit2Outline),
)
],
),
],
),
);
}).toList(),)
], ],
) )
]), ]),
isExpand: isAssessmentExpand, isExpand: isAssessmentExpand,
), ),
DividerWithSpacesAround( DividerWithSpacesAround(
height: 30, height: 30,
),
AppButton(
title: TranslationBase
.of(context)
.next,
loading: model.state == ViewState.BusyLocal,
onPressed: () async {
await submitAssessment(model);
},
),
SizedBox(
height: 30,
),
],
), ),
), AppButton(
title: TranslationBase
.of(context)
.next,
loading: model.state == ViewState.BusyLocal,
onPressed: () async {
widget.changePageViewIndex(3);
},
),
SizedBox(
height: 30,
),
],
), ),
))); ),
),
)));
} }
submitAssessment(SOAPViewModel model) async {
if (widget.mySelectedAssessment.selectedDiagnosisCondition != null &&
widget.mySelectedAssessment.selectedDiagnosisType != null && widget.mySelectedAssessment.selectedICD !=null ) {
if(model.patientAssessmentList.isEmpty){
PostAssessmentRequestModel postAssessmentRequestModel =
new PostAssessmentRequestModel(
patientMRN: widget.patientInfo.patientMRN,
episodeId: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo,
icdCodeDetails: [
new IcdCodeDetails(
remarks: widget.mySelectedAssessment.remark,
complexDiagnosis: true,
conditionId:
widget.mySelectedAssessment.selectedDiagnosisCondition.id,
diagnosisTypeId:
widget.mySelectedAssessment.selectedDiagnosisType.id,
icdcode10Id: widget.mySelectedAssessment.selectedICD.code)
]);
await model.postAssessment(postAssessmentRequestModel);
} else {
PatchAssessmentReqModel patchAssessmentReqModel =
PatchAssessmentReqModel(
patientMRN: widget.patientInfo.patientMRN,
episodeID: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo,
remarks: widget.mySelectedAssessment.remark,
complexDiagnosis: true,
conditionId:
widget.mySelectedAssessment.selectedDiagnosisCondition.id,
diagnosisTypeId:
widget.mySelectedAssessment.selectedDiagnosisType.id,
icdcode10Id: widget.mySelectedAssessment.selectedICD.code,
prevIcdCode10ID: model.patientAssessmentList[0].icdCode10ID
);
await model.patchAssessment(patchAssessmentReqModel);
}
if (model.state == ViewState.ErrorLocal) { openAssessmentDialog(BuildContext context,
helpers.showErrorToast(model.error); {
} else { MySelectedAssessment assessment, bool isUpdate,
widget.changePageViewIndex(3); SOAPViewModel model
} }) {
} else { if (assessment == null) {
helpers.showErrorToast(TranslationBase.of(context).requiredMsg); assessment = MySelectedAssessment(
remark: '', appointmentId: widget.patientInfo.appointmentNo);
} }
widget.changePageViewIndex(3);
}
openAssessmentDialog(BuildContext context) {
showModalBottomSheet( showModalBottomSheet(
backgroundColor: Colors.white, backgroundColor: Colors.white,
isScrollControlled: true, isScrollControlled: true,
context: context, context: context,
builder: (context) { builder: (context) {
return AddAssessmentDetails( return AddAssessmentDetails(
mySelectedAssessment: widget.mySelectedAssessment, mySelectedAssessment: assessment,
addSelectedAssessment: () { patientInfo: widget.patientInfo,
isUpdate: isUpdate,
mySelectedAssessmentList: widget.mySelectedAssessmentList,
addSelectedAssessment: (MySelectedAssessment mySelectedAssessment,
bool isUpdate) async {
setState(() { setState(() {
Navigator.of(context).pop(); widget.mySelectedAssessmentList.add(mySelectedAssessment);
}); });
}); });
}); });
@ -428,32 +412,34 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> {
class AddAssessmentDetails extends StatefulWidget { class AddAssessmentDetails extends StatefulWidget {
final MySelectedAssessment mySelectedAssessment; final MySelectedAssessment mySelectedAssessment;
final Function() addSelectedAssessment; final List<MySelectedAssessment> mySelectedAssessmentList;
final Function(MySelectedAssessment mySelectedAssessment, bool isUpdate) addSelectedAssessment;
final PatiantInformtion patientInfo; final PatiantInformtion patientInfo;
const AddAssessmentDetails( final bool isUpdate;
{Key key, this.mySelectedAssessment, this.addSelectedAssessment, this.patientInfo}) AddAssessmentDetails(
: super(key: key); {Key key, this.mySelectedAssessment, this.addSelectedAssessment, this.patientInfo, this.isUpdate = false, this.mySelectedAssessmentList});
@override @override
_AddAssessmentDetailsState createState() => _AddAssessmentDetailsState(); _AddAssessmentDetailsState createState() => _AddAssessmentDetailsState();
} }
class _AddAssessmentDetailsState extends State<AddAssessmentDetails> { class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
// MasterKeyModel _selectedDiagnosisCondition;
// MasterKeyModel _selectedDiagnosisType;
TextEditingController remarkController = TextEditingController(); TextEditingController remarkController = TextEditingController();
TextEditingController appointmentIdController = TextEditingController(); TextEditingController appointmentIdController = TextEditingController();
GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>(); GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>();
bool isFormSubmitted = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
remarkController.text = widget.mySelectedAssessment.remark??""; remarkController.text = widget.mySelectedAssessment.remark ?? "";
appointmentIdController.text = widget.mySelectedAssessment.appointmentId.toString(); appointmentIdController.text =
widget.mySelectedAssessment.appointmentId.toString();
final screenSize = MediaQuery final screenSize = MediaQuery
.of(context) .of(context)
.size; .size;
InputDecoration textFieldSelectorDecoration(String hintText, InputDecoration textFieldSelectorDecoration(String hintText,
String selectedText, bool isDropDown,{IconData icon}) { String selectedText, bool isDropDown, {IconData icon}) {
//TODO: make one Input InputDecoration for all //TODO: make one Input InputDecoration for all
return InputDecoration( return InputDecoration(
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
@ -566,6 +552,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
), ),
), ),
), ),
if(isFormSubmitted && widget.mySelectedAssessment
.selectedICD == null)
CustomValidationError(),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
@ -612,6 +601,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
), ),
), ),
), ),
if(isFormSubmitted && widget.mySelectedAssessment
.selectedDiagnosisCondition == null)
CustomValidationError(),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
@ -658,6 +650,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
), ),
), ),
), ),
if(isFormSubmitted && widget.mySelectedAssessment
.selectedDiagnosisType == null)
CustomValidationError(),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
@ -685,17 +680,34 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
height: 10, height: 10,
), ),
AppButton( AppButton(
title: "Add".toUpperCase(), title: (widget.isUpdate?TranslationBase.of(context).update:TranslationBase.of(context).add).toUpperCase(),
onPressed: () { loading: model.state == ViewState.BusyLocal,
onPressed: () async {
setState(() { setState(() {
isFormSubmitted = true;
});
widget.mySelectedAssessment.remark = widget.mySelectedAssessment.remark =
remarkController.text; remarkController.text;
widget.mySelectedAssessment widget.mySelectedAssessment
.appointmentId = int.parse( .appointmentId = int.parse(
appointmentIdController.text); appointmentIdController.text);
if (widget.mySelectedAssessment
widget.addSelectedAssessment(); .selectedDiagnosisCondition !=
}); null &&
widget.mySelectedAssessment
.selectedDiagnosisType !=
null &&
widget.mySelectedAssessment
.selectedICD != null) {
widget.addSelectedAssessment(
widget.mySelectedAssessment,
widget.isUpdate);
await submitAssessment(
isUpdate: widget.isUpdate,
model: model,
mySelectedAssessment: widget
.mySelectedAssessment);
}
}, },
), ),
])), ])),
@ -704,6 +716,62 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
))), ))),
); );
} }
submitAssessment(
{SOAPViewModel model, MySelectedAssessment mySelectedAssessment, bool isUpdate = false}) async {
if (isUpdate) {
PatchAssessmentReqModel patchAssessmentReqModel =
PatchAssessmentReqModel(
patientMRN: widget.patientInfo.patientMRN,
episodeID: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo,
remarks: mySelectedAssessment.remark,
complexDiagnosis: true,
conditionId:
mySelectedAssessment.selectedDiagnosisCondition.id,
diagnosisTypeId:
mySelectedAssessment.selectedDiagnosisType.id,
icdcode10Id: mySelectedAssessment.selectedICD.code,
prevIcdCode10ID: mySelectedAssessment.icdCode10ID
);
await model.patchAssessment(patchAssessmentReqModel);
} else {
PostAssessmentRequestModel postAssessmentRequestModel =
new PostAssessmentRequestModel(
patientMRN: widget.patientInfo.patientMRN,
episodeId: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo,
icdCodeDetails: [
new IcdCodeDetails(
remarks: mySelectedAssessment.remark,
complexDiagnosis: true,
conditionId:
mySelectedAssessment.selectedDiagnosisCondition.id,
diagnosisTypeId:
mySelectedAssessment.selectedDiagnosisType.id,
icdcode10Id: mySelectedAssessment.selectedICD.code)
]);
await model.postAssessment(postAssessmentRequestModel);
}
if (model.state == ViewState.ErrorLocal) {
helpers.showErrorToast(model.error);
} else {
mySelectedAssessment.icdCode10ID = mySelectedAssessment.selectedICD.code;
if (!isUpdate) {
// widget.mySelectedAssessmentList.add(mySelectedAssessment);
widget.addSelectedAssessment(mySelectedAssessment,isUpdate);
}
Navigator.of(context).pop();
}
// widget.changePageViewIndex(3);
}
} }

@ -1,5 +1,6 @@
import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/client/base_app_client.dart';
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
@ -7,6 +8,7 @@ import 'package:doctor_app_flutter/models/SOAP/GetPhysicalExamReqModel.dart';
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/models/SOAP/my_selected_examination.dart'; import 'package:doctor_app_flutter/models/SOAP/my_selected_examination.dart';
import 'package:doctor_app_flutter/models/SOAP/post_physical_exam_request_model.dart'; import 'package:doctor_app_flutter/models/SOAP/post_physical_exam_request_model.dart';
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
@ -77,6 +79,7 @@ class _UpdateObjectivePageState extends State<UpdateObjectivePage> {
selectedExamination: examMaster, selectedExamination: examMaster,
remark: element.remarks, remark: element.remarks,
isNormal: element.isNormal, isNormal: element.isNormal,
createdBy: element.createdBy,
isAbnormal: element.isAbnormal); isAbnormal: element.isAbnormal);
widget.mySelectedExamination.add(tempEam); widget.mySelectedExamination.add(tempEam);
}); });
@ -102,7 +105,7 @@ class _UpdateObjectivePageState extends State<UpdateObjectivePage> {
children: [ children: [
Row( Row(
children: [ children: [
Texts('Physical/System Examination', Texts(TranslationBase.of(context).physicalSystemExamination,
variant: isSysExaminationExpand variant: isSysExaminationExpand
? "bodyText" ? "bodyText"
: '', : '',
@ -137,7 +140,7 @@ class _UpdateObjectivePageState extends State<UpdateObjectivePage> {
margin: margin:
EdgeInsets.only(left: 10, right: 10, top: 15), EdgeInsets.only(left: 10, right: 10, top: 15),
child: TextFields( child: TextFields(
hintText: "Add Examination", hintText: TranslationBase.of(context).physicalSystemExamination,
fontSize: 13.5, fontSize: 13.5,
onTapTextFields: () { onTapTextFields: () {
openExaminationList(context); openExaminationList(context);
@ -312,7 +315,7 @@ class _UpdateObjectivePageState extends State<UpdateObjectivePage> {
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
maxLines: 25, maxLines: 25,
minLines: 4, minLines: 4,
controller: remarksController, // controller: remarksController,
validator: (value) { validator: (value) {
if (value == null) if (value == null)
return TranslationBase.of(context) return TranslationBase.of(context)
@ -351,7 +354,11 @@ class _UpdateObjectivePageState extends State<UpdateObjectivePage> {
} }
submitUpdateObjectivePage(SOAPViewModel model) async { submitUpdateObjectivePage(SOAPViewModel model) async {
if(widget.mySelectedExamination.isNotEmpty){ if(widget.mySelectedExamination.isNotEmpty){
Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
PostPhysicalExamRequestModel postPhysicalExamRequestModel = new PostPhysicalExamRequestModel(); PostPhysicalExamRequestModel postPhysicalExamRequestModel = new PostPhysicalExamRequestModel();
widget.mySelectedExamination.forEach((exam) { widget.mySelectedExamination.forEach((exam) {
if (postPhysicalExamRequestModel.listHisProgNotePhysicalExaminationVM == if (postPhysicalExamRequestModel.listHisProgNotePhysicalExaminationVM ==
@ -364,9 +371,9 @@ class _UpdateObjectivePageState extends State<UpdateObjectivePage> {
episodeId: widget.patientInfo.episodeNo, episodeId: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo, appointmentNo: widget.patientInfo.appointmentNo,
remarks: exam.remark ?? '', remarks: exam.remark ?? '',
createdBy: 4709, createdBy: exam.createdBy??doctorProfile.doctorID,
createdOn: DateTime.now().toIso8601String(), createdOn: DateTime.now().toIso8601String(),
editedBy: 4709, editedBy: doctorProfile.doctorID,
editedOn: DateTime.now().toIso8601String(), editedOn: DateTime.now().toIso8601String(),
examId: exam.selectedExamination.id, examId: exam.selectedExamination.id,
examType: exam.selectedExamination.typeId, examType: exam.selectedExamination.typeId,
@ -390,10 +397,10 @@ class _UpdateObjectivePageState extends State<UpdateObjectivePage> {
widget.changePageViewIndex(2); widget.changePageViewIndex(2);
} }
} else { } else {
helpers.showErrorToast(TranslationBase.of(context).requiredMsg); widget.changePageViewIndex(2);
}
widget.changePageViewIndex(2); // helpers.showErrorToast(TranslationBase.of(context).requiredMsg);
}
} }
removeExamination(MasterKeyModel masterKey) { removeExamination(MasterKeyModel masterKey) {
@ -505,8 +512,8 @@ class _AddExaminationDailogState extends State<AddExaminationDailog> {
baseViewModel: model, baseViewModel: model,
child: MasterKeyCheckboxSearchWidget( child: MasterKeyCheckboxSearchWidget(
model: model, model: model,
hintSearchText: 'Search Examination', hintSearchText: TranslationBase.of(context).searchExamination,
buttonName: 'Add Examination', buttonName: TranslationBase.of(context).addExamination,
masterList: model.physicalExaminationList, masterList: model.physicalExaminationList,
removeHistory: (history){ removeHistory: (history){
setState(() { setState(() {

@ -51,15 +51,13 @@ class _UpdatePlanPageState extends State<UpdatePlanPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size;
return BaseView<SOAPViewModel>( return BaseView<SOAPViewModel>(
onModelReady: (model) async { onModelReady: (model) async {
GetGetProgressNoteReqModel getGetProgressNoteReqModel = GetGetProgressNoteReqModel getGetProgressNoteReqModel =
GetGetProgressNoteReqModel( GetGetProgressNoteReqModel(
appointmentNo: widget.patientInfo.appointmentNo, appointmentNo: widget.patientInfo.appointmentNo,
patientMRN: widget.patientInfo.patientMRN, patientMRN: widget.patientInfo.patientMRN,
episodeID: widget.patientInfo.episodeNo.toString()); episodeID: widget.patientInfo.episodeNo.toString(), editedBy: '', doctorID: '');
await model.getPatientProgressNote(getGetProgressNoteReqModel); await model.getPatientProgressNote(getGetProgressNoteReqModel);
if (model.patientProgressNoteList.isNotEmpty) { if (model.patientProgressNoteList.isNotEmpty) {
@ -115,7 +113,7 @@ class _UpdatePlanPageState extends State<UpdatePlanPage> {
), ),
Column( Column(
children: [ children: [
if(model.patientProgressNoteList.isEmpty) if(model.patientProgressNoteList.isEmpty || progressNoteController.text !='')
Container( Container(
margin: margin:
EdgeInsets.only(left: 10, right: 10, top: 15), EdgeInsets.only(left: 10, right: 10, top: 15),
@ -142,7 +140,7 @@ class _UpdatePlanPageState extends State<UpdatePlanPage> {
SizedBox( SizedBox(
height: 20, height: 20,
), ),
if (progressNoteController.text.isNotEmpty) if (progressNoteController.text !='')
Container( Container(
margin: margin:
EdgeInsets.only(left: 5, right: 5, top: 15), EdgeInsets.only(left: 5, right: 5, top: 15),
@ -285,7 +283,7 @@ class _UpdatePlanPageState extends State<UpdatePlanPage> {
patientMRN: widget.patientInfo.patientMRN, patientMRN: widget.patientInfo.patientMRN,
episodeId: widget.patientInfo.episodeNo, episodeId: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo, appointmentNo: widget.patientInfo.appointmentNo,
planNote: progressNoteController.text); planNote: progressNoteController.text, doctorID: '', editedBy: '');
if(model.patientProgressNoteList.isEmpty){ if(model.patientProgressNoteList.isEmpty){
await model.postProgressNote(postProgressNoteRequestModel); await model.postProgressNote(postProgressNoteRequestModel);
@ -352,6 +350,9 @@ class _UpdatePlanPageState extends State<UpdatePlanPage> {
AppButton( AppButton(
title: "Add".toUpperCase(), title: "Add".toUpperCase(),
onPressed: () { onPressed: () {
setState(() {
print(progressNoteController.text);
});
Navigator.of(context).pop(); Navigator.of(context).pop();
}, },
), ),

@ -3,6 +3,7 @@ import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/models/SOAP/my_selected_allergy.dart'; import 'package:doctor_app_flutter/models/SOAP/my_selected_allergy.dart';
import 'package:doctor_app_flutter/models/SOAP/my_selected_assement.dart'; import 'package:doctor_app_flutter/models/SOAP/my_selected_assement.dart';
import 'package:doctor_app_flutter/models/SOAP/my_selected_examination.dart'; import 'package:doctor_app_flutter/models/SOAP/my_selected_examination.dart';
import 'package:doctor_app_flutter/models/SOAP/my_selected_history.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
@ -30,9 +31,9 @@ class _UpdateSoapIndexState extends State<UpdateSoapIndex>
PageController _controller; PageController _controller;
int _currentIndex = 0; int _currentIndex = 0;
List<MySelectedAllergy> myAllergiesList= List(); List<MySelectedAllergy> myAllergiesList= List();
List<MasterKeyModel> myHistoryList = List(); List<MySelectedHistory> myHistoryList = List();
List<MySelectedExamination> mySelectedExamination = List(); List<MySelectedExamination> mySelectedExamination = List();
MySelectedAssessment mySelectedAssessment = new MySelectedAssessment(); List<MySelectedAssessment> mySelectedAssessment = List();
changePageViewIndex(pageIndex) { changePageViewIndex(pageIndex) {
_controller.jumpToPage(pageIndex); _controller.jumpToPage(pageIndex);
} }
@ -105,7 +106,7 @@ class _UpdateSoapIndexState extends State<UpdateSoapIndex>
), ),
UpdateAssessmentPage( UpdateAssessmentPage(
changePageViewIndex: changePageViewIndex, changePageViewIndex: changePageViewIndex,
mySelectedAssessment: mySelectedAssessmentList:
mySelectedAssessment, mySelectedAssessment,
patientInfo: patient, patientInfo: patient,
), ),

@ -4,10 +4,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
// OWNER : Ibrahim albitar
// DATE : 19-04-2020
// DESCRIPTION : Custom Text Form Field for app.
class AppTextFormField extends FormField<String> { class AppTextFormField extends FormField<String> {
AppTextFormField( AppTextFormField(
{FormFieldSetter<String> onSaved, {FormFieldSetter<String> onSaved,
@ -41,6 +37,7 @@ class AppTextFormField extends FormField<String> {
obscureText: obscureText, obscureText: obscureText,
focusNode: focusNode, focusNode: focusNode,
keyboardType: textInputType, keyboardType: textInputType,
readOnly: readOnly,
inputFormatters: [ inputFormatters: [
FilteringTextInputFormatter.allow( FilteringTextInputFormatter.allow(
RegExp(inputFormatter)), RegExp(inputFormatter)),

@ -53,71 +53,68 @@ class _MasterKeyCheckboxSearchWidgetState extends State<MasterKeyCheckboxSearchW
return Container( return Container(
child: Column( child: Column(
children: [ children: [
NetworkBaseView( Container(
baseViewModel: widget.model, height: MediaQuery.of(context).size.height * 0.5,
child: Container( child: Center(
height: MediaQuery.of(context).size.height * 0.5, child: Container(
child: Center( margin: EdgeInsets.only(top: 15),
child: Container( decoration: BoxDecoration(
margin: EdgeInsets.only(top: 15), borderRadius: BorderRadius.circular(12),
decoration: BoxDecoration( color: Colors.white),
borderRadius: BorderRadius.circular(12), child: ListView(
color: Colors.white), children: [
child: ListView( TextFields(
children: [ hintText: widget.hintSearchText ?? TranslationBase
TextFields( .of(context)
hintText: widget.hintSearchText ?? TranslationBase .searchHistory,
.of(context) suffixIcon: EvaIcons.search,
.searchHistory, onChanged: (value) {
suffixIcon: EvaIcons.search, filterSearchResults(value);
onChanged: (value) { },
filterSearchResults(value); ),
}, SizedBox(height: 15,),
), Column(
SizedBox(height: 15,), children: items.map((historyInfo) {
Column( return Column(
children: items.map((historyInfo) { children: [
return Column( Row(
children: [ children: [
Row( Checkbox(
children: [ value:
Checkbox( widget.isServiceSelected(historyInfo),
value: activeColor: Colors.red[800],
widget.isServiceSelected(historyInfo), onChanged: (bool newValue) {
activeColor: Colors.red[800], setState(() {
onChanged: (bool newValue) { if (widget
setState(() { .isServiceSelected(historyInfo)) {
if (widget widget.removeHistory(historyInfo);
.isServiceSelected(historyInfo)) { } else {
widget.removeHistory(historyInfo); widget.addHistory(historyInfo);
} else { }
widget.addHistory(historyInfo); });
} }),
}); Expanded(
}), child: Padding(
Expanded( padding: const EdgeInsets.symmetric(
child: Padding( horizontal: 10, vertical: 0),
padding: const EdgeInsets.symmetric( child: Texts(projectViewModel.isArabic
horizontal: 10, vertical: 0), ? historyInfo.nameAr!=""?historyInfo.nameAr:historyInfo.nameEn
child: Texts(projectViewModel.isArabic : historyInfo.nameEn,
? historyInfo.nameAr!=""?historyInfo.nameAr:historyInfo.nameEn variant: "bodyText",
: historyInfo.nameEn, bold: true,
variant: "bodyText", color: Colors.black),
bold: true,
color: Colors.black),
),
), ),
], ),
), ],
DividerWithSpacesAround(), ),
], DividerWithSpacesAround(),
); ],
}).toList(), );
), }).toList(),
], ),
), ],
)), ),
), )),
), ),
SizedBox( SizedBox(
height: 10, height: 10,

Loading…
Cancel
Save