working on some bug fixes and finish addmission request

merge-requests/296/head
mosazaid 4 years ago
parent a71bf160e7
commit 2b3a7f33d1

@ -25,6 +25,7 @@ const PATIENT_GET_LIST_REFERAL_URL =
const PATIENT_GET_CLINIC_BY_PROJECT_URL =
"Services/DoctorApplication.svc/REST/GetClinicsByProjectID";
const PROJECT_GET_INFO = "Services/DoctorApplication.svc/REST/GetProjectInfo";
const GET_CLINICS = "Services/DoctorApplication.svc/REST/GetClinics";
//const GET_PROJECTS = 'Services/Lists.svc/REST/GetProjectForDoctorAPP';
const GET_PROJECTS = 'Services/DoctorApplication.svc/REST/GetProjectInfo';
@ -193,6 +194,9 @@ const DRUG_TO_DRUG =
const GET_MEDICAL_FILE = 'Services/DoctorApplication.svc/REST/GetMedicalFile';
const GET_WARDS = 'Services/DoctorApplication.svc/REST/GetWards';
const GET_DIAGNOSIS_TYPES = 'Services/DoctorApplication.svc/REST/DiagnosisTypes';
const GET_DIET_TYPES = 'Services/DoctorApplication.svc/REST/DietTypes';
const GET_ICD_CODES = 'Services/DoctorApplication.svc/REST/GetICDCodes';
const POST_ADMISSION_REQUEST = 'Services/DoctorApplication.svc/REST/PostAdmissionRequest';
var selectedPatientType = 1;

@ -425,7 +425,8 @@ const Map<String, Map<String, String>> localizedValues = {
'en': "Expected Admission Date",
'ar': 'تاريخ القبول المتوقع'
},
'emergencyAdmission': {'en': "EMERGENCY ADMISSION", 'ar': 'دخول الطوارئ'},
// 'emergencyAdmission': {'en': "EMERGENCY ADMISSION", 'ar': 'دخول الطوارئ'},
'isSickLeaveRequired': {'en': "Is Sick Leave Required", 'ar': 'هل الإجازة المرضية مطلوبة'},
'patientPregnant': {'en': "Patient Pregnant", 'ar': 'حمل المريض'},
'treatmentLine': {
'en': "Main line of treatment",
@ -458,6 +459,10 @@ const Map<String, Map<String, String>> localizedValues = {
'en': "POST PLANS & ESTIMATED COST",
'ar': 'خطط البريد والتكلفة المقدرة'
},
'postPlans': {
'en': "POST PLANS",
'ar': 'خطط البريد'
},
'ucaf': {'en': "UCAF", 'ar': 'UCAF'},
'emergencyCase': {'en': "Emergency Case", 'ar': 'حالة طارئة'},
'durationOfIllness': {'en': "duration Of Illness", 'ar': 'مدة المرض'},
@ -530,6 +535,7 @@ const Map<String, Map<String, String>> localizedValues = {
'condition': {'en': "Condition", 'ar': "الحالة"},
'id': {'en': "ID", 'ar': "بطاقة هوية"},
'quantity': {'en': "Quantity", 'ar': "الكمية"},
'durDays': {'en': "Dur.(days)", 'ar': "الفترة(أيام)"},
'codeNo': {'en': "Code #", 'ar': "# الرمز"},
'covered': {'en': "Covered", 'ar': "مغطى"},
'approvalRequired': {'en': "Approval Required", 'ar': "الموافقة مطلوبة"},
@ -698,6 +704,9 @@ const Map<String, Map<String, String>> localizedValues = {
'clinicSearch': {'en': "Search Clinic", 'ar': "بحث عن عيادة"},
'doctorSearch': {'en': "Search Doctor", 'ar': "بحث عن طبيب"},
'referralResponse': {'en': "Referral Response : ", 'ar': " : استجابة الإحالة"},
'estimatedCost': {'en': "Estimated Cost", 'ar': "التكلفة المتوقعة"},
'diagnosisDetail': {'en': "Diagnosis Detail : ", 'ar': "تفاصيل التشخيص"},
// 'icd': {'en': "ICD", 'ar': " "},
};

@ -14,6 +14,7 @@ enum MasterKeysService {
TemperatureMethods,
Speciality,
AdmissionRequestType,
DiagnosisSelectionType,
}
extension SelectedMasterKeysService on MasterKeysService {
@ -61,6 +62,9 @@ extension SelectedMasterKeysService on MasterKeysService {
case MasterKeysService.AdmissionRequestType:
return 2019;
break;
case MasterKeysService.DiagnosisSelectionType:
return 2024;
break;
}
}
}

@ -0,0 +1,200 @@
class AdmissionRequest {
int patientMRN;
int admitToClinic;
bool isPregnant;
int pregnancyWeeks;
int pregnancyType;
int noOfBabies;
int mrpDoctorID;
String admissionDate;
int expectedDays;
int admissionType;
int admissionLocationID;
int roomCategoryID;
int wardID;
bool isSickLeaveRequired;
String sickLeaveComments;
bool isTransport;
String transportComments;
bool isPhysioAppointmentNeeded;
String physioAppointmentComments;
bool isOPDFollowupAppointmentNeeded;
String opdFollowUpComments;
bool isDietType;
int dietType;
String dietRemarks;
bool isPhysicalActivityModification;
String physicalActivityModificationComments;
int orStatus;
String mainLineOfTreatment;
int estimatedCost;
String elementsForImprovement;
bool isPackagePatient;
String complications;
String otherDepartmentInterventions;
String otherProcedures;
String pastMedicalHistory;
String pastSurgicalHistory;
List<dynamic> admissionRequestDiagnoses;
List<dynamic> admissionRequestProcedures;
int appointmentNo;
int episodeID;
int admissionRequestNo;
AdmissionRequest(
{this.patientMRN,
this.admitToClinic,
this.isPregnant,
this.pregnancyWeeks = 0,
this.pregnancyType = 0,
this.noOfBabies = 0,
this.mrpDoctorID,
this.admissionDate,
this.expectedDays,
this.admissionType,
this.admissionLocationID = 0,
this.roomCategoryID = 0,
this.wardID,
this.isSickLeaveRequired,
this.sickLeaveComments = "",
this.isTransport = false,
this.transportComments = "",
this.isPhysioAppointmentNeeded = false,
this.physioAppointmentComments = "",
this.isOPDFollowupAppointmentNeeded = false,
this.opdFollowUpComments = "",
this.isDietType,
this.dietType,
this.dietRemarks,
this.isPhysicalActivityModification = false,
this.physicalActivityModificationComments = "",
this.orStatus = 1,
this.mainLineOfTreatment,
this.estimatedCost,
this.elementsForImprovement,
this.isPackagePatient = false,
this.complications = "",
this.otherDepartmentInterventions = "",
this.otherProcedures = "",
this.pastMedicalHistory = "",
this.pastSurgicalHistory = "",
this.admissionRequestDiagnoses,
this.admissionRequestProcedures,
this.appointmentNo,
this.episodeID,
this.admissionRequestNo});
AdmissionRequest.fromJson(Map<String, dynamic> json) {
patientMRN = json['patientMRN'];
admitToClinic = json['admitToClinic'];
isPregnant = json['isPregnant'];
pregnancyWeeks = json['pregnancyWeeks'];
pregnancyType = json['pregnancyType'];
noOfBabies = json['noOfBabies'];
mrpDoctorID = json['mrpDoctorID'];
admissionDate = json['admissionDate'];
expectedDays = json['expectedDays'];
admissionType = json['admissionType'];
admissionLocationID = json['admissionLocationID'];
roomCategoryID = json['roomCategoryID'];
wardID = json['wardID'];
isSickLeaveRequired = json['isSickLeaveRequired'];
sickLeaveComments = json['sickLeaveComments'];
isTransport = json['isTransport'];
transportComments = json['transportComments'];
isPhysioAppointmentNeeded = json['isPhysioAppointmentNeeded'];
physioAppointmentComments = json['physioAppointmentComments'];
isOPDFollowupAppointmentNeeded = json['isOPDFollowupAppointmentNeeded'];
opdFollowUpComments = json['opdFollowUpComments'];
isDietType = json['isDietType'];
dietType = json['dietType'];
dietRemarks = json['dietRemarks'];
isPhysicalActivityModification = json['isPhysicalActivityModification'];
physicalActivityModificationComments =
json['physicalActivityModificationComments'];
orStatus = json['orStatus'];
mainLineOfTreatment = json['mainLineOfTreatment'];
estimatedCost = json['estimatedCost'];
elementsForImprovement = json['elementsForImprovement'];
isPackagePatient = json['isPackagePatient'];
complications = json['complications'];
otherDepartmentInterventions = json['otherDepartmentInterventions'];
otherProcedures = json['otherProcedures'];
pastMedicalHistory = json['pastMedicalHistory'];
pastSurgicalHistory = json['pastSurgicalHistory'];
if (json['admissionRequestDiagnoses'] != null) {
admissionRequestDiagnoses = new List<dynamic>();
json['admissionRequestDiagnoses'].forEach((v) {
admissionRequestDiagnoses.add(v);
// admissionRequestDiagnoses
// .add(new AdmissionRequestDiagnoses.fromJson(v));
});
}
if (json['admissionRequestProcedures'] != null) {
admissionRequestProcedures = new List<dynamic>();
json['admissionRequestProcedures'].forEach((v) {
admissionRequestProcedures.add(v);
// admissionRequestProcedures
// .add(new AdmissionRequestProcedures.fromJson(v));
});
}
appointmentNo = json['appointmentNo'];
episodeID = json['episodeID'];
admissionRequestNo = json['admissionRequestNo'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['patientMRN'] = this.patientMRN;
data['admitToClinic'] = this.admitToClinic;
data['isPregnant'] = this.isPregnant;
data['pregnancyWeeks'] = this.pregnancyWeeks;
data['pregnancyType'] = this.pregnancyType;
data['noOfBabies'] = this.noOfBabies;
data['mrpDoctorID'] = this.mrpDoctorID;
data['admissionDate'] = this.admissionDate;
data['expectedDays'] = this.expectedDays;
data['admissionType'] = this.admissionType;
data['admissionLocationID'] = this.admissionLocationID;
data['roomCategoryID'] = this.roomCategoryID;
data['wardID'] = this.wardID;
data['isSickLeaveRequired'] = this.isSickLeaveRequired;
data['sickLeaveComments'] = this.sickLeaveComments;
data['isTransport'] = this.isTransport;
data['transportComments'] = this.transportComments;
data['isPhysioAppointmentNeeded'] = this.isPhysioAppointmentNeeded;
data['physioAppointmentComments'] = this.physioAppointmentComments;
data['isOPDFollowupAppointmentNeeded'] =
this.isOPDFollowupAppointmentNeeded;
data['opdFollowUpComments'] = this.opdFollowUpComments;
data['isDietType'] = this.isDietType;
data['dietType'] = this.dietType;
data['dietRemarks'] = this.dietRemarks;
data['isPhysicalActivityModification'] =
this.isPhysicalActivityModification;
data['physicalActivityModificationComments'] =
this.physicalActivityModificationComments;
data['orStatus'] = this.orStatus;
data['mainLineOfTreatment'] = this.mainLineOfTreatment;
data['estimatedCost'] = this.estimatedCost;
data['elementsForImprovement'] = this.elementsForImprovement;
data['isPackagePatient'] = this.isPackagePatient;
data['complications'] = this.complications;
data['otherDepartmentInterventions'] = this.otherDepartmentInterventions;
data['otherProcedures'] = this.otherProcedures;
data['pastMedicalHistory'] = this.pastMedicalHistory;
data['pastSurgicalHistory'] = this.pastSurgicalHistory;
if (this.admissionRequestDiagnoses != null) {
data['admissionRequestDiagnoses'] = this.admissionRequestDiagnoses;
// this.admissionRequestDiagnoses.map((v) => v.toJson()).toList();
}
if (this.admissionRequestProcedures != null) {
data['admissionRequestProcedures'] =
this.admissionRequestProcedures.map((v) => v.toJson()).toList();
}
data['appointmentNo'] = this.appointmentNo;
data['episodeID'] = this.episodeID;
data['admissionRequestNo'] = this.admissionRequestNo;
return data;
}
}

@ -0,0 +1,33 @@
class Clinic {
int clinicGroupID;
String clinicGroupName;
int clinicID;
String clinicNameArabic;
String clinicNameEnglish;
Clinic(
{this.clinicGroupID,
this.clinicGroupName,
this.clinicID,
this.clinicNameArabic,
this.clinicNameEnglish});
Clinic.fromJson(Map<String, dynamic> json) {
clinicGroupID = json['clinicGroupID'];
clinicGroupName = json['clinicGroupName'];
clinicID = json['clinicID'];
clinicNameArabic = json['clinicNameArabic'];
clinicNameEnglish = json['clinicNameEnglish'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['clinicGroupID'] = this.clinicGroupID;
data['clinicGroupName'] = this.clinicGroupName;
data['clinicID'] = this.clinicID;
data['clinicNameArabic'] = this.clinicNameArabic;
data['clinicNameEnglish'] = this.clinicNameEnglish;
return data;
}
}

@ -38,6 +38,7 @@ class LookupService extends BaseService {
List<MasterKeyModel> listOfTemperatureMethods = [];
List<MasterKeyModel> listOfSpeciality = [];
List<dynamic> listOfAdmissionType = [];
List<dynamic> listOfDiagnosisSelectionTypes = [];
Future getMasterLookup(MasterKeysService masterKeys) async {
hasError = false;
@ -153,6 +154,13 @@ class LookupService extends BaseService {
listOfAdmissionType.add(v);
});
break;
case MasterKeysService.DiagnosisSelectionType:
listOfDiagnosisSelectionTypes.clear();
entryList.forEach((v) {
// listOfAdmissionType.add(MasterKeyModel.fromJson(v));
listOfDiagnosisSelectionTypes.add(v);
});
break;
}
}

@ -1,14 +1,18 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart';
import 'package:doctor_app_flutter/core/model/admissionRequest/ward-model.dart';
import 'package:doctor_app_flutter/core/service/base/lookup-service.dart';
import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
class AdmissionRequestService extends LookupService {
List<dynamic> clinicList = [];
List<dynamic> doctorsList = [];
List<dynamic> specialityList = [];
List<dynamic> wardList = [];
List<dynamic> diagnosisTypesList = [];
List<dynamic> allergiesLookupList = [];
List<dynamic> dietTypesList = [];
List<dynamic> icdCodes = [];
setSpecialityList() {
specialityList.clear();
@ -24,9 +28,12 @@ class AdmissionRequestService extends LookupService {
});
}
Future getDoctorsList() async {
Future getDoctorsList(int clinicId) async {
hasError = false;
Map<String, dynamic> body = Map();
body['ClinicID'] = clinicId;
await baseAppClient.post(
PATIENT_GET_DOCTOR_BY_CLINIC_URL,
onSuccess: (dynamic response, int statusCode) {
@ -37,6 +44,26 @@ class AdmissionRequestService extends LookupService {
hasError = true;
super.error = error;
},
body: body,
);
}
Future getClinics() async {
hasError = false;
await baseAppClient.post(
GET_CLINICS,
onSuccess: (dynamic response, int statusCode) {
clinicList.clear();
if (response['listClinics'] != null &&
response['listClinics']['entityList'] != null) {
clinicList.addAll(response['listClinics']['entityList']);
}
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: Map(),
);
}
@ -86,4 +113,74 @@ class AdmissionRequestService extends LookupService {
body: Map(),
);
}
Future getDietTypesList() async {
hasError = false;
await baseAppClient.post(
GET_DIET_TYPES,
onSuccess: (dynamic response, int statusCode) {
dietTypesList.clear();
if (response['DietTypeList'] != null &&
response['DietTypeList']['entityList'] != null) {
response['DietTypeList']['entityList'].forEach((v) {
// diagnosisTypesList.add(MasterKeyModel.fromJson(v));
dietTypesList.add(v);
});
}
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: Map(),
);
}
Future getICDCodes(int patientMrn) async {
hasError = false;
Map<String, dynamic> body = Map();
body['PatientMRN'] = patientMrn;
body['isPatientDiagnosisOnly'] = true;
await baseAppClient.post(
GET_ICD_CODES,
onSuccess: (dynamic response, int statusCode) {
icdCodes.clear();
if (response['ICDCodesList'] != null) {
icdCodes.addAll(response['ICDCodesList']);
// response['ICDCodesList'].forEach((v) {
// diagnosisTypesList.add(MasterKeyModel.fromJson(v));
// icdCodes.add(v);
// });
}
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: body,
);
}
Future makeAdmissionRequest(AdmissionRequest admissionRequest) async{
hasError = false;
Map<String, dynamic> body = Map();
body['AdmissionRequestViewModel'] = admissionRequest.toJson();
await baseAppClient.post(
POST_ADMISSION_REQUEST,
onSuccess: (dynamic response, int statusCode) {
print(response);
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: body,
);
}
}

@ -197,12 +197,13 @@ class PatientReferralService extends LookupService {
DoctorProfileModel doctorProfile = await getDoctorProfile();
Map<String, dynamic> body = Map();
body['IsAccepted'] = isAccepted;
body['AppointmentNo'] = pendingReferral.sourceAppointmentNo;
body['PatientMRN'] = pendingReferral.patientID;
body['AppointmentNo'] = pendingReferral.sourceAppointmentNo;
body['SetupID'] = pendingReferral.sourceSetupID;
body['ProjectID'] = pendingReferral.sourceProjectId;
body['IsAccepted'] = isAccepted;
body['PatientName'] = pendingReferral.patientName;
body['ReferralResponse'] = pendingReferral.remarksFromSource;
body['SetupID'] = pendingReferral.sourceSetupID;
body['DoctorName'] = doctorProfile.doctorName;
await baseAppClient.post(

@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/model/prescription_model.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';
@ -14,6 +15,7 @@ class UcafService extends LookupService {
VitalSignData patientVitalSigns;
List<GetAssessmentResModel> patientAssessmentList = [];
List<OrderProcedure> orderProcedureList = [];
PrescriptionModel prescriptionList;
Future getPatientChiefComplaint(PatiantInformtion patient) async {
hasError = false;
@ -81,6 +83,25 @@ class UcafService extends LookupService {
}, body: body);
}
Future getPrescription(PatiantInformtion patient) async {
hasError = false;
Map<String, dynamic> body = Map();
body['PatientMRN'] = patient.patientMRN;
body['AppointmentNo'] = patient.appointmentNo;
body['EpisodeID'] = patient.episodeNo;
hasError = false;
prescriptionList = null;
await baseAppClient.post(GET_PRESCRIPTION_LIST,
onSuccess: (dynamic response, int statusCode) {
prescriptionList = PrescriptionModel.fromJson(response['PrescriptionList']);
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
Future getOrderProcedures(PatiantInformtion patient) async {
hasError = false;
Map<String, dynamic> body = Map();

@ -1,6 +1,7 @@
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/model/admissionRequest/admission-request.dart';
import 'package:doctor_app_flutter/core/model/admissionRequest/ward-model.dart';
import 'package:doctor_app_flutter/core/service/patient-admission-request-service.dart';
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
@ -12,6 +13,8 @@ class AdmissionRequestViewModel extends BaseViewModel{
AdmissionRequestService _admissionRequestService = locator<AdmissionRequestService>();
List<dynamic> get clinicList => _admissionRequestService.clinicList;
List<dynamic> get doctorsList => _admissionRequestService.doctorsList;
List<dynamic> get speciality => _admissionRequestService.specialityList;
@ -24,33 +27,44 @@ class AdmissionRequestViewModel extends BaseViewModel{
List<dynamic> get allergiesList => _admissionRequestService.allergiesLookupList;
String selectedLanguage;
List<dynamic> get dietTypesList => _admissionRequestService.dietTypesList;
Future getLanguage() async {
selectedLanguage = await sharedPref.getString(APP_Language);
}
List<dynamic> get icdCodes => _admissionRequestService.icdCodes;
List<dynamic> get listOfDiagnosisSelectionTypes => _admissionRequestService.listOfDiagnosisSelectionTypes;
AdmissionRequest admissionRequestData;
Future getSpecialityList() async {
await getLanguage();
await getMasterLookup(MasterKeysService.Speciality);
if (!_admissionRequestService.hasError) {
_admissionRequestService.setSpecialityList();
await getClinicDoctors();
await getClinicDoctors(1);
}
}
Future getClinicDoctors() async {
setState(ViewState.Busy);
await _admissionRequestService.getDoctorsList();
Future getClinics() async {
setState(ViewState.BusyLocal);
await _admissionRequestService.getClinics();
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;
setState(ViewState.Error);
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future getClinicDoctors(int clinicId) async {
setState(ViewState.BusyLocal);
await _admissionRequestService.getDoctorsList(clinicId);
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future getWards() async {
setState(ViewState.Busy);
setState(ViewState.BusyLocal);
await _admissionRequestService.getWardList();
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;
@ -60,7 +74,7 @@ class AdmissionRequestViewModel extends BaseViewModel{
}
Future getDiagnosis() async {
setState(ViewState.Busy);
setState(ViewState.BusyLocal);
await _admissionRequestService.getDiagnosisTypesList();
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;
@ -76,8 +90,38 @@ class AdmissionRequestViewModel extends BaseViewModel{
}
}
Future getMasterLookup(MasterKeysService keysService) async {
Future getDietTypes() async {
setState(ViewState.BusyLocal);
await _admissionRequestService.getDietTypesList();
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future getICDCodes(int patientMrn) async {
setState(ViewState.BusyLocal);
await _admissionRequestService.getICDCodes(patientMrn);
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future makeAdmissionRequest() async{
setState(ViewState.Busy);
await _admissionRequestService.makeAdmissionRequest(admissionRequestData);
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future getMasterLookup(MasterKeysService keysService) async {
setState(ViewState.BusyLocal);
await _admissionRequestService.getMasterLookup(keysService);
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;

@ -1,6 +1,7 @@
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/model/prescription_model.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/models/SOAP/ChiefComplaint/GetChiefComplaintResModel.dart';
@ -29,10 +30,18 @@ class UcafViewModel extends BaseViewModel {
List<MasterKeyModel> get diagnosisConditions =>
_ucafService.listOfDiagnosisCondition;
PrescriptionModel get prescriptionList => _ucafService.prescriptionList;
List<OrderProcedure> get orderProcedures => _ucafService.orderProcedureList;
String selectedLanguage;
resetDataInFirst(){
_ucafService.patientAssessmentList = [];
_ucafService.orderProcedureList = [];
_ucafService.prescriptionList = null;
}
Future getLanguage() async {
selectedLanguage = await sharedPref.getString(APP_Language);
}
@ -90,6 +99,19 @@ class UcafViewModel extends BaseViewModel {
}
}
Future getPrescription(PatiantInformtion patient) async {
if (prescriptionList == null) {
setState(ViewState.Busy);
await _ucafService.getPrescription(patient);
if (_ucafService.hasError) {
error = _ucafService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
}
MasterKeyModel findMasterDataById(
{@required MasterKeysService masterKeys, dynamic id}) {
switch (masterKeys) {

@ -137,9 +137,10 @@ var routes = {
PATIENT_INSURANCE_APPROVALS: (_) => InsuranceApprovalsScreen(),
VITAL_SIGN_DETAILS: (_) => VitalSignDetailsScreen(),
PATIENT_VITAL_SIGN: (_) => PatientVitalSignScreen(),
PATIENT_ADMISSION_REQUEST: (_) => AdmissionRequestDetailScreen(),
PATIENT_ADMISSION_REQUEST: (_) => AdmissionRequestThirdScreen(),
PATIENT_ADMISSION_REQUEST_2: (_) => AdmissionRequestSecondScreen(),
PATIENT_ADMISSION_REQUEST_3: (_) => AdmissionRequestThirdScreen(),
// PATIENT_ADMISSION_REQUEST: (_) => AdmissionRequestDetailScreen(),
CREATE_EPISODE: (_) => UpdateSoapIndex(isUpdate: true,),
UPDATE_EPISODE: (_) => UpdateSoapIndex(
isUpdate: true,

@ -1,6 +1,7 @@
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/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/prescription_model.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';
@ -35,6 +36,7 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
return BaseView<UcafViewModel>(
onModelReady: (model) async {
model.resetDataInFirst();
await model.getLanguage();
await model.getPatientAssessment(patient);
},
@ -54,8 +56,8 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
height: 10,
),
Container(
margin:
EdgeInsets.symmetric(vertical: 16, horizontal: 16),
margin: EdgeInsets.symmetric(
vertical: 16, horizontal: 16),
child: Column(
children: [
treatmentStepsBar(
@ -63,7 +65,8 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
SizedBox(
height: 16,
),
...getSelectedTreatmentStepItem(context, model),
...getSelectedTreatmentStepItem(
context, model),
],
),
),
@ -73,8 +76,7 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
),
),
Container(
margin:
EdgeInsets.symmetric(vertical: 8, horizontal: 16),
margin: EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: BorderedButton(
TranslationBase.of(context).save,
hasBorder: true,
@ -86,9 +88,10 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
fontSize: SizeConfig.textMultiplier * 2.0,
handler: () async {
await model.postUCAF(patient);
if(model.state == ViewState.Idle){
DrAppToastMsg.showSuccesToast(TranslationBase.of(context).postUcafSuccessMsg);
Navigator.of(context).popUntil((route){
if (model.state == ViewState.Idle) {
DrAppToastMsg.showSuccesToast(
TranslationBase.of(context).postUcafSuccessMsg);
Navigator.of(context).popUntil((route) {
return route.settings.name == PATIENTS_PROFILE;
});
} else {
@ -98,8 +101,8 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
),
),
Container(
margin:
EdgeInsets.only(left: 16, right: 16, top: 0.0, bottom: 8),
margin: EdgeInsets.only(
left: 16, right: 16, top: 0.0, bottom: 8),
child: BorderedButton(
TranslationBase.of(context).cancel,
hasBorder: true,
@ -110,10 +113,9 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
textColor: HexColor("#B8382B"),
fontSize: SizeConfig.textMultiplier * 2.2,
handler: () {
Navigator.of(context).popUntil((route){
Navigator.of(context).popUntil((route) {
return route.settings.name == PATIENTS_PROFILE;
});
},
),
),
@ -164,7 +166,7 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
if (__treatmentSteps.indexOf(item) == 0) {
await model.getPatientAssessment(patient);
} else if (__treatmentSteps.indexOf(item) == 1) {
print("call Medications");
await model.getPrescription(patient);
}
if (__treatmentSteps.indexOf(item) == 2) {
await model.getOrderProcedures(patient);
@ -198,7 +200,14 @@ class _UcafDetailScreenState extends State<UcafDetailScreen> {
}
break;
case 1:
return [...List.generate(2, (index) => MedicationWidget()).toList()];
return [
...List.generate(
model.prescriptionList != null
? model.prescriptionList.entityList.length
: 0,
(index) => MedicationWidget(
model, model.prescriptionList.entityList[index])).toList()
];
break;
case 2:
if (model.orderProcedures != null) {
@ -326,6 +335,11 @@ class DiagnosisWidget extends StatelessWidget {
}
class MedicationWidget extends StatelessWidget {
final UcafViewModel model;
final EntityList prescription;
MedicationWidget(this.model, this.prescription);
@override
Widget build(BuildContext context) {
return Column(
@ -339,7 +353,7 @@ class MedicationWidget extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 2.0,
),
AppText(
"6",
"${prescription.medicineCode}",
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0,
),
@ -352,7 +366,7 @@ class MedicationWidget extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 2.0,
),
AppText(
"35.6",
"${prescription.medicationPrice}",
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0,
),
@ -365,7 +379,24 @@ class MedicationWidget extends StatelessWidget {
fontSize: SizeConfig.textMultiplier * 2.0,
),
AppText(
"3",
"${prescription.quantity}",
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0,
),
],
),
SizedBox(
height: 4,
),
Row(
children: [
AppText(
"${TranslationBase.of(context).durDays}: ",
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.0,
),
AppText(
"${prescription.doseDurationDays}",
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0,
),
@ -378,7 +409,7 @@ class MedicationWidget extends StatelessWidget {
children: [
Expanded(
child: AppText(
"EVE SKIN CREAM WITH HONEY -170GM",
"${prescription.medicationName}",
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.0,
),
@ -392,7 +423,7 @@ class MedicationWidget extends StatelessWidget {
children: [
Expanded(
child: AppText(
"Every other day for 5 days",
"${prescription.doseDetail}",
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.0,
),

@ -233,7 +233,7 @@ class _UCAFInputScreenState extends State<UCAFInputScreen> {
controller: _additionalComplaintsController,
keyboardType: TextInputType.multiline,
minLines: 1,
maxLines: 15,
maxLines: 20,
)),
SizedBox(
height: 16,

@ -1,5 +1,6 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-admission-request-viewmodel.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_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/date-utils.dart';
@ -12,6 +13,7 @@ import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';
import '../../../../routes.dart';
@ -32,6 +34,7 @@ class _AdmissionRequestDetailScreenState
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient'];
final screenSize = MediaQuery.of(context).size;
ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<AdmissionRequestViewModel>(
onModelReady: (model) => model.getSpecialityList(),
@ -124,7 +127,7 @@ class _AdmissionRequestDetailScreenState
ListSelectDialog(
list: model.speciality,
attributeName:
model.selectedLanguage == 'ar'
projectViewModel.isArabic
? 'nameAr'
: 'nameEn',
attributeValueId: 'id',
@ -151,8 +154,7 @@ class _AdmissionRequestDetailScreenState
TranslationBase.of(context)
.speciality,
_selectedSpeciality != null
? model.selectedLanguage ==
'ar'
? projectViewModel.isArabic
? _selectedSpeciality[
'nameAr']
: _selectedSpeciality[

@ -1,29 +1,43 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-admission-request-viewmodel.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_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/date-utils.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.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_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';
import '../../../../routes.dart';
class AdmissionRequestThirdScreen extends StatefulWidget {
@override
_AdmissionRequestThirdScreenState createState() => _AdmissionRequestThirdScreenState();
_AdmissionRequestThirdScreenState createState() =>
_AdmissionRequestThirdScreenState();
}
class _AdmissionRequestThirdScreenState extends State<AdmissionRequestThirdScreen> {
class _AdmissionRequestThirdScreenState
extends State<AdmissionRequestThirdScreen> {
final _postPlansEstimatedCostController = TextEditingController();
final _dietTypeRemarksController = TextEditingController();
DateTime _dischargeDate;
final _estimatedCostController = TextEditingController();
// DateTime _dischargeDate;
dynamic _selectedClinic;
dynamic _selectedDoctor;
dynamic _selectedDietType;
@override
@ -31,9 +45,9 @@ class _AdmissionRequestThirdScreenState extends State<AdmissionRequestThirdScree
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient'];
final screenSize = MediaQuery.of(context).size;
ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<AdmissionRequestViewModel>(
// onModelReady: (model) => model.getMasterLookup(),
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
appBarTitle: TranslationBase.of(context).admissionRequest,
@ -56,19 +70,181 @@ class _AdmissionRequestThirdScreenState extends State<AdmissionRequestThirdScree
height: 16,
),
AppText(
TranslationBase.of(context).postPlansEstimatedCost,
TranslationBase.of(context)
.specialityAndDoctorDetail,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5,
),
SizedBox(
height: 10,
),
SizedBox(
height: 20,
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.clinicList != null &&
model.clinicList.length > 0
? () {
openListDialogField(
'clinicGroupName',
'clinicID',
model.clinicList,
(selectedValue) {
setState(() {
_selectedClinic = selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils.showMyDialog(
context);
await model.getClinics().then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.clinicList.length > 0) {
openListDialogField(
'clinicGroupName',
'clinicID',
model.clinicList,
(selectedValue) {
setState(() {
_selectedClinic =
selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
},
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.clinic,
_selectedClinic != null
? _selectedClinic[
'clinicGroupName']
: null,
true),
enabled: false,
),
),
),
SizedBox(
height: 20,
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: _selectedClinic != null
? model.doctorsList != null &&
model.doctorsList.length > 0
? () {
openListDialogField(
'DoctorName',
'DoctorID',
model.doctorsList,
(selectedValue) {
setState(() {
_selectedDoctor =
selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils
.showMyDialog(context);
await model
.getClinicDoctors(
_selectedClinic[
'clinicID'])
.then((_) =>
GifLoaderDialogUtils
.hideDialog(
context));
if (model.state ==
ViewState.Idle &&
model.doctorsList.length >
0) {
openListDialogField(
'DoctorName',
'DoctorID',
model.doctorsList,
(selectedValue) {
setState(() {
_selectedDoctor =
selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
}
: null,
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.doctor,
_selectedDoctor != null
? _selectedDoctor[
'DoctorName']
: null,
true),
enabled: false,
),
),
),
SizedBox(
height: 10,
),
AppText(
TranslationBase.of(context)
.postPlansEstimatedCost,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5,
),
SizedBox(
height: 10,
),
Container(
height: screenSize.height * 0.070,
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.estimatedCost,
null,
false),
enabled: true,
controller: _estimatedCostController,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(ONLY_NUMBERS))
],
keyboardType: TextInputType.number,
)),
SizedBox(
height: 10,
),
Container(
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).postPlans,
null,
false),
enabled: true,
@ -80,15 +256,14 @@ class _AdmissionRequestThirdScreenState extends State<AdmissionRequestThirdScree
SizedBox(
height: 10,
),
Container(
/* Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: () {
if (_dischargeDate == null) {
_dischargeDate = DateTime.now();
}
_selectDate(
context, _dischargeDate,
_selectDate(context, _dischargeDate,
(picked) {
setState(() {
_dischargeDate = picked;
@ -114,40 +289,56 @@ class _AdmissionRequestThirdScreenState extends State<AdmissionRequestThirdScree
),
SizedBox(
height: 10,
),
),*/
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: /*model.doctorsList != null &&
model.doctorsList.length > 0
onTap: model.dietTypesList != null &&
model.dietTypesList.length > 0
? () {
ListSelectDialog dialog =
ListSelectDialog(
list: model.doctorsList,
attributeName: 'DoctorName',
attributeValueId: 'DoctorID',
okText: TranslationBase.of(context).ok,
okFunction: (selectedValue) {
openListDialogField('nameEn', 'id',
model.dietTypesList,
(selectedValue) {
setState(() {
_selectedDoctor = selectedValue;
_selectedDietType =
selectedValue;
});
});
},
);
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
return dialog;
},
);
}
:*/ null,
: () async {
GifLoaderDialogUtils.showMyDialog(
context);
await model.getDietTypes().then(
(_) => GifLoaderDialogUtils
.hideDialog(context));
if (model.state == ViewState.Idle &&
model.dietTypesList.length >
0) {
openListDialogField('nameEn',
'id', model.dietTypesList,
(selectedValue) {
setState(() {
_selectedDietType =
selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
},
child: TextField(
decoration: Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).dietType,
/* _admissionType != null
? _admissionType['DoctorName']
:*/ null,
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.dietType,
_selectedDietType != null
? _selectedDietType['nameEn']
: null,
true),
enabled: false,
),
@ -180,9 +371,34 @@ class _AdmissionRequestThirdScreenState extends State<AdmissionRequestThirdScree
Container(
margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: AppButton(
title: TranslationBase.of(context).save,
title: TranslationBase.of(context).next,
color: HexColor("#B8382B"),
onPressed: null,
onPressed: () {
model.admissionRequestData = AdmissionRequest();
if (_selectedClinic != null &&
_selectedDoctor != null &&
_estimatedCostController.text != "" &&
_postPlansEstimatedCostController.text != "") {
model.admissionRequestData.patientMRN = patient.patientMRN;
model.admissionRequestData.appointmentNo = patient.appointmentNo;
model.admissionRequestData.episodeID = patient.episodeNo;
model.admissionRequestData.admissionRequestNo = 0;
model.admissionRequestData.admitToClinic = _selectedClinic['clinicID'];
model.admissionRequestData.mrpDoctorID = _selectedDoctor['DoctorID'];
model.admissionRequestData.estimatedCost = int.parse(_estimatedCostController.text);
model.admissionRequestData.elementsForImprovement = _postPlansEstimatedCostController.text;
model.admissionRequestData.isDietType = _selectedDietType != null ? true : false;
model.admissionRequestData.dietType = _selectedDietType != null ? _selectedDietType['id'] : 0;
model.admissionRequestData.dietRemarks = _dietTypeRemarksController.text;
Navigator.of(context).pushNamed(
PATIENT_ADMISSION_REQUEST_2,
arguments: {'patient': patient, 'admission-data' : model.admissionRequestData});
} else {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context).pleaseFill);
}
},
),
),
],
@ -205,4 +421,25 @@ class _AdmissionRequestThirdScreenState extends State<AdmissionRequestThirdScree
updateDate(picked);
}
}
void openListDialogField(String attributeName, String attributeValueId,
List<dynamic> list, Function(dynamic selectedValue) okFunction) {
ListSelectDialog dialog = ListSelectDialog(
list: list,
attributeName: attributeName,
attributeValueId: attributeValueId,
usingSearch: true,
okText: TranslationBase.of(context).ok,
okFunction: (selectedValue) {
okFunction(selectedValue);
},
);
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
return dialog;
},
);
}
}

@ -2,6 +2,7 @@ import 'package:doctor_app_flutter/config/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/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-admission-request-viewmodel.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
@ -15,6 +16,7 @@ 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_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart';
@ -32,20 +34,29 @@ class _AdmissionRequestSecondScreenState
extends State<AdmissionRequestSecondScreen> {
final _expectedDaysController = TextEditingController();
final _treatmentLineController = TextEditingController();
final _preOperativeOrdersController = TextEditingController();
// final _preOperativeOrdersController = TextEditingController();
DateTime _expectedAdmissionDate;
bool _emergencyAdmission = false;
// bool _emergencyAdmission = false;
bool _isSickLeaveRequired = false;
bool _patientPregnant = false;
bool _preAnesthesiaReferred = false;
// bool _preAnesthesiaReferred = false;
dynamic _selectedWard;
dynamic _selectedAdmissionType;
dynamic _selectedDiagnosis;
dynamic _selectedAllergies;
dynamic _selectedIcd;
dynamic _selectedDiagnosisType;
// dynamic _selectedAllergies;
@override
Widget build(BuildContext context) {
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient'];
AdmissionRequest admissionRequest = routeArgs['admission-data'];
final screenSize = MediaQuery.of(context).size;
ProjectViewModel projectViewModel = Provider.of(context);
@ -134,6 +145,7 @@ class _AdmissionRequestSecondScreenState
SizedBox(
height: 10,
),
/*
CheckboxListTile(
title: AppText(
TranslationBase.of(context)
@ -151,6 +163,24 @@ class _AdmissionRequestSecondScreenState
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
*/
CheckboxListTile(
title: AppText(
TranslationBase.of(context)
.isSickLeaveRequired,
fontWeight: FontWeight.normal,
fontSize: SizeConfig.textMultiplier * 2.1,
),
value: _isSickLeaveRequired,
onChanged: (newValue) {
setState(() {
_isSickLeaveRequired = newValue;
});
},
controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
CheckboxListTile(
title: AppText(
TranslationBase.of(context).patientPregnant,
@ -199,7 +229,11 @@ class _AdmissionRequestSecondScreenState
});
}
: () async {
await model.getWards();
GifLoaderDialogUtils.showMyDialog(
context);
await model.getWards().then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.wardList.length > 0) {
openListDialogField('description',
@ -230,7 +264,7 @@ class _AdmissionRequestSecondScreenState
),
),
),
CheckboxListTile(
/* CheckboxListTile(
title: AppText(
TranslationBase.of(context)
.preAnesthesiaReferred,
@ -246,6 +280,9 @@ class _AdmissionRequestSecondScreenState
controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),*/
SizedBox(
height: 10,
),
Container(
height: screenSize.height * 0.070,
@ -263,9 +300,15 @@ class _AdmissionRequestSecondScreenState
});
}
: () async {
await model.getMasterLookup(
GifLoaderDialogUtils.showMyDialog(
context);
await model
.getMasterLookup(
MasterKeysService
.AdmissionRequestType);
.AdmissionRequestType)
.then((_) =>
GifLoaderDialogUtils
.hideDialog(context));
if (model.state == ViewState.Idle &&
model.admissionTypeList.length >
0) {
@ -303,6 +346,17 @@ class _AdmissionRequestSecondScreenState
SizedBox(
height: 10,
),
SizedBox(
height: 16,
),
AppText(
TranslationBase.of(context).diagnosisDetail,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 2.5,
),
SizedBox(
height: 10,
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
@ -319,7 +373,11 @@ class _AdmissionRequestSecondScreenState
});
}
: () async {
await model.getDiagnosis();
GifLoaderDialogUtils.showMyDialog(
context);
await model.getDiagnosis().then(
(_) => GifLoaderDialogUtils
.hideDialog(context));
if (model.state == ViewState.Idle &&
model.diagnosisTypesList
.length >
@ -360,6 +418,133 @@ class _AdmissionRequestSecondScreenState
height: 10,
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.icdCodes != null &&
model.icdCodes.length > 0
? () {
openListDialogField('description',
'code', model.icdCodes,
(selectedValue) {
setState(() {
_selectedIcd = selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils.showMyDialog(
context);
await model
.getICDCodes(patient.patientMRN)
.then((_) =>
GifLoaderDialogUtils
.hideDialog(context));
if (model.state == ViewState.Idle &&
model.icdCodes.length > 0) {
openListDialogField('description',
'code', model.icdCodes,
(selectedValue) {
setState(() {
_selectedIcd = selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
},
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).icd,
_selectedIcd != null
? _selectedIcd['description']
: null,
true),
enabled: false,
),
),
),
SizedBox(
height: 10,
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.listOfDiagnosisSelectionTypes !=
null &&
model.listOfDiagnosisSelectionTypes
.length >
0
? () {
openListDialogField(
'description',
'code',
model
.listOfDiagnosisSelectionTypes,
(selectedValue) {
setState(() {
_selectedDiagnosisType =
selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils.showMyDialog(
context);
await model
.getMasterLookup(
MasterKeysService
.DiagnosisSelectionType)
.then((_) =>
GifLoaderDialogUtils
.hideDialog(context));
if (model.state == ViewState.Idle &&
model.listOfDiagnosisSelectionTypes
.length >
0) {
openListDialogField(
'description',
'code',
model
.listOfDiagnosisSelectionTypes,
(selectedValue) {
setState(() {
_selectedDiagnosisType =
selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
},
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context)
.diagnoseType,
_selectedDiagnosisType != null
? _selectedDiagnosisType[
'description']
: null,
true),
enabled: false,
),
),
),
SizedBox(
height: 10,
),
/*Container(
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
@ -425,7 +610,7 @@ class _AdmissionRequestSecondScreenState
enabled: false,
),
),
),
),*/
],
),
),
@ -436,12 +621,48 @@ class _AdmissionRequestSecondScreenState
Container(
margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: AppButton(
title: TranslationBase.of(context).next,
title: TranslationBase.of(context).save,
color: HexColor("#B8382B"),
onPressed: () {
Navigator.of(context).pushNamed(
PATIENT_ADMISSION_REQUEST_3,
arguments: {'patient': patient});
onPressed: () async {
if (_expectedDaysController.text != "" &&
_expectedAdmissionDate != null &&
_treatmentLineController.text != "" &&
_selectedWard != null &&
_selectedAdmissionType != null &&
_selectedDiagnosis != null &&
_selectedIcd != null &&
_selectedDiagnosisType != null) {
model.admissionRequestData = admissionRequest;
model.admissionRequestData.expectedDays = int.parse(_expectedDaysController.text);
model.admissionRequestData.admissionDate = _expectedAdmissionDate.toIso8601String();
model.admissionRequestData.isSickLeaveRequired = _isSickLeaveRequired;
model.admissionRequestData.isPregnant = _patientPregnant;
model.admissionRequestData.mainLineOfTreatment = _treatmentLineController.text;
model.admissionRequestData.wardID = 0;
model.admissionRequestData.admissionType = _selectedAdmissionType['id'];
dynamic admissionRequestDiagnoses = [
{
'diagnosisDescription' : _selectedDiagnosis['nameEn'],
'diagnosisType' : _selectedDiagnosis['id'],
'icdCode' : _selectedIcd['code'],
'icdCodeDescription' : _selectedIcd['description'],
'type' : _selectedDiagnosisType['code'],
'remarks' : "",
'isActive' : true,
}
];
model.admissionRequestData.admissionRequestDiagnoses = admissionRequestDiagnoses;
model.admissionRequestData.admissionRequestProcedures = [];
await model.makeAdmissionRequest();
if(model.state == ViewState.ErrorLocal){
DrAppToastMsg.showErrorToast(
model.error);
}
} else {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context).pleaseFill);
}
},
),
),
@ -486,38 +707,4 @@ class _AdmissionRequestSecondScreenState
},
);
}
/*
onTap: model.wardList != null &&
model.wardList.length > 0
? () {
openListDialogField('description',
'description', model.wardList,
(selectedValue) {
setState(() {
_selectedWard = selectedValue;
});
});
}
: () async {
await model.getWards();
if (model.state == ViewState.Idle &&
model.wardList.length > 0) {
openListDialogField('description',
'description', model.wardList,
(selectedValue) {
setState(() {
_selectedWard = selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
},
*/
}

@ -73,6 +73,8 @@ class MyReferralPatientScreen extends StatelessWidget {
remark:
model.pendingReferral[index].remarksFromSource,
referredOn: model.pendingReferral[index].referredOn,
answerFromTarget:
model.pendingReferral[index].answerFromTarget,
infoIcon: InkWell(
onTap: () {
Navigator.of(context)

@ -103,6 +103,8 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
clinicDescription: null,
remark: model.patientReferral[0].remarksFromSource,
referredOn: model.patientReferral[0].referredOn,
answerFromTarget:
model.patientReferral[0].answerFromTarget,
),
],
),
@ -271,7 +273,8 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
attributeName: 'ClinicDescription',
attributeValueId: 'ClinicID',
usingSearch: true,
hintSearchText: TranslationBase.of(context).clinicSearch,
hintSearchText:
TranslationBase.of(context).clinicSearch,
okText: TranslationBase.of(context).ok,
okFunction: (selectedValue) {
setState(() {
@ -321,7 +324,8 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
attributeName: 'DoctorName',
attributeValueId: 'DoctorID',
usingSearch: true,
hintSearchText: TranslationBase.of(context).doctorSearch,
hintSearchText:
TranslationBase.of(context).doctorSearch,
okText: TranslationBase.of(context).ok,
okFunction: (selectedValue) {
setState(() {
@ -380,9 +384,9 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
TranslationBase.of(context).remarks, null, false),
enabled: true,
controller: _remarksController,
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(ONLY_LETTERS))
],
// inputFormatters: [
// FilteringTextInputFormatter.allow(RegExp(ONLY_LETTERS))
// ],
keyboardType: TextInputType.text,
minLines: 4,
maxLines: 6,
@ -406,53 +410,6 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
setState(() {
appointmentDate = picked;
});
/* model
.getPatientArrivalList(DateUtils.convertStringToDateFormat(
appointmentDate.toString(), "yyyy-MM-dd"))
.then((_) {
if (model.state == ViewState.ErrorLocal) {
helpers.showErrorToast(model.error);
return;
}
if (model.patientArrivalList != null &&
model.patientArrivalList.length > 0) {
List<dynamic> appointments = model.getAppointmentsByPatientName(
"${patient.firstName} ${patient.middleName} ${patient.lastName}");
if (appointments.length > 0) {
ListSelectDialog dialog = ListSelectDialog(
list: appointments,
attributeName: 'appointmentNo',
attributeValueId: 'appointmentNo',
okText: TranslationBase.of(context).ok,
okFunction: (selectedValue) {
setState(() {
_selectedPatientArrivalEntity =
PatientArrivalEntity.fromJson(selectedValue);
});
},
);
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
return dialog;
},
);
} else {
setState(() {
_selectedPatientArrivalEntity = null;
});
DrAppToastMsg.showErrorToast(
TranslationBase.of(context).noAppointmentsErrorMsg);
}
} else {
setState(() {
_selectedPatientArrivalEntity = null;
});
DrAppToastMsg.showErrorToast(
TranslationBase.of(context).noAppointmentsErrorMsg);
}
});*/
}
}
}

@ -726,6 +726,8 @@ class TranslationBase {
String get emergencyAdmission =>
localizedValues['emergencyAdmission'][locale.languageCode];
String get isSickLeaveRequired =>
localizedValues['isSickLeaveRequired'][locale.languageCode];
String get patientPregnant =>
localizedValues['patientPregnant'][locale.languageCode];
@ -763,6 +765,8 @@ class TranslationBase {
String get postPlansEstimatedCost =>
localizedValues['postPlansEstimatedCost'][locale.languageCode];
String get postPlans =>
localizedValues['postPlans'][locale.languageCode];
String get ucaf => localizedValues['ucaf'][locale.languageCode];
@ -866,6 +870,8 @@ class TranslationBase {
String get quantity => localizedValues['quantity'][locale.languageCode];
String get durDays => localizedValues['durDays'][locale.languageCode];
String get codeNo => localizedValues['codeNo'][locale.languageCode];
String get covered => localizedValues['covered'][locale.languageCode];
@ -1071,6 +1077,9 @@ String get ICDName =>
String get referralStatusNotSeen => localizedValues['referralStatusNotSeen'][locale.languageCode];
String get clinicSearch => localizedValues['clinicSearch'][locale.languageCode];
String get doctorSearch => localizedValues['doctorSearch'][locale.languageCode];
String get referralResponse => localizedValues['referralResponse'][locale.languageCode];
String get estimatedCost => localizedValues['estimatedCost'][locale.languageCode];
String get diagnosisDetail => localizedValues['diagnosisDetail'][locale.languageCode];
String get patientName =>
localizedValues['patient-name'][locale.languageCode];

@ -12,6 +12,7 @@ class PatientReferralItemWidget extends StatelessWidget {
final String clinicDescription;
final String remark;
final String referredOn;
final String answerFromTarget;
final Widget infoIcon;
PatientReferralItemWidget(
@ -24,6 +25,7 @@ class PatientReferralItemWidget extends StatelessWidget {
this.clinicDescription,
this.remark,
this.referredOn,
this.answerFromTarget,
this.infoIcon,
});
@ -207,6 +209,27 @@ class PatientReferralItemWidget extends StatelessWidget {
),
],
),
if (answerFromTarget != null)
SizedBox(
height: 8,
),
if (answerFromTarget != null)
Row(
children: [
AppText(
TranslationBase.of(context).referralResponse,
color: Colors.grey,
fontWeight: FontWeight.bold,
fontSize: 12,
),
AppText(
answerFromTarget != "" ? answerFromTarget : '-',
color: Colors.black,
fontWeight: FontWeight.bold,
fontSize: 12,
),
],
),
SizedBox(
height: 16,
),

Loading…
Cancel
Save