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);
} }

@ -1,4 +1,4 @@
const Map<String, Map<String, String>> localizedValues = { const Map<String, Map<String, String>> localizedValues = {
'dashboardScreenToolbarTitle': {'ar': 'الرئيسة', 'en': 'Home'}, 'dashboardScreenToolbarTitle': {'ar': 'الرئيسة', 'en': 'Home'},
'settings': {'en': 'Settings', 'ar': 'الاعدادات'}, 'settings': {'en': 'Settings', 'ar': 'الاعدادات'},
'language': {'en': 'App Language', 'ar': 'لغة التطبيق'}, 'language': {'en': 'App Language', 'ar': 'لغة التطبيق'},
@ -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;
@ -39,12 +39,12 @@ class LookupService extends BaseService {
}; };
await baseAppClient.post(GET_MASTER_LOOKUP_LIST, await baseAppClient.post(GET_MASTER_LOOKUP_LIST,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
setMasterLookupInCorrectArray( setMasterLookupInCorrectArray(
response['MasterLookUpList']['entityList'], masterKeys); response['MasterLookUpList']['entityList'], masterKeys);
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;
}, body: body); }, body: body);
} }
setMasterLookupInCorrectArray(entryList, MasterKeysService masterKeys) { setMasterLookupInCorrectArray(entryList, MasterKeysService masterKeys) {
@ -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
@ -275,7 +279,7 @@ class PatientService extends BaseService {
); );
} }
Future getPatientInsuranceApprovals(patient) async { Future getPatientInsuranceApprovals(patient) async {
hasError = false; hasError = false;
await baseAppClient.post( await baseAppClient.post(
@ -292,7 +296,7 @@ class PatientService extends BaseService {
); );
} }
Future getPatientProgressNote(patient) async { Future getPatientProgressNote(patient) async {
hasError = false; hasError = false;
await baseAppClient.post( await baseAppClient.post(
@ -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,19 +364,19 @@ 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 selectedClinicID, {String selectedDoctorID,
int admissionNo, String selectedClinicID,
String extension, int admissionNo,
String priority, String extension,
String frequency, String priority,
String referringDoctorRemarks, String frequency,
int patientID, String referringDoctorRemarks,
int patientTypeID, int patientID,
String roomID, int patientTypeID,
int projectID}) async { String roomID,
int projectID}) async {
hasError = false; hasError = false;
// TODO Change it to use it when we implement authentication user // TODO Change it to use it when we implement authentication user
Map profile = await sharedPref.getObj(DOCTOR_PROFILE); Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
@ -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,17 +19,16 @@ 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();
} }
getUserAuthentication() async { getUserAuthentication() async {
Map profile = await sharedPref.getObj(DOCTOR_PROFILE); Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
if (profile != null) { if (profile != null) {
doctorProfile = new DoctorProfileModel.fromJson(profile); doctorProfile = new DoctorProfileModel.fromJson(profile);
@ -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';
@ -74,13 +76,15 @@ const String PATIENT_ORDERS = 'patients/patient_orders';
const String PATIENT_INSURANCE_APPROVALS = const String PATIENT_INSURANCE_APPROVALS =
'patients/patient_insurance_approvals'; 'patients/patient_insurance_approvals';
const String VITAL_SIGN_DETAILS = 'patients/vital-sign-details'; const String VITAL_SIGN_DETAILS = 'patients/vital-sign-details';
const String CREATE_EPISODE = 'patients/create-episode'; const String CREATE_EPISODE = 'patients/create-episode';
const String BODY_MEASUREMENTS = 'patients/body-measurements'; const String BODY_MEASUREMENTS = 'patients/body-measurements';
const String IN_PATIENT_PRESCRIPTIONS_DETAILS = 'patients/prescription-details'; 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,43 +96,86 @@ class _DashboardScreenState extends State<DashboardScreen> {
actionList: projectsProvider.doctorClinicsList); actionList: projectsProvider.doctorClinicsList);
}, },
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Column(
child: AppText(
authProvider.selectedClinicName != null
? authProvider.selectedClinicName
: authProvider
.doctorProfile.clinicDescription,
fontSize: SizeConfig.textMultiplier * 1.7,
color: Colors.white,
textAlign: TextAlign.center,
),
alignment: projectsProvider.isArabic
? Alignment.topRight
: Alignment.topLeft,
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Row(
children: <Widget>[
AppText(
TranslationBase.of(context).welcome,
fontSize:
SizeConfig.textMultiplier * 1.7,
color: Colors.white,
)
],
),
SizedBox(
height: 4,
),
InkWell( InkWell(
child: Container( onTap: () async {
margin: EdgeInsets.only( showCupertinoPicker(
left: 5, decKey: '',
top: projectsProvider.isArabic context: context,
? 0 actionList: projectsProvider
: 5, .doctorClinicsList);
right: 10, },
bottom: projectsProvider.isArabic child: Row(
? 15 mainAxisAlignment:
: 7), MainAxisAlignment.spaceBetween,
child: Icon( children: <Widget>[
DoctorApp.sync_icon, Container(
color: Colors.white, child: AppText(
size: SizeConfig.textMultiplier * 1.8, authProvider.selectedClinicName !=
)), null
? authProvider
.selectedClinicName
: authProvider.doctorProfile
.clinicDescription,
fontSize:
SizeConfig.textMultiplier *
1.7,
color: Colors.white,
textAlign: TextAlign.center,
),
alignment: projectsProvider.isArabic
? Alignment.topRight
: Alignment.topLeft,
),
Row(
mainAxisAlignment:
MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
InkWell(
child: Container(
margin: EdgeInsets.only(
left: 5,
top: projectsProvider
.isArabic
? 0
: 5,
right: 10,
bottom: projectsProvider
.isArabic
? 15
: 7),
child: Icon(
DoctorApp.sync_icon,
color: Colors.white,
size: SizeConfig
.textMultiplier *
1.8,
)),
),
],
),
]),
), ),
], ],
), ),
@ -137,179 +184,437 @@ class _DashboardScreenState extends State<DashboardScreen> {
), ),
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"), margin: EdgeInsets.only(left: 10, right: 10),
borderRadius: BorderRadius.all( height: MediaQuery.of(context).orientation ==
Radius.circular(10.0), Orientation.portrait
), ? MediaQuery.of(context).size.height * 0.22
), : MediaQuery.of(context).size.height * 0.25,
margin: EdgeInsets.only(left: 10, right: 10), width: double.infinity,
height: 140, child: Row(
width: double.infinity, mainAxisAlignment: MainAxisAlignment.spaceBetween,
child: Row( crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[
crossAxisAlignment: CrossAxisAlignment.center, DashboardItem(
children: <Widget>[ onTap: () {
Divider(), setState(() {
Padding( this.isExpanded = false;
padding: const EdgeInsets.only( });
top: 8.0, bottom: 8, right: 40, left: 8), },
child: CircularPercentIndicator( child: Padding(
radius: 100, padding: const EdgeInsets.all(8.0),
animation: true, child: Column(
animationDuration: 1200, children: [
lineWidth: 7.0, Row(
percent: .75, children: [
center: Column( Expanded(
mainAxisAlignment: MainAxisAlignment.center, child: Column(
children: <Widget>[ children: [
AppText( AppText(
"38", model.dashboardItemsList
fontSize: SizeConfig.textMultiplier * 3.7, .length >
color: HexColor('#5D4C35'), 0
fontWeight: FontWeight.bold, ? isInpatient == 'in'
), ? model
AppText( .dashboardItemsList[
TranslationBase.of(context).outPatients, 0]
fontWeight: FontWeight.normal, .summaryoptions[0]
fontSize: SizeConfig.textMultiplier * 1.4, .value
color: HexColor('#5D4C35'), .toString()
), : model
], .dashboardItemsList[
1]
.summaryoptions[0]
.value
.toString()
: "",
fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 24,
),
AppText(
model.dashboardItemsList
.length >
0
? 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,
)
],
)),
Expanded(
child: Column(
children: [
AppText(
model.dashboardItemsList
.length >
0
? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[1]
.value
.toString()
: model
.dashboardItemsList[
1]
.summaryoptions[1]
.value
.toString()
: "",
fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 28,
),
AppText(
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,
)
],
)),
Expanded(
child: Column(
children: [
AppText(
model.dashboardItemsList
.length >
0
? 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(
model.dashboardItemsList
.length >
0
? isInpatient == 'in'
? model
.dashboardItemsList[
0]
.summaryoptions[3]
.value
.toString()
: model
.dashboardItemsList[
1]
.summaryoptions[3]
.value
.toString()
: "",
fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 28),
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,
), ),
circularStrokeCap: CircularStrokeCap.butt, ],
backgroundColor: Colors.blueGrey[100],
progressColor: HexColor('#B8382C'),
),
), ),
Container( ),
child: Table( collapsedChild: Container(
defaultColumnWidth: FixedColumnWidth( margin: EdgeInsets.only(left: 10, right: 10),
MediaQuery.of(context).size.width / 5), height: MediaQuery.of(context).orientation ==
// border: TableBorder.all( Orientation.portrait
// color: Colors.black26, ? MediaQuery.of(context).size.height * 0.15
// width: 1, : MediaQuery.of(context).size.height * 0.25,
// style: BorderStyle.solid), width: double.infinity,
border: TableBorder.symmetric( child: Row(
inside: BorderSide( mainAxisAlignment: MainAxisAlignment.spaceBetween,
width: 0.5, crossAxisAlignment: CrossAxisAlignment.start,
color: HexColor('#5D4C35'), children: <Widget>[
), DashboardItem(
), onTap: () {
children: [ setState(() {
TableRow( this.isExpanded = true;
children: [ this.isInpatient = 'in';
TableCell( });
child: Center( },
child: Column( child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
mainAxisAlignment:
MainAxisAlignment.start,
children: <Widget>[ children: <Widget>[
AppText( AppText(
TranslationBase.of(context).arrived, model.dashboardItemsList.length > 0
fontSize: ? getPatientCount(
SizeConfig.textMultiplier * 1.5, model.dashboardItemsList[0])
color: HexColor('#5D4C35'), : "",
),
AppText(
"23",
fontSize: fontSize:
SizeConfig.textMultiplier * 2.7, SizeConfig.textMultiplier * 6,
color: HexColor('#5D4C35'), color: Colors.white,
fontWeight: FontWeight.bold,
),
SizedBox(
height: 6,
), ),
Flexible(
child: AppText(
TranslationBase.of(context).inPatient,
color: Colors.white,
textOverflow: TextOverflow.ellipsis,
)),
], ],
), ),
)), Padding(
TableCell( padding: EdgeInsets.all(5),
child: Column( child: Column(
mainAxisAlignment:
MainAxisAlignment.end,
children: [
Icon(
DoctorApp.in_patient_white,
size: 35,
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.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>[ children: <Widget>[
AppText( AppText(
TranslationBase.of(context).er, model.dashboardItemsList.length > 0
fontSize: ? getPatientCount(
SizeConfig.textMultiplier * 1.5, model.dashboardItemsList[1])
color: HexColor('#5D4C35'), : "",
),
AppText(
"03",
fontSize: fontSize:
SizeConfig.textMultiplier * 2.7, SizeConfig.textMultiplier * 6,
color: HexColor('#5D4C35'), color: Colors.white,
fontWeight: FontWeight.bold,
),
SizedBox(
height: 6,
), ),
Flexible(
child: AppText(
TranslationBase.of(context)
.outPatients,
color: Colors.white,
textOverflow: TextOverflow.ellipsis,
)),
], ],
), ),
), Padding(
], padding: EdgeInsets.all(5),
// child: Column(
), mainAxisAlignment:
TableRow(children: [ MainAxisAlignment.end,
TableCell( children: [
child: Column( Icon(
children: <Widget>[ DoctorApp.out_patient,
SizedBox( size: 35,
height: 6, color: Colors.white,
), )
AppText( ],
TranslationBase.of(context).notArrived, ))
fontSize: ],
SizeConfig.textMultiplier * 1.5,
color: HexColor('#5D4C35'),
),
AppText(
"15",
fontSize:
SizeConfig.textMultiplier * 2.7,
color: HexColor('#5D4C35'),
fontWeight: FontWeight.bold,
),
],
),
),
TableCell(
child: Column(
children: <Widget>[
SizedBox(
height: 6,
),
AppText(
TranslationBase.of(context).walkIn,
fontSize:
SizeConfig.textMultiplier * 1.5,
color: HexColor('#5D4C35'),
),
AppText(
"04",
fontSize:
SizeConfig.textMultiplier * 2.7,
color: HexColor('#5D4C35'),
fontWeight: FontWeight.bold,
),
],
),
), ),
]), ),
], 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,
),
],
), ),
Divider(), ),
], 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,397 +290,394 @@ class _PatientsScreenState extends State<PatientsScreen> {
}); });
}); });
}, },
builder: (_, model, w) => builder: (_, model, w) => AppScaffold(
AppScaffold( appBarTitle: patientTypeTitle,
appBarTitle: patientTypeTitle, body: _isLoading
body: _isLoading ? DrAppCircularProgressIndeicator()
? DrAppCircularProgressIndeicator() : _isError
: _isError
? 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, children: <Widget>[
children: <Widget>[ Container(
Container( child: lItems == null
child: lItems == null ? Column(
? Column( crossAxisAlignment:
crossAxisAlignment: CrossAxisAlignment.start,
CrossAxisAlignment.start, children: <Widget>[
children: <Widget>[ Container(
Container( child: Center(
child: Center( child: Padding(
child: Padding( padding: const EdgeInsets.fromLTRB(
padding: const EdgeInsets.fromLTRB( 0, 0, 0, 0), //250
0, 0, 0, 0), //250 child:
child: DrAppCircularProgressIndeicator(),
DrAppCircularProgressIndeicator(), )),
)),
),
],
)
: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.only(
top: MediaQuery.of(context)
.size
.height *
0.03),
child: SERVICES_PATIANT2[
int.parse(patientType)] ==
"List_MyOutPatient"
? _locationBar(context)
: Container(),
),
SizedBox(height: 18.5),
Container(
width: SizeConfig.screenWidth * 0.9,
height: SizeConfig.screenHeight * 0.05,
child: TextField(
controller: _controller,
onChanged: (String str) {
this.searchData(str);
},
decoration: buildInputDecoration(
context,
TranslationBase.of(context)
.searchPatient),
), ),
), ],
SizedBox( )
height: 10.0, : Column(
), children: <Widget>[
Divider( Padding(
thickness: 0.8, padding: EdgeInsets.only(
color: Color(0xffCCCCCC), top: MediaQuery.of(context)
), .size
Container( .height *
decoration: BoxDecoration( 0.03),
color: Color(0Xffffffff), child: SERVICES_PATIANT2[
borderRadius: int.parse(patientType)] ==
BorderRadius.circular(20)), "List_MyOutPatient"
margin: EdgeInsets.fromLTRB(0, 0, 0, 0), ? _locationBar(context)
child: (responseModelList.length > 0) : Container(),
? Column( ),
// mainAxisAlignment: MainAxisAlignment.center, SizedBox(height: 18.5),
children: responseModelList.map( Container(
(PatiantInformtion item) { width: SizeConfig.screenWidth * 0.9,
return Container( height:
decoration: SizeConfig.screenHeight * 0.05,
myBoxDecoration(), child: TextField(
child: InkWell( controller: _controller,
child: Row( onChanged: (String str) {
children: <Widget>[ this.searchData(str);
Column( },
mainAxisAlignment: decoration: buildInputDecoration(
MainAxisAlignment context,
.start, TranslationBase.of(context)
children: <Widget>[ .searchPatient),
Padding( ),
padding: EdgeInsets ),
.only( SizedBox(
left: height: 10.0,
12.0), ),
child: Divider(
Container( thickness: 0.8,
decoration: color: Color(0xffCCCCCC),
BoxDecoration( ),
boxShadow: [ Container(
BoxShadow( decoration: BoxDecoration(
color: Color.fromRGBO( color: Color(0Xffffffff),
0, borderRadius:
0, BorderRadius.circular(20)),
0, margin:
0.08), EdgeInsets.fromLTRB(0, 0, 0, 0),
offset: Offset( child: (responseModelList.length > 0)
0.0, ? Column(
5.0), // mainAxisAlignment: MainAxisAlignment.center,
blurRadius: children: responseModelList
16.0) .map((PatiantInformtion
], item) {
borderRadius: return Container(
BorderRadius.all( decoration:
Radius.circular(35.0)), myBoxDecoration(),
color: Color( child: InkWell(
0xffCCCCCC), child: Row(
), children: <Widget>[
width: 70, Column(
height: 70, mainAxisAlignment:
child: Icon( MainAxisAlignment
item.genderDescription == .start,
"Male" children: <
? DoctorApp Widget>[
.male Padding(
: DoctorApp padding: EdgeInsets
.female_icon, .only(
size: 70, left:
color: Colors 12.0),
.white, child:
Container(
decoration:
BoxDecoration(
boxShadow: [
BoxShadow(
color: Color.fromRGBO(
0,
0,
0,
0.08),
offset: Offset(0.0,
5.0),
blurRadius:
16.0)
],
borderRadius:
BorderRadius.all(
Radius.circular(35.0)),
color: Color(
0xffCCCCCC),
),
width: 70,
height: 70,
child: Icon(
item.genderDescription ==
"Male"
? DoctorApp
.male
: DoctorApp
.female_icon,
size: 70,
color: Colors
.white,
),
), ),
), ),
), ],
], ),
),
SizedBox( SizedBox(
width: 10, width: 10,
), ),
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment CrossAxisAlignment
.start, .start,
children: [ children: [
Column( Column(
children: [ children: [
SizedBox( SizedBox(
height: height:
10.0, 10.0,
),
Padding(
padding: EdgeInsets.symmetric(
vertical:
5.5,
horizontal:
22.5),
child:
AppText(
item.firstName +
" " +
item.lastName,
fontSize:
2.0 *
SizeConfig.textMultiplier,
fontWeight:
FontWeight.bold,
backGroundcolor:
Colors.white,
), ),
), Padding(
], padding: EdgeInsets.symmetric(
), vertical:
Row( 5.5,
mainAxisAlignment: horizontal:
MainAxisAlignment 22.5),
.spaceAround, child:
children: [
Column(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: <
Widget>[
Wrap(
children: [
AppText( AppText(
TranslationBase.of(context).fileNo, item.firstName +
fontSize: 1.8 * SizeConfig.textMultiplier, " " +
fontWeight: FontWeight.bold, item.lastName,
backGroundcolor: Colors.white,
),
AppText(
item.patientId.toString(),
fontSize: 1.8 * SizeConfig.textMultiplier,
fontWeight: FontWeight.w300,
backGroundcolor: Colors.white,
),
],
),
SizedBox(
height:
2.5,
),
AppText(
'NATIONALITY: ' +
item.nationalityName.toString(),
fontSize: fontSize:
1.8 * SizeConfig.textMultiplier, 2.0 * SizeConfig.textMultiplier,
fontWeight: fontWeight:
FontWeight.bold, FontWeight.bold,
backGroundcolor: backGroundcolor:
Colors.white, Colors.white,
), ),
SizedBox( ),
height: ],
15.5, ),
), Row(
SERVICES_PATIANT2[int.parse(patientType)] == mainAxisAlignment:
"List_MyOutPatient" MainAxisAlignment
? Row( .spaceAround,
mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
children: <Widget>[ Column(
Container( crossAxisAlignment:
height: 15, CrossAxisAlignment.start,
width: 60, children: <
decoration: BoxDecoration( Widget>[
borderRadius: BorderRadius.circular(25), Wrap(
color: HexColor("#20A169"), children: [
AppText(
TranslationBase.of(context).fileNo,
fontSize: 1.8 * SizeConfig.textMultiplier,
fontWeight: FontWeight.bold,
backGroundcolor: Colors.white,
),
AppText(
item.patientId.toString(),
fontSize: 1.8 * SizeConfig.textMultiplier,
fontWeight: FontWeight.w300,
backGroundcolor: Colors.white,
),
],
),
SizedBox(
height:
2.5,
),
AppText(
'NATIONALITY: ' +
item.nationalityName.toString(),
fontSize:
1.8 * SizeConfig.textMultiplier,
fontWeight:
FontWeight.bold,
backGroundcolor:
Colors.white,
),
SizedBox(
height:
15.5,
),
SERVICES_PATIANT2[int.parse(patientType)] == "List_MyOutPatient"
? Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
height: 15,
width: 60,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
color: HexColor("#20A169"),
),
child: AppText(
item.startTime,
color: Colors.white,
fontSize: 1.5 * SizeConfig.textMultiplier,
textAlign: TextAlign.center,
fontWeight: FontWeight.bold,
),
), ),
child: AppText( SizedBox(
item.startTime, width: 3.5,
color: Colors.white,
fontSize: 1.5 * SizeConfig.textMultiplier,
textAlign: TextAlign.center,
fontWeight: FontWeight.bold,
), ),
), Container(
SizedBox( child: AppText(
width: 3.5, convertDateFormat2(item.appointmentDate.toString()),
), fontSize: 1.5 * SizeConfig.textMultiplier,
Container( fontWeight: FontWeight.bold,
child: AppText( ),
convertDateFormat2(item.appointmentDate.toString()),
fontSize: 1.5 * SizeConfig.textMultiplier,
fontWeight: FontWeight.bold,
), ),
), SizedBox(
SizedBox( height: 0.5,
height: 0.5, )
) ],
], )
) : SizedBox(
: SizedBox( height: 5,
height: 5, ),
],
),
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
// mainAxisAlignment:
// MainAxisAlignment
// .spaceBetween,
children: <
Widget>[
SizedBox(
height:
0.5,
),
SizedBox(
height:
0,
),
Wrap(
children: [
AppText(
TranslationBase.of(context).age2,
fontSize: 1.8 * SizeConfig.textMultiplier,
fontWeight: FontWeight.bold,
backGroundcolor: Colors.white,
), ),
], AppText(
), item.age.toString(),
Column( fontSize: 1.8 * SizeConfig.textMultiplier,
crossAxisAlignment: fontWeight: FontWeight.w300,
CrossAxisAlignment backGroundcolor: Colors.white,
.start, ),
// mainAxisAlignment: ],
// MainAxisAlignment ),
// .spaceBetween, SizedBox(
children: < height:
Widget>[ 2.5,
SizedBox( ),
height: Wrap(
0.5, children: [
), AppText(
SizedBox( TranslationBase.of(context).gender2,
height: fontSize: 1.8 * SizeConfig.textMultiplier,
0, fontWeight: FontWeight.bold,
), backGroundcolor: Colors.white,
Wrap( ),
children: [ AppText(
AppText( item.gender.toString() == '1' ? 'Male' : 'Female',
TranslationBase.of(context).age2, fontSize: 1.8 * SizeConfig.textMultiplier,
fontSize: 1.8 * SizeConfig.textMultiplier, fontWeight: FontWeight.w300,
fontWeight: FontWeight.bold, backGroundcolor: Colors.white,
backGroundcolor: Colors.white, ),
), ],
AppText( ),
item.age.toString(), SizedBox(
fontSize: 1.8 * SizeConfig.textMultiplier, height:
fontWeight: FontWeight.w300, 8,
backGroundcolor: Colors.white, ),
), SERVICES_PATIANT2[int.parse(patientType)] == "List_MyOutPatient"
], ? Row(
), mainAxisAlignment: MainAxisAlignment.spaceBetween,
SizedBox( children: <Widget>[
height: Container(
2.5, height: 15,
), width: 60,
Wrap( decoration: BoxDecoration(
children: [ borderRadius: BorderRadius.circular(25),
AppText( color: HexColor("#20A169"),
TranslationBase.of(context).gender2, ),
fontSize: 1.8 * SizeConfig.textMultiplier, child: AppText(
fontWeight: FontWeight.bold, item.startTime,
backGroundcolor: Colors.white, color: Colors.white,
), fontSize: 1.5 * SizeConfig.textMultiplier,
AppText( textAlign: TextAlign.center,
item.gender.toString() == '1' ? 'Male' : 'Female', fontWeight: FontWeight.bold,
fontSize: 1.8 * SizeConfig.textMultiplier, ),
fontWeight: FontWeight.w300,
backGroundcolor: Colors.white,
),
],
),
SizedBox(
height:
8,
),
SERVICES_PATIANT2[int.parse(patientType)] ==
"List_MyOutPatient"
? Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
height: 15,
width: 60,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
color: HexColor("#20A169"),
), ),
child: AppText( SizedBox(
item.startTime, width: 3.5,
color: Colors.white,
fontSize: 1.5 * SizeConfig.textMultiplier,
textAlign: TextAlign.center,
fontWeight: FontWeight.bold,
), ),
), Container(
SizedBox( child: AppText(
width: 3.5, convertDateFormat2(item.appointmentDate.toString()),
), fontSize: 1.5 * SizeConfig.textMultiplier,
Container( fontWeight: FontWeight.bold,
child: AppText( ),
convertDateFormat2(item.appointmentDate.toString()),
fontSize: 1.5 * SizeConfig.textMultiplier,
fontWeight: FontWeight.bold,
), ),
), SizedBox(
SizedBox( height: 25.5,
height: 25.5, ),
), ],
], )
) : SizedBox(
: SizedBox( height: 15,
height: 15, ),
), ],
], ),
), ],
], ),
), ],
], ),
), ),
), // Divider(color: Colors.grey)
// Divider(color: Colors.grey) ],
], ),
onTap: () {
Navigator.of(context)
.pushNamed(
PATIENTS_PROFILE,
arguments: {
"patient": item
});
},
), ),
onTap: () { );
Navigator.of(context) }).toList(),
.pushNamed( )
PATIENTS_PROFILE, : Center(
arguments: { child: DrAppEmbeddedError(
"patient": item error: TranslationBase.of(
}); context)
}, .youDontHaveAnyPatient),
), ),
);
}).toList(),
)
: Center(
child: DrAppEmbeddedError(
error: TranslationBase.of(
context)
.youDontHaveAnyPatient),
), ),
), ],
], ),
), )
) ],
], ),
), ),
), ),
),); );
} }
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 =
zipCode: _loggedUser['ZipCode'], new CheckActivationCodeRequestModel(
mobileNumber: _loggedUser['MobileNumber'], zipCode: _loggedUser['ZipCode'],
projectID: await sharedPref.getInt(PROJECT_ID), mobileNumber: _loggedUser['MobileNumber'],
logInTokenID: await sharedPref.getString(LOGIN_TOKEN_ID), projectID: await sharedPref.getInt(PROJECT_ID),
activationCode: activationCode, logInTokenID: await sharedPref.getString(LOGIN_TOKEN_ID),
generalid: "Cs2020@2016\$2958" activationCode: activationCode,
); 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']);
@ -381,7 +382,7 @@ class _VerifyAccountState extends State<VerifyAccount> {
res['List_DoctorProfile'][0], changeLoadingStata); res['List_DoctorProfile'][0], changeLoadingStata);
} else { } else {
ClinicModel clinic = ClinicModel clinic =
ClinicModel.fromJson(res['List_DoctorsClinic'][0]); ClinicModel.fromJson(res['List_DoctorsClinic'][0]);
getDocProfiles(clinic, changeLoadingStata); getDocProfiles(clinic, changeLoadingStata);
} }
} else { } else {
@ -404,12 +405,19 @@ class _VerifyAccountState extends State<VerifyAccount> {
*/ */
loginProcessCompleted( loginProcessCompleted(
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,9 +64,12 @@ 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(
widget: Column( widget: Column(

@ -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,13 +27,14 @@ class ProfileMedicalInfoWidget extends StatelessWidget {
mainAxisSpacing: 20, mainAxisSpacing: 20,
crossAxisCount: 2, crossAxisCount: 2,
childAspectRatio: 1.5, childAspectRatio: 1.5,
children: [ PatientProfileButton( children: [
key: key, PatientProfileButton(
patient: patient, key: key,
nameLine1: "Create New", patient: patient,
nameLine2: "Episode", nameLine1: "Create New",
route: CREATE_EPISODE, nameLine2: "Episode",
icon: 'heartbeat.png'), route: CREATE_EPISODE,
icon: 'heartbeat.png'),
PatientProfileButton( PatientProfileButton(
key: key, key: key,
patient: patient, patient: patient,
@ -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,
@ -33,44 +34,53 @@ class AppTextFormField extends FormField<String> {
return Column( return Column(
children: <Widget>[ children: <Widget>[
SizedBox( SizedBox(
height: 40.0, height: 40.0,
child: TextFormField( child: TextFormField(
focusNode: focusNode, focusNode: focusNode,
keyboardType: textInputType, keyboardType: textInputType,
inputFormatters: [FilteringTextInputFormatter.allow(RegExp(inputFormatter)), inputFormatters: [
],onChanged: onChanged?? (value){ FilteringTextInputFormatter.allow(
state.didChange(value); RegExp(inputFormatter)),
}, ],
textInputAction: textInputAction, onChanged: onChanged ??
onFieldSubmitted: onFieldSubmitted, (value) {
decoration: InputDecoration( state.didChange(value);
hintText: hintText, },
suffixIcon: prefix, textInputAction: textInputAction,
hintStyle: TextStyle( onFieldSubmitted: onFieldSubmitted,
fontSize: SizeConfig.textMultiplier * 1.8,), decoration: InputDecoration(
contentPadding: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 0.0), hintText: hintText,
labelText: labelText, suffixIcon: prefix,
labelStyle: TextStyle( hintStyle: TextStyle(
fontSize: SizeConfig.textMultiplier * 1.7,), fontSize: SizeConfig.textMultiplier * 1.8,
enabledBorder: OutlineInputBorder( ),
borderRadius: BorderRadius.all(Radius.circular(6)), contentPadding:
borderSide: BorderSide( EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 0.0),
color: borderColor != null ? borderColor : HexColor( labelText: labelText,
"#CCCCCC")), labelStyle: TextStyle(
), fontSize: SizeConfig.textMultiplier * 1.7,
focusedBorder: OutlineInputBorder( ),
borderSide: BorderSide( enabledBorder: OutlineInputBorder(
color: borderColor != null ? borderColor : HexColor( borderRadius: BorderRadius.all(Radius.circular(6)),
"#CCCCCC")), borderSide: BorderSide(
borderRadius: BorderRadius.all(Radius.circular(6)), color: borderColor != null
) ? borderColor
//BorderRadius.all(Radius.circular(20)); : HexColor("#CCCCCC")),
), ),
onTap: onTap, focusedBorder: OutlineInputBorder(
controller: controller, borderSide: BorderSide(
), color: borderColor != null
), ? borderColor
state.hasError : HexColor("#CCCCCC")),
borderRadius: BorderRadius.all(Radius.circular(6)),
)
//BorderRadius.all(Radius.circular(20));
),
onTap: onTap,
controller: controller,
),
),
state.hasError
? Text( ? Text(
state.errorText, state.errorText,
style: TextStyle(color: Colors.red), style: TextStyle(color: Colors.red),

@ -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