diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 540276ba..46442106 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -5,51 +5,59 @@
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
+
+
+
+
+
+
+
+
+
+ android:icon="@mipmap/ic_launcher"
+ android:label="diplomaticquarterapp">
+ android:name="io.flutter.embedding.android.NormalTheme"
+ android:resource="@style/NormalTheme" />
-
+ android:name="io.flutter.embedding.android.SplashScreenDrawable"
+ android:resource="@drawable/launch_background" />
+
+
+
+
+
-
-
+
+
-
-
-
-
-
+
-
-
+
+
+
diff --git a/ios/.gitignore b/ios/.gitignore
index e96ef602..ce2e85b9 100644
--- a/ios/.gitignore
+++ b/ios/.gitignore
@@ -30,3 +30,5 @@ Runner/GeneratedPluginRegistrant.*
!default.mode2v3
!default.pbxuser
!default.perspectivev3
+/Runner.xcworkspace/contents.xcworkspacedata
+/Runner.xcodeproj/project.pbxproj
diff --git a/lib/config/config.dart b/lib/config/config.dart
index 4bbe7bdb..7c9874d2 100644
--- a/lib/config/config.dart
+++ b/lib/config/config.dart
@@ -15,10 +15,25 @@ const GET_DOCTOR_RATING = '/Doctors.svc/REST/dr_GetAvgDoctorRating';
///Prescriptions
const PRESCRIPTIONS = '/Patients.svc/REST/GetPrescriptionApptList';
-const GET_PRESCRIPTIONS_ALL_ORDERS =
- '/Patients.svc/REST/PatientER_GetPatientAllPresOrders';
+const GET_PRESCRIPTIONS_ALL_ORDERS = '/Patients.svc/REST/PatientER_GetPatientAllPresOrders';
const GET_PRESCRIPTION_REPORT = '/Patients.svc/REST/INP_GetPrescriptionReport';
const SEND_PRESCRIPTION_EMAIL = '/Notifications.svc/REST/SendPrescriptionEmail';
+const GET_PRESCRIPTION_REPORT_ENH = '/Patients.svc/REST/GetPrescriptionReport_enh';
+
+///Lab Order
+const GET_Patient_LAB_ORDERS = '/Patients.svc/REST/GetPatientLabOrders';
+const GET_Patient_LAB_SPECIAL_RESULT = '/Patients.svc/REST/GetPatientLabSpecialResults';
+
+///
+const GET_PATIENT_ORDERS = '/Patients.svc/REST/GetPatientRadOrders';
+const GET_PATIENT_ORDERS_DETAILS = '/Patients.svc/REST/Rad_UpdatePatientRadOrdersToRead';
+const GET_RAD_IMAGE_URL = '/Patients.svc/Rest/GetRadImageURL';
+const SEND_RAD_REPORT_EMAIL = '/Notifications.svc/REST/SendRadReportEmail';
+
+
+///Feedback
+const SEND_FEEDBACK = '/COCWS.svc/REST/InsertCOCItemInSPList';
+const GET_STATUS_FOR_COCO = '/COCWS.svc/REST/GetStatusforCOC';
//const BASE_URL = 'https://hmgwebservices.com/'; // Production Environment
//const BASE_URL = 'https://uat.hmgwebservices.com/Services'; // UAT Environment
@@ -33,6 +48,14 @@ const CHANNEL = 3;
const GENERAL_ID = 'Cs2020@2016\$2958';
const IP_ADDRESS = '10.20.10.20';
const VERSION_ID = 5.5;
+const SETUP_ID = '91877';
+const LANGUAGE = 1;
+const PATIENT_OUT_SA = 0;
+const SESSION_ID = 'TMRhVmkGhOsvamErw';
+const IS_DENTAL_ALLOWED_BACKEND = false;
+const PATIENT_TYPE = 1;
+const PATIENT_TYPE_ID = 1;
+
var DeviceTypeID = Platform.isIOS ? 1 : 2;
const LANGUAGE_ID = 2;
const GET_PHARMCY_ITEMS = "/Lists.svc/REST/GetPharmcyItems_Region";
@@ -59,3 +82,5 @@ class AppGlobal {
return request;
}
}
+
+
diff --git a/lib/core/model/feedback/COC_items.dart b/lib/core/model/feedback/COC_items.dart
new file mode 100644
index 00000000..068c8bee
--- /dev/null
+++ b/lib/core/model/feedback/COC_items.dart
@@ -0,0 +1,120 @@
+class COCItem {
+ Null appointment;
+ String appointmentClinicName;
+ String appointmentDate;
+ String appointmentProjectName;
+ String cOCID;
+ String cOCTitle;
+ String channel;
+ dynamic clinic;
+ String clinicID;
+ String date;
+ dynamic detail;
+ dynamic doctor;
+ String doctorID;
+ String formType;
+ int formTypeID;
+ dynamic identificationNo;
+ int itemID;
+ dynamic mobileNo;
+ dynamic naturename;
+ dynamic patientID;
+ dynamic patientName;
+ dynamic project;
+ dynamic projectID;
+ String solution;
+ String status;
+ String statusAr;
+ dynamic statusEn;
+
+ COCItem(
+ {this.appointment,
+ this.appointmentClinicName,
+ this.appointmentDate,
+ this.appointmentProjectName,
+ this.cOCID,
+ this.cOCTitle,
+ this.channel,
+ this.clinic,
+ this.clinicID,
+ this.date,
+ this.detail,
+ this.doctor,
+ this.doctorID,
+ this.formType,
+ this.formTypeID,
+ this.identificationNo,
+ this.itemID,
+ this.mobileNo,
+ this.naturename,
+ this.patientID,
+ this.patientName,
+ this.project,
+ this.projectID,
+ this.solution,
+ this.status,
+ this.statusAr,
+ this.statusEn});
+
+ COCItem.fromJson(Map json) {
+ appointment = json['Appointment'];
+ appointmentClinicName = json['AppointmentClinicName'];
+ appointmentDate = json['AppointmentDate'];
+ appointmentProjectName = json['AppointmentProjectName'];
+ cOCID = json['COCID'];
+ cOCTitle = json['COCTitle'];
+ channel = json['Channel'];
+ clinic = json['Clinic'];
+ clinicID = json['ClinicID'];
+ date = json['Date'];
+ detail = json['Detail'];
+ doctor = json['Doctor'];
+ doctorID = json['DoctorID'];
+ formType = json['FormType'];
+ formTypeID = json['FormTypeID'];
+ identificationNo = json['IdentificationNo'];
+ itemID = json['ItemID'];
+ mobileNo = json['MobileNo'];
+ naturename = json['Naturename'];
+ patientID = json['PatientID'];
+ patientName = json['PatientName'];
+ project = json['Project'];
+ projectID = json['ProjectID'];
+ solution = json['Solution'];
+ status = json['Status'];
+ statusAr = json['StatusAr'];
+ statusEn = json['StatusEn'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['Appointment'] = this.appointment;
+ data['AppointmentClinicName'] = this.appointmentClinicName;
+ data['AppointmentDate'] = this.appointmentDate;
+ data['AppointmentProjectName'] = this.appointmentProjectName;
+ data['COCID'] = this.cOCID;
+ data['COCTitle'] = this.cOCTitle;
+ data['Channel'] = this.channel;
+ data['Clinic'] = this.clinic;
+ data['ClinicID'] = this.clinicID;
+ data['Date'] = this.date;
+ data['Detail'] = this.detail;
+ data['Doctor'] = this.doctor;
+ data['DoctorID'] = this.doctorID;
+ data['FormType'] = this.formType;
+ data['FormTypeID'] = this.formTypeID;
+ data['IdentificationNo'] = this.identificationNo;
+ data['ItemID'] = this.itemID;
+ data['MobileNo'] = this.mobileNo;
+ data['Naturename'] = this.naturename;
+ data['PatientID'] = this.patientID;
+ data['PatientName'] = this.patientName;
+ data['Project'] = this.project;
+ data['ProjectID'] = this.projectID;
+ data['Solution'] = this.solution;
+ data['Status'] = this.status;
+ data['StatusAr'] = this.statusAr;
+ data['StatusEn'] = this.statusEn;
+ return data;
+ }
+}
diff --git a/lib/core/model/feedback/request_insert_coc_item.dart b/lib/core/model/feedback/request_insert_coc_item.dart
new file mode 100644
index 00000000..e8b6fce5
--- /dev/null
+++ b/lib/core/model/feedback/request_insert_coc_item.dart
@@ -0,0 +1,132 @@
+class RequestInsertCOCItem {
+ bool isUserLoggedIn;
+ String mobileNo;
+ int identificationNo;
+ int patientID;
+ int patientOutSA;
+ int patientTypeID;
+ String tokenID;
+ String patientName;
+ int projectID;
+ String fileName;
+ String attachment;
+ String uILanguage;
+ String browserInfo;
+ String cOCTypeName;
+ String formTypeID;
+ String details;
+ String deviceInfo;
+ String deviceType;
+ String title;
+ String resolution;
+ double versionID;
+ int channel;
+ int languageID;
+ String iPAdress;
+ String generalid;
+ String sessionID;
+ bool isDentalAllowedBackend;
+ int deviceTypeID;
+ int patientType;
+ double appVersion;
+
+ RequestInsertCOCItem(
+ {this.isUserLoggedIn,
+ this.mobileNo,
+ this.identificationNo,
+ this.patientID,
+ this.patientOutSA,
+ this.patientTypeID,
+ this.tokenID,
+ this.patientName,
+ this.projectID,
+ this.fileName,
+ this.attachment,
+ this.uILanguage,
+ this.browserInfo,
+ this.cOCTypeName,
+ this.formTypeID,
+ this.details,
+ this.deviceInfo,
+ this.deviceType,
+ this.title,
+ this.resolution,
+ this.versionID,
+ this.channel,
+ this.languageID,
+ this.iPAdress,
+ this.generalid,
+ this.sessionID,
+ this.isDentalAllowedBackend,
+ this.deviceTypeID,
+ this.patientType,
+ this.appVersion});
+
+ RequestInsertCOCItem.fromJson(Map json) {
+ isUserLoggedIn = json['IsUserLoggedIn'];
+ mobileNo = json['MobileNo'];
+ identificationNo = json['IdentificationNo'];
+ patientID = json['PatientID'];
+ patientOutSA = json['PatientOutSA'];
+ patientTypeID = json['PatientTypeID'];
+ tokenID = json['TokenID'];
+ patientName = json['PatientName'];
+ projectID = json['ProjectID'];
+ fileName = json['FileName'];
+ attachment = json['Attachment'];
+ uILanguage = json['UILanguage'];
+ browserInfo = json['BrowserInfo'];
+ cOCTypeName = json['COCTypeName'];
+ formTypeID = json['FormTypeID'];
+ details = json['Details'];
+ deviceInfo = json['DeviceInfo'];
+ deviceType = json['DeviceType'];
+ title = json['Title'];
+ resolution = json['Resolution'];
+ versionID = json['VersionID'];
+ channel = json['Channel'];
+ languageID = json['LanguageID'];
+ iPAdress = json['IPAdress'];
+ generalid = json['generalid'];
+ sessionID = json['SessionID'];
+ isDentalAllowedBackend = json['isDentalAllowedBackend'];
+ deviceTypeID = json['DeviceTypeID'];
+ patientType = json['PatientType'];
+ appVersion = json['AppVersion'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['IsUserLoggedIn'] = this.isUserLoggedIn;
+ data['MobileNo'] = this.mobileNo;
+ data['IdentificationNo'] = this.identificationNo;
+ data['PatientID'] = this.patientID;
+ data['PatientOutSA'] = this.patientOutSA;
+ data['PatientTypeID'] = this.patientTypeID;
+ data['TokenID'] = this.tokenID;
+ data['PatientName'] = this.patientName;
+ data['ProjectID'] = this.projectID;
+ data['FileName'] = this.fileName;
+ data['Attachment'] = this.attachment;
+ data['UILanguage'] = this.uILanguage;
+ data['BrowserInfo'] = this.browserInfo;
+ data['COCTypeName'] = this.cOCTypeName;
+ data['FormTypeID'] = this.formTypeID;
+ data['Details'] = this.details;
+ data['DeviceInfo'] = this.deviceInfo;
+ data['DeviceType'] = this.deviceType;
+ data['Title'] = this.title;
+ data['Resolution'] = this.resolution;
+ data['VersionID'] = this.versionID;
+ data['Channel'] = this.channel;
+ data['LanguageID'] = this.languageID;
+ data['IPAdress'] = this.iPAdress;
+ data['generalid'] = this.generalid;
+ data['SessionID'] = this.sessionID;
+ data['isDentalAllowedBackend'] = this.isDentalAllowedBackend;
+ data['DeviceTypeID'] = this.deviceTypeID;
+ data['PatientType'] = this.patientType;
+ data['AppVersion'] = this.appVersion;
+ return data;
+ }
+}
diff --git a/lib/core/model/labs/patient_lab_orders.dart b/lib/core/model/labs/patient_lab_orders.dart
new file mode 100644
index 00000000..26daaff0
--- /dev/null
+++ b/lib/core/model/labs/patient_lab_orders.dart
@@ -0,0 +1,156 @@
+import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
+
+class PatientLabOrders {
+ int actualDoctorRate;
+ String clinicDescription;
+ String clinicDescriptionEnglish;
+ Null clinicDescriptionN;
+ int clinicID;
+ int doctorID;
+ String doctorImageURL;
+ String doctorName;
+ String doctorNameEnglish;
+ Null doctorNameN;
+ int doctorRate;
+ String doctorTitle;
+ int gender;
+ String genderDescription;
+ String invoiceNo;
+ bool isActiveDoctorProfile;
+ bool isDoctorAllowVedioCall;
+ bool isExecludeDoctor;
+ bool isInOutPatient;
+ String isInOutPatientDescription;
+ String isInOutPatientDescriptionN;
+ bool isRead;
+ String nationalityFlagURL;
+ int noOfPatientsRate;
+ DateTime orderDate;
+ String orderNo;
+ String patientID;
+ String projectID;
+ String projectName;
+ Null projectNameN;
+ String qR;
+ String setupID;
+ List speciality;
+
+ PatientLabOrders(
+ {this.actualDoctorRate,
+ this.clinicDescription,
+ this.clinicDescriptionEnglish,
+ this.clinicDescriptionN,
+ this.clinicID,
+ this.doctorID,
+ this.doctorImageURL,
+ this.doctorName,
+ this.doctorNameEnglish,
+ this.doctorNameN,
+ this.doctorRate,
+ this.doctorTitle,
+ this.gender,
+ this.genderDescription,
+ this.invoiceNo,
+ this.isActiveDoctorProfile,
+ this.isDoctorAllowVedioCall,
+ this.isExecludeDoctor,
+ this.isInOutPatient,
+ this.isInOutPatientDescription,
+ this.isInOutPatientDescriptionN,
+ this.isRead,
+ this.nationalityFlagURL,
+ this.noOfPatientsRate,
+ this.orderDate,
+ this.orderNo,
+ this.patientID,
+ this.projectID,
+ this.projectName,
+ this.projectNameN,
+ this.qR,
+ this.setupID,
+ this.speciality});
+
+ PatientLabOrders.fromJson(Map json) {
+ actualDoctorRate = json['ActualDoctorRate'];
+ clinicDescription = json['ClinicDescription'];
+ clinicDescriptionEnglish = json['ClinicDescriptionEnglish'];
+ clinicDescriptionN = json['ClinicDescriptionN'];
+ clinicID = json['ClinicID'];
+ doctorID = json['DoctorID'];
+ doctorImageURL = json['DoctorImageURL'];
+ doctorName = json['DoctorName'];
+ doctorNameEnglish = json['DoctorNameEnglish'];
+ doctorNameN = json['DoctorNameN'];
+ doctorRate = json['DoctorRate'];
+ doctorTitle = json['DoctorTitle'];
+ gender = json['Gender'];
+ genderDescription = json['GenderDescription'];
+ invoiceNo = json['InvoiceNo'];
+ isActiveDoctorProfile = json['IsActiveDoctorProfile'];
+ isDoctorAllowVedioCall = json['IsDoctorAllowVedioCall'];
+ isExecludeDoctor = json['IsExecludeDoctor'];
+ isInOutPatient = json['IsInOutPatient'];
+ isInOutPatientDescription = json['IsInOutPatientDescription'];
+ isInOutPatientDescriptionN = json['IsInOutPatientDescriptionN'];
+ isRead = json['IsRead'];
+ nationalityFlagURL = json['NationalityFlagURL'];
+ noOfPatientsRate = json['NoOfPatientsRate'];
+ orderDate = DateUtil.convertStringToDate(json['OrderDate']);
+ orderNo = json['OrderNo'];
+ patientID = json['PatientID'];
+ projectID = json['ProjectID'];
+ projectName = json['ProjectName'];
+ projectNameN = json['ProjectNameN'];
+ qR = json['QR'];
+ setupID = json['SetupID'];
+ // speciality = json['Speciality'].cast();
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['ActualDoctorRate'] = this.actualDoctorRate;
+ data['ClinicDescription'] = this.clinicDescription;
+ data['ClinicDescriptionEnglish'] = this.clinicDescriptionEnglish;
+ data['ClinicDescriptionN'] = this.clinicDescriptionN;
+ data['ClinicID'] = this.clinicID;
+ data['DoctorID'] = this.doctorID;
+ data['DoctorImageURL'] = this.doctorImageURL;
+ data['DoctorName'] = this.doctorName;
+ data['DoctorNameEnglish'] = this.doctorNameEnglish;
+ data['DoctorNameN'] = this.doctorNameN;
+ data['DoctorRate'] = this.doctorRate;
+ data['DoctorTitle'] = this.doctorTitle;
+ data['Gender'] = this.gender;
+ data['GenderDescription'] = this.genderDescription;
+ data['InvoiceNo'] = this.invoiceNo;
+ 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['IsRead'] = this.isRead;
+ data['NationalityFlagURL'] = this.nationalityFlagURL;
+ data['NoOfPatientsRate'] = this.noOfPatientsRate;
+ data['OrderDate'] = this.orderDate;
+ data['OrderNo'] = this.orderNo;
+ data['PatientID'] = this.patientID;
+ data['ProjectID'] = this.projectID;
+ data['ProjectName'] = this.projectName;
+ data['ProjectNameN'] = this.projectNameN;
+ data['QR'] = this.qR;
+ data['SetupID'] = this.setupID;
+ data['Speciality'] = this.speciality;
+ return data;
+ }
+}
+
+class PatientLabOrdersList {
+ String filterName = "";
+ List patientLabOrdersList = List();
+
+ PatientLabOrdersList(
+ {this.filterName, PatientLabOrders patientDoctorAppointment}) {
+ patientLabOrdersList.add(patientDoctorAppointment);
+ }
+}
diff --git a/lib/core/model/labs/patient_lab_special_result.dart b/lib/core/model/labs/patient_lab_special_result.dart
new file mode 100644
index 00000000..2fbcb832
--- /dev/null
+++ b/lib/core/model/labs/patient_lab_special_result.dart
@@ -0,0 +1,32 @@
+class PatientLabSpecialResult {
+ String invoiceNo;
+ String moduleID;
+ String resultData;
+ String resultDataHTML;
+ Null resultDataTxt;
+
+ PatientLabSpecialResult(
+ {this.invoiceNo,
+ this.moduleID,
+ this.resultData,
+ this.resultDataHTML,
+ this.resultDataTxt});
+
+ PatientLabSpecialResult.fromJson(Map json) {
+ invoiceNo = json['InvoiceNo'];
+ moduleID = json['ModuleID'];
+ resultData = json['ResultData'];
+ resultDataHTML = json['ResultDataHTML'];
+ resultDataTxt = json['ResultDataTxt'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['InvoiceNo'] = this.invoiceNo;
+ data['ModuleID'] = this.moduleID;
+ data['ResultData'] = this.resultData;
+ data['ResultDataHTML'] = this.resultDataHTML;
+ data['ResultDataTxt'] = this.resultDataTxt;
+ return data;
+ }
+}
diff --git a/lib/core/model/labs/request_patient_lab_orders.dart b/lib/core/model/labs/request_patient_lab_orders.dart
new file mode 100644
index 00000000..ce9263ef
--- /dev/null
+++ b/lib/core/model/labs/request_patient_lab_orders.dart
@@ -0,0 +1,64 @@
+class RequestPatientLabOrders {
+ double versionID;
+ int channel;
+ int languageID;
+ String iPAdress;
+ String generalid;
+ int patientOutSA;
+ String sessionID;
+ bool isDentalAllowedBackend;
+ int deviceTypeID;
+ int patientID;
+ String tokenID;
+ int patientTypeID;
+ int patientType;
+
+ RequestPatientLabOrders(
+ {this.versionID,
+ this.channel,
+ this.languageID,
+ this.iPAdress,
+ this.generalid,
+ this.patientOutSA,
+ this.sessionID,
+ this.isDentalAllowedBackend,
+ this.deviceTypeID,
+ this.patientID,
+ this.tokenID,
+ this.patientTypeID,
+ this.patientType});
+
+ RequestPatientLabOrders.fromJson(Map json) {
+ versionID = json['VersionID'];
+ channel = json['Channel'];
+ languageID = json['LanguageID'];
+ iPAdress = json['IPAdress'];
+ generalid = json['generalid'];
+ patientOutSA = json['PatientOutSA'];
+ sessionID = json['SessionID'];
+ isDentalAllowedBackend = json['isDentalAllowedBackend'];
+ deviceTypeID = json['DeviceTypeID'];
+ patientID = json['PatientID'];
+ tokenID = json['TokenID'];
+ patientTypeID = json['PatientTypeID'];
+ patientType = json['PatientType'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ 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['TokenID'] = this.tokenID;
+ data['PatientTypeID'] = this.patientTypeID;
+ data['PatientType'] = this.patientType;
+ return data;
+ }
+}
diff --git a/lib/core/model/labs/request_patient_lab_special_result.dart b/lib/core/model/labs/request_patient_lab_special_result.dart
new file mode 100644
index 00000000..bdeb3930
--- /dev/null
+++ b/lib/core/model/labs/request_patient_lab_special_result.dart
@@ -0,0 +1,84 @@
+class RequestPatientLabSpecialResult {
+ String invoiceNo;
+ String orderNo;
+ String setupID;
+ String projectID;
+ int clinicID;
+ double versionID;
+ int channel;
+ int languageID;
+ String iPAdress;
+ String generalid;
+ int patientOutSA;
+ String sessionID;
+ bool isDentalAllowedBackend;
+ int deviceTypeID;
+ int patientID;
+ String tokenID;
+ int patientTypeID;
+ int patientType;
+
+ RequestPatientLabSpecialResult(
+ {this.invoiceNo,
+ this.orderNo,
+ this.setupID,
+ this.projectID,
+ this.clinicID,
+ this.versionID,
+ this.channel,
+ this.languageID,
+ this.iPAdress,
+ this.generalid,
+ this.patientOutSA,
+ this.sessionID,
+ this.isDentalAllowedBackend,
+ this.deviceTypeID,
+ this.patientID,
+ this.tokenID,
+ this.patientTypeID,
+ this.patientType});
+
+ RequestPatientLabSpecialResult.fromJson(Map json) {
+ invoiceNo = json['InvoiceNo'];
+ orderNo = json['OrderNo'];
+ setupID = json['SetupID'];
+ projectID = json['ProjectID'];
+ clinicID = json['ClinicID'];
+ versionID = json['VersionID'];
+ channel = json['Channel'];
+ languageID = json['LanguageID'];
+ iPAdress = json['IPAdress'];
+ generalid = json['generalid'];
+ patientOutSA = json['PatientOutSA'];
+ sessionID = json['SessionID'];
+ isDentalAllowedBackend = json['isDentalAllowedBackend'];
+ deviceTypeID = json['DeviceTypeID'];
+ patientID = json['PatientID'];
+ tokenID = json['TokenID'];
+ patientTypeID = json['PatientTypeID'];
+ patientType = json['PatientType'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['InvoiceNo'] = this.invoiceNo;
+ data['OrderNo'] = this.orderNo;
+ data['SetupID'] = this.setupID;
+ data['ProjectID'] = this.projectID;
+ data['ClinicID'] = this.clinicID;
+ 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['TokenID'] = this.tokenID;
+ data['PatientTypeID'] = this.patientTypeID;
+ data['PatientType'] = this.patientType;
+ return data;
+ }
+}
diff --git a/lib/core/model/labs/request_send_lab_report_email.dart b/lib/core/model/labs/request_send_lab_report_email.dart
new file mode 100644
index 00000000..118da906
--- /dev/null
+++ b/lib/core/model/labs/request_send_lab_report_email.dart
@@ -0,0 +1,112 @@
+class RequestSendLabReportEmail {
+ double versionID;
+ int channel;
+ int languageID;
+ String iPAdress;
+ String generalid;
+ int patientOutSA;
+ String sessionID;
+ bool isDentalAllowedBackend;
+ int deviceTypeID;
+ int patientID;
+ String tokenID;
+ int patientTypeID;
+ int patientType;
+ String to;
+ String dateofBirth;
+ String patientIditificationNum;
+ String patientMobileNumber;
+ String patientName;
+ String setupID;
+ String projectName;
+ String clinicName;
+ String doctorName;
+ String projectID;
+ String invoiceNo;
+ String orderDate;
+
+ RequestSendLabReportEmail(
+ {this.versionID,
+ this.channel,
+ this.languageID,
+ this.iPAdress,
+ this.generalid,
+ this.patientOutSA,
+ this.sessionID,
+ this.isDentalAllowedBackend,
+ this.deviceTypeID,
+ this.patientID,
+ this.tokenID,
+ this.patientTypeID,
+ this.patientType,
+ this.to,
+ this.dateofBirth,
+ this.patientIditificationNum,
+ this.patientMobileNumber,
+ this.patientName,
+ this.setupID,
+ this.projectName,
+ this.clinicName,
+ this.doctorName,
+ this.projectID,
+ this.invoiceNo,
+ this.orderDate});
+
+ RequestSendLabReportEmail.fromJson(Map json) {
+ versionID = json['VersionID'];
+ channel = json['Channel'];
+ languageID = json['LanguageID'];
+ iPAdress = json['IPAdress'];
+ generalid = json['generalid'];
+ patientOutSA = json['PatientOutSA'];
+ sessionID = json['SessionID'];
+ isDentalAllowedBackend = json['isDentalAllowedBackend'];
+ deviceTypeID = json['DeviceTypeID'];
+ patientID = json['PatientID'];
+ tokenID = json['TokenID'];
+ patientTypeID = json['PatientTypeID'];
+ patientType = json['PatientType'];
+ to = json['To'];
+ dateofBirth = json['DateofBirth'];
+ patientIditificationNum = json['PatientIditificationNum'];
+ patientMobileNumber = json['PatientMobileNumber'];
+ patientName = json['PatientName'];
+ setupID = json['SetupID'];
+ projectName = json['ProjectName'];
+ clinicName = json['ClinicName'];
+ doctorName = json['DoctorName'];
+ projectID = json['ProjectID'];
+ invoiceNo = json['InvoiceNo'];
+ orderDate = json['OrderDate'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ 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['TokenID'] = this.tokenID;
+ data['PatientTypeID'] = this.patientTypeID;
+ data['PatientType'] = this.patientType;
+ data['To'] = this.to;
+ data['DateofBirth'] = this.dateofBirth;
+ data['PatientIditificationNum'] = this.patientIditificationNum;
+ data['PatientMobileNumber'] = this.patientMobileNumber;
+ data['PatientName'] = this.patientName;
+ data['SetupID'] = this.setupID;
+ data['ProjectName'] = this.projectName;
+ data['ClinicName'] = this.clinicName;
+ data['DoctorName'] = this.doctorName;
+ data['ProjectID'] = this.projectID;
+ data['InvoiceNo'] = this.invoiceNo;
+ data['OrderDate'] = this.orderDate;
+ return data;
+ }
+}
diff --git a/lib/core/model/prescriptions/perscription_pharmacy.dart b/lib/core/model/prescriptions/perscription_pharmacy.dart
new file mode 100644
index 00000000..5180689f
--- /dev/null
+++ b/lib/core/model/prescriptions/perscription_pharmacy.dart
@@ -0,0 +1,108 @@
+class PharmacyPrescriptions {
+ String expiryDate;
+ double sellingPrice;
+ int quantity;
+ int itemID;
+ int locationID;
+ int projectID;
+ String setupID;
+ String locationDescription;
+ Null locationDescriptionN;
+ String itemDescription;
+ Null itemDescriptionN;
+ String alias;
+ int locationTypeID;
+ int barcode;
+ Null companybarcode;
+ int cityID;
+ String cityName;
+ int distanceInKilometers;
+ String latitude;
+ int locationType;
+ String longitude;
+ String phoneNumber;
+ String projectImageURL;
+ Null sortOrder;
+
+ PharmacyPrescriptions(
+ {this.expiryDate,
+ this.sellingPrice,
+ this.quantity,
+ this.itemID,
+ this.locationID,
+ this.projectID,
+ this.setupID,
+ this.locationDescription,
+ this.locationDescriptionN,
+ this.itemDescription,
+ this.itemDescriptionN,
+ this.alias,
+ this.locationTypeID,
+ this.barcode,
+ this.companybarcode,
+ this.cityID,
+ this.cityName,
+ this.distanceInKilometers,
+ this.latitude,
+ this.locationType,
+ this.longitude,
+ this.phoneNumber,
+ this.projectImageURL,
+ this.sortOrder});
+
+ PharmacyPrescriptions.fromJson(Map json) {
+ expiryDate = json['ExpiryDate'];
+ sellingPrice = json['SellingPrice'];
+ quantity = json['Quantity'];
+ itemID = json['ItemID'];
+ locationID = json['LocationID'];
+ projectID = json['ProjectID'];
+ setupID = json['SetupID'];
+ locationDescription = json['LocationDescription'];
+ locationDescriptionN = json['LocationDescriptionN'];
+ itemDescription = json['ItemDescription'];
+ itemDescriptionN = json['ItemDescriptionN'];
+ alias = json['Alias'];
+ locationTypeID = json['LocationTypeID'];
+ barcode = json['Barcode'];
+ companybarcode = json['Companybarcode'];
+ cityID = json['CityID'];
+ cityName = json['CityName'];
+ distanceInKilometers = json['DistanceInKilometers'];
+ latitude = json['Latitude'];
+ locationType = json['LocationType'];
+ longitude = json['Longitude'];
+ phoneNumber = json['PhoneNumber'];
+ projectImageURL = json['ProjectImageURL'];
+ sortOrder = json['SortOrder'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['ExpiryDate'] = this.expiryDate;
+ data['SellingPrice'] = this.sellingPrice;
+ data['Quantity'] = this.quantity;
+ data['ItemID'] = this.itemID;
+ data['LocationID'] = this.locationID;
+ data['ProjectID'] = this.projectID;
+ data['SetupID'] = this.setupID;
+ data['LocationDescription'] = this.locationDescription;
+ data['LocationDescriptionN'] = this.locationDescriptionN;
+ data['ItemDescription'] = this.itemDescription;
+ data['ItemDescriptionN'] = this.itemDescriptionN;
+ data['Alias'] = this.alias;
+ data['LocationTypeID'] = this.locationTypeID;
+ data['Barcode'] = this.barcode;
+ data['Companybarcode'] = this.companybarcode;
+ data['CityID'] = this.cityID;
+ data['CityName'] = this.cityName;
+ data['DistanceInKilometers'] = this.distanceInKilometers;
+ data['Latitude'] = this.latitude;
+ data['LocationType'] = this.locationType;
+ data['Longitude'] = this.longitude;
+ data['PhoneNumber'] = this.phoneNumber;
+ data['ProjectImageURL'] = this.projectImageURL;
+ data['SortOrder'] = this.sortOrder;
+ return data;
+ }
+}
diff --git a/lib/core/model/prescriptions/prescription_report_enh.dart b/lib/core/model/prescriptions/prescription_report_enh.dart
new file mode 100644
index 00000000..203eaaff
--- /dev/null
+++ b/lib/core/model/prescriptions/prescription_report_enh.dart
@@ -0,0 +1,144 @@
+class PrescriptionReportEnh {
+ String address;
+ int appointmentNo;
+ String clinic;
+ Null companyName;
+ int days;
+ String doctorName;
+ int doseDailyQuantity;
+ String frequency;
+ int frequencyNumber;
+ Null image;
+ Null imageExtension;
+ String imageSRCUrl;
+ Null imageString;
+ String imageThumbUrl;
+ String isCovered;
+ String itemDescription;
+ int itemID;
+ String orderDate;
+ int patientID;
+ String patientName;
+ String phoneOffice1;
+ Null prescriptionQR;
+ int prescriptionTimes;
+ Null productImage;
+ Null productImageBase64;
+ String productImageString;
+ int projectID;
+ String projectName;
+ String remarks;
+ String route;
+ String sKU;
+ int scaleOffset;
+ String startDate;
+
+ PrescriptionReportEnh(
+ {this.address,
+ this.appointmentNo,
+ this.clinic,
+ this.companyName,
+ this.days,
+ this.doctorName,
+ this.doseDailyQuantity,
+ this.frequency,
+ this.frequencyNumber,
+ this.image,
+ this.imageExtension,
+ this.imageSRCUrl,
+ this.imageString,
+ this.imageThumbUrl,
+ this.isCovered,
+ this.itemDescription,
+ this.itemID,
+ this.orderDate,
+ this.patientID,
+ this.patientName,
+ this.phoneOffice1,
+ this.prescriptionQR,
+ this.prescriptionTimes,
+ this.productImage,
+ this.productImageBase64,
+ this.productImageString,
+ this.projectID,
+ this.projectName,
+ this.remarks,
+ this.route,
+ this.sKU,
+ this.scaleOffset,
+ this.startDate});
+
+ PrescriptionReportEnh.fromJson(Map json) {
+ address = json['Address'];
+ appointmentNo = json['AppointmentNo'];
+ clinic = json['Clinic'];
+ companyName = json['CompanyName'];
+ days = json['Days'];
+ doctorName = json['DoctorName'];
+ doseDailyQuantity = json['DoseDailyQuantity'];
+ frequency = json['Frequency'];
+ frequencyNumber = json['FrequencyNumber'];
+ image = json['Image'];
+ imageExtension = json['ImageExtension'];
+ imageSRCUrl = json['ImageSRCUrl'];
+ imageString = json['ImageString'];
+ imageThumbUrl = json['ImageThumbUrl'];
+ isCovered = json['IsCovered'];
+ itemDescription = json['ItemDescription'];
+ itemID = json['ItemID'];
+ orderDate = json['OrderDate'];
+ patientID = json['PatientID'];
+ patientName = json['PatientName'];
+ phoneOffice1 = json['PhoneOffice1'];
+ prescriptionQR = json['PrescriptionQR'];
+ prescriptionTimes = json['PrescriptionTimes'];
+ productImage = json['ProductImage'];
+ productImageBase64 = json['ProductImageBase64'];
+ productImageString = json['ProductImageString'];
+ projectID = json['ProjectID'];
+ projectName = json['ProjectName'];
+ remarks = json['Remarks'];
+ route = json['Route'];
+ sKU = json['SKU'];
+ scaleOffset = json['ScaleOffset'];
+ startDate = json['StartDate'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['Address'] = this.address;
+ data['AppointmentNo'] = this.appointmentNo;
+ data['Clinic'] = this.clinic;
+ data['CompanyName'] = this.companyName;
+ data['Days'] = this.days;
+ data['DoctorName'] = this.doctorName;
+ data['DoseDailyQuantity'] = this.doseDailyQuantity;
+ data['Frequency'] = this.frequency;
+ data['FrequencyNumber'] = this.frequencyNumber;
+ data['Image'] = this.image;
+ data['ImageExtension'] = this.imageExtension;
+ data['ImageSRCUrl'] = this.imageSRCUrl;
+ data['ImageString'] = this.imageString;
+ data['ImageThumbUrl'] = this.imageThumbUrl;
+ data['IsCovered'] = this.isCovered;
+ data['ItemDescription'] = this.itemDescription;
+ data['ItemID'] = this.itemID;
+ data['OrderDate'] = this.orderDate;
+ data['PatientID'] = this.patientID;
+ data['PatientName'] = this.patientName;
+ data['PhoneOffice1'] = this.phoneOffice1;
+ data['PrescriptionQR'] = this.prescriptionQR;
+ data['PrescriptionTimes'] = this.prescriptionTimes;
+ data['ProductImage'] = this.productImage;
+ data['ProductImageBase64'] = this.productImageBase64;
+ data['ProductImageString'] = this.productImageString;
+ data['ProjectID'] = this.projectID;
+ data['ProjectName'] = this.projectName;
+ data['Remarks'] = this.remarks;
+ data['Route'] = this.route;
+ data['SKU'] = this.sKU;
+ data['ScaleOffset'] = this.scaleOffset;
+ data['StartDate'] = this.startDate;
+ return data;
+ }
+}
diff --git a/lib/core/model/prescriptions/request_get_list_pharmacy_for_prescriptions.dart b/lib/core/model/prescriptions/request_get_list_pharmacy_for_prescriptions.dart
new file mode 100644
index 00000000..739bb838
--- /dev/null
+++ b/lib/core/model/prescriptions/request_get_list_pharmacy_for_prescriptions.dart
@@ -0,0 +1,60 @@
+class RequestGetListPharmacyForPrescriptions {
+ int latitude;
+ int longitude;
+ double versionID;
+ int channel;
+ int languageID;
+ String iPAdress;
+ String generalid;
+ int patientOutSA;
+ String sessionID;
+ bool isDentalAllowedBackend;
+ int deviceTypeID;
+ int itemID;
+
+ RequestGetListPharmacyForPrescriptions(
+ {this.latitude,
+ this.longitude,
+ this.versionID,
+ this.channel,
+ this.languageID,
+ this.iPAdress,
+ this.generalid,
+ this.patientOutSA,
+ this.sessionID,
+ this.isDentalAllowedBackend,
+ this.deviceTypeID,
+ this.itemID});
+
+ RequestGetListPharmacyForPrescriptions.fromJson(Map json) {
+ latitude = json['Latitude'];
+ longitude = json['Longitude'];
+ versionID = json['VersionID'];
+ channel = json['Channel'];
+ languageID = json['LanguageID'];
+ iPAdress = json['IPAdress'];
+ generalid = json['generalid'];
+ patientOutSA = json['PatientOutSA'];
+ sessionID = json['SessionID'];
+ isDentalAllowedBackend = json['isDentalAllowedBackend'];
+ deviceTypeID = json['DeviceTypeID'];
+ itemID = json['ItemID'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['Latitude'] = this.latitude;
+ data['Longitude'] = this.longitude;
+ 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['ItemID'] = this.itemID;
+ return data;
+ }
+}
diff --git a/lib/core/model/prescriptions/request_prescription_report_enh.dart b/lib/core/model/prescriptions/request_prescription_report_enh.dart
new file mode 100644
index 00000000..42b89c15
--- /dev/null
+++ b/lib/core/model/prescriptions/request_prescription_report_enh.dart
@@ -0,0 +1,84 @@
+class RequestPrescriptionReportEnh {
+ double versionID;
+ int channel;
+ int languageID;
+ String iPAdress;
+ String generalid;
+ int patientOutSA;
+ String sessionID;
+ bool isDentalAllowedBackend;
+ int deviceTypeID;
+ int patientID;
+ String tokenID;
+ int patientTypeID;
+ int patientType;
+ int appointmentNo;
+ String setupID;
+ int episodeID;
+ int clinicID;
+ int projectID;
+
+ RequestPrescriptionReportEnh(
+ {this.versionID,
+ this.channel,
+ this.languageID,
+ this.iPAdress,
+ this.generalid,
+ this.patientOutSA,
+ this.sessionID,
+ this.isDentalAllowedBackend,
+ this.deviceTypeID,
+ this.patientID,
+ this.tokenID,
+ this.patientTypeID,
+ this.patientType,
+ this.appointmentNo,
+ this.setupID,
+ this.episodeID,
+ this.clinicID,
+ this.projectID});
+
+ RequestPrescriptionReportEnh.fromJson(Map json) {
+ versionID = json['VersionID'];
+ channel = json['Channel'];
+ languageID = json['LanguageID'];
+ iPAdress = json['IPAdress'];
+ generalid = json['generalid'];
+ patientOutSA = json['PatientOutSA'];
+ sessionID = json['SessionID'];
+ isDentalAllowedBackend = json['isDentalAllowedBackend'];
+ deviceTypeID = json['DeviceTypeID'];
+ patientID = json['PatientID'];
+ tokenID = json['TokenID'];
+ patientTypeID = json['PatientTypeID'];
+ patientType = json['PatientType'];
+ appointmentNo = json['AppointmentNo'];
+ setupID = json['SetupID'];
+ episodeID = json['EpisodeID'];
+ clinicID = json['ClinicID'];
+ projectID = json['ProjectID'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ 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['TokenID'] = this.tokenID;
+ data['PatientTypeID'] = this.patientTypeID;
+ data['PatientType'] = this.patientType;
+ data['AppointmentNo'] = this.appointmentNo;
+ data['SetupID'] = this.setupID;
+ data['EpisodeID'] = this.episodeID;
+ data['ClinicID'] = this.clinicID;
+ data['ProjectID'] = this.projectID;
+ return data;
+ }
+}
diff --git a/lib/core/model/radiology/final_radiology.dart b/lib/core/model/radiology/final_radiology.dart
new file mode 100644
index 00000000..2efe4481
--- /dev/null
+++ b/lib/core/model/radiology/final_radiology.dart
@@ -0,0 +1,187 @@
+import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
+
+class FinalRadiology {
+ String setupID;
+ int projectID;
+ Null patientID;
+ int invoiceLineItemNo;
+ int invoiceNo;
+ int doctorID;
+ int clinicID;
+ DateTime orderDate;
+ String reportData;
+ String imageURL;
+ String procedureID;
+ int appointmentNo;
+ Null dIAPacsURL;
+ bool isRead;
+ String readOn;
+ var admissionNo;
+ bool isInOutPatient;
+ int actualDoctorRate;
+ String clinicDescription;
+ String dIAPACSURL;
+ String doctorImageURL;
+ String doctorName;
+ int doctorRate;
+ String doctorTitle;
+ int gender;
+ String genderDescription;
+ bool isActiveDoctorProfile;
+ bool isExecludeDoctor;
+ String isInOutPatientDescription;
+ String isInOutPatientDescriptionN;
+ String nationalityFlagURL;
+ int noOfPatientsRate;
+ int orderNo;
+ String projectName;
+ String qR;
+ String reportDataHTML;
+ String reportDataTextString;
+ List speciality;
+ bool isCVI;
+ bool isRadMedicalReport;
+
+ FinalRadiology(
+ {this.setupID,
+ this.projectID,
+ this.patientID,
+ this.invoiceLineItemNo,
+ this.invoiceNo,
+ this.doctorID,
+ this.clinicID,
+ this.orderDate,
+ this.reportData,
+ this.imageURL,
+ this.procedureID,
+ this.appointmentNo,
+ this.dIAPacsURL,
+ this.isRead,
+ this.readOn,
+ this.admissionNo,
+ this.isInOutPatient,
+ this.actualDoctorRate,
+ this.clinicDescription,
+ this.dIAPACSURL,
+ this.doctorImageURL,
+ this.doctorName,
+ this.doctorRate,
+ this.doctorTitle,
+ this.gender,
+ this.genderDescription,
+ this.isActiveDoctorProfile,
+ this.isExecludeDoctor,
+ this.isInOutPatientDescription,
+ this.isInOutPatientDescriptionN,
+ this.nationalityFlagURL,
+ this.noOfPatientsRate,
+ this.orderNo,
+ this.projectName,
+ this.qR,
+ this.reportDataHTML,
+ this.reportDataTextString,
+ this.speciality,
+ this.isCVI,
+ this.isRadMedicalReport});
+
+ FinalRadiology.fromJson(Map json) {
+ try {
+ setupID = json['SetupID'];
+ projectID = json['ProjectID'];
+ patientID = json['PatientID'];
+ invoiceLineItemNo = json['InvoiceLineItemNo'];
+ invoiceNo = json['InvoiceNo'];
+ doctorID = json['DoctorID'];
+ clinicID = json['ClinicID'];
+ orderDate = DateUtil.convertStringToDate(json['OrderDate']);
+ reportData = json['ReportData'];
+ imageURL = json['ImageURL'];
+ procedureID = json['ProcedureID'];
+ appointmentNo = json['AppointmentNo'];
+ dIAPacsURL = json['DIAPacsURL'];
+ isRead = json['IsRead'];
+ readOn = json['ReadOn'];
+ admissionNo = json['AdmissionNo'];
+ isInOutPatient = json['IsInOutPatient'];
+ actualDoctorRate = json['ActualDoctorRate'];
+ clinicDescription = json['ClinicDescription'];
+ dIAPACSURL = json['DIA_PACS_URL'];
+ doctorImageURL = json['DoctorImageURL'];
+ doctorName = json['DoctorName'];
+ doctorRate = json['DoctorRate'];
+ doctorTitle = json['DoctorTitle'];
+ gender = json['Gender'];
+ genderDescription = json['GenderDescription'];
+ isActiveDoctorProfile = json['IsActiveDoctorProfile'];
+ isExecludeDoctor = json['IsExecludeDoctor'];
+ isInOutPatientDescription = json['IsInOutPatientDescription'];
+ isInOutPatientDescriptionN = json['IsInOutPatientDescriptionN'];
+ nationalityFlagURL = json['NationalityFlagURL'];
+ noOfPatientsRate = json['NoOfPatientsRate'];
+ orderNo = json['OrderNo'];
+ projectName = json['ProjectName'];
+ qR = json['QR'];
+ reportDataHTML = json['ReportDataHTML'];
+ reportDataTextString = json['ReportDataTextString'];
+ // speciality = json['Speciality'].cast();
+ isCVI = json['isCVI'];
+ isRadMedicalReport = json['isRadMedicalReport'];
+ } catch (e) {
+ print(e);
+ }
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['SetupID'] = this.setupID;
+ data['ProjectID'] = this.projectID;
+ data['PatientID'] = this.patientID;
+ data['InvoiceLineItemNo'] = this.invoiceLineItemNo;
+ data['InvoiceNo'] = this.invoiceNo;
+ data['DoctorID'] = this.doctorID;
+ data['ClinicID'] = this.clinicID;
+ data['OrderDate'] = this.orderDate;
+ data['ReportData'] = this.reportData;
+ data['ImageURL'] = this.imageURL;
+ data['ProcedureID'] = this.procedureID;
+ data['AppointmentNo'] = this.appointmentNo;
+ data['DIAPacsURL'] = this.dIAPacsURL;
+ data['IsRead'] = this.isRead;
+ data['ReadOn'] = this.readOn;
+ data['AdmissionNo'] = this.admissionNo;
+ data['IsInOutPatient'] = this.isInOutPatient;
+ data['ActualDoctorRate'] = this.actualDoctorRate;
+ data['ClinicDescription'] = this.clinicDescription;
+ data['DIA_PACS_URL'] = this.dIAPACSURL;
+ 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['IsExecludeDoctor'] = this.isExecludeDoctor;
+ data['IsInOutPatientDescription'] = this.isInOutPatientDescription;
+ data['IsInOutPatientDescriptionN'] = this.isInOutPatientDescriptionN;
+ data['NationalityFlagURL'] = this.nationalityFlagURL;
+ data['NoOfPatientsRate'] = this.noOfPatientsRate;
+ data['OrderNo'] = this.orderNo;
+ data['ProjectName'] = this.projectName;
+ data['QR'] = this.qR;
+ data['ReportDataHTML'] = this.reportDataHTML;
+ data['ReportDataTextString'] = this.reportDataTextString;
+ data['Speciality'] = this.speciality;
+ data['isCVI'] = this.isCVI;
+ data['isRadMedicalReport'] = this.isRadMedicalReport;
+ return data;
+ }
+}
+
+class FinalRadiologyList {
+ String filterName = "";
+ List finalRadiologyList = List();
+
+ FinalRadiologyList({this.filterName, FinalRadiology finalRadiology}) {
+ finalRadiologyList.add(finalRadiology);
+ }
+}
diff --git a/lib/core/model/radiology/request_patient_rad_orders_details.dart b/lib/core/model/radiology/request_patient_rad_orders_details.dart
new file mode 100644
index 00000000..9e3458d5
--- /dev/null
+++ b/lib/core/model/radiology/request_patient_rad_orders_details.dart
@@ -0,0 +1,92 @@
+class RequestPatientRadOrdersDetails {
+ int projectID;
+ int orderNo;
+ int invoiceNo;
+ String setupID;
+ String procedureID;
+ bool isMedicalReport;
+ bool isCVI;
+ double versionID;
+ int channel;
+ int languageID;
+ String iPAdress;
+ String generalid;
+ int patientOutSA;
+ String sessionID;
+ bool isDentalAllowedBackend;
+ int deviceTypeID;
+ int patientID;
+ String tokenID;
+ int patientTypeID;
+ int patientType;
+
+ RequestPatientRadOrdersDetails(
+ {this.projectID,
+ this.orderNo,
+ this.invoiceNo,
+ this.setupID,
+ this.procedureID,
+ this.isMedicalReport,
+ this.isCVI,
+ this.versionID,
+ this.channel,
+ this.languageID,
+ this.iPAdress,
+ this.generalid,
+ this.patientOutSA,
+ this.sessionID,
+ this.isDentalAllowedBackend,
+ this.deviceTypeID,
+ this.patientID,
+ this.tokenID,
+ this.patientTypeID,
+ this.patientType});
+
+ RequestPatientRadOrdersDetails.fromJson(Map json) {
+ projectID = json['ProjectID'];
+ orderNo = json['OrderNo'];
+ invoiceNo = json['InvoiceNo'];
+ setupID = json['SetupID'];
+ procedureID = json['ProcedureID'];
+ isMedicalReport = json['IsMedicalReport'];
+ isCVI = json['isCVI'];
+ versionID = json['VersionID'];
+ channel = json['Channel'];
+ languageID = json['LanguageID'];
+ iPAdress = json['IPAdress'];
+ generalid = json['generalid'];
+ patientOutSA = json['PatientOutSA'];
+ sessionID = json['SessionID'];
+ isDentalAllowedBackend = json['isDentalAllowedBackend'];
+ deviceTypeID = json['DeviceTypeID'];
+ patientID = json['PatientID'];
+ tokenID = json['TokenID'];
+ patientTypeID = json['PatientTypeID'];
+ patientType = json['PatientType'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['ProjectID'] = this.projectID;
+ data['OrderNo'] = this.orderNo;
+ data['InvoiceNo'] = this.invoiceNo;
+ data['SetupID'] = this.setupID;
+ data['ProcedureID'] = this.procedureID;
+ data['IsMedicalReport'] = this.isMedicalReport;
+ data['isCVI'] = this.isCVI;
+ 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['TokenID'] = this.tokenID;
+ data['PatientTypeID'] = this.patientTypeID;
+ data['PatientType'] = this.patientType;
+ return data;
+ }
+}
diff --git a/lib/core/model/radiology/request_send_rad_report_email.dart b/lib/core/model/radiology/request_send_rad_report_email.dart
new file mode 100644
index 00000000..6d68653d
--- /dev/null
+++ b/lib/core/model/radiology/request_send_rad_report_email.dart
@@ -0,0 +1,116 @@
+class RequestSendRadReportEmail {
+ int channel;
+ String clinicName;
+ String dateofBirth;
+ int deviceTypeID;
+ String doctorName;
+ String generalid;
+ int invoiceNo;
+ String iPAdress;
+ bool isDentalAllowedBackend;
+ int languageID;
+ String orderDate;
+ int patientID;
+ String patientIditificationNum;
+ String patientMobileNumber;
+ String patientName;
+ int patientOutSA;
+ int patientType;
+ int patientTypeID;
+ int projectID;
+ String projectName;
+ String radResult;
+ String sessionID;
+ String setupID;
+ String to;
+ String tokenID;
+ double versionID;
+
+ RequestSendRadReportEmail(
+ {this.channel,
+ this.clinicName,
+ this.dateofBirth,
+ this.deviceTypeID,
+ this.doctorName,
+ this.generalid,
+ this.invoiceNo,
+ this.iPAdress,
+ this.isDentalAllowedBackend,
+ this.languageID,
+ this.orderDate,
+ this.patientID,
+ this.patientIditificationNum,
+ this.patientMobileNumber,
+ this.patientName,
+ this.patientOutSA,
+ this.patientType,
+ this.patientTypeID,
+ this.projectID,
+ this.projectName,
+ this.radResult,
+ this.sessionID,
+ this.setupID,
+ this.to,
+ this.tokenID,
+ this.versionID});
+
+ RequestSendRadReportEmail.fromJson(Map json) {
+ channel = json['Channel'];
+ clinicName = json['ClinicName'];
+ dateofBirth = json['DateofBirth'];
+ deviceTypeID = json['DeviceTypeID'];
+ doctorName = json['DoctorName'];
+ generalid = json['generalid'];
+ invoiceNo = json['InvoiceNo'];
+ iPAdress = json['IPAdress'];
+ isDentalAllowedBackend = json['isDentalAllowedBackend'];
+ languageID = json['LanguageID'];
+ orderDate = json['OrderDate'];
+ patientID = json['PatientID'];
+ patientIditificationNum = json['PatientIditificationNum'];
+ patientMobileNumber = json['PatientMobileNumber'];
+ patientName = json['PatientName'];
+ patientOutSA = json['PatientOutSA'];
+ patientType = json['PatientType'];
+ patientTypeID = json['PatientTypeID'];
+ projectID = json['ProjectID'];
+ projectName = json['ProjectName'];
+ radResult = json['RadResult'];
+ sessionID = json['SessionID'];
+ setupID = json['SetupID'];
+ to = json['To'];
+ tokenID = json['TokenID'];
+ versionID = json['VersionID'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['Channel'] = this.channel;
+ data['ClinicName'] = this.clinicName;
+ data['DateofBirth'] = this.dateofBirth;
+ data['DeviceTypeID'] = this.deviceTypeID;
+ data['DoctorName'] = this.doctorName;
+ data['generalid'] = this.generalid;
+ data['InvoiceNo'] = this.invoiceNo;
+ data['IPAdress'] = this.iPAdress;
+ data['isDentalAllowedBackend'] = this.isDentalAllowedBackend;
+ data['LanguageID'] = this.languageID;
+ data['OrderDate'] = this.orderDate;
+ data['PatientID'] = this.patientID;
+ data['PatientIditificationNum'] = this.patientIditificationNum;
+ data['PatientMobileNumber'] = this.patientMobileNumber;
+ data['PatientName'] = this.patientName;
+ data['PatientOutSA'] = this.patientOutSA;
+ data['PatientType'] = this.patientType;
+ data['PatientTypeID'] = this.patientTypeID;
+ data['ProjectID'] = this.projectID;
+ data['ProjectName'] = this.projectName;
+ data['RadResult'] = this.radResult;
+ data['SessionID'] = this.sessionID;
+ data['SetupID'] = this.setupID;
+ data['To'] = this.to;
+ data['TokenID'] = this.tokenID;
+ data['VersionID'] = this.versionID;
+ return data;
+ }
+}
diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart
index 6a411be3..456cb02b 100644
--- a/lib/core/service/client/base_app_client.dart
+++ b/lib/core/service/client/base_app_client.dart
@@ -2,10 +2,8 @@ import 'dart:convert';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
-import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
-import 'package:flutter/cupertino.dart';
import 'package:http/http.dart' as http;
AppSharedPreferences sharedPref = new AppSharedPreferences();
@@ -17,17 +15,31 @@ AppSharedPreferences sharedPref = new AppSharedPreferences();
/// body: null);
class BaseAppClient {
- post(
- String endPoint, {
- Map body,
- Function(dynamic response, int statusCode) onSuccess,
- Function(String error, int statusCode) onFailure,
- }) async {
+ post(String endPoint,
+ {Map body,
+ Function(dynamic response, int statusCode) onSuccess,
+ Function(String error, int statusCode) onFailure,
+ bool isAllowAny = false}) async {
String url = BASE_URL + endPoint;
try {
//Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
// String token = await sharedPref.getString(TOKEN);
+ body['SetupID'] = SETUP_ID;
+ body['VersionID'] = VERSION_ID;
+ body['Channel'] = CHANNEL;
+ body['LanguageID'] = LANGUAGE;
+ body['IPAdress'] = IP_ADDRESS;
+ body['generalid'] = GENERAL_ID;
+ body['PatientOutSA'] = PATIENT_OUT_SA;
+ body['SessionID'] = SESSION_ID;
+ body['isDentalAllowedBackend'] = IS_DENTAL_ALLOWED_BACKEND;
+ body['DeviceTypeID'] = DeviceTypeID;
+ body['PatientType'] = PATIENT_TYPE;
+ body['PatientTypeID'] = PATIENT_TYPE_ID;
+ body['TokenID'] = '@dm!n';
+ body['PatientID'] = 1231755;
+
print("URL : $url");
print("Body : ${json.encode(body)}");
@@ -43,7 +55,9 @@ class BaseAppClient {
onFailure('Error While Fetching data', statusCode);
} else {
var parsed = json.decode(response.body.toString());
- if (!parsed['IsAuthenticated']) {
+ if (isAllowAny) {
+ onSuccess(parsed, statusCode);
+ } else if (!parsed['IsAuthenticated']) {
if (parsed['isSMSSent'] == true) {
onSuccess(parsed, statusCode);
} else if (parsed['MessageStatus'] == 1) {
@@ -53,10 +67,7 @@ class BaseAppClient {
statusCode);
logout();
}
- // await helpers.logout();
- //helpers.showErrorToast('Your session expired Please login agian');
- // var asd = "";
- // TODO create logout fun
+
} else if (parsed['MessageStatus'] == 1 ||
parsed['SMSLoginRequired'] == true) {
onSuccess(parsed, statusCode);
diff --git a/lib/core/service/feedback/feedback_service.dart b/lib/core/service/feedback/feedback_service.dart
new file mode 100644
index 00000000..eaf2f94a
--- /dev/null
+++ b/lib/core/service/feedback/feedback_service.dart
@@ -0,0 +1,65 @@
+import 'dart:io';
+
+import 'package:diplomaticquarterapp/config/config.dart';
+import 'package:diplomaticquarterapp/core/model/feedback/COC_items.dart';
+import 'package:diplomaticquarterapp/core/model/feedback/request_insert_coc_item.dart';
+import 'package:diplomaticquarterapp/core/service/base_service.dart';
+
+class FeedbackService extends BaseService {
+ List cOCItemList = List();
+ RequestInsertCOCItem _requestInsertCOCItem = RequestInsertCOCItem();
+
+ Future sendCOCItem(
+ {String title,
+ String details,
+ String cOCTypeName,
+ String attachment}) async {
+ hasError = false;
+
+ _requestInsertCOCItem.attachment = attachment;
+ _requestInsertCOCItem.title = title;
+ _requestInsertCOCItem.details = details;
+ _requestInsertCOCItem.cOCTypeName = cOCTypeName;
+ _requestInsertCOCItem.formTypeID = cOCTypeName;
+ _requestInsertCOCItem.mobileNo =
+ "966537503378"; //TODO Change it to be dynamic
+ _requestInsertCOCItem.isUserLoggedIn = true;
+ _requestInsertCOCItem.projectID = 1231755;
+ _requestInsertCOCItem.patientName = "TAMER FANASHEH";
+ _requestInsertCOCItem.fileName = "";
+ _requestInsertCOCItem.uILanguage = "ar"; //TODO Change it to be dynamic
+ _requestInsertCOCItem.browserInfo = Platform.localHostname;
+ _requestInsertCOCItem.deviceInfo = Platform.localHostname;
+ _requestInsertCOCItem.resolution = "400x847";
+ _requestInsertCOCItem.projectID = 0;
+ _requestInsertCOCItem.identificationNo = 2344670985;
+
+ await baseAppClient
+ .post(SEND_FEEDBACK, onSuccess: (dynamic response, int statusCode) {
+ var asd = "";
+ },
+ onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: _requestInsertCOCItem.toJson());
+ }
+
+ Future getStatusCOC() async {
+ hasError = false;
+ Map body = new Map();
+ body['IdentificationNo'] = '2344670985';
+ body['MobileNo'] = '966537503378';
+ body['Searching_type'] = '1';
+
+ await baseAppClient.post(GET_STATUS_FOR_COCO,
+ onSuccess: (dynamic response, int statusCode) {
+ cOCItemList = [];
+ response['ListCOCItems'].forEach((cOC) {
+ cOCItemList.add(COCItem.fromJson(cOC));
+ });
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: body);
+ }
+}
diff --git a/lib/core/service/medical/labs_service.dart b/lib/core/service/medical/labs_service.dart
new file mode 100644
index 00000000..cad5696a
--- /dev/null
+++ b/lib/core/service/medical/labs_service.dart
@@ -0,0 +1,91 @@
+import 'package:diplomaticquarterapp/config/config.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/patient_doctor_appointment.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_rating.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/request_patient_lab_orders.dart';
+import 'package:diplomaticquarterapp/core/model/labs/request_patient_lab_special_result.dart';
+import 'package:diplomaticquarterapp/core/model/labs/request_send_lab_report_email.dart';
+import 'package:diplomaticquarterapp/core/service/base_service.dart';
+import 'package:diplomaticquarterapp/uitl/app_toast.dart';
+
+class LabsService extends BaseService {
+
+
+ RequestPatientLabOrders _requestPatientLabOrders = RequestPatientLabOrders();
+ List patientLabOrdersList = List();
+
+
+ Future getPatientLabOrdersList() async {
+ await baseAppClient.post(GET_Patient_LAB_ORDERS,
+ onSuccess: (dynamic response, int statusCode) {
+ patientLabOrdersList.clear();
+ response['ListPLO'].forEach((hospital) {
+ patientLabOrdersList
+ .add(PatientLabOrders.fromJson(hospital));
+ });
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: _requestPatientLabOrders.toJson());
+ }
+
+
+ RequestPatientLabSpecialResult _requestPatientLabSpecialResult = RequestPatientLabSpecialResult();
+
+
+ List patientLabSpecialResult = List();
+
+ Future getLaboratoryResult(
+ {String projectID, int clinicID, String invoiceNo, String orderNo}) async {
+ hasError = false;
+ _requestPatientLabSpecialResult.projectID = projectID;
+ _requestPatientLabSpecialResult.clinicID = clinicID;
+ _requestPatientLabSpecialResult.invoiceNo = invoiceNo;//'1800296522';//;
+ _requestPatientLabSpecialResult.orderNo = orderNo;
+
+ await baseAppClient.post(GET_Patient_LAB_SPECIAL_RESULT,
+ onSuccess: (dynamic response, int statusCode) {
+ patientLabSpecialResult.clear();
+ response['ListPLSR'].forEach((hospital) {
+ patientLabSpecialResult
+ .add(PatientLabSpecialResult.fromJson(hospital));
+ });
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: _requestPatientLabSpecialResult.toJson());
+ }
+
+ RequestSendLabReportEmail _requestSendLabReportEmail = RequestSendLabReportEmail();
+
+ Future sendLabReportEmail(
+ {PatientLabOrders patientLabOrder}) async {
+
+ _requestSendLabReportEmail.projectID = patientLabOrder.projectID;
+ _requestSendLabReportEmail.invoiceNo = patientLabOrder.invoiceNo;
+ _requestSendLabReportEmail.doctorName = patientLabOrder.doctorName;
+ _requestSendLabReportEmail.clinicName = patientLabOrder.clinicDescription;
+ _requestSendLabReportEmail.patientName = 'Tamer';//TODO Change it
+ _requestSendLabReportEmail.patientIditificationNum = '2344670985';//TODO change it
+ _requestSendLabReportEmail.dateofBirth = '/Date(536743800000+0300)/';//TODO change it
+ _requestSendLabReportEmail.to = 'Tamer.fanasheh@gmail.com';//TODO change it
+ _requestSendLabReportEmail.orderDate = '${patientLabOrder.orderDate.year}-${patientLabOrder.orderDate.month}-${patientLabOrder.orderDate.day}';
+ _requestSendLabReportEmail.patientMobileNumber = '537503378';//TODO change it
+ _requestSendLabReportEmail.projectName = patientLabOrder.projectName;
+
+ await baseAppClient.post(GET_Patient_LAB_SPECIAL_RESULT,
+ onSuccess: (dynamic response, int statusCode) {
+ AppToast.showSuccessToast(message: 'A copy has been sent to the email');
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: _requestSendLabReportEmail.toJson());
+ }
+
+
+}
diff --git a/lib/core/service/medical/prescriptions_service.dart b/lib/core/service/medical/prescriptions_service.dart
index 3e7259f7..294ef897 100644
--- a/lib/core/service/medical/prescriptions_service.dart
+++ b/lib/core/service/medical/prescriptions_service.dart
@@ -1,8 +1,12 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/prescriptions/Prescriptions.dart';
+import 'package:diplomaticquarterapp/core/model/prescriptions/perscription_pharmacy.dart';
import 'package:diplomaticquarterapp/core/model/prescriptions/prescription_report.dart';
+import 'package:diplomaticquarterapp/core/model/prescriptions/prescription_report_enh.dart';
import 'package:diplomaticquarterapp/core/model/prescriptions/prescriptions_order.dart';
+import 'package:diplomaticquarterapp/core/model/prescriptions/request_get_list_pharmacy_for_prescriptions.dart';
import 'package:diplomaticquarterapp/core/model/prescriptions/request_prescription_report.dart';
+import 'package:diplomaticquarterapp/core/model/prescriptions/request_prescription_report_enh.dart';
import 'package:diplomaticquarterapp/core/model/prescriptions/request_prescriptions.dart';
import 'package:diplomaticquarterapp/core/model/prescriptions/request_prescriptions_orders.dart';
import 'package:diplomaticquarterapp/core/model/prescriptions/request_send_prescription_email.dart';
@@ -137,13 +141,83 @@ class PrescriptionsService extends BaseService {
_requestSendPrescriptionEmail.projectID = projectID;
hasError = false;
await baseAppClient.post(SEND_PRESCRIPTION_EMAIL,
- onSuccess: (dynamic response, int statusCode){
- var asd = "";
-
- },
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: _requestSendPrescriptionEmail.toJson());
}
+
+ RequestGetListPharmacyForPrescriptions
+ requestGetListPharmacyForPrescriptions =
+ RequestGetListPharmacyForPrescriptions(
+ latitude: 0,
+ longitude: 0,
+ versionID: 5.5,
+ channel: 3,
+ languageID: 2,
+ iPAdress: '10.20.10.20',
+ generalid: 'Cs2020@2016\$2958',
+ patientOutSA: 0,
+ sessionID: 'HGNerTUSXhpaHXBg',
+ isDentalAllowedBackend: false,
+ deviceTypeID: 2,
+ );
+ List pharmacyPrescriptionsList = List();
+
+ Future getListPharmacyForPrescriptions({int itemId}) async {
+ hasError = false;
+ requestGetListPharmacyForPrescriptions.itemID = itemId;
+ await baseAppClient.post(GET_PHARMACY_LIST,
+ onSuccess: (dynamic response, int statusCode) {
+ pharmacyPrescriptionsList.clear();
+ response['PharmList'].forEach((prescriptions) {
+ pharmacyPrescriptionsList
+ .add(PharmacyPrescriptions.fromJson(prescriptions));
+ });
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: requestGetListPharmacyForPrescriptions.toJson());
+ }
+
+
+ RequestPrescriptionReportEnh _requestPrescriptionReportEnh = RequestPrescriptionReportEnh(
+ versionID: 5.5,
+ channel: 3,
+ languageID: 2,
+ iPAdress: '10.20.10.20',
+ generalid: 'Cs2020@2016\$2958',
+ patientOutSA: 0,
+ sessionID: 'bQQdesEKpyYKTFMVNeg',
+ isDentalAllowedBackend: false,
+ deviceTypeID: 2,
+ patientID: 1231755,
+ tokenID: '@dm!n',
+ patientTypeID: 1,
+ patientType: 1,
+ setupID: '91877',
+ appointmentNo: 5926390,
+ episodeID: 140251928,
+ clinicID: 25,
+ projectID: 12
+
+ );
+
+ List prescriptionReportEnhList = List();
+ Future getPrescriptionReportEnh({PrescriptionsOrder prescriptionsOrder})async{
+ hasError = false;
+ // _requestPrescriptionReportEnh.appointmentNo = int.parse(prescriptionsOrder.appointmentNo);
+ // _requestPrescriptionReportEnh.patientID = prescriptionsOrder.projectID;
+
+ await baseAppClient.post(GET_PRESCRIPTION_REPORT_ENH,
+ onSuccess: (dynamic response, int statusCode) {
+ prescriptionReportEnhList.clear();
+ response['ListPRM'].forEach((prescriptions) {
+ prescriptionReportEnhList.add(PrescriptionReportEnh.fromJson(prescriptions));
+ });
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: _requestPrescriptionReportEnh.toJson());
+ }
}
diff --git a/lib/core/service/medical/radiology_service.dart b/lib/core/service/medical/radiology_service.dart
new file mode 100644
index 00000000..e14206d5
--- /dev/null
+++ b/lib/core/service/medical/radiology_service.dart
@@ -0,0 +1,98 @@
+import 'package:diplomaticquarterapp/config/config.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/patient_doctor_appointment.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_rating.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/request_patient_lab_orders.dart';
+import 'package:diplomaticquarterapp/core/model/labs/request_patient_lab_special_result.dart';
+import 'package:diplomaticquarterapp/core/model/labs/request_send_lab_report_email.dart';
+import 'package:diplomaticquarterapp/core/model/radiology/final_radiology.dart';
+import 'package:diplomaticquarterapp/core/model/radiology/request_send_rad_report_email.dart';
+import 'package:diplomaticquarterapp/core/service/base_service.dart';
+import 'package:diplomaticquarterapp/uitl/app_toast.dart';
+
+class RadiologyService extends BaseService {
+ List finalRadiologyList = List();
+ String url = '';
+
+ Future getRadImageURL({int invoiceNo, int lineItem,int projectId}) async {
+ hasError = false;
+ final Map body = new Map();
+ body['InvoiceNo'] = invoiceNo;
+ body['LineItemNo'] = lineItem;
+ body['ProjectID'] = projectId;
+
+ await baseAppClient.post(GET_RAD_IMAGE_URL,
+ isAllowAny: true,
+ onSuccess: (dynamic response, int statusCode) {
+ url = response['Data'];
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: body);
+ }
+
+ Future getPatientRadOrders () async {
+ hasError = false;
+ await baseAppClient.post(GET_PATIENT_ORDERS,
+ onSuccess: (dynamic response, int statusCode) {
+ finalRadiologyList.clear();
+ response['FinalRadiologyList'].forEach((radiology) {
+ finalRadiologyList.add(FinalRadiology.fromJson(radiology));
+ });
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: Map());
+ }
+
+ Future getPatientRadOrdersDetails() async {
+ hasError = false;
+ await baseAppClient.post(GET_PATIENT_ORDERS,
+ onSuccess: (dynamic response, int statusCode) {
+ finalRadiologyList.clear();
+ response['FinalRadiologyList'].forEach((radiology) {
+ finalRadiologyList.add(FinalRadiology.fromJson(radiology));
+ });
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: Map());
+ }
+
+ RequestSendRadReportEmail _requestSendRadReportEmail =
+ RequestSendRadReportEmail();
+
+ Future sendRadReportEmail(
+ {FinalRadiology finalRadiology}) async {
+ _requestSendRadReportEmail.projectID = finalRadiology.projectID;
+ _requestSendRadReportEmail.clinicName = finalRadiology.clinicDescription;
+ _requestSendRadReportEmail.invoiceNo = finalRadiology.invoiceNo;
+ _requestSendRadReportEmail.setupID = finalRadiology.setupID;
+ _requestSendRadReportEmail.doctorName = finalRadiology.doctorName;
+ _requestSendRadReportEmail.orderDate = '${finalRadiology.orderDate.year}-${finalRadiology.orderDate.month}-${finalRadiology.orderDate.day}';
+ _requestSendRadReportEmail.patientIditificationNum = '2344670985';//TODO change it
+ _requestSendRadReportEmail.patientMobileNumber = '537503378';//TODO change it
+ _requestSendRadReportEmail.patientName = 'TAMER FANASHE';//TODO change it
+ _requestSendRadReportEmail.patientIditificationNum = '2344670985';//TODO change it
+ _requestSendRadReportEmail.projectName = finalRadiology.projectName;
+ _requestSendRadReportEmail.radResult = 'asd';//finalRadiology.reportData;
+ _requestSendRadReportEmail.to = 'Tamer.fanasheh@gmail.com';
+ _requestSendRadReportEmail.dateofBirth = '/Date(536743800000+0300)/';
+
+ hasError = false;
+ await baseAppClient.post(SEND_RAD_REPORT_EMAIL,
+ isAllowAny: true,
+ onSuccess: (dynamic response, int statusCode) {
+
+ },
+ onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: _requestSendRadReportEmail.toJson());
+ }
+}
diff --git a/lib/core/viewModels/feedback/feedback_view_model.dart b/lib/core/viewModels/feedback/feedback_view_model.dart
new file mode 100644
index 00000000..1176caf7
--- /dev/null
+++ b/lib/core/viewModels/feedback/feedback_view_model.dart
@@ -0,0 +1,44 @@
+import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
+import 'package:diplomaticquarterapp/core/model/feedback/COC_items.dart';
+import 'package:diplomaticquarterapp/core/service/feedback/feedback_service.dart';
+import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
+
+import '../../../locator.dart';
+
+class FeedbackViewModel extends BaseViewModel {
+ FeedbackService _feedbackService = locator();
+
+ List get cOCItemList => _feedbackService.cOCItemList;
+
+ Future sendCOCItem(
+ {String title,
+ String details,
+ String cOCTypeName,
+ String attachment}) async {
+ setState(ViewState.BusyLocal);
+ await _feedbackService.sendCOCItem(
+ title: title,
+ details: details,
+ cOCTypeName: cOCTypeName,
+ attachment: attachment);
+ if (_feedbackService.hasError) {
+ error = _feedbackService.error;
+ setState(ViewState.ErrorLocal);
+ return false;
+ } else {
+ setState(ViewState.Idle);
+ return true;
+ }
+ }
+
+ getCOC() async {
+ setState(ViewState.Busy);
+ await _feedbackService.getStatusCOC();
+ if (_feedbackService.hasError) {
+ error = _feedbackService.error;
+ setState(ViewState.Error);
+ } else {
+ setState(ViewState.Idle);
+ }
+ }
+}
diff --git a/lib/core/viewModels/medical/labs_view_model.dart b/lib/core/viewModels/medical/labs_view_model.dart
new file mode 100644
index 00000000..1efdfb7c
--- /dev/null
+++ b/lib/core/viewModels/medical/labs_view_model.dart
@@ -0,0 +1,106 @@
+
+import 'package:diplomaticquarterapp/core/enum/filter_type.dart';
+import 'package:diplomaticquarterapp/core/enum/viewstate.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/service/medical/labs_service.dart';
+
+import '../../../locator.dart';
+import '../base_view_model.dart';
+
+class LabsViewModel extends BaseViewModel {
+ FilterType filterType = FilterType.Clinic;
+ LabsService _labsService = locator();
+
+ List _patientLabOrdersListClinic = List();
+ List _patientLabOrdersListHospital = List();
+
+ List get patientLabOrdersList =>
+ filterType == FilterType.Clinic
+ ? _patientLabOrdersListClinic
+ : _patientLabOrdersListHospital;
+
+ void getLabs() async {
+ setState(ViewState.Busy);
+ await _labsService.getPatientLabOrdersList();
+ if (_labsService.hasError) {
+ error = _labsService.error;
+ setState(ViewState.Error);
+ } else {
+ _labsService.patientLabOrdersList.forEach((element) {
+ List patientLabOrdersClinic =
+ _patientLabOrdersListClinic
+ .where((elementClinic) =>
+ elementClinic.filterName == element.clinicDescription)
+ .toList();
+
+ if (patientLabOrdersClinic.length != 0) {
+ _patientLabOrdersListClinic[_patientLabOrdersListClinic
+ .indexOf(patientLabOrdersClinic[0])]
+ .patientLabOrdersList
+ .add(element);
+ } else {
+ _patientLabOrdersListClinic.add(PatientLabOrdersList(
+ filterName: element.clinicDescription,
+ patientDoctorAppointment: element));
+ }
+
+ // doctor list sort via project
+ List patientLabOrdersHospital =
+ _patientLabOrdersListHospital
+ .where(
+ (elementClinic) =>
+ elementClinic.filterName == element.projectName,
+ )
+ .toList();
+
+ if (patientLabOrdersHospital.length != 0) {
+ _patientLabOrdersListHospital[_patientLabOrdersListHospital
+ .indexOf(patientLabOrdersHospital[0])]
+ .patientLabOrdersList
+ .add(element);
+ } else {
+ _patientLabOrdersListHospital.add(PatientLabOrdersList(
+ filterName: element.projectName,
+ patientDoctorAppointment: element));
+ }
+ });
+
+ setState(ViewState.Idle);
+ }
+ }
+
+ setFilterType(FilterType filterType) {
+ this.filterType = filterType;
+ notifyListeners();
+ }
+
+ List get patientLabSpecialResult =>
+ _labsService.patientLabSpecialResult;
+
+ getLaboratoryResult(
+ {String projectID,
+ int clinicID,
+ String invoiceNo,
+ String orderNo}) async {
+ setState(ViewState.Busy);
+ await _labsService.getLaboratoryResult(invoiceNo: invoiceNo,orderNo: orderNo,projectID: projectID,clinicID: clinicID);
+ if (_labsService.hasError) {
+ error = _labsService.error;
+ setState(ViewState.Error);
+ } else {
+ setState(ViewState.Idle);
+ }
+ }
+
+ sendLabReportEmail({PatientLabOrders patientLabOrder}) async {
+ setState(ViewState.Busy);
+ await _labsService.sendLabReportEmail(patientLabOrder: patientLabOrder);
+ if (_labsService.hasError) {
+ error = _labsService.error;
+ setState(ViewState.Error);
+ } else {
+ setState(ViewState.Idle);
+ }
+ }
+}
diff --git a/lib/core/viewModels/medical/prescriptions_view_model.dart b/lib/core/viewModels/medical/prescriptions_view_model.dart
index 6ad25380..f67df015 100644
--- a/lib/core/viewModels/medical/prescriptions_view_model.dart
+++ b/lib/core/viewModels/medical/prescriptions_view_model.dart
@@ -1,11 +1,13 @@
+import 'package:diplomaticquarterapp/core/model/prescriptions/perscription_pharmacy.dart';
import 'package:diplomaticquarterapp/core/model/prescriptions/prescription_report.dart';
+import 'package:diplomaticquarterapp/core/model/prescriptions/prescription_report_enh.dart';
+import 'package:diplomaticquarterapp/core/model/prescriptions/prescriptions_order.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import '../../../core/enum/filter_type.dart';
import '../../../core/enum/viewstate.dart';
import '../../../core/model/prescriptions/Prescriptions.dart';
import '../../../core/service/medical/prescriptions_service.dart';
-
import '../../../locator.dart';
import '../base_view_model.dart';
@@ -16,12 +18,18 @@ class PrescriptionsViewModel extends BaseViewModel {
List _prescriptionsOrderListClinic = List();
List _prescriptionsOrderListHospital = List();
+
List get prescriptionReportList =>
_prescriptionsService.prescriptionReportList;
List get prescriptionsList =>
_prescriptionsService.prescriptionsList;
+ List get prescriptionsHistory => _prescriptionsService.prescriptionsOrderList;
+
+ List get pharmacyPrescriptionsList => _prescriptionsService.pharmacyPrescriptionsList ;
+
+
List get prescriptionsOrderList =>
filterType == FilterType.Clinic
? _prescriptionsOrderListClinic
@@ -105,7 +113,7 @@ class PrescriptionsViewModel extends BaseViewModel {
}
}
- sendPrescriptionEmail(
+ sendPrescriptionEmail(
{String appointmentDate,
int patientID,
String clinicName,
@@ -124,5 +132,29 @@ class PrescriptionsViewModel extends BaseViewModel {
}
}
+ getListPharmacyForPrescriptions({int itemId}) async {
+ setState(ViewState.Busy);
+ await _prescriptionsService.getListPharmacyForPrescriptions(itemId: itemId);
+ if (_prescriptionsService.hasError) {
+ error = _prescriptionsService.error;
+ setState(ViewState.Error);
+ } else {
+ setState(ViewState.Idle);
+ }
+ }
+
+
+ List get prescriptionReportEnhList => _prescriptionsService.prescriptionReportEnhList;
+
+ getPrescriptionReportEnh({PrescriptionsOrder prescriptionsOrder}) async {
+ setState(ViewState.Busy);
+ await _prescriptionsService.getPrescriptionReportEnh(prescriptionsOrder: prescriptionsOrder);
+ if (_prescriptionsService.hasError) {
+ error = _prescriptionsService.error;
+ setState(ViewState.Error);
+ } else {
+ setState(ViewState.Idle);
+ }
+ }
}
diff --git a/lib/core/viewModels/medical/radiology_view_model.dart b/lib/core/viewModels/medical/radiology_view_model.dart
new file mode 100644
index 00000000..26d40361
--- /dev/null
+++ b/lib/core/viewModels/medical/radiology_view_model.dart
@@ -0,0 +1,101 @@
+import 'package:diplomaticquarterapp/core/enum/filter_type.dart';
+import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
+import 'package:diplomaticquarterapp/core/model/radiology/final_radiology.dart';
+import 'package:diplomaticquarterapp/core/service/medical/radiology_service.dart';
+import 'package:diplomaticquarterapp/uitl/app_toast.dart';
+
+import '../../../locator.dart';
+import '../base_view_model.dart';
+
+class RadiologyViewModel extends BaseViewModel {
+ FilterType filterType = FilterType.Clinic;
+ RadiologyService _radiologyService = locator();
+
+ List _finalRadiologyListClinic = List();
+ List _finalRadiologyListHospital = List();
+
+ List get finalRadiologyList =>
+ filterType == FilterType.Clinic
+ ? _finalRadiologyListClinic
+ : _finalRadiologyListHospital;
+
+ void getPatientRadOrders() async {
+ setState(ViewState.Busy);
+ await _radiologyService.getPatientRadOrders();
+ if (_radiologyService.hasError) {
+ error = _radiologyService.error;
+ setState(ViewState.Error);
+ } else {
+ _radiologyService.finalRadiologyList.forEach((element) {
+ List finalRadiologyListClinic =
+ _finalRadiologyListClinic
+ .where((elementClinic) =>
+ elementClinic.filterName == element.clinicDescription)
+ .toList();
+
+ if (finalRadiologyListClinic.length != 0) {
+ _finalRadiologyListClinic[
+ finalRadiologyListClinic.indexOf(finalRadiologyListClinic[0])]
+ .finalRadiologyList
+ .add(element);
+ } else {
+ _finalRadiologyListClinic.add(FinalRadiologyList(
+ filterName: element.clinicDescription, finalRadiology: element));
+ }
+
+ // FinalRadiologyList list sort via project
+ List finalRadiologyListHospital =
+ _finalRadiologyListHospital
+ .where(
+ (elementClinic) =>
+ elementClinic.filterName == element.projectName,
+ )
+ .toList();
+
+ if (finalRadiologyListHospital.length != 0) {
+ _finalRadiologyListHospital[finalRadiologyListHospital
+ .indexOf(finalRadiologyListHospital[0])]
+ .finalRadiologyList
+ .add(element);
+ } else {
+ _finalRadiologyListHospital.add(FinalRadiologyList(
+ filterName: element.projectName, finalRadiology: element));
+ }
+ });
+
+ setState(ViewState.Idle);
+ }
+ }
+
+ String get radImageURL => _radiologyService.url;
+
+ getRadImageURL({int invoiceNo, int lineItem,int projectId}) async {
+ setState(ViewState.Busy);
+ await _radiologyService.getRadImageURL(invoiceNo: invoiceNo,lineItem: lineItem,projectId: projectId);
+ if (_radiologyService.hasError) {
+ error = _radiologyService.error;
+ setState(ViewState.Error);
+ } else
+ setState(ViewState.Idle);
+ }
+
+ sendRadReportEmail(
+ {FinalRadiology finalRadiology}) async {
+ setState(ViewState.BusyLocal);
+ await _radiologyService.sendRadReportEmail(
+ finalRadiology: finalRadiology
+ );
+ if (_radiologyService.hasError) {
+ error = _radiologyService.error;
+ AppToast.showErrorToast(message: error);
+ } else {
+ AppToast.showSuccessToast(message: 'A copy has been sent to the email');
+ }
+ setState(ViewState.Idle);
+ }
+
+ setFilterType(FilterType filterType) {
+ this.filterType = filterType;
+ notifyListeners();
+ }
+}
diff --git a/lib/locator.dart b/lib/locator.dart
index 92d89283..edccda80 100644
--- a/lib/locator.dart
+++ b/lib/locator.dart
@@ -1,12 +1,18 @@
import 'package:diplomaticquarterapp/routes.dart';
import 'package:get_it/get_it.dart';
+import 'core/service/feedback/feedback_service.dart';
import 'core/service/hospital_service.dart';
+import 'core/service/medical/labs_service.dart';
import 'core/service/medical/my_doctor_service.dart';
import 'core/service/medical/prescriptions_service.dart';
+import 'core/service/medical/radiology_service.dart';
+import 'core/viewModels/feedback/feedback_view_model.dart';
import 'core/viewModels/hospital_view_model.dart';
+import 'core/viewModels/medical/labs_view_model.dart';
import 'core/viewModels/medical/my_doctor_view_model.dart';
import 'core/viewModels/medical/prescriptions_view_model.dart';
+import 'core/viewModels/medical/radiology_view_model.dart';
import 'core/viewModels/pharmacies_view_model.dart';
import 'core/service/pharmacies_service.dart';
@@ -19,10 +25,17 @@ void setupLocator() {
locator.registerLazySingleton(() => PharmacyService());
locator.registerLazySingleton(() => MyDoctorService());
locator.registerLazySingleton(() => PrescriptionsService());
+ locator.registerLazySingleton(() => LabsService());
+ locator.registerLazySingleton(() => RadiologyService());
+ locator.registerLazySingleton(() => FeedbackService());
/// View Model
locator.registerFactory(() => HospitalViewModel());
locator.registerFactory(() => PharmacyViewModel());
locator.registerFactory(() => MyDoctorViewModel());
locator.registerFactory(() => PrescriptionsViewModel());
+ locator.registerFactory(() => LabsViewModel());
+ locator.registerFactory(() => RadiologyViewModel());
+ locator.registerFactory(() => FeedbackViewModel());
+
}
diff --git a/lib/pages/base/base_view.dart b/lib/pages/base/base_view.dart
index 3ed2baad..f6853123 100644
--- a/lib/pages/base/base_view.dart
+++ b/lib/pages/base/base_view.dart
@@ -35,4 +35,10 @@ class _BaseViewState extends State> {
child: Consumer(builder: widget.builder),
);
}
+
+ @override
+ void dispose() {
+ if (model != null) model = null;
+ super.dispose();
+ }
}
diff --git a/lib/pages/feedback/Status_feedback_page.dart b/lib/pages/feedback/Status_feedback_page.dart
new file mode 100644
index 00000000..7fc01d06
--- /dev/null
+++ b/lib/pages/feedback/Status_feedback_page.dart
@@ -0,0 +1,98 @@
+import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
+import 'package:diplomaticquarterapp/core/viewModels/feedback/feedback_view_model.dart';
+import 'package:diplomaticquarterapp/pages/base/base_view.dart';
+import 'package:diplomaticquarterapp/widgets/buttons/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';
+
+class StatusFeedbackPage extends StatefulWidget {
+ @override
+ _StatusFeedbackPageState createState() => _StatusFeedbackPageState();
+}
+
+class _StatusFeedbackPageState extends State {
+
+ @override
+ Widget build(BuildContext context) {
+ return BaseView(
+ onModelReady: (model) => model.getCOC(),
+ builder: (_, model, widget) => AppScaffold(
+ baseViewModel: model,
+ body: Container(
+ margin: EdgeInsets.only(top: 8.0,left: 8.0,right: 8.0,bottom: MediaQuery.of(context).size.height * 0.1 ),
+ padding: EdgeInsets.all(15.0),
+ child: ListView.builder(
+ itemCount: model.cOCItemList.length,
+ itemBuilder: (context, index) => Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.rectangle,
+ border: Border.all(color: Colors.white, width: 0.5),
+ borderRadius: BorderRadius.all(Radius.circular(5)),
+ color: Colors.white,
+ ),
+ margin: EdgeInsets.all(4),
+ child: Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ SizedBox(height: 8,),
+ Row(
+ mainAxisAlignment:
+ MainAxisAlignment.spaceBetween,
+ children: [
+ Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Texts('${model.cOCItemList[index].cOCTitle}'),
+ Texts(
+ 'Number :${model.cOCItemList[index].itemID}',
+ variant: 'overline',
+ ),
+ ],
+ ),
+ Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Texts('${model.cOCItemList[index].status}'),
+ Texts(
+ '${model.cOCItemList[index].date}',
+ variant: 'overline',
+ ),
+ ],
+ ),
+ ],
+ ),
+ Texts('${model.cOCItemList[index].formType}'),
+ Divider(height: 4.5,color: Colors.grey[500],)
+ ],
+ ),
+ ),
+ )),
+ ),
+ bottomSheet: Container(
+ height: MediaQuery.of(context).size.height * 0.13,
+ width: double.infinity,
+ padding: EdgeInsets.all(8.0),
+ child: Center(
+ child: Container(
+ height: MediaQuery.of(context).size.height * 0.1,
+ width: MediaQuery.of(context).size.width * 0.8,
+ child: Button(
+ label: 'Search',
+ loading: model.state == ViewState.BusyLocal,
+ onTap: () {
+ //TODO When come back
+ },
+ ),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/pages/feedback/feedback_home_page.dart b/lib/pages/feedback/feedback_home_page.dart
new file mode 100644
index 00000000..92bfaff7
--- /dev/null
+++ b/lib/pages/feedback/feedback_home_page.dart
@@ -0,0 +1,118 @@
+import 'dart:ui';
+
+import 'package:diplomaticquarterapp/pages/feedback/send_feedback_page.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 'Status_feedback_page.dart';
+
+class FeedbackHomePage extends StatefulWidget {
+ @override
+ _FeedbackHomePageState createState() => _FeedbackHomePageState();
+}
+
+class _FeedbackHomePageState extends State
+ 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 AppScaffold(
+ isShowAppBar: true,
+ appBarTitle: 'Feedback',
+ body: Scaffold(
+ extendBodyBehindAppBar: true,
+ appBar: PreferredSize(
+ preferredSize: Size.fromHeight(65.0),
+ child: Stack(
+ children: [
+ 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.30,
+ child: Center(
+ child: Texts('Send'),
+ ),
+ ),
+ Container(
+ width: MediaQuery.of(context).size.width * 0.30,
+ child: Center(
+ child: Texts('Status'),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ body: Column(
+ children: [
+ Expanded(
+ child: TabBarView(
+ physics: BouncingScrollPhysics(),
+ controller: _tabController,
+ children: [
+ SendFeedbackPage(),
+ StatusFeedbackPage()
+ ],
+ ),
+ )
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/pages/feedback/send_feedback_page.dart b/lib/pages/feedback/send_feedback_page.dart
new file mode 100644
index 00000000..801a0a37
--- /dev/null
+++ b/lib/pages/feedback/send_feedback_page.dart
@@ -0,0 +1,563 @@
+import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
+import 'package:diplomaticquarterapp/core/viewModels/feedback/feedback_view_model.dart';
+import 'package:diplomaticquarterapp/pages/base/base_view.dart';
+import 'package:diplomaticquarterapp/uitl/app_toast.dart';
+import 'package:diplomaticquarterapp/widgets/bottom_options/BottomSheet.dart';
+import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
+import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
+import 'package:diplomaticquarterapp/widgets/input/text_field.dart';
+import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:font_awesome_flutter/font_awesome_flutter.dart';
+
+enum MessageType {
+ ComplaintOnAnAppointment,
+ ComplaintWithoutAppointment,
+ Question,
+ Compliment,
+ Suggestion,
+ NON
+}
+
+class SendFeedbackPage extends StatefulWidget {
+ @override
+ _SendFeedbackPageState createState() => _SendFeedbackPageState();
+}
+
+class _SendFeedbackPageState extends State {
+ TextEditingController titleController = TextEditingController();
+ TextEditingController messageController = TextEditingController();
+ MessageType messageType = MessageType.NON;
+ String _selected = "not selected";
+ List images = [];
+ String title;
+
+ String message;
+ final formKey = GlobalKey();
+
+ @override
+ Widget build(BuildContext context) {
+ return BaseView(
+ builder: (_, model, widget) => AppScaffold(
+ baseViewModel: model,
+ body: Container(
+ height: MediaQuery.of(context).size.height * 0.8,
+ child: SingleChildScrollView(
+ child: Form(
+ key: formKey,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ SizedBox(
+ height: 65,
+ ),
+ Container(
+ margin: EdgeInsets.only(left: 20, right: 20, top: 8),
+ child: Texts(
+ 'We\'d love to hear your feedback about the health care services and online services. Please fill in the required fields',
+ //يسعدنا سماع Ù…Ù„Ø§ØØ¸Ø§ØªÙƒ ØÙˆÙ„ خدمات الرعاية الصØÙŠØ© والخدمات الإلكترونية. يرجى تعبئة الØÙ‚ول المطلوبة
+ textAlign: TextAlign.center,
+ variant: 'body2Link',
+ ),
+ ),
+ InkWell(
+ onTap: () {
+ confirmBox();
+ },
+ child: Container(
+ margin: EdgeInsets.only(left: 10, right: 10, top: 15),
+ height: 50,
+ decoration: BoxDecoration(
+ border: Border.all(color: Colors.grey),
+ borderRadius: BorderRadius.circular(7),
+ color: Colors.white,
+ shape: BoxShape.rectangle,
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Container(
+ child: Texts(
+ _selected,
+ variant: 'bodyText',
+ ),
+ margin: EdgeInsets.only(left: 10),
+ ),
+ Icon(
+ Icons.arrow_drop_down,
+ size: 22,
+ color: Colors.grey,
+ )
+ ],
+ ),
+ ),
+ ),
+ Container(
+ margin: EdgeInsets.only(left: 10, right: 10, top: 15),
+ child: TextFields(
+ hintText: 'Title',
+ controller: titleController,
+ fontSize: 13.5,
+ hintColor: Colors.black,
+ fontWeight: FontWeight.w600,
+ validator: (value) {
+ if (value == null)
+ return "please Enter title";
+ else
+ return null;
+ },
+ ),
+ ),
+ Container(
+ margin: EdgeInsets.only(left: 10, right: 10, top: 15),
+ child: TextFields(
+ hintText: 'message',
+ fontSize: 13.5,
+ hintColor: Colors.black,
+ fontWeight: FontWeight.w600,
+ maxLines: 25,
+ minLines: 13,
+ controller: messageController,
+ validator: (value) {
+ if (value == null)
+ return "please Enter message";
+ else
+ return null;
+ }),
+ ),
+ InkWell(
+ onTap: () {
+ ImageOptions.showImageOptions(context, (String image) {
+ setState(() {
+ images.add(image);
+ });
+ });
+ },
+ child: Container(
+ margin: EdgeInsets.only(left: 10, right: 10, top: 15),
+ height: 50,
+ decoration: BoxDecoration(
+ border: Border.all(color: Colors.grey),
+ borderRadius: BorderRadius.circular(7),
+ color: Colors.white,
+ shape: BoxShape.rectangle,
+ ),
+ child: Center(
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Icon(Icons.attach_file),
+ Texts(
+ 'selected attachment',
+ variant: 'bodyText',
+ textAlign: TextAlign.center,
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ...List.generate(
+ images.length,
+ (index) => Container(
+ margin: EdgeInsets.all(10),
+ padding: EdgeInsets.all(8.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Icon(FontAwesomeIcons.paperclip),
+ SizedBox(
+ width: 8,
+ ),
+ Texts(
+ 'image ${index + 1}.png',
+ ),
+ ],
+ ),
+ InkWell(
+ onTap: () {
+ setState(() {
+ images.remove(images[index]);
+ });
+ },
+ child: Icon(
+ FontAwesomeIcons.trashAlt,
+ color: Colors.red[300],
+ ))
+ ],
+ ),
+ )),
+ SizedBox(
+ height: 30,
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ bottomSheet: Container(
+ height: MediaQuery.of(context).size.height * 0.13,
+ width: double.infinity,
+ padding: EdgeInsets.all(8.0),
+ child: Center(
+ child: Container(
+ height: MediaQuery.of(context).size.height * 0.1,
+ width: MediaQuery.of(context).size.width * 0.8,
+ child: Button(
+ label: 'Send',
+ loading: model.state == ViewState.BusyLocal,
+ onTap: () {
+ final form = formKey.currentState;
+ if (form.validate()) if (messageType != MessageType.NON)
+ model
+ .sendCOCItem(
+ title: titleController.text,
+ attachment: images.length > 0 ? images[0] : "",
+ details: messageController.text,
+ cOCTypeName: getCOCName())
+ .then((value) {
+ if (value) {
+ setState(() {
+ titleController.text = "";
+ messageController.text = "";
+ images = [];
+ messageType = MessageType.NON;
+ });
+ AppToast.showSuccessToast(message: "Your feedback was sended");
+
+ } else {
+ AppToast.showErrorToast(message: model.error);
+
+ }
+ });
+ else {
+ AppToast.showErrorToast(message: "Please select COC");
+ }
+ },
+ ),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ String getCOCName() {
+ switch (messageType) {
+ case MessageType.ComplaintOnAnAppointment:
+ return "1";
+ break;
+ case MessageType.ComplaintWithoutAppointment:
+ return "2";
+ break;
+ case MessageType.Question:
+ return "3";
+ break;
+ case MessageType.Compliment:
+ return "4";
+ break;
+ case MessageType.Suggestion:
+ return "5";
+ break;
+ case MessageType.NON:
+ return "";
+ break;
+ }
+ return "";
+ }
+
+ // Show Dialog function
+ void confirmBox() {
+ showDialog(
+ context: context,
+ child: FeedbackTypeDialog(
+ onValueChange: _onValueChange,
+ initialValue: messageType,
+ onValueSelected: () {
+ setState(() {
+ switch (messageType) {
+ case MessageType.ComplaintOnAnAppointment:
+ _selected = "Complaint on an appointment";
+ break;
+ case MessageType.ComplaintWithoutAppointment:
+ _selected = "Complaint without appointment";
+ break;
+ case MessageType.Question:
+ _selected = "Question";
+ break;
+ case MessageType.Compliment:
+ _selected = "Compliment";
+ break;
+ case MessageType.Suggestion:
+ _selected = "Suggestion";
+ break;
+ case MessageType.NON:
+ break;
+ }
+ });
+ Navigator.pop(context);
+ },
+ ));
+ }
+
+ void _onValueChange(MessageType value) {
+ setState(() {
+ messageType = value;
+ });
+ }
+}
+
+class FeedbackTypeDialog extends StatefulWidget {
+ const FeedbackTypeDialog(
+ {this.onValueChange, this.initialValue, this.onValueSelected});
+
+ final MessageType initialValue;
+ final void Function(MessageType) onValueChange;
+ final GestureTapCallback onValueSelected;
+
+ @override
+ State createState() => new FeedbackTypeDialogState();
+}
+
+class FeedbackTypeDialogState extends State {
+ MessageType _messageType;
+
+ @override
+ void initState() {
+ super.initState();
+ _messageType = widget.initialValue;
+ }
+
+ Widget build(BuildContext context) {
+ return new SimpleDialog(
+ title: Text(
+ "Message Type",
+ textAlign: TextAlign.center,
+ ),
+ children: [
+ Container(
+ // padding: const EdgeInsets.all(10.0),
+ child: Column(
+ children: [
+ Divider(
+ height: 2.5,
+ color: Colors.grey[500],
+ ),
+ Row(
+ children: [
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: () {
+ setState(() {
+ _messageType = MessageType.ComplaintOnAnAppointment;
+ widget.onValueChange(_messageType);
+ });
+ },
+ child: ListTile(
+ title: const Text('Complaint on an appointment'),
+ leading: Radio(
+ value: MessageType.ComplaintOnAnAppointment,
+ groupValue: _messageType,
+ activeColor: Colors.red[800],
+ onChanged: (MessageType value) {
+ setState(() {
+ _messageType = MessageType.ComplaintOnAnAppointment;
+ widget.onValueChange(_messageType);
+ });
+ },
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ SizedBox(
+ height: 5.0,
+ ),
+ Row(
+ children: [
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: () {
+ setState(() {
+ _messageType = MessageType.ComplaintWithoutAppointment;
+ widget.onValueChange(_messageType);
+ });
+ },
+ child: ListTile(
+ title: const Text('Complaint without appointment'),
+ leading: Radio(
+ value: MessageType.ComplaintWithoutAppointment,
+ groupValue: _messageType,
+ activeColor: Colors.red[800],
+ onChanged: (MessageType value) {
+ setState(() {
+ _messageType =
+ MessageType.ComplaintWithoutAppointment;
+ widget.onValueChange(_messageType);
+ });
+ },
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ SizedBox(
+ height: 5.0,
+ ),
+ Row(
+ children: [
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: () {
+ setState(() {
+ _messageType = MessageType.Question;
+ widget.onValueChange(_messageType);
+ });
+ },
+ child: ListTile(
+ title: const Text('Question'),
+ leading: Radio(
+ value: MessageType.Question,
+ groupValue: _messageType,
+ activeColor: Colors.red[800],
+ onChanged: (MessageType value) {
+ setState(() {
+ _messageType = MessageType.Question;
+ widget.onValueChange(_messageType);
+ });
+ },
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ SizedBox(
+ height: 5.0,
+ ),
+ Row(
+ children: [
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: () {
+ setState(() {
+ _messageType = MessageType.Compliment;
+ widget.onValueChange(_messageType);
+ });
+ },
+ child: ListTile(
+ title: const Text('compliment'),
+ leading: Radio(
+ value: MessageType.Compliment,
+ groupValue: _messageType,
+ activeColor: Colors.red[800],
+ onChanged: (MessageType value) {
+ setState(() {
+ _messageType = MessageType.Compliment;
+ widget.onValueChange(_messageType);
+ });
+ },
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ SizedBox(
+ height: 5.0,
+ ),
+ Row(
+ children: [
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: () {
+ setState(() {
+ _messageType = MessageType.Suggestion;
+ widget.onValueChange(_messageType);
+ });
+ },
+ child: ListTile(
+ title: const Text('Suggestion'),
+ leading: Radio(
+ value: MessageType.Suggestion,
+ groupValue: _messageType,
+ activeColor: Colors.red[800],
+ onChanged: (MessageType value) {
+ setState(() {
+ _messageType = MessageType.Suggestion;
+ widget.onValueChange(_messageType);
+ });
+ },
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ SizedBox(
+ height: 5.0,
+ ),
+ Divider(
+ height: 2.5,
+ color: Colors.grey[500],
+ ),
+ SizedBox(
+ height: 5,
+ ),
+ Row(
+ // mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: () {
+ Navigator.pop(context);
+ },
+ child: Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Container(
+ child: Center(
+ child: Texts(
+ 'cancel',
+ color: Colors.red,
+ ))),
+ ),
+ )),
+ Container(
+ width: 1,
+ height: 30,
+ color: Colors.grey[500],
+ ),
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: widget.onValueSelected,
+ child: Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Center(
+ child: Texts(
+ 'ok',
+ fontWeight: FontWeight.w400,
+ )),
+ ),
+ )),
+ ],
+ )
+ ],
+ )),
+ ],
+ );
+ }
+}
diff --git a/lib/pages/landing/home_page.dart b/lib/pages/landing/home_page.dart
index 6169fdf4..b172cffc 100644
--- a/lib/pages/landing/home_page.dart
+++ b/lib/pages/landing/home_page.dart
@@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/hospital_view_model.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:diplomaticquarterapp/core/model/pharmacies/pharmacies_model.dart';
@@ -9,6 +10,7 @@ import 'package:diplomaticquarterapp/core/viewModels/pharmacies_view_model.dart'
import 'package:diplomaticquarterapp/core/model/pharmacies/pharmacies_list_model.dart';
import '../base/base_view.dart';
+import '../feedback/feedback_home_page.dart';
class HomePage extends StatefulWidget {
@override
@@ -18,54 +20,38 @@ class HomePage extends StatefulWidget {
class _HomePageState extends State {
@override
Widget build(BuildContext context) {
- return BaseView(
- onModelReady: (model) => model.getMedicine(),
- builder: (BuildContext context, PharmacyViewModel model, Widget child) =>
- AppScaffold(
- baseViewModel: model,
- body: Column(
- children: [
- InkWell(
- onTap: () {
- model.getMedicine();
- },
- child: Container(
- child: Texts('call api'),
+ return AppScaffold(
+ body: Container(
+ width: double.infinity,
+ child: FractionallySizedBox(
+ widthFactor: 0.95,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ InkWell(
+ onTap: ()=>Navigator.push(context, FadePage(page: FeedbackHomePage())),
+ child: Container(
+ margin: EdgeInsets.only(top: 12),
+ width: double.infinity,
+ height: 180,
+ decoration: BoxDecoration(
+ shape: BoxShape.rectangle,
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(12.0),
+ border: Border.all(
+ color: Colors.grey[400],
+ width: 1.0,
+ ),
+ ),
+ child: Center(
+ child: Texts('Feedback'),
+ ),
+ ),
),
- ),
- Expanded(
- child: _getHospitals(model.pharmacy),
- )
-// BaseView(
-// onModelReady: (dctorViewModel) => dctorViewModel.getHospitals(),
-// builder: (BuildContext context, DoctorViewModel dctorViewModel,
-// Widget child) =>
-// InkWell(
-// onTap: () {
-// dctorViewModel.getHospitals();
-// },
-// child: Container(
-// width: double.infinity,
-// height: 150,
-// child: NetworkBaseView(
-// baseViewModel: dctorViewModel,
-// child: Container(
-// child: Texts('The API 2'),
-// ),
-// ),
-// ),
-// ),
-// ),
- ],
+ ],
+ ),
),
),
);
}
-
- Widget _getHospitals(List hospitals) => ListView.builder(
- itemCount: hospitals.length,
- itemBuilder: (BuildContext context, int index) => Container(
- child: Texts(hospitals[index].itemDes),
- ),
- );
}
diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart
index 2fc0a08a..c3bee59e 100644
--- a/lib/pages/landing/landing_page.dart
+++ b/lib/pages/landing/landing_page.dart
@@ -11,6 +11,7 @@ import 'package:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
+import 'package:permission_handler/permission_handler.dart';
import 'home_page.dart';
class LandingPage extends StatefulWidget {
@@ -39,10 +40,19 @@ class _LandingPageState extends State {
if (token != null) {
checkUserStatus(token);
}
-
+ requestPermissions();
//assert(token != null);
});
}
+ void requestPermissions() async {
+ await [
+ Permission.location,
+ Permission.storage,
+ Permission.camera,
+ Permission.photos,
+ Permission.accessMediaLocation
+ ].request();
+ }
@override
Widget build(BuildContext context) {
@@ -71,11 +81,7 @@ class _LandingPageState extends State {
physics: NeverScrollableScrollPhysics(),
controller: pageController,
children: [
- Container(),
- MedicalProfilePage(),
- MyAdmissionsPage(),
- ToDo()
- ],
+ HomePage(), MedicalProfilePage(), MyAdmissionsPage(), ToDo()],
),
bottomNavigationBar: BottomNavBar(changeIndex: _changeCurrentTab),
);
diff --git a/lib/pages/medical/doctor/doctor_home_page.dart b/lib/pages/medical/doctor/doctor_home_page.dart
index c9bce380..4cce1dc8 100644
--- a/lib/pages/medical/doctor/doctor_home_page.dart
+++ b/lib/pages/medical/doctor/doctor_home_page.dart
@@ -1,5 +1,4 @@
import 'package:diplomaticquarterapp/core/enum/filter_type.dart';
-import 'package:diplomaticquarterapp/core/model/doctor/patient_doctor_appointment.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/my_doctor_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
@@ -9,7 +8,6 @@ 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:intl/intl.dart';
import 'doctor_profile_page.dart';
diff --git a/lib/pages/medical/doctor/doctor_profile_page.dart b/lib/pages/medical/doctor/doctor_profile_page.dart
index 61bfd804..79f8c69e 100644
--- a/lib/pages/medical/doctor/doctor_profile_page.dart
+++ b/lib/pages/medical/doctor/doctor_profile_page.dart
@@ -117,7 +117,7 @@ class _DoctorProfilePageState extends State
alignment: Alignment.center,
child: RatingBar.readOnly(
initialRating:
- model.doctorRating.doctorRate.toDouble() ??
+ model.doctorRating.doctorRate?.toDouble() ??
0.0,
size: 35.0,
filledColor: Colors.yellow[700],
diff --git a/lib/pages/medical/labs/laboratory_result_page.dart b/lib/pages/medical/labs/laboratory_result_page.dart
new file mode 100644
index 00000000..216b8adb
--- /dev/null
+++ b/lib/pages/medical/labs/laboratory_result_page.dart
@@ -0,0 +1,39 @@
+import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart';
+import 'package:diplomaticquarterapp/core/viewModels/medical/labs_view_model.dart';
+import 'package:diplomaticquarterapp/pages/base/base_view.dart';
+import 'package:diplomaticquarterapp/widgets/data_display/medical/laboratory_result_widget.dart';
+import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+
+class LaboratoryResultPage extends StatelessWidget {
+ final PatientLabOrders patientLabOrders;
+
+ LaboratoryResultPage({Key key, this.patientLabOrders});
+
+ @override
+ Widget build(BuildContext context) {
+ return BaseView(
+ onModelReady: (model) => model.getLaboratoryResult(
+ invoiceNo: patientLabOrders.invoiceNo,
+ clinicID: patientLabOrders.clinicID,
+ projectID: patientLabOrders.projectID,
+ orderNo: patientLabOrders.orderNo),
+ builder: (_, model, widget) => AppScaffold(
+ isShowAppBar: true,
+ appBarTitle: 'Laboratory result',
+ baseViewModel: model,
+ body: Scaffold(
+ body: ListView.builder(
+ itemBuilder: (context, index) => LaboratoryResultWidget(
+ onTap: () => model.sendLabReportEmail(patientLabOrder: patientLabOrders),
+ billNo: model.patientLabSpecialResult[index].invoiceNo,
+ details: model.patientLabSpecialResult[index].resultDataHTML,
+ ),
+ itemCount: model.patientLabSpecialResult.length,
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/pages/medical/labs/labs_home_page.dart b/lib/pages/medical/labs/labs_home_page.dart
new file mode 100644
index 00000000..00cd82a1
--- /dev/null
+++ b/lib/pages/medical/labs/labs_home_page.dart
@@ -0,0 +1,104 @@
+import 'package:diplomaticquarterapp/core/enum/filter_type.dart';
+import 'package:diplomaticquarterapp/core/viewModels/medical/labs_view_model.dart';
+import 'package:diplomaticquarterapp/pages/base/base_view.dart';
+import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
+import 'package:diplomaticquarterapp/widgets/data_display/medical/doctor_card.dart';
+import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.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 'laboratory_result_page.dart';
+
+class LabsHomePage extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return BaseView(
+ onModelReady: (model) => model.getLabs(),
+ builder: (context, LabsViewModel model, widget) => AppScaffold(
+ baseViewModel: model,
+ isShowAppBar: true,
+ appBarTitle: 'Lab Orders',
+ body: SingleChildScrollView(
+ physics: BouncingScrollPhysics(),
+ child: FractionallySizedBox(
+ widthFactor: 1.0,
+ child: Center(
+ child: Column(
+ children: [
+ Row(
+ children: [
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: () => model.setFilterType(FilterType.Clinic),
+ child: ListTile(
+ title: const Text('Clinic'),
+ leading: Radio(
+ value: FilterType.Clinic,
+ groupValue: model.filterType,
+ activeColor: Colors.red[800],
+ onChanged: (FilterType value) {
+ model.setFilterType(value);
+ },
+ ),
+ ),
+ ),
+ ),
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: () => model.setFilterType(FilterType.Hospital),
+ child: ListTile(
+ title: const Text('Hospital'),
+ leading: Radio(
+ value: FilterType.Hospital,
+ groupValue: model.filterType,
+ activeColor: Colors.red[800],
+ onChanged: (FilterType value) =>
+ model.setFilterType(value),
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ ...List.generate(
+ model.patientLabOrdersList.length,
+ (index) => AppExpandableNotifier(
+ title: model.patientLabOrdersList[index].filterName,
+ bodyWidget: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: model
+ .patientLabOrdersList[index].patientLabOrdersList
+ .map((labOrder) {
+ return DoctorCard(
+ onTap: () => Navigator.push(
+ context,
+ FadePage(
+ page: LaboratoryResultPage(
+ patientLabOrders: labOrder,
+ ),
+ ),
+ ),
+ name: labOrder.doctorName,
+ profileUrl: labOrder.doctorImageURL,
+ subName: 'Bill No : ${labOrder.invoiceNo}',
+ date: DateUtil.getMonthDayYearDateFormatted(
+ labOrder.orderDate),
+ );
+ }).toList(),
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/pages/medical/medical_profile_page.dart b/lib/pages/medical/medical_profile_page.dart
index ceacaed4..d61ee305 100644
--- a/lib/pages/medical/medical_profile_page.dart
+++ b/lib/pages/medical/medical_profile_page.dart
@@ -1,6 +1,5 @@
-import 'dart:math';
-
import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart';
+import 'package:diplomaticquarterapp/pages/medical/radiology/radiology_home_page.dart';
import 'package:diplomaticquarterapp/widgets/data_display/medical/medical_profile_item.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/others/sliver_app_bar_delegate.dart';
@@ -9,6 +8,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'doctor/doctor_home_page.dart';
+import 'labs/labs_home_page.dart';
class MedicalProfilePage extends StatefulWidget {
@override
@@ -60,9 +60,7 @@ class _MedicalProfilePageState extends State {
Expanded(
flex: 1,
child: InkWell(
- onTap: (){
-
- },
+ onTap: ()=> Navigator.push(context, FadePage(page: LabsHomePage())),
child: MedicalProfileItem(
title: 'Lab',
imagePath: 'lab_result_icon.png',
@@ -76,10 +74,13 @@ class _MedicalProfilePageState extends State {
children: [
Expanded(
flex: 1,
- child: MedicalProfileItem(
- title: 'Radiology',
- imagePath: 'radiology_icon.png',
- subTitle: 'Service',
+ child: InkWell(
+ onTap: () => Navigator.push(context, FadePage(page: RadiologyHomePage())),
+ child: MedicalProfileItem(
+ title: 'Radiology',
+ imagePath: 'radiology_icon.png',
+ subTitle: 'Service',
+ ),
),
),
Expanded(
@@ -130,7 +131,11 @@ class _MedicalProfilePageState extends State {
),
Expanded(
flex: 1,
- child: Container(),
+ child: MedicalProfileItem(
+ title: 'Vital Signs',
+ imagePath: 'medical_history_icon.png',
+ subTitle: 'Reports',
+ ),
)
],
),
diff --git a/lib/pages/medical/prescriptions/pharmacy_for_prescriptions_page.dart b/lib/pages/medical/prescriptions/pharmacy_for_prescriptions_page.dart
new file mode 100644
index 00000000..c2f70091
--- /dev/null
+++ b/lib/pages/medical/prescriptions/pharmacy_for_prescriptions_page.dart
@@ -0,0 +1,100 @@
+import 'package:diplomaticquarterapp/core/model/prescriptions/prescription_report.dart';
+import 'package:diplomaticquarterapp/core/viewModels/medical/prescriptions_view_model.dart';
+import 'package:diplomaticquarterapp/pages/base/base_view.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 'package:maps_launcher/maps_launcher.dart';
+import 'package:url_launcher/url_launcher.dart';
+
+class PharmacyForPrescriptionsPage extends StatelessWidget {
+ final PrescriptionReport prescriptionReport;
+
+ PharmacyForPrescriptionsPage({Key key, this.prescriptionReport});
+
+ @override
+ Widget build(BuildContext context) {
+ return BaseView(
+ onModelReady: (model) => model.getListPharmacyForPrescriptions(itemId: prescriptionReport.itemID),
+ builder: (_, model, widget) => AppScaffold(
+ isShowAppBar: true,
+ appBarTitle: 'Title',
+ baseViewModel: model,
+ body: ListView.builder(
+ itemBuilder: (context, index) => Container(
+ width: double.infinity,
+ margin: EdgeInsets.only(top: 10, left: 10, right: 10),
+ padding: EdgeInsets.all(8.0),
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.all(
+ Radius.circular(10.0),
+ ),
+ border: Border.all(color: Colors.grey[200], width: 0.5),
+ ),
+ child: Row(
+ children: [
+ ClipRRect(
+ borderRadius: BorderRadius.all(Radius.circular(5)),
+ child: Image.network(
+ model.pharmacyPrescriptionsList[index].projectImageURL,
+ fit: BoxFit.cover,
+ width: 60,
+ height: 70,
+ ),
+ ),
+ Expanded(
+ child: Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Texts(model.pharmacyPrescriptionsList[index]
+ .locationDescription),
+ SizedBox(
+ height: 5,
+ ),
+ Texts(model.pharmacyPrescriptionsList[index].cityName),
+ ],
+ ),
+ ),
+ ),
+ InkWell(
+ onTap: () {
+ MapsLauncher.launchCoordinates(
+ double.parse(
+ model.pharmacyPrescriptionsList[index].latitude),
+ double.parse(
+ model.pharmacyPrescriptionsList[index].longitude));
+ },
+ child: Icon(
+ Icons.pin_drop,
+ size: 18,
+ color: Colors.red[900],
+ ),
+ ),
+ SizedBox(
+ width: 15,
+ ),
+ InkWell(
+ onTap: Feedback.wrapForTap((){
+ launch("tel://${model.pharmacyPrescriptionsList[index].phoneNumber}");
+ },context),
+ child: Container(
+ child: Icon(
+ Icons.call,
+ size: 18,
+ color: Colors.red[900],
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ itemCount: model.pharmacyPrescriptionsList.length,
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/pages/medical/prescriptions/prescription_details_page.dart b/lib/pages/medical/prescriptions/prescription_details_page.dart
index 35a9a307..72c82c55 100644
--- a/lib/pages/medical/prescriptions/prescription_details_page.dart
+++ b/lib/pages/medical/prescriptions/prescription_details_page.dart
@@ -1,6 +1,8 @@
import 'package:diplomaticquarterapp/core/model/prescriptions/prescription_report.dart';
+import 'package:diplomaticquarterapp/pages/medical/prescriptions/pharmacy_for_prescriptions_page.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';
@@ -53,16 +55,20 @@ class PrescriptionDetailsPage extends StatelessWidget {
Container(
margin: EdgeInsets.all(8),
child: InkWell(
- onTap: () {},
+ onTap: () => Navigator.push(
+ context,
+ FadePage(
+ page: PharmacyForPrescriptionsPage(
+ prescriptionReport: prescriptionReport),
+ ),
+ ),
child: Center(
child: Column(
children: [
Container(
width: 50,
decoration: BoxDecoration(
- color: Colors.white,
- shape: BoxShape.rectangle
- ),
+ color: Colors.white, shape: BoxShape.rectangle),
child: Column(
children: [
Icon(
@@ -73,9 +79,10 @@ class PrescriptionDetailsPage extends StatelessWidget {
],
),
),
- SizedBox(height: 5,),
+ SizedBox(
+ height: 5,
+ ),
Texts('Ports')
-
],
),
)),
diff --git a/lib/pages/medical/prescriptions/prescriptions_history.dart b/lib/pages/medical/prescriptions/prescriptions_history.dart
deleted file mode 100644
index 1df9a467..00000000
--- a/lib/pages/medical/prescriptions/prescriptions_history.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-import 'package:flutter/cupertino.dart';
-
-class PrescriptionsHistory extends StatefulWidget {
- @override
- _PrescriptionsHistoryState createState() => _PrescriptionsHistoryState();
-}
-
-class _PrescriptionsHistoryState extends State {
- @override
- Widget build(BuildContext context) {
- return Container();
- }
-}
diff --git a/lib/pages/medical/prescriptions/prescriptions_history_details_page.dart b/lib/pages/medical/prescriptions/prescriptions_history_details_page.dart
new file mode 100644
index 00000000..6a2bcdde
--- /dev/null
+++ b/lib/pages/medical/prescriptions/prescriptions_history_details_page.dart
@@ -0,0 +1,108 @@
+import 'package:diplomaticquarterapp/core/model/prescriptions/prescriptions_order.dart';
+import 'package:diplomaticquarterapp/core/viewModels/medical/prescriptions_view_model.dart';
+import 'package:diplomaticquarterapp/pages/base/base_view.dart';
+import 'package:diplomaticquarterapp/widgets/buttons/BottomButton.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';
+
+class PrescriptionsHistoryDetailsPage extends StatelessWidget {
+ final PrescriptionsOrder prescriptionsOrder;
+
+ PrescriptionsHistoryDetailsPage({Key key,this.prescriptionsOrder});
+
+ @override
+ Widget build(BuildContext context) {
+ return BaseView(
+ onModelReady: (model) => model.getPrescriptionReportEnh(prescriptionsOrder: prescriptionsOrder),
+ builder: (_,model,widget) => AppScaffold(
+ isShowAppBar: true,
+ appBarTitle: 'Order History',
+ baseViewModel: model,
+ body: SingleChildScrollView(
+ physics: BouncingScrollPhysics(),
+ child: Container(
+ margin: EdgeInsets.all(15.0),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Table(
+ border: TableBorder.symmetric(
+ inside: BorderSide(width: 0.5),
+ outside: BorderSide(width: 0.5)),
+ children: [
+ TableRow(
+ children: [
+ Container(
+ height: 50,
+ color: Colors.white,
+ child: Center(child: Texts('Order No'),),
+ ),
+ Container(
+ height: 50,
+ color: Colors.white,
+ child: Center(child: Texts('Date'),),
+ ),
+ ]
+ ),
+ TableRow(
+ children: [
+ Container(
+ height: 50,
+ color: Colors.white,
+ child: Center(child: Texts('12655'),),
+ ),
+ Container(
+ height: 50,
+ color: Colors.white,
+ child: Center(child: Texts('2020-7-15'),),
+ ),
+ ]
+ )
+ ],
+ ),
+ SizedBox(height: 15,),
+ ...List.generate(model.prescriptionReportEnhList.length, (index) => Container(
+ margin: EdgeInsets.all(8.0),
+ color: Colors.white,
+ child: Row(
+ children: [
+ ClipRRect(
+ borderRadius: BorderRadius.all(Radius.circular(5)),
+ child: Image.network(
+ model.prescriptionReportEnhList[index].imageSRCUrl,
+ fit: BoxFit.cover,
+ width: 60,
+ height: 70,
+ ),
+ ),
+ Expanded(
+ child: Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Texts(model.prescriptionReportEnhList[index]
+ .itemDescription),
+ ],
+ ),
+ ),
+ ),
+
+ ],
+ ),
+ ))
+ ],
+ ),
+ ),
+ ),
+ bottomSheet: Container(
+ //padding: EdgeInsets.all(8.0),
+ // margin: EdgeInsets.all(8.0),
+ child: BottomButton(label: 'Cancel order',color: Colors.red[300],),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/pages/medical/prescriptions/prescriptions_history_page.dart b/lib/pages/medical/prescriptions/prescriptions_history_page.dart
new file mode 100644
index 00000000..efd9df44
--- /dev/null
+++ b/lib/pages/medical/prescriptions/prescriptions_history_page.dart
@@ -0,0 +1,83 @@
+import 'package:diplomaticquarterapp/core/viewModels/medical/prescriptions_view_model.dart';
+import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_history_details_page.dart';
+import 'package:diplomaticquarterapp/uitl/date_uitl.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';
+
+class PrescriptionsHistoryPage extends StatelessWidget {
+ final PrescriptionsViewModel prescriptionsViewModel;
+
+ PrescriptionsHistoryPage({Key key, this.prescriptionsViewModel});
+
+ @override
+ Widget build(BuildContext context) {
+ return AppScaffold(
+ baseViewModel: prescriptionsViewModel,
+ body: ListView.builder(
+ physics: BouncingScrollPhysics(),
+ itemBuilder: (context, index) => InkWell(
+ onTap: () => Navigator.push(
+ context,
+ FadePage(
+ page: PrescriptionsHistoryDetailsPage(
+ prescriptionsOrder:
+ prescriptionsViewModel.prescriptionsHistory[index],
+ ),
+ ),
+ ),
+ child: Container(
+ padding: EdgeInsets.all(15.0),
+ margin: EdgeInsets.all(8.0),
+ decoration:
+ BoxDecoration(shape: BoxShape.rectangle, color: Colors.white),
+ child: Row(
+ children: [
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Texts(
+ DateUtil.getDayMonthYearHourMinuteDateFormatted(
+ prescriptionsViewModel
+ .prescriptionsHistory[index].createdOn),
+ fontWeight: FontWeight.w300,
+ ),
+ SizedBox(
+ height: 5,
+ ),
+ Texts(
+ 'Order No ${prescriptionsViewModel.prescriptionsHistory[index].iD}'),
+ SizedBox(
+ height: 5,
+ ),
+ Texts(
+ '${prescriptionsViewModel.prescriptionsHistory[index].descriptionN}'),
+ SizedBox(
+ height: 5,
+ ),
+ Texts(
+ 'Order Details',
+ fontWeight: FontWeight.w300,
+ ),
+ SizedBox(
+ height: 5,
+ ),
+ ],
+ ),
+ ),
+ Icon(
+ Icons.arrow_forward_ios,
+ size: 25,
+ )
+ ],
+ ),
+ ),
+ ),
+ itemCount: prescriptionsViewModel.prescriptionsHistory.length,
+ ),
+ );
+ }
+}
diff --git a/lib/pages/medical/prescriptions/prescriptions_home_page.dart b/lib/pages/medical/prescriptions/prescriptions_home_page.dart
index e4c6ca9f..fd903b4b 100644
--- a/lib/pages/medical/prescriptions/prescriptions_home_page.dart
+++ b/lib/pages/medical/prescriptions/prescriptions_home_page.dart
@@ -2,7 +2,7 @@ import 'dart:ui';
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.dart';
+import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_history_page.dart';
import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_page.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@@ -108,8 +108,12 @@ class _HomePrescriptionsPageState extends State
physics: BouncingScrollPhysics(),
controller: _tabController,
children: [
- PrescriptionsPage(prescriptionsViewModel: model,),
- PrescriptionsHistory()
+ PrescriptionsPage(
+ prescriptionsViewModel: model,
+ ),
+ PrescriptionsHistoryPage(
+ prescriptionsViewModel: model,
+ )
],
),
)
diff --git a/lib/pages/medical/radiology/radiology_details_page.dart b/lib/pages/medical/radiology/radiology_details_page.dart
new file mode 100644
index 00000000..cb98fb81
--- /dev/null
+++ b/lib/pages/medical/radiology/radiology_details_page.dart
@@ -0,0 +1,67 @@
+import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
+import 'package:diplomaticquarterapp/core/model/radiology/final_radiology.dart';
+import 'package:diplomaticquarterapp/core/viewModels/medical/radiology_view_model.dart';
+import 'package:diplomaticquarterapp/pages/base/base_view.dart';
+import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
+import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:url_launcher/url_launcher.dart';
+
+class RadiologyDetailsPage extends StatelessWidget {
+ final FinalRadiology finalRadiology;
+
+ RadiologyDetailsPage({Key key, this.finalRadiology});
+
+ @override
+ Widget build(BuildContext context) {
+ return BaseView(
+ onModelReady: (model) => model.getRadImageURL(
+ projectId: finalRadiology.projectID,
+ lineItem: finalRadiology.invoiceLineItemNo,
+ invoiceNo: finalRadiology.invoiceNo),
+ builder: (_, model, widget) => AppScaffold(
+ appBarTitle: 'Radiology Report',
+ isShowAppBar: true,
+ baseViewModel: model,
+ body: SingleChildScrollView(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Text('${finalRadiology.reportData}',textAlign: TextAlign.center,),
+ ],
+ ),
+ ),
+ bottomSheet: Container(
+ width: double.infinity,
+ height: MediaQuery.of(context).size.height * 0.2,
+ color: Colors.grey[100],
+ child: Column(
+ children: [
+ Divider(),
+ Container(
+ width: MediaQuery.of(context).size.width * 0.8,
+ child: Button(
+ onTap: () {
+ launch(model.radImageURL);
+ },
+ label: 'Open Radio Image',
+ backgroundColor: Colors.grey[800],
+ ),
+ ),
+ Container(
+ width: MediaQuery.of(context).size.width * 0.8,
+ child: Button(
+ onTap: () => model.sendRadReportEmail(
+ finalRadiology: finalRadiology),
+ label: 'Send Copy',
+ loading: model.state == ViewState.BusyLocal,
+ backgroundColor: Colors.red[800],
+ ),
+ )
+ ],
+ ),
+ )),
+ );
+ }
+}
diff --git a/lib/pages/medical/radiology/radiology_home_page.dart b/lib/pages/medical/radiology/radiology_home_page.dart
new file mode 100644
index 00000000..3288dcaf
--- /dev/null
+++ b/lib/pages/medical/radiology/radiology_home_page.dart
@@ -0,0 +1,102 @@
+import 'package:diplomaticquarterapp/core/enum/filter_type.dart';
+import 'package:diplomaticquarterapp/core/viewModels/medical/radiology_view_model.dart';
+import 'package:diplomaticquarterapp/pages/base/base_view.dart';
+import 'package:diplomaticquarterapp/pages/medical/radiology/radiology_details_page.dart';
+import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
+import 'package:diplomaticquarterapp/widgets/data_display/medical/doctor_card.dart';
+import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.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 RadiologyHomePage extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return BaseView(
+ onModelReady: (model) => model.getPatientRadOrders(),
+ builder: (_, model, widget) => AppScaffold(
+ isShowAppBar: true,
+ appBarTitle: 'Radiology',
+ baseViewModel: model,
+ body: FractionallySizedBox(
+ widthFactor: 1.0,
+ child: ListView(
+ physics: BouncingScrollPhysics(),
+ children: [
+ Row(
+ children: [
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: () =>
+ model.setFilterType(FilterType.Clinic),
+ child: ListTile(
+ title: const Text('Clinic'),
+ leading: Radio(
+ value: FilterType.Clinic,
+ groupValue: model.filterType,
+ activeColor: Colors.red[800],
+ onChanged: (FilterType value) {
+ model.setFilterType(value);
+ },
+ ),
+ ),
+ ),
+ ),
+ Expanded(
+ flex: 1,
+ child: InkWell(
+ onTap: () => model
+ .setFilterType(FilterType.Hospital),
+ child: ListTile(
+ title: const Text('Hospital'),
+ leading: Radio(
+ value: FilterType.Hospital,
+ groupValue: model.filterType,
+ activeColor: Colors.red[800],
+ onChanged: (FilterType value) {
+ model.setFilterType(value);
+ },
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ ...List.generate(
+ model.finalRadiologyList.length,
+ (index) => AppExpandableNotifier(
+ title: model
+ .finalRadiologyList[index].filterName,
+ bodyWidget: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: model
+ .finalRadiologyList[index].finalRadiologyList
+ .map((radiology) {
+ return InkWell(
+ onTap: () => Navigator.push(
+ context,
+ FadePage(
+ page: RadiologyDetailsPage(finalRadiology: radiology,),
+ ),
+ ),
+ child: DoctorCard(
+ name: radiology.doctorName,
+ profileUrl: radiology.doctorImageURL,
+ subName: '${radiology.projectName} \nBill No ${radiology.invoiceNo}',
+ date: DateUtil.getMonthDayYearDateFormatted(
+ radiology.orderDate),
+ ),
+ );
+ }).toList(),
+ )),
+ )
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/uitl/date_uitl.dart b/lib/uitl/date_uitl.dart
index 635776ac..950cb25c 100644
--- a/lib/uitl/date_uitl.dart
+++ b/lib/uitl/date_uitl.dart
@@ -1,5 +1,4 @@
import 'package:intl/intl.dart';
-
class DateUtil {
/// convert String To Date function
/// [date] String we want to convert
@@ -108,7 +107,6 @@ class DateUtil {
/// get data formatted like 26/4/2020
/// [dateTime] convert DateTime to data formatted
static String getDayMonthYearDateFormatted(DateTime dateTime) {
- print(dateTime);
if (dateTime != null)
return dateTime.day.toString() +
"/" +
@@ -119,6 +117,23 @@ class DateUtil {
return "";
}
+ /// get data formatted like 26/4/2020 10:30
+ /// [dateTime] convert DateTime to data formatted
+ static String getDayMonthYearHourMinuteDateFormatted(DateTime dateTime) {
+ if (dateTime != null)
+ return dateTime.day.toString() +
+ "/" +
+ dateTime.month.toString() +
+ "/" +
+ dateTime.year.toString() +
+ " " +
+ dateTime.hour.toString() +
+ ":" +
+ dateTime.minute.toString();
+ else
+ return "";
+ }
+
static convertISODateToJsonDate(String isoDate) {
return "/Date(" +
DateFormat('mm-dd-yyy')
diff --git a/lib/widgets/bottom_options/BottomSheet.dart b/lib/widgets/bottom_options/BottomSheet.dart
new file mode 100644
index 00000000..66ee36c4
--- /dev/null
+++ b/lib/widgets/bottom_options/BottomSheet.dart
@@ -0,0 +1,141 @@
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
+import 'package:feather_icons_flutter/feather_icons_flutter.dart';
+import 'package:flutter/material.dart';
+import 'package:image_picker/image_picker.dart';
+
+class ImageOptions {
+ static showImageOptions(BuildContext context, Function(String) image) {
+ showModalBottomSheet(
+ backgroundColor: Colors.transparent,
+ context: context,
+ builder: (BuildContext bc) {
+ return _BottomSheet(
+ children: [
+ _BottomSheetItem(
+ title: "Select file souse",
+ ),
+ _BottomSheetItem(
+ title: "Gallery",
+ icon: FeatherIcons.image,
+ onTap: () async {
+ File _image =
+ await ImagePicker.pickImage(source: ImageSource.gallery);
+ String fileName = _image.path;
+ final bytes = File(fileName).readAsBytesSync();
+ String base64Encode = base64.encode(bytes);
+ if (base64Encode != null) {
+ image(base64Encode);
+ }
+ },
+ ),
+ _BottomSheetItem(
+ title: "Camera",
+ icon: FeatherIcons.camera,
+ onTap: () async {
+ File _image =
+ await ImagePicker.pickImage(source: ImageSource.camera);
+ String fileName = _image.path;
+ final bytes = File(fileName).readAsBytesSync();
+ String base64Encode = base64.encode(bytes);
+ if (base64Encode != null) {
+ image(base64Encode);
+ }
+ },
+ ),
+ _BottomSheetItem(
+ title: "Cancel",
+ onTap: (){},
+ )
+ ],
+ );
+ });
+ }
+}
+
+class _BottomSheet extends StatelessWidget {
+ final List children;
+
+ _BottomSheet({Key key, @required this.children}) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ padding: EdgeInsets.symmetric(vertical: 12.0),
+ decoration: BoxDecoration(
+ color: Theme.of(context).backgroundColor,
+ borderRadius: BorderRadius.only(
+ topLeft: Radius.circular(16.0), topRight: Radius.circular(16.0))),
+ child: SafeArea(
+ top: false,
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Container(
+ decoration: BoxDecoration(
+ color: Theme.of(context).dividerColor,
+ borderRadius: BorderRadius.circular(3.0)),
+ width: 40.0,
+ height: 6.0,
+ ),
+ ...children
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+class _BottomSheetItem extends StatelessWidget {
+ final Function onTap;
+ final IconData icon;
+ final String title;
+ final ITEM_COLOR color;
+
+ _BottomSheetItem(
+ {Key key,
+ this.onTap,
+ @required this.title,
+ this.icon,
+ this.color = ITEM_COLOR.primary})
+ : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return InkWell(
+ onTap: () {
+ if (onTap != null) {
+ Navigator.pop(context);
+ onTap();
+ }
+ },
+ child: Padding(
+ padding: EdgeInsets.symmetric(horizontal: 18.0, vertical: 18.0),
+ child: Row(
+ children: [
+ if (icon != null)
+ Icon(
+ icon,
+ color: color == ITEM_COLOR.error
+ ? Theme.of(context).errorColor
+ : Theme.of(context).primaryColor,
+ size: 18.0,
+ ),
+ if (icon != null) SizedBox(width: 24.0),
+ Texts(
+ title ?? "",
+ style: "bodyText2",
+ color: color == ITEM_COLOR.error
+ ? Theme.of(context).errorColor
+ : null,
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+enum ITEM_COLOR { primary, error }
diff --git a/lib/widgets/data_display/medical/doctor_card.dart b/lib/widgets/data_display/medical/doctor_card.dart
index 287d4081..47095cf7 100644
--- a/lib/widgets/data_display/medical/doctor_card.dart
+++ b/lib/widgets/data_display/medical/doctor_card.dart
@@ -46,7 +46,7 @@ class DoctorCard extends StatelessWidget {
children: [
Container(
width: 20,
- height: date ==null ?100 : 130,
+ height: date == null ? 100 : 130,
decoration: BoxDecoration(
color: Colors.red[900],
borderRadius: BorderRadius.only(
@@ -91,22 +91,22 @@ class DoctorCard extends StatelessWidget {
subName,
variant: 'caption3',
),
- billNo != null
- ? Row(
- children: [
- Texts(
- 'Bill No: ',
- variant: 'caption3',
- ),
- Texts(
- billNo,
- variant: 'caption3',
- )
- ],
+ if (billNo != null)
+ Row(
+ children: [
+ Texts(
+ 'Bill No: ',
+ variant: 'caption3',
+ ),
+ Texts(
+ billNo,
+ variant: 'caption3',
)
- : StarRating(
- totalAverage: rat,
- forceStars: true),
+ ],
+ ),
+ if (rat != null)
+ StarRating(
+ totalAverage: rat, forceStars: true),
],
),
),
diff --git a/lib/widgets/data_display/medical/laboratory_result_widget.dart b/lib/widgets/data_display/medical/laboratory_result_widget.dart
new file mode 100644
index 00000000..b84b1076
--- /dev/null
+++ b/lib/widgets/data_display/medical/laboratory_result_widget.dart
@@ -0,0 +1,143 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+
+import '../text.dart';
+
+class LaboratoryResultWidget extends StatefulWidget {
+ final GestureTapCallback onTap;
+ final String billNo;
+ final String details;
+
+ const LaboratoryResultWidget({Key key, this.onTap, this.billNo, this.details})
+ : super(key: key);
+
+ @override
+ _LaboratoryResultWidgetState createState() => _LaboratoryResultWidgetState();
+}
+
+class _LaboratoryResultWidgetState extends State {
+ bool _isShowMore = false;
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ margin: EdgeInsets.all(15),
+ child: Column(
+ children: [
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ margin: EdgeInsets.all(15),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Expanded(
+ child: Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.rectangle,
+ color: Colors.white,
+ borderRadius: BorderRadius.all(
+ Radius.circular(5.0),
+ )),
+ padding: EdgeInsets.all(10.0),
+ margin: EdgeInsets.only(left: 5, right: 5),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Texts('Bill No'),
+ Texts(widget.billNo),
+ ],
+ ),
+ ),
+ ),
+ InkWell(
+ onTap: widget.onTap,
+ child: Container(
+ margin: EdgeInsets.only(left: 5, right: 5),
+ decoration: BoxDecoration(
+ shape: BoxShape.rectangle,
+ color: Colors.red[800],
+ borderRadius: BorderRadius.all(
+ Radius.circular(5.0),
+ )),
+ child: Container(
+ padding: EdgeInsets.all(10.0),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Icon(
+ Icons.email,
+ color: Colors.white,
+ ),
+ Texts(
+ 'Send a copy',
+ color: Colors.white,
+ )
+ ],
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ SizedBox(
+ height: 10,
+ ),
+ InkWell(
+ onTap: () {
+ setState(() {
+ _isShowMore = !_isShowMore;
+ });
+ },
+ child: Container(
+ padding: EdgeInsets.all(10.0),
+ margin: EdgeInsets.only(left: 5, right: 5),
+ decoration: BoxDecoration(
+ shape: BoxShape.rectangle,
+ color: Colors.white,
+ borderRadius: BorderRadius.all(
+ Radius.circular(5.0),
+ )),
+ child: Row(
+ children: [
+ Expanded(child: Texts('Result')),
+ Container(
+ width: 25,
+ height: 25,
+ decoration: BoxDecoration(
+ shape: BoxShape.circle, color: Colors.red[900]),
+ child: Icon(
+ _isShowMore
+ ? Icons.keyboard_arrow_up
+ : Icons.keyboard_arrow_down,
+ color: Colors.white,
+ size: 22,
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ if (_isShowMore)
+ AnimatedContainer(
+ padding: EdgeInsets.all(10.0),
+ margin: EdgeInsets.only(left: 5, right: 5),
+ decoration: BoxDecoration(
+ shape: BoxShape.rectangle,
+ color: Colors.white,
+ borderRadius: BorderRadius.only(
+ bottomLeft: Radius.circular(5.0),
+ bottomRight: Radius.circular(5.0),
+ )),
+ duration: Duration(milliseconds: 7000),
+ child: Text(widget.details?? 'No Data'),
+ )
+ ],
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/widgets/data_display/text.dart b/lib/widgets/data_display/text.dart
index c357b777..4357b291 100644
--- a/lib/widgets/data_display/text.dart
+++ b/lib/widgets/data_display/text.dart
@@ -15,7 +15,7 @@ class Texts extends StatefulWidget {
final String style;
final bool allowExpand;
final double fontSize;
- final String fontWeight;
+ final FontWeight fontWeight;
final double margin;
final double marginTop;
final double marginRight;
@@ -216,7 +216,7 @@ class _TextsState extends State {
? _getFontStyle().copyWith(
fontStyle: widget.italic ? FontStyle.italic : null,
color: widget.color != null ? widget.color : null,
- fontWeight: _getFontWeight(),
+ fontWeight: widget.fontWeight?? _getFontWeight(),
)
: TextStyle(
fontStyle: widget.italic ? FontStyle.italic : null,
@@ -224,7 +224,7 @@ class _TextsState extends State {
fontSize: widget.fontSize ?? _getFontSize(),
letterSpacing:
widget.variant == "overline" ? 1.5 : null,
- fontWeight: _getFontWeight(),
+ fontWeight: widget.fontWeight?? _getFontWeight(),
)),
if (widget.readMore && text.length > widget.maxLength && hidden)
Positioned(
diff --git a/lib/widgets/input/text_field.dart b/lib/widgets/input/text_field.dart
index 5429dd39..0476c352 100644
--- a/lib/widgets/input/text_field.dart
+++ b/lib/widgets/input/text_field.dart
@@ -71,10 +71,12 @@ class TextFields extends StatefulWidget {
this.onTap,
this.fontSize = 16.0,
this.fontWeight = FontWeight.w700,
- this.autoValidate = false})
+ this.autoValidate = false,
+ this.hintColor})
: super(key: key);
final String hintText;
+
// final String initialValue;
final String type;
final bool autoFocus;
@@ -105,6 +107,7 @@ class TextFields extends StatefulWidget {
final EdgeInsets padding;
final bool focus;
final bool borderOnlyError;
+ final Color hintColor;
@override
_TextFieldsState createState() => _TextFieldsState();
@@ -208,6 +211,7 @@ class _TextFieldsState extends State {
blurRadius: focus ? 34.0 : 12.0)
]),
child: TextFormField(
+
keyboardAppearance: Theme.of(context).brightness,
scrollPhysics: BouncingScrollPhysics(),
autovalidate: widget.autoValidate,
@@ -250,7 +254,8 @@ class _TextFieldsState extends State {
hintStyle: TextStyle(
fontSize: widget.fontSize,
fontWeight: widget.fontWeight,
- color: Theme.of(context).hintColor),
+ color: widget.hintColor ?? Theme.of(context).hintColor,
+ ),
contentPadding: widget.padding != null
? widget.padding
: EdgeInsets.symmetric(
diff --git a/lib/widgets/others/app_expandable_notifier.dart b/lib/widgets/others/app_expandable_notifier.dart
index 0e2a3c4b..d582b77b 100644
--- a/lib/widgets/others/app_expandable_notifier.dart
+++ b/lib/widgets/others/app_expandable_notifier.dart
@@ -38,7 +38,7 @@ class AppExpandableNotifier extends StatelessWidget {
header: Padding(
padding: EdgeInsets.all(10),
child: Text(
- title,
+ title?? '',
style: TextStyle(fontWeight: FontWeight.bold,fontSize: 22,),
),
),