er_location
Mohammad Aljammal 6 years ago
commit 0122cc8914

Binary file not shown.

@ -0,0 +1,16 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICkDCCAXgCAQAwSzEjMCEGCSqGSIb3DQEJARYUaGFyb29uNjEzOEBnbWFpbC5j
b20xFzAVBgNVBAMMDk1vaGFtZWQgTWVrYXd5MQswCQYDVQQGEwJBRTCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBALcPrk09MmhQhRNe8LYdaeN4mYtoKJg3
SndMLgpxnaRqP7a6f4sp118wCFZsTXnwhPVP4DzmXWc2AzZtsusmhdw1tzNFtme0
PtEjDXIPI2lHU3Zhi2zukZdAVxF+uNi3pcp0axina60ZQciIfb/7Fx6hNbqpk90E
O8a2Ob17Wq/ZTYIP4H7ZGydUe2ra9QyDtjmGj9vpEv+xXYWX685sgEylTG14DSOP
ozGsQmaf+QCMbCT3osq7idWc1IQ+3Oed0kUTx1jmRtZwPzQkJJ1Bx3vYSXN/EOlb
u+ei1Nqtc14aVCYvmcuvGDtMyRtw6w+syCw2CpJCPGNkxNz+EH9h+EUCAwEAAaAA
MA0GCSqGSIb3DQEBCwUAA4IBAQBYdu2AaZY6kReuT1Xp8ktlyPfjBRKhPPChuaeR
tFnYMsJtG0aIA/xOu4/RYDgmL92seimULXd9DIPvkJ2DuaB+bdfGTw0qXUlihkm8
ui5O0L2F9OZbQxJogvTmrMsKnkoR27O5vyfCn9VMOLk3x1nyEzAXIj/5GHWw9T6t
r65jPUOfm6ikiZtICBzSaTPBtyfZB8mrbwG2dpOvVNSa1dj3xip4L8CL6TxH+qM3
+N90QFYjvjphJkpn2Kt0ow9IyIyeqJbIYJmsWoV9pXddOHCjKdTWUjq7D2Jn3eUA
DAKjKgVqF4/dU10k7EtSfrw01aHLXjj5FxsD5YhVrgTA5xSq
-----END CERTIFICATE REQUEST-----

Binary file not shown.

@ -0,0 +1,16 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICkDCCAXgCAQAwSzEjMCEGCSqGSIb3DQEJARYUaGFyb29uNjEzOEBnbWFpbC5j
b20xFzAVBgNVBAMMDk1vaGFtZWQgTWVrYXd5MQswCQYDVQQGEwJBRTCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnHqsyE7WfiVcE1Lpa4t4OVO6qlll2q
1djs0XG06R/dlDtIqv4940/XLj+hU93mzAcVvFW4DSIEdD3InM3+T6oMTjPu6meU
69h9ryaVkluQRrT/tdGI1EKO4MWGMe4MDIt7DqMhMfAcxTwekwdxdKaCEhaw3qnA
l/64AelY6URW1pHHJMA0VV7j+pE3jVNai+muMXPrhQ1VrOrV8FftpY3bEeRJR2Cl
T0tv0LhEMu4SfLnVWCzGQQC82hilDw3rH3ZDs8DFxF9agNVdwKlYamarh1dQXwRq
Yx2+sjY1/51r9L4VS+GAh9ECxz0e+43NpzfZ/N+mTeDYKDepaBwPQ6kCAwEAAaAA
MA0GCSqGSIb3DQEBCwUAA4IBAQB89OyLfywKT7ftmpEqCmgsmaJexb580q9w8wOk
1JhJkNV5ec+p1dnge2NZeJ4LGII/5wmPj1vANNW0GZdmJDgnC+2gg9toq1QLCAsF
rW7/LMpgAoEH+P5bhrHV9RRv6BQi0ZmN0apBHjp/pqZfm2Cl5jQPEWjUEf2tIF4l
LSKdok6IPO9n4Fgyk0XdUNSEhgVhsLtZkGiXnkI1YovKDnupTFYPXMLp103bc9zP
xDxwscvOysNDijlzZAkJPg2z8NrJIRDrKvLRHzxQwZ/1LHVB/51bp/1iyks3vOjh
qw5XVsrtGAjCjU9md7q3XkPSyKzhK9UqPdOxdvl1OY0KKIIY
-----END CERTIFICATE REQUEST-----

Binary file not shown.

Binary file not shown.

@ -0,0 +1,17 @@
package io.flutter.plugins.firebasemessaging;
import android.content.Intent;
import com.google.firebase.messaging.RemoteMessage;
public class CustomFlutterFirebaseMessagingService extends FlutterFirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getData().containsKey("is_call")) {
Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());
startActivity(intent);
super.onMessageReceived(remoteMessage);
} else
super.onMessageReceived(remoteMessage);
}
}

@ -0,0 +1,17 @@
package io.flutter.plugins.firebasemessaging;
import android.content.Intent;
import com.google.firebase.messaging.RemoteMessage;
public class CustomFlutterFirebaseMessagingService extends FlutterFirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getData().containsKey("is_call")) {
Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());
startActivity(intent);
super.onMessageReceived(remoteMessage);
} else
super.onMessageReceived(remoteMessage);
}
}

@ -6,6 +6,7 @@
additional functionality it is fine to subclass or reimplement additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. --> FlutterApplication and put your custom class here. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />

@ -6,7 +6,7 @@ buildscript {
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.4.2' classpath 'com.android.tools.build:gradle:4.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.2' classpath 'com.google.gms:google-services:4.3.2'
} }

@ -1,6 +1,6 @@
#Fri Jun 23 08:50:38 CEST 2017 #Thu Sep 03 16:26:30 EEST 2020
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

@ -7,7 +7,7 @@ const MAX_SMALL_SCREEN = 660;
const BASE_URL = 'https://hmgwebservices.com/'; const BASE_URL = 'https://hmgwebservices.com/';
const GET_PROJECT = '/Lists.svc/REST/GetProject'; const GET_PROJECT = 'Services/Lists.svc/REST/GetProject';
///Doctor ///Doctor
const GET_MY_DOCTOR = const GET_MY_DOCTOR =
@ -28,8 +28,8 @@ const GET_PRESCRIPTION_REPORT_ENH =
///Lab Order ///Lab Order
const GET_Patient_LAB_ORDERS = 'Services/Patients.svc/REST/GetPatientLabOrders'; const GET_Patient_LAB_ORDERS = 'Services/Patients.svc/REST/GetPatientLabOrders';
const GET_Patient_LAB_SPECIAL_RESULT = const GET_Patient_LAB_SPECIAL_RESULT = 'Services/Patients.svc/REST/GetPatientLabSpecialResults';
'Services/Patients.svc/REST/GetPatientLabSpecialResults'; const GET_Patient_LAB_RESULT = '/Services/Patients.svc/REST/GetPatientLabResults';
/// ///
const GET_PATIENT_ORDERS = 'Services/Patients.svc/REST/GetPatientRadOrders'; const GET_PATIENT_ORDERS = 'Services/Patients.svc/REST/GetPatientRadOrders';
@ -43,12 +43,25 @@ const SEND_RAD_REPORT_EMAIL =
const SEND_FEEDBACK = 'Services/COCWS.svc/REST/InsertCOCItemInSPList'; const SEND_FEEDBACK = 'Services/COCWS.svc/REST/InsertCOCItemInSPList';
const GET_STATUS_FOR_COCO = 'Services/COCWS.svc/REST/GetStatusforCOC'; const GET_STATUS_FOR_COCO = 'Services/COCWS.svc/REST/GetStatusforCOC';
const GET_PATIENT_AppointmentHistory = const GET_PATIENT_AppointmentHistory =
'Services/Doctors.svc/REST/PateintHasAppoimentHistory'; 'Services'
'/Doctors.svc/REST/PateintHasAppoimentHistory';
///VITAL SIGN ///VITAL SIGN
const GET_PATIENT_VITAL_SIGN = const GET_PATIENT_VITAL_SIGN =
'Services/Doctors.svc/REST/Doctor_GetPatientVitalSign'; 'Services/Doctors.svc/REST/Doctor_GetPatientVitalSign';
///Er Nearest
const GET_NEAREST_HOSPITAL=
'Services/Patients.svc/REST/Patient_GetProjectAvgERWaitingTime';
///Er Nearest
const GET_AMBULANCE_REQUEST=
'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod';
///Reports ///Reports
const REPORTS = 'Services/Doctors.svc/REST/GetPatientMedicalReportStatusInfo'; const REPORTS = 'Services/Doctors.svc/REST/GetPatientMedicalReportStatusInfo';
const INSERT_REQUEST_FOR_MEDICAL_REPORT = const INSERT_REQUEST_FOR_MEDICAL_REPORT =
@ -69,9 +82,15 @@ const GET_QR_PARKING = '/Services/SWP.svc/REST/GetQRParkingByID';
//URL to get clinic list //URL to get clinic list
const GET_CLINICS_LIST_URL = "Services/lists.svc/REST/GetClinicCentralized"; const GET_CLINICS_LIST_URL = "Services/lists.svc/REST/GetClinicCentralized";
//URL to get projects list
const GET_PROJECTS_LIST = 'Services/Lists.svc/REST/GetProject';
//URL to get doctors list //URL to get doctors list
const GET_DOCTORS_LIST_URL = "Services/Doctors.svc/REST/SearchDoctorsByTime"; const GET_DOCTORS_LIST_URL = "Services/Doctors.svc/REST/SearchDoctorsByTime";
//URL to dental doctors list
const GET_DENTAL_DOCTORS_LIST_URL = "Services/Doctors.svc/REST/Dental_DoctorChiefComplaintMapping";
//URL to get doctor free slots //URL to get doctor free slots
const GET_DOCTOR_FREE_SLOTS = "Services/Doctors.svc/REST/GetDoctorFreeSlots"; const GET_DOCTOR_FREE_SLOTS = "Services/Doctors.svc/REST/GetDoctorFreeSlots";
@ -141,6 +160,10 @@ const CANCEL_LIVECARE_REQUEST =
const SEND_LIVECARE_INVOICE_EMAIL = const SEND_LIVECARE_INVOICE_EMAIL =
'Services/Notifications.svc/REST/SendInvoiceForLiveCare'; 'Services/Notifications.svc/REST/SendInvoiceForLiveCare';
const GET_USER_TERMS ='/Services/Patients.svc/REST/GetUserTermsAndConditions';
const UPDATE_HEALTH_TERMS ='/services/Patients.svc/REST/UpdatePateintHealthSummaryReport';
//URL to get medicine and pharmacies list //URL to get medicine and pharmacies list
const CHANNEL = 3; const CHANNEL = 3;
const GENERAL_ID = 'Cs2020@2016\$2958'; const GENERAL_ID = 'Cs2020@2016\$2958';
@ -153,7 +176,6 @@ const SESSION_ID = 'TMRhVmkGhOsvamErw';
const IS_DENTAL_ALLOWED_BACKEND = false; const IS_DENTAL_ALLOWED_BACKEND = false;
const PATIENT_TYPE = 1; const PATIENT_TYPE = 1;
const PATIENT_TYPE_ID = 1; const PATIENT_TYPE_ID = 1;
var DeviceTypeID = Platform.isIOS ? 1 : 2; var DeviceTypeID = Platform.isIOS ? 1 : 2;
const LANGUAGE_ID = 2; const LANGUAGE_ID = 2;
const GET_PHARMCY_ITEMS = "Services/Lists.svc/REST/GetPharmcyItems_Region"; const GET_PHARMCY_ITEMS = "Services/Lists.svc/REST/GetPharmcyItems_Region";
@ -168,6 +190,21 @@ const GET_PAtIENTS_INSURANCE_APPROVALS =
"Services/Patients.svc/REST/GetApprovalStatus"; "Services/Patients.svc/REST/GetApprovalStatus";
const SEARCH_BOT = 'HabibiChatBotApi/BotInterface/GetVoiceCommandResponse'; const SEARCH_BOT = 'HabibiChatBotApi/BotInterface/GetVoiceCommandResponse';
const GET_VACCINATIONS_ITEMS = "/Services/ERP.svc/REST/GET_VACCINATIONS_ITEMS";
const GET_VACCINATION_ONHAND = "/Services/ERP.svc/REST/GET_VACCINATION_ONHAND";
const GET_PATIENT_SICK_LEAVE = 'Services/Patients.svc/REST/GetPatientSickLeave';
const SendSickLeaveEmail = 'Services/Notifications.svc/REST/SendSickLeaveEmail';
const GET_PATIENT_AdVANCE_BALANCE_AMOUNT = 'Services/Patients.svc/REST/GetPatientAdvanceBalanceAmount';
const GET_PATIENT_INFO_BY_ID = 'Services/Doctors.svc/REST/GetPatientInfoByPatientID';
const GET_PATIENT_INFO_BY_ID_AND_MOBILE_NUMBER = 'Services/Patients.svc/REST/AP_GetPatientInfoByPatientIDandMobileNumber';
const SEND_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT = 'Services/Authentication.svc/REST/SendActivationCodeForAdvancePayment';
const CHECK_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT = 'Services/Authentication.svc/REST/CheckActivationCodeForAdvancePayment';
const TIMER_MIN = 10;
class AppGlobal { class AppGlobal {
static var context; static var context;

@ -227,6 +227,7 @@ const Map<String, Map<String, String>> localizedValues = {
'ar': 'مسح فوق رمز الاستجابة السريعة للتحقق في الجهاز في المستشفى' 'ar': 'مسح فوق رمز الاستجابة السريعة للتحقق في الجهاز في المستشفى'
}, },
"sendEmail": {"en": "Send Email", "ar": "ارسال نسخة"}, "sendEmail": {"en": "Send Email", "ar": "ارسال نسخة"},
"EmailSentSuccessfully": {"en": "Email Sent Successfully", "ar": "تم إرسال البريد الإلكتروني بنجاح"},
"close": {"en": "Close", "ar": "مغلق"}, "close": {"en": "Close", "ar": "مغلق"},
"booked": {"en": "Booked", "ar": "محجوز"}, "booked": {"en": "Booked", "ar": "محجوز"},
"confirmed": {"en": "Confirmed", "ar": "مؤكد"}, "confirmed": {"en": "Confirmed", "ar": "مؤكد"},
@ -365,23 +366,23 @@ const Map<String, Map<String, String>> localizedValues = {
"medicalProfile": {"en": "Medical Profile", 'ar': 'الملف الطبي'}, "medicalProfile": {"en": "Medical Profile", 'ar': 'الملف الطبي'},
"consultation": {"en": "Consultation", "ar": "استشارة"}, "consultation": {"en": "Consultation", "ar": "استشارة"},
"logs": {"en": "Logs", "ar": "السجلات"}, "logs": {"en": "Logs", "ar": "السجلات"},
"parking": {"en": "Parking", "ar": "مواقف"},
"alhabiServices": {"en": "HMG Service", "ar": "خدمات الحبيب"},
"parkingTitle": {
"en":
"Car service, car service, service to save parking information, return to it later, 1- By clicking on (Read the code), save the parking data. 2- By clicking on the button (view my car park), it shows you the cars location in Google Maps. 3- Read another position by pressing the Clear Position Data button.",
"ar":
" خدمة المواقف، تتيح هذه الخدمة للمستخدم معلومات عن موقف السيارة ليسهل عليه العودة لها لاحقاً ، 1- بالضغط على زر(قراءة الكود) تستطيع حفظ البيانات الخاصة بالموقف. 2-بالضغط على زر(عرض موقف سيارتي) يعرض لك موقع السيارة في خرائط قوقل. 3- لإعادة قراءة موقف آخرعن طريق الضغط على زر(مسح بيانات الموقف). "
},
"readBarcode": {"en": "Read Barcode", "ar": "قراءة الكود"},
"showMyPark": {"en": "Show My Park", "ar": "عرض بارك"},
"clearMyData": {"en": "clear My Data", "ar": "امسح البيانات"},
"floor": {"en": "Floor:", "ar": "الطابق"},
"gate": {"en": "Gate:", "ar": "بوابة"},
"building": {"en": "Building:", "ar": "المبنى"},
"branch": {"en": "Branch:", "ar": "الفرع"},
"emergencyServices": {"en": "Emergency Services:", "ar": "خدمات الطوارئ"},
"textToSpeech": {"en": "How May I Help You?", "ar": "كيف يمكنني مساعدتك؟"}, "textToSpeech": {"en": "How May I Help You?", "ar": "كيف يمكنني مساعدتك؟"},
"locationDialogMessage": {"en": "Allow the HMG app to access your location will assist you in showing the hospitals according to the nearest to you.", "ar": "السماح لتطبيق مجموعة الحبيب الطبية بالوصول إلى موقعك سيساعدك في إظهار المستشفيات وفقًا للأقرب إليك."},
"parking":{"en":"Parking","ar":"مواقف"},
"alhabiServices":{"en":"HMG Service","ar":"خدمات الحبيب"},
"parkingTitle":{"en":"Car service, car service, service to save parking information, return to it later, 1- By clicking on (Read the code), save the parking data. 2- By clicking on the button (view my car park), it shows you the cars location in Google Maps. 3- Read another position by pressing the Clear Position Data button.","ar":" خدمة المواقف، تتيح هذه الخدمة للمستخدم معلومات عن موقف السيارة ليسهل عليه العودة لها لاحقاً ، 1- بالضغط على زر(قراءة الكود) تستطيع حفظ البيانات الخاصة بالموقف. 2-بالضغط على زر(عرض موقف سيارتي) يعرض لك موقع السيارة في خرائط قوقل. 3- لإعادة قراءة موقف آخرعن طريق الضغط على زر(مسح بيانات الموقف). "},
"readBarcode":{"en":"Read Barcode","ar":"قراءة الكود"},
"showMyPark":{"en":"Show My Park","ar":"عرض بارك"},
"clearMyData":{"en":"clear My Data","ar":"امسح البيانات"},
"floor":{"en":"Floor:","ar":"الطابق"},
"gate":{"en":"Gate:","ar":"بوابة"},
"building":{"en":"Building:","ar":"المبنى"},
"branch":{"en":"Branch:","ar":"الفرع"},
"emergencyServices":{"en":"Emergency Services:","ar":"خدمات الطوارئ"},
"nearester":{"en":"Nearest ER:","ar":"أقرب طوارى"},
"locationa":{"en":"location:","ar":"الموقع"},
"ambulancerequest":{"en":"Ambulance :","ar":"طلب نقل "},
"requestA":{"en":"Request:","ar":"اسعاف"},
"MyAppointments": {"en": "My Appointments", "ar": "مواعيدي"}, "MyAppointments": {"en": "My Appointments", "ar": "مواعيدي"},
"NoBookedAppointments": { "NoBookedAppointments": {
"en": "No Booked Appointments", "en": "No Booked Appointments",
@ -421,7 +422,7 @@ const Map<String, Map<String, String>> localizedValues = {
"MyVaccines": {"en": "My Vaccines", "ar": "تطعيماتي"}, "MyVaccines": {"en": "My Vaccines", "ar": "تطعيماتي"},
"MyVaccinesSubtitle": {"en": "List", "ar": "قائمة"}, "MyVaccinesSubtitle": {"en": "List", "ar": "قائمة"},
"Medical": {"en": "Medical", "ar": "التقارير"}, "Medical": {"en": "Medical", "ar": "التقارير"},
"MedicalSubtitle": {"Report": "List", "ar": "الطبية"}, "MedicalSubtitle": {"en": "Report", "ar": "الطبية"},
"Monthly": {"en": "Monthly", "ar": "تقارير"}, "Monthly": {"en": "Monthly", "ar": "تقارير"},
"MonthlySubtitle": {"en": "Report", "ar": "الشهرية"}, "MonthlySubtitle": {"en": "Report", "ar": "الشهرية"},
"Sick": {"en": "Sick", "ar": "الإجازات"}, "Sick": {"en": "Sick", "ar": "الإجازات"},
@ -448,4 +449,44 @@ const Map<String, Map<String, String>> localizedValues = {
"OrderNo": {"en": "Order No", "ar": "رقم الطلب"}, "OrderNo": {"en": "Order No", "ar": "رقم الطلب"},
"OrderDetails": {"en": "Order Details", "ar": "تفاصيل الطلب"}, "OrderDetails": {"en": "Order Details", "ar": "تفاصيل الطلب"},
"VitalSign": {"en": "Vital Sign", "ar": "العلامة حيوية"}, "VitalSign": {"en": "Vital Sign", "ar": "العلامة حيوية"},
"MonthlyReports": {"en": "Monthly Reports", "ar": "تقارير شهرية"},
"km":{"en":"KMs:","ar":"كم"},
"PatientHealthSummaryReport":{"en":"Patient Health Summary Report","ar":" ملخص التقارير الشهرية"},
"ToViewTheTermsAndConditions":{"en":"To View The Terms And Conditions Report","ar":" عرض الشروط والأحكام "},
"ClickHere":{"en":"Click here","ar":"أنقر هنا"},
"IAgreeToTheTermsAndConditions":{"en":"I agree to the terms and conditions ","ar":"أوافق على الشروط والاحكام "},
"IAgreeToTheTermsAndConditionsSubtitle":{"en":"I agree to the terms and conditions ","ar":"هذا ملخص التقرير الصحي الشهري و الذي يسرد المؤشرات الصحية و نتائج التحاليل لأخر الزيارات. يرجى ملاحظة أن هذا التقرير هو تقرير يتم ارساله بشكل آلي من النظام و لا يعتبر رسمي و لا تؤخذ عليه أي قرارات طبية"},
"Save":{"en":"Save","ar":"حفظ "},
"UserAgreement":{"en":"User Agreement","ar":"اتفاقية الخصوصية "},
"UpdateSuccessfully":{"en":"Update Successfully","ar":"تم التحديث بنجاح"},
"CHECK_VACCINE_AVAILABILITY":{"en":"CHECK VACCINE AVAILABILITY","ar":"تحقق من توافر اللقاح"},
"MyVaccinesAvailability":{"en":"MyVaccinesAvailability","ar":"توفر لقاحي"},
"PaymentService":{"en":"Payment Service","ar":"خدمة المدفوعات"},
"PaymentOnline":{"en":"Service","ar":"الالكتروني"},
"OnlineCheckIn":{"en":"Online Check-In","ar":"مدفوعات معلقة"},
"MyBalances":{"en":"My Balances","ar":"رصيدي"},
"BalanceAmount":{"en":"Balance Amount","ar":"رصيدالحساب"},
"TotalBalance":{"en":"Total Balance","ar":"الرصيد الكلي"},
"CreateAdvancedPayment":{"en":"Create Advanced Payment","ar":"إنشاء دفعة مقدمة"},
"AdvancePayment":{"en":"Advance Payment","ar":"الدفع مقدما"},
"AdvancePaymentLabel":{
"en":"You can create and add an Advanced Payment for you account or other accounts.",
"ar":"يمكنك تحويل مبلغ لحسابك لدى المجموعة أو لحساب احد المراجعين"},
"FileNumber":{"en":"File Number","ar":"رقم الملف"},
"Amount":{"en":"Amount *","ar":"المبلغ *"},
"DepositorEmail":{"en":"Depositor Email *","ar":"البريد الإلكتروني للمودع *"},
"Notes":{"en":"Notes","ar":"ملاحظات"},
"SelectPatientName":{"en":"Select Patient Name","ar":"اختر اسم المريض"},
"SelectFamilyPatientName":{"en":"Family Members","ar":"أفراد الأسرة"},
"SelectHospital":{"en":"Select Hospital","ar":"اختر المستشفى"},
"MyAccount":{"en":"My Account","ar":"حسابي"},
"OtherAccount":{"en":"Other Account","ar":"حساب آخر"},
"SelectBeneficiary":{"en":"Select Beneficiary","ar":"حدد المستفيد"},
"ConfirmThePayment":{"en":"Confirm The Payment","ar":"تأكيد عملية الدفع"},
"DepositorName":{"en":"Depositor Name","ar":"اسم المودع *"},
"MobileNumber":{"en":"Mobile Number","ar":"رقم الجوال"},
"Ok":{"en":"Ok","ar":"حسنا"},
"TheVerificationCodeExpiresIn":{"en":"The Verification Code Expires In","ar":"تنتهي صلاحية رمز التحقق في"},
"PleaseEnterTheVerificationCode":{"en":"Please enter the verification code send to","ar":"الرجاء إدخال رمز التحقق المرسل إلى"},
}; };

@ -11,4 +11,6 @@ const AUTH_DATA = 'auth-data';
const IMEI_USER_DATA = 'imei-user-data'; const IMEI_USER_DATA = 'imei-user-data';
const NHIC_DATA = 'nhic-data'; const NHIC_DATA = 'nhic-data';
const FAMILY_FILE = 'family-file'; const FAMILY_FILE = 'family-file';
const USER_LAT = 'user-lat';
const USER_LONG = 'user-long';
const IS_GO_TO_PARKING = 'IS_GO_TO_PARKING'; const IS_GO_TO_PARKING = 'IS_GO_TO_PARKING';

@ -0,0 +1,79 @@
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
class PatientER_RRT_GetAllTransportationMethodListModel {
int id;
DateTime createDate;
DateTime lastEditDate;
int createdBy;
int lastEditBy;
bool isActive;
String title;
String titleAR;
int price;
Null isDefault;
int visibility;
Null durationId;
String description;
String descriptionAR;
int totalPrice;
int vAT;
PatientER_RRT_GetAllTransportationMethodListModel(
{
this.id,
this.createDate,
this.lastEditDate,
this.createdBy,
this.lastEditBy,
this.isActive,
this.title,
this.titleAR,
this.price,
this.isDefault,
this.visibility,
this.durationId,
this.description,
this.descriptionAR,
this.totalPrice,
this.vAT});
PatientER_RRT_GetAllTransportationMethodListModel.fromJson(
Map<String, dynamic> json) {
id = json['Id'];
createDate = DateUtil.convertStringToDate(json['CreateDate']);
lastEditDate = DateUtil.convertStringToDate(json['LastEditDate']);
createdBy = json['CreatedBy'];
lastEditBy = json['LastEditBy'];
isActive = json['IsActive'];
title = json['Title'];
titleAR = json['TitleAR'];
price = json['Price'];
isDefault = json['isDefault'];
visibility = json['Visibility'];
durationId = json['DurationId'];
description = json['Description'];
descriptionAR = json['DescriptionAR'];
totalPrice = json['TotalPrice'];
vAT = json['VAT'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Id'] = this.id;
data['CreateDate'] = this.createDate;
data['LastEditDate'] = this.lastEditDate;
data['CreatedBy'] = this.createdBy;
data['LastEditBy'] = this.lastEditBy;
data['IsActive'] = this.isActive;
data['Title'] = this.title;
data['TitleAR'] = this.titleAR;
data['Price'] = this.price;
data['isDefault'] = this.isDefault;
data['Visibility'] = this.visibility;
data['DurationId'] = this.durationId;
data['Description'] = this.description;
data['DescriptionAR'] = this.descriptionAR;
data['TotalPrice'] = this.totalPrice;
data['VAT'] = this.vAT;
return data;
}
}

@ -0,0 +1,104 @@
class ProjectAvgERWaitingTime {
int iD;
int projectID;
int avgTimeInMinutes;
String avgTimeInHHMM;
dynamic distanceInKilometers;
String latitude;
String longitude;
String phoneNumber;
String projectImageURL;
String projectName;
ProjectAvgERWaitingTime(
{this.iD,
this.projectID,
this.avgTimeInMinutes,
this.avgTimeInHHMM,
this.distanceInKilometers,
this.latitude,
this.longitude,
this.phoneNumber,
this.projectImageURL,
this.projectName});
ProjectAvgERWaitingTime.fromJson(Map<String, dynamic> json) {
iD = json['ID'];
projectID = json['ProjectID'];
avgTimeInMinutes = json['AvgTimeInMinutes'];
avgTimeInHHMM = json['AvgTimeInHHMM'];
distanceInKilometers = json['DistanceInKilometers'];
latitude = json['Latitude'];
longitude = json['Longitude'];
phoneNumber = json['PhoneNumber'];
projectImageURL = json['ProjectImageURL'];
projectName = json['ProjectName'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ID'] = this.iD;
data['ProjectID'] = this.projectID;
data['AvgTimeInMinutes'] = this.avgTimeInMinutes;
data['AvgTimeInHHMM'] = this.avgTimeInHHMM;
data['DistanceInKilometers'] = this.distanceInKilometers;
data['Latitude'] = this.latitude;
data['Longitude'] = this.longitude;
data['PhoneNumber'] = this.phoneNumber;
data['ProjectImageURL'] = this.projectImageURL;
data['ProjectName'] = this.projectName;
return data;
}
}
//class ProjectAvgERWaitingTime {
// int iD;
// int projectID;
// int avgTimeInMinutes;
// String avgTimeInHHMM;
// String distanceInKilometers;
// String latitude;
// String longitude;
// String phoneNumber;
// String projectImageURL;
// String projectName;
//
// ProjectAvgERWaitingTime(
// {this.iD,
// this.projectID,
// this.avgTimeInMinutes,
// this.avgTimeInHHMM,
// this.distanceInKilometers,
// this.latitude,
// this.longitude,
// this.phoneNumber,
// this.projectImageURL,
// this.projectName});
//
// ProjectAvgERWaitingTime.fromJson(Map<String, dynamic> json) {
// iD = json['ID'];
// projectID = json['ProjectID'];
// avgTimeInMinutes = json['AvgTimeInMinutes'];
// avgTimeInHHMM = json['AvgTimeInHHMM'];
// distanceInKilometers = json['DistanceInKilometers'];
// latitude = json['Latitude'];
// longitude = json['Longitude'];
// phoneNumber = json['PhoneNumber'];
// projectImageURL = json['ProjectImageURL'];
// projectName = json['ProjectName'];
// }
//
// Map<String, dynamic> toJson() {
// final Map<String, dynamic> data = new Map<String, dynamic>();
// data['ID'] = this.iD;
// data['ProjectID'] = this.projectID;
// data['AvgTimeInMinutes'] = this.avgTimeInMinutes;
// data['AvgTimeInHHMM'] = this.avgTimeInHHMM;
// data['DistanceInKilometers'] = this.distanceInKilometers;
// data['Latitude'] = this.latitude;
// data['Longitude'] = this.longitude;
// data['PhoneNumber'] = this.phoneNumber;
// data['ProjectImageURL'] = this.projectImageURL;
// data['ProjectName'] = this.projectName;
// return data;
// }
//}

@ -1,18 +1,18 @@
class HospitalsModel { class HospitalsModel {
String desciption; String desciption;
Null desciptionN; Null desciptionN;
int iD; dynamic iD;
String legalName; String legalName;
String legalNameN; String legalNameN;
String name; String name;
Null nameN; Null nameN;
String phoneNumber; String phoneNumber;
String setupID; String setupID;
int distanceInKilometers; dynamic distanceInKilometers;
bool isActive; bool isActive;
String latitude; String latitude;
String longitude; String longitude;
int mainProjectID; dynamic mainProjectID;
Null projectOutSA; Null projectOutSA;
bool usingInDoctorApp; bool usingInDoctorApp;

@ -0,0 +1,88 @@
class LabResult {
String description;
Null femaleInterpretativeData;
int gender;
int lineItemNo;
Null maleInterpretativeData;
String notes;
String packageID;
int patientID;
String projectID;
String referanceRange;
String resultValue;
String sampleCollectedOn;
String sampleReceivedOn;
String setupID;
Null superVerifiedOn;
String testCode;
String uOM;
String verifiedOn;
Null verifiedOnDateTime;
LabResult(
{this.description,
this.femaleInterpretativeData,
this.gender,
this.lineItemNo,
this.maleInterpretativeData,
this.notes,
this.packageID,
this.patientID,
this.projectID,
this.referanceRange,
this.resultValue,
this.sampleCollectedOn,
this.sampleReceivedOn,
this.setupID,
this.superVerifiedOn,
this.testCode,
this.uOM,
this.verifiedOn,
this.verifiedOnDateTime});
LabResult.fromJson(Map<String, dynamic> json) {
description = json['Description'];
femaleInterpretativeData = json['FemaleInterpretativeData'];
gender = json['Gender'];
lineItemNo = json['LineItemNo'];
maleInterpretativeData = json['MaleInterpretativeData'];
notes = json['Notes'];
packageID = json['PackageID'];
patientID = json['PatientID'];
projectID = json['ProjectID'];
referanceRange = json['ReferanceRange'];
resultValue = json['ResultValue'];
sampleCollectedOn = json['SampleCollectedOn'];
sampleReceivedOn = json['SampleReceivedOn'];
setupID = json['SetupID'];
superVerifiedOn = json['SuperVerifiedOn'];
testCode = json['TestCode'];
uOM = json['UOM'];
verifiedOn = json['VerifiedOn'];
verifiedOnDateTime = json['VerifiedOnDateTime'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Description'] = this.description;
data['FemaleInterpretativeData'] = this.femaleInterpretativeData;
data['Gender'] = this.gender;
data['LineItemNo'] = this.lineItemNo;
data['MaleInterpretativeData'] = this.maleInterpretativeData;
data['Notes'] = this.notes;
data['PackageID'] = this.packageID;
data['PatientID'] = this.patientID;
data['ProjectID'] = this.projectID;
data['ReferanceRange'] = this.referanceRange;
data['ResultValue'] = this.resultValue;
data['SampleCollectedOn'] = this.sampleCollectedOn;
data['SampleReceivedOn'] = this.sampleReceivedOn;
data['SetupID'] = this.setupID;
data['SuperVerifiedOn'] = this.superVerifiedOn;
data['TestCode'] = this.testCode;
data['UOM'] = this.uOM;
data['VerifiedOn'] = this.verifiedOn;
data['VerifiedOnDateTime'] = this.verifiedOnDateTime;
return data;
}
}

@ -0,0 +1,18 @@
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
class AdvanceModel {
String fileNumber;
String amount;
HospitalsModel hospitalsModel;
String email;
String note;
String depositorName;
AdvanceModel(
{this.amount,
this.email,
this.note,
this.hospitalsModel,
this.fileNumber,
this.depositorName});
}

@ -0,0 +1,28 @@
class PatientAdvanceBalanceAmount {
int distanceInKilometers;
dynamic patientAdvanceBalanceAmount;
String projectDescription;
int projectID;
PatientAdvanceBalanceAmount(
{this.distanceInKilometers,
this.patientAdvanceBalanceAmount,
this.projectDescription,
this.projectID});
PatientAdvanceBalanceAmount.fromJson(Map<String, dynamic> json) {
distanceInKilometers = json['DistanceInKilometers'];
patientAdvanceBalanceAmount = json['PatientAdvanceBalanceAmount'];
projectDescription = json['ProjectDescription'];
projectID = json['ProjectID'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['DistanceInKilometers'] = this.distanceInKilometers;
data['PatientAdvanceBalanceAmount'] = this.patientAdvanceBalanceAmount;
data['ProjectDescription'] = this.projectDescription;
data['ProjectID'] = this.projectID;
return data;
}
}

@ -0,0 +1,32 @@
class PatientInfo {
String fullName;
String mobileNumber;
int patientID;
int projectID;
String zipCode;
PatientInfo(
{this.fullName,
this.mobileNumber,
this.patientID,
this.projectID,
this.zipCode});
PatientInfo.fromJson(Map<String, dynamic> json) {
fullName = json['FullName'];
mobileNumber = json['MobileNumber'];
patientID = json['PatientID'];
projectID = json['ProjectID'];
zipCode = json['ZipCode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['FullName'] = this.fullName;
data['MobileNumber'] = this.mobileNumber;
data['PatientID'] = this.patientID;
data['ProjectID'] = this.projectID;
data['ZipCode'] = this.zipCode;
return data;
}
}

@ -0,0 +1,84 @@
class PatientInfoAndMobileNumber {
String setupID;
int projectID;
int mainAccountID;
int patientType;
int patientID;
String firstName;
Null middleName;
Null lastName;
Null firstNameN;
Null middleNameN;
Null lastNameN;
Null gender;
Null dateofBirth;
Null dateofBirthN;
Null nationalityID;
String mobileNumber;
String emailAddress;
Null zipCode;
PatientInfoAndMobileNumber(
{this.setupID,
this.projectID,
this.mainAccountID,
this.patientType,
this.patientID,
this.firstName,
this.middleName,
this.lastName,
this.firstNameN,
this.middleNameN,
this.lastNameN,
this.gender,
this.dateofBirth,
this.dateofBirthN,
this.nationalityID,
this.mobileNumber,
this.emailAddress,
this.zipCode});
PatientInfoAndMobileNumber.fromJson(Map<String, dynamic> json) {
setupID = json['SetupID'];
projectID = json['ProjectID'];
mainAccountID = json['MainAccountID'];
patientType = json['PatientType'];
patientID = json['PatientID'];
firstName = json['FirstName'];
middleName = json['MiddleName'];
lastName = json['LastName'];
firstNameN = json['FirstNameN'];
middleNameN = json['MiddleNameN'];
lastNameN = json['LastNameN'];
gender = json['Gender'];
dateofBirth = json['DateofBirth'];
dateofBirthN = json['DateofBirthN'];
nationalityID = json['NationalityID'];
mobileNumber = json['MobileNumber'];
emailAddress = json['EmailAddress'];
zipCode = json['ZipCode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['SetupID'] = this.setupID;
data['ProjectID'] = this.projectID;
data['MainAccountID'] = this.mainAccountID;
data['PatientType'] = this.patientType;
data['PatientID'] = this.patientID;
data['FirstName'] = this.firstName;
data['MiddleName'] = this.middleName;
data['LastName'] = this.lastName;
data['FirstNameN'] = this.firstNameN;
data['MiddleNameN'] = this.middleNameN;
data['LastNameN'] = this.lastNameN;
data['Gender'] = this.gender;
data['DateofBirth'] = this.dateofBirth;
data['DateofBirthN'] = this.dateofBirthN;
data['NationalityID'] = this.nationalityID;
data['MobileNumber'] = this.mobileNumber;
data['EmailAddress'] = this.emailAddress;
data['ZipCode'] = this.zipCode;
return data;
}
}

@ -0,0 +1,139 @@
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
class SickLeave {
String setupID;
int projectID;
int patientID;
int patientType;
int clinicID;
int doctorID;
int requestNo;
DateTime requestDate;
int sickLeaveDays;
int appointmentNo;
int admissionNo;
int actualDoctorRate;
String appointmentDate;
String clinicName;
String doctorImageURL;
String doctorName;
int doctorRate;
String doctorTitle;
int gender;
String genderDescription;
bool isActiveDoctorProfile;
bool isDoctorAllowVedioCall;
bool isExecludeDoctor;
bool isInOutPatient;
String isInOutPatientDescription;
String isInOutPatientDescriptionN;
int noOfPatientsRate;
Null patientName;
String projectName;
String qR;
List<String> speciality;
SickLeave(
{this.setupID,
this.projectID,
this.patientID,
this.patientType,
this.clinicID,
this.doctorID,
this.requestNo,
this.requestDate,
this.sickLeaveDays,
this.appointmentNo,
this.admissionNo,
this.actualDoctorRate,
this.appointmentDate,
this.clinicName,
this.doctorImageURL,
this.doctorName,
this.doctorRate,
this.doctorTitle,
this.gender,
this.genderDescription,
this.isActiveDoctorProfile,
this.isDoctorAllowVedioCall,
this.isExecludeDoctor,
this.isInOutPatient,
this.isInOutPatientDescription,
this.isInOutPatientDescriptionN,
this.noOfPatientsRate,
this.patientName,
this.projectName,
this.qR,
this.speciality});
SickLeave.fromJson(Map<String, dynamic> json) {
setupID = json['SetupID'];
projectID = json['ProjectID'];
patientID = json['PatientID'];
patientType = json['PatientType'];
clinicID = json['ClinicID'];
doctorID = json['DoctorID'];
requestNo = json['RequestNo'];
requestDate = DateUtil.convertStringToDate(json['RequestDate']);
sickLeaveDays = json['SickLeaveDays'];
appointmentNo = json['AppointmentNo'];
admissionNo = json['AdmissionNo'];
actualDoctorRate = json['ActualDoctorRate'];
appointmentDate = json['AppointmentDate'];
clinicName = json['ClinicName'];
doctorImageURL = json['DoctorImageURL'];
doctorName = json['DoctorName'];
doctorRate = json['DoctorRate'];
doctorTitle = json['DoctorTitle'];
gender = json['Gender'];
genderDescription = json['GenderDescription'];
isActiveDoctorProfile = json['IsActiveDoctorProfile'];
isDoctorAllowVedioCall = json['IsDoctorAllowVedioCall'];
isExecludeDoctor = json['IsExecludeDoctor'];
isInOutPatient = json['IsInOutPatient'];
isInOutPatientDescription = json['IsInOutPatientDescription'];
isInOutPatientDescriptionN = json['IsInOutPatientDescriptionN'];
noOfPatientsRate = json['NoOfPatientsRate'];
patientName = json['PatientName'];
projectName = json['ProjectName'];
qR = json['QR'];
if(json['Speciality']!=null)
speciality = json['Speciality'].cast<String>();
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['SetupID'] = this.setupID;
data['ProjectID'] = this.projectID;
data['PatientID'] = this.patientID;
data['PatientType'] = this.patientType;
data['ClinicID'] = this.clinicID;
data['DoctorID'] = this.doctorID;
data['RequestNo'] = this.requestNo;
data['RequestDate'] = DateUtil.convertDateToString(requestDate);
data['SickLeaveDays'] = this.sickLeaveDays;
data['AppointmentNo'] = this.appointmentNo;
data['AdmissionNo'] = this.admissionNo;
data['ActualDoctorRate'] = this.actualDoctorRate;
data['AppointmentDate'] = this.appointmentDate;
data['ClinicName'] = this.clinicName;
data['DoctorImageURL'] = this.doctorImageURL;
data['DoctorName'] = this.doctorName;
data['DoctorRate'] = this.doctorRate;
data['DoctorTitle'] = this.doctorTitle;
data['Gender'] = this.gender;
data['GenderDescription'] = this.genderDescription;
data['IsActiveDoctorProfile'] = this.isActiveDoctorProfile;
data['IsDoctorAllowVedioCall'] = this.isDoctorAllowVedioCall;
data['IsExecludeDoctor'] = this.isExecludeDoctor;
data['IsInOutPatient'] = this.isInOutPatient;
data['IsInOutPatientDescription'] = this.isInOutPatientDescription;
data['IsInOutPatientDescriptionN'] = this.isInOutPatientDescriptionN;
data['NoOfPatientsRate'] = this.noOfPatientsRate;
data['PatientName'] = this.patientName;
data['ProjectName'] = this.projectName;
data['QR'] = this.qR;
data['Speciality'] = this.speciality;
return data;
}
}

@ -1,91 +1,152 @@
class VaccineModel { class VaccineModel {
String to; String setupID;
String from; int projectID;
double versionID;
int channel;
int languageID;
String iPAdress;
String generalid;
int patientOutSA;
String sessionID;
bool isDentalAllowedBackend;
int deviceTypeID;
int patientID; int patientID;
String tokenID; int invoiceNo;
int patientTypeID; String procedureID;
int patientType; String vaccineName;
Null vaccineNameN;
String invoiceDate; String invoiceDate;
int doctorID;
int clinicID;
String firstName;
String middleName;
String lastName;
Null firstNameN;
Null middleNameN;
Null lastNameN;
String dateofBirth;
int actualDoctorRate;
String age;
String clinicName;
String doctorImageURL; String doctorImageURL;
String doctorName; String doctorName;
int doctorRate;
String doctorTitle; String doctorTitle;
int gender;
String genderDescription;
bool isActiveDoctorProfile;
bool isDoctorAllowVedioCall;
bool isExecludeDoctor;
int noOfPatientsRate;
String patientName;
String projectName; String projectName;
String vaccineName; String qR;
List<String> speciality;
String vaccinationDate;
VaccineModel({ VaccineModel(
this.to, {this.setupID,
this.from, this.projectID,
this.versionID, this.patientID,
this.channel, this.invoiceNo,
this.languageID, this.procedureID,
this.iPAdress, this.vaccineName,
this.generalid, this.vaccineNameN,
this.patientOutSA, this.invoiceDate,
this.sessionID, this.doctorID,
this.isDentalAllowedBackend, this.clinicID,
this.deviceTypeID, this.firstName,
this.patientID, this.middleName,
this.tokenID, this.lastName,
this.patientTypeID, this.firstNameN,
this.patientType, this.middleNameN,
this.invoiceDate, this.lastNameN,
this.doctorImageURL, this.dateofBirth,
this.doctorName, this.actualDoctorRate,
this.doctorTitle, this.age,
this.projectName, this.clinicName,
this.vaccineName, this.doctorImageURL,
}); this.doctorName,
this.doctorRate,
this.doctorTitle,
this.gender,
this.genderDescription,
this.isActiveDoctorProfile,
this.isDoctorAllowVedioCall,
this.isExecludeDoctor,
this.noOfPatientsRate,
this.patientName,
this.projectName,
this.qR,
this.speciality,
this.vaccinationDate});
VaccineModel.fromJson(Map<String, dynamic> json) { VaccineModel.fromJson(Map<String, dynamic> json) {
setupID = json['SetupID'];
projectID = json['ProjectID'];
patientID = json['PatientID'];
invoiceNo = json['InvoiceNo'];
procedureID = json['ProcedureID'];
vaccineName = json['VaccineName']; vaccineName = json['VaccineName'];
projectName = json['ProjectName']; vaccineNameN = json['VaccineNameN'];
doctorTitle = json['DoctorTitle'];
doctorName = json['DoctorName'];
doctorImageURL = json['DoctorImageURL'];
invoiceDate = json['InvoiceDate']; invoiceDate = json['InvoiceDate'];
to = json['To']; doctorID = json['DoctorID'];
from = json['From']; clinicID = json['ClinicID'];
versionID = json['VersionID']; firstName = json['FirstName'];
channel = json['Channel']; middleName = json['MiddleName'];
languageID = json['LanguageID']; lastName = json['LastName'];
iPAdress = json['IPAdress']; firstNameN = json['FirstNameN'];
generalid = json['generalid']; middleNameN = json['MiddleNameN'];
patientOutSA = json['PatientOutSA']; lastNameN = json['LastNameN'];
sessionID = json['SessionID']; dateofBirth = json['DateofBirth'];
isDentalAllowedBackend = json['isDentalAllowedBackend']; actualDoctorRate = json['ActualDoctorRate'];
deviceTypeID = json['DeviceTypeID']; age = json['Age'];
patientID = json['PatientID']; clinicName = json['ClinicName'];
tokenID = json['TokenID']; doctorImageURL = json['DoctorImageURL'];
patientTypeID = json['PatientTypeID']; doctorName = json['DoctorName'];
patientType = json['PatientType']; doctorRate = json['DoctorRate'];
doctorTitle = json['DoctorTitle'];
gender = json['Gender'];
genderDescription = json['GenderDescription'];
isActiveDoctorProfile = json['IsActiveDoctorProfile'];
isDoctorAllowVedioCall = json['IsDoctorAllowVedioCall'];
isExecludeDoctor = json['IsExecludeDoctor'];
noOfPatientsRate = json['NoOfPatientsRate'];
patientName = json['PatientName'];
projectName = json['ProjectName'];
qR = json['QR'];
speciality = json['Speciality'].cast<String>();
vaccinationDate = json['VaccinationDate'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = new Map<String, dynamic>();
data['To'] = this.to; data['SetupID'] = this.setupID;
data['From'] = this.from; data['ProjectID'] = this.projectID;
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['LanguageID'] = this.languageID;
data['IPAdress'] = this.iPAdress;
data['generalid'] = this.generalid;
data['PatientOutSA'] = this.patientOutSA;
data['SessionID'] = this.sessionID;
data['isDentalAllowedBackend'] = this.isDentalAllowedBackend;
data['DeviceTypeID'] = this.deviceTypeID;
data['PatientID'] = this.patientID; data['PatientID'] = this.patientID;
data['TokenID'] = this.tokenID; data['InvoiceNo'] = this.invoiceNo;
data['PatientTypeID'] = this.patientTypeID; data['ProcedureID'] = this.procedureID;
data['PatientType'] = this.patientType; data['VaccineName'] = this.vaccineName;
data['VaccineNameN'] = this.vaccineNameN;
data['InvoiceDate'] = this.invoiceDate;
data['DoctorID'] = this.doctorID;
data['ClinicID'] = this.clinicID;
data['FirstName'] = this.firstName;
data['MiddleName'] = this.middleName;
data['LastName'] = this.lastName;
data['FirstNameN'] = this.firstNameN;
data['MiddleNameN'] = this.middleNameN;
data['LastNameN'] = this.lastNameN;
data['DateofBirth'] = this.dateofBirth;
data['ActualDoctorRate'] = this.actualDoctorRate;
data['Age'] = this.age;
data['ClinicName'] = this.clinicName;
data['DoctorImageURL'] = this.doctorImageURL;
data['DoctorName'] = this.doctorName;
data['DoctorRate'] = this.doctorRate;
data['DoctorTitle'] = this.doctorTitle;
data['Gender'] = this.gender;
data['GenderDescription'] = this.genderDescription;
data['IsActiveDoctorProfile'] = this.isActiveDoctorProfile;
data['IsDoctorAllowVedioCall'] = this.isDoctorAllowVedioCall;
data['IsExecludeDoctor'] = this.isExecludeDoctor;
data['NoOfPatientsRate'] = this.noOfPatientsRate;
data['PatientName'] = this.patientName;
data['ProjectName'] = this.projectName;
data['QR'] = this.qR;
data['Speciality'] = this.speciality;
data['VaccinationDate'] = this.vaccinationDate;
return data; return data;
} }
} }

@ -0,0 +1,18 @@
class VaccinationItem {
String dESCRIPTION;
String iTEMCODE;
VaccinationItem({this.dESCRIPTION, this.iTEMCODE});
VaccinationItem.fromJson(Map<String, dynamic> json) {
dESCRIPTION = json['DESCRIPTION'];
iTEMCODE = json['ITEM_CODE'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['DESCRIPTION'] = this.dESCRIPTION;
data['ITEM_CODE'] = this.iTEMCODE;
return data;
}
}

@ -0,0 +1,44 @@
class VaccinationOnHand {
int distanceInKilometers;
int iTEMONHAND;
bool isThereItems;
String oRGANIZATIONCODE;
String oRGANIZATIONNAME;
String projectAlias;
int projectID;
String projectName;
VaccinationOnHand(
{this.distanceInKilometers,
this.iTEMONHAND,
this.isThereItems,
this.oRGANIZATIONCODE,
this.oRGANIZATIONNAME,
this.projectAlias,
this.projectID,
this.projectName});
VaccinationOnHand.fromJson(Map<String, dynamic> json) {
distanceInKilometers = json['DistanceInKilometers'];
iTEMONHAND = json['ITEM_ONHAND'];
isThereItems = json['IsThereItems'];
oRGANIZATIONCODE = json['ORGANIZATION_CODE'];
oRGANIZATIONNAME = json['ORGANIZATION_NAME'];
projectAlias = json['ProjectAlias'];
projectID = json['ProjectID'];
projectName = json['ProjectName'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['DistanceInKilometers'] = this.distanceInKilometers;
data['ITEM_ONHAND'] = this.iTEMONHAND;
data['IsThereItems'] = this.isThereItems;
data['ORGANIZATION_CODE'] = this.oRGANIZATIONCODE;
data['ORGANIZATION_NAME'] = this.oRGANIZATIONNAME;
data['ProjectAlias'] = this.projectAlias;
data['ProjectID'] = this.projectID;
data['ProjectName'] = this.projectName;
return data;
}
}

@ -2,14 +2,11 @@ import 'dart:convert';
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/pages/login/login-type.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import '../../../locator.dart';
import '../../../routes.dart'; import '../../../routes.dart';
AppSharedPreferences sharedPref = new AppSharedPreferences(); AppSharedPreferences sharedPref = new AppSharedPreferences();
@ -31,11 +28,13 @@ class BaseAppClient {
//Map profile = await sharedPref.getObj(DOCTOR_PROFILE); //Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
String token = await sharedPref.getString(TOKEN); String token = await sharedPref.getString(TOKEN);
var languageID = var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'en');
var user = await sharedPref.getObject(USER_PROFILE); var user = await sharedPref.getObject(USER_PROFILE);
body['SetupID'] = body.containsKey('SetupID') if (body.containsKey('SetupID')) {
? body['SetupID'] != null ? body['SetupID'] : SETUP_ID body['SetupID'] = body.containsKey('SetupID')
: SETUP_ID; ? body['SetupID'] != null ? body['SetupID'] : SETUP_ID
: SETUP_ID;
}
body['VersionID'] = VERSION_ID; body['VersionID'] = VERSION_ID;
body['Channel'] = CHANNEL; body['Channel'] = CHANNEL;
body['LanguageID'] = languageID == 'ar' ? 1 : 2; body['LanguageID'] = languageID == 'ar' ? 1 : 2;
@ -44,16 +43,28 @@ class BaseAppClient {
body['PatientOutSA'] = body.containsKey('PatientOutSA') body['PatientOutSA'] = body.containsKey('PatientOutSA')
? body['PatientOutSA'] != null ? body['PatientOutSA'] : PATIENT_OUT_SA ? body['PatientOutSA'] != null ? body['PatientOutSA'] : PATIENT_OUT_SA
: PATIENT_OUT_SA; : PATIENT_OUT_SA;
body['isDentalAllowedBackend'] = IS_DENTAL_ALLOWED_BACKEND;
if (body.containsKey('isDentalAllowedBackend')) {
body['isDentalAllowedBackend'] =
body.containsKey('isDentalAllowedBackend')
? body['isDentalAllowedBackend'] != null
? body['isDentalAllowedBackend']
: IS_DENTAL_ALLOWED_BACKEND
: IS_DENTAL_ALLOWED_BACKEND;
}
body['DeviceTypeID'] = DeviceTypeID; body['DeviceTypeID'] = DeviceTypeID;
body['PatientType'] = body.containsKey('PatientType') body['PatientType'] = body.containsKey('PatientType')
? body['PatientType'] != null ? body['PatientType'] : PATIENT_TYPE ? body['PatientType'] != null ? body['PatientType'] : PATIENT_TYPE
: PATIENT_TYPE; : PATIENT_TYPE;
body['PatientTypeID'] = body.containsKey('PatientTypeID') body['PatientTypeID'] = body.containsKey('PatientTypeID')
? body['PatientTypeID'] != null ? body['PatientTypeID'] != null
? body['PatientTypeID'] ? body['PatientTypeID']
: PATIENT_TYPE_ID : PATIENT_TYPE_ID
: PATIENT_TYPE_ID; : PATIENT_TYPE_ID;
if (user != null) { if (user != null) {
body['TokenID'] = token; body['TokenID'] = token;
body['PatientID'] = body['PatientID'] =

@ -0,0 +1,25 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/er/get_all_transportation_method_list_model.dart';
import '../base_service.dart';
class AmService extends BaseService {
List<PatientER_RRT_GetAllTransportationMethodListModel> AmModelList = List();
Map<String, dynamic> body = Map();
Future getAllTransportationOrders() async {
hasError = false;
await baseAppClient.post(GET_AMBULANCE_REQUEST,
onSuccess: (dynamic response, int statusCode) {
AmModelList.clear();
response['AmModelList'].forEach((vital) {
AmModelList.add(
PatientER_RRT_GetAllTransportationMethodListModel.fromJson(vital));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
}

@ -0,0 +1,43 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/er/projectavgerwaitingtime.dart';
import '../base_service.dart';
class ErService extends BaseService {
List<ProjectAvgERWaitingTime> projectAvgERWaitingTimeModelList = List();
Map<String, dynamic> body = Map();
String Latitude = "";
String Longitude = "";
String PhoneNumber = "";
Future getProjectAvgERWaitingTimeOrders({int id, int projectID}) async {
hasError = false;
if (id != null && projectID != null) {
body['ID'] = id;
body['ProjectID'] = projectID;
}
var lat = await sharedPref.getDouble(USER_LAT);
var long = await sharedPref.getDouble(USER_LONG);
body['Latitude'] = lat ?? 0;
body['Longitude'] = long ?? 0;
await baseAppClient.post(GET_NEAREST_HOSPITAL,
onSuccess: (dynamic response, int statusCode) {
projectAvgERWaitingTimeModelList.clear();
response['List_ProjectAvgERWaitingTime'].forEach((vital) {
projectAvgERWaitingTimeModelList
.add(ProjectAvgERWaitingTime.fromJson(vital));
});
projectAvgERWaitingTimeModelList.forEach((element) {
Latitude = '${element.latitude}';
Longitude = '${element.longitude}';
PhoneNumber = '${element.phoneNumber}';
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
}

@ -2,35 +2,43 @@ import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart'; import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/request_get_hospitals_model.dart'; import 'package:diplomaticquarterapp/core/model/hospitals/request_get_hospitals_model.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:geolocator/geolocator.dart';
class HospitalService extends BaseService { class HospitalService extends BaseService {
List<HospitalsModel> _hospitals = List(); List<HospitalsModel> _hospitals = List();
List<HospitalsModel> get hospitals => _hospitals; List<HospitalsModel> get hospitals => _hospitals;
RequestGetHospitalsModel _requestGetHospitalsModel = RequestGetHospitalsModel( double _latitude;
latitude: 0, double _longitude;
longitude: 0,
versionID: 5.2, _getCurrentLocation() async {
channel: 3, await getLastKnownPosition().then((value) {
languageID: 2, _latitude = value.latitude;
iPAdress: '10.20.10.20', _longitude = value.longitude;
generalid: 'Cs2020@2016\$2958', }).catchError((e) {
patientOutSA: 0, _longitude = 0;
sessionID: 'JUWuiMBCEGkAAxQpakQ', _latitude = 0;
isDentalAllowedBackend: false, });
deviceTypeID: 2); // currentLocation = LatLng(position.latitude, position.longitude);
}
Future getHospitals() async { Future getHospitals() async {
await _getCurrentLocation();
Map<String, dynamic> body = Map();
body['Latitude'] = _latitude;
body['Longitude'] = _longitude;
await baseAppClient.post(GET_PROJECT, await baseAppClient.post(GET_PROJECT,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
_hospitals.clear(); _hospitals.clear();
response['ListProject'].forEach((hospital) { response['ListProject'].forEach((hospital) {
_hospitals.add(HospitalsModel.fromJson(hospital)); _hospitals.add(HospitalsModel.fromJson(hospital));
}); });
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;
}, body: _requestGetHospitalsModel.toJson()); }, body: body);
} }
} }

@ -1,8 +1,13 @@
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/insurance/insurance_approval.dart'; import 'package:diplomaticquarterapp/core/model/insurance/insurance_approval.dart';
import 'package:diplomaticquarterapp/core/model/insurance/insurance_card.dart'; import 'package:diplomaticquarterapp/core/model/insurance/insurance_card.dart';
import 'package:diplomaticquarterapp/core/model/insurance/insurance_card_update.dart'; import 'package:diplomaticquarterapp/core/model/insurance/insurance_card_update.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordsByStatusReq.dart';
import 'package:diplomaticquarterapp/services/family_files/family_files_provider.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
class InsuranceCardService extends BaseService { class InsuranceCardService extends BaseService {
List<InsuranceCardModel> _cardList = List(); List<InsuranceCardModel> _cardList = List();
@ -15,6 +20,9 @@ class InsuranceCardService extends BaseService {
List<InsuranceApprovalModel> get insuranceApproval => _insuranceApproval; List<InsuranceApprovalModel> get insuranceApproval => _insuranceApproval;
GetAllSharedRecordsByStatusResponse getAllSharedRecordsByStatusResponse =
GetAllSharedRecordsByStatusResponse();
clearInsuranceCard() { clearInsuranceCard() {
_cardList.clear(); _cardList.clear();
} }
@ -101,7 +109,7 @@ class InsuranceCardService extends BaseService {
Future getInsuranceApproval({int appointmentNo}) async { Future getInsuranceApproval({int appointmentNo}) async {
hasError = false; hasError = false;
// _cardList.clear(); // _cardList.clear();
if(appointmentNo != null) { if (appointmentNo != null) {
_insuranceApprovalModel.appointmentNo = appointmentNo; _insuranceApprovalModel.appointmentNo = appointmentNo;
_insuranceApprovalModel.eXuldAPPNO = null; _insuranceApprovalModel.eXuldAPPNO = null;
_insuranceApprovalModel.projectID = null; _insuranceApprovalModel.projectID = null;
@ -124,4 +132,35 @@ class InsuranceCardService extends BaseService {
super.error = error; super.error = error;
}, body: _insuranceApprovalModel.toJson()); }, body: _insuranceApprovalModel.toJson());
} }
Future getFamilyFiles() async {
var myFamily = await sharedPref.getObject(FAMILY_FILE);
if (myFamily != null) {
getAllSharedRecordsByStatusResponse =
GetAllSharedRecordsByStatusResponse.fromJson(myFamily);
} else {
getSharedRecordByStatus();
}
}
Future getSharedRecordByStatus() async {
try {
dynamic localRes;
var request = GetAllSharedRecordsByStatusReq();
request.status = 0;
await baseAppClient.post(GET_SHARED_RECORD_BY_STATUS,
onSuccess: (dynamic response, int statusCode) {
localRes = response;
}, onFailure: (String error, int statusCode) {
AppToast.showErrorToast(message: error);
throw error;
}, body: request.toJson());
sharedPref.setObject(FAMILY_FILE, localRes);
getAllSharedRecordsByStatusResponse =
GetAllSharedRecordsByStatusResponse.fromJson(localRes);
} catch (error) {
print(error);
throw error;
}
}
} }

@ -0,0 +1,45 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/sick_leave/sick_leave.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart';
class PatientSickLeaveService extends BaseService {
List<SickLeave> sickLeaveList = List();
getSickLeave() async {
hasError = false;
super.error = "";
await baseAppClient.post(GET_PATIENT_SICK_LEAVE,
onSuccess: (response, statusCode) async {
sickLeaveList.clear();
response['List_SickLeave'].forEach((sickLeave) {
sickLeaveList.add(SickLeave.fromJson(sickLeave));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: Map());
}
sendSickLeaveEmail(
{int requestNo, String projectName, String doctorName, int projectID,String setupID}) async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['RequestNo'] = requestNo;
body['To'] = user.emailAddress;
body['DateofBirth'] = user.dateofBirth;
body['PatientIditificationNum'] = user.patientIdentificationNo;
body['PatientMobileNumber'] = user.mobileNumber;
body['PatientName'] = user.firstName + " " + user.firstName;
body['ProjectName'] = projectName;
body['DoctorName'] = doctorName;
body['ProjectID'] = 12;
body['SetupID'] = 12;
await baseAppClient
.post(SendSickLeaveEmail, onSuccess: (response, statusCode) async {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
}

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/labs/lab_result.dart';
import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart'; import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart';
import 'package:diplomaticquarterapp/core/model/labs/patient_lab_special_result.dart'; import 'package:diplomaticquarterapp/core/model/labs/patient_lab_special_result.dart';
import 'package:diplomaticquarterapp/core/model/labs/request_patient_lab_orders.dart'; import 'package:diplomaticquarterapp/core/model/labs/request_patient_lab_orders.dart';
@ -28,6 +29,7 @@ class LabsService extends BaseService {
RequestPatientLabSpecialResult(); RequestPatientLabSpecialResult();
List<PatientLabSpecialResult> patientLabSpecialResult = List(); List<PatientLabSpecialResult> patientLabSpecialResult = List();
List<LabResult> labResultList = List();
Future getLaboratoryResult( Future getLaboratoryResult(
{String projectID, {String projectID,
@ -52,6 +54,27 @@ class LabsService extends BaseService {
}, body: _requestPatientLabSpecialResult.toJson()); }, body: _requestPatientLabSpecialResult.toJson());
} }
Future getPatientLabResult({PatientLabOrders patientLabOrder}) async {
hasError = false;
Map<String, dynamic> body = Map();
body['InvoiceNo'] = patientLabOrder.invoiceNo;
body['OrderNo'] = patientLabOrder.orderNo;
body['Procedure'] = "U/A";
body['ProjectID'] = patientLabOrder.projectID;
body['ClinicID'] = patientLabOrder.clinicID;
//TODO Check the res
await baseAppClient.post(GET_Patient_LAB_RESULT,
onSuccess: (dynamic response, int statusCode) {
patientLabSpecialResult.clear();
response['ListPLR'].forEach((lab) {
labResultList.add(LabResult.fromJson(lab));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
RequestSendLabReportEmail _requestSendLabReportEmail = RequestSendLabReportEmail _requestSendLabReportEmail =
RequestSendLabReportEmail(); RequestSendLabReportEmail();

@ -0,0 +1,148 @@
import 'dart:convert';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_advance_balance_amount.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info_and_mobile_number.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordsByStatusReq.dart';
import 'package:diplomaticquarterapp/services/family_files/family_files_provider.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
class MyBalanceService extends BaseService {
List<PatientAdvanceBalanceAmount> patientAdvanceBalanceAmountList = List();
double totalAdvanceBalanceAmount;
List<PatientInfo> patientInfoList = List();
GetAllSharedRecordsByStatusResponse getAllSharedRecordsByStatusResponse =
GetAllSharedRecordsByStatusResponse();
PatientInfoAndMobileNumber patientInfoAndMobileNumber;
String logInTokenID;
String verificationCode;
getPatientAdvanceBalanceAmount() async {
hasError = false;
super.error = "";
await baseAppClient.post(GET_PATIENT_AdVANCE_BALANCE_AMOUNT,
onSuccess: (response, statusCode) async {
patientAdvanceBalanceAmountList.clear();
response['List_PatientAdvanceBalanceAmount'].forEach((item) {
patientAdvanceBalanceAmountList
.add(PatientAdvanceBalanceAmount.fromJson(item));
});
totalAdvanceBalanceAmount = response['TotalAdvanceBalanceAmount'];
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: Map());
}
getPatientInfoByPatientID({String id}) async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['SearchPatientID'] = int.parse(id);
body['isDentalAllowedBackend'] = false;
await baseAppClient.post(GET_PATIENT_INFO_BY_ID,
onSuccess: (response, statusCode) async {
patientInfoList.clear();
response['GetPatientInfoByPatientIDList'].forEach((item) {
patientInfoList.add(PatientInfo.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
getPatientInfoByPatientIDAndMobileNumber() async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['isDentalAllowedBackend'] = false;
body['MobileNo'] = user.mobileNumber;
body['ProjectID'] = user.projectID;
await baseAppClient.post(GET_PATIENT_INFO_BY_ID_AND_MOBILE_NUMBER,
onSuccess: (response, statusCode) async {
response['List_PatientInfo'].forEach((item) {
patientInfoAndMobileNumber = PatientInfoAndMobileNumber.fromJson(item);
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
super.error = error;
}, body: body);
}
sendActivationCodeForAdvancePayment({int patientID,int projectID}) async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['PatientID'] = patientID;
body['ProjectID'] = projectID;
body['isDentalAllowedBackend'] = false;
await baseAppClient.post(SEND_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT,
onSuccess: (response, statusCode) async {
logInTokenID = response['LogInTokenID'];
verificationCode = response['VerificationCode'];
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
super.error = error;
}, body: body);
}
checkActivationCodeForAdvancePayment({String activationCode}) async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['activationCode'] = activationCode;
body['PatientMobileNumber'] = 'XXXXXXXXXX';
body['isDentalAllowedBackend'] = false;
body['LogInTokenID'] = logInTokenID;
await baseAppClient.post(CHECK_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT,
onSuccess: (response, statusCode) async {
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
super.error = error;
}, body: body);
}
getSharedRecordByStatus() async {
try {
var request = GetAllSharedRecordsByStatusReq();
request.status = 0;
await baseAppClient.post(GET_SHARED_RECORD_BY_STATUS,
onSuccess: (dynamic response, int statusCode) {
sharedPref.setObject(FAMILY_FILE, response);
getAllSharedRecordsByStatusResponse =
GetAllSharedRecordsByStatusResponse.fromJson(response);
}, onFailure: (String error, int statusCode) {
AppToast.showErrorToast(message: error);
hasError = true;
super.error = error;
}, body: request.toJson());
} catch (error) {
print(error);
hasError = true;
super.error = error;
}
}
getFamilyFiles() async {
if (await sharedPref.getObject(FAMILY_FILE) != null) {
getAllSharedRecordsByStatusResponse =
GetAllSharedRecordsByStatusResponse.fromJson(
await sharedPref.getObject(FAMILY_FILE));
return getAllSharedRecordsByStatusResponse;
} else {
return getSharedRecordByStatus();
}
}
}

@ -1,7 +1,6 @@
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/doctor/doctor_profile.dart'; import 'package:diplomaticquarterapp/core/model/doctor/doctor_profile.dart';
import 'package:diplomaticquarterapp/core/model/doctor/doctor_rating.dart'; import 'package:diplomaticquarterapp/core/model/doctor/doctor_rating.dart';
import 'package:diplomaticquarterapp/core/model/doctor/patient_doctor_appointment.dart';
import 'package:diplomaticquarterapp/core/model/doctor/reques_patient_doctor_appointmentt.dart'; import 'package:diplomaticquarterapp/core/model/doctor/reques_patient_doctor_appointmentt.dart';
import 'package:diplomaticquarterapp/core/model/doctor/request_doctor_profile.dart'; import 'package:diplomaticquarterapp/core/model/doctor/request_doctor_profile.dart';
import 'package:diplomaticquarterapp/core/model/doctor/request_doctor_rating.dart'; import 'package:diplomaticquarterapp/core/model/doctor/request_doctor_rating.dart';
@ -9,7 +8,7 @@ import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
class MyDoctorService extends BaseService { class MyDoctorService extends BaseService {
List<PatientDoctorAppointment> patientDoctorAppointmentList = List(); List<DoctorList> patientDoctorAppointmentList = List();
DoctorProfile doctorProfile; DoctorProfile doctorProfile;
DoctorList doctorList; DoctorList doctorList;
DoctorRating doctorRating = DoctorRating(); DoctorRating doctorRating = DoctorRating();
@ -51,7 +50,7 @@ class MyDoctorService extends BaseService {
patientDoctorAppointmentList.clear(); patientDoctorAppointmentList.clear();
response['PatientDoctorAppointmentResultList'].forEach((hospital) { response['PatientDoctorAppointmentResultList'].forEach((hospital) {
patientDoctorAppointmentList patientDoctorAppointmentList
.add(PatientDoctorAppointment.fromJson(hospital)); .add(DoctorList.fromJson(hospital));
}); });
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;

@ -0,0 +1,83 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/reports/Reports.dart';
import 'package:diplomaticquarterapp/core/model/reports/request_reports.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/pages/feedback/appointment_history.dart';
class ReportsMonthlyService extends BaseService {
List<Reports> reportsList = List();
List<AppointmentHistory> appointHistoryList = List();
RequestReports _requestReports = RequestReports(
isReport: true,
encounterType: 1,
requestType: 1,
versionID: 5.5,
channel: 3,
languageID: 2,
iPAdress: "10.20.10.20",
generalid: 'Cs2020@2016\$2958',
patientOutSA: 0,
sessionID: 'KIbLoqkytuKJEWECHQ',
isDentalAllowedBackend: false,
deviceTypeID: 2,
patientID: 1231755,
tokenID: '@dm!n',
patientTypeID: 1,
patientType: 1);
Future getReports() async {
hasError = false;
await baseAppClient.post(REPORTS,
onSuccess: (dynamic response, int statusCode) {
reportsList.clear();
response['GetPatientMedicalStatus'].forEach((reports) {
reportsList.add(Reports.fromJson(reports));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: _requestReports.toJson());
}
Future getPatentAppointmentHistory() async {
hasError = false;
Map<String, dynamic> body = new Map<String, dynamic>();
body['IsForMedicalReport'] = true;
await baseAppClient.post(GET_PATIENT_AppointmentHistory,
onSuccess: (dynamic response, int statusCode) {
appointHistoryList = [];
response['AppoimentAllHistoryResultList'].forEach((appoint) {
appointHistoryList.add(AppointmentHistory.fromJson(appoint));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
Future insertRequestForMedicalReport(
AppointmentHistory appointmentHistory) async {
Map<String, dynamic> body = new Map<String, dynamic>();
body['ClinicID'] = appointmentHistory.clinicID;
body['DoctorID'] = appointmentHistory.doctorID;
body['SetupID'] = appointmentHistory.setupID;
body['EncounterNo'] = appointmentHistory.appointmentNo;
body['EncounterType'] = 1;// appointmentHistory.appointmentType;
body['IsActive'] = appointmentHistory.isActiveDoctor;
body['ProjectID'] = appointmentHistory.projectID;
body['Remarks'] = "";
body['ProcedureId'] = "";
body['RequestType'] = 1;
body['Source'] = 2;
body['Status'] = 1;
body['CreatedBy'] = 102;
hasError = false;
await baseAppClient.post(INSERT_REQUEST_FOR_MEDICAL_REPORT,
onSuccess: (dynamic response, int statusCode) {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
}

@ -7,7 +7,7 @@ import 'package:diplomaticquarterapp/pages/feedback/appointment_history.dart';
class ReportsService extends BaseService { class ReportsService extends BaseService {
List<Reports> reportsList = List(); List<Reports> reportsList = List();
List<AppointmentHistory> appointHistoryList = List(); List<AppointmentHistory> appointHistoryList = List();
String userAgreementContent = "";
RequestReports _requestReports = RequestReports( RequestReports _requestReports = RequestReports(
isReport: true, isReport: true,
encounterType: 1, encounterType: 1,
@ -44,7 +44,7 @@ class ReportsService extends BaseService {
hasError = false; hasError = false;
Map<String, dynamic> body = new Map<String, dynamic>(); Map<String, dynamic> body = new Map<String, dynamic>();
body['IsForMedicalReport'] = true; body['IsForMedicalReport'] = true;
await baseAppClient.post(GET_PATIENT_AppointmentHistory, await baseAppClient.post(GET_PATIENT_AppointmentHistory,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
appointHistoryList = []; appointHistoryList = [];
response['AppoimentAllHistoryResultList'].forEach((appoint) { response['AppoimentAllHistoryResultList'].forEach((appoint) {
@ -56,6 +56,33 @@ class ReportsService extends BaseService {
}, body: body); }, body: body);
} }
Future getUserTermsAndConditions() async {
hasError = false;
await baseAppClient.post(GET_USER_TERMS,
onSuccess: (dynamic response, int statusCode) {
userAgreementContent = response['UserAgreementContent'];
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: Map<String, dynamic>());
}
Future updatePatientHealthSummaryReport({bool isSummary}) async {
Map<String, dynamic> body = Map<String, dynamic>();
body['RSummaryReport'] = isSummary;
hasError = false;
await baseAppClient.post(UPDATE_HEALTH_TERMS,
onSuccess: (dynamic response, int statusCode) {
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
Future insertRequestForMedicalReport( Future insertRequestForMedicalReport(
AppointmentHistory appointmentHistory) async { AppointmentHistory appointmentHistory) async {
Map<String, dynamic> body = new Map<String, dynamic>(); Map<String, dynamic> body = new Map<String, dynamic>();
@ -63,7 +90,7 @@ class ReportsService extends BaseService {
body['DoctorID'] = appointmentHistory.doctorID; body['DoctorID'] = appointmentHistory.doctorID;
body['SetupID'] = appointmentHistory.setupID; body['SetupID'] = appointmentHistory.setupID;
body['EncounterNo'] = appointmentHistory.appointmentNo; body['EncounterNo'] = appointmentHistory.appointmentNo;
body['EncounterType'] = 1;// appointmentHistory.appointmentType; body['EncounterType'] = 1; // appointmentHistory.appointmentType;
body['IsActive'] = appointmentHistory.isActiveDoctor; body['IsActive'] = appointmentHistory.isActiveDoctor;
body['ProjectID'] = appointmentHistory.projectID; body['ProjectID'] = appointmentHistory.projectID;
body['Remarks'] = ""; body['Remarks'] = "";
@ -73,7 +100,7 @@ class ReportsService extends BaseService {
body['Status'] = 1; body['Status'] = 1;
body['CreatedBy'] = 102; body['CreatedBy'] = 102;
hasError = false; hasError = false;
await baseAppClient.post(INSERT_REQUEST_FOR_MEDICAL_REPORT, await baseAppClient.post(INSERT_REQUEST_FOR_MEDICAL_REPORT,
onSuccess: (dynamic response, int statusCode) {}, onSuccess: (dynamic response, int statusCode) {},
onFailure: (String error, int statusCode) { onFailure: (String error, int statusCode) {
hasError = true; hasError = true;

@ -1,31 +1,20 @@
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/vaccine/vaccination_item.dart';
import 'package:diplomaticquarterapp/core/model/vaccine/vaccination_on_hand.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/core/model/vaccine/my_vaccine.dart'; import 'package:diplomaticquarterapp/core/model/vaccine/my_vaccine.dart';
class VaccineService extends BaseService { class VaccineService extends BaseService {
List<VaccineModel> _vaccineList = List(); List<VaccineModel> _vaccineList = List();
List<VaccinationItem> vaccinationItemList = List();
List<VaccinationOnHand> vaccinationOnHandList = List();
List<VaccineModel> get vaccineList => _vaccineList; List<VaccineModel> get vaccineList => _vaccineList;
VaccineModel _vaccineModel = VaccineModel(
to: "0",
from: "0",
channel: 3,
deviceTypeID: 2,
generalid: "Cs2020@2016\$2958",
iPAdress: "10.20.10.20",
isDentalAllowedBackend: false,
languageID: 2,
patientID: 1231755,
patientOutSA: 0,
patientType: 1,
patientTypeID: 1,
sessionID: "uoKFXSLUwEaHYPwKZNA",
tokenID: "@dm!n",
versionID: 5.5,
);
Future getMyVaccine() async { Future getMyVaccine() async {
Map<String, dynamic> body = Map();
body['To'] = "0";
body['From'] = "0";
hasError = false; hasError = false;
_vaccineList.clear(); _vaccineList.clear();
await baseAppClient.post(GET_VACCINES, await baseAppClient.post(GET_VACCINES,
@ -36,8 +25,51 @@ class VaccineService extends BaseService {
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;
}, body: _vaccineModel.toJson()); }, body: body);
} }
Future sendEmail() async {} Future sendEmail() async {
Map<String, dynamic> body = Map();
body['ListVaccines'] = vaccineList.map((v) => v.toJson()).toList();
body['To'] = user.emailAddress;
body['DateofBirth'] = user.dateofBirth;
body['PatientIditificationNum'] = user.patientIdentificationNo;
body['PatientMobileNumber'] = user.mobileNumber;
body['PatientName'] = user.firstName + " " + user.lastName;
hasError = false;
await baseAppClient.post(GET_VACCINES_EMAIL,
onSuccess: (dynamic response, int statusCode) {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
Future getMyVaccinationItem() async {
await baseAppClient.post(GET_VACCINATIONS_ITEMS,
onSuccess: (dynamic response, int statusCode) {
response['GetVaccinationsList'].forEach((item) {
vaccinationItemList.add(VaccinationItem.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: Map());
}
Future getMyVaccinationOnHand({String pItemCode}) async {
Map<String, dynamic> body = Map();
body['P_ITEM_CODE'] = pItemCode;
await baseAppClient.post(GET_VACCINATION_ONHAND,
onSuccess: (dynamic response, int statusCode) {
response['GetVaccinationOnHandList'].forEach((item) {
vaccinationOnHandList.add(VaccinationOnHand.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
} }

@ -0,0 +1,32 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/er/get_all_transportation_method_list_model.dart';
import 'package:diplomaticquarterapp/core/service/er/am_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import '../base_view_model.dart';
import '../../../locator.dart';
class AmRequestViewModel extends BaseViewModel{
AmService _amService = locator<AmService>();
List<PatientER_RRT_GetAllTransportationMethodListModel> get AmRequestModeList=>
_amService.AmModelList;
getAmRequestOrders({int id, int projectID}) async {
setState(ViewState.Busy);
await _amService.getAllTransportationOrders();
if ( _amService.hasError) {
error = _amService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}

@ -0,0 +1,31 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/er/projectavgerwaitingtime.dart';
import 'package:diplomaticquarterapp/core/service/er/er_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/BranchView.dart';
import '../../../locator.dart';
class NearHospitalViewModel extends BaseViewModel {
ErService _erService = locator<ErService>();
List<ProjectAvgERWaitingTime> get ProjectAvgERWaitingTimeModeList =>
_erService.projectAvgERWaitingTimeModelList;
getProjectAvgERWaitingTimeOrders({int id, int projectID}) async {
setState(ViewState.Busy);
if (id != null && projectID != null) {
await _erService.getProjectAvgERWaitingTimeOrders(
id: id, projectID: projectID);
} else {
await _erService.getProjectAvgERWaitingTimeOrders();
}
if (_erService.hasError) {
error = _erService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}

@ -3,6 +3,7 @@ import 'package:diplomaticquarterapp/core/model/insurance/insurance_approval.dar
import 'package:diplomaticquarterapp/core/model/insurance/insurance_card.dart'; import 'package:diplomaticquarterapp/core/model/insurance/insurance_card.dart';
import 'package:diplomaticquarterapp/core/model/insurance/insurance_card_update.dart'; import 'package:diplomaticquarterapp/core/model/insurance/insurance_card_update.dart';
import 'package:diplomaticquarterapp/core/service/insurance_service.dart'; import 'package:diplomaticquarterapp/core/service/insurance_service.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart';
import '../../locator.dart'; import '../../locator.dart';
import 'base_view_model.dart'; import 'base_view_model.dart';
@ -20,6 +21,9 @@ class InsuranceViewModel extends BaseViewModel {
List<InsuranceApprovalModel> get insuranceApproval => List<InsuranceApprovalModel> get insuranceApproval =>
_insuranceCardService.insuranceApproval; _insuranceCardService.insuranceApproval;
GetAllSharedRecordsByStatusResponse get getAllSharedRecordsByStatusResponse =>
_insuranceCardService.getAllSharedRecordsByStatusResponse;
Future getInsurance() async { Future getInsurance() async {
hasError = false; hasError = false;
_insuranceCardService.clearInsuranceCard(); _insuranceCardService.clearInsuranceCard();
@ -41,7 +45,7 @@ class InsuranceViewModel extends BaseViewModel {
error = _insuranceCardService.error; error = _insuranceCardService.error;
setState(ViewState.ErrorLocal); setState(ViewState.ErrorLocal);
} else } else
setState(ViewState.Idle); getFamilyFiles();
} }
Future getInsuranceApproval({int appointmentNo}) async { Future getInsuranceApproval({int appointmentNo}) async {
@ -59,4 +63,13 @@ class InsuranceViewModel extends BaseViewModel {
} else } else
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future getFamilyFiles() async {
await _insuranceCardService.getFamilyFiles();
if (_insuranceCardService.hasError) {
error = _insuranceCardService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
} }

@ -1,6 +1,6 @@
import 'package:diplomaticquarterapp/core/enum/filter_type.dart'; import 'package:diplomaticquarterapp/core/enum/filter_type.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/labs/lab_result.dart';
import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart'; import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart';
import 'package:diplomaticquarterapp/core/model/labs/patient_lab_special_result.dart'; import 'package:diplomaticquarterapp/core/model/labs/patient_lab_special_result.dart';
import 'package:diplomaticquarterapp/core/service/medical/labs_service.dart'; import 'package:diplomaticquarterapp/core/service/medical/labs_service.dart';
@ -78,13 +78,32 @@ class LabsViewModel extends BaseViewModel {
List<PatientLabSpecialResult> get patientLabSpecialResult => List<PatientLabSpecialResult> get patientLabSpecialResult =>
_labsService.patientLabSpecialResult; _labsService.patientLabSpecialResult;
List<LabResult> get labResultList => _labsService.labResultList;
getLaboratoryResult( getLaboratoryResult(
{String projectID, {String projectID,
int clinicID, int clinicID,
String invoiceNo, String invoiceNo,
String orderNo}) async { String orderNo}) async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _labsService.getLaboratoryResult(invoiceNo: invoiceNo,orderNo: orderNo,projectID: projectID,clinicID: clinicID); await _labsService.getLaboratoryResult(
invoiceNo: invoiceNo,
orderNo: orderNo,
projectID: projectID,
clinicID: clinicID);
if (_labsService.hasError) {
error = _labsService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
getPatientLabResult({PatientLabOrders patientLabOrder}) async {
setState(ViewState.Busy);
await _labsService.getPatientLabResult(
patientLabOrder: patientLabOrder
);
if (_labsService.hasError) { if (_labsService.hasError) {
error = _labsService.error; error = _labsService.error;
setState(ViewState.Error); setState(ViewState.Error);

@ -0,0 +1,116 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_advance_balance_amount.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info_and_mobile_number.dart';
import 'package:diplomaticquarterapp/core/service/hospital_service.dart';
import 'package:diplomaticquarterapp/core/service/medical/my_balance_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
class MyBalanceViewModel extends BaseViewModel {
MyBalanceService _myBalanceService = locator<MyBalanceService>();
HospitalService _hospitalService = locator<HospitalService>();
List<HospitalsModel> get hospitals => _hospitalService.hospitals;
List<PatientAdvanceBalanceAmount> get patientAdvanceBalanceAmountList =>
_myBalanceService.patientAdvanceBalanceAmountList;
double get totalAdvanceBalanceAmount =>
_myBalanceService.totalAdvanceBalanceAmount;
GetAllSharedRecordsByStatusResponse get getAllSharedRecordsByStatusResponse =>
_myBalanceService.getAllSharedRecordsByStatusResponse;
List<PatientInfo> get patientInfoList => _myBalanceService.patientInfoList;
PatientInfoAndMobileNumber get patientInfoAndMobileNumber =>
_myBalanceService.patientInfoAndMobileNumber;
String get logInTokenID => _myBalanceService.logInTokenID;
String get verificationCode => _myBalanceService.verificationCode;
getPatientAdvanceBalanceAmount() async {
setState(ViewState.Busy);
await _myBalanceService.getPatientAdvanceBalanceAmount();
if (_myBalanceService.hasError) {
error = _myBalanceService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
Future getHospitals() async {
setState(ViewState.Busy);
await _hospitalService.getHospitals();
if (_hospitalService.hasError) {
error = _hospitalService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future getPatientInfoByPatientID({String id}) async {
setState(ViewState.Busy);
await _myBalanceService.getPatientInfoByPatientID(id: id);
if (_myBalanceService.hasError) {
error = _myBalanceService.error;
setState(ViewState.ErrorLocal);
AppToast.showErrorToast(message: error);
} else {
setState(ViewState.Idle);
}
}
Future getPatientInfoByPatientIDAndMobileNumber() async {
setState(ViewState.Busy);
await _myBalanceService.getPatientInfoByPatientIDAndMobileNumber();
if (_myBalanceService.hasError) {
error = _myBalanceService.error;
setState(ViewState.ErrorLocal);
AppToast.showErrorToast(message: error);
} else {
setState(ViewState.Idle);
}
}
Future sendActivationCodeForAdvancePayment({int patientID,int projectID}) async {
setState(ViewState.Busy);
await _myBalanceService.sendActivationCodeForAdvancePayment(patientID: patientID,projectID: projectID);
if (_myBalanceService.hasError) {
error = _myBalanceService.error;
setState(ViewState.ErrorLocal);
AppToast.showErrorToast(message: error);
} else {
setState(ViewState.Idle);
}
}
Future checkActivationCodeForAdvancePayment({String activationCode}) async {
setState(ViewState.Busy);
await _myBalanceService.checkActivationCodeForAdvancePayment(activationCode: activationCode);
if (_myBalanceService.hasError) {
error = _myBalanceService.error;
setState(ViewState.ErrorLocal);
} else {
setState(ViewState.Idle);
}
}
Future getFamilyFiles() async {
setState(ViewState.Busy);
await _myBalanceService.getFamilyFiles();
if (_myBalanceService.hasError) {
error = _myBalanceService.error;
setState(ViewState.ErrorLocal);
AppToast.showErrorToast(message: error);
} else {
setState(ViewState.Idle);
}
}
}

@ -2,7 +2,6 @@ import 'package:diplomaticquarterapp/core/enum/filter_type.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/doctor/doctor_profile.dart'; import 'package:diplomaticquarterapp/core/model/doctor/doctor_profile.dart';
import 'package:diplomaticquarterapp/core/model/doctor/doctor_rating.dart'; import 'package:diplomaticquarterapp/core/model/doctor/doctor_rating.dart';
import 'package:diplomaticquarterapp/core/model/doctor/patient_doctor_appointment.dart';
import 'package:diplomaticquarterapp/core/service/medical/my_doctor_service.dart'; import 'package:diplomaticquarterapp/core/service/medical/my_doctor_service.dart';
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
@ -65,9 +64,7 @@ class MyDoctorViewModel extends BaseViewModel {
.toList(); .toList();
if (doctorByHospital.length != 0) { if (doctorByHospital.length != 0) {
_patientDoctorAppointmentListHospital[ _patientDoctorAppointmentListHospital[_patientDoctorAppointmentListHospital.indexOf(doctorByHospital[0])]
_patientDoctorAppointmentListHospital
.indexOf(doctorByHospital[0])]
.patientDoctorAppointmentList .patientDoctorAppointmentList
.add(element); .add(element);
} else { } else {

@ -0,0 +1,42 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/sick_leave/sick_leave.dart';
import 'package:diplomaticquarterapp/core/service/medical/PatientSickLeaveService.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
class PatientSickLeaveViewMode extends BaseViewModel {
PatientSickLeaveService _patientSickLeaveService =
locator<PatientSickLeaveService>();
List<SickLeave> get sickLeaveList => _patientSickLeaveService.sickLeaveList;
getSickLeave() async {
setState(ViewState.Busy);
await _patientSickLeaveService.getSickLeave();
if (_patientSickLeaveService.hasError) {
error = _patientSickLeaveService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
Future sendSickLeaveEmail(
{String message,
int requestNo,
String projectName,
String doctorName,int projectID,String setupID}) async {
setState(ViewState.Busy);
await _patientSickLeaveService.sendSickLeaveEmail(
requestNo: requestNo, projectName: projectName, doctorName: doctorName,projectID: projectID,setupID: setupID);
if (_patientSickLeaveService.hasError) {
error = _patientSickLeaveService.error;
setState(ViewState.ErrorLocal);
AppToast.showErrorToast(message: error);
} else {
AppToast.showSuccessToast(message: message);
setState(ViewState.Idle);
}
}
}

@ -0,0 +1,46 @@
import 'package:diplomaticquarterapp/pages/feedback/appointment_history.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import '../../../core/enum/reportfilter_type.dart';
import '../../../core/enum/viewstate.dart';
import '../../../core/model/reports/Reports.dart';
import '../../../core/service/medical/reports_service.dart';
import '../../../locator.dart';
import '../base_view_model.dart';
class ReportsMonthlyViewModel extends BaseViewModel {
ReportFilterType filterType = ReportFilterType.Requested;
ReportsService _reportsService = locator<ReportsService>();
String get userAgreementContent => _reportsService.userAgreementContent;
getUserTermsAndConditions() async{
setState(ViewState.Busy);
await _reportsService.getUserTermsAndConditions();
if (_reportsService.hasError) {
error = _reportsService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
updatePatientHealthSummaryReport({String message, bool isSummary})async{
setState(ViewState.BusyLocal);
await _reportsService.updatePatientHealthSummaryReport(isSummary: isSummary);
if (_reportsService.hasError) {
error = _reportsService.error;
AppToast.showErrorToast(message: error);
setState(ViewState.ErrorLocal);
} else {
AppToast.showSuccessToast(message: message);
setState(ViewState.Idle);
}
}
}

@ -9,7 +9,7 @@ import 'package:flutter/cupertino.dart';
class ProjectViewModel extends BaseViewModel { class ProjectViewModel extends BaseViewModel {
AppSharedPreferences sharedPref = AppSharedPreferences(); AppSharedPreferences sharedPref = AppSharedPreferences();
Locale _appLocale; Locale _appLocale;
String currentLanguage = 'ar'; String currentLanguage = 'en';
bool _isArabic = false; bool _isArabic = false;
bool isInternetConnection = true; bool isInternetConnection = true;
bool isLoading = false; bool isLoading = false;
@ -45,7 +45,7 @@ class ProjectViewModel extends BaseViewModel {
void loadSharedPrefLanguage() async { void loadSharedPrefLanguage() async {
currentLanguage = await sharedPref.getString(APP_LANGUAGE); currentLanguage = await sharedPref.getString(APP_LANGUAGE);
_appLocale = Locale(currentLanguage ?? 'ar'); _appLocale = Locale(currentLanguage ?? 'en');
_isArabic = currentLanguage != null _isArabic = currentLanguage != null
? currentLanguage == 'ar' ? true : false ? currentLanguage == 'ar' ? true : false
: true; : true;

@ -1,3 +1,6 @@
import 'package:diplomaticquarterapp/core/model/vaccine/vaccination_item.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'base_view_model.dart'; import 'base_view_model.dart';
import '../../locator.dart'; import '../../locator.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
@ -10,10 +13,11 @@ class VaccineViewModel extends BaseViewModel {
VaccineService _vaccineService = locator<VaccineService>(); VaccineService _vaccineService = locator<VaccineService>();
List<VaccineModel> get vaccineList => _vaccineService.vaccineList; List<VaccineModel> get vaccineList => _vaccineService.vaccineList;
List<VaccinationItem> get vaccinationItemList => _vaccineService.vaccinationItemList;
Future getVaccine() async { Future getVaccine() async {
hasError = false; hasError = false;
//_insuranceCardService.clearInsuranceCard();
setState(ViewState.Busy); setState(ViewState.Busy);
await _vaccineService.getMyVaccine(); await _vaccineService.getMyVaccine();
if (_vaccineService.hasError) { if (_vaccineService.hasError) {
@ -22,4 +26,40 @@ class VaccineViewModel extends BaseViewModel {
} else } else
setState(ViewState.Idle); setState(ViewState.Idle);
} }
Future getMyVaccinationItem() async {
hasError = false;
setState(ViewState.Busy);
await _vaccineService.getMyVaccinationItem();
if (_vaccineService.hasError) {
error = _vaccineService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future getMyVaccinationOnHand({String pItemCode}) async {
hasError = false;
setState(ViewState.Busy);
await _vaccineService.getMyVaccinationOnHand(pItemCode: pItemCode);
if (_vaccineService.hasError) {
error = _vaccineService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
Future sendEmail({String message}) async {
hasError = false;
setState(ViewState.BusyLocal);
await _vaccineService.sendEmail();
if (_vaccineService.hasError) {
error = _vaccineService.error;
setState(ViewState.ErrorLocal);
AppToast.showErrorToast(message: error);
} else {
AppToast.showSuccessToast(message: message);
setState(ViewState.Idle);
}
}
} }

@ -5,23 +5,33 @@ import 'package:get_it/get_it.dart';
import 'core/service/appointment_rate_service.dart'; import 'core/service/appointment_rate_service.dart';
import 'core/service/dashboard_service.dart'; import 'core/service/dashboard_service.dart';
import 'core/service/er/am_service.dart';
import 'core/service/er/er_service.dart';
import 'core/service/feedback/feedback_service.dart'; import 'core/service/feedback/feedback_service.dart';
import 'core/service/hospital_service.dart'; import 'core/service/hospital_service.dart';
import 'core/service/medical/PatientSickLeaveService.dart';
import 'core/service/medical/labs_service.dart'; import 'core/service/medical/labs_service.dart';
import 'core/service/medical/medical_service.dart'; import 'core/service/medical/medical_service.dart';
import 'core/service/medical/my_balance_service.dart';
import 'core/service/medical/my_doctor_service.dart'; import 'core/service/medical/my_doctor_service.dart';
import 'core/service/medical/prescriptions_service.dart'; import 'core/service/medical/prescriptions_service.dart';
import 'core/service/medical/radiology_service.dart'; import 'core/service/medical/radiology_service.dart';
import 'core/service/medical/reports_monthly_service.dart';
import 'core/service/medical/vital_sign_service.dart'; import 'core/service/medical/vital_sign_service.dart';
import 'core/viewModels/appointment_rate_view_model.dart'; import 'core/viewModels/appointment_rate_view_model.dart';
import 'core/viewModels/er/am_request_view_model.dart';
import 'core/viewModels/er/near_hospital_view_model.dart';
import 'core/viewModels/feedback/feedback_view_model.dart'; import 'core/viewModels/feedback/feedback_view_model.dart';
import 'core/service/medical/reports_service.dart'; import 'core/service/medical/reports_service.dart';
import 'core/viewModels/hospital_view_model.dart'; import 'core/viewModels/hospital_view_model.dart';
import 'core/viewModels/medical/labs_view_model.dart'; import 'core/viewModels/medical/labs_view_model.dart';
import 'core/viewModels/medical/medical_view_model.dart'; import 'core/viewModels/medical/medical_view_model.dart';
import 'core/viewModels/medical/my_balance_view_model.dart';
import 'core/viewModels/medical/my_doctor_view_model.dart'; import 'core/viewModels/medical/my_doctor_view_model.dart';
import 'core/viewModels/medical/patient_sick_leave_view_model.dart';
import 'core/viewModels/medical/prescriptions_view_model.dart'; import 'core/viewModels/medical/prescriptions_view_model.dart';
import 'core/viewModels/medical/radiology_view_model.dart'; import 'core/viewModels/medical/radiology_view_model.dart';
import 'core/viewModels/medical/reports_monthly_view_model.dart';
import 'core/viewModels/medical/vital_sign_view_model.dart'; import 'core/viewModels/medical/vital_sign_view_model.dart';
import 'core/viewModels/medical/reports_view_model.dart'; import 'core/viewModels/medical/reports_view_model.dart';
import 'core/viewModels/pharmacies_view_model.dart'; import 'core/viewModels/pharmacies_view_model.dart';
@ -53,6 +63,13 @@ void setupLocator() {
locator.registerLazySingleton(() => AppointmentRateService()); locator.registerLazySingleton(() => AppointmentRateService());
locator.registerLazySingleton(() => QrService()); locator.registerLazySingleton(() => QrService());
locator.registerFactory(() => VaccineService()); locator.registerFactory(() => VaccineService());
locator.registerLazySingleton(() => ReportsMonthlyService());
locator.registerLazySingleton(() => ErService());
locator.registerLazySingleton(() => AmService());
locator.registerLazySingleton(() => PatientSickLeaveService());
locator.registerLazySingleton(() => MyBalanceService());
/// View Model /// View Model
locator.registerFactory(() => HospitalViewModel()); locator.registerFactory(() => HospitalViewModel());
@ -70,5 +87,10 @@ void setupLocator() {
locator.registerFactory(() => DashboardViewModel()); locator.registerFactory(() => DashboardViewModel());
locator.registerFactory(() => AppointmentRateViewModel()); locator.registerFactory(() => AppointmentRateViewModel());
locator.registerFactory(() => QrViewModel()); locator.registerFactory(() => QrViewModel());
locator.registerFactory(() => ReportsMonthlyViewModel());
locator.registerFactory(() => NearHospitalViewModel());
locator.registerFactory(() => AmRequestViewModel());
locator.registerFactory(() => PatientSickLeaveViewMode());
locator.registerFactory(() => MyBalanceViewModel());
} }

@ -1,7 +1,4 @@
import 'package:diplomaticquarterapp/pages/livecare/livecare_home.dart';
import 'package:diplomaticquarterapp/pages/login/login.dart';
import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/uitl/navigation_service.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
@ -69,9 +66,9 @@ class MyApp extends StatelessWidget {
hintColor: Colors.grey[400], hintColor: Colors.grey[400],
disabledColor: Colors.grey[300], disabledColor: Colors.grey[300],
errorColor: Color.fromRGBO(235, 80, 60, 1.0), errorColor: Color.fromRGBO(235, 80, 60, 1.0),
scaffoldBackgroundColor:Hexcolor('#E0E0E0'),// Colors.grey[100], scaffoldBackgroundColor:Hexcolor('#E9E9E9'),// Colors.grey[100],
textSelectionColor: Color.fromRGBO(80, 100, 253, 0.5), textSelectionColor: Color.fromRGBO(80, 100, 253, 0.5),
textSelectionHandleColor: Color.fromRGBO(80, 100, 253, 1.0), textSelectionHandleColor: Colors.grey,
canvasColor: Colors.white, canvasColor: Colors.white,
backgroundColor: Color.fromRGBO(255, 255, 255, 1), backgroundColor: Color.fromRGBO(255, 255, 255, 1),
highlightColor: Colors.grey[100].withOpacity(0.4), highlightColor: Colors.grey[100].withOpacity(0.4),
@ -80,7 +77,7 @@ class MyApp extends StatelessWidget {
bottomSheetTheme:BottomSheetThemeData( bottomSheetTheme:BottomSheetThemeData(
backgroundColor: Hexcolor('#E0E0E0') backgroundColor: Hexcolor('#E0E0E0')
) , ) ,
cursorColor: Color.fromRGBO(78, 62, 253, 1.0), cursorColor: Colors.grey,
iconTheme: IconThemeData(), iconTheme: IconThemeData(),
appBarTheme: AppBarTheme( appBarTheme: AppBarTheme(
color: Colors.grey[700], color: Colors.grey[700],

@ -272,3 +272,13 @@ class AppoitmentAllHistoryResultList {
return data; return data;
} }
} }
class PatientAppointmentList {
String filterName = "";
List<AppoitmentAllHistoryResultList> patientDoctorAppointmentList = List();
PatientAppointmentList(
{this.filterName, AppoitmentAllHistoryResultList patientDoctorAppointment}) {
patientDoctorAppointmentList.add(patientDoctorAppointment);
}
}

@ -0,0 +1,48 @@
class DentalChiefComplaintsModel {
List<ListDentalChiefComplain> listDentalChiefComplain;
DentalChiefComplaintsModel({this.listDentalChiefComplain});
DentalChiefComplaintsModel.fromJson(Map<String, dynamic> json) {
if (json['List_DentalChiefComplain'] != null) {
listDentalChiefComplain = new List<ListDentalChiefComplain>();
json['List_DentalChiefComplain'].forEach((v) {
listDentalChiefComplain.add(new ListDentalChiefComplain.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.listDentalChiefComplain != null) {
data['List_DentalChiefComplain'] =
this.listDentalChiefComplain.map((v) => v.toJson()).toList();
}
return data;
}
}
class ListDentalChiefComplain {
int projectID;
int iD;
String name;
String nameN;
ListDentalChiefComplain({this.projectID, this.iD, this.name, this.nameN});
ListDentalChiefComplain.fromJson(Map<String, dynamic> json) {
projectID = json['ProjectID'];
iD = json['ID'];
name = json['Name'];
nameN = json['NameN'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ProjectID'] = this.projectID;
data['ID'] = this.iD;
data['Name'] = this.name;
data['NameN'] = this.nameN;
return data;
}
}

@ -1,5 +1,3 @@
import 'package:intl/intl.dart';
class DoctorList { class DoctorList {
int clinicID; int clinicID;
String clinicName; String clinicName;
@ -32,7 +30,7 @@ class DoctorList {
int noOfPatientsRate; int noOfPatientsRate;
int originalClinicID; int originalClinicID;
int personRate; int personRate;
int projectDistanceInKiloMeters; dynamic projectDistanceInKiloMeters;
String qR; String qR;
dynamic qRString; dynamic qRString;
int rateNumber; int rateNumber;
@ -87,7 +85,7 @@ class DoctorList {
clinicName = json['ClinicName']; clinicName = json['ClinicName'];
doctorTitle = json['DoctorTitle']; doctorTitle = json['DoctorTitle'];
iD = json['ID']; iD = json['ID'];
name = json['Name']; name = json['DoctorName']??json['Name'];
projectID = json['ProjectID']; projectID = json['ProjectID'];
projectName = json['ProjectName']; projectName = json['ProjectName'];
actualDoctorRate = json['ActualDoctorRate']; actualDoctorRate = json['ActualDoctorRate'];
@ -120,7 +118,7 @@ class DoctorList {
rateNumber = json['RateNumber']; rateNumber = json['RateNumber'];
serviceID = json['ServiceID']; serviceID = json['ServiceID'];
setupID = json['SetupID']; setupID = json['SetupID'];
if (json.containsKey('Speciality')) if (json.containsKey('Speciality') && json['Speciality']!=null)
speciality = json['Speciality'].cast<String>(); speciality = json['Speciality'].cast<String>();
workingHours = json['WorkingHours']; workingHours = json['WorkingHours'];
} }
@ -170,12 +168,13 @@ class DoctorList {
} }
} }
class DoctorListAppointmentList { class PatientDoctorAppointmentList {
String filterName = ""; String filterName = "";
String distanceInKMs = "";
List<DoctorList> patientDoctorAppointmentList = List(); List<DoctorList> patientDoctorAppointmentList = List();
DoctorListAppointmentList( PatientDoctorAppointmentList(
{this.filterName, DoctorList patientDoctorAppointment}) { {this.filterName, this.distanceInKMs, DoctorList patientDoctorAppointment}) {
patientDoctorAppointmentList.add(patientDoctorAppointment); patientDoctorAppointmentList.add(patientDoctorAppointment);
} }
} }

@ -0,0 +1,10 @@
class SearchInfo {
int ProjectID;
int ClinicID;
String DoctorName;
String SelectedDate;
String SelectedTime;
String currentLat;
String currentLong;
DateTime date;
}

@ -502,8 +502,6 @@ class _BookConfirmState extends State<BookConfirm> {
Future navigateToBookSuccess(context, DoctorList docObject, Future navigateToBookSuccess(context, DoctorList docObject,
PatientShareResponse patientShareResponse) async { PatientShareResponse patientShareResponse) async {
print(widget.appoDateFormatted);
// print(widget.appoTimeFormatted);
Navigator.push( Navigator.push(
context, context,

@ -1,19 +1,36 @@
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/CardCommon.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/CardCommon.dart';
import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart'; import 'package:diplomaticquarterapp/uitl/location_util.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../uitl/translations_delegate_base.dart'; import '../../uitl/translations_delegate_base.dart';
class BookingOptions extends StatelessWidget { class BookingOptions extends StatefulWidget {
final bool isAppbar; final bool isAppbar;
BookingOptions({this.isAppbar = false}); BookingOptions({this.isAppbar = false});
@override
_BookingOptionsState createState() => _BookingOptionsState();
}
class _BookingOptionsState extends State<BookingOptions> {
LocationUtils locationUtils;
@override
void initState() {
locationUtils =
new LocationUtils(isShowConfirmDialog: true, context: context);
WidgetsBinding.instance
.addPostFrameCallback((_) => locationUtils.getCurrentLocation());
super.initState();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final searchValue = Provider.of<SearchProvider>(context);
return AppScaffold( return AppScaffold(
isShowAppBar: isAppbar, isShowAppBar: widget.isAppbar,
appBarTitle: TranslationBase.of(context).bookAppo, appBarTitle: TranslationBase.of(context).bookAppo,
body: Container( body: Container(
margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0), margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0),

@ -0,0 +1,82 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/models/Appointments/DentalChiefComplaintsModel.dart';
import 'package:diplomaticquarterapp/models/Appointments/SearchInfoModel.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DentalComplaintCard.dart';
import 'package:diplomaticquarterapp/pages/livecare/widgets/clinic_card.dart';
import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
class DentalComplaints extends StatefulWidget {
SearchInfo searchInfo;
DentalComplaints({@required this.searchInfo});
@override
_DentalComplaintsState createState() => _DentalComplaintsState();
}
class _DentalComplaintsState extends State<DentalComplaints> {
List<ListDentalChiefComplain> complaintsList = [];
AppSharedPreferences sharedPref = AppSharedPreferences();
bool isDataLoaded = false;
var languageID;
@override
void initState() {
WidgetsBinding.instance
.addPostFrameCallback((_) => getChiefComplaintsList());
super.initState();
}
@override
Widget build(BuildContext context) {
return AppScaffold(
isShowAppBar: true,
appBarTitle: "Symptoms",
body: Container(
margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0.0),
child: ListView.builder(
itemCount: complaintsList.length,
itemBuilder: (BuildContext context, int index) {
return Container(
margin: EdgeInsets.only(bottom: 10.0),
child: DentalComplaintCard(
listDentalChiefComplain: complaintsList[index],
languageID: languageID,
),
);
},
),
),
);
}
getLanguageID() async {
languageID = await sharedPref.getString(APP_LANGUAGE);
}
getChiefComplaintsList() {
getLanguageID();
ClinicListService service = new ClinicListService();
service
.getChiefComplaintsList(
widget.searchInfo.ClinicID, widget.searchInfo.ProjectID, context)
.then((res) {
if (res['MessageStatus'] == 1) {
print(res['List_DentalChiefComplain']);
setState(() {
res['List_DentalChiefComplain'].forEach((v) {
complaintsList.add(new ListDentalChiefComplain.fromJson(v));
});
print(complaintsList.length);
});
} else {}
}).catchError((err) {
print(err);
}).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
}
}

@ -1,13 +1,17 @@
import 'package:diplomaticquarterapp/pages/BookAppointment/components/SearchByClinic.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/components/SearchByClinic.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/components/SearchByDoctor.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/components/SearchByDoctor.dart';
import 'package:diplomaticquarterapp/uitl/location_util.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/bottom_bar.dart'; import 'package:diplomaticquarterapp/widgets/others/bottom_bar.dart';
import 'package:diplomaticquarterapp/widgets/others/floating_button_search.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
class Search extends StatefulWidget { class Search extends StatefulWidget {
final int type; final int type;
Search({this.type = 0}); Search({this.type = 0});
@override @override
_SearchState createState() => _SearchState(); _SearchState createState() => _SearchState();
} }

@ -1,15 +1,17 @@
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart'; import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'widgets/DoctorView.dart';
class SearchResults extends StatefulWidget { class SearchResults extends StatefulWidget {
List<DoctorList> doctorsList = []; List<DoctorList> doctorsList = [];
List<PatientDoctorAppointmentList> patientDoctorAppointmentListHospital;
SearchResults({@required this.doctorsList}); SearchResults(
{@required this.doctorsList, this.patientDoctorAppointmentListHospital});
@override @override
_SearchResultsState createState() => _SearchResultsState(); _SearchResultsState createState() => _SearchResultsState();
@ -21,23 +23,7 @@ class _SearchResultsState extends State<SearchResults> {
@override @override
void initState() { void initState() {
event.controller.stream.listen((p) { event.controller.stream.listen((p) {});
// if (p['project_id'] != null) {
// tempList = [];
// widget.doctorsList.forEach((e) => {
// if (e.projectID == int.parse(p['project_id'])) {tempList.add(e)}
// });
// } else if (p['doctor_id'] != null) {
// tempList = [];
// widget.doctorsList.forEach((e) => {
// if (e.doctorID == int.parse(p['doctor_id'])) {tempList.add(e)}
// });
// DoctorView().getDoctorsProfile(context, tempList[0], isAppo: true);
// }
// setState(() {
// widget.doctorsList = tempList;
// });
});
super.initState(); super.initState();
} }
@ -47,20 +33,31 @@ class _SearchResultsState extends State<SearchResults> {
appBarTitle: TranslationBase.of(context).bookAppo, appBarTitle: TranslationBase.of(context).bookAppo,
isShowAppBar: true, isShowAppBar: true,
body: Container( body: Container(
margin: EdgeInsets.only(bottom: 10.0), margin: EdgeInsets.all(10.0),
child: SingleChildScrollView( child: SingleChildScrollView(
child: ListView.builder( physics: BouncingScrollPhysics(),
scrollDirection: Axis.vertical, child: Column(
shrinkWrap: true, children: <Widget>[
physics: ScrollPhysics(), ...List.generate(
padding: EdgeInsets.all(0.0), widget.patientDoctorAppointmentListHospital.length,
itemCount: widget.doctorsList.length, (index) => AppExpandableNotifier(
itemBuilder: (context, index) { title: widget
return DoctorView( .patientDoctorAppointmentListHospital[index].filterName + " - " +widget
//AJ note .patientDoctorAppointmentListHospital[index].distanceInKMs + " " + TranslationBase.of(context).km,
doctor: widget.doctorsList[index], bodyWidget: Column(
); crossAxisAlignment: CrossAxisAlignment.start,
}, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: widget
.patientDoctorAppointmentListHospital[index]
.patientDoctorAppointmentList
.map((doctor) {
return DoctorView(
doctor: doctor,
);
}).toList(),
)),
)
],
), ),
), ),
), ),

@ -1,21 +1,19 @@
import 'dart:convert'; import "dart:collection";
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
import 'package:diplomaticquarterapp/models/Appointments/SearchInfoModel.dart';
import 'package:diplomaticquarterapp/models/Clinics/ClinicListResponse.dart'; import 'package:diplomaticquarterapp/models/Clinics/ClinicListResponse.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/DentalComplaints.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/BranchView.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/BranchView.dart';
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart'; import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart';
import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart'; import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart';
import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart'; import 'package:smart_progress_bar/smart_progress_bar.dart';
import '../SearchResults.dart';
import "dart:collection";
class SearchByClinic extends StatefulWidget { class SearchByClinic extends StatefulWidget {
@override @override
_SearchByClinicState createState() => _SearchByClinicState(); _SearchByClinicState createState() => _SearchByClinicState();
@ -24,20 +22,15 @@ class SearchByClinic extends StatefulWidget {
class _SearchByClinicState extends State<SearchByClinic> { class _SearchByClinicState extends State<SearchByClinic> {
bool nearestAppo = false; bool nearestAppo = false;
String dropdownValue; String dropdownValue;
String projectDropdownValue;
var event = RobotProvider(); var event = RobotProvider();
List<ListClinicCentralized> clinicsList = []; List<ListClinicCentralized> clinicsList = [];
List<HospitalsModel> projectsList = [];
bool isMobileAppDentalAllow = false;
@override @override
void initState() { void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) => getClinicsList()); WidgetsBinding.instance.addPostFrameCallback((_) => getClinicsList());
// event.controller.stream.listen((p) {
// if (p['clinic_id'] != null) {
// // setState(() {
// dropdownValue = p['clinic_id'].toString();
// //});
// getDoctorsList(context);
// }
// });
super.initState(); super.initState();
} }
@ -89,25 +82,91 @@ class _SearchByClinicState extends State<SearchByClinic> {
onChanged: (newValue) { onChanged: (newValue) {
setState(() { setState(() {
dropdownValue = newValue; dropdownValue = newValue;
if (!isDentalSelectedAndSupported() && !nearestAppo) {
getDoctorsList(context); projectDropdownValue = "";
getDoctorsList(context);
}
}); });
}, },
), ),
)), )),
isDentalSelectedAndSupported() == true || nearestAppo
? Container(
height: 60.0,
decoration: BoxDecoration(
color: Colors.white,
border: Border.all(
color: Colors.grey[400],
width: 1.0,
),
borderRadius: BorderRadius.circular(10),
),
padding: EdgeInsets.all(8.0),
width: MediaQuery.of(context).size.width,
margin: EdgeInsets.only(top: 15.0),
child: DropdownButtonHideUnderline(
child: DropdownButton<String>(
hint: new Text("Select Project"),
value: projectDropdownValue,
items: projectsList.map((item) {
return new DropdownMenuItem<String>(
value: item.mainProjectID.toString(),
child: new Text(item.name),
);
}).toList(),
onChanged: (newValue) {
setState(() {
projectDropdownValue = newValue;
getDoctorsList(context);
});
},
),
))
: Container(),
], ],
), ),
); );
} }
bool isDentalSelectedAndSupported() {
return dropdownValue != "" &&
(dropdownValue == "17") &&
isMobileAppDentalAllow;
}
getClinicsList() { getClinicsList() {
ClinicListService service = new ClinicListService(); ClinicListService service = new ClinicListService();
service.getClinicsList(context).then((res) { service
.getClinicsList(context)
.then((res) {
if (res['MessageStatus'] == 1) {
setState(() {
isMobileAppDentalAllow = res['ISMobileAppDentalAllow'];
res['ListClinicCentralized'].forEach((v) {
clinicsList.add(new ListClinicCentralized.fromJson(v));
});
});
} else {}
})
.catchError((err) {
print(err);
})
.showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6))
.then((value) {
getProjectsList();
});
}
getProjectsList() {
ClinicListService service = new ClinicListService();
service.getProjectsList(context).then((res) {
if (res['MessageStatus'] == 1) { if (res['MessageStatus'] == 1) {
setState(() { setState(() {
res['ListClinicCentralized'].forEach((v) { res['ListProject'].forEach((v) {
clinicsList.add(new ListClinicCentralized.fromJson(v)); projectsList.add(new HospitalsModel.fromJson(v));
}); });
print(projectsList.length);
}); });
} else {} } else {}
}).catchError((err) { }).catchError((err) {
@ -117,54 +176,81 @@ class _SearchByClinicState extends State<SearchByClinic> {
} }
getDoctorsList(BuildContext context) { getDoctorsList(BuildContext context) {
List<DoctorList> doctorsList = []; SearchInfo searchInfo = new SearchInfo();
//======================== if (dropdownValue == "17") {
searchInfo.ProjectID = int.parse(projectDropdownValue);
searchInfo.ClinicID = int.parse(dropdownValue);
searchInfo.date = DateTime.now();
List<String> arr = []; navigateToDentalComplaints(context, searchInfo);
var distinctIds; } else {
List<String> result; List<DoctorList> doctorsList = [];
int numAll; List<String> arr = [];
//========================= List<String> arrDistance = [];
DoctorsListService service = new DoctorsListService(); List<String> result;
service.getDoctorsList(int.parse(dropdownValue), 0, context).then((res) { int numAll;
if (res['MessageStatus'] == 1) { DoctorsListService service = new DoctorsListService();
setState(() { service
if (res['DoctorList'].length != 0) { .getDoctorsList(
doctorsList.clear(); int.parse(dropdownValue),
res['DoctorList'].forEach((v) { projectDropdownValue != "" ? int.parse(projectDropdownValue) : 0,
doctorsList.add(new DoctorList.fromJson(v)); nearestAppo,
context)
.then((res) {
if (res['MessageStatus'] == 1) {
setState(() {
if (res['DoctorList'].length != 0) {
print(res['DoctorList']);
doctorsList.clear();
res['DoctorList'].forEach((v) {
doctorsList.add(new DoctorList.fromJson(v));
arr.add(new DoctorList.fromJson(v).projectName); arr.add(new DoctorList.fromJson(v).projectName);
// print(DoctorList.fromJson(v).projectName); arrDistance.add(new DoctorList.fromJson(v)
// print(DoctorList.fromJson(v).projectDistanceInKiloMeters); .projectDistanceInKiloMeters
// distinctIds = result.toSet().toList(); .toString());
}); });
} else {} } else {}
}); });
result = LinkedHashSet<String>.from(arr).toList(); result = LinkedHashSet<String>.from(arr).toList();
numAll = result.length; numAll = result.length;
// print(result);
print("numAll=" + numAll.toString());
navigateToSearchResults(context, doctorsList, result, numAll); navigateToSearchResults(
} else { context, doctorsList, result, numAll, arrDistance);
AppToast.showErrorToast(message: res['ErrorEndUserMessage']); } else {
} AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
}).catchError((err) { }
print(err); }).catchError((err) {
}).showProgressBar( print(err);
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); }).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
}
} }
Future navigateToSearchResults(context, docList, result, numAll) async { Future navigateToDentalComplaints(
BuildContext context, SearchInfo searchInfo) async {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => builder: (context) => DentalComplaints(searchInfo: searchInfo),
BranchView(doctorsList: docList, result: result, num: numAll),
), ),
); );
//builder: (context) => SearchResults(doctorsList: docList))); }
Future navigateToSearchResults(
context, docList, result, numAll, resultDistance) async {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BranchView(
doctorsList: docList,
result: result,
num: numAll,
resultDistance: resultDistance),
),
).then((value) {
getProjectsList();
});
} }
} }

@ -84,6 +84,10 @@ class _SearchByDoctorState extends State<SearchByDoctor> {
getDoctorsList(BuildContext context) { getDoctorsList(BuildContext context) {
List<DoctorList> doctorsList = []; List<DoctorList> doctorsList = [];
DoctorsListService service = new DoctorsListService(); DoctorsListService service = new DoctorsListService();
List<PatientDoctorAppointmentList> _patientDoctorAppointmentListHospital =
List();
service service
.getDoctorsListByName(doctorNameController.text, context) .getDoctorsListByName(doctorNameController.text, context)
.then((res) { .then((res) {
@ -93,9 +97,35 @@ class _SearchByDoctorState extends State<SearchByDoctor> {
res['DoctorList'].forEach((v) { res['DoctorList'].forEach((v) {
doctorsList.add(new DoctorList.fromJson(v)); doctorsList.add(new DoctorList.fromJson(v));
}); });
doctorsList.forEach((element) {
List<PatientDoctorAppointmentList> doctorByHospital =
_patientDoctorAppointmentListHospital
.where(
(elementClinic) =>
elementClinic.filterName == element.projectName,
)
.toList();
if (doctorByHospital.length != 0) {
_patientDoctorAppointmentListHospital[
_patientDoctorAppointmentListHospital
.indexOf(doctorByHospital[0])]
.patientDoctorAppointmentList
.add(element);
} else {
_patientDoctorAppointmentListHospital.add(
PatientDoctorAppointmentList(
filterName: element.projectName,
distanceInKMs: element.projectDistanceInKiloMeters.toString(),
patientDoctorAppointment: element));
}
});
} else {} } else {}
}); });
navigateToSearchResults(context, doctorsList);
navigateToSearchResults(
context, doctorsList, _patientDoctorAppointmentListHospital);
} else { } else {
AppToast.showErrorToast(message: res['ErrorEndUserMessage']); AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
} }
@ -107,7 +137,7 @@ class _SearchByDoctorState extends State<SearchByDoctor> {
_onDocTextChanged(content) { _onDocTextChanged(content) {
print(content); print(content);
if (content.length >= 4) { if (content.length >= 3) {
setState(() { setState(() {
_isButtonDisabled = false; _isButtonDisabled = false;
}); });
@ -123,10 +153,17 @@ class _SearchByDoctorState extends State<SearchByDoctor> {
getDoctorsList(context); getDoctorsList(context);
} }
Future navigateToSearchResults(context, List<DoctorList> docList) async { Future navigateToSearchResults(
context,
List<DoctorList> docList,
List<PatientDoctorAppointmentList>
patientDoctorAppointmentListHospital) async {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => SearchResults(doctorsList: docList))); builder: (context) => SearchResults(
doctorsList: docList,
patientDoctorAppointmentListHospital:
patientDoctorAppointmentListHospital)));
} }
} }

@ -1,8 +1,6 @@
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -12,9 +10,11 @@ class BranchView extends StatefulWidget {
final List<DoctorList> doctorsList; final List<DoctorList> doctorsList;
final List<String> result; final List<String> result;
final List<String> resultDistance;
final int num; final int num;
const BranchView({Key key, this.doctorsList, this.result, this.num}) const BranchView(
{Key key, this.doctorsList, this.result, this.resultDistance, this.num})
: super(key: key); : super(key: key);
@override @override
@ -30,8 +30,8 @@ class _BranchViewState extends State<BranchView> {
body: new ListView.builder( body: new ListView.builder(
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return new ExpandableListView( return new ExpandableListView(
result2: widget.result, result2: widget.result,
resultDistance: widget.resultDistance,
val: index, val: index,
doctorsList2: widget.doctorsList); doctorsList2: widget.doctorsList);
}, },
@ -42,13 +42,13 @@ class _BranchViewState extends State<BranchView> {
} }
class ExpandableListView extends StatefulWidget { class ExpandableListView extends StatefulWidget {
final List<String> result2; final List<String> result2;
final List<String> resultDistance;
final List<DoctorList> doctorsList2; final List<DoctorList> doctorsList2;
final val; final val;
const ExpandableListView( const ExpandableListView(
{Key key, this.result2, this.val, this.doctorsList2}) {Key key, this.result2, this.resultDistance, this.val, this.doctorsList2})
: super(key: key); : super(key: key);
@override @override
@ -61,11 +61,9 @@ class _ExpandableListViewState extends State<ExpandableListView> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return new Container( return new Container(
// margin: new EdgeInsets.symmetric(vertical: 1.0),
width: MediaQuery.of(context).size.width * 0.6, width: MediaQuery.of(context).size.width * 0.6,
margin: EdgeInsets.fromLTRB(20.0, 10.0, 10.0, 0.0), margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 0.0),
child: Card( child: Card(
// margin: EdgeInsets.fromLTRB(20.0, 16.0, 20.0, 8.0),
color: Colors.white, color: Colors.white,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
@ -77,19 +75,22 @@ class _ExpandableListViewState extends State<ExpandableListView> {
child: new Column( child: new Column(
children: <Widget>[ children: <Widget>[
new Container( new Container(
margin: EdgeInsets.only(left: 5.0, right: 5.0),
color: Colors.white, color: Colors.white,
// padding: new EdgeInsets.symmetric(horizontal: 5.0),
child: new Row( child: new Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
new Text( new Text(
widget.result2[widget.val].toString()+" "+ "22 كم", widget.result2[widget.val].toString() +
" " +
getProjectDistance(
widget.resultDistance[widget.val].toString()),
style: new TextStyle( style: new TextStyle(
fontWeight: FontWeight.bold, color: Colors.black), fontWeight: FontWeight.bold, color: Colors.black),
), ),
new IconButton( new IconButton(
icon: new Container( icon: new Container(
height: 30.0, height: 28.0,
width: 30.0, width: 30.0,
decoration: new BoxDecoration( decoration: new BoxDecoration(
color: Colors.red, color: Colors.red,
@ -124,13 +125,14 @@ class _ExpandableListViewState extends State<ExpandableListView> {
itemCount: widget.doctorsList2.length, itemCount: widget.doctorsList2.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
return widget.result2[widget.val].toString() == return widget.result2[widget.val].toString() ==
widget.doctorsList2[index].projectName.toString()? DoctorView( widget.doctorsList2[index].projectName.toString()
//AJ note ? DoctorView(
doctor: //AJ note
widget.doctorsList2[index] doctor: widget.doctorsList2[index]
// widget.doctorsList2[index] // widget.doctorsList2[index]
):Container(); )
: Container();
}, },
), ),
) )
@ -140,6 +142,14 @@ class _ExpandableListViewState extends State<ExpandableListView> {
), ),
); );
} }
String getProjectDistance(String distance) {
if (distance != "0")
return " - " + distance + " " + TranslationBase.of(context).km;
else {
return "";
}
}
} }
class ExpandableContainer extends StatelessWidget { class ExpandableContainer extends StatelessWidget {
@ -162,7 +172,7 @@ class ExpandableContainer extends StatelessWidget {
duration: new Duration(milliseconds: 500), duration: new Duration(milliseconds: 500),
curve: Curves.easeInOut, curve: Curves.easeInOut,
width: screenWidth, width: screenWidth,
height: expanded ? expandedHeight : collapsedHeight, height: expanded ? MediaQuery.of(context).size.height : collapsedHeight,
child: new Container( child: new Container(
child: child, child: child,
decoration: new BoxDecoration( decoration: new BoxDecoration(

@ -0,0 +1,135 @@
import 'package:diplomaticquarterapp/models/Appointments/DentalChiefComplaintsModel.dart';
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/SearchResults.dart';
import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:flutter/material.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
// ignore: must_be_immutable
class DentalComplaintCard extends StatefulWidget {
final ListDentalChiefComplain listDentalChiefComplain;
var languageID;
DentalComplaintCard(
{@required this.listDentalChiefComplain, this.languageID});
@override
_DentalComplaintCardState createState() => _DentalComplaintCardState();
}
class _DentalComplaintCardState extends State<DentalComplaintCard> {
@override
Widget build(BuildContext context) {
return Container(
child: InkWell(
onTap: () {
getChiefComplaintsList();
},
child: Card(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
child: Row(
children: <Widget>[
Container(
width: MediaQuery.of(context).size.width * 0.85,
padding: EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Container(
child: Text(widget.listDentalChiefComplain.name,
style:
TextStyle(fontSize: 16.0, color: Colors.black)),
),
],
),
),
Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Icon(Icons.arrow_forward_ios,
size: 20.0, color: Colors.black54),
],
),
),
],
),
),
),
);
}
getChiefComplaintsList() {
List<DoctorList> doctorsList = [];
List<PatientDoctorAppointmentList> _patientDoctorAppointmentListHospital =
List();
ClinicListService service = new ClinicListService();
service
.getChiefComplaintDoctorList(widget.listDentalChiefComplain.iD,
widget.listDentalChiefComplain.projectID, context)
.then((res) {
if (res['MessageStatus'] == 1) {
print(res['List_DentalDoctorChiefComplaintMapping']);
setState(() {
doctorsList.clear();
res['List_DentalDoctorChiefComplaintMapping'].forEach((v) {
doctorsList.add(new DoctorList.fromJson(v));
});
doctorsList.forEach((element) {
List<PatientDoctorAppointmentList> doctorByHospital =
_patientDoctorAppointmentListHospital
.where(
(elementClinic) =>
elementClinic.filterName == element.projectName,
)
.toList();
if (doctorByHospital.length != 0) {
_patientDoctorAppointmentListHospital[
_patientDoctorAppointmentListHospital
.indexOf(doctorByHospital[0])]
.patientDoctorAppointmentList
.add(element);
} else {
_patientDoctorAppointmentListHospital.add(
PatientDoctorAppointmentList(
filterName: element.projectName,
distanceInKMs:
element.projectDistanceInKiloMeters.toString(),
patientDoctorAppointment: element));
}
});
navigateToSearchResults(
context, doctorsList, _patientDoctorAppointmentListHospital);
});
} else {
AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
}
}).catchError((err) {
print(err);
}).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
}
Future navigateToSearchResults(
context,
List<DoctorList> docList,
List<PatientDoctorAppointmentList>
patientDoctorAppointmentListHospital) async {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SearchResults(
doctorsList: docList,
patientDoctorAppointmentListHospital:
patientDoctorAppointmentListHospital)));
}
}

@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart
import 'package:diplomaticquarterapp/models/Appointments/DoctorProfile.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorProfile.dart';
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:rating_bar/rating_bar.dart'; import 'package:rating_bar/rating_bar.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart'; import 'package:smart_progress_bar/smart_progress_bar.dart';
@ -21,7 +22,7 @@ class DoctorView extends StatelessWidget {
getDoctorsProfile(context, doctor); getDoctorsProfile(context, doctor);
}, },
child: Card( child: Card(
margin: EdgeInsets.fromLTRB(20.0, 16.0, 20.0, 8.0), margin: EdgeInsets.fromLTRB(10.0, 16.0, 10.0, 8.0),
color: Colors.white, color: Colors.white,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
@ -44,7 +45,7 @@ class DoctorView extends StatelessWidget {
Expanded( Expanded(
flex: 4, flex: 4,
child: Container( child: Container(
width: MediaQuery.of(context).size.width * 0.6, width: MediaQuery.of(context).size.width * 0.55,
margin: EdgeInsets.fromLTRB(20.0, 10.0, 10.0, 0.0), margin: EdgeInsets.fromLTRB(20.0, 10.0, 10.0, 0.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -81,6 +82,16 @@ class DoctorView extends StatelessWidget {
color: Colors.grey[600], color: Colors.grey[600],
letterSpacing: 1.0)), letterSpacing: 1.0)),
), ),
this.doctor.nearestFreeSlot != null ? Container(
margin: EdgeInsets.only(top: 3.0, bottom: 3.0),
child: Text(
getDate(this.doctor.nearestFreeSlot),
style: TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.bold,
color: Colors.green[600],
letterSpacing: 1.0)),
) : Container(),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
@ -144,6 +155,29 @@ class DoctorView extends StatelessWidget {
}).showProgressBar(text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); }).showProgressBar(text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
} }
String getDate(String date) {
DateTime dateObj = DateUtil.convertStringToDate(date);
return DateUtil.getWeekDay(dateObj.weekday) +
", " +
dateObj.day.toString() +
" " +
DateUtil.getMonth(dateObj.month) +
" " +
dateObj.year.toString() +
" " +
dateObj.hour.toString() +
":" +
getMinute(dateObj);
}
String getMinute(DateTime dateObj) {
if(dateObj.minute == 0) {
return dateObj.minute.toString() + "0";
} else {
return dateObj.minute.toString();
}
}
Future navigateToDoctorProfile(context, docObject, docProfile, Future navigateToDoctorProfile(context, docObject, docProfile,
{isAppo}) async { {isAppo}) async {
Navigator.push( Navigator.push(

@ -0,0 +1,125 @@
import 'package:diplomaticquarterapp/core/viewModels/medical/prescriptions_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_history_page.dart';
import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:ui';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
class AmbulanceReq extends StatefulWidget {
@override
_AmbulanceReqState createState() => _AmbulanceReqState();
}
class _AmbulanceReqState extends State<AmbulanceReq>
with SingleTickerProviderStateMixin {
TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(length: 2, vsync: this);
}
@override
void dispose() {
super.dispose();
_tabController.dispose();
}
@override
Widget build(BuildContext context) {
return BaseView<PrescriptionsViewModel>(
onModelReady: (model) => model.getPrescriptions(),
builder: (_, model, widget) => AppScaffold(
isShowAppBar: true,
appBarTitle: "Ambulance Request",
body: Scaffold(
extendBodyBehindAppBar: true,
appBar: PreferredSize(
preferredSize: Size.fromHeight(65.0),
child: Stack(
children: <Widget>[
Positioned(
bottom: 1,
left: 0,
right: 0,
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: Container(
color: Theme.of(context)
.scaffoldBackgroundColor
.withOpacity(0.8),
height: 70.0,
),
),
),
Center(
child: Container(
height: 60.0,
margin: EdgeInsets.only(top: 10.0),
width: MediaQuery.of(context).size.width * 0.9,
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: Theme.of(context).dividerColor,
width: 0.7),
),
color: Colors.white),
child: Center(
child: TabBar(
isScrollable: true,
controller: _tabController,
indicatorWeight: 5.0,
indicatorSize: TabBarIndicatorSize.label,
indicatorColor: Colors.red[800],
labelColor: Theme.of(context).primaryColor,
labelPadding:
EdgeInsets.only(top: 4.0, left: 18.0, right: 18.0),
unselectedLabelColor: Colors.grey[800],
tabs: [
Container(
width: MediaQuery.of(context).size.width * 0.40,
child: Center(
child: Texts("Ambulance Request"),//TranslationBase.of(context).prescriptions
),
),
Container(
width: MediaQuery.of(context).size.width * 0.30,
child: Center(
child: Texts("Orders Log"),
),
),
],
),
),
),
),
],
),
),
body: Column(
children: <Widget>[
Expanded(
child: TabBarView(
physics: BouncingScrollPhysics(),
controller: _tabController,
children: <Widget>[
PrescriptionsPage(
prescriptionsViewModel: model,
),
PrescriptionsHistoryPage(
prescriptionsViewModel: model,
)
],
),
)
],
),
),
),
);
}
}

@ -0,0 +1,73 @@
import 'package:diplomaticquarterapp/uitl/location_util.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import '../../uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/pages/ErService/widgets/card_common.dart';
class ErOptions extends StatefulWidget {
final bool isAppbar;
const ErOptions({Key key, this.isAppbar}) : super(key: key);
@override
_ErOptionsState createState() => _ErOptionsState();
}
class _ErOptionsState extends State<ErOptions> {
LocationUtils locationUtils;
@override
void initState() {
locationUtils =
new LocationUtils(isShowConfirmDialog: true, context: context);
WidgetsBinding.instance
.addPostFrameCallback((_) => locationUtils.getCurrentLocation());
super.initState();
}
@override
Widget build(BuildContext context) {
return AppScaffold(
isShowAppBar: widget.isAppbar,
appBarTitle: TranslationBase.of(context).bookAppo,
body: Container(
margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
margin: EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 10.0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
child: CardCommonEr(
image: 'assets/images/new-design/AM.PNG',
text: TranslationBase.of(context).ambulancerequest,
subText: TranslationBase.of(context).requestA,
type: 0,
),
),
Expanded(
child: CardCommonEr(
image: 'assets/images/new-design/emergency_icon.png',
text: TranslationBase.of(context).nearester,
subText: TranslationBase.of(context).locationa,
type: 1),
)
],
),
),
],
),
),
);
}
}

@ -0,0 +1,350 @@
import 'package:diplomaticquarterapp/core/viewModels/er/near_hospital_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/location_util.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../../uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/pages/ErService/widgets/card_common.dart';
import 'widgets/card_position.dart';
class NearestEr extends StatelessWidget {
static const String _url = "assets/images/";
int appointmentNo;
int projectID;
NearestEr({this.appointmentNo, this.projectID});
@override
Widget build(BuildContext context) {
return BaseView<NearHospitalViewModel>(
onModelReady: appointmentNo != null && projectID != null
? (model) => model.getProjectAvgERWaitingTimeOrders(
id: appointmentNo, projectID: projectID)
: (model) => model.getProjectAvgERWaitingTimeOrders(),
builder: (_, mode, widget) => AppScaffold(
isShowAppBar: true,
appBarTitle: 'Nearest ER',
baseViewModel: mode,
body: mode.ProjectAvgERWaitingTimeModeList.length > 0
? Container(
child: ListView(
children: <Widget>[
Text(
"\nThis service Displays nearest branch\n among all the branches of All Habib \n medical Group based on your current Location",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 18.0,
letterSpacing: 1.0,
fontWeight: FontWeight.w900,
color: new Color(0xFF60686b))),
Container(
margin: EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 10.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Container(
child: CardPosition(
text: mode
.ProjectAvgERWaitingTimeModeList[0]
.projectName
.toString(),
image:
'assets/images/new-design/find_us_icon.png',
subText: mode
.ProjectAvgERWaitingTimeModeList[0]
.distanceInKilometers
.toString(),
type: mode
.ProjectAvgERWaitingTimeModeList[0].iD
.toString(),
telephone: mode
.ProjectAvgERWaitingTimeModeList[0]
.phoneNumber
.toString(),
networkImage: mode
.ProjectAvgERWaitingTimeModeList[0]
.projectImageURL
.toString(),
latitude: mode
.ProjectAvgERWaitingTimeModeList[0]
.latitude,
longitude: mode
.ProjectAvgERWaitingTimeModeList[0]
.longitude,
projectname: mode
.ProjectAvgERWaitingTimeModeList[0]
.projectName,
),
),
),
Expanded(
child: Container(
child: CardPosition(
text: mode
.ProjectAvgERWaitingTimeModeList[1]
.projectName
.toString(),
image:
'assets/images/new-design/find_us_icon.png',
subText: mode
.ProjectAvgERWaitingTimeModeList[1]
.distanceInKilometers
.toString(),
type: mode
.ProjectAvgERWaitingTimeModeList[1].iD
.toString(),
telephone: mode
.ProjectAvgERWaitingTimeModeList[1]
.phoneNumber
.toString(),
networkImage: mode
.ProjectAvgERWaitingTimeModeList[1]
.projectImageURL
.toString(),
latitude: mode
.ProjectAvgERWaitingTimeModeList[1]
.latitude,
longitude: mode
.ProjectAvgERWaitingTimeModeList[1]
.longitude,
projectname: mode
.ProjectAvgERWaitingTimeModeList[1]
.projectName,
),
),
)
],
),
Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Container(
child: CardPosition(
text: mode
.ProjectAvgERWaitingTimeModeList[2]
.projectName
.toString(),
image:
'assets/images/new-design/find_us_icon.png',
subText: mode
.ProjectAvgERWaitingTimeModeList[2]
.distanceInKilometers
.toString(),
type: mode
.ProjectAvgERWaitingTimeModeList[2].iD
.toString(),
telephone: mode
.ProjectAvgERWaitingTimeModeList[2]
.phoneNumber
.toString(),
networkImage: mode
.ProjectAvgERWaitingTimeModeList[2]
.projectImageURL
.toString(),
latitude: mode
.ProjectAvgERWaitingTimeModeList[2]
.latitude,
longitude: mode
.ProjectAvgERWaitingTimeModeList[2]
.longitude,
projectname: mode
.ProjectAvgERWaitingTimeModeList[2]
.projectName,
),
),
),
Expanded(
child: Container(
child: CardPosition(
text: mode
.ProjectAvgERWaitingTimeModeList[3]
.projectName
.toString(),
image:
'assets/images/new-design/find_us_icon.png',
subText: mode
.ProjectAvgERWaitingTimeModeList[3]
.distanceInKilometers
.toString(),
type: mode
.ProjectAvgERWaitingTimeModeList[3].iD
.toString(),
telephone: mode
.ProjectAvgERWaitingTimeModeList[3]
.phoneNumber
.toString(),
networkImage: mode
.ProjectAvgERWaitingTimeModeList[3]
.projectImageURL
.toString(),
latitude: mode
.ProjectAvgERWaitingTimeModeList[3]
.latitude,
longitude: mode
.ProjectAvgERWaitingTimeModeList[3]
.longitude,
projectname: mode
.ProjectAvgERWaitingTimeModeList[3]
.projectName,
),
),
flex: 0,
)
],
),
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Container(
child: CardPosition(
text: mode
.ProjectAvgERWaitingTimeModeList[4]
.projectName
.toString(),
image:
'assets/images/new-design/find_us_icon.png',
subText: mode
.ProjectAvgERWaitingTimeModeList[4]
.distanceInKilometers
.toString(),
type: mode
.ProjectAvgERWaitingTimeModeList[4].iD
.toString(),
telephone: mode
.ProjectAvgERWaitingTimeModeList[4]
.phoneNumber
.toString(),
networkImage: mode
.ProjectAvgERWaitingTimeModeList[4]
.projectImageURL
.toString(),
latitude: mode
.ProjectAvgERWaitingTimeModeList[4]
.latitude,
longitude: mode
.ProjectAvgERWaitingTimeModeList[4]
.longitude,
projectname: mode
.ProjectAvgERWaitingTimeModeList[4]
.projectName,
),
),
),
Expanded(
child: Container(
child: CardPosition(
text: mode
.ProjectAvgERWaitingTimeModeList[5]
.projectName
.toString(),
image:
'assets/images/new-design/find_us_icon.png',
subText: mode
.ProjectAvgERWaitingTimeModeList[5]
.distanceInKilometers
.toString(),
type: mode
.ProjectAvgERWaitingTimeModeList[5].iD
.toString(),
telephone: mode
.ProjectAvgERWaitingTimeModeList[5]
.phoneNumber
.toString(),
networkImage: mode
.ProjectAvgERWaitingTimeModeList[5]
.projectImageURL
.toString(),
latitude: mode
.ProjectAvgERWaitingTimeModeList[5]
.latitude,
longitude: mode
.ProjectAvgERWaitingTimeModeList[5]
.longitude,
projectname: mode
.ProjectAvgERWaitingTimeModeList[5]
.projectName,
),
),
)
],
),
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Container(
child: CardPosition(
text: mode
.ProjectAvgERWaitingTimeModeList[6]
.projectName
.toString(),
image:
'assets/images/new-design/find_us_icon.png',
subText: mode
.ProjectAvgERWaitingTimeModeList[6]
.distanceInKilometers
.toString(),
type: mode
.ProjectAvgERWaitingTimeModeList[6].iD
.toString(),
telephone: mode
.ProjectAvgERWaitingTimeModeList[6]
.phoneNumber
.toString(),
networkImage: mode
.ProjectAvgERWaitingTimeModeList[6]
.projectImageURL
.toString(),
latitude: mode
.ProjectAvgERWaitingTimeModeList[6]
.latitude,
longitude: mode
.ProjectAvgERWaitingTimeModeList[6]
.longitude,
projectname: mode
.ProjectAvgERWaitingTimeModeList[6]
.projectName,
),
),
flex: 0,
),
],
),
],
)),
],
),
)
: Center(
child: Texts('No Data'),
),
),
);
}
}

@ -0,0 +1,83 @@
//import 'package:diplomaticquarterapp/pages/BookAppointment/Search.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/Search.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import '../AmbulanceReq.dart';
import '../NearestEr.dart';
class CardCommonEr extends StatelessWidget {
final image;
final text;
final subText;
final type;
const CardCommonEr(
{@required this.image,
@required this.text,
@required this.subText,
@required this.type});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
navigateToSearch(context, this.type);
},
child: Container(
margin: EdgeInsets.fromLTRB(9.0, 9.0, 9.0, 9.0),
decoration: BoxDecoration(boxShadow: [
BoxShadow(color: Colors.grey[400], blurRadius: 2.0, spreadRadius: 0.0)
], borderRadius: BorderRadius.circular(10), color: Colors.white),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0.0),
child: Text(this.text,
overflow: TextOverflow.clip,
style: TextStyle(
color: new Color(0xFFc5272d),
letterSpacing: 1.0,
fontSize: 20.0)),
),
Container(
margin: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0),
child: Text(this.subText,
overflow: TextOverflow.clip,
style: TextStyle(
color: Colors.black, letterSpacing: 1.0, fontSize: 15.0)),
),
Container(
alignment: Alignment.bottomRight,
margin: EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 8.0),
child: Image.asset(this.image, width: 60.0, height: 60.0),
),
],
),
),
);
}
Future navigateToSearch(context, type) async {
//===Switch case===
if(type==0)
{
Navigator.push(
context,
FadePage(
page: AmbulanceReq()));
}
else{
Navigator.push(
context,
FadePage(
page: NearestEr()));
}
}
}

@ -0,0 +1,108 @@
//import 'package:diplomaticquarterapp/pages/BookAppointment/Search.dart';
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/Search.dart';
import 'package:flutter/material.dart';
import 'package:giffy_dialog/giffy_dialog.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:maps_launcher/maps_launcher.dart';
import '../NearestEr.dart';
class CardPosition extends StatelessWidget {
final image;
final text;
final subText;
final type;
final telephone;
final networkImage;
final latitude;
final longitude;
final projectname;
const CardPosition(
{
@required this.image,
@required this.text,
@required this.subText,
@required this.type,
@required this.telephone,
@required this.networkImage ,
@required this.latitude,
@required this.longitude,
@required this.projectname ,
});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
navigateToSearch(context, this.type,this.telephone,this.networkImage,this.latitude,this.longitude,this.projectname);
},
child: Container(
width:MediaQuery.of(context).size.width * 0.47,//165,
margin: EdgeInsets.fromLTRB(7.0, 7.0, 7.0, 7.0),
decoration: BoxDecoration(boxShadow: [
BoxShadow(color: Colors.grey[400], blurRadius: 2.0, spreadRadius: 0.0)
], borderRadius: BorderRadius.circular(10), color: Colors.white),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0.0),
child: Text(this.text,
overflow: TextOverflow.clip,
style: TextStyle(
color: Colors.black,
letterSpacing: 1.0,
fontSize: 2 * SizeConfig.textMultiplier)),
),
Container(
alignment: Alignment.center,
margin: EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 8.0),
child: Image.asset(this.image, width: 60.0, height: 60.0),
),
Container(
margin: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0),
child: Text(this.subText,
overflow: TextOverflow.clip,
style: TextStyle(
color: Color(0xFFc5272d), letterSpacing: 1.0, fontSize: 15.0)),
),
],
),
),
);
}
Future navigateToSearch(context, type,telephone,networkImage,latitude,longitude,projectname) async {
showDialog(
context: context,builder: (_) => AssetGiffyDialog(
title: Text(projectname,
style: TextStyle(
fontSize: 22.0, fontWeight: FontWeight.w600),
),image:Image.network(networkImage, fit: BoxFit.cover,),
buttonOkText:Text("LOCATION"),
buttonOkColor: Colors.grey,
buttonCancelText:Text('CAll') ,
buttonCancelColor: Colors.grey,
onOkButtonPressed: () { MapsLauncher.launchCoordinates(double.parse(latitude),double.parse(longitude),projectname);},
onCancelButtonPressed :() {launch("tel://" +telephone);}
) );
}
}

@ -4,6 +4,7 @@ import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/AppointmentCar
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart'; import 'package:smart_progress_bar/smart_progress_bar.dart';
@ -15,6 +16,11 @@ class MyAppointments extends StatefulWidget {
List<AppoitmentAllHistoryResultList> confirmedAppoList = []; List<AppoitmentAllHistoryResultList> confirmedAppoList = [];
List<AppoitmentAllHistoryResultList> arrivedAppoList = []; List<AppoitmentAllHistoryResultList> arrivedAppoList = [];
List<PatientAppointmentList> _patientBookedAppointmentListHospital = List();
List<PatientAppointmentList> _patientConfirmedAppointmentListHospital =
List();
List<PatientAppointmentList> _patientArrivedAppointmentListHospital = List();
@override @override
_MyAppointmentsState createState() => _MyAppointmentsState(); _MyAppointmentsState createState() => _MyAppointmentsState();
} }
@ -40,7 +46,6 @@ class _MyAppointmentsState extends State<MyAppointments>
isShowAppBar: true, isShowAppBar: true,
body: Container( body: Container(
child: Column(children: [ child: Column(children: [
/// this is will not colored with theme data
TabBar( TabBar(
tabs: [ tabs: [
Tab(text: TranslationBase.of(context).booked), Tab(text: TranslationBase.of(context).booked),
@ -94,7 +99,10 @@ class _MyAppointmentsState extends State<MyAppointments>
} }
}).catchError((err) { }).catchError((err) {
print(err); print(err);
}).showProgressBar(text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); AppToast.showErrorToast(message: err);
Navigator.of(context).pop();
}).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
} }
bool isConfirmed(AppoitmentAllHistoryResultList appo) { bool isConfirmed(AppoitmentAllHistoryResultList appo) {
@ -123,15 +131,85 @@ class _MyAppointmentsState extends State<MyAppointments>
widget.arrivedAppoList.add(v); widget.arrivedAppoList.add(v);
} }
}); });
widget.bookedAppoList.forEach((element) {
List<PatientAppointmentList> doctorByHospital =
widget._patientBookedAppointmentListHospital
.where(
(elementClinic) =>
elementClinic.filterName == element.clinicName,
)
.toList();
if (doctorByHospital.length != 0) {
widget
._patientBookedAppointmentListHospital[widget
._patientBookedAppointmentListHospital
.indexOf(doctorByHospital[0])]
.patientDoctorAppointmentList
.add(element);
} else {
widget._patientBookedAppointmentListHospital.add(PatientAppointmentList(
filterName: element.clinicName, patientDoctorAppointment: element));
}
});
widget.confirmedAppoList.forEach((element) {
List<PatientAppointmentList> doctorByHospital =
widget._patientConfirmedAppointmentListHospital
.where(
(elementClinic) =>
elementClinic.filterName == element.clinicName,
)
.toList();
if (doctorByHospital.length != 0) {
widget
._patientConfirmedAppointmentListHospital[widget
._patientConfirmedAppointmentListHospital
.indexOf(doctorByHospital[0])]
.patientDoctorAppointmentList
.add(element);
} else {
widget._patientConfirmedAppointmentListHospital.add(
PatientAppointmentList(
filterName: element.clinicName,
patientDoctorAppointment: element));
}
});
widget.arrivedAppoList.forEach((element) {
List<PatientAppointmentList> doctorByHospital =
widget._patientArrivedAppointmentListHospital
.where(
(elementClinic) =>
elementClinic.filterName == element.clinicName,
)
.toList();
if (doctorByHospital.length != 0) {
widget
._patientArrivedAppointmentListHospital[widget
._patientArrivedAppointmentListHospital
.indexOf(doctorByHospital[0])]
.patientDoctorAppointmentList
.add(element);
} else {
widget._patientArrivedAppointmentListHospital.add(
PatientAppointmentList(
filterName: element.clinicName,
patientDoctorAppointment: element));
}
});
} }
openAppointmentsTab() { openAppointmentsTab() {
if (widget.bookedAppoList.length != 0) { if (widget._patientBookedAppointmentListHospital.length != 0) {
_tabController.animateTo((_tabController.index + 1) % 1); _tabController.index = 0;
} else if (widget.confirmedAppoList.length != 0) { } else if (widget._patientConfirmedAppointmentListHospital.length != 0) {
_tabController.animateTo((_tabController.index + 1) % 2); _tabController.index = 1;
} else if (widget.arrivedAppoList.length != 0) { } else if (widget._patientArrivedAppointmentListHospital.length != 0) {
_tabController.animateTo((_tabController.index + 1) % 3); _tabController.index = 2;
return; return;
} }
} }
@ -163,24 +241,95 @@ class _MyAppointmentsState extends State<MyAppointments>
fontSize: 16.0, fontSize: 16.0,
)), )),
), ),
Container(
margin: EdgeInsets.only(top: 10.0),
child: Container(
child: widget.bookedAppoList.length != 0
? SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: <Widget>[
...List.generate(
widget._patientBookedAppointmentListHospital.length,
(index) => AppExpandableNotifier(
title: widget
._patientBookedAppointmentListHospital[index]
.filterName,
bodyWidget: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: widget
._patientBookedAppointmentListHospital[index]
.patientDoctorAppointmentList
.map((doctor) {
return AppointmentCard(
appo: doctor,
onReloadAppointmentHistory:
getPatientAppointmentHistory,
);
}).toList(),
)),
)
],
),
)
: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Image.asset(
"assets/images/new-design/noAppointmentIcon.png"),
Container(
margin: EdgeInsets.only(top: 10.0),
child: Text("No Booked Appointments",
style: TextStyle(
fontSize: 16.0,
)),
),
],
),
),
),
),
)
], ],
),
), ))));
),
);
} }
Widget getConfirmedAppointments() { Widget getConfirmedAppointments() {
return widget.confirmedAppoList.length != 0 return widget.confirmedAppoList.length != 0
? Container( ? Container(
child: new ListView.builder( margin: EdgeInsets.only(top: 10.0),
itemCount: widget.confirmedAppoList.length, child: SingleChildScrollView(
itemBuilder: (context, i) { physics: BouncingScrollPhysics(),
return AppointmentCard( child: Column(
appo: widget.confirmedAppoList[i], children: <Widget>[
onReloadAppointmentHistory: getPatientAppointmentHistory, ...List.generate(
); widget._patientConfirmedAppointmentListHospital.length,
}, (index) => AppExpandableNotifier(
title: widget
._patientConfirmedAppointmentListHospital[index]
.filterName,
bodyWidget: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: widget
._patientConfirmedAppointmentListHospital[index]
.patientDoctorAppointmentList
.map((doctor) {
return AppointmentCard(
appo: doctor,
onReloadAppointmentHistory:
getPatientAppointmentHistory,
);
}).toList(),
)),
)
],
),
), ),
) )
: Container( : Container(
@ -206,14 +355,34 @@ class _MyAppointmentsState extends State<MyAppointments>
Widget getArrivedAppointments() { Widget getArrivedAppointments() {
return widget.arrivedAppoList.length != 0 return widget.arrivedAppoList.length != 0
? Container( ? Container(
child: new ListView.builder( margin: EdgeInsets.only(top: 10.0),
itemCount: widget.arrivedAppoList.length, child: SingleChildScrollView(
itemBuilder: (context, i) { physics: BouncingScrollPhysics(),
return AppointmentCard( child: Column(
appo: widget.arrivedAppoList[i], children: <Widget>[
onReloadAppointmentHistory: getPatientAppointmentHistory, ...List.generate(
); widget._patientArrivedAppointmentListHospital.length,
}, (index) => AppExpandableNotifier(
title: widget
._patientArrivedAppointmentListHospital[index]
.filterName,
bodyWidget: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: widget
._patientArrivedAppointmentListHospital[index]
.patientDoctorAppointmentList
.map((doctor) {
return AppointmentCard(
appo: doctor,
onReloadAppointmentHistory:
getPatientAppointmentHistory,
);
}).toList(),
)),
)
],
),
), ),
) )
: Container( : Container(

@ -25,7 +25,7 @@ class ArrivedButtons {
"title": "Lab", "title": "Lab",
"subtitle": "Result", "subtitle": "Result",
"icon": "assets/images/new-design/lab_result_icon.png", "icon": "assets/images/new-design/lab_result_icon.png",
"caller": "addReminder" "caller": "labResult"
}, },
{ {
"title": "Vital Signs", "title": "Vital Signs",

@ -12,17 +12,18 @@ import 'package:diplomaticquarterapp/pages/MyAppointments/models/ConfirmedButton
import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/PrescriptionReport.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/PrescriptionReport.dart';
import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/askDocDialog.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/askDocDialog.dart';
import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/reminder_dialog.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/reminder_dialog.dart';
import 'package:diplomaticquarterapp/pages/feedback/feedback_home_page.dart';
import 'package:diplomaticquarterapp/pages/insurance/insurance_approval_screen.dart'; import 'package:diplomaticquarterapp/pages/insurance/insurance_approval_screen.dart';
import 'package:diplomaticquarterapp/pages/medical/radiology/radiology_details_page.dart'; import 'package:diplomaticquarterapp/pages/medical/radiology/radiology_details_page.dart';
import 'package:diplomaticquarterapp/pages/medical/vital_sign/vital_sign_details_screen.dart'; import 'package:diplomaticquarterapp/pages/medical/vital_sign/vital_sign_details_screen.dart';
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
class AppointmentActions extends StatefulWidget { class AppointmentActions extends StatefulWidget {
@ -189,6 +190,10 @@ class _AppointmentActionsState extends State<AppointmentActions> {
case "VitalSigns": case "VitalSigns":
navigateToVitalSigns(widget.appo.appointmentNo, widget.appo.projectID); navigateToVitalSigns(widget.appo.appointmentNo, widget.appo.projectID);
break; break;
case "insertComplaint":
navigateToInsertComplaint();
break;
} }
} }
@ -357,7 +362,8 @@ class _AppointmentActionsState extends State<AppointmentActions> {
} }
}).catchError((err) { }).catchError((err) {
print(err); print(err);
}).showProgressBar(text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); }).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
} }
openAppointmentRadiology() { openAppointmentRadiology() {
@ -374,7 +380,8 @@ class _AppointmentActionsState extends State<AppointmentActions> {
}).catchError((err) { }).catchError((err) {
print(err); print(err);
AppToast.showErrorToast(message: err); AppToast.showErrorToast(message: err);
}).showProgressBar(text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); }).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
} }
openPrescriptionReport() { openPrescriptionReport() {
@ -394,7 +401,8 @@ class _AppointmentActionsState extends State<AppointmentActions> {
}).catchError((err) { }).catchError((err) {
print(err); print(err);
AppToast.showErrorToast(message: err); AppToast.showErrorToast(message: err);
}).showProgressBar(text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); }).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
} }
Future navigateToMedicinePrescriptionReport( Future navigateToMedicinePrescriptionReport(
@ -460,7 +468,10 @@ class _AppointmentActionsState extends State<AppointmentActions> {
} }
}).catchError((err) { }).catchError((err) {
print(err); print(err);
}).showProgressBar(text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); AppToast.showErrorToast(
message: err);
}).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
} }
getCallRequestType() { getCallRequestType() {
@ -475,7 +486,8 @@ class _AppointmentActionsState extends State<AppointmentActions> {
}); });
}).catchError((err) { }).catchError((err) {
print(err); print(err);
}).showProgressBar(text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); }).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
} }
showAskDocRequestDialog(List<AskDocRequestType> requestData) { showAskDocRequestDialog(List<AskDocRequestType> requestData) {
@ -520,7 +532,8 @@ class _AppointmentActionsState extends State<AppointmentActions> {
}).catchError((err) { }).catchError((err) {
print(err); print(err);
AppToast.showErrorToast(message: err); AppToast.showErrorToast(message: err);
}).showProgressBar(text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); }).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
} }
confirmAppointment() { confirmAppointment() {
@ -537,7 +550,8 @@ class _AppointmentActionsState extends State<AppointmentActions> {
} }
}).catchError((err) { }).catchError((err) {
print(err); print(err);
}).showProgressBar(text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); }).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
} }
navigateToInsuranceApprovals(int appoNo) { navigateToInsuranceApprovals(int appoNo) {
@ -547,7 +561,14 @@ class _AppointmentActionsState extends State<AppointmentActions> {
navigateToVitalSigns(int appoNo, int projectID) { navigateToVitalSigns(int appoNo, int projectID) {
Navigator.push( Navigator.push(
context, FadePage(page: VitalSignDetailsScreen(appointmentNo: appoNo, projectID: projectID))); context,
FadePage(
page: VitalSignDetailsScreen(
appointmentNo: appoNo, projectID: projectID)));
}
navigateToInsertComplaint() {
Navigator.push(context, FadePage(page: FeedbackHomePage()));
} }
rateAppointment() { rateAppointment() {

@ -42,7 +42,7 @@ class _ApointmentCardState extends State<AppointmentCard> {
fit: BoxFit.fill, height: 60.0, width: 60.0), fit: BoxFit.fill, height: 60.0, width: 60.0),
), ),
Container( Container(
width: MediaQuery.of(context).size.width * 0.6, width: MediaQuery.of(context).size.width * 0.57,
margin: EdgeInsets.fromLTRB(20.0, 10.0, 10.0, 0.0), margin: EdgeInsets.fromLTRB(20.0, 10.0, 10.0, 0.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -95,7 +95,7 @@ class _ApointmentCardState extends State<AppointmentCard> {
emptyIcon: Icons.star, emptyIcon: Icons.star,
), ),
Container( Container(
transform: Matrix4.translationValues(0.0, -40.0, 0.0), transform: Matrix4.translationValues(15.0, -40.0, 0.0),
child: Image.asset( child: Image.asset(
"assets/images/new-design/arrow.png", "assets/images/new-design/arrow.png",
width: 25.0, width: 25.0,

@ -212,6 +212,11 @@ class _ConferenceButtonBarState extends State<ConferenceButtonBar> with AfterLay
key: Key('microphone-button'), key: Key('microphone-button'),
onPressed: () => _onPressed(widget.onAudioEnabled), onPressed: () => _onPressed(widget.onAudioEnabled),
), ),
CircleButton(
child: const Icon(Icons.switch_camera, color: Colors.white),
key: Key('switch-camera-button'),
onPressed: () => _onPressed(widget.onSwitchCamera),
),
CircleButton( CircleButton(
radius: 35, radius: 35,
child: const RotationTransition( child: const RotationTransition(
@ -226,11 +231,6 @@ class _ConferenceButtonBarState extends State<ConferenceButtonBar> with AfterLay
key: Key('hangup-button'), key: Key('hangup-button'),
onPressed: () => _onPressed(widget.onHangup), onPressed: () => _onPressed(widget.onHangup),
), ),
CircleButton(
child: const Icon(Icons.switch_camera, color: Colors.white),
key: Key('switch-camera-button'),
onPressed: () => _onPressed(widget.onSwitchCamera),
),
], ],
), ),
); );

@ -217,21 +217,21 @@ class _ConferencePageState extends State<ConferencePage> {
); );
} }
if (length <= 3) { // if (length <= 3) {
buildInCols(true, false, 1); // buildInCols(true, false, 1);
} else if (length == 5) { // } else if (length == 5) {
buildInCols(false, true, 2); // buildInCols(false, true, 2);
} else if (length <= 6 || length == 8) { // } else if (length <= 6 || length == 8) {
buildInCols(false, false, 2); // buildInCols(false, false, 2);
} else if (length == 7 || length == 9) { // } else if (length == 7 || length == 9) {
buildInCols(true, false, 2); // buildInCols(true, false, 2);
} else if (length == 10) { // } else if (length == 10) {
buildInCols(false, true, 3); // buildInCols(false, true, 3);
} else if (length == 13 || length == 16) { // } else if (length == 13 || length == 16) {
buildInCols(true, false, 3); // buildInCols(true, false, 3);
} else if (length <= 18) { // } else if (length <= 18) {
buildInCols(false, false, 3); // buildInCols(false, false, 3);
} // }
return Column( return Column(
children: children, children: children,

@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/viewModels/insurance_card_View_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/insurance_card_View_model.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/rounded_container.dart'; import 'package:diplomaticquarterapp/widgets/others/rounded_container.dart';
@ -39,95 +40,117 @@ class _InsuranceCardState extends State<InsuranceCard> {
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return RoundedContainer( return RoundedContainer(
backgroundColor: Colors.white, backgroundColor: Colors.white,
child: Column( child: Padding(
crossAxisAlignment: CrossAxisAlignment.start, padding: const EdgeInsets.all(8.0),
children: <Widget>[ child: Column(
ExpansionTile( crossAxisAlignment: CrossAxisAlignment.start,
title: Container( children: <Widget>[
height: 65.0, ExpansionTile(
child: Column( title: Container(
crossAxisAlignment: CrossAxisAlignment.start, height: 65.0,
children: <Widget>[ child: Column(
Padding( crossAxisAlignment: CrossAxisAlignment.start,
padding: EdgeInsets.symmetric(vertical: 15.0), children: <Widget>[
child: Texts( Padding(
model.insurance[index].groupName, padding: EdgeInsets.symmetric(vertical: 15.0),
child: Texts(
model.insurance[index].groupName,
),
), ),
), ],
], ),
),
),
children: <Widget>[
Divider(
color: Colors.black,
height: 25.0,
thickness: 0.5,
),
Texts(
TranslationBase.of(context).companyName +
model.insurance[index].companyName,
fontSize: 20.0,
),
Divider(
color: Colors.black,
height: 25.0,
thickness: 0.5,
),
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
TranslationBase.of(context).category +
model.insurance[index].subCategoryDesc,
style: TextStyle(fontSize: 18.5),
),
Text(
TranslationBase.of(context).expirationDate +
convertDateFormat(
model.insurance[index].cardValidTo),
style: TextStyle(fontSize: 18.5),
),
Text(
TranslationBase.of(context).patientCard +
model.insurance[index].patientCardID,
style: TextStyle(fontSize: 18.5),
),
Text(
TranslationBase.of(context).policyNumber +
model
.insurance[index].insurancePolicyNumber,
style: TextStyle(fontSize: 18.5),
),
],
),
Column(
children: <Widget>[
model.insurance[index].isActive == true
? Text('Active',
style: TextStyle(
color: Colors.green,
fontWeight: FontWeight.w900,
fontSize: 17.9))
: Text('Not Active',
style: TextStyle(
color: Colors.red,
fontWeight: FontWeight.w900,
fontSize: 17.9))
],
),
SizedBox(
height: 14.5,
), ),
if (model.insurance[index].isActive == true) children: <Widget>[
Container( Container(
child: Button( padding: EdgeInsets.all(14),
label: TranslationBase.of(context).seeDetails, width: double.infinity,
decoration: BoxDecoration(
shape: BoxShape.rectangle,
border: Border.all(color: Colors.grey,width: 0.2),
borderRadius: BorderRadius.all(Radius.circular(2)),
boxShadow: [
BoxShadow(
color: Colors.white70,
),
]
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts(
TranslationBase.of(context).companyName +
model.insurance[index].companyName,
fontSize: 20.0,
),
Divider(
color: Colors.black,
height: 25.0,
thickness: 0.5,
),
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
TranslationBase.of(context).category +
model.insurance[index].subCategoryDesc,
style: TextStyle(fontSize: 18.5),
),
Text(
TranslationBase.of(context).expirationDate +
convertDateFormat(
model.insurance[index].cardValidTo),
style: TextStyle(fontSize: 18.5),
),
Text(
TranslationBase.of(context).patientCard +
model.insurance[index].patientCardID,
style: TextStyle(fontSize: 18.5),
),
Text(
TranslationBase.of(context).policyNumber +
model
.insurance[index].insurancePolicyNumber,
style: TextStyle(fontSize: 18.5),
),
],
),
Column(
children: <Widget>[
model.insurance[index].isActive == true
? Text('Active',
style: TextStyle(
color: Colors.green,
fontWeight: FontWeight.w900,
fontSize: 17.9))
: Text('Not Active',
style: TextStyle(
color: Colors.red,
fontWeight: FontWeight.w900,
fontSize: 17.9))
],
),
SizedBox(
height: 14.5,
),
if (model.insurance[index].isActive == true)
Container(
color: Colors.transparent,
child: SecondaryButton(
label: TranslationBase.of(context).seeDetails,
textColor: Colors.white,
),
width: double.infinity,
),
],
), ),
width: 400.0,
), ),
],
),
], ],
),
],
),
), ),
); );
}), }),

@ -1,3 +1,4 @@
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -97,9 +98,12 @@ class _InsuranceUpdateState extends State<InsuranceUpdate>
children: <Widget>[ children: <Widget>[
Container( Container(
child: ListView.builder( child: ListView.builder(
itemCount: model.insuranceUpdate == null itemCount: model.getAllSharedRecordsByStatusResponse
.getAllSharedRecordsByStatusList ==
null
? 0 ? 0
: model.insuranceUpdate.length, : model.getAllSharedRecordsByStatusResponse
.getAllSharedRecordsByStatusList.length,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return Container( return Container(
margin: EdgeInsets.all(10.0), margin: EdgeInsets.all(10.0),
@ -112,81 +116,63 @@ class _InsuranceUpdateState extends State<InsuranceUpdate>
child: Container( child: Container(
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
padding: EdgeInsets.all(10.0), padding: EdgeInsets.all(10.0),
child: Column( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: <Widget>[ children: <Widget>[
Flex( Expanded(
direction: Axis.horizontal, flex: 3,
children: <Widget>[ child: Container(
Expanded( margin: EdgeInsets.only(
flex: 3, top: 2.0, left: 10.0, right: 20.0),
child: Container( child: Column(
margin: EdgeInsets.only( crossAxisAlignment:
top: 2.0, CrossAxisAlignment.start,
left: 10.0, children: <Widget>[
right: 20.0), Text(
child: Column( model.getAllSharedRecordsByStatusResponse
crossAxisAlignment: .getAllSharedRecordsByStatusList[
CrossAxisAlignment.start, index].patientName,
children: <Widget>[ style: TextStyle(
Text("TAMER FANASHEH ", fontSize: 14.0,
style: TextStyle( color: Colors.black,
fontSize: 14.0, fontWeight: FontWeight.w500,
color: Colors.black, letterSpacing: 1.0)),
fontWeight: Text(
FontWeight.w500, 'File No.' +
letterSpacing: 1.0)), model.getAllSharedRecordsByStatusResponse
Text( .getAllSharedRecordsByStatusList[
'File No.' + index].patientID.toString(),
model style: TextStyle(
.insuranceUpdate[ fontSize: 14.0,
index] color: Colors.black,
.patientID fontWeight: FontWeight.w500,
.toString(), letterSpacing: 1.0)),
style: TextStyle( ],
fontSize: 14.0,
color: Colors.black,
fontWeight:
FontWeight.w500,
letterSpacing: 1.0)),
Text(
model.insuranceUpdate[index]
.createdOn,
style: TextStyle(
fontSize: 14.0,
color: Colors.black,
fontWeight:
FontWeight.w500,
letterSpacing: 1.0)),
],
),
),
), ),
Expanded( ),
flex: 1,
child: Container(
// height: MediaQuery.of(context).size.height * 0.12,
margin: EdgeInsets.only(top: 20.0),
child: Column(
children: <Widget>[
Container(
child: Button(
label: 'Fetch',
),
height: SizeConfig
.heightMultiplier *
3.8,
width:
SizeConfig.screenWidth *
4.2,
),
],
),
),
)
],
), ),
Expanded(
flex: 2,
child: Container(
// height: MediaQuery.of(context).size.height * 0.12,
margin: EdgeInsets.only(top: 2.0),
child: Column(
children: <Widget>[
Container(
child: SecondaryButton(
label: 'Update',
small: true,
textColor: Colors.white,
// color: Colors.grey,
),
//height: 45,
// width:90
),
],
),
),
)
], ],
), ),
), ),

@ -2,7 +2,10 @@ import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/all_habib_medical_service_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/all_habib_medical_service_page.dart';
import 'package:diplomaticquarterapp/pages/ErService/ErOptions.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/feedback/feedback_home_page.dart';
import 'package:diplomaticquarterapp/pages/paymentService/payment_service.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/pages/livecare/livecare_home.dart'; import 'package:diplomaticquarterapp/pages/livecare/livecare_home.dart';
@ -441,52 +444,23 @@ class _HomePageState extends State<HomePage> {
SizedBox( SizedBox(
height: 8, height: 8,
), ),
Container( InkWell(
margin: EdgeInsets.only(left: 15, right: 15), onTap: () => Navigator.push(
child: Row( context, FadePage(page: PaymentService())),
mainAxisAlignment: MainAxisAlignment.spaceBetween, child: Container(
children: <Widget>[ margin: EdgeInsets.only(left: 15, right: 15),
Container( child: Row(
width: MediaQuery.of(context).size.width * 0.29, mainAxisAlignment: MainAxisAlignment.spaceBetween,
child: Center( children: <Widget>[
child: Padding( Container(
padding: const EdgeInsets.all(15.0), width: MediaQuery.of(context).size.width * 0.29,
child: Column(
children: <Widget>[
Image.asset(
'assets/images/al-habib_online_payment_service_icon.png',
height: 55,
),
SizedBox(
height: 15,
),
Texts(
TranslationBase.of(context)
.onlinePaymentService,
textAlign: TextAlign.center,
color: Colors.black87,
bold: false,
fontSize: SizeConfig.textMultiplier * 2,
)
],
),
),
),
height: MediaQuery.of(context).size.width * 0.4,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.0),
color: Colors.white,
),
),
Container(
child: Center( child: Center(
child: Padding( child: Padding(
padding: const EdgeInsets.all(15.0), padding: const EdgeInsets.all(15.0),
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
Image.asset( Image.asset(
'assets/images/ereferral_service_icon.png', 'assets/images/al-habib_online_payment_service_icon.png',
width: 50,
height: 55, height: 55,
), ),
SizedBox( SizedBox(
@ -494,7 +468,7 @@ class _HomePageState extends State<HomePage> {
), ),
Texts( Texts(
TranslationBase.of(context) TranslationBase.of(context)
.offersAndPackages, .onlinePaymentService,
textAlign: TextAlign.center, textAlign: TextAlign.center,
color: Colors.black87, color: Colors.black87,
bold: false, bold: false,
@ -504,45 +478,87 @@ class _HomePageState extends State<HomePage> {
), ),
), ),
), ),
width: MediaQuery.of(context).size.width * 0.29,
height: MediaQuery.of(context).size.width * 0.4, height: MediaQuery.of(context).size.width * 0.4,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.0), borderRadius: BorderRadius.circular(6.0),
color: Colors.white, color: Colors.white,
)), ),
Container( ),
width: MediaQuery.of(context).size.width * 0.29, Container(
child: Center( child: Center(
child: Padding( child: Padding(
padding: const EdgeInsets.all(15.0), padding: const EdgeInsets.all(15.0),
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
Image.asset( Image.asset(
'assets/images/Dr_Schedule_report.png', 'assets/images/ereferral_service_icon.png',
width: 50, width: 50,
height: 50, height: 55,
),
SizedBox(
height: 15,
),
Texts(
TranslationBase.of(context)
.offersAndPackages,
textAlign: TextAlign.center,
color: Colors.black87,
bold: false,
fontSize: SizeConfig.textMultiplier * 2,
)
],
), ),
SizedBox( ),
height: 15, ),
width: MediaQuery.of(context).size.width * 0.29,
height: MediaQuery.of(context).size.width * 0.4,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.0),
color: Colors.white,
)),
Container(
width: MediaQuery.of(context).size.width * 0.29,
child: InkWell(
onTap: () => Navigator.push(
context,
FadePage(
page: ErOptions(
isAppbar: true,
))),
child: Center(
child: Padding(
padding: const EdgeInsets.all(15.0),
child: Column(
children: <Widget>[
Image.asset(
'assets/images/Dr_Schedule_report.png',
width: 50,
height: 50,
),
SizedBox(
height: 15,
),
Texts(
TranslationBase.of(context)
.emergencyServices,
textAlign: TextAlign.center,
color: Colors.black87,
bold: false,
fontSize: SizeConfig.textMultiplier * 2.0,
)
],
), ),
Texts( ),
TranslationBase.of(context).emergencyServices,
textAlign: TextAlign.center,
color: Colors.black87,
bold: false,
fontSize: SizeConfig.textMultiplier * 2.0,
)
],
), ),
), ),
height: MediaQuery.of(context).size.width * 0.4,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.0),
color: Colors.white,
),
), ),
height: MediaQuery.of(context).size.width * 0.4, ],
decoration: BoxDecoration( ),
borderRadius: BorderRadius.circular(6.0),
color: Colors.white,
),
),
],
), ),
), ),
SizedBox( SizedBox(
@ -592,6 +608,10 @@ class _HomePageState extends State<HomePage> {
context, FadePage(page: AllHabibMedicalService())), context, FadePage(page: AllHabibMedicalService())),
), ),
DashboardItem( DashboardItem(
onTap: () {
Navigator.push(
context, FadePage(page: FeedbackHomePage()));
},
child: Container( child: Container(
width: double.infinity, width: double.infinity,
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),

@ -15,6 +15,7 @@ import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.dart'; import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart'; import 'package:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart';
import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -107,6 +108,18 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
}); });
pageController = PageController(keepPage: true); pageController = PageController(keepPage: true);
_firebaseMessaging.setAutoInitEnabled(true); _firebaseMessaging.setAutoInitEnabled(true);
if (Platform.isIOS) {
_firebaseMessaging.requestNotificationPermissions(
// const IosNotificationSettings(
// sound: true,
// badge: true,
// alert: true,
// provisional: true,
// ),
);
}
_firebaseMessaging.getToken().then((String token) { _firebaseMessaging.getToken().then((String token) {
sharedPref.setString(PUSH_TOKEN, token); sharedPref.setString(PUSH_TOKEN, token);
if (token != null) { if (token != null) {
@ -117,81 +130,130 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
//_firebase Background message handler //_firebase Background message handler
_firebaseMessaging.configure( _firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async { // onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message"); // showDialog("onMessage: $message");
print(message); // print("onMessage: $message");
print(message['name']); // print(message);
print(message['appointmentdate']); // print(message['name']);
// print(message['appointmentdate']);
if (Platform.isIOS) { //
if (message['is_call'] == "true") { // if (Platform.isIOS) {
var route = ModalRoute.of(context); // if (message['is_call'] == "true") {
// var route = ModalRoute.of(context);
if (route != null) { //
print(route.settings.name); // if (route != null) {
} // print(route.settings.name);
// }
Map<String, dynamic> myMap = new Map<String, dynamic>.from(message); //
print(myMap); // Map<String, dynamic> myMap = new Map<String, dynamic>.from(message);
LandingPage.isOpenCallPage = true; // print(myMap);
LandingPage.incomingCallData = IncomingCallData.fromJson(myMap); // LandingPage.isOpenCallPage = true;
if (!isPageNavigated) { // LandingPage.incomingCallData = IncomingCallData.fromJson(myMap);
isPageNavigated = true; // if (!isPageNavigated) {
Navigator.push( // isPageNavigated = true;
context, // Navigator.push(
MaterialPageRoute( // context,
builder: (context) => IncomingCall( // MaterialPageRoute(
incomingCallData: LandingPage.incomingCallData))) // builder: (context) => IncomingCall(
.then((value) { // incomingCallData: LandingPage.incomingCallData)))
isPageNavigated = false; // .then((value) {
}); // isPageNavigated = false;
} // });
} else { // }
print("Is Call Not Found iOS"); // } else {
} // print("Is Call Not Found iOS");
} else { // }
print("Is Call Not Found iOS"); // } else {
} // print("Is Call Not Found iOS");
// }
if (Platform.isAndroid) { //
if (message['data'].containsKey("is_call")) { // if (Platform.isAndroid) {
var route = ModalRoute.of(context); // if (message['data'].containsKey("is_call")) {
// var route = ModalRoute.of(context);
if (route != null) { //
print(route.settings.name); // if (route != null) {
} // print(route.settings.name);
// }
//
// Map<String, dynamic> myMap =
// new Map<String, dynamic>.from(message['data']);
// print(myMap);
// LandingPage.isOpenCallPage = true;
// LandingPage.incomingCallData = IncomingCallData.fromJson(myMap);
// if (!isPageNavigated) {
// isPageNavigated = true;
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => IncomingCall(
// incomingCallData: LandingPage.incomingCallData)))
// .then((value) {
// isPageNavigated = false;
// });
// }
// } else {
// print("Is Call Not Found Android");
// }
// } else {
// print("Is Call Not Found Android");
// }
// },
// onBackgroundMessage: Platform.isIOS ? null : myBackgroundMessageHandler,
// onLaunch: (Map<String, dynamic> message) async {
// print("onLaunch: $message");
// showDialog("onLaunch: $message");
// },
// onResume: (Map<String, dynamic> message) async {
// print("onResume: $message");
// print(message);
// print(message['name']);
// print(message['appointmentdate']);
//
// showDialog("onResume: $message");
//
// if (Platform.isIOS) {
// if (message['is_call'] == "true") {
// var route = ModalRoute.of(context);
//
// if (route != null) {
// print(route.settings.name);
// }
//
// Map<String, dynamic> myMap =
// new Map<String, dynamic>.from(message);
// print(myMap);
// LandingPage.isOpenCallPage = true;
// LandingPage.incomingCallData = IncomingCallData.fromJson(myMap);
// if (!isPageNavigated) {
// isPageNavigated = true;
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => IncomingCall(
// incomingCallData: LandingPage.incomingCallData)))
// .then((value) {
// isPageNavigated = false;
// });
// }
// } else {
// print("Is Call Not Found iOS");
// }
// } else {
// print("Is Call Not Found iOS");
// }
// },
);
}
Map<String, dynamic> myMap = showDialog(String message) {
new Map<String, dynamic>.from(message['data']); ConfirmDialog dialog = new ConfirmDialog(
print(myMap); context: context,
LandingPage.isOpenCallPage = true; confirmMessage: message,
LandingPage.incomingCallData = IncomingCallData.fromJson(myMap); okText: TranslationBase.of(context).confirm,
if (!isPageNavigated) { cancelText: TranslationBase.of(context).cancel_nocaps,
isPageNavigated = true; okFunction: () => {},
Navigator.push( cancelFunction: () => {});
context, dialog.showAlertDialog(context);
MaterialPageRoute(
builder: (context) => IncomingCall(
incomingCallData: LandingPage.incomingCallData)))
.then((value) {
isPageNavigated = false;
});
}
} else {
print("Is Call Not Found Android");
}
} else {
print("Is Call Not Found Android");
}
},
onBackgroundMessage: Platform.isIOS ? null : myBackgroundMessageHandler,
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
},
);
} }
void requestPermissions() async { void requestPermissions() async {
@ -200,6 +262,7 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
Permission.storage, Permission.storage,
Permission.camera, Permission.camera,
Permission.photos, Permission.photos,
Permission.notification,
Permission.accessMediaLocation Permission.accessMediaLocation
].request(); ].request();
} }
@ -235,16 +298,21 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
controller: pageController, controller: pageController,
children: [ children: [
HomePage(goToMyProfile: (){ HomePage(
_changeCurrentTab(1); goToMyProfile: () {
},), _changeCurrentTab(1);
},
),
MedicalProfilePage(), MedicalProfilePage(),
MyAdmissionsPage(), MyAdmissionsPage(),
ToDo(), ToDo(),
BookingOptions() BookingOptions()
], // Please do not remove the BookingOptions from this array ], // Please do not remove the BookingOptions from this array
), ),
bottomNavigationBar: BottomNavBar(changeIndex: _changeCurrentTab,index: currentTab,), bottomNavigationBar: BottomNavBar(
changeIndex: _changeCurrentTab,
index: currentTab,
),
); );
} }
@ -307,6 +375,4 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
_changeCurrentTab(2); _changeCurrentTab(2);
} }
} }
} }

@ -14,7 +14,6 @@ import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart'; import 'package:smart_progress_bar/smart_progress_bar.dart';
@ -49,7 +48,7 @@ class _clinic_listState extends State<ClinicList> {
liveCareClinicsListResponse = new LiveCareClinicsListResponse(); liveCareClinicsListResponse = new LiveCareClinicsListResponse();
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
// Future.delayed(new Duration(milliseconds: 1200), () { // Future.delayed(new Duration(milliseconds: 1200), () {
getLiveCareClinicsList(); getLiveCareClinicsList();
// }); // });
}); });
getLanguageID(); getLanguageID();
@ -58,79 +57,82 @@ class _clinic_listState extends State<ClinicList> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppScaffold( return SingleChildScrollView(
isShowAppBar: false, child: Column(
body: SingleChildScrollView( children: <Widget>[
child: isDataLoaded isDataLoaded
? Container( ? Container(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Container(
margin: EdgeInsets.all(15.0), margin: EdgeInsets.all(15.0),
child: Text("Online Clinics: ", child: Text("Online Clinics: ",
style: TextStyle( style: TextStyle(
fontSize: 20.0, fontWeight: FontWeight.bold)), fontSize: 20.0, fontWeight: FontWeight.bold)),
), ),
ListView.builder( ListView.builder(
scrollDirection: Axis.vertical, scrollDirection: Axis.vertical,
shrinkWrap: true, shrinkWrap: true,
physics: ScrollPhysics(), physics: ScrollPhysics(),
padding: EdgeInsets.all(0.0), padding: EdgeInsets.all(0.0),
itemCount: liveCareClinicsListResponse itemCount: liveCareClinicsListResponse
.patientERGetClinicsList.length, .patientERGetClinicsList.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
return InkWell( return InkWell(
onTap: () { onTap: () {
updateSelectedIndex(liveCareClinicsListResponse updateSelectedIndex(liveCareClinicsListResponse
.patientERGetClinicsList[index]); .patientERGetClinicsList[index]);
}, },
child: ClinicCard( child: ClinicCard(
isSelected: selectedClinicID == isSelected: selectedClinicID ==
liveCareClinicsListResponse liveCareClinicsListResponse
.patientERGetClinicsList[index] .patientERGetClinicsList[index]
.serviceID .serviceID
? true ? true
: false, : false,
patientERGetClinicsList: liveCareClinicsListResponse patientERGetClinicsList:
.patientERGetClinicsList[index], liveCareClinicsListResponse
languageID: languageID, .patientERGetClinicsList[index],
), languageID: languageID,
); ),
}, );
), },
Container( ),
height: 80.0, Container(
), height: 10.0,
], ),
), ],
) ),
: Container(), )
), : Container(),
bottomSheet: Container( isDataLoaded ? Container(
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height: 50.0, height: 50.0,
margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0), margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
child: ButtonTheme( child: ButtonTheme(
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0), borderRadius: BorderRadius.circular(10.0),
), ),
minWidth: MediaQuery.of(context).size.width * 0.7, minWidth: MediaQuery.of(context).size.width * 0.7,
height: 45.0, height: 45.0,
child: RaisedButton( child: RaisedButton(
color: new Color(0xFF60686b), color: new Color(0xFF60686b),
textColor: Colors.white, textColor: Colors.white,
disabledTextColor: Colors.white, disabledTextColor: Colors.white,
disabledColor: new Color(0xFFbcc2c4), disabledColor: new Color(0xFFbcc2c4),
onPressed: startLiveCare, onPressed: startLiveCare,
child: Text("Start", style: TextStyle(fontSize: 18.0)), child: Text("Start", style: TextStyle(fontSize: 18.0)),
), ),
), ),
) : Container(),
],
), ),
); );
} }
void startLiveCare() { void startLiveCare() {
bool isError = false;
LiveCareService service = new LiveCareService(); LiveCareService service = new LiveCareService();
ERAppointmentFeesResponse erAppointmentFeesResponse = ERAppointmentFeesResponse erAppointmentFeesResponse =
new ERAppointmentFeesResponse(); new ERAppointmentFeesResponse();
@ -141,12 +143,15 @@ class _clinic_listState extends State<ClinicList> {
}) })
.catchError((err) { .catchError((err) {
print(err); print(err);
isError = true;
AppToast.showErrorToast(message: err);
}) })
.showProgressBar( .showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)) text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6))
.then((value) { .then((value) {
getERAppointmentTime( if (!isError)
erAppointmentFeesResponse.getERAppointmentFeesList); getERAppointmentTime(
erAppointmentFeesResponse.getERAppointmentFeesList);
}); });
} }
@ -158,6 +163,7 @@ class _clinic_listState extends State<ClinicList> {
getERAppointmentFeesList, res['WatingtimeInteger']); getERAppointmentFeesList, res['WatingtimeInteger']);
}).catchError((err) { }).catchError((err) {
print(err); print(err);
AppToast.showErrorToast(message: err);
}).showProgressBar( }).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
} }
@ -339,14 +345,17 @@ class _clinic_listState extends State<ClinicList> {
service service
.addNewCallForPatientER(selectedClinicID, clientRequestID, context) .addNewCallForPatientER(selectedClinicID, clientRequestID, context)
.then((res) { .then((res) {
AppToast.showSuccessToast( AppToast.showSuccessToast(
message: "New Call has been added successfully"); message: "New Call has been added successfully");
}).catchError((err) { })
print(err); .catchError((err) {
}).showProgressBar( print(err);
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)).then((value) { })
widget.getLiveCareHistory(); .showProgressBar(
}); text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6))
.then((value) {
widget.getLiveCareHistory();
});
} }
getLanguageID() async { getLanguageID() async {

@ -2,22 +2,17 @@ import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/viewModels/appointment_rate_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/appointment_rate_view_model.dart';
import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_request.dart';
import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_response.dart'; import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_response.dart';
import 'package:diplomaticquarterapp/models/Authentication/check_paitent_authentication_req.dart'; import 'package:diplomaticquarterapp/models/Authentication/check_paitent_authentication_req.dart';
import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart';
import 'package:diplomaticquarterapp/models/Authentication/select_device_imei_res.dart';
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
import 'package:diplomaticquarterapp/pages/login/login-type.dart'; import 'package:diplomaticquarterapp/pages/login/login-type.dart';
import 'package:diplomaticquarterapp/pages/rateAppointment/rate_appointment_doctor.dart'; import 'package:diplomaticquarterapp/pages/rateAppointment/rate_appointment_doctor.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/card/rounded_container.dart';
import 'package:diplomaticquarterapp/widgets/input/text_field.dart'; import 'package:diplomaticquarterapp/widgets/input/text_field.dart';
import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart'; import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -26,7 +21,6 @@ import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
class Login extends StatefulWidget { class Login extends StatefulWidget {
@override @override
@ -48,9 +42,16 @@ class _Login extends State<Login> {
@override @override
void initState() { void initState() {
// getDeviceToken();
super.initState(); super.initState();
} }
getDeviceToken() async {
setState(() async {
nationalIDorFile.text = await sharedPref.getString(PUSH_TOKEN);
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppScaffold( return AppScaffold(
@ -196,7 +197,10 @@ class _Login extends State<Login> {
this.sharedPref.setObject(USER_PROFILE, result.list), this.sharedPref.setObject(USER_PROFILE, result.list),
this.sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID), this.sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID),
this.sharedPref.setString(TOKEN, result.authenticationTokenID), this.sharedPref.setString(TOKEN, result.authenticationTokenID),
//this.checkIfUserAgreedBefore(result),
Navigator.of(context).pushNamed(
HOME,
),
appointmentRateViewModel appointmentRateViewModel
.getIsLastAppointmentRatedList() .getIsLastAppointmentRatedList()
.then((value) => { .then((value) => {
@ -219,7 +223,6 @@ class _Login extends State<Login> {
) )
} }
}) })
// SMSOTP.showLoadingDialog(context, false), // SMSOTP.showLoadingDialog(context, false),
}); });
} }

@ -0,0 +1,378 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart';
import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/balance/dialogs/SelectHospitalDialog.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
import '../../../core/model/my_balance/AdvanceModel.dart';
import 'dialogs/ConfirmSMSDialog.dart';
import 'dialogs/SelectBeneficiaryDialog.dart';
import 'dialogs/SelectPatientFamilyDialog.dart';
import 'dialogs/SelectPatientInfoDialog.dart';
import 'confirm_payment_page.dart';
import 'new_text_Field.dart';
enum BeneficiaryType { MyAccount, MyFamilyFiles, OtherAccount, NON }
class AdvancePaymentPage extends StatefulWidget {
@override
_AdvancePaymentPageState createState() => _AdvancePaymentPageState();
}
class _AdvancePaymentPageState extends State<AdvancePaymentPage> {
TextEditingController _fileTextController = TextEditingController();
TextEditingController _notesTextController = TextEditingController();
BeneficiaryType beneficiaryType = BeneficiaryType.NON;
HospitalsModel _selectedHospital;
String amount = "";
String email;
PatientInfo _selectedPatientInfo;
GetAllSharedRecordsByStatusList selectedPatientFamily;
AdvanceModel advanceModel = AdvanceModel();
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return BaseView<MyBalanceViewModel>(
onModelReady: (model) => model.getHospitals(),
builder: (_, model, w) => AppScaffold(
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).advancePayment,
body: SingleChildScrollView(
physics: ScrollPhysics(),
child: Container(
margin: EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts(
TranslationBase.of(context).advancePaymentLabel,
textAlign: TextAlign.center,
),
SizedBox(
height: 12,
),
InkWell(
onTap: () => confirmSelectBeneficiaryDialog(model),
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(getBeneficiaryType()),
Icon(Icons.arrow_drop_down)
],
),
),
),
if (beneficiaryType == BeneficiaryType.MyFamilyFiles)
SizedBox(
height: 12,
),
if (beneficiaryType == BeneficiaryType.MyFamilyFiles)
InkWell(
onTap: () {
model.getFamilyFiles().then((value) {
confirmSelectFamilyDialog(model
.getAllSharedRecordsByStatusResponse
.getAllSharedRecordsByStatusList);
}).showProgressBar(
text: "Loading",
backgroundColor: Colors.blue.withOpacity(0.6));
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(getFamilyMembersName()),
Icon(Icons.arrow_drop_down)
],
),
),
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).fileNumber,
controller: _fileTextController,
),
if (beneficiaryType == BeneficiaryType.OtherAccount)
SizedBox(
height: 12,
),
if (beneficiaryType == BeneficiaryType.OtherAccount)
InkWell(
onTap: () {
if (_fileTextController.text.isNotEmpty)
model
.getPatientInfoByPatientID(
id: _fileTextController.text)
.then((value) {
confirmSelectPatientDialog(model.patientInfoList);
}).showProgressBar(
text: "Loading",
backgroundColor:
Colors.blue.withOpacity(0.6));
else
AppToast.showErrorToast(
message: 'Please Enter The File Number');
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(getPatientName()),
Icon(Icons.arrow_drop_down)
],
),
),
),
SizedBox(
height: 12,
),
InkWell(
onTap: () => confirmSelectHospitalDialog(model.hospitals),
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(getHospitalName()),
Icon(Icons.arrow_drop_down)
],
),
),
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).amount,
keyboardType: TextInputType.number,
onChanged: (value) {
setState(() {
amount = value;
});
},
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).depositorEmail,
initialValue: model.user.emailAddress,
onChanged: (value) {
email = value;
},
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).notes,
controller: _notesTextController,
),
SizedBox(
height: MediaQuery.of(context).size.height * 0.15,
)
],
),
),
),
bottomSheet: Container(
height: MediaQuery.of(context).size.height * 0.1,
width: double.infinity,
padding: EdgeInsets.all(12),
child: SecondaryButton(
textColor: Colors.white,
label: TranslationBase.of(context).submit,
disabled: amount.isEmpty ||
_fileTextController.text.isEmpty ||
_selectedHospital == null,
onTap: () {
advanceModel.fileNumber = _fileTextController.text;
advanceModel.hospitalsModel = _selectedHospital;
advanceModel.note = _notesTextController.text;
advanceModel.email = email ?? model.user.emailAddress;
advanceModel.amount = amount;
model.getPatientInfoByPatientIDAndMobileNumber().then((value) {
if (model.state != ViewState.Error &&
model.state != ViewState.ErrorLocal) {
Utils.hideKeyboard(context);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PaymentMethod())).then(
(value) {
Navigator.push(
context,
FadePage(
page: ConfirmPaymentPage(
advanceModel: advanceModel,
selectedPaymentMethod: value,
patientInfoAndMobileNumber:
model.patientInfoAndMobileNumber,
),
),
);
},
);
}
}).showProgressBar(
text: "Loading",
backgroundColor: Colors.blue.withOpacity(0.6));
},
),
)),
);
}
void confirmSelectBeneficiaryDialog(MyBalanceViewModel model) {
showDialog(
context: context,
child: SelectBeneficiaryDialog(
beneficiaryType: beneficiaryType,
onValueSelected: (value) {
setState(() {
if (value == BeneficiaryType.MyAccount) {
_fileTextController.text = model.user.patientID.toString();
advanceModel.depositorName =
model.user.firstName + " " + model.user.lastName;
} else
_fileTextController.text = "";
beneficiaryType = value;
});
},
),
);
}
void confirmSelectHospitalDialog(List<HospitalsModel> hospitals) {
showDialog(
context: context,
child: SelectHospitalDialog(
hospitals: hospitals,
selectedHospital: _selectedHospital,
onValueSelected: (value) {
setState(() {
_selectedHospital = value;
});
},
),
);
}
void confirmSelectPatientDialog(List<PatientInfo> patientInfoList) {
showDialog(
context: context,
child: SelectPatientInfoDialog(
patientInfoList: patientInfoList,
selectedPatientInfo: _selectedPatientInfo,
onValueSelected: (value) {
setState(() {
advanceModel.depositorName = value.fullName;
_selectedPatientInfo = value;
});
},
),
);
}
void confirmSelectFamilyDialog(
List<GetAllSharedRecordsByStatusList> getAllSharedRecordsByStatusList) {
showDialog(
context: context,
child: SelectPatientFamilyDialog(
getAllSharedRecordsByStatusList: getAllSharedRecordsByStatusList,
selectedPatientFamily: selectedPatientFamily,
onValueSelected: (value) {
setState(() {
selectedPatientFamily = value;
_fileTextController.text = selectedPatientFamily.patientID.toString();
advanceModel.depositorName = value.patientName;
});
},
),
);
}
String getBeneficiaryType() {
switch (beneficiaryType) {
case BeneficiaryType.MyAccount:
return TranslationBase.of(context).myAccount;
case BeneficiaryType.MyFamilyFiles:
return TranslationBase.of(context).myFamilyFiles;
break;
case BeneficiaryType.OtherAccount:
return TranslationBase.of(context).otherAccount;
break;
case BeneficiaryType.NON:
return TranslationBase.of(context).selectBeneficiary;
}
return TranslationBase.of(context).selectBeneficiary;
}
String getHospitalName() {
if (_selectedHospital != null)
return _selectedHospital.name;
else
return TranslationBase.of(context).selectHospital;
}
String getPatientName() {
if (_selectedPatientInfo != null)
return _selectedPatientInfo.fullName;
else
return TranslationBase.of(context).selectPatientName;
}
String getFamilyMembersName() {
if (selectedPatientFamily != null)
return selectedPatientFamily.patientName;
else
return TranslationBase.of(context).selectFamilyPatientName;
}
}

@ -0,0 +1,177 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info_and_mobile_number.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/AdvanceModel.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dialogs/ConfirmSMSDialog.dart';
import 'new_text_Field.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
class ConfirmPaymentPage extends StatelessWidget {
final AdvanceModel advanceModel;
final PatientInfoAndMobileNumber patientInfoAndMobileNumber;
final String selectedPaymentMethod;
ConfirmPaymentPage(
{this.advanceModel,
this.patientInfoAndMobileNumber,
this.selectedPaymentMethod});
@override
Widget build(BuildContext context) {
void showSMSDialog() {
showDialog(
context: context,
barrierDismissible: false,
child: ConfirmSMSDialog(
phoneNumber: patientInfoAndMobileNumber.mobileNumber,
),
);
}
return BaseView<MyBalanceViewModel>(
builder: (_, model, w) => AppScaffold(
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).advancePayment,
body: SingleChildScrollView(
physics: ScrollPhysics(),
child: Container(
margin: EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts(
TranslationBase.of(context).confirmThePayment,
textAlign: TextAlign.center,
fontWeight: FontWeight.w500,
fontSize: 24,
),
SizedBox(
height: 12,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
height: 100.0,
padding: EdgeInsets.all(7.0),
width: MediaQuery.of(context).size.width * 0.45,
child: Image.asset(getImagePath(selectedPaymentMethod)),
),
Texts(
'${advanceModel.amount} SAR',
fontSize: 26,
bold: true,
)
],
),
SizedBox(
height: 12,
),
Row(
children: [
Expanded(
child: Container(
margin: EdgeInsets.all(3),
child: NewTextFields(
hintText: TranslationBase.of(context).fileNumber,
initialValue: advanceModel.fileNumber,
isEnabled: false,
),
),
),
Expanded(
child: Container(
margin: EdgeInsets.all(3),
child: NewTextFields(
hintText: TranslationBase.of(context).name,
initialValue: patientInfoAndMobileNumber.firstName,
isEnabled: false,
),
),
),
],
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).mobileNumber,
initialValue: patientInfoAndMobileNumber.mobileNumber,
isEnabled: false,
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).depositorName,
initialValue: advanceModel.depositorName,
isEnabled: false,
),
SizedBox(
height: 12,
),
NewTextFields(
hintText: TranslationBase.of(context).notes,
initialValue: advanceModel.note,
isEnabled: false,
),
],
),
),
),
bottomSheet: Container(
height: MediaQuery.of(context).size.height * 0.1,
width: double.infinity,
padding: EdgeInsets.all(12),
child: SecondaryButton(
textColor: Colors.white,
label: TranslationBase.of(context).confirm.toUpperCase(),
disabled: model.state == ViewState.Busy,
onTap: () {
model
.sendActivationCodeForAdvancePayment(
patientID: int.parse(advanceModel.fileNumber),projectID: advanceModel.hospitalsModel.iD)
.then((value) {
if (model.state != ViewState.ErrorLocal &&
model.state != ViewState.Error) showSMSDialog();
}).showProgressBar(
text: "Loading",
backgroundColor: Colors.blue.withOpacity(0.6));
},
),
),
),
);
}
String getImagePath(String paymentMethod) {
switch (paymentMethod) {
case "MADA":
return 'assets/images/new-design/mada.png';
break;
case "SADAD":
return 'assets/images/new-design/sadad.png';
break;
case "VISA":
return 'assets/images/new-design/visa.png';
break;
case "MASTERCARD":
return 'assets/images/new-design/mastercard.png';
break;
case "Installment":
return 'assets/images/new-design/installment.png';
break;
}
return 'assets/images/new-design/mada.png';
}
}

@ -0,0 +1,363 @@
import 'dart:async';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/AdvanceModel.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info_and_mobile_number.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
class ConfirmSMSDialog extends StatefulWidget {
final String phoneNumber;
final AdvanceModel advanceModel;
final PatientInfoAndMobileNumber patientInfoAndMobileNumber;
final String selectedPaymentMethod;
const ConfirmSMSDialog({Key key, this.phoneNumber,this.advanceModel,this.selectedPaymentMethod,this.patientInfoAndMobileNumber})
: super(key: key);
@override
_ConfirmSMSDialogState createState() => _ConfirmSMSDialogState();
}
class _ConfirmSMSDialogState extends State<ConfirmSMSDialog> {
final verifyAccountForm = GlobalKey<FormState>();
Map verifyAccountFormValue = {
'digit1': null,
'digit2': null,
'digit3': null,
'digit4': null,
};
TextEditingController digit1 = TextEditingController(text: "");
TextEditingController digit2 = TextEditingController(text: "");
TextEditingController digit3 = TextEditingController(text: "");
TextEditingController digit4 = TextEditingController(text: "");
String timerText = (TIMER_MIN - 1).toString() + ':59';
int min = TIMER_MIN - 1;
int sec = 59;
Timer _timer;
resendCode() {
min = TIMER_MIN - 1;
sec = 59;
_timer = Timer.periodic(Duration(seconds: 1), (Timer timer) {
if (min <= 0 && sec <= 0) {
timer.cancel();
} else {
setState(() {
sec = sec - 1;
if (sec == 0 && min == 0) {
Navigator.pop(context);
min = 0;
sec = 0;
} else if (sec == 0) {
min = min - 1;
sec = 59;
}
timerText = min.toString() + ':' + sec.toString();
});
}
});
}
FocusNode focusD1;
FocusNode focusD2;
FocusNode focusD3;
FocusNode focusD4;
@override
void initState() {
super.initState();
resendCode();
focusD1 = FocusNode();
focusD2 = FocusNode();
focusD3 = FocusNode();
focusD4 = FocusNode();
}
@override
void dispose() {
_timer.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BaseView<MyBalanceViewModel>(
builder: (_, model, w) => Dialog(
elevation: 0.6,
child: Container(
height: 520,
child: ListView(
children: [
Container(
width: double.infinity,
height: 40,
color: Colors.grey[700],
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
flex: 4,
child: Center(
child: Texts(
'SMS',
color: Colors.white,
textAlign: TextAlign.center,
))),
Expanded(
flex: 1,
child: InkWell(
onTap: () => Navigator.pop(context),
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle, color: Colors.white),
child: Icon(
Icons.clear,
color: Colors.grey[900],
)),
),
)
],
),
),
Image.asset(
'assets/images/login/103.png',
height: MediaQuery.of(context).size.width * 0.25,
width: MediaQuery.of(context).size.width * 0.25,
),
SizedBox(
height: 12,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Texts(
TranslationBase.of(context).pleaseEnterTheVerificationCode+'[${widget.phoneNumber}]',
textAlign: TextAlign.center,
),
),
SizedBox(
height: 12,
),
Form(
key: verifyAccountForm,
child: Container(
width: SizeConfig.realScreenWidth * 0.90,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox(
height: 30,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Container(
width: 65,
child: TextFormField(
textInputAction: TextInputAction.next,
style: TextStyle(
fontSize: SizeConfig.textMultiplier * 3,
),
focusNode: focusD1,
maxLength: 1,
controller: digit1,
textAlign: TextAlign.center,
keyboardType: TextInputType.number,
decoration: buildInputDecoration(context),
onSaved: (val) {
verifyAccountFormValue['digit1'] = val;
},
validator: validateCodeDigit,
onFieldSubmitted: (_) {
FocusScope.of(context).requestFocus(focusD2);
},
onChanged: (val) {
if (val.length == 1) {
FocusScope.of(context).requestFocus(focusD2);
}
},
),
),
Container(
width: 65,
child: TextFormField(
focusNode: focusD2,
controller: digit2,
textInputAction: TextInputAction.next,
maxLength: 1,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: SizeConfig.textMultiplier * 3,
),
keyboardType: TextInputType.number,
decoration: buildInputDecoration(context),
validator: validateCodeDigit,
onSaved: (val) {
verifyAccountFormValue['digit2'] = val;
},
onFieldSubmitted: (_) {
FocusScope.of(context).requestFocus(focusD3);
},
onChanged: (val) {
if (val.length == 1) {
FocusScope.of(context).requestFocus(focusD3);
}
},
),
),
Container(
width: 65,
child: TextFormField(
focusNode: focusD3,
controller: digit3,
textInputAction: TextInputAction.next,
maxLength: 1,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: SizeConfig.textMultiplier * 3,
),
keyboardType: TextInputType.number,
decoration: buildInputDecoration(context),
validator: validateCodeDigit,
onSaved: (val) {
verifyAccountFormValue['digit3'] = val;
},
onFieldSubmitted: (_) {
FocusScope.of(context).requestFocus(focusD4);
},
onChanged: (val) {
if (val.length == 1) {
FocusScope.of(context)
.requestFocus(focusD4);
}
},
)),
Container(
width: 65,
child: TextFormField(
focusNode: focusD4,
controller: digit4,
maxLength: 1,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: SizeConfig.textMultiplier * 3,
),
keyboardType: TextInputType.number,
decoration: buildInputDecoration(context),
validator: validateCodeDigit,
onSaved: (val) {
verifyAccountFormValue['digit4'] = val;
},
onFieldSubmitted: (_) {
FocusScope.of(context).requestFocus(focusD4);
submit(model);
},
onChanged: (val) {
if (val.length == 1) {
FocusScope.of(context)
.requestFocus(focusD4);
submit(model);
}
}),
)
],
),
SizedBox(
height: 8,
),
if (model.state == ViewState.ErrorLocal ||
model.state == ViewState.Error)
Container(
margin: EdgeInsets.only(left: 8,right: 8),
width: double.maxFinite,
child: Texts(
model.error,
color: Colors.red,
),
),
SizedBox(height: 20),
// buildText(),
Padding(
padding: const EdgeInsets.all(8.0),
child: Texts(
TranslationBase.of(context).theVerificationCodeExpiresIn+' $timerText',
textAlign: TextAlign.center,
),
),
SizedBox(height: 20),
Container(
width: double.maxFinite,
padding: EdgeInsets.all(12),
child: SecondaryButton(
textColor: Colors.white,
label: TranslationBase.of(context).submit.toUpperCase(),
onTap: () {
submit(model);
},
),
),
],
),
),
)
],
),
),
),
);
}
void submit(MyBalanceViewModel model) {
if (verifyAccountForm.currentState.validate()) {
final activationCode =
digit1.text + digit2.text + digit3.text + digit4.text;
model.checkActivationCodeForAdvancePayment(
activationCode: activationCode).then((value) {
//TODO complete payment
}).showProgressBar(
text: "Loading",
backgroundColor: Colors.blue.withOpacity(0.6));
}
}
String validateCodeDigit(value) {
if (value.isEmpty) {
return '';
}
return null;
}
InputDecoration buildInputDecoration(BuildContext context) {
return InputDecoration(
// ts/images/password_icon.png
contentPadding: EdgeInsets.only(top: 20, bottom: 20),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(5)),
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(5.0)),
borderSide: BorderSide(color: Theme.of(context).primaryColor),
),
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(5.0)),
borderSide: BorderSide(color: Theme.of(context).errorColor),
),
focusedErrorBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(5.0)),
borderSide: BorderSide(color: Theme.of(context).errorColor),
),
);
}
}

@ -0,0 +1,176 @@
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../advance_payment_page.dart';
class SelectBeneficiaryDialog extends StatefulWidget {
final BeneficiaryType beneficiaryType;
final Function(BeneficiaryType) onValueSelected;
SelectBeneficiaryDialog(
{Key key, this.beneficiaryType, this.onValueSelected});
@override
_SelectBeneficiaryDialogState createState() =>
_SelectBeneficiaryDialogState(this.beneficiaryType);
}
class _SelectBeneficiaryDialogState extends State<SelectBeneficiaryDialog> {
_SelectBeneficiaryDialogState(this.beneficiaryType);
BeneficiaryType beneficiaryType;
@override
Widget build(BuildContext context) {
return SimpleDialog(
children: [
Container(
child: Column(
children: [
Divider(),
Row(
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
setState(() {
beneficiaryType = BeneficiaryType.MyAccount;
});
},
child: ListTile(
title: Text(TranslationBase.of(context).myAccount),
leading: Radio(
value: BeneficiaryType.MyAccount,
groupValue: beneficiaryType,
activeColor: Colors.red[800],
onChanged: (BeneficiaryType value) {
setState(() {
beneficiaryType = value;
});
},
),
),
),
)
],
),
SizedBox(
height: 5.0,
),
Row(
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
setState(() {
beneficiaryType = BeneficiaryType.MyFamilyFiles;
});
},
child: ListTile(
title: Text(TranslationBase.of(context).myFamilyFiles),
leading: Radio(
value: BeneficiaryType.MyFamilyFiles,
groupValue: beneficiaryType,
activeColor: Colors.red[800],
onChanged: (BeneficiaryType value) {
setState(() {
beneficiaryType = value;
});
},
),
),
),
)
],
),
SizedBox(
height: 5.0,
),
Row(
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
setState(() {
beneficiaryType = BeneficiaryType.OtherAccount;
});
},
child: ListTile(
title: Text(TranslationBase.of(context).otherAccount),
leading: Radio(
value: BeneficiaryType.OtherAccount,
groupValue: beneficiaryType,
activeColor: Colors.red[800],
onChanged: (BeneficiaryType value) {
setState(() {
beneficiaryType = value;
});
},
),
),
),
)
],
),
SizedBox(
height: 5.0,
),
Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
Navigator.pop(context);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
child: Center(
child: Texts(
TranslationBase.of(context).cancel.toUpperCase(),
color: Colors.red,
),
),
),
),
),
),
Container(
width: 1,
height: 30,
color: Colors.grey[500],
),
Expanded(
flex: 1,
child: InkWell(
onTap: () {
widget.onValueSelected(beneficiaryType);
Navigator.pop(context);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Texts(
TranslationBase.of(context).ok,
fontWeight: FontWeight.w400,
),
),
),
),
),
],
)
],
),
)
],
);
}
}

@ -0,0 +1,129 @@
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class SelectHospitalDialog extends StatefulWidget {
final List<HospitalsModel> hospitals;
final Function(HospitalsModel) onValueSelected;
HospitalsModel selectedHospital;
SelectHospitalDialog(
{Key key, this.hospitals, this.onValueSelected, this.selectedHospital});
@override
_SelectHospitalDialogState createState() => _SelectHospitalDialogState();
}
class _SelectHospitalDialogState extends State<SelectHospitalDialog> {
@override
void initState() {
super.initState();
widget.selectedHospital = widget.selectedHospital ?? widget.hospitals[0];
}
@override
Widget build(BuildContext context) {
return SimpleDialog(
children: [
Column(
children: [
Divider(),
...List.generate(
widget.hospitals.length,
(index) => Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 2,
),
Row(
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
setState(() {
widget.selectedHospital = widget.hospitals[index];
});
},
child: ListTile(
title: Text(widget.hospitals[index].name +
' ${widget.hospitals[index].distanceInKilometers} KM'),
leading: Radio(
value: widget.hospitals[index],
groupValue: widget.selectedHospital,
activeColor: Colors.red[800],
onChanged: (value) {
setState(() {
widget.selectedHospital = value;
});
},
),
),
),
)
],
),
SizedBox(
height: 5.0,
),
],
),
),
SizedBox(
height: 5.0,
),
Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
Navigator.pop(context);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
child: Center(
child: Texts(
TranslationBase.of(context).cancel.toUpperCase(),
color: Colors.red,
),
),
),
),
),
),
Container(
width: 1,
height: 30,
color: Colors.grey[500],
),
Expanded(
flex: 1,
child: InkWell(
onTap: () {
widget.onValueSelected(widget.selectedHospital);
Navigator.pop(context);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Texts(
TranslationBase.of(context).ok,
fontWeight: FontWeight.w400,
)),
),
),
),
],
)
],
)
],
);
}
}

@ -0,0 +1,130 @@
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class SelectPatientFamilyDialog extends StatefulWidget {
final List<GetAllSharedRecordsByStatusList> getAllSharedRecordsByStatusList;
final Function(GetAllSharedRecordsByStatusList) onValueSelected;
GetAllSharedRecordsByStatusList selectedPatientFamily;
SelectPatientFamilyDialog({Key key, this.getAllSharedRecordsByStatusList, this.onValueSelected,this.selectedPatientFamily});
@override
_SelectPatientFamilyDialogState createState() => _SelectPatientFamilyDialogState();
}
class _SelectPatientFamilyDialogState extends State<SelectPatientFamilyDialog> {
@override
void initState() {
super.initState();
widget.selectedPatientFamily = widget.selectedPatientFamily?? widget.getAllSharedRecordsByStatusList[0];
}
@override
Widget build(BuildContext context) {
return SimpleDialog(
children: [
Column(
children: [
Divider(),
...List.generate(
widget.getAllSharedRecordsByStatusList.length,
(index) => Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 2,
),
Row(
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
setState(() {
widget.selectedPatientFamily = widget.getAllSharedRecordsByStatusList[index];
});
},
child: ListTile(
title: Text(widget.getAllSharedRecordsByStatusList[index].patientName),
leading: Radio(
value: widget.getAllSharedRecordsByStatusList[index],
groupValue: widget.selectedPatientFamily,
activeColor: Colors.red[800],
onChanged: (value) {
setState(() {
widget.selectedPatientFamily = value;
});
},
),
),
),
)
],
),
SizedBox(
height: 5.0,
),
],
),
),
SizedBox(
height: 5.0,
),
Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
Navigator.pop(context);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
child: Center(
child: Texts(
TranslationBase.of(context).cancel.toUpperCase(),
color: Colors.red,
),
),
),
),
),
),
Container(
width: 1,
height: 30,
color: Colors.grey[500],
),
Expanded(
flex: 1,
child: InkWell(
onTap: () {
widget.onValueSelected(widget.selectedPatientFamily);
Navigator.pop(context);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Texts(
TranslationBase.of(context).ok,
fontWeight: FontWeight.w400,
)),
),
),
),
],
)
],
)
],
);
}
}

@ -0,0 +1,130 @@
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class SelectPatientInfoDialog extends StatefulWidget {
final List<PatientInfo> patientInfoList ;
final Function(PatientInfo) onValueSelected;
PatientInfo selectedPatientInfo;
SelectPatientInfoDialog({Key key, this.patientInfoList, this.onValueSelected,this.selectedPatientInfo});
@override
_SelectPatientInfoDialogState createState() => _SelectPatientInfoDialogState();
}
class _SelectPatientInfoDialogState extends State<SelectPatientInfoDialog> {
@override
void initState() {
super.initState();
widget.selectedPatientInfo = widget.selectedPatientInfo?? widget.patientInfoList[0];
}
@override
Widget build(BuildContext context) {
return SimpleDialog(
children: [
Column(
children: [
Divider(),
...List.generate(
widget.patientInfoList.length,
(index) => Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 2,
),
Row(
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
setState(() {
widget.selectedPatientInfo = widget.patientInfoList[index];
});
},
child: ListTile(
title: Text(widget.patientInfoList[index].fullName),
leading: Radio(
value: widget.patientInfoList[index],
groupValue: widget.selectedPatientInfo,
activeColor: Colors.red[800],
onChanged: (value) {
setState(() {
widget.selectedPatientInfo = value;
});
},
),
),
),
)
],
),
SizedBox(
height: 5.0,
),
],
),
),
SizedBox(
height: 5.0,
),
Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
Navigator.pop(context);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
child: Center(
child: Texts(
TranslationBase.of(context).cancel.toUpperCase(),
color: Colors.red,
),
),
),
),
),
),
Container(
width: 1,
height: 30,
color: Colors.grey[500],
),
Expanded(
flex: 1,
child: InkWell(
onTap: () {
widget.onValueSelected(widget.selectedPatientInfo);
Navigator.pop(context);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Texts(
TranslationBase.of(context).ok,
fontWeight: FontWeight.w400,
)),
),
),
),
],
)
],
)
],
);
}
}

@ -0,0 +1,107 @@
import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'advance_payment_page.dart';
class MyBalancePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BaseView<MyBalanceViewModel>(
onModelReady: (model) => model.getPatientAdvanceBalanceAmount(),
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).myBalances,
body: Container(
margin: EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts(
TranslationBase.of(context).balanceAmount,
color: Colors.black,
bold: true,
),
SizedBox(
height: 15,
),
Container(
padding: EdgeInsets.all(8),
width: double.infinity,
height: 65,
decoration: BoxDecoration(
color: Hexcolor('#B61422'),
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(7),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(
TranslationBase.of(context).totalBalance,
color: Colors.white,
),
Texts(
'${model.totalAdvanceBalanceAmount ?? 0} SAR',
color: Colors.white,
bold: true,
),
],
),
),
SizedBox(
height: 9,
),
...List.generate(
model.patientAdvanceBalanceAmountList.length,
(index) => Container(
padding: EdgeInsets.all(8),
height: 65,
margin: EdgeInsets.only(top: 8),
decoration: BoxDecoration(
color: Colors.white,
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(7),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(model.patientAdvanceBalanceAmountList[index]
.projectDescription),
Texts(
'${model.patientAdvanceBalanceAmountList[index].patientAdvanceBalanceAmount} SAR',
bold: true,
),
],
),
),
),
],
),
),
bottomSheet: Container(
height: MediaQuery.of(context).size.height * 0.1,
width: double.infinity,
padding: EdgeInsets.all(12),
child: SecondaryButton(
// color: Colors.grey[900],
textColor: Colors.white,
label: TranslationBase.of(context).createAdvancedPayment,
onTap: () {
Navigator.push(context,
FadePage(page: AdvancePaymentPage()));
},
),
),
),
);
}
}

@ -0,0 +1,239 @@
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class NumberTextInputFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
final int newTextLength = newValue.text.length;
int selectionIndex = newValue.selection.end;
int usedSubstringIndex = 0;
final StringBuffer newText = StringBuffer();
if (newTextLength >= 1) {
newText.write('(');
if (newValue.selection.end >= 1) selectionIndex++;
}
if (newTextLength >= 4) {
newText.write(newValue.text.substring(0, usedSubstringIndex = 3) + ') ');
if (newValue.selection.end >= 3) selectionIndex += 2;
}
if (newTextLength >= 7) {
newText.write(newValue.text.substring(3, usedSubstringIndex = 6) + '-');
if (newValue.selection.end >= 6) selectionIndex++;
}
if (newTextLength >= 11) {
newText.write(newValue.text.substring(6, usedSubstringIndex = 10) + ' ');
if (newValue.selection.end >= 10) selectionIndex++;
}
// Dump the rest.
if (newTextLength >= usedSubstringIndex)
newText.write(newValue.text.substring(usedSubstringIndex));
return TextEditingValue(
text: newText.toString(),
selection: TextSelection.collapsed(offset: selectionIndex),
);
}
}
final _mobileFormatter = NumberTextInputFormatter();
class NewTextFields extends StatefulWidget {
NewTextFields(
{Key key,
this.type,
this.hintText,
this.suffixIcon,
this.autoFocus,
this.onChanged,
this.initialValue,
this.minLines,
this.maxLines,
this.inputFormatters,
this.padding,
this.focus = false,
this.maxLengthEnforced = true,
this.suffixIconColor,
this.inputAction,
this.onSubmit,
this.keepPadding = true,
this.textCapitalization = TextCapitalization.none,
this.controller,
this.keyboardType,
this.validator,
this.borderOnlyError = false,
this.onSaved,
this.onSuffixTap,
this.readOnly: false,
this.maxLength,
this.prefixIcon,
this.bare = false,
this.onTap,
this.fontSize = 16.0,
this.fontWeight = FontWeight.w700,
this.autoValidate = false,
this.hintColor,this.isEnabled=true})
: super(key: key);
final String hintText;
// final String initialValue;
final String type;
final bool autoFocus;
final IconData suffixIcon;
final Color suffixIconColor;
final Icon prefixIcon;
final VoidCallback onTap;
final TextEditingController controller;
final TextInputType keyboardType;
final FormFieldValidator validator;
final Function onSaved;
final Function onSuffixTap;
final Function onChanged;
final Function onSubmit;
final bool readOnly;
final int maxLength;
final int minLines;
final int maxLines;
final bool maxLengthEnforced;
final bool bare;
final bool isEnabled;
final TextInputAction inputAction;
final double fontSize;
final FontWeight fontWeight;
final bool keepPadding;
final TextCapitalization textCapitalization;
final List<TextInputFormatter> inputFormatters;
final bool autoValidate;
final EdgeInsets padding;
final bool focus;
final bool borderOnlyError;
final Color hintColor;
final String initialValue;
@override
_NewTextFieldsState createState() => _NewTextFieldsState();
}
class _NewTextFieldsState extends State<NewTextFields> {
final FocusNode _focusNode = FocusNode();
bool focus = false;
bool view = false;
@override
void initState() {
super.initState();
_focusNode.addListener(() {
setState(() {
focus = _focusNode.hasFocus;
});
});
}
@override
void didUpdateWidget(NewTextFields oldWidget) {
if (widget.focus) _focusNode.requestFocus();
super.didUpdateWidget(oldWidget);
}
@override
void dispose() {
_focusNode.dispose();
super.dispose();
}
bool _determineReadOnly() {
if (widget.readOnly != null && widget.readOnly) {
_focusNode.unfocus();
return true;
} else {
return false;
}
}
@override
Widget build(BuildContext context) {
return AnimatedContainer(
duration: Duration(milliseconds: 300),
decoration:BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.white),
child: Container(
margin: EdgeInsets.only(top: 8),
child: TextFormField(
enabled: widget.isEnabled,
initialValue: widget.initialValue,
keyboardAppearance: Theme.of(context).brightness,
scrollPhysics: BouncingScrollPhysics(),
autovalidate: widget.autoValidate,
textCapitalization: widget.textCapitalization,
onFieldSubmitted: widget.inputAction == TextInputAction.next
? (widget.onSubmit != null
? widget.onSubmit
: (val) {
_focusNode.nextFocus();
})
: widget.onSubmit,
textInputAction: widget.inputAction,
minLines: widget.minLines ?? 1,
maxLines: widget.maxLines ?? 1,
maxLengthEnforced: widget.maxLengthEnforced,
onChanged: widget.onChanged,
focusNode: _focusNode,
maxLength: widget.maxLength ?? null,
controller: widget.controller,
keyboardType: widget.keyboardType,
readOnly: _determineReadOnly(),
obscureText: widget.type == "password" && !view ? true : false,
autofocus: widget.autoFocus ?? false,
validator: widget.validator,
onSaved: widget.onSaved,
style: Theme.of(context)
.textTheme
.body2
.copyWith(fontSize: widget.fontSize, fontWeight: widget.fontWeight),
inputFormatters: widget.keyboardType == TextInputType.phone
? <TextInputFormatter>[
WhitelistingTextInputFormatter.digitsOnly,
_mobileFormatter,
]
: widget.inputFormatters,
decoration: InputDecoration(
labelText: widget.hintText,
labelStyle: TextStyle(color: Colors.black),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Theme.of(context)
.errorColor
.withOpacity(0.5),
width: 1.0),
borderRadius: BorderRadius.circular(12.0)),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Theme.of(context)
.errorColor
.withOpacity(0.5),
width: 1.0),
borderRadius: BorderRadius.circular(8.0)),
focusedBorder: OutlineInputBorder(
borderSide:
BorderSide(color: Colors.white, width: 1.0),
borderRadius: BorderRadius.circular(12)),
disabledBorder: OutlineInputBorder(
borderSide:
BorderSide(color: Colors.white, width: 1.0),
borderRadius: BorderRadius.circular(12)),
enabledBorder: OutlineInputBorder(
borderSide:
BorderSide(color: Colors.white, width: 1.0),
borderRadius: BorderRadius.circular(12),
),
),
),
),
);
}
}

@ -89,7 +89,7 @@ class DoctorHomePage extends StatelessWidget {
doctorRate: doctor.doctorRate, doctorRate: doctor.doctorRate,
gender: doctor.gender, gender: doctor.gender,
doctorTitle: doctor.doctorTitle, doctorTitle: doctor.doctorTitle,
name: doctor.doctorName, name: doctor.name,
doctorImageURL: doctor.doctorImageURL, doctorImageURL: doctor.doctorImageURL,
nationalityFlagURL: doctor.nationalityFlagURL); nationalityFlagURL: doctor.nationalityFlagURL);
return DoctorView( return DoctorView(

@ -27,8 +27,10 @@ class LaboratoryResultPage extends StatelessWidget {
body: ListView.builder( body: ListView.builder(
itemBuilder: (context, index) => LaboratoryResultWidget( itemBuilder: (context, index) => LaboratoryResultWidget(
onTap: () => model.sendLabReportEmail(patientLabOrder: patientLabOrders), onTap: () => model.sendLabReportEmail(patientLabOrder: patientLabOrders),
billNo: model.patientLabSpecialResult[index].invoiceNo, billNo: patientLabOrders.invoiceNo,
details: model.patientLabSpecialResult[index].resultDataHTML, details: model.patientLabSpecialResult[index].resultDataHTML,
orderNo: patientLabOrders.orderNo,
patientLabOrder: patientLabOrders,
), ),
itemCount: model.patientLabSpecialResult.length, itemCount: model.patientLabSpecialResult.length,
), ),

@ -5,6 +5,8 @@ import 'package:diplomaticquarterapp/core/viewModels/medical/medical_view_model.
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/MyAppointments/MyAppointments.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/MyAppointments.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/patient_sick_leave_page.dart';
import 'package:diplomaticquarterapp/pages/medical/reports/monthly_reports.dart';
import 'package:diplomaticquarterapp/pages/vaccine/my_vaccines_screen.dart'; import 'package:diplomaticquarterapp/pages/vaccine/my_vaccines_screen.dart';
import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart';
import 'package:diplomaticquarterapp/pages/medical/radiology/radiology_home_page.dart'; import 'package:diplomaticquarterapp/pages/medical/radiology/radiology_home_page.dart';
@ -22,6 +24,7 @@ import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/pages/insurance/insurance_card_screen.dart'; import 'package:diplomaticquarterapp/pages/insurance/insurance_card_screen.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../locator.dart'; import '../../locator.dart';
import 'balance/my_balance_page.dart';
import 'doctor/doctor_home_page.dart'; import 'doctor/doctor_home_page.dart';
import 'package:diplomaticquarterapp/pages/insurance/insurance_update_screen.dart'; import 'package:diplomaticquarterapp/pages/insurance/insurance_update_screen.dart';
import 'package:diplomaticquarterapp/pages/insurance/insurance_approval_screen.dart'; import 'package:diplomaticquarterapp/pages/insurance/insurance_approval_screen.dart';
@ -73,7 +76,7 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
itemCount: itemCount:
model.appoitmentAllHistoryResultList.length, model.appoitmentAllHistoryResultList.length,
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
reverse: true, reverse: !projectViewModel.isArabic,
), ),
], ],
), ),
@ -329,11 +332,18 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
), ),
Expanded( Expanded(
flex: 1, flex: 1,
child: MedicalProfileItem( child: InkWell(
title: TranslationBase.of(context).monthly, onTap: () {
imagePath: 'medical_history_icon.png', Navigator.push(context,
subTitle: TranslationBase.of(context) FadePage(page: MonthlyReportsPage()));
.monthlySubtitle, },
child: MedicalProfileItem(
title:
TranslationBase.of(context).monthly,
imagePath: 'medical_history_icon.png',
subTitle: TranslationBase.of(context)
.monthlySubtitle,
),
), ),
), ),
]), ]),
@ -342,10 +352,12 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
flex: 1, flex: 1,
child: InkWell( child: InkWell(
//TODO //TODO
// onTap: () { onTap: () {
// Navigator.push( Navigator.push(
// context, FadePage(page: DoctorHomePage())); context,
// }, FadePage(
page: PatientSickLeavePage()));
},
child: MedicalProfileItem( child: MedicalProfileItem(
title: TranslationBase.of(context).sick, title: TranslationBase.of(context).sick,
imagePath: 'insurance_card_icon.png', imagePath: 'insurance_card_icon.png',
@ -357,10 +369,10 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
Expanded( Expanded(
flex: 1, flex: 1,
child: InkWell( child: InkWell(
// onTap: () { onTap: () {
// Navigator.push( Navigator.push(context,
// context, FadePage(page: InsuranceApproval())); FadePage(page: MyBalancePage()));
// }, },
child: MedicalProfileItem( child: MedicalProfileItem(
title: title:
TranslationBase.of(context).myBalance, TranslationBase.of(context).myBalance,

@ -0,0 +1,51 @@
import 'package:diplomaticquarterapp/core/viewModels/medical/patient_sick_leave_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/medical/doctor_card.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
class PatientSickLeavePage extends StatefulWidget {
@override
_PatientSickLeavePageState createState() => _PatientSickLeavePageState();
}
class _PatientSickLeavePageState extends State<PatientSickLeavePage> {
@override
Widget build(BuildContext context) {
return BaseView<PatientSickLeaveViewMode>(
onModelReady: (model) => model.getSickLeave(),
builder: (_, model, w) => AppScaffold(
isShowAppBar: true,
appBarTitle: 'Sick Leave',
baseViewModel: model,
body: Container(
margin: EdgeInsets.all(12),
child: ListView.builder(
itemCount: model.sickLeaveList.length,
itemBuilder: (context, index) => DoctorCard(
name: model.sickLeaveList[index].doctorName,
date: DateUtil.getMonthDayYearDateFormatted(
model.sickLeaveList[index].requestDate),
profileUrl: model.sickLeaveList[index].doctorImageURL,
rat: model.sickLeaveList[index].actualDoctorRate.toDouble(),
subName: model.sickLeaveList[index].projectName,
isInOutPatientDescription:
model.sickLeaveList[index].isInOutPatientDescription,
onEmailTap: () {
model.sendSickLeaveEmail(
message: TranslationBase.of(context).emailSentSuccessfully,
requestNo: model.sickLeaveList[index].requestNo,
doctorName: model.sickLeaveList[index].doctorName,
projectName: model.sickLeaveList[index].projectName,
setupID: model.sickLeaveList[index].setupID,
projectID: model.sickLeaveList[index].projectID);
},
),
),
),
),
);
}
}

@ -0,0 +1,167 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/reports_monthly_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/reports/user_agreement_page.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/input/custom_switch.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class MonthlyReportsPage extends StatefulWidget {
@override
_MonthlyReportsPageState createState() => _MonthlyReportsPageState();
}
class _MonthlyReportsPageState extends State<MonthlyReportsPage> {
bool isAgree = false;
bool isSummary = false;
@override
Widget build(BuildContext context) {
return BaseView<ReportsMonthlyViewModel>(
builder: (_, model, w) => AppScaffold(
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).monthlyReports,
body: SingleChildScrollView(
child: Container(
padding: EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.all(9),
height: 55,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(8)),
shape: BoxShape.rectangle,
border: Border.all(color: Colors.grey)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(
TranslationBase.of(context).patientHealthSummaryReport,
bold: true,
),
CustomSwitch(
value: isSummary,
activeColor: Colors.red,
inactiveColor: Colors.grey,
onChanged: () async {
setState(() {
isSummary = !isSummary;
});
},
)
],
),
),
SizedBox(
height: 15,
),
Container(
margin: EdgeInsets.all(8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(
model.user.emailAddress,
bold: true,
),
],
),
),
Divider(
height: 10.4,
thickness: 1.0,
),
SizedBox(
height: 15,
),
Container(
margin: EdgeInsets.all(8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Texts(TranslationBase.of(context)
.toViewTheTermsAndConditions),
),
InkWell(
onTap: () {
Navigator.push(
context,
FadePage(
page: UserAgreementContent(),
),
);
},
child: Texts(
TranslationBase.of(context).clickHere,
color: Colors.blue,
),
)
],
),
),
SizedBox(
height: 5,
),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Checkbox(
value: isAgree,
onChanged: (value) {
setState(() {
isAgree = !isAgree;
});
},
activeColor: Colors.red,
),
Texts(TranslationBase.of(context)
.iAgreeToTheTermsAndConditions),
],
),
Container(
margin: EdgeInsets.all(8),
width: double.infinity,
child: SecondaryButton(
textColor: Colors.white,
label: TranslationBase.of(context).save,
disabled: !isAgree,
loading: model.state == ViewState.BusyLocal,
onTap: () {
model.updatePatientHealthSummaryReport(
message: TranslationBase.of(context)
.updateSuccessfully,
isSummary: isSummary);
},
),
),
Padding(
padding: const EdgeInsets.all(5.0),
child: Texts(
TranslationBase.of(context)
.iAgreeToTheTermsAndConditionsSubtitle,
fontWeight: FontWeight.normal,
),
),
SizedBox(
height: 12,
),
Center(child: Image.asset('assets/images/report.jpg'))
],
),
),
),
),
);
}
}

@ -0,0 +1,25 @@
import 'package:diplomaticquarterapp/core/viewModels/medical/reports_monthly_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_html/flutter_html.dart';
class UserAgreementContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BaseView<ReportsMonthlyViewModel>(
onModelReady: (model) => model.getUserTermsAndConditions(),
builder: (_, model, w) => AppScaffold(
isShowAppBar: true,
baseViewModel: model,
appBarTitle: TranslationBase.of(context).userAgreement,
body: SingleChildScrollView(
child: Html(
data: model.userAgreementContent,
),
),
),
);
}
}

@ -0,0 +1,151 @@
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/medical/balance/advance_payment_page.dart';
import 'package:diplomaticquarterapp/pages/medical/balance/my_balance_page.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';
class PaymentService extends StatelessWidget {
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold(
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).paymentService,
body: SingleChildScrollView(
child: Container(
margin: EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: InkWell(
onTap: () => Navigator.push(
context, FadePage(page: AdvancePaymentPage())),
child: Container(
margin: EdgeInsets.all(5.0),
padding: EdgeInsets.all(9),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.0),
shape: BoxShape.rectangle),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts(
TranslationBase.of(context).payment,
color: Hexcolor('#B61422'),
bold: true,
),
Texts(
TranslationBase.of(context).paymentOnline,
fontSize: 14,
fontWeight: FontWeight.normal,
),
Image.asset(
'assets/images/al-habib_online_payment_service_icon.png',
fit: BoxFit.fill,
height: 55,
width: double.infinity,
),
],
),
),
),
),
Expanded(
child: Container(
margin: EdgeInsets.all(5.0),
padding: EdgeInsets.all(9),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.0),
shape: BoxShape.rectangle),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts(
TranslationBase.of(context).onlineCheckIn,
color: Hexcolor('#B61422'),
bold: true,
),
Texts(
TranslationBase.of(context).appointment,
fontSize: 14,
fontWeight: FontWeight.normal,
),
Align(
alignment: projectViewModel.isArabic
? Alignment.centerRight
: Alignment.centerLeft,
child: Image.asset(
'assets/images/al-habib_online_payment_service_icon.png',
height: 55,
),
),
],
),
),
)
],
),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: InkWell(
onTap: () => Navigator.push(
context, FadePage(page: MyBalancePage())),
child: Container(
margin: EdgeInsets.all(5.0),
padding: EdgeInsets.all(9),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.0),
shape: BoxShape.rectangle),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts(
'My Balances',
color: Hexcolor('#B61422'),
bold: true,
),
Texts(
TranslationBase.of(context).payment,
fontSize: 14,
fontWeight: FontWeight.normal,
),
Align(
alignment: projectViewModel.isArabic
? Alignment.centerRight
: Alignment.centerLeft,
child: Image.asset(
'assets/images/al-habib_online_payment_service_icon.png',
height: 55,
),
),
],
),
),
),
),
Expanded(
child: Container(),
)
],
),
],
),
),
),
);
}
}

@ -0,0 +1,78 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:flutter/cupertino.dart';
import 'package:provider/provider.dart';
import '../base/base_view.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/core/viewModels/vaccine_view_model.dart';
import 'package:diplomaticquarterapp/widgets/others/rounded_container.dart';
import 'package:popup_box/popup_box.dart';
class MyVaccinesItemPage extends StatefulWidget {
@override
_MyVaccinesItemPageState createState() => _MyVaccinesItemPageState();
}
class _MyVaccinesItemPageState extends State<MyVaccinesItemPage> {
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<VaccineViewModel>(
onModelReady: (model) => model.getMyVaccinationItem(),
builder: (BuildContext context, VaccineViewModel model, Widget child) =>
AppScaffold(
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).myVaccinesAvailability,
baseViewModel: model,
body: Container(
margin: EdgeInsets.only(
left: SizeConfig.screenWidth * 0.004,
right: SizeConfig.screenWidth * 0.004,
top: SizeConfig.screenWidth * 0.04,
),
child: ListView.builder(
itemCount: model.vaccinationItemList.length,
itemBuilder: (context, index) => InkWell(
onTap: () async {
await model.getMyVaccinationOnHand(
pItemCode: model.vaccinationItemList[index].iTEMCODE);
if (model.hasError) {
AppToast.showErrorToast(message: model.error);
} else {
//TODO show dialog
}
},
child: Container(
margin: EdgeInsets.all(5),
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(7),
color: Colors.white,
),
child: Row(
children: [
Expanded(
child: Texts(
model.vaccinationItemList[index].dESCRIPTION)),
Icon(projectViewModel.isArabic
? Icons.arrow_forward_ios
: Icons.arrow_back_ios)
],
),
),
),
),
),
),
);
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save