Merge branch 'sultan' into 'development'

Sultan

See merge request Cloud_Solution/doctor_app_flutter!197
merge-requests/195/merge
Elham 5 years ago
commit 3ca4dceb77

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -65,8 +65,8 @@ class BaseAppClient {
body['IsLoginForDoctorApp'] = IS_LOGIN_FOR_DOCTOR_APP; body['IsLoginForDoctorApp'] = IS_LOGIN_FOR_DOCTOR_APP;
body['PatientOutSA'] = 0; // PATIENT_OUT_SA; body['PatientOutSA'] = 0; // PATIENT_OUT_SA;
body['VidaAuthTokenID'] = await sharedPref.getString(VIDA_AUTH_TOKEN_ID); body['VidaAuthTokenID'] = await sharedPref.getString(VIDA_AUTH_TOKEN_ID);
body['VidaRefreshTokenID'] = await sharedPref.getString(VIDA_REFRESH_TOKEN_ID); body['VidaRefreshTokenID'] =
await sharedPref.getString(VIDA_REFRESH_TOKEN_ID);
print("URL : $url"); print("URL : $url");
print("Body : ${json.encode(body)}"); print("Body : ${json.encode(body)}");

@ -24,8 +24,7 @@ const PATIENT_GET_LIST_REFERAL_URL =
"Services/Lists.svc/REST/GetList_STPReferralFrequency"; "Services/Lists.svc/REST/GetList_STPReferralFrequency";
const PATIENT_GET_CLINIC_BY_PROJECT_URL = const PATIENT_GET_CLINIC_BY_PROJECT_URL =
"Services/DoctorApplication.svc/REST/GetClinicsByProjectID"; "Services/DoctorApplication.svc/REST/GetClinicsByProjectID";
const PROJECT_GET_INFO = const PROJECT_GET_INFO = "Services/DoctorApplication.svc/REST/GetProjectInfo";
"Services/DoctorApplication.svc/REST/GetProjectInfo";
const GET_PROJECTS = 'Services/Lists.svc/REST/GetProjectForDoctorAPP'; const GET_PROJECTS = 'Services/Lists.svc/REST/GetProjectForDoctorAPP';
const GET_PATIENT_VITAL_SIGN = const GET_PATIENT_VITAL_SIGN =
@ -90,20 +89,28 @@ const MEMBER_CHECK_ACTIVATION_CODE_NEW =
const CHECK_ACTIVATION_CODE_FOR_DOCTOR_APP = const CHECK_ACTIVATION_CODE_FOR_DOCTOR_APP =
'Services/DoctorApplication.svc/REST/CheckActivationCodeForDoctorApp'; 'Services/DoctorApplication.svc/REST/CheckActivationCodeForDoctorApp';
const GET_DOC_PROFILES = 'Services/Doctors.svc/REST/GetDocProfiles'; const GET_DOC_PROFILES = 'Services/Doctors.svc/REST/GetDocProfiles';
const TRANSFERT_TO_ADMIN = 'LiveCareApi/DoctorApp/TransferToAdmin'; const TRANSFERT_TO_ADMIN = 'LiveCareApi/DoctorApp/TransferToAdmin';
const END_CALL = 'LiveCareApi/DoctorApp/EndCall'; const END_CALL = 'LiveCareApi/DoctorApp/EndCall';
const END_CALL_WITH_CHARGE = 'LiveCareApi/DoctorApp/CompleteCallWithCharge'; const END_CALL_WITH_CHARGE = 'LiveCareApi/DoctorApp/CompleteCallWithCharge';
const GET_DASHBOARD =
'Services/DoctorApplication.svc/REST/GetDoctorDashboardKPI';
const GET_SICKLEAVE_STATISTIC =
'Services/DoctorApplication.svc/REST/PreSickLeaveStatistics';
const ARRIVED_PATIENT_URL =
'Services/DoctorApplication.svc/REST/PatientArrivalList';
const ADD_SICK_LEAVE = 'Services/DoctorApplication.svc/REST/PostSickLeave';
const GET_SICK_LEAVE = 'Services/DoctorApplication.svc/REST/GetAllSickLeaves';
const EXTEND_SICK_LEAVE = 'Services/DoctorApplication.svc/REST/ExtendSickLeave';
const GET_PATIENT_ARRIVAL_LIST = const GET_PATIENT_ARRIVAL_LIST =
'Services/DoctorApplication.svc/REST/PatientArrivalList'; 'Services/DoctorApplication.svc/REST/PatientArrivalList';
// SOAP // SOAP
const GET_ALLERGIES = 'Services/DoctorApplication.svc/REST/GetAllergies'; const GET_ALLERGIES = 'Services/DoctorApplication.svc/REST/GetAllergies';
const GET_MASTER_LOOKUP_LIST = 'Services/DoctorApplication.svc/REST/GetMasterLookUpList'; const GET_MASTER_LOOKUP_LIST =
'Services/DoctorApplication.svc/REST/GetMasterLookUpList';
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 = 'Services/DoctorApplication.svc/REST/PostChiefcomplaint'; const POST_CHIEF_COMPLAINT = 'Services/DoctorApplication.svc/REST/PostChiefcomplaint';
@ -118,7 +125,8 @@ var SERVICES_PATIANT = [
"GtMyReferredPatient", "GtMyReferredPatient",
"GtMyDischargeReferralPatient", "GtMyDischargeReferralPatient",
"GtMyTomorrowPatient", "GtMyTomorrowPatient",
"GtMyReferralPatient" "GtMyReferralPatient",
"PatientArrivalList"
]; ];
var SERVICES_PATIANT2 = [ var SERVICES_PATIANT2 = [
"List_MyOutPatient", "List_MyOutPatient",
@ -136,7 +144,8 @@ var SERVICES_PATIANT_HEADER = [
"Referred", "Referred",
"Referral Discharge", "Referral Discharge",
"Tomorrow", "Tomorrow",
"Referral" "Referral",
"Arrived"
]; ];
var SERVICES_PATIANT_HEADER_AR = [ var SERVICES_PATIANT_HEADER_AR = [
"المريض الخارجي", "المريض الخارجي",
@ -145,7 +154,8 @@ var SERVICES_PATIANT_HEADER_AR = [
"المريض المحول الي", "المريض المحول الي",
"المريض المحال المعافى", "المريض المحال المعافى",
"مريض الغد", "مريض الغد",
"المريض المحول مني" "المريض المحول مني",
"وصل المريض"
]; ];
//****************** //******************
@ -167,5 +177,5 @@ const TIMER_MIN = 10;
class AppGlobal { class AppGlobal {
static var CONTEX; static var CONTEX;
static Color appPrimaryColor =Color(0xFFB9382C); static Color appPrimaryColor = Color(0xFFB9382C);
} }

@ -202,7 +202,10 @@ const Map<String, Map<String, String>> localizedValues = {
'routine': {'en': 'Routine', 'ar': 'روتيني'}, 'routine': {'en': 'Routine', 'ar': 'روتيني'},
'send': {'en': 'Send', 'ar': 'ارسال'}, 'send': {'en': 'Send', 'ar': 'ارسال'},
'referralFrequency': {'en': 'Referral Frequency:', 'ar': 'تواتر الحالة:'}, 'referralFrequency': {'en': 'Referral Frequency:', 'ar': 'تواتر الحالة:'},
'selectReferralFrequency': {'en': 'Select Referral Frequency:', 'ar': 'اختار تواتر الحالة:'}, 'selectReferralFrequency': {
'en': 'Select Referral Frequency:',
'ar': 'اختار تواتر الحالة:'
},
'clinicalDetailsAndRemarks': { 'clinicalDetailsAndRemarks': {
'en': 'Clinical Details and Remarks', 'en': 'Clinical Details and Remarks',
'ar': 'التفاصيل السرسرية والملاحظات' 'ar': 'التفاصيل السرسرية والملاحظات'
@ -258,17 +261,21 @@ const Map<String, Map<String, String>> localizedValues = {
'ar': 'لا يوجد اي نتائج' 'ar': 'لا يوجد اي نتائج'
}, },
'typeMedicineName': {'en': 'Type Medicine Name', 'ar': 'اكتب اسم الدواء'}, 'typeMedicineName': {'en': 'Type Medicine Name', 'ar': 'اكتب اسم الدواء'},
'moreThan3Letter': { 'moreThan3Letter': {
'en': 'Medicine Name Should Be More Than 3 letter', 'en': 'Medicine Name Should Be More Than 3 letter',
'ar': 'يجب أن يكون اسم الدواء أكثر من 3 أحرف' 'ar': 'يجب أن يكون اسم الدواء أكثر من 3 أحرف'
}, },
'gender2': {'en': 'Gender: ', 'ar': 'الجنس: '}, 'gender2': {'en': 'Gender: ', 'ar': 'الجنس: '},
'age2': {'en': 'Age: ', 'ar': 'العمر: '}, 'age2': {'en': 'Age: ', 'ar': 'العمر: '},
'replySuccessfully': { "sick-leaves": {"en": "Patient Sick Leave", "ar": "الاجازات المرضية"},
'en': 'Reply Successfully', "patient-sick": {"en": "Patient Sick", "ar": "المرضية"},
'ar': 'تم الرد بنجاح' "leave": {"en": "Leave", "ar": "غادر"},
}, "submit": {"en": "Submit", "ar": "ارسال"},
"doc-name": {"en": "Doctor Name", "ar": "اسم الطبيب"},
"clinicname": {"en": "Clinic Name", "ar": "اسم العيادة"},
"sick-leave-date": {"en": "Sick leave date ", "ar": "تاريخ الاجازة."},
"sick-leave-days": {"en": "Sick leave days", "ar": "عدد ايام الاجازة."},
'replySuccessfully': {'en': 'Reply Successfully', 'ar': 'تم الرد بنجاح'},
'admissionDetail': {'en': 'ADMISSION DETAIL: ', 'ar': 'تفاصيل القبول: '}, 'admissionDetail': {'en': 'ADMISSION DETAIL: ', 'ar': 'تفاصيل القبول: '},
'dateTime': {'en': 'DATE / TIME:', 'ar': 'التاريخ / الوقت:'}, 'dateTime': {'en': 'DATE / TIME:', 'ar': 'التاريخ / الوقت:'},
'admissionNo': {'en': 'ADMISSION #: ', 'ar': 'قبول #:'}, 'admissionNo': {'en': 'ADMISSION #: ', 'ar': 'قبول #:'},
@ -276,24 +283,50 @@ const Map<String, Map<String, String>> localizedValues = {
'area': {'en': 'AREA:', 'ar': 'المنطقة'}, 'area': {'en': 'AREA:', 'ar': 'المنطقة'},
'room': {'en': 'ROOM:', 'ar': 'الغرفة'}, 'room': {'en': 'ROOM:', 'ar': 'الغرفة'},
'bed': {'en': 'BED:', 'ar': 'السرير'}, 'bed': {'en': 'BED:', 'ar': 'السرير'},
'next': {'en': 'Next', 'ar': 'التالي'}, "prevoius-sickleave-issed": {
'healthRecordInformation': {'en': 'HEALTH RECORD INFORMATION', 'ar': 'معلومات السجل الصحي'}, "en": "Total previous sick leave issued by the doctor",
"ar": "مجموع الإجازات المرضية السابقة التي أصدرها الطبيب"
},
'clinicSelect': {'en': "Select Clinic", 'ar': 'اختار عيادة'}, 'clinicSelect': {'en': "Select Clinic", 'ar': 'اختار عيادة'},
'doctorSelect': {'en': "Select Doctor", 'ar': 'اختار طبيب'}, 'doctorSelect': {'en': "Select Doctor", 'ar': 'اختار طبيب'},
"empty-message": { 'no-sickleve-applied': {
"en": "Please enter Value", 'en': "No sick leave applied",
"ar": "يرجى ادخال القيمه" 'ar': 'لم تطبق إجازة مرضية'
},"chiefComplaintLength": { },
'applynow': {'en': "Apply Now", 'ar': 'قدم الآن'},
'add-sickleave': {'en': "ADD SICK LEAVE", 'ar': 'أضف إجازة مرضية'},
'add': {'en': "Add", 'ar': 'أضف'},
'approved': {'en': "Approved", 'ar': 'وافق'},
'extended': {'en': "Extended", 'ar': 'وسعوا'},
'pending': {'en': "Pending", 'ar': 'قيد الانتظار'},
'leave-start-date': {'en': "Leave start date", 'ar': 'تاريخ بدء المغادرة'},
'days-sick-leave': {'en': "DAYS OF SICK LEAVE", 'ar': 'أيام الإجازة المرضية'},
'extend': {'en': "Extend", 'ar': 'تمديد'},
'extend-sickleave': {
'en': "EXTEND SICK LEAVE",
'ar': 'قم بتمديد الإجازة المرضية'
},
"empty-message": {"en": "Please enter Value", "ar": "يرجى ادخال القيمه"},
"chiefComplaintLength": {
"en": "Chief Complaint length should be greater than 25", "en": "Chief Complaint length should be greater than 25",
"ar": "يجب أن يكون طول شكوى الرئيس أكبر من 25" "ar": "يجب أن يكون طول شكوى الرئيس أكبر من 25"
}, },
'patient-target': {'en': 'Target Patient', 'ar': 'الهدف المريض'},
'no-priscription-listed': {
'en': 'No Prescription Listed',
'ar': 'لا وصفة طبية مدرجة'
},
'next': {'en': 'Next', 'ar': 'التالي'},
'healthRecordInformation': {
'en': 'HEALTH RECORD INFORMATION',
'ar': 'معلومات السجل الصحي'
},
'referTo': {'en': "Refer To", 'ar': 'محال إلى'}, 'referTo': {'en': "Refer To", 'ar': 'محال إلى'},
'referredFrom': {'en': "Referred From", 'ar': 'محال من'}, 'referredFrom': {'en': "Referred From", 'ar': 'محال من'},
'branch': {'en': "Branch", 'ar': 'الفرع'}, 'branch': {'en': "Branch", 'ar': 'الفرع'},
'chooseAppointment': {'en': "Choose Appointment", 'ar': 'اختر موعد'}, 'chooseAppointment': {'en': "Choose Appointment", 'ar': 'اختر موعد'},
'appointmentNo': {'en': "Appointment #:", 'ar': '# الموعد:'}, 'appointmentNo': {'en': "Appointment #:", 'ar': '# الموعد:'},
'refer': {'en': "REFER", 'ar': 'إحالة'}, 'refer': {'en': "REFER", 'ar': 'إحالة'},
'approved': {'en': "Approved", 'ar': 'موافق عليه'},
'rejected': {'en': "Rejected", 'ar': 'مرفوض'}, 'rejected': {'en': "Rejected", 'ar': 'مرفوض'},
'sameBranch': {'en': "Same Branch", 'ar': 'نفس الفرع'}, 'sameBranch': {'en': "Same Branch", 'ar': 'نفس الفرع'},
'otherBranch': {'en': "Other Branch", 'ar': 'فرع آخر'}, 'otherBranch': {'en': "Other Branch", 'ar': 'فرع آخر'},
@ -302,5 +335,8 @@ const Map<String, Map<String, String>> localizedValues = {
'summaryReport': {'en': "Summary Report", 'ar': 'تقرير موجز'}, 'summaryReport': {'en': "Summary Report", 'ar': 'تقرير موجز'},
'accept': {'en': "ACCEPT", 'ar': 'قبول'}, 'accept': {'en': "ACCEPT", 'ar': 'قبول'},
'reject': {'en': "REJECT", 'ar': 'رفض'}, 'reject': {'en': "REJECT", 'ar': 'رفض'},
'noAppointmentsErrorMsg': {'en': "There is no appointments for at this date", 'ar': 'لا توجد مواعيد في هذا التاريخ'}, 'noAppointmentsErrorMsg': {
'en': "There is no appointments for at this date",
'ar': 'لا توجد مواعيد في هذا التاريخ'
},
}; };

@ -9,3 +9,4 @@ final APP_Language = 'language';
final DOCTOR_PROFILE = 'doctorProfile'; final DOCTOR_PROFILE = 'doctorProfile';
final LIVE_CARE_PATIENT = 'livecare-patient-profile'; final LIVE_CARE_PATIENT = 'livecare-patient-profile';
final LOGGED_IN_USER = 'loggedUser'; final LOGGED_IN_USER = 'loggedUser';
final DASHBOARD_DATA = 'dashboard-data';

@ -5,7 +5,6 @@ import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart';
import 'base_service.dart'; import 'base_service.dart';
class LookupService extends BaseService { class LookupService extends BaseService {
List<MasterKeyModel> listOfAllergies = []; List<MasterKeyModel> listOfAllergies = [];
List<MasterKeyModel> get allergySeverityList => _allergySeverityList; List<MasterKeyModel> get allergySeverityList => _allergySeverityList;
@ -26,11 +25,12 @@ class LookupService extends BaseService {
List<MasterKeyModel> get historySurgicalList => _historySurgicalList; List<MasterKeyModel> get historySurgicalList => _historySurgicalList;
List<MasterKeyModel> _historySurgicalList = []; List<MasterKeyModel> _historySurgicalList = [];
List<MasterKeyModel> listOfPhysiotherapyGoals = [];
List<MasterKeyModel> get physicalExaminationList => _physicalExaminationList; List<MasterKeyModel> get physicalExaminationList => _physicalExaminationList;
List<MasterKeyModel> _physicalExaminationList = []; List<MasterKeyModel> _physicalExaminationList = [];
List<MasterKeyModel> listOfPhysiotherapyGoals = []; // List<MasterKeyModel> listOfPhysiotherapyGoals = [];
Future getMasterLookup(MasterKeysService masterKeys) async { Future getMasterLookup(MasterKeysService masterKeys) async {
hasError = false; hasError = false;
@ -52,63 +52,55 @@ class LookupService extends BaseService {
case MasterKeysService.Allergies: case MasterKeysService.Allergies:
listOfAllergies.clear(); listOfAllergies.clear();
entryList.forEach((v) { entryList.forEach((v) {
listOfAllergies listOfAllergies.add(MasterKeyModel.fromJson(v));
.add(MasterKeyModel.fromJson(v));
}); });
break; break;
case MasterKeysService.HistoryFamily: case MasterKeysService.HistoryFamily:
_historyFamilyList.clear(); _historyFamilyList.clear();
entryList.forEach((v) { entryList.forEach((v) {
_historyFamilyList _historyFamilyList.add(MasterKeyModel.fromJson(v));
.add(MasterKeyModel.fromJson(v));
}); });
break; break;
case MasterKeysService.HistoryMedical: case MasterKeysService.HistoryMedical:
_historyMedicalList.clear(); _historyMedicalList.clear();
entryList.forEach((v) { entryList.forEach((v) {
_historyMedicalList _historyMedicalList.add(MasterKeyModel.fromJson(v));
.add(MasterKeyModel.fromJson(v));
}); });
break; break;
case MasterKeysService.HistorySocial: case MasterKeysService.HistorySocial:
historySocialList.clear(); historySocialList.clear();
entryList.forEach((v) { entryList.forEach((v) {
historySocialList historySocialList.add(MasterKeyModel.fromJson(v));
.add(MasterKeyModel.fromJson(v));
}); });
break; break;
case MasterKeysService.HistorySports: case MasterKeysService.HistorySports:
_historySportList.clear(); _historySportList.clear();
entryList.forEach((v) { entryList.forEach((v) {
_historySportList _historySportList.add(MasterKeyModel.fromJson(v));
.add(MasterKeyModel.fromJson(v)); });
}); break; break;
case MasterKeysService.HistorySurgical: case MasterKeysService.HistorySurgical:
_historySurgicalList.clear(); _historySurgicalList.clear();
entryList.forEach((v) { entryList.forEach((v) {
_historySurgicalList _historySurgicalList.add(MasterKeyModel.fromJson(v));
.add(MasterKeyModel.fromJson(v));
}); });
break; break;
case MasterKeysService.PhysicalExamination: case MasterKeysService.PhysicalExamination:
_physicalExaminationList.clear(); _physicalExaminationList.clear();
entryList.forEach((v) { entryList.forEach((v) {
_physicalExaminationList _physicalExaminationList.add(MasterKeyModel.fromJson(v));
.add(MasterKeyModel.fromJson(v));
}); });
break; break;
case MasterKeysService.AllergySeverity: case MasterKeysService.AllergySeverity:
_allergySeverityList.clear(); _allergySeverityList.clear();
entryList.forEach((v) { entryList.forEach((v) {
_allergySeverityList _allergySeverityList.add(MasterKeyModel.fromJson(v));
.add(MasterKeyModel.fromJson(v));
}); });
break; break;
case MasterKeysService.physiotherapyGoals: case MasterKeysService.physiotherapyGoals:
listOfPhysiotherapyGoals.clear(); listOfPhysiotherapyGoals.clear();
entryList.forEach((v) { entryList.forEach((v) {
listOfPhysiotherapyGoals listOfPhysiotherapyGoals.add(MasterKeyModel.fromJson(v));
.add(MasterKeyModel.fromJson(v));
}); });
break; break;
} }

@ -0,0 +1,31 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
import 'package:doctor_app_flutter/models/dashboard/dashboard_model.dart';
class DashboardService extends BaseService {
List<DashboardModel> _dashboardItemsList = [];
List<DashboardModel> get dashboardItemsList => _dashboardItemsList;
// DashboardModel _dashboard = DashboardModel();
Future getDashboard() async {
hasError = false;
await baseAppClient.post(
GET_DASHBOARD,
onSuccess: (dynamic response, int statusCode) {
_dashboardItemsList.clear();
response['listDoctorDashboarKPI'].forEach((v) {
_dashboardItemsList.add(DashboardModel.fromJson(v));
});
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: {
// "VidaAuthTokenID":
// "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyODA0IiwianRpIjoiZDYxZmM5MTQtZWFhYy00YjQ4LTgyMmEtMmE3OTNlZDMzZGYwIiwiZW1haWwiOiJNb2hhbWVkLlJlc3dhbkBjbG91ZHNvbHV0aW9uLXNhLmNvbSIsImlkIjoiMjgwNCIsIk5hbWUiOiJNVUhBTU1BRCBBWkFNIiwiRW1wbG95ZWVJZCI6IjE0ODUiLCJGYWNpbGl0eUdyb3VwSWQiOiIwMTAyNjYiLCJGYWNpbGl0eUlkIjoiMTUiLCJQaGFyYW1jeUZhY2lsaXR5SWQiOiI1NSIsIklTX1BIQVJNQUNZX0NPTk5FQ1RFRCI6IlRydWUiLCJEb2N0b3JJZCI6IjE0ODUiLCJTRVNTSU9OSUQiOiIyMTU3NTgwOCIsIkNsaW5pY0lkIjoiMyIsInJvbGUiOlsiU0VDVVJJVFkgQURNSU5JU1RSQVRPUlMiLCJTRVRVUCBBRE1JTklTVFJBVE9SUyIsIkNFTydTIiwiRVhFQ1VUSVZFIERJUkVDVE9SUyIsIk1BTkFHRVJTIiwiU1VQRVJWSVNPUlMiLCJDTElFTlQgU0VSVklDRVMgQ09PUkRJTkFUT1JTIiwiQ0xJRU5UIFNFUlZJQ0VTIFNVUEVSVklTT1JTIiwiQ0xJRU5UIFNFUlZJQ0VTIE1BTkdFUlMiLCJIRUFEIE5VUlNFUyIsIkRPQ1RPUlMiLCJDSElFRiBPRiBNRURJQ0FMIFNUQUZGUyIsIkJJTy1NRURJQ0FMIFRFQ0hOSUNJQU5TIiwiQklPLU1FRElDQUwgRU5HSU5FRVJTIiwiQklPLU1FRElDQUwgREVQQVJUTUVOVCBIRUFEUyIsIklUIEhFTFAgREVTSyIsIkFETUlOSVNUUkFUT1JTIiwiTEFCIEFETUlOSVNUUkFUT1IiLCJMQUIgVEVDSE5JQ0lBTiIsIkJVU0lORVNTIE9GRklDRSBTVEFGRiIsIkZJTkFOQ0UgQUNDT1VOVEFOVFMiLCJQSEFSTUFDWSBTVEFGRiIsIkFDQ09VTlRTIFNUQUZGIiwiTEFCIFJFQ0VQVElPTklTVCIsIkVSIE5VUlNFIiwiSU5QQVRJRU5UIEJJTExJTkcgU1VQRVJWSVNPUiIsIkxEUi1PUiBOVVJTRVMiLCJBRE1JU1NJT04gU1RBRkYiLCJIRUxQIERFU0sgQURNSU4iLCJBUFBST1ZBTCBTVEFGRiIsIklOUEFUSUVOVCBCSUxMSU5HIENPT1JESU5BVE9SIiwiQklMTElORyBTVEFGRiIsIkNPTlNFTlQgIiwiQ29uc2VudCAtIERlbnRhbCIsIldFQkVNUiJdLCJuYmYiOjE2MDgwMjg0NzQsImV4cCI6MTYwODg5MjQ3NCwiaWF0IjoxNjA4MDI4NDc0fQ.8OJcy6vUuPnNTi_qSjip8YCrFdaRLtJKbNKXcMtnQxk"
},
);
}
}

@ -63,6 +63,10 @@ class PatientService extends BaseService {
// TODO: replace var with model // TODO: replace var with model
var _doctorsList = []; var _doctorsList = [];
var _arrivedList = [];
get arrivedList => _arrivedList;
get doctorsList => _doctorsList; get doctorsList => _doctorsList;
// TODO: replace var with model // TODO: replace var with model
@ -309,7 +313,6 @@ class PatientService extends BaseService {
); );
} }
Future getClinicsList() async { Future getClinicsList() async {
hasError = false; hasError = false;
@ -327,7 +330,6 @@ class PatientService extends BaseService {
); );
} }
Future getReferralFrequancyList() async { Future getReferralFrequancyList() async {
hasError = false; hasError = false;
@ -362,9 +364,9 @@ class PatientService extends BaseService {
); );
} }
// TODO send the total model insted of each parameter // TODO send the total model insted of each parameter
Future referToDoctor({String selectedDoctorID, Future referToDoctor(
{String selectedDoctorID,
String selectedClinicID, String selectedClinicID,
int admissionNo, int admissionNo,
String extension, String extension,
@ -408,4 +410,21 @@ class PatientService extends BaseService {
body: _referToDoctorRequest.toJson(), body: _referToDoctorRequest.toJson(),
); );
} }
Future getArrivedList() async {
hasError = false;
await baseAppClient.post(
ARRIVED_PATIENT_URL,
onSuccess: (dynamic response, int statusCode) {
_arrivedList = [];
_arrivedList = response['"patientArrivalList": '];
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: _doctorsByClinicIdRequest.toJson(),
);
}
} }

@ -0,0 +1,93 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
import 'package:doctor_app_flutter/models/sickleave/add_sickleave_request.dart';
import 'package:doctor_app_flutter/models/sickleave/extend_sick_leave_request.dart';
import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.dart';
// import 'package:doctor_app_flutter/models/dashboard/dashboard_model.dart';
class SickLeaveService extends BaseService {
Map get sickLeavestatisitics => _statistics;
Map _statistics = {};
List<GetAllSickLeaveResponse> get getAllSickLeave => _getAllsickLeave;
List<GetAllSickLeaveResponse> _getAllsickLeave = [];
Future getStatistics(appoNo, patientMRN) async {
hasError = false;
await baseAppClient.post(
GET_SICKLEAVE_STATISTIC,
onSuccess: (dynamic response, int statusCode) {
print(response);
_statistics = {};
_statistics = response['SickLeaveStatistics'];
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: {"PatientMRN": patientMRN, "AppointmentNo": appoNo},
);
}
Future addSickLeave(AddSickLeaveRequest addSickLeaveRequest) async {
addSickLeaveRequest.appointmentNo = '2016054661';
addSickLeaveRequest.patientMRN = '3120746';
hasError = false;
await baseAppClient.post(
ADD_SICK_LEAVE,
onSuccess: (dynamic response, int statusCode) {
Future.value(response);
print(response);
// _statistics = {};
// _statistics = response['SickLeaveStatistics'];
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: addSickLeaveRequest.toJson(),
);
}
Future extendSickLeave(GetAllSickLeaveResponse request) async {
var extendSickLeaveRequest = ExtendSickLeaveRequest();
extendSickLeaveRequest.patientMRN =
request.patientMRN.toString(); //'3120746';
extendSickLeaveRequest.previousRequestNo = request.requestNo.toString();
extendSickLeaveRequest.noOfDays = request.noOfDays.toString();
extendSickLeaveRequest.remarks = request.remarks;
hasError = false;
await baseAppClient.post(
EXTEND_SICK_LEAVE,
onSuccess: (dynamic response, int statusCode) {
Future.value(response);
print(response);
// _statistics = {};
// _statistics = response['SickLeaveStatistics'];
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: extendSickLeaveRequest.toJson(),
);
}
Future getSickLeave() async {
hasError = false;
await baseAppClient.post(
GET_SICK_LEAVE,
onSuccess: (dynamic response, int statusCode) {
Future.value(response);
_getAllsickLeave.clear();
response['SickLeavesList']['entityList'].forEach((v) {
_getAllsickLeave.add(GetAllSickLeaveResponse.fromJson(v));
});
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: {'PatientMRN': 3120772},
);
}
}

@ -19,12 +19,11 @@ class AuthViewModel with ChangeNotifier {
bool isLoading = true; bool isLoading = true;
DoctorProfileModel doctorProfile; DoctorProfileModel doctorProfile;
BaseAppClient baseAppClient = BaseAppClient(); BaseAppClient baseAppClient = BaseAppClient();
setDoctorProfile(DoctorProfileModel profileModel){ setDoctorProfile(DoctorProfileModel profileModel) {
doctorProfile = profileModel; doctorProfile = profileModel;
notifyListeners(); notifyListeners();
} }
AuthViewModel() { AuthViewModel() {
getUserAuthentication(); getUserAuthentication();
} }
@ -195,7 +194,8 @@ class AuthViewModel with ChangeNotifier {
await baseAppClient.post(GET_DOC_PROFILES, await baseAppClient.post(GET_DOC_PROFILES,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
localRes = response; localRes = response;
doctorProfile = DoctorProfileModel.fromJson(response['DoctorProfileList'][0]); doctorProfile =
DoctorProfileModel.fromJson(response['DoctorProfileList'][0]);
selectedClinicName = selectedClinicName =
response['DoctorProfileList'][0]['ClinicDescription']; response['DoctorProfileList'][0]['ClinicDescription'];
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {

@ -0,0 +1,21 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/service/dasboard_service.dart';
import 'package:doctor_app_flutter/core/service/medicine_service.dart';
import '../../locator.dart';
import 'base_view_model.dart';
class DashboardViewModel extends BaseViewModel {
DashboardService _dashboardService = locator<DashboardService>();
get dashboardItemsList => _dashboardService.dashboardItemsList;
Future getDashboard() async {
setState(ViewState.Busy);
await _dashboardService.getDashboard();
if (_dashboardService.hasError) {
error = _dashboardService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}

@ -248,4 +248,14 @@ class PatientViewModel extends BaseViewModel {
} else } else
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future getArrivedList() async {
setState(ViewState.Busy);
await _patientService.getArrivedList();
if (_patientService.hasError) {
error = _patientService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
} }

@ -0,0 +1,54 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/service/sickleave_service.dart';
import 'package:doctor_app_flutter/core/service/medicine_service.dart';
import 'package:doctor_app_flutter/models/sickleave/add_sickleave_request.dart';
import 'package:doctor_app_flutter/models/sickleave/extend_sick_leave_request.dart';
import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.dart';
import '../../locator.dart';
import 'base_view_model.dart';
class SickLeaveViewModel extends BaseViewModel {
SickLeaveService _sickLeaveService = locator<SickLeaveService>();
get sickLeaveStatistics => _sickLeaveService.sickLeavestatisitics;
get getAllSIckLeave => _sickLeaveService.getAllSickLeave;
Future addSickLeave(AddSickLeaveRequest addSickLeaveRequest) async {
setState(ViewState.Busy);
await _sickLeaveService.addSickLeave(addSickLeaveRequest);
if (_sickLeaveService.hasError) {
error = _sickLeaveService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future extendSickLeave(GetAllSickLeaveResponse extendSickLeaveRequest) async {
setState(ViewState.Busy);
await _sickLeaveService.extendSickLeave(extendSickLeaveRequest);
if (_sickLeaveService.hasError) {
error = _sickLeaveService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future preSickLeaveStatistics(appoNo, patientMRN) async {
setState(ViewState.Busy);
await _sickLeaveService.getStatistics(appoNo, patientMRN);
if (_sickLeaveService.hasError) {
error = _sickLeaveService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future getSickLeave() async {
setState(ViewState.Busy);
await _sickLeaveService.getSickLeave();
if (_sickLeaveService.hasError) {
error = _sickLeaveService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}

@ -1,5 +1,9 @@
import 'package:doctor_app_flutter/core/service/dasboard_service.dart';
import 'package:doctor_app_flutter/core/service/patient_service.dart'; import 'package:doctor_app_flutter/core/service/patient_service.dart';
import 'package:doctor_app_flutter/core/service/sickleave_service.dart';
import 'package:doctor_app_flutter/core/viewModel/dashboard_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart';
import 'package:get_it/get_it.dart'; import 'package:get_it/get_it.dart';
import 'core/service/SOAP_service.dart'; import 'core/service/SOAP_service.dart';
@ -28,6 +32,8 @@ void setupLocator() {
locator.registerLazySingleton(() => ReferredPatientService()); locator.registerLazySingleton(() => ReferredPatientService());
locator.registerLazySingleton(() => MedicineService()); locator.registerLazySingleton(() => MedicineService());
locator.registerLazySingleton(() => PatientService()); locator.registerLazySingleton(() => PatientService());
locator.registerLazySingleton(() => DashboardService());
locator.registerLazySingleton(() => SickLeaveService());
locator.registerLazySingleton(() => SOAPService()); locator.registerLazySingleton(() => SOAPService());
locator.registerLazySingleton(() => PatientReferralService()); locator.registerLazySingleton(() => PatientReferralService());
@ -38,6 +44,8 @@ void setupLocator() {
locator.registerFactory(() => ReferredPatientViewModel()); locator.registerFactory(() => ReferredPatientViewModel());
locator.registerFactory(() => MedicineViewModel()); locator.registerFactory(() => MedicineViewModel());
locator.registerFactory(() => PatientViewModel()); locator.registerFactory(() => PatientViewModel());
locator.registerFactory(() => DashboardViewModel());
locator.registerFactory(() => SickLeaveViewModel());
locator.registerFactory(() => SOAPViewModel()); locator.registerFactory(() => SOAPViewModel());
locator.registerFactory(() => PatientReferralViewModel()); locator.registerFactory(() => PatientReferralViewModel());
} }

@ -10,6 +10,7 @@ const PATIENT_TYPE = const [
}, },
{"text": "Tomorrow Patient", "text_ar": "مريض الغد", "val": "5"}, {"text": "Tomorrow Patient", "text_ar": "مريض الغد", "val": "5"},
{"text": "Referral", "text_ar": "المريض المحول مني", "val": "6"}, {"text": "Referral", "text_ar": "المريض المحول مني", "val": "6"},
{"text": "Arrived", "text_ar": "وصل", "val": "7"},
]; ];
const LOCATIONS = const [ const LOCATIONS = const [

@ -0,0 +1,70 @@
class DashboardModel {
String kPIName;
int displaySequence;
List<Summaryoptions> summaryoptions;
DashboardModel({this.kPIName, this.displaySequence, this.summaryoptions});
DashboardModel.fromJson(Map<String, dynamic> json) {
kPIName = json['KPIName'];
displaySequence = json['displaySequence'];
if (json['summaryoptions'] != null) {
summaryoptions = new List<Summaryoptions>();
json['summaryoptions'].forEach((v) {
summaryoptions.add(new Summaryoptions.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['KPIName'] = this.kPIName;
data['displaySequence'] = this.displaySequence;
if (this.summaryoptions != null) {
data['summaryoptions'] =
this.summaryoptions.map((v) => v.toJson()).toList();
}
return data;
}
}
class Summaryoptions {
String kPIParameter;
String captionColor;
bool isCaptionBold;
bool isValueBold;
int order;
int value;
String valueColor;
Summaryoptions(
{this.kPIParameter,
this.captionColor,
this.isCaptionBold,
this.isValueBold,
this.order,
this.value,
this.valueColor});
Summaryoptions.fromJson(Map<String, dynamic> json) {
kPIParameter = json['KPIParameter'];
captionColor = json['captionColor'];
isCaptionBold = json['isCaptionBold'];
isValueBold = json['isValueBold'];
order = json['order'];
value = json['value'];
valueColor = json['valueColor'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['KPIParameter'] = this.kPIParameter;
data['captionColor'] = this.captionColor;
data['isCaptionBold'] = this.isCaptionBold;
data['isValueBold'] = this.isValueBold;
data['order'] = this.order;
data['value'] = this.value;
data['valueColor'] = this.valueColor;
return data;
}
}

@ -0,0 +1,32 @@
class AddSickLeaveRequest {
String patientMRN;
String appointmentNo;
String startDate;
String noOfDays;
String remarks;
AddSickLeaveRequest(
{this.patientMRN,
this.appointmentNo,
this.startDate,
this.noOfDays,
this.remarks});
AddSickLeaveRequest.fromJson(Map<String, dynamic> json) {
patientMRN = json['PatientMRN'];
appointmentNo = json['AppointmentNo'];
startDate = json['StartDate'];
noOfDays = json['NoOfDays'];
remarks = json['Remarks'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['PatientMRN'] = this.patientMRN;
data['AppointmentNo'] = this.appointmentNo;
data['StartDate'] = this.startDate;
data['NoOfDays'] = this.noOfDays;
data['Remarks'] = this.remarks;
return data;
}
}

@ -0,0 +1,25 @@
class ExtendSickLeaveRequest {
String patientMRN;
String previousRequestNo;
String noOfDays;
String remarks;
ExtendSickLeaveRequest(
{this.patientMRN, this.previousRequestNo, this.noOfDays, this.remarks});
ExtendSickLeaveRequest.fromJson(Map<String, dynamic> json) {
patientMRN = json['PatientMRN'];
previousRequestNo = json['PreviousRequestNo'];
noOfDays = json['NoOfDays'];
remarks = json['Remarks'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['PatientMRN'] = this.patientMRN;
data['PreviousRequestNo'] = this.previousRequestNo;
data['NoOfDays'] = this.noOfDays;
data['Remarks'] = this.remarks;
return data;
}
}

@ -0,0 +1,44 @@
class GetAllSickLeaveResponse {
int appointmentNo;
bool isExtendedLeave;
int noOfDays;
int patientMRN;
String remarks;
int requestNo;
String startDate;
int status;
GetAllSickLeaveResponse(
{this.appointmentNo,
this.isExtendedLeave,
this.noOfDays,
this.patientMRN,
this.remarks,
this.requestNo,
this.startDate,
this.status});
GetAllSickLeaveResponse.fromJson(Map<String, dynamic> json) {
appointmentNo = json['appointmentNo'];
isExtendedLeave = json['isExtendedLeave'];
noOfDays = json['noOfDays'];
patientMRN = json['patientMRN'];
remarks = json['remarks'];
requestNo = json['requestNo'];
startDate = json['startDate'];
status = json['status'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['appointmentNo'] = this.appointmentNo;
data['isExtendedLeave'] = this.isExtendedLeave;
data['noOfDays'] = this.noOfDays;
data['patientMRN'] = this.patientMRN;
data['remarks'] = this.remarks;
data['requestNo'] = this.requestNo;
data['startDate'] = this.startDate;
data['status'] = this.status;
return data;
}
}

@ -7,6 +7,8 @@ import 'package:doctor_app_flutter/screens/patients/profile/refer_patient_screen
import 'package:doctor_app_flutter/screens/patients/profile/prescriptions/in_patient_prescription_details_screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/prescriptions/in_patient_prescription_details_screen.dart';
import 'package:doctor_app_flutter/screens/live_care/video_call.dart'; import 'package:doctor_app_flutter/screens/live_care/video_call.dart';
import 'package:doctor_app_flutter/screens/sick-leave/add-sickleave.dart';
import 'package:doctor_app_flutter/screens/sick-leave/sick_leave.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/SOAP/add_SOAP_index.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/SOAP/add_SOAP_index.dart';
import './screens/QR_reader_screen.dart'; import './screens/QR_reader_screen.dart';
@ -81,6 +83,8 @@ const String IN_PATIENT_PRESCRIPTIONS_DETAILS = 'patients/prescription-details';
// const String VIDEO_CALL = 'video-call'; // const String VIDEO_CALL = 'video-call';
const String LIVECARE_PENDING_LIST = 'livecare-pendinglist'; const String LIVECARE_PENDING_LIST = 'livecare-pendinglist';
// const String LIVECARE_END_DIALOG = 'video-call/EndCallDialogBox'; // const String LIVECARE_END_DIALOG = 'video-call/EndCallDialogBox';
const String PATIENT_SICKLEAVE = 'patients/patient_sickleave';
const String ADD_SICKLEAVE = 'add-sickleave';
var routes = { var routes = {
ROOT: (_) => RootPage(), ROOT: (_) => RootPage(),
HOME: (_) => LandingPage(), HOME: (_) => LandingPage(),
@ -113,11 +117,14 @@ var routes = {
PATIENT_ORDERS: (_) => PatientsOrdersScreen(), PATIENT_ORDERS: (_) => PatientsOrdersScreen(),
PATIENT_INSURANCE_APPROVALS: (_) => InsuranceApprovalsScreen(), PATIENT_INSURANCE_APPROVALS: (_) => InsuranceApprovalsScreen(),
VITAL_SIGN_DETAILS: (_) => VitalSignDetailsScreen(), VITAL_SIGN_DETAILS: (_) => VitalSignDetailsScreen(),
CREATE_EPISODE:(_)=>AddSOAPIndex(), CREATE_EPISODE: (_) => AddSOAPIndex(),
BODY_MEASUREMENTS: (_) => VitalSignItemDetailsScreen(), BODY_MEASUREMENTS: (_) => VitalSignItemDetailsScreen(),
IN_PATIENT_PRESCRIPTIONS_DETAILS: (_) => InpatientPrescriptionDetailsScreen(), IN_PATIENT_PRESCRIPTIONS_DETAILS: (_) => InpatientPrescriptionDetailsScreen(),
// VIDEO_CALL: (_) => VideoCallPage(patientData: null), // VIDEO_CALL: (_) => VideoCallPage(patientData: null),
LIVECARE_PENDING_LIST: (_) => LiveCarePandingListScreen(), LIVECARE_PENDING_LIST: (_) => LiveCarePandingListScreen(),
// LIVECARE_END_DIALOG: (_) => EndCallDialogBox(),
PATIENT_SICKLEAVE: (_) => SickLeaveScreen(),
ADD_SICKLEAVE: (_) => AddSickLeavScreen(),
// LIVECARE_END_DIALOG: (_) => EndCallDialogBox() // LIVECARE_END_DIALOG: (_) => EndCallDialogBox()
MY_REFERRAL_DETAIL: (_) => MyReferralDetailScreen(), MY_REFERRAL_DETAIL: (_) => MyReferralDetailScreen(),
}; };

@ -1,5 +1,7 @@
import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/dashboard_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_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/doctor/clinic_model.dart'; import 'package:doctor_app_flutter/models/doctor/clinic_model.dart';
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart'; import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart';
@ -7,6 +9,7 @@ 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/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/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';
@ -18,7 +21,7 @@ import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:percent_indicator/circular_percent_indicator.dart'; import 'package:percent_indicator/circular_percent_indicator.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:doctor_app_flutter/models/dashboard/dashboard_model.dart';
import '../routes.dart'; import '../routes.dart';
import '../widgets/shared/app_texts_widget.dart'; import '../widgets/shared/app_texts_widget.dart';
import 'doctor/doctor_reply_screen.dart'; import 'doctor/doctor_reply_screen.dart';
@ -47,7 +50,8 @@ class _DashboardScreenState extends State<DashboardScreen> {
ProjectViewModel projectsProvider; ProjectViewModel projectsProvider;
var _isInit = true; var _isInit = true;
DoctorProfileModel profile; DoctorProfileModel profile;
bool isExpanded = false;
String isInpatient = "";
void didChangeDependencies() async { void didChangeDependencies() async {
super.didChangeDependencies(); super.didChangeDependencies();
if (_isInit) { if (_isInit) {
@ -72,11 +76,11 @@ class _DashboardScreenState extends State<DashboardScreen> {
if (!currentFocus.hasPrimaryFocus) { if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus(); currentFocus.unfocus();
} }
return SafeArea( return BaseView<DashboardViewModel>(
bottom: true, onModelReady: (model) => model.getDashboard(),
child: AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: false, isShowAppBar: false,
isLoading: isLoading,
body: ListView(children: [ body: ListView(children: [
Column( Column(
children: <Widget>[ children: <Widget>[
@ -92,15 +96,48 @@ class _DashboardScreenState extends State<DashboardScreen> {
actionList: projectsProvider.doctorClinicsList); actionList: projectsProvider.doctorClinicsList);
}, },
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
AppText(
TranslationBase.of(context).welcome,
fontSize:
SizeConfig.textMultiplier * 1.7,
color: Colors.white,
)
],
),
SizedBox(
height: 4,
),
InkWell(
onTap: () async {
showCupertinoPicker(
decKey: '',
context: context,
actionList: projectsProvider
.doctorClinicsList);
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
Container( Container(
child: AppText( child: AppText(
authProvider.selectedClinicName != null authProvider.selectedClinicName !=
? authProvider.selectedClinicName null
: authProvider ? authProvider
.doctorProfile.clinicDescription, .selectedClinicName
fontSize: SizeConfig.textMultiplier * 1.7, : authProvider.doctorProfile
.clinicDescription,
fontSize:
SizeConfig.textMultiplier *
1.7,
color: Colors.white, color: Colors.white,
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
@ -109,207 +146,475 @@ class _DashboardScreenState extends State<DashboardScreen> {
: Alignment.topLeft, : Alignment.topLeft,
), ),
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment:
MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
InkWell( InkWell(
child: Container( child: Container(
margin: EdgeInsets.only( margin: EdgeInsets.only(
left: 5, left: 5,
top: projectsProvider.isArabic top: projectsProvider
.isArabic
? 0 ? 0
: 5, : 5,
right: 10, right: 10,
bottom: projectsProvider.isArabic bottom: projectsProvider
.isArabic
? 15 ? 15
: 7), : 7),
child: Icon( child: Icon(
DoctorApp.sync_icon, DoctorApp.sync_icon,
color: Colors.white, color: Colors.white,
size: SizeConfig.textMultiplier * 1.8, size: SizeConfig
.textMultiplier *
1.8,
)), )),
), ),
], ],
), ),
]), ]),
), ),
],
),
]),
),
), ),
Container( Container(
color: Colors.white, color: Colors.white,
height: 90, height: this.isExpanded ? 150 : 110,
), ),
], ],
), ),
Positioned( Positioned(
right: 9.0, right: 9.0,
left: 9, left: 9,
bottom: 19, bottom: 15,
child: Container( child: ExpandableCardContainer(
decoration: BoxDecoration( expandedChild: Container(
color: HexColor("#DED8CF"),
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
),
margin: EdgeInsets.only(left: 10, right: 10), margin: EdgeInsets.only(left: 10, right: 10),
height: 140, height: MediaQuery.of(context).orientation ==
Orientation.portrait
? MediaQuery.of(context).size.height * 0.22
: MediaQuery.of(context).size.height * 0.25,
width: double.infinity, width: double.infinity,
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Divider(),
Padding(
padding: const EdgeInsets.only(
top: 8.0, bottom: 8, right: 40, left: 8),
child: CircularPercentIndicator(
radius: 100,
animation: true,
animationDuration: 1200,
lineWidth: 7.0,
percent: .75,
center: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ children: <Widget>[
DashboardItem(
onTap: () {
setState(() {
this.isExpanded = false;
});
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Row(
children: [
Expanded(
child: Column(
children: [
AppText( AppText(
"38", model.dashboardItemsList
fontSize: SizeConfig.textMultiplier * 3.7, .length >
color: HexColor('#5D4C35'), 0
? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[0]
.value
.toString()
: model
.dashboardItemsList[
1]
.summaryoptions[0]
.value
.toString()
: "",
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 24,
), ),
AppText( AppText(
TranslationBase.of(context).outPatients, model.dashboardItemsList
fontWeight: FontWeight.normal, .length >
fontSize: SizeConfig.textMultiplier * 1.4, 0
color: HexColor('#5D4C35'), ? isInpatient == 'in'
), ? model
.dashboardItemsList[
0]
.summaryoptions[0]
.kPIParameter
: model
.dashboardItemsList[
1]
.summaryoptions[0]
.kPIParameter
: "",
//'My Admitted Patient',
color: Colors.white,
textAlign: TextAlign.center,
fontSize: 12,
)
], ],
), )),
circularStrokeCap: CircularStrokeCap.butt, Expanded(
backgroundColor: Colors.blueGrey[100],
progressColor: HexColor('#B8382C'),
),
),
Container(
child: Table(
defaultColumnWidth: FixedColumnWidth(
MediaQuery.of(context).size.width / 5),
// border: TableBorder.all(
// color: Colors.black26,
// width: 1,
// style: BorderStyle.solid),
border: TableBorder.symmetric(
inside: BorderSide(
width: 0.5,
color: HexColor('#5D4C35'),
),
),
children: [
TableRow(
children: [
TableCell(
child: Center(
child: Column( child: Column(
children: <Widget>[ children: [
AppText(
TranslationBase.of(context).arrived,
fontSize:
SizeConfig.textMultiplier * 1.5,
color: HexColor('#5D4C35'),
),
AppText( AppText(
"23", model.dashboardItemsList
fontSize: .length >
SizeConfig.textMultiplier * 2.7, 0
color: HexColor('#5D4C35'), ? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[1]
.value
.toString()
: model
.dashboardItemsList[
1]
.summaryoptions[1]
.value
.toString()
: "",
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 28,
), ),
SizedBox( AppText(
height: 6, model.dashboardItemsList
), .length >
0
? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[1]
.kPIParameter
: model
.dashboardItemsList[
1]
.summaryoptions[1]
.kPIParameter
: "",
color: Colors.white,
textAlign: TextAlign.center,
fontSize: 12,
)
], ],
),
)), )),
TableCell( Expanded(
child: Column( child: Column(
children: <Widget>[ children: [
AppText( AppText(
TranslationBase.of(context).er, model.dashboardItemsList
fontSize: .length >
SizeConfig.textMultiplier * 1.5, 0
color: HexColor('#5D4C35'), ? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[2]
.value
.toString()
: model
.dashboardItemsList[
1]
.summaryoptions[2]
.value
.toString()
: "",
fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 28),
AppText(
model.dashboardItemsList
.length >
0
? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[2]
.kPIParameter
.toString()
: model
.dashboardItemsList[
1]
.summaryoptions[2]
.kPIParameter
.toString()
: "",
color: Colors.white,
fontSize: 12,
textAlign: TextAlign.center)
],
))
],
), ),
Row(
children: [
Expanded(
child: Column(
children: [
AppText( AppText(
"03", model.dashboardItemsList
fontSize: .length >
SizeConfig.textMultiplier * 2.7, 0
color: HexColor('#5D4C35'), ? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[3]
.value
.toString()
: model
.dashboardItemsList[
1]
.summaryoptions[3]
.value
.toString()
: "",
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), color: Colors.white,
SizedBox( fontSize: 28),
height: 6, AppText(
), model.dashboardItemsList
.length >
0
? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[3]
.kPIParameter
.toString()
: model
.dashboardItemsList[
1]
.summaryoptions[3]
.kPIParameter
.toString()
: "",
color: Colors.white,
fontSize: 12,
textAlign: TextAlign.center)
],
)),
Expanded(
child: Column(
children: [
AppText(
model.dashboardItemsList
.length >
0
? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[
4]
.value
.toString()
: model
.dashboardItemsList[
1]
.summaryoptions[
4]
.value
.toString()
: "",
fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 28),
AppText(
model.dashboardItemsList
.length >
0
? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[
4]
.kPIParameter
.toString()
: model
.dashboardItemsList[
1]
.summaryoptions[
4]
.kPIParameter
.toString()
: "",
color: Colors.white,
fontSize: 12,
textAlign: TextAlign.center)
], ],
), ),
), ),
Expanded(
child: Container(),
)
], ],
// )
],
)),
imageName: '5.png',
color: HexColor('#B8382C'),
hasBorder: false,
width: MediaQuery.of(context).size.width * 0.9,
height: MediaQuery.of(context).orientation ==
Orientation.portrait
? MediaQuery.of(context).size.height * 0.22
: MediaQuery.of(context).size.height * 0.25,
), ),
TableRow(children: [ ],
TableCell(
child: Column(
children: <Widget>[
SizedBox(
height: 6,
), ),
AppText(
TranslationBase.of(context).notArrived,
fontSize:
SizeConfig.textMultiplier * 1.5,
color: HexColor('#5D4C35'),
), ),
collapsedChild: Container(
margin: EdgeInsets.only(left: 10, right: 10),
height: MediaQuery.of(context).orientation ==
Orientation.portrait
? MediaQuery.of(context).size.height * 0.15
: MediaQuery.of(context).size.height * 0.25,
width: double.infinity,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
DashboardItem(
onTap: () {
setState(() {
this.isExpanded = true;
this.isInpatient = 'in';
});
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
mainAxisAlignment:
MainAxisAlignment.start,
children: <Widget>[
AppText( AppText(
"15", model.dashboardItemsList.length > 0
? getPatientCount(
model.dashboardItemsList[0])
: "",
fontSize: fontSize:
SizeConfig.textMultiplier * 2.7, SizeConfig.textMultiplier * 6,
color: HexColor('#5D4C35'), color: Colors.white,
fontWeight: FontWeight.bold,
), ),
Flexible(
child: AppText(
TranslationBase.of(context).inPatient,
color: Colors.white,
textOverflow: TextOverflow.ellipsis,
)),
], ],
), ),
), Padding(
TableCell( padding: EdgeInsets.all(5),
child: Column( child: Column(
children: <Widget>[ mainAxisAlignment:
SizedBox( MainAxisAlignment.end,
height: 6, children: [
Icon(
DoctorApp.in_patient_white,
size: 35,
color: Colors.white,
)
],
))
],
), ),
AppText(
TranslationBase.of(context).walkIn,
fontSize:
SizeConfig.textMultiplier * 1.5,
color: HexColor('#5D4C35'),
), ),
imageName: '4.png',
color: HexColor('#B8382C'),
hasBorder: false,
width: MediaQuery.of(context).size.width * 0.44,
height: MediaQuery.of(context).orientation ==
Orientation.portrait
? MediaQuery.of(context).size.height * 0.15
: MediaQuery.of(context).size.height * 0.25,
),
DashboardItem(
onTap: () {
setState(() {
isExpanded = true;
this.isInpatient = 'out';
});
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
mainAxisAlignment:
MainAxisAlignment.start,
children: <Widget>[
AppText( AppText(
"04", model.dashboardItemsList.length > 0
? getPatientCount(
model.dashboardItemsList[1])
: "",
fontSize: fontSize:
SizeConfig.textMultiplier * 2.7, SizeConfig.textMultiplier * 6,
color: HexColor('#5D4C35'), color: Colors.white,
fontWeight: FontWeight.bold,
), ),
Flexible(
child: AppText(
TranslationBase.of(context)
.outPatients,
color: Colors.white,
textOverflow: TextOverflow.ellipsis,
)),
], ],
), ),
), Padding(
]), padding: EdgeInsets.all(5),
child: Column(
mainAxisAlignment:
MainAxisAlignment.end,
children: [
Icon(
DoctorApp.out_patient,
size: 35,
color: Colors.white,
)
],
))
], ],
), ),
), ),
Divider(), imageName: '5.png',
color: HexColor('#B8382C'),
hasBorder: false,
width: MediaQuery.of(context).size.width * 0.44,
height: MediaQuery.of(context).orientation ==
Orientation.portrait
? MediaQuery.of(context).size.height * 0.15
: MediaQuery.of(context).size.height * 0.25,
),
], ],
), ),
), ),
) isExpanded: isExpanded,
))
]), ]),
FractionallySizedBox( FractionallySizedBox(
widthFactor: 0.90, widthFactor: 0.90,
@ -335,16 +640,21 @@ class _DashboardScreenState extends State<DashboardScreen> {
), ),
), ),
Container( Container(
margin: EdgeInsets.only(bottom: 10), // margin: EdgeInsets.only(bottom: 10),
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
AppText( AppText(
"08", model.dashboardItemsList.length > 0
? getPatientCount(
model.dashboardItemsList[7])
: "",
fontSize: SizeConfig.textMultiplier * 6, fontSize: SizeConfig.textMultiplier * 6,
color: Colors.white, color: Colors.white,
), ),
AppText( AppText(
TranslationBase.of(context).labResult, TranslationBase.of(context)
.targetPatient,
textAlign: TextAlign.center,
color: Colors.white, color: Colors.white,
) )
], ],
@ -372,7 +682,10 @@ class _DashboardScreenState extends State<DashboardScreen> {
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
AppText( AppText(
"10", model.dashboardItemsList.length > 0
? getPatientCount(
model.dashboardItemsList[6])
: "",
fontSize: SizeConfig.textMultiplier * 6, fontSize: SizeConfig.textMultiplier * 6,
color: Colors.white, color: Colors.white,
), ),
@ -405,7 +718,10 @@ class _DashboardScreenState extends State<DashboardScreen> {
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
AppText( AppText(
"05", model.dashboardItemsList.length > 0
? getPatientCount(
model.dashboardItemsList[2])
: "",
fontSize: SizeConfig.textMultiplier * 6, fontSize: SizeConfig.textMultiplier * 6,
color: Colors.white, color: Colors.white,
), ),
@ -426,99 +742,6 @@ class _DashboardScreenState extends State<DashboardScreen> {
SizedBox( SizedBox(
height: 15, height: 15,
), ),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
DashboardItem(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
children: <Widget>[
Icon(
DoctorApp.in_patient_white,
size: 40,
color: Colors.white,
),
],
),
Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
AppText(
"14",
fontSize: SizeConfig.textMultiplier * 6,
color: Colors.white,
),
AppText(
TranslationBase.of(context).inPatient,
color: Colors.white,
)
],
)
],
),
),
imageName: '4.png',
color: HexColor('#B8382C'),
hasBorder: false,
width: MediaQuery.of(context).size.width * 0.44,
height: MediaQuery.of(context).orientation ==
Orientation.portrait
? MediaQuery.of(context).size.height * 0.13
: MediaQuery.of(context).size.height * 0.25,
),
DashboardItem(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
children: <Widget>[
Icon(
DoctorApp.operations,
size: 40,
color: Colors.white,
),
],
),
Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
AppText(
"07",
fontSize: SizeConfig.textMultiplier * 6,
color: Colors.white,
),
AppText(
TranslationBase.of(context).operations,
color: Colors.white,
)
],
)
],
),
),
imageName: '5.png',
color: HexColor('#B8382C'),
hasBorder: false,
width: MediaQuery.of(context).size.width * 0.44,
height: MediaQuery.of(context).orientation ==
Orientation.portrait
? MediaQuery.of(context).size.height * 0.13
: MediaQuery.of(context).size.height * 0.25,
),
],
),
SizedBox(
height: 15,
),
Row( Row(
children: <Widget>[ children: <Widget>[
AppText( AppText(
@ -834,6 +1057,13 @@ class _DashboardScreenState extends State<DashboardScreen> {
this.isLoading = val; this.isLoading = val;
}); });
} }
getPatientCount(DashboardModel inPatientCount) {
int value = 0;
inPatientCount.summaryoptions.forEach((result) => {value += result.value});
return value.toString();
}
} }
// TODO Move to it file // TODO Move to it file
@ -895,3 +1125,28 @@ class DashboardItem extends StatelessWidget {
); );
} }
} }
class ExpandableCardContainer extends StatefulWidget {
final bool isExpanded;
final Widget collapsedChild;
final Widget expandedChild;
const ExpandableCardContainer(
{Key key, this.isExpanded, this.collapsedChild, this.expandedChild})
: super(key: key);
@override
_ExpandableCardContainerState createState() =>
_ExpandableCardContainerState();
}
class _ExpandableCardContainerState extends State<ExpandableCardContainer> {
@override
Widget build(BuildContext context) {
return new AnimatedContainer(
duration: new Duration(milliseconds: 1000),
curve: Curves.easeInOut,
child: widget.isExpanded ? widget.expandedChild : widget.collapsedChild,
);
}
}

@ -246,24 +246,13 @@ class _PatientsScreenState extends State<PatientsScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_locations = [ _locations = [
TranslationBase TranslationBase.of(context).all,
.of(context) TranslationBase.of(context).today,
.all, TranslationBase.of(context).tomorrow,
TranslationBase TranslationBase.of(context).nextWeek,
.of(context)
.today,
TranslationBase
.of(context)
.tomorrow,
TranslationBase
.of(context)
.nextWeek,
]; ];
projectsProvider = Provider.of(context); projectsProvider = Provider.of(context);
final routeArgs = ModalRoute final routeArgs = ModalRoute.of(context).settings.arguments as Map;
.of(context)
.settings
.arguments as Map;
patient = routeArgs['patientSearchForm']; patient = routeArgs['patientSearchForm'];
@ -301,8 +290,7 @@ class _PatientsScreenState extends State<PatientsScreen> {
}); });
}); });
}, },
builder: (_, model, w) => builder: (_, model, w) => AppScaffold(
AppScaffold(
appBarTitle: patientTypeTitle, appBarTitle: patientTypeTitle,
body: _isLoading body: _isLoading
? DrAppCircularProgressIndeicator() ? DrAppCircularProgressIndeicator()
@ -310,9 +298,8 @@ class _PatientsScreenState extends State<PatientsScreen> {
? DrAppEmbeddedError(error: error) ? DrAppEmbeddedError(error: error)
: lItems == null || lItems.length == 0 : lItems == null || lItems.length == 0
? DrAppEmbeddedError( ? DrAppEmbeddedError(
error: TranslationBase error:
.of(context) TranslationBase.of(context).youDontHaveAnyPatient)
.youDontHaveAnyPatient)
: Container( : Container(
child: ListView( child: ListView(
scrollDirection: Axis.vertical, scrollDirection: Axis.vertical,
@ -351,7 +338,8 @@ class _PatientsScreenState extends State<PatientsScreen> {
SizedBox(height: 18.5), SizedBox(height: 18.5),
Container( Container(
width: SizeConfig.screenWidth * 0.9, width: SizeConfig.screenWidth * 0.9,
height: SizeConfig.screenHeight * 0.05, height:
SizeConfig.screenHeight * 0.05,
child: TextField( child: TextField(
controller: _controller, controller: _controller,
onChanged: (String str) { onChanged: (String str) {
@ -375,12 +363,14 @@ class _PatientsScreenState extends State<PatientsScreen> {
color: Color(0Xffffffff), color: Color(0Xffffffff),
borderRadius: borderRadius:
BorderRadius.circular(20)), BorderRadius.circular(20)),
margin: EdgeInsets.fromLTRB(0, 0, 0, 0), margin:
EdgeInsets.fromLTRB(0, 0, 0, 0),
child: (responseModelList.length > 0) child: (responseModelList.length > 0)
? Column( ? Column(
// mainAxisAlignment: MainAxisAlignment.center, // mainAxisAlignment: MainAxisAlignment.center,
children: responseModelList.map( children: responseModelList
(PatiantInformtion item) { .map((PatiantInformtion
item) {
return Container( return Container(
decoration: decoration:
myBoxDecoration(), myBoxDecoration(),
@ -391,7 +381,8 @@ class _PatientsScreenState extends State<PatientsScreen> {
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment MainAxisAlignment
.start, .start,
children: <Widget>[ children: <
Widget>[
Padding( Padding(
padding: EdgeInsets padding: EdgeInsets
.only( .only(
@ -408,8 +399,7 @@ class _PatientsScreenState extends State<PatientsScreen> {
0, 0,
0, 0,
0.08), 0.08),
offset: Offset( offset: Offset(0.0,
0.0,
5.0), 5.0),
blurRadius: blurRadius:
16.0) 16.0)
@ -466,8 +456,7 @@ class _PatientsScreenState extends State<PatientsScreen> {
" " + " " +
item.lastName, item.lastName,
fontSize: fontSize:
2.0 * 2.0 * SizeConfig.textMultiplier,
SizeConfig.textMultiplier,
fontWeight: fontWeight:
FontWeight.bold, FontWeight.bold,
backGroundcolor: backGroundcolor:
@ -483,8 +472,7 @@ class _PatientsScreenState extends State<PatientsScreen> {
children: [ children: [
Column( Column(
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment CrossAxisAlignment.start,
.start,
children: < children: <
Widget>[ Widget>[
Wrap( Wrap(
@ -521,8 +509,7 @@ class _PatientsScreenState extends State<PatientsScreen> {
height: height:
15.5, 15.5,
), ),
SERVICES_PATIANT2[int.parse(patientType)] == SERVICES_PATIANT2[int.parse(patientType)] == "List_MyOutPatient"
"List_MyOutPatient"
? Row( ? Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
@ -563,8 +550,7 @@ class _PatientsScreenState extends State<PatientsScreen> {
), ),
Column( Column(
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment CrossAxisAlignment.start,
.start,
// mainAxisAlignment: // mainAxisAlignment:
// MainAxisAlignment // MainAxisAlignment
// .spaceBetween, // .spaceBetween,
@ -618,8 +604,7 @@ class _PatientsScreenState extends State<PatientsScreen> {
height: height:
8, 8,
), ),
SERVICES_PATIANT2[int.parse(patientType)] == SERVICES_PATIANT2[int.parse(patientType)] == "List_MyOutPatient"
"List_MyOutPatient"
? Row( ? Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
@ -691,7 +676,8 @@ class _PatientsScreenState extends State<PatientsScreen> {
], ],
), ),
), ),
),); ),
);
} }
InputDecoration buildInputDecoration(BuildContext context, hint) { InputDecoration buildInputDecoration(BuildContext context, hint) {
@ -761,7 +747,6 @@ class _PatientsScreenState extends State<PatientsScreen> {
), ),
), ),
onTap: () { onTap: () {
filterBooking(item.toString()); filterBooking(item.toString());
setState(() { setState(() {

@ -0,0 +1,192 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/sick-leave/sick_leave.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.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/card_with_bgNew_widget.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
class AddSickLeavScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BaseView<SickLeaveViewModel>(
onModelReady: (model) => model.getSickLeave(),
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
appBarTitle: TranslationBase.of(context).sickleave,
body: model.getAllSIckLeave.length > 0
? SingleChildScrollView(
child: Column(
children: model.getAllSIckLeave
.map<Widget>((GetAllSickLeaveResponse item) {
return CardWithBgWidgetNew(
widget: Column(
children: [
Container(
padding: EdgeInsets.only(left: 10, right: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
flex: 4,
child: Wrap(
// mainAxisAlignment:
// MainAxisAlignment.start,
children: <Widget>[
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Container(
padding: EdgeInsets.all(3),
child: AppText(
item.status == 1
? TranslationBase.of(
context)
.approved
: item.status == 2
? TranslationBase
.of(context)
.extended
: TranslationBase
.of(context)
.pending,
fontWeight: FontWeight.bold,
color: Colors.white,
),
color: item.status == 1
? Colors.green
: Colors.yellow[800],
),
Row(
children: [
AppText(
TranslationBase.of(
context)
.leaveStartDate +
' ',
fontWeight:
FontWeight.bold,
),
Flexible(
child: Text(
item.startDate,
overflow:
TextOverflow.ellipsis,
))
],
),
AppText(
item.noOfDays.toString() +
' ' +
TranslationBase.of(
context)
.daysSickleave,
fontWeight: FontWeight.bold,
),
Row(children: [
AppText(
item.remarks,
)
]),
],
),
SizedBox(
width: 20,
),
],
),
),
(item.status == 1 || item.status == 2)
? Expanded(
flex: 1,
child: IconButton(
icon: Icon(
Icons.open_in_full,
size: 40,
),
// color: Colors.green, //Colors.black,
onPressed: () => {
openSickLeave(context, true,
extendedData: item)
},
))
: SizedBox(),
],
)),
SizedBox(
height: 20,
),
Divider(
height: 1,
),
],
));
}).toList(),
),
)
: new Builder(builder: (context) {
return Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
padding: EdgeInsets.all(40),
decoration: BoxDecoration(
border: Border.all(
color: HexColor('#B8382C'), width: 4),
borderRadius:
BorderRadius.all(Radius.circular(100))),
child: IconButton(
icon: Icon(
Icons.add,
size: 35,
),
onPressed: () {
openSickLeave(
context,
false,
);
}),
),
Padding(
child: AppText(
TranslationBase.of(context).noSickLeaveApplied,
fontWeight: FontWeight.bold,
),
padding: EdgeInsets.all(10),
),
AppText(
TranslationBase.of(context).applyNow,
fontWeight: FontWeight.bold,
color: HexColor('#B8382C'),
)
],
),
));
}),
));
}
openSickLeave(BuildContext context, isExtend,
{GetAllSickLeaveResponse extendedData}) {
showModalBottomSheet(
context: context,
builder: (context) {
return new Container(
child: SickLeaveScreen(
appointmentNo: extendedData.appointmentNo,
patientMRN: extendedData.patientMRN,
isExtended: isExtend,
extendedData: extendedData,
));
});
}
}

@ -0,0 +1,379 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart';
import 'package:doctor_app_flutter/models/sickleave/add_sickleave_request.dart';
import 'package:doctor_app_flutter/screens/base/base_view.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/text_validator.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/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:intl/intl.dart';
import 'package:doctor_app_flutter/models/sickleave/get_all_sickleave_response.dart';
Helpers helpers = Helpers();
class SickLeaveScreen extends StatefulWidget {
final bool isExtended;
final GetAllSickLeaveResponse extendedData;
final appointmentNo;
final patientMRN;
SickLeaveScreen(
{this.appointmentNo,
this.patientMRN,
this.isExtended = false,
this.extendedData});
@override
_SickLeaveScreenState createState() => _SickLeaveScreenState();
}
class _SickLeaveScreenState extends State<SickLeaveScreen> {
DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
TextEditingController _toDateController = new TextEditingController();
String _selectedClinic;
Map profile = {};
AddSickLeaveRequest addSickLeave = AddSickLeaveRequest();
void _presentDatePicker(id) {
showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2019),
lastDate: DateTime.now(),
).then((pickedDate) {
if (pickedDate == null) {
return;
}
setState(() {
// var selectedDate = DateFormat.yMd().format(pickedDate);
final df = new DateFormat('yyyy-MM-dd');
addSickLeave.startDate = df.format(pickedDate);
_toDateController.text = addSickLeave.startDate;
//addSickLeave.startDate = selectedDate;
});
});
}
@override
void initState() {
getProfile();
super.initState();
}
@override
Widget build(BuildContext context) {
return BaseView<PatientViewModel>(
onModelReady: (model) => model.getClinicsList(),
builder: (_, model, w) => BaseView<SickLeaveViewModel>(
onModelReady: (model2) => model2.preSickLeaveStatistics(
widget.appointmentNo, widget.patientMRN),
builder: (_, model2, w) => AppScaffold(
baseViewModel: model2,
isShowAppBar: false,
body: Center(
child: Container(
margin: EdgeInsets.only(top: 10),
child: FractionallySizedBox(
widthFactor: 0.9,
child: ListView(
children: [
Padding(
child: AppText(
widget.isExtended == true
? TranslationBase.of(context)
.extendSickLeave
: TranslationBase.of(context)
.addSickLeave,
fontWeight: FontWeight.bold,
),
padding: EdgeInsets.all(10)),
Container(
margin: EdgeInsets.only(left: 10, right: 10),
decoration: BoxDecoration(
borderRadius:
BorderRadius.all(Radius.circular(6.0)),
border: Border.all(
width: 1.0, color: HexColor("#CCCCCC"))),
padding: EdgeInsets.all(5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppTextFormField(
borderColor: Colors.white,
onChanged: (value) {
addSickLeave.noOfDays = value;
},
hintText: widget.extendedData != null
? widget.extendedData.noOfDays
.toString()
: TranslationBase.of(context)
.sickLeaveDays,
// validator: (value) {
// return TextValidator().validateName(value);
// },
inputFormatter: ONLY_NUMBERS)
]),
),
SizedBox(
height: 10,
),
Container(
margin: EdgeInsets.only(left: 10, right: 10),
decoration: BoxDecoration(
borderRadius:
BorderRadius.all(Radius.circular(6.0)),
border: Border.all(
width: 1.0,
color: HexColor("#CCCCCC"))),
padding: EdgeInsets.all(5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// AppText(
// TranslationBase.of(context).sickLeaveDate,
// fontSize: 10,
// ),
AppTextFormField(
hintText: widget.extendedData != null
? widget.extendedData.startDate
: TranslationBase.of(context)
.sickLeaveDate,
borderColor: Colors.white,
prefix: IconButton(
icon: Icon(Icons.calendar_today)),
textInputType: TextInputType.number,
controller: _toDateController,
onTap: () {
_presentDatePicker('_selectedToDate');
},
inputFormatter: ONLY_DATE,
onChanged: (value) {
addSickLeave.startDate = value;
}),
],
)),
Container(
margin: EdgeInsets.only(
top: 10, left: 10, right: 10),
decoration: BoxDecoration(
borderRadius:
BorderRadius.all(Radius.circular(6.0)),
border: Border.all(
width: 1.0,
color: HexColor("#CCCCCC"))),
width: double.infinity,
child: Padding(
padding: EdgeInsets.only(
top: SizeConfig.widthMultiplier * 0.9,
bottom: SizeConfig.widthMultiplier * 0.9,
right: SizeConfig.widthMultiplier * 3,
left: SizeConfig.widthMultiplier * 3),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
// AppText(
// TranslationBase.of(context).clinicName,
// fontSize: 10,
// ),
Row(
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Expanded(
// add Expanded to have your dropdown button fill remaining space
child: DropdownButtonHideUnderline(
child: new IgnorePointer(
ignoring: true,
child: DropdownButton(
isExpanded: true,
value: getClinicName(
model) ??
"",
iconSize: 40,
elevation: 16,
selectedItemBuilder:
(BuildContext
context) {
return model
.getClinicNameList()
.map((item) {
return Row(
mainAxisSize:
MainAxisSize
.max,
children: <Widget>[
AppText(
item,
fontSize: SizeConfig
.textMultiplier *
2.1,
),
],
);
}).toList();
},
onChanged: (newValue) =>
{},
items: model
.getClinicNameList()
.map((item) {
return DropdownMenuItem(
value:
item.toString(),
child: Text(
item,
textAlign:
TextAlign.end,
),
);
}).toList(),
))),
),
],
)
],
),
)),
model2.sickLeaveStatistics[
'recommendedSickLeaveDays'] !=
null
? Padding(
child: AppText(
model2.sickLeaveStatistics[
'recommendedSickLeaveDays'],
fontWeight: FontWeight.bold,
),
padding: EdgeInsets.all(10),
)
: SizedBox(
height: 10,
),
Container(
margin: EdgeInsets.only(left: 10, right: 10),
decoration: BoxDecoration(
borderRadius:
BorderRadius.all(Radius.circular(6.0)),
border: Border.all(
width: 1.0, color: HexColor("#CCCCCC"))),
padding: EdgeInsets.all(5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// AppText(
// TranslationBase.of(context).doctorName,
// fontSize: 10,
// ),
new IgnorePointer(
ignoring: true,
child: AppTextFormField(
readOnly: true,
hintText: profile['DoctorName'],
borderColor: Colors.white,
onSaved: (value) {},
// validator: (value) {
// return TextValidator().validateName(value);
// },
inputFormatter: ONLY_NUMBERS))
],
),
),
SizedBox(
height: 10,
),
Container(
margin: EdgeInsets.only(left: 10, right: 10),
decoration: BoxDecoration(
borderRadius:
BorderRadius.all(Radius.circular(6.0)),
border: Border.all(
width: 1.0, color: HexColor("#CCCCCC"))),
padding: EdgeInsets.all(5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// AppText(
// TranslationBase.of(context).remarks,
// fontSize: 10,
// ),
AppTextFormField(
borderColor: Colors.white,
hintText: widget.extendedData != null
? widget.extendedData.remarks
: TranslationBase.of(context).remarks,
onChanged: (value) {
addSickLeave.remarks = value;
},
validator: (value) {
// return TextValidator().validateName(value);
},
inputFormatter: ONLY_LETTERS)
],
),
),
Container(
margin: EdgeInsets.all(
SizeConfig.widthMultiplier * 5),
child: Wrap(
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
title: widget.isExtended == true
? TranslationBase.of(context).extend
: TranslationBase.of(context).add,
onPressed: () {
if (widget.isExtended) {
model2
.extendSickLeave(
widget.extendedData)
.then((value) => (value) {
print(value);
});
} else {
model2
.addSickLeave(addSickLeave)
.then((value) => print(value));
}
},
),
],
),
),
// Column(
// children: [
// Texts(TranslationBase.of(context)
// .previousSickLeaveIssue +
// ' ')
// ],
// )
],
),
),
),
),
)));
}
getProfile() async {
Map p = await sharedPref.getObj(DOCTOR_PROFILE);
setState(() {
this.profile = p;
});
}
getClinicName(model) {
var clinicInfo = model.clinicsList
.where((i) => i['ClinicID'] == this.profile['ClinicID'])
.toList();
return clinicInfo.length > 0 ? clinicInfo[0]['ClinicDescription'] : "";
}
}

@ -33,7 +33,8 @@ class TranslationBase {
String get mobileNo => localizedValues['mobileNo'][locale.languageCode]; String get mobileNo => localizedValues['mobileNo'][locale.languageCode];
String get replySuccessfully => localizedValues['replySuccessfully'][locale.languageCode]; String get replySuccessfully =>
localizedValues['replySuccessfully'][locale.languageCode];
String get messagesScreenToolbarTitle => String get messagesScreenToolbarTitle =>
localizedValues['messagesScreenToolbarTitle'][locale.languageCode]; localizedValues['messagesScreenToolbarTitle'][locale.languageCode];
@ -79,8 +80,11 @@ class TranslationBase {
localizedValues['patientServices'][locale.languageCode]; localizedValues['patientServices'][locale.languageCode];
String get searchMedicine => String get searchMedicine =>
localizedValues['searchMedicine'][locale.languageCode]; localizedValues['searchMedicine'][locale.languageCode];
String get myReferralPatient => localizedValues['myReferralPatient'][locale.languageCode]; String get myReferralPatient =>
String get referPatient => localizedValues['referPatient'][locale.languageCode]; localizedValues['myReferralPatient'][locale.languageCode];
String get referPatient =>
localizedValues['referPatient'][locale.languageCode];
String get myReferral => localizedValues['myReferral'][locale.languageCode]; String get myReferral => localizedValues['myReferral'][locale.languageCode];
String get myReferredPatient => String get myReferredPatient =>
localizedValues['myReferredPatient'][locale.languageCode]; localizedValues['myReferredPatient'][locale.languageCode];
@ -107,8 +111,10 @@ class TranslationBase {
String get profile => localizedValues['profile'][locale.languageCode]; String get profile => localizedValues['profile'][locale.languageCode];
String get gender => localizedValues['gender'][locale.languageCode]; String get gender => localizedValues['gender'][locale.languageCode];
String get clinic => localizedValues['clinic'][locale.languageCode]; String get clinic => localizedValues['clinic'][locale.languageCode];
String get clinicSelect => localizedValues['clinicSelect'][locale.languageCode]; String get clinicSelect =>
String get doctorSelect => localizedValues['doctorSelect'][locale.languageCode]; localizedValues['clinicSelect'][locale.languageCode];
String get doctorSelect =>
localizedValues['doctorSelect'][locale.languageCode];
String get hospital => localizedValues['hospital'][locale.languageCode]; String get hospital => localizedValues['hospital'][locale.languageCode];
String get speciality => localizedValues['speciality'][locale.languageCode]; String get speciality => localizedValues['speciality'][locale.languageCode];
String get errorMessage => String get errorMessage =>
@ -122,8 +128,10 @@ class TranslationBase {
String get lab => localizedValues['lab'][locale.languageCode]; String get lab => localizedValues['lab'][locale.languageCode];
String get result => localizedValues['result'][locale.languageCode]; String get result => localizedValues['result'][locale.languageCode];
String get medicines => localizedValues['medicines'][locale.languageCode]; String get medicines => localizedValues['medicines'][locale.languageCode];
String get prescription => localizedValues['prescription'][locale.languageCode]; String get prescription =>
String get insuranceApprovals => localizedValues['insuranceApprovals'][locale.languageCode]; localizedValues['prescription'][locale.languageCode];
String get insuranceApprovals =>
localizedValues['insuranceApprovals'][locale.languageCode];
String get insurance => localizedValues['insurance'][locale.languageCode]; String get insurance => localizedValues['insurance'][locale.languageCode];
String get approvals => localizedValues['approvals'][locale.languageCode]; String get approvals => localizedValues['approvals'][locale.languageCode];
String get bodyMeasurements => String get bodyMeasurements =>
@ -145,7 +153,8 @@ class TranslationBase {
String get pleaseEnterAnswer => String get pleaseEnterAnswer =>
localizedValues['pleaseEnterAnswer'][locale.languageCode]; localizedValues['pleaseEnterAnswer'][locale.languageCode];
String get replay => localizedValues['replay'][locale.languageCode]; String get replay => localizedValues['replay'][locale.languageCode];
String get progressNote => localizedValues['progressNote'][locale.languageCode]; String get progressNote =>
localizedValues['progressNote'][locale.languageCode];
String get progress => localizedValues['progress'][locale.languageCode]; String get progress => localizedValues['progress'][locale.languageCode];
String get note => localizedValues['note'][locale.languageCode]; String get note => localizedValues['note'][locale.languageCode];
String get searchNote => localizedValues['searchNote'][locale.languageCode]; String get searchNote => localizedValues['searchNote'][locale.languageCode];
@ -223,8 +232,10 @@ class TranslationBase {
String get urgent => localizedValues['urgent'][locale.languageCode]; String get urgent => localizedValues['urgent'][locale.languageCode];
String get routine => localizedValues['routine'][locale.languageCode]; String get routine => localizedValues['routine'][locale.languageCode];
String get send => localizedValues['send'][locale.languageCode]; String get send => localizedValues['send'][locale.languageCode];
String get referralFrequency => localizedValues['referralFrequency'][locale.languageCode]; String get referralFrequency =>
String get selectReferralFrequency => localizedValues['selectReferralFrequency'][locale.languageCode]; localizedValues['referralFrequency'][locale.languageCode];
String get selectReferralFrequency =>
localizedValues['selectReferralFrequency'][locale.languageCode];
String get clinicalDetailsAndRemarks => String get clinicalDetailsAndRemarks =>
localizedValues['clinicalDetailsAndRemarks'][locale.languageCode]; localizedValues['clinicalDetailsAndRemarks'][locale.languageCode];
String get remarks => localizedValues['remarks'][locale.languageCode]; String get remarks => localizedValues['remarks'][locale.languageCode];
@ -291,34 +302,78 @@ class TranslationBase {
localizedValues['moreThan3Letter'][locale.languageCode]; localizedValues['moreThan3Letter'][locale.languageCode];
String get gender2 => localizedValues['gender2'][locale.languageCode]; String get gender2 => localizedValues['gender2'][locale.languageCode];
String get age2 => localizedValues['age2'][locale.languageCode]; String get age2 => localizedValues['age2'][locale.languageCode];
String get admissionDetail => localizedValues['admissionDetail'][locale.languageCode]; String get sickleave => localizedValues['sick-leaves'][locale.languageCode];
String get patientSick =>
localizedValues['patient-sick'][locale.languageCode];
String get leave => localizedValues['leave'][locale.languageCode];
String get submit => localizedValues['submit'][locale.languageCode];
String get doctorName => localizedValues['doc-name'][locale.languageCode];
String get clinicName => localizedValues['clinicname'][locale.languageCode];
String get sickLeaveDate =>
localizedValues['sick-leave-date'][locale.languageCode];
String get sickLeaveDays =>
localizedValues['sick-leave-days'][locale.languageCode];
String get admissionDetail =>
localizedValues['admissionDetail'][locale.languageCode];
String get dateTime => localizedValues['dateTime'][locale.languageCode]; String get dateTime => localizedValues['dateTime'][locale.languageCode];
String get admissionNo => localizedValues['admissionNo'][locale.languageCode]; String get admissionNo => localizedValues['admissionNo'][locale.languageCode];
String get losNo => localizedValues['losNo'][locale.languageCode]; String get losNo => localizedValues['losNo'][locale.languageCode];
String get area => localizedValues['area'][locale.languageCode]; String get area => localizedValues['area'][locale.languageCode];
String get room => localizedValues['room'][locale.languageCode]; String get room => localizedValues['room'][locale.languageCode];
String get bed => localizedValues['bed'][locale.languageCode]; String get bed => localizedValues['bed'][locale.languageCode];
String get previousSickLeaveIssue =>
localizedValues['prevoius-sickleave-issed'][locale.languageCode];
String get noSickLeaveApplied =>
localizedValues['no-sickleve-applied'][locale.languageCode];
String get applyNow => localizedValues['applynow'][locale.languageCode];
String get addSickLeave =>
localizedValues['add-sickleave'][locale.languageCode];
String get add => localizedValues['add'][locale.languageCode];
String get approved => localizedValues['approved'][locale.languageCode];
String get extended => localizedValues['extended'][locale.languageCode];
String get pending => localizedValues['pending'][locale.languageCode];
String get leaveStartDate =>
localizedValues['leave-start-date'][locale.languageCode];
String get daysSickleave =>
localizedValues['days-sick-leave'][locale.languageCode];
String get extend => localizedValues['extend'][locale.languageCode];
String get extendSickLeave =>
localizedValues['extend-sickleave'][locale.languageCode];
String get targetPatient =>
localizedValues['patient-target'][locale.languageCode];
String get noPrescription =>
localizedValues['no-priscription-listed'][locale.languageCode];
String get next => localizedValues['next'][locale.languageCode]; String get next => localizedValues['next'][locale.languageCode];
String get healthRecordInformation => localizedValues['healthRecordInformation'][locale.languageCode]; String get healthRecordInformation =>
String get emptyMessage => localizedValues['empty-message'][locale.languageCode]; localizedValues['healthRecordInformation'][locale.languageCode];
String get chiefComplaintLength => localizedValues['chiefComplaintLength'][locale.languageCode]; String get emptyMessage =>
localizedValues['empty-message'][locale.languageCode];
String get chiefComplaintLength =>
localizedValues['chiefComplaintLength'][locale.languageCode];
String get referTo => localizedValues['referTo'][locale.languageCode]; String get referTo => localizedValues['referTo'][locale.languageCode];
String get referredFrom => localizedValues['referredFrom'][locale.languageCode]; String get referredFrom =>
localizedValues['referredFrom'][locale.languageCode];
String get branch => localizedValues['branch'][locale.languageCode]; String get branch => localizedValues['branch'][locale.languageCode];
String get chooseAppointment => localizedValues['chooseAppointment'][locale.languageCode]; String get chooseAppointment =>
String get appointmentNo => localizedValues['appointmentNo'][locale.languageCode]; localizedValues['chooseAppointment'][locale.languageCode];
String get appointmentNo =>
localizedValues['appointmentNo'][locale.languageCode];
String get refer => localizedValues['refer'][locale.languageCode]; String get refer => localizedValues['refer'][locale.languageCode];
String get approved => localizedValues['approved'][locale.languageCode];
String get rejected => localizedValues['rejected'][locale.languageCode]; String get rejected => localizedValues['rejected'][locale.languageCode];
String get sameBranch => localizedValues['sameBranch'][locale.languageCode]; String get sameBranch => localizedValues['sameBranch'][locale.languageCode];
String get otherBranch => localizedValues['otherBranch'][locale.languageCode]; String get otherBranch => localizedValues['otherBranch'][locale.languageCode];
String get dr => localizedValues['dr'][locale.languageCode]; String get dr => localizedValues['dr'][locale.languageCode];
String get previewHealth => localizedValues['previewHealth'][locale.languageCode]; String get previewHealth =>
String get summaryReport => localizedValues['summaryReport'][locale.languageCode]; localizedValues['previewHealth'][locale.languageCode];
String get summaryReport =>
localizedValues['summaryReport'][locale.languageCode];
String get accept => localizedValues['accept'][locale.languageCode]; String get accept => localizedValues['accept'][locale.languageCode];
String get reject => localizedValues['reject'][locale.languageCode]; String get reject => localizedValues['reject'][locale.languageCode];
String get noAppointmentsErrorMsg => localizedValues['noAppointmentsErrorMsg'][locale.languageCode]; String get noAppointmentsErrorMsg =>
localizedValues['noAppointmentsErrorMsg'][locale.languageCode];
} }
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -363,16 +363,17 @@ class _VerifyAccountState extends State<VerifyAccount> {
"IsLoginForDoctorApp": true, "IsLoginForDoctorApp": true,
"IsSilentLogIN": false "IsSilentLogIN": false
}; };
CheckActivationCodeRequestModel checkActivationCodeForDoctorApp = new CheckActivationCodeRequestModel( CheckActivationCodeRequestModel checkActivationCodeForDoctorApp =
new CheckActivationCodeRequestModel(
zipCode: _loggedUser['ZipCode'], zipCode: _loggedUser['ZipCode'],
mobileNumber: _loggedUser['MobileNumber'], mobileNumber: _loggedUser['MobileNumber'],
projectID: await sharedPref.getInt(PROJECT_ID), projectID: await sharedPref.getInt(PROJECT_ID),
logInTokenID: await sharedPref.getString(LOGIN_TOKEN_ID), logInTokenID: await sharedPref.getString(LOGIN_TOKEN_ID),
activationCode: activationCode, activationCode: activationCode,
generalid: "Cs2020@2016\$2958" generalid: "Cs2020@2016\$2958");
);
authProv.checkActivationCodeForDoctorApp(checkActivationCodeForDoctorApp) authProv
.checkActivationCodeForDoctorApp(checkActivationCodeForDoctorApp)
.then((res) async { .then((res) async {
if (res['MessageStatus'] == 1) { if (res['MessageStatus'] == 1) {
sharedPref.setString(TOKEN, res['AuthenticationTokenID']); sharedPref.setString(TOKEN, res['AuthenticationTokenID']);
@ -406,10 +407,17 @@ class _VerifyAccountState extends State<VerifyAccount> {
Map<String, dynamic> profile, Function changeLoadingStata) { Map<String, dynamic> profile, Function changeLoadingStata) {
var doctor = DoctorProfileModel.fromJson(profile); var doctor = DoctorProfileModel.fromJson(profile);
authProv.setDoctorProfile(doctor); authProv.setDoctorProfile(doctor);
sharedPref.setObj(DOCTOR_PROFILE, profile);
this.getDashboard(doctor, changeLoadingStata);
}
getDashboard(doctor, Function changeLoadingStata) {
// authProv.getDashboard(doctor).then((value) {
// print(value);
changeLoadingStata(false); changeLoadingStata(false);
sharedPref.setObj(DOCTOR_PROFILE, profile); // sharedPref.setObj(DASHBOARD_DATA, value);
Navigator.of(context).pushReplacementNamed(HOME); Navigator.of(context).pushReplacementNamed(HOME);
// });
} }
Future<dynamic> _asyncSimpleDialog( Future<dynamic> _asyncSimpleDialog(

@ -0,0 +1,13 @@
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:flutter/material.dart';
class MedicationDetails extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: [
AppText('MEDICATION'),
],
);
}
}

@ -1,11 +1,13 @@
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/models/patient/prescription/prescription_report_for_in_patient.dart'; import 'package:doctor_app_flutter/models/patient/prescription/prescription_report_for_in_patient.dart';
import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/routes.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.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/card_with_bgNew_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.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 'large_avatar.dart'; import 'large_avatar.dart';
@ -19,7 +21,41 @@ class PrescriptionInPatientWidget extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
child: prescriptionReportForInPatientList.length == 0 child: prescriptionReportForInPatientList.length == 0
? DrAppEmbeddedError(error: 'You don\'t have any Prescriptions') ? Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
padding: EdgeInsets.all(40),
decoration: BoxDecoration(
border:
Border.all(color: HexColor('#B8382C'), width: 4),
borderRadius: BorderRadius.all(Radius.circular(100))),
child: IconButton(
icon: Icon(
Icons.add,
size: 35,
),
onPressed: () {
// openAddPrescription(context);
}),
),
Padding(
child: AppText(
TranslationBase.of(context).noPrescription,
fontWeight: FontWeight.bold,
),
padding: EdgeInsets.all(10),
),
AppText(
TranslationBase.of(context).applyNow,
fontWeight: FontWeight.bold,
color: HexColor('#B8382C'),
)
],
),
))
: Container( : Container(
margin: EdgeInsets.fromLTRB(SizeConfig.realScreenWidth * 0.05, 0, margin: EdgeInsets.fromLTRB(SizeConfig.realScreenWidth * 0.05, 0,
SizeConfig.realScreenWidth * 0.05, 0), SizeConfig.realScreenWidth * 0.05, 0),
@ -28,8 +64,11 @@ class PrescriptionInPatientWidget extends StatelessWidget {
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return InkWell( return InkWell(
onTap: () { onTap: () {
Navigator.of(context).pushNamed(IN_PATIENT_PRESCRIPTIONS_DETAILS, arguments: { Navigator.of(context).pushNamed(
'prescription': prescriptionReportForInPatientList[index] IN_PATIENT_PRESCRIPTIONS_DETAILS,
arguments: {
'prescription':
prescriptionReportForInPatientList[index]
}); });
}, },
child: CardWithBgWidgetNew( child: CardWithBgWidgetNew(

@ -1,11 +1,14 @@
import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/models/patient/prescription/prescription_res_model.dart'; import 'package:doctor_app_flutter/models/patient/prescription/prescription_res_model.dart';
import 'package:doctor_app_flutter/screens/patients/out_patient_prescription_details_screen.dart'; import 'package:doctor_app_flutter/screens/patients/out_patient_prescription_details_screen.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/medication.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/card_with_bgNew_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.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 'large_avatar.dart'; import 'large_avatar.dart';
@ -18,7 +21,41 @@ class PrescriptionOutPatientWidget extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
child: patientPrescriptionsList.length == 0 child: patientPrescriptionsList.length == 0
? DrAppEmbeddedError(error: 'You don\'t have any Prescriptions') ? Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
padding: EdgeInsets.all(40),
decoration: BoxDecoration(
border:
Border.all(color: HexColor('#B8382C'), width: 4),
borderRadius: BorderRadius.all(Radius.circular(100))),
child: IconButton(
icon: Icon(
Icons.add,
size: 35,
),
onPressed: () {
openAddPrescription(context);
}),
),
Padding(
child: AppText(
TranslationBase.of(context).noPrescription,
fontWeight: FontWeight.bold,
),
padding: EdgeInsets.all(10),
),
AppText(
TranslationBase.of(context).applyNow,
fontWeight: FontWeight.bold,
color: HexColor('#B8382C'),
)
],
),
))
: Container( : Container(
margin: EdgeInsets.fromLTRB(SizeConfig.realScreenWidth * 0.05, 0, margin: EdgeInsets.fromLTRB(SizeConfig.realScreenWidth * 0.05, 0,
SizeConfig.realScreenWidth * 0.05, 0), SizeConfig.realScreenWidth * 0.05, 0),
@ -91,4 +128,12 @@ class PrescriptionOutPatientWidget extends StatelessWidget {
), ),
); );
} }
openAddPrescription(BuildContext context) {
showModalBottomSheet(
context: context,
builder: (context) {
return MedicationDetails();
});
}
} }

@ -27,7 +27,8 @@ class ProfileMedicalInfoWidget extends StatelessWidget {
mainAxisSpacing: 20, mainAxisSpacing: 20,
crossAxisCount: 2, crossAxisCount: 2,
childAspectRatio: 1.5, childAspectRatio: 1.5,
children: [ PatientProfileButton( children: [
PatientProfileButton(
key: key, key: key,
patient: patient, patient: patient,
nameLine1: "Create New", nameLine1: "Create New",
@ -98,6 +99,15 @@ class ProfileMedicalInfoWidget extends StatelessWidget {
nameLine1: TranslationBase.of(context).orders, nameLine1: TranslationBase.of(context).orders,
nameLine2: TranslationBase.of(context).list, nameLine2: TranslationBase.of(context).list,
icon: 'radiology-1.png')), icon: 'radiology-1.png')),
Visibility(
visible: selectedPatientType != 0 && selectedPatientType != 5,
child: PatientProfileButton(
key: key,
patient: patient,
route: ADD_SICKLEAVE,
nameLine1: TranslationBase.of(context).patientSick,
nameLine2: TranslationBase.of(context).leave,
icon: 'sick_leaves_icons.png')),
]); ]);
} }
} }
@ -150,3 +160,89 @@ class CircleAvatarWidget extends StatelessWidget {
); );
} }
} }
class PatientProfileButton extends StatelessWidget {
final String nameLine1;
final String nameLine2;
final String icon;
final dynamic route;
final PatiantInformtion patient;
final String url = "assets/images/";
PatientProfileButton(
{Key key,
this.patient,
this.nameLine1,
this.nameLine2,
this.icon,
this.route})
: super(key: key);
@override
Widget build(BuildContext context) {
return new Container(
margin: new EdgeInsets.symmetric(horizontal: 4.0),
child: InkWell(
onTap: () {
navigator(context, this.route);
},
child: Column(children: <Widget>[
Container(
alignment: Alignment.topLeft,
padding: EdgeInsets.all(5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
this.nameLine1,
color: Color(0xFFB9382C),
fontWeight: FontWeight.w600,
textAlign: TextAlign.left,
fontSize: SizeConfig.textMultiplier * 2,
),
AppText(
this.nameLine2,
color: Colors.black,
fontWeight: FontWeight.w600,
textAlign: TextAlign.left,
fontSize: SizeConfig.textMultiplier * 2,
),
],
),
),
Expanded(
child: Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Container(
padding: EdgeInsets.all(10),
child: new Image.asset(url + icon))
],
)),
)
]),
),
decoration: BoxDecoration(
// border: Border.all(),
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10)),
border: Border.fromBorderSide(BorderSide(
color: Color(0xffBBBBBB),
width: 1,
)),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.2),
spreadRadius: 5,
blurRadius: 7,
offset: Offset(0, 3), // changes position of shadow
),
],
),
padding: EdgeInsets.fromLTRB(5, 10, 5, 5),
);
}
void navigator(BuildContext context, route) {
Navigator.of(context).pushNamed(route, arguments: {'patient': patient});
}
}

@ -24,6 +24,7 @@ class AppTextFormField extends FormField<String> {
ValueChanged<String> onFieldSubmitted, ValueChanged<String> onFieldSubmitted,
IconButton prefix, IconButton prefix,
String labelText, String labelText,
bool readOnly = false,
borderColor}) borderColor})
: super( : super(
onSaved: onSaved, onSaved: onSaved,
@ -37,8 +38,12 @@ class AppTextFormField extends FormField<String> {
child: TextFormField( child: TextFormField(
focusNode: focusNode, focusNode: focusNode,
keyboardType: textInputType, keyboardType: textInputType,
inputFormatters: [FilteringTextInputFormatter.allow(RegExp(inputFormatter)), inputFormatters: [
],onChanged: onChanged?? (value){ FilteringTextInputFormatter.allow(
RegExp(inputFormatter)),
],
onChanged: onChanged ??
(value) {
state.didChange(value); state.didChange(value);
}, },
textInputAction: textInputAction, textInputAction: textInputAction,
@ -47,21 +52,26 @@ class AppTextFormField extends FormField<String> {
hintText: hintText, hintText: hintText,
suffixIcon: prefix, suffixIcon: prefix,
hintStyle: TextStyle( hintStyle: TextStyle(
fontSize: SizeConfig.textMultiplier * 1.8,), fontSize: SizeConfig.textMultiplier * 1.8,
contentPadding: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 0.0), ),
contentPadding:
EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 0.0),
labelText: labelText, labelText: labelText,
labelStyle: TextStyle( labelStyle: TextStyle(
fontSize: SizeConfig.textMultiplier * 1.7,), fontSize: SizeConfig.textMultiplier * 1.7,
),
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(6)), borderRadius: BorderRadius.all(Radius.circular(6)),
borderSide: BorderSide( borderSide: BorderSide(
color: borderColor != null ? borderColor : HexColor( color: borderColor != null
"#CCCCCC")), ? borderColor
: HexColor("#CCCCCC")),
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: borderColor != null ? borderColor : HexColor( color: borderColor != null
"#CCCCCC")), ? borderColor
: HexColor("#CCCCCC")),
borderRadius: BorderRadius.all(Radius.circular(6)), borderRadius: BorderRadius.all(Radius.circular(6)),
) )
//BorderRadius.all(Radius.circular(20)); //BorderRadius.all(Radius.circular(20));

@ -20,7 +20,7 @@ class AppText extends StatefulWidget {
final bool visibility; final bool visibility;
final TextAlign textAlign; final TextAlign textAlign;
final Color backGroundcolor; final Color backGroundcolor;
final TextOverflow textOverflow;
AppText(this.data, AppText(this.data,
{this.color = Colors.black, {this.color = Colors.black,
this.fontWeight = FontWeight.normal, this.fontWeight = FontWeight.normal,
@ -33,6 +33,7 @@ class AppText extends StatefulWidget {
this.marginLeft = 0, this.marginLeft = 0,
this.visibility = true, this.visibility = true,
this.textAlign, this.textAlign,
this.textOverflow,
this.backGroundcolor = Colors.white}); this.backGroundcolor = Colors.white});
@override @override
@ -55,7 +56,7 @@ class _AppTextState extends State<AppText> {
child: Text( child: Text(
widget.data, widget.data,
textAlign: widget.textAlign, textAlign: widget.textAlign,
overflow: TextOverflow.clip, overflow: widget.textOverflow ?? TextOverflow.clip,
style: TextStyle( style: TextStyle(
color: widget.color, color: widget.color,
fontWeight: widget.fontWeight, fontWeight: widget.fontWeight,

@ -14,7 +14,7 @@ description: A new Flutter project.
version: 1.0.0+1 version: 1.0.0+1
environment: environment:
sdk: ">=2.6.0 <3.0.0" sdk: ">=2.8.0 <3.0.0"
dependencies: dependencies:
flutter: flutter:
@ -54,7 +54,7 @@ dependencies:
cupertino_icons: ^0.1.2 cupertino_icons: ^0.1.2
# SVG # SVG
#flutter_svg: ^0.17.4 #flutter_svg: ^0.17.4
percent_indicator: "^2.1.1" percent_indicator: ^2.1.1
#Dependency Injection #Dependency Injection
get_it: ^4.0.2 get_it: ^4.0.2
@ -86,7 +86,7 @@ flutter:
assets: assets:
- assets/images/ - assets/images/
- assets/images/dashboard/ - assets/images/dashboard/
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see # An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware. # https://flutter.dev/assets-and-images/#resolution-aware.

Loading…
Cancel
Save