From 293c557b54d2c14c0968ec0a1cb7e474bbb29f11 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Sun, 4 Oct 2020 17:55:39 +0300 Subject: [PATCH 01/11] First step from Home health care service --- .../images/AlHabibMedicalService/Wifi-AR.png | Bin 0 -> 18245 bytes lib/config/config.dart | 12 +- .../insert_user_activity_request_model.dart | 0 .../user_progress_for_month_data_model.dart | 0 .../user_progress_for_today_data_model.dart | 0 .../user_progress_for_week_data_model.dart | 0 .../user_progress_request_model.dart | 0 .../HHC_get_all_services_request_modle.dart | 64 +++++++ .../HHC_get_all_services_response_model.dart | 32 ++++ .../PatientERHHCInsertServicesList.dart | 23 +++ ...get_hhc_all_pres_orders_request_model.dart | 64 +++++++ ...et_hhc_all_pres_orders_response_model.dart | 132 +++++++++++++ ...nt_er_insert_pres_order_request_model.dart | 96 ++++++++++ .../AlHabibMedicalService/H2O_service.dart | 10 +- .../home_health_care_service.dart | 45 +++++ .../AlHabibMedicalService/H2O_view_model.dart | 8 +- .../home_health_care_view_model.dart | 51 +++++ lib/locator.dart | 6 +- .../new_Home_health_care_step_one_page.dart | 153 +++++++++++++++ .../new_home_health_care_page.dart | 84 ++++++++ .../home_health_care_index_page.dart | 68 +++++++ .../HomeHealthCare/home_health_care_page.dart | 131 +++++++++++++ .../orders_log_details_page.dart | 96 ++++++++++ .../h2o/Dialog/confirm_add_amount_dialog.dart | 2 +- .../h2o/h2o_index_page.dart | 73 ++++--- .../widgets/h20_floating_action_button.dart | 2 +- lib/pages/landing/home_page.dart | 179 ++++++++++-------- pubspec.yaml | 1 + 28 files changed, 1189 insertions(+), 143 deletions(-) create mode 100644 assets/images/AlHabibMedicalService/Wifi-AR.png rename lib/core/model/AlHabibMedicalService/{ => H2O}/insert_user_activity_request_model.dart (100%) rename lib/core/model/AlHabibMedicalService/{ => H2O}/user_progress_for_month_data_model.dart (100%) rename lib/core/model/AlHabibMedicalService/{ => H2O}/user_progress_for_today_data_model.dart (100%) rename lib/core/model/AlHabibMedicalService/{ => H2O}/user_progress_for_week_data_model.dart (100%) rename lib/core/model/AlHabibMedicalService/{ => H2O}/user_progress_request_model.dart (100%) create mode 100644 lib/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart create mode 100644 lib/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart create mode 100644 lib/core/model/AlHabibMedicalService/HomeHealthCare/PatientERHHCInsertServicesList.dart create mode 100644 lib/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_request_model.dart create mode 100644 lib/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart create mode 100644 lib/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart create mode 100644 lib/core/service/AlHabibMedicalService/home_health_care_service.dart create mode 100644 lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart create mode 100644 lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_Home_health_care_step_one_page.dart create mode 100644 lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart create mode 100644 lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart create mode 100644 lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart create mode 100644 lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart diff --git a/assets/images/AlHabibMedicalService/Wifi-AR.png b/assets/images/AlHabibMedicalService/Wifi-AR.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e2d9af3fd23ab15c89bc14bb4602cf257c7567 GIT binary patch literal 18245 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 literal 0 HcmV?d00001 diff --git a/lib/config/config.dart b/lib/config/config.dart index 02b58b34..a8b8f646 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -243,18 +243,10 @@ const INSERT_CALL_INFO = 'Services/Doctors.svc/REST/InsertCallInfo'; const GET_PATIENT_ALLERGIES = 'Services/Patients.svc/REST/GetPatientAllergies'; - - - - // H2O const H2O_GET_USER_PROGRESS = "Services/H2ORemainder.svc/REST/H2O_GetUserProgress"; const H2O_INSERT_USER_ACTIVITY="Services/H2ORemainder.svc/REST/H2O_InsertUserActivity"; - - - - //E_Referral Services const GET_ALL_RELATIONSHIP_TYPES = "Services/Patients.svc/REST/GetAllRelationshipTypes"; @@ -264,6 +256,10 @@ const GET_ALL_CITIES = 'services/Lists.svc/rest/GetAllCities'; const CREATE_E_REFERRAL = "Services/Patients.svc/REST/CreateEReferral"; const GET_E_REFERRALS = "Services/Patients.svc/REST/GetEReferrals"; +// Home Health Care +const HHC_GET_ALL_SERVICES = "Services/Patients.svc/REST/PatientER_HHC_GetAllServices"; +const GET_PATIENT_ALL_PRES_ORDERS ="/Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders"; + const TIMER_MIN = 10; class AppGlobal { diff --git a/lib/core/model/AlHabibMedicalService/insert_user_activity_request_model.dart b/lib/core/model/AlHabibMedicalService/H2O/insert_user_activity_request_model.dart similarity index 100% rename from lib/core/model/AlHabibMedicalService/insert_user_activity_request_model.dart rename to lib/core/model/AlHabibMedicalService/H2O/insert_user_activity_request_model.dart diff --git a/lib/core/model/AlHabibMedicalService/user_progress_for_month_data_model.dart b/lib/core/model/AlHabibMedicalService/H2O/user_progress_for_month_data_model.dart similarity index 100% rename from lib/core/model/AlHabibMedicalService/user_progress_for_month_data_model.dart rename to lib/core/model/AlHabibMedicalService/H2O/user_progress_for_month_data_model.dart diff --git a/lib/core/model/AlHabibMedicalService/user_progress_for_today_data_model.dart b/lib/core/model/AlHabibMedicalService/H2O/user_progress_for_today_data_model.dart similarity index 100% rename from lib/core/model/AlHabibMedicalService/user_progress_for_today_data_model.dart rename to lib/core/model/AlHabibMedicalService/H2O/user_progress_for_today_data_model.dart diff --git a/lib/core/model/AlHabibMedicalService/user_progress_for_week_data_model.dart b/lib/core/model/AlHabibMedicalService/H2O/user_progress_for_week_data_model.dart similarity index 100% rename from lib/core/model/AlHabibMedicalService/user_progress_for_week_data_model.dart rename to lib/core/model/AlHabibMedicalService/H2O/user_progress_for_week_data_model.dart diff --git a/lib/core/model/AlHabibMedicalService/user_progress_request_model.dart b/lib/core/model/AlHabibMedicalService/H2O/user_progress_request_model.dart similarity index 100% rename from lib/core/model/AlHabibMedicalService/user_progress_request_model.dart rename to lib/core/model/AlHabibMedicalService/H2O/user_progress_request_model.dart diff --git a/lib/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart b/lib/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart new file mode 100644 index 00000000..7b24c149 --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart @@ -0,0 +1,64 @@ +class HHCGetAllServicesRequestModel { + 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; + + HHCGetAllServicesRequestModel( + {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}); + + HHCGetAllServicesRequestModel.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/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart b/lib/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart new file mode 100644 index 00000000..e2f39733 --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart @@ -0,0 +1,32 @@ +class HHCGetAllServicesResponseModel { + int iD; + int serviceID; + String description; + String descriptionN; + bool isActive; + + HHCGetAllServicesResponseModel( + {this.iD, + this.serviceID, + this.description, + this.descriptionN, + this.isActive}); + + HHCGetAllServicesResponseModel.fromJson(Map json) { + iD = json['ID']; + serviceID = json['ServiceID']; + description = json['Description']; + descriptionN = json['DescriptionN']; + isActive = json['IsActive']; + } + + Map toJson() { + final Map data = new Map(); + data['ID'] = this.iD; + data['ServiceID'] = this.serviceID; + data['Description'] = this.description; + data['DescriptionN'] = this.descriptionN; + data['IsActive'] = this.isActive; + return data; + } +} diff --git a/lib/core/model/AlHabibMedicalService/HomeHealthCare/PatientERHHCInsertServicesList.dart b/lib/core/model/AlHabibMedicalService/HomeHealthCare/PatientERHHCInsertServicesList.dart new file mode 100644 index 00000000..bc5a4ddf --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/HomeHealthCare/PatientERHHCInsertServicesList.dart @@ -0,0 +1,23 @@ + +class PatientERHHCInsertServicesList { + int recordID; + int serviceID; + String serviceName; + + PatientERHHCInsertServicesList( + {this.recordID, this.serviceID, this.serviceName}); + + PatientERHHCInsertServicesList.fromJson(Map json) { + recordID = json['RecordID']; + serviceID = json['ServiceID']; + serviceName = json['ServiceName']; + } + + Map toJson() { + final Map data = new Map(); + data['RecordID'] = this.recordID; + data['ServiceID'] = this.serviceID; + data['ServiceName'] = this.serviceName; + return data; + } +} diff --git a/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_request_model.dart b/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_request_model.dart new file mode 100644 index 00000000..ed55b3a9 --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_request_model.dart @@ -0,0 +1,64 @@ +class GetHHCAllPresOrdersRequestModel { + 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; + + GetHHCAllPresOrdersRequestModel( + {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}); + + GetHHCAllPresOrdersRequestModel.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/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart b/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart new file mode 100644 index 00000000..5dedac1c --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart @@ -0,0 +1,132 @@ +class GetHHCAllPresOrdersResponseModel { + int iD; + String patientID; + bool patientOutSA; + bool isOutPatient; + int projectID; + int nearestProjectID; + double longitude; + double latitude; + String appointmentNo; + String dischargeID; + int lineItemNo; + int status; + String description; + String descriptionN; + String createdOn; + int serviceID; + int createdBy; + String editedOn; + int editedBy; + int channel; + dynamic clientRequestID; + bool returnedToQueue; + dynamic pickupDateTime; + dynamic pickupLocationName; + dynamic dropoffLocationName; + int realRRTHaveTransactions; + String nearestProjectDescription; + String nearestProjectDescriptionN; + String projectDescription; + String projectDescriptionN; + + GetHHCAllPresOrdersResponseModel( + {this.iD, + this.patientID, + this.patientOutSA, + this.isOutPatient, + this.projectID, + this.nearestProjectID, + this.longitude, + this.latitude, + this.appointmentNo, + this.dischargeID, + this.lineItemNo, + this.status, + this.description, + this.descriptionN, + this.createdOn, + this.serviceID, + this.createdBy, + this.editedOn, + this.editedBy, + this.channel, + this.clientRequestID, + this.returnedToQueue, + this.pickupDateTime, + this.pickupLocationName, + this.dropoffLocationName, + this.realRRTHaveTransactions, + this.nearestProjectDescription, + this.nearestProjectDescriptionN, + this.projectDescription, + this.projectDescriptionN}); + + GetHHCAllPresOrdersResponseModel.fromJson(Map json) { + iD = json['ID']; + patientID = json['PatientID']; + patientOutSA = json['PatientOutSA']; + isOutPatient = json['IsOutPatient']; + projectID = json['ProjectID']; + nearestProjectID = json['NearestProjectID']; + longitude = json['Longitude']; + latitude = json['Latitude']; + appointmentNo = json['AppointmentNo']; + dischargeID = json['DischargeID']; + lineItemNo = json['LineItemNo']; + status = json['Status']; + description = json['Description']; + descriptionN = json['DescriptionN']; + createdOn = json['CreatedOn']; + serviceID = json['ServiceID']; + createdBy = json['CreatedBy']; + editedOn = json['EditedOn']; + editedBy = json['EditedBy']; + channel = json['Channel']; + clientRequestID = json['ClientRequestID']; + returnedToQueue = json['ReturnedToQueue']; + pickupDateTime = json['PickupDateTime']; + pickupLocationName = json['PickupLocationName']; + dropoffLocationName = json['DropoffLocationName']; + realRRTHaveTransactions = json['RealRRT_HaveTransactions']; + nearestProjectDescription = json['NearestProjectDescription']; + nearestProjectDescriptionN = json['NearestProjectDescriptionN']; + projectDescription = json['ProjectDescription']; + projectDescriptionN = json['ProjectDescriptionN']; + } + + Map toJson() { + final Map data = new Map(); + data['ID'] = this.iD; + data['PatientID'] = this.patientID; + data['PatientOutSA'] = this.patientOutSA; + data['IsOutPatient'] = this.isOutPatient; + data['ProjectID'] = this.projectID; + data['NearestProjectID'] = this.nearestProjectID; + data['Longitude'] = this.longitude; + data['Latitude'] = this.latitude; + data['AppointmentNo'] = this.appointmentNo; + data['DischargeID'] = this.dischargeID; + data['LineItemNo'] = this.lineItemNo; + data['Status'] = this.status; + data['Description'] = this.description; + data['DescriptionN'] = this.descriptionN; + data['CreatedOn'] = this.createdOn; + data['ServiceID'] = this.serviceID; + data['CreatedBy'] = this.createdBy; + data['EditedOn'] = this.editedOn; + data['EditedBy'] = this.editedBy; + data['Channel'] = this.channel; + data['ClientRequestID'] = this.clientRequestID; + data['ReturnedToQueue'] = this.returnedToQueue; + data['PickupDateTime'] = this.pickupDateTime; + data['PickupLocationName'] = this.pickupLocationName; + data['DropoffLocationName'] = this.dropoffLocationName; + data['RealRRT_HaveTransactions'] = this.realRRTHaveTransactions; + data['NearestProjectDescription'] = this.nearestProjectDescription; + data['NearestProjectDescriptionN'] = this.nearestProjectDescriptionN; + data['ProjectDescription'] = this.projectDescription; + data['ProjectDescriptionN'] = this.projectDescriptionN; + return data; + } +} diff --git a/lib/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart b/lib/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart new file mode 100644 index 00000000..8b300bca --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart @@ -0,0 +1,96 @@ +import 'PatientERHHCInsertServicesList.dart'; + +class PatientERInsertPresOrderRequestModel { + 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; + double latitude; + double longitude; + int createdBy; + int orderServiceID; + List patientERHHCInsertServicesList; + + PatientERInsertPresOrderRequestModel( + {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.latitude, + this.longitude, + this.createdBy, + this.orderServiceID, + this.patientERHHCInsertServicesList}); + + PatientERInsertPresOrderRequestModel.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']; + latitude = json['Latitude']; + longitude = json['Longitude']; + createdBy = json['CreatedBy']; + orderServiceID = json['OrderServiceID']; + if (json['PatientER_HHC_InsertServicesList'] != null) { + patientERHHCInsertServicesList = + new List(); + json['PatientER_HHC_InsertServicesList'].forEach((v) { + patientERHHCInsertServicesList + .add(new PatientERHHCInsertServicesList.fromJson(v)); + }); + } + } + + 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['Latitude'] = this.latitude; + data['Longitude'] = this.longitude; + data['CreatedBy'] = this.createdBy; + data['OrderServiceID'] = this.orderServiceID; + if (this.patientERHHCInsertServicesList != null) { + data['PatientER_HHC_InsertServicesList'] = + this.patientERHHCInsertServicesList.map((v) => v.toJson()).toList(); + } + return data; + } +} diff --git a/lib/core/service/AlHabibMedicalService/H2O_service.dart b/lib/core/service/AlHabibMedicalService/H2O_service.dart index d44b50ef..c65221c5 100644 --- a/lib/core/service/AlHabibMedicalService/H2O_service.dart +++ b/lib/core/service/AlHabibMedicalService/H2O_service.dart @@ -1,9 +1,9 @@ import 'package:diplomaticquarterapp/config/config.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/insert_user_activity_request_model.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/user_progress_for_month_data_model.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/user_progress_for_today_data_model.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/user_progress_for_week_data_model.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/user_progress_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/insert_user_activity_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_progress_for_month_data_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_progress_for_today_data_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_progress_for_week_data_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_progress_request_model.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart'; class H2OService extends BaseService { diff --git a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart new file mode 100644 index 00000000..59dae80b --- /dev/null +++ b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart @@ -0,0 +1,45 @@ +import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hHC_all_pres_orders_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; + +import '../base_service.dart'; + +class HomeHealthCareService extends BaseService { + List hhcAllServicesList = List(); + List hhcAllPresOrdersList = List(); + + Future getHHCAllServices( + HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel) async { + hasError = false; + await baseAppClient.post(HHC_GET_ALL_SERVICES, + onSuccess: (dynamic response, int statusCode) { + hhcAllServicesList.clear(); + response['PatientER_HHC_GetAllServicesList'].forEach((data) { + hhcAllServicesList.add(HHCGetAllServicesResponseModel.fromJson(data)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: hHCGetAllServicesRequestModel.toJson()); + } + + + + Future getHHCAllPresOrders() async { + + GetHHCAllPresOrdersRequestModel getHHCAllPresOrdersRequestModel= GetHHCAllPresOrdersRequestModel(); + hasError = false; + await baseAppClient.post(GET_PATIENT_ALL_PRES_ORDERS, + onSuccess: (dynamic response, int statusCode) { + hhcAllPresOrdersList.clear(); + response['PatientER_GetPatientAllPresOrdersList'].forEach((data) { + hhcAllPresOrdersList.add(GetHHCAllPresOrdersResponseModel.fromJson(data)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: getHHCAllPresOrdersRequestModel.toJson()); + } +} diff --git a/lib/core/viewModels/AlHabibMedicalService/H2O_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/H2O_view_model.dart index 73a56d9b..15b00e37 100644 --- a/lib/core/viewModels/AlHabibMedicalService/H2O_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/H2O_view_model.dart @@ -1,8 +1,8 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/insert_user_activity_request_model.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/user_progress_for_month_data_model.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/user_progress_for_today_data_model.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/user_progress_for_week_data_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/insert_user_activity_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_progress_for_month_data_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_progress_for_today_data_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/user_progress_for_week_data_model.dart'; import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/H2O_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; import 'package:charts_flutter/flutter.dart' as charts; diff --git a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart new file mode 100644 index 00000000..8085e4f2 --- /dev/null +++ b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart @@ -0,0 +1,51 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; +import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/home_health_care_service.dart'; +import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; + +import '../../../locator.dart'; + +class HomeHealthCareViewModel extends BaseViewModel { + HomeHealthCareService _homeHealthCareService = + locator(); + + List get hhcAllServicesList => + _homeHealthCareService.hhcAllServicesList; + List get hhcAllPresOrders => + _homeHealthCareService.hhcAllPresOrdersList; + + Future getHHCAllServices() async { + HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel = + new HHCGetAllServicesRequestModel(); + setState(ViewState.Busy); + await _homeHealthCareService + .getHHCAllServices(hHCGetAllServicesRequestModel); + if (_homeHealthCareService.hasError) { + error = _homeHealthCareService.error; + setState(ViewState.Error); + } else { + setState(ViewState.Idle); + } + } + + Future getHHCAllPresOrders() async { + setState(ViewState.Busy); + await _homeHealthCareService.getHHCAllPresOrders(); + if (_homeHealthCareService.hasError) { + error = _homeHealthCareService.error; + setState(ViewState.Error); + } else { + setState(ViewState.Idle); + } + } +} + +/// Sample ordinal data type. +class ChartSeries { + final String y; + final int x; + + ChartSeries(this.y, this.x); +} diff --git a/lib/locator.dart b/lib/locator.dart index 8a7022c6..b9b514d6 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -1,6 +1,8 @@ import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/H2O_service.dart'; +import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/home_health_care_service.dart'; import 'package:diplomaticquarterapp/core/service/qr_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart'; import 'package:diplomaticquarterapp/uitl/navigation_service.dart'; import 'package:get_it/get_it.dart'; @@ -95,6 +97,7 @@ void setupLocator() { locator.registerLazySingleton(() => ErService()); locator.registerLazySingleton(() => AmService()); locator.registerLazySingleton(() => EReferralService()); + locator.registerLazySingleton(() => HomeHealthCareService()); locator.registerLazySingleton(() => PatientSickLeaveService()); @@ -140,7 +143,6 @@ void setupLocator() { locator.registerFactory(() => BloodDonationViewModel()); locator.registerFactory(() => BloodDeatailsViewModel()); locator.registerFactory(() => H2OViewModel()); - locator.registerFactory(() => BloodSugarViewMode()); locator.registerFactory(() => BloodPressureViewMode()); locator.registerFactory(() => WeightPressureViewMode()); @@ -148,4 +150,6 @@ void setupLocator() { locator.registerFactory(() => ActiveMedicationsViewModel()); locator.registerFactory(() => AskDoctorViewModel()); locator.registerFactory(() => AllergiesViewModel()); + locator.registerFactory(() => HomeHealthCareViewModel()); + } diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_Home_health_care_step_one_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_Home_health_care_step_one_page.dart new file mode 100644 index 00000000..37ada2b7 --- /dev/null +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_Home_health_care_step_one_page.dart @@ -0,0 +1,153 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/PatientERHHCInsertServicesList.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; +import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class NewHomeHealthCareStepOnePage extends StatefulWidget { + final PatientERInsertPresOrderRequestModel + patientERInsertPresOrderRequestModel; + final Function changePageViewIndex; + final HomeHealthCareViewModel model; + const NewHomeHealthCareStepOnePage( + {Key key, + this.patientERInsertPresOrderRequestModel, + this.model, + this.changePageViewIndex}) + : super(key: key); + + @override + _NewHomeHealthCareStepOnePageState createState() => + _NewHomeHealthCareStepOnePageState(); +} + +class _NewHomeHealthCareStepOnePageState + extends State { + @override + void initState() { + + widget + .patientERInsertPresOrderRequestModel + .patientERHHCInsertServicesList =[]; + super.initState(); + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + isShowAppBar: false, + baseViewModel: widget.model, + body: SingleChildScrollView( + physics: ScrollPhysics(), + child: Container( + margin: EdgeInsets.all(12), + child: Center( + child: FractionallySizedBox( + widthFactor: 0.94, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 20, + ), + Texts( +// TranslationBase.of(context).advancePaymentLabel, + "Select Home Health Care Services", + textAlign: TextAlign.center, + ), + Column( + children: widget.model.hhcAllServicesList.map((service) { + return Container( + margin: EdgeInsets.only(top: 15), + decoration: BoxDecoration( + border: + Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + children: [ + Row( + children: [ + Checkbox( + value: isServiceSelected( + service.serviceID), + activeColor: Colors.black38, + onChanged: (bool newValue) { + setState(() { + this + .widget + .patientERInsertPresOrderRequestModel + .patientERHHCInsertServicesList + .add(new PatientERHHCInsertServicesList( + recordID: this + .widget + .patientERInsertPresOrderRequestModel + .patientERHHCInsertServicesList + .length, + serviceID: + service.serviceID, + serviceName: + service.description)); + // widget.patientERInsertPresOrderRequestModel + // isPatientInsured = newValue; + }); + }), + Expanded( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Texts( + service.description, + fontSize: 15, + ), + ), + ), + ], + ), + ], + ), + ); + }).toList(), + ) + ], + ), + ), + ), + ), + ), + bottomSheet:Container( + height: MediaQuery.of(context).size.height * 0.10, + width: double.infinity, + child: Column( + children: [ + Container( + width: MediaQuery + .of(context) + .size + .width * 0.9, + child: SecondaryButton( + label: "Next", + disabled: this.widget.patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList.length ==0, + textColor: Theme + .of(context) + .backgroundColor), + ), + ], + ), + )); + } + + isServiceSelected(int serviceId) { + Iterable patientERHHCInsertServicesList = widget + .patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList + .where((element) => serviceId == element.serviceID); + if(patientERHHCInsertServicesList.length > 0) { + return true; + } + return false; + } +} diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart new file mode 100644 index 00000000..7503b575 --- /dev/null +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart @@ -0,0 +1,84 @@ +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/create_e_referral_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; +import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/E-Referral/New_E_Referral/new_e_referral_step_three_page.dart'; +import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/E-Referral/New_E_Referral/new_e_referral_step_two_page.dart'; +import 'package:flutter/material.dart'; + +import 'new_Home_health_care_step_one_page.dart'; + + +class NewHomeHealthCarePage extends StatefulWidget { + + NewHomeHealthCarePage({this.model}); + final HomeHealthCareViewModel model; + + @override + _NewHomeHealthCarePageState createState() => + _NewHomeHealthCarePageState(); +} + +class _NewHomeHealthCarePageState extends State + with TickerProviderStateMixin { + PageController _controller; + int _currentIndex = 1; + int pageSelected = 2; + + + PatientERInsertPresOrderRequestModel patientERInsertPresOrderRequestModel = new PatientERInsertPresOrderRequestModel(); + + @override + void initState() { + super.initState(); + _controller = new PageController(); + } + + @override + void dispose() { + super.dispose(); + } + + changePageViewIndex(pageIndex) { + _controller.jumpToPage(pageIndex); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: SafeArea( + child: SingleChildScrollView( + child: Container( + height: MediaQuery.of(context).size.height * 0.8, + child: PageView( + physics: NeverScrollableScrollPhysics(), + controller: _controller, + onPageChanged: (index) { + setState(() { + _currentIndex = index; + }); + }, + scrollDirection: Axis.horizontal, + children: [ + NewHomeHealthCareStepOnePage( + changePageViewIndex: changePageViewIndex, + patientERInsertPresOrderRequestModel: patientERInsertPresOrderRequestModel, + model: widget.model, + ), + // NewEReferralStepTowPage( + // changePageViewIndex: changePageViewIndex, + // patientERInsertPresOrderRequestModel: patientERInsertPresOrderRequestModel, + // + // ), + // NewEReferralStepThreePage( + // changePageViewIndex: changePageViewIndex, + // patientERInsertPresOrderRequestModel: patientERInsertPresOrderRequestModel, + // + // ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart new file mode 100644 index 00000000..057fe8c3 --- /dev/null +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart @@ -0,0 +1,68 @@ +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; + +import 'home_health_care_page.dart'; + +class HomeHealthCareIndexPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return AppScaffold( + isShowAppBar: true, + appBarTitle: "Service Information", + body: SingleChildScrollView( + padding: EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + "Water Tracker:", + fontWeight: FontWeight.normal, + fontSize: 25, + color: Hexcolor("#60686b"), + ), + SizedBox( + height: 12, + ), + Texts( + "This service is designed to help you to set drinking water goals and track the volume of water you are drinking on a daily basis. This service allows for schedule reminders and offers a basic statistical analysis of the amount of what you have consumed over the course of a day, week or month.", + fontWeight: FontWeight.normal, + fontSize: 17, + ), + SizedBox( + height: 22, + ), + Center( + child: Image.asset( + 'assets/images/AlHabibMedicalService/Wifi-AR.png')), + SizedBox( + height: 77, + ), + ], + )), + bottomSheet: Container( + height: MediaQuery.of(context).size.height * 0.10, + width: double.infinity, + child: Column( + children: [ + Container( + width: MediaQuery.of(context).size.width * 0.9, + child: SecondaryButton( + onTap: () => Navigator.push( + context, + FadePage( + page: HomeHealthCarePage(), + ), + ), + label: "Home Health Care Page", + textColor: Theme.of(context).backgroundColor), + ), + ], + ), + )); + } +} diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart new file mode 100644 index 00000000..21090e6a --- /dev/null +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart @@ -0,0 +1,131 @@ +import 'dart:ui'; + +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/all_habib_medical_services/e_referral_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 'NewHomeHealthCare/new_home_health_care_page.dart'; +import 'orders_log_details_page.dart'; + +class HomeHealthCarePage extends StatefulWidget { + @override + _HomeHealthCarePageState createState() => _HomeHealthCarePageState(); +} + +class _HomeHealthCarePageState 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 BaseView( + onModelReady: (model){ + model.getHHCAllServices(); + model.getHHCAllPresOrders(); + }, + builder: (_, model, widget) => AppScaffold( + isShowAppBar: true, + appBarTitle: "Home Health Care", + 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.37, + child: Center( + child: Texts("Home Health Care"), + ), + ), + Container( + width: MediaQuery.of(context).size.width * 0.37, + child: Center( + child: Texts("Order Log"), + ), + ), + ], + ), + ), + ), + ), + ], + ), + ), + body: Column( + children: [ + Expanded( + child: TabBarView( + physics: BouncingScrollPhysics(), + controller: _tabController, + children: [ + NewHomeHealthCarePage( + model: model, + ), + OrdersLogDetailsPage( + model: model, + ) + ], + ), + ) + ], + ), + ), + ), + ); + } +} diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart new file mode 100644 index 00000000..d0dca45a --- /dev/null +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart @@ -0,0 +1,96 @@ +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; +import 'package:diplomaticquarterapp/pages/Blood/new_text_Field.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; + +class OrdersLogDetailsPage extends StatelessWidget { + final HomeHealthCareViewModel model; + + const OrdersLogDetailsPage({Key key, this.model}) : super(key: key); + @override + Widget build(BuildContext context) { + return AppScaffold( + isShowAppBar: false, + baseViewModel:model, + body: SingleChildScrollView( + physics: ScrollPhysics(), + child: Container( + margin: EdgeInsets.all(12), + child: Center( + child: FractionallySizedBox( + widthFactor: 0.94, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 40, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + + children: model.hhcAllPresOrders.map((order) { + return Container( + width: double.infinity, + margin: EdgeInsets.only(top: 15), + decoration: BoxDecoration( + border: + Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + + Container( + + decoration: BoxDecoration( + border: + Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: NewTextFields( + readOnly: true, + hintText: "Enter Referral Requester Name*", + initialValue: order.iD.toString(), + ), + ), + Texts(order.status.toString()), + Texts(order.status.toString()), + Texts(order.status.toString()), + Texts(order.status.toString()), + ], + ), + ); + }).toList() + ) + ], + ), + ), + ), + ), + ), + bottomSheet:Container( + height: MediaQuery.of(context).size.height * 0.10, + width: double.infinity, + child: Column( + children: [ + Container( + width: MediaQuery + .of(context) + .size + .width * 0.9, + child: SecondaryButton( + label: "Next", + disabled: false, + textColor: Theme + .of(context) + .backgroundColor), + ), + ], + ), + )); + } +} diff --git a/lib/pages/AlHabibMedicalService/h2o/Dialog/confirm_add_amount_dialog.dart b/lib/pages/AlHabibMedicalService/h2o/Dialog/confirm_add_amount_dialog.dart index 2b2873e4..90386827 100644 --- a/lib/pages/AlHabibMedicalService/h2o/Dialog/confirm_add_amount_dialog.dart +++ b/lib/pages/AlHabibMedicalService/h2o/Dialog/confirm_add_amount_dialog.dart @@ -1,4 +1,4 @@ -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/insert_user_activity_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/insert_user_activity_request_model.dart'; import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; diff --git a/lib/pages/AlHabibMedicalService/h2o/h2o_index_page.dart b/lib/pages/AlHabibMedicalService/h2o/h2o_index_page.dart index 9ce35d27..33048b2f 100644 --- a/lib/pages/AlHabibMedicalService/h2o/h2o_index_page.dart +++ b/lib/pages/AlHabibMedicalService/h2o/h2o_index_page.dart @@ -1,6 +1,5 @@ import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/h2o_page.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/CarouselSlider.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'; @@ -18,56 +17,52 @@ class H2OPageIndexPage extends StatelessWidget { padding: EdgeInsets.all(12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Texts( - "Water Tracker:", - fontWeight: FontWeight.normal, - fontSize: 25, - color: Hexcolor("#60686b"), - ), - SizedBox( - height: 12, - ), - Texts( - "This service is designed to help you to set drinking water goals and track the volume of water you are drinking on a daily basis. This service allows for schedule reminders and offers a basic statistical analysis of the amount of what you have consumed over the course of a day, week or month.", - fontWeight: FontWeight.normal, - fontSize: 17, - ), - SizedBox( - height: 22, - ), - Center( - child: SizedBox( - height: MediaQuery.of(context).size.height * 0.55, - width: MediaQuery.of(context).size.width * 0.50, - child: CarouselSlider( - imagesUrlList: [ - "https://hmgwebservices.com/Images/MobileApp/images-info-home/referal/en/0.png", - "https://hmgwebservices.com/Images/MobileApp/images-info-home/referal/en/1.png" - ], - ), - ), - ), - SizedBox( - height: 77, - ), - ], - )), + children: [ + Texts( + "Water Tracker:", + fontWeight: FontWeight.normal, + fontSize: 25, + color: Hexcolor("#60686b"), + ), + SizedBox( + height: 12, + ), + Texts( + "This service is designed to help you to set drinking water goals and track the volume of water you are drinking on a daily basis. This service allows for schedule reminders and offers a basic statistical analysis of the amount of what you have consumed over the course of a day, week or month.", + fontWeight: FontWeight.normal, + fontSize: 17, + ), + SizedBox( + height: 22, + ), + Center( + child: Image.asset( + 'assets/images/AlHabibMedicalService/Wifi-AR.png')), + SizedBox( + height: 77, + ), + ], + )), bottomSheet: Container( height: MediaQuery.of(context).size.height * 0.10, width: double.infinity, child: Column( children: [ Container( - width: MediaQuery.of(context).size.width * 0.9, + width: MediaQuery + .of(context) + .size + .width * 0.9, child: SecondaryButton( onTap: () => Navigator.push(context, FadePage(page: H2OPage())), label: "Water Tracker", - textColor: Theme.of(context).backgroundColor), + textColor: Theme + .of(context) + .backgroundColor), ), ], ), - )); + ),); } } diff --git a/lib/pages/AlHabibMedicalService/h2o/widgets/h20_floating_action_button.dart b/lib/pages/AlHabibMedicalService/h2o/widgets/h20_floating_action_button.dart index a2fa1adf..7eaed1a8 100644 --- a/lib/pages/AlHabibMedicalService/h2o/widgets/h20_floating_action_button.dart +++ b/lib/pages/AlHabibMedicalService/h2o/widgets/h20_floating_action_button.dart @@ -1,6 +1,6 @@ import 'dart:math' as math; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/insert_user_activity_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/H2O/insert_user_activity_request_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/Dialog/confirm_add_amount_dialog.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; diff --git a/lib/pages/landing/home_page.dart b/lib/pages/landing/home_page.dart index 59c0a167..f5197941 100644 --- a/lib/pages/landing/home_page.dart +++ b/lib/pages/landing/home_page.dart @@ -1,6 +1,7 @@ import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/all_habib_medical_service_page.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/hmg_service.dart'; import 'package:diplomaticquarterapp/pages/ErService/ErOptions.dart'; @@ -347,99 +348,109 @@ class _HomePageState extends State { ), ], ), - Container( - margin: EdgeInsets.only(left: 15, right: 15), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - DashboardItem( - child: Center( - child: Padding( - padding: const EdgeInsets.all(15.0), - child: Column( - children: [ - Image.asset( - 'assets/images/Dr_Schedule_report.png', - width: 50, - height: 50, - ), - SizedBox( - height: 13.5, - ), - Texts( - TranslationBase.of(context) - .homeHealthCareService, - textAlign: TextAlign.center, - color: Colors.white, - bold: true, - fontSize: SizeConfig.textMultiplier * 1.7, - ) - ], + InkWell( + onTap: (){ + Navigator.push( + context, + FadePage( + page: HomeHealthCareIndexPage(), + ), + ); + }, + child: Container( + margin: EdgeInsets.only(left: 15, right: 15), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + DashboardItem( + child: Center( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Image.asset( + 'assets/images/Dr_Schedule_report.png', + width: 50, + height: 50, + ), + SizedBox( + height: 13.5, + ), + Texts( + TranslationBase.of(context) + .homeHealthCareService, + textAlign: TextAlign.center, + color: Colors.white, + bold: true, + fontSize: SizeConfig.textMultiplier * 1.7, + ) + ], + ), ), ), + height: MediaQuery.of(context).size.width * 0.4, + imageName: 'home_healthcare_service_bg.png', + opacity: 0.5, ), - height: MediaQuery.of(context).size.width * 0.4, - imageName: 'home_healthcare_service_bg.png', - opacity: 0.5, - ), - DashboardItem( - child: Center( - child: Padding( - padding: const EdgeInsets.all(15.0), - child: Column( - children: [ - Image.asset( - 'assets/images/pharmacy_logo.png', - width: 40, - height: 40, - ), - SizedBox( - height: 20, - ), - Texts( - TranslationBase.of(context).onlinePharmacy, - textAlign: TextAlign.center, - color: Colors.white, - bold: true, - fontSize: SizeConfig.textMultiplier * 2.0, - ) - ], + DashboardItem( + child: Center( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Image.asset( + 'assets/images/pharmacy_logo.png', + width: 40, + height: 40, + ), + SizedBox( + height: 20, + ), + Texts( + TranslationBase.of(context).onlinePharmacy, + textAlign: TextAlign.center, + color: Colors.white, + bold: true, + fontSize: SizeConfig.textMultiplier * 2.0, + ) + ], + ), ), ), + height: MediaQuery.of(context).size.width * 0.4, + imageName: 'al-habib_onlne_pharmacy_bg.png', ), - height: MediaQuery.of(context).size.width * 0.4, - imageName: 'al-habib_onlne_pharmacy_bg.png', - ), - DashboardItem( - child: Center( - child: Padding( - padding: const EdgeInsets.all(15.0), - child: Column( - children: [ - Image.asset( - 'assets/images/comprehensive_medical_checkup_logo.png', - width: 50, - height: 50, - ), - SizedBox( - height: 15, - ), - Texts( - TranslationBase.of(context).emergencyService, - textAlign: TextAlign.center, - color: Colors.white, - bold: true, - fontSize: SizeConfig.textMultiplier * 2.0, - ) - ], + DashboardItem( + child: Center( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Image.asset( + 'assets/images/comprehensive_medical_checkup_logo.png', + width: 50, + height: 50, + ), + SizedBox( + height: 15, + ), + Texts( + TranslationBase.of(context).emergencyService, + textAlign: TextAlign.center, + color: Colors.white, + bold: true, + fontSize: SizeConfig.textMultiplier * 2.0, + ) + ], + ), ), ), + height: MediaQuery.of(context).size.width * 0.4, + color: Hexcolor("#747C80"), + imageName: 'emergency_service_image.png', ), - height: MediaQuery.of(context).size.width * 0.4, - color: Hexcolor("#747C80"), - imageName: 'emergency_service_image.png', - ), - ], + ], + ), ), ), SizedBox( diff --git a/pubspec.yaml b/pubspec.yaml index 8bc2c52a..51b1e1e5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -159,6 +159,7 @@ flutter: - assets/json/ - assets/sounds/ - assets/tracker/ + - assets/images/AlHabibMedicalService/ fonts: From 0b9a834673e25a3c29801780394b870c49df1376 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Mon, 5 Oct 2020 11:35:17 +0300 Subject: [PATCH 02/11] Finish cancel order --- lib/config/config.dart | 1 + .../update_pres_oreder_request_model.dart | 80 ++++++ .../home_health_care_service.dart | 15 +- .../home_health_care_view_model.dart | 15 ++ .../Dialog/confirm_cancel_order_dialog.dart | 103 ++++++++ .../orders_log_details_page.dart | 250 +++++++++++++++--- 6 files changed, 425 insertions(+), 39 deletions(-) create mode 100644 lib/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart create mode 100644 lib/pages/AlHabibMedicalService/HomeHealthCare/Dialog/confirm_cancel_order_dialog.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index a8b8f646..da39c40a 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -259,6 +259,7 @@ const GET_E_REFERRALS = "Services/Patients.svc/REST/GetEReferrals"; // Home Health Care const HHC_GET_ALL_SERVICES = "Services/Patients.svc/REST/PatientER_HHC_GetAllServices"; const GET_PATIENT_ALL_PRES_ORDERS ="/Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders"; +const PATIENT_ER_UPDATE_PRES_ORDER ="Services/Patients.svc/REST/PatientER_UpdatePresOrder"; const TIMER_MIN = 10; diff --git a/lib/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart b/lib/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart new file mode 100644 index 00000000..3b0ef151 --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart @@ -0,0 +1,80 @@ +class UpdatePresOrderRequestModel { + 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 presOrderID; + int presOrderStatus; + int editedBy; + String rejectionReason; + + UpdatePresOrderRequestModel( + {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.presOrderID, + this.presOrderStatus, + this.editedBy, + this.rejectionReason}); + + UpdatePresOrderRequestModel.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']; + presOrderID = json['PresOrderID']; + presOrderStatus = json['PresOrderStatus']; + editedBy = json['EditedBy']; + rejectionReason = json['RejectionReason']; + } + + 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['PresOrderID'] = this.presOrderID; + data['PresOrderStatus'] = this.presOrderStatus; + data['EditedBy'] = this.editedBy; + data['RejectionReason'] = this.rejectionReason; + return data; + } +} diff --git a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart index 59dae80b..6922f43a 100644 --- a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart +++ b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart @@ -3,13 +3,14 @@ import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealth import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hHC_all_pres_orders_request_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; import '../base_service.dart'; class HomeHealthCareService extends BaseService { List hhcAllServicesList = List(); List hhcAllPresOrdersList = List(); - + bool isOrderUpdated; Future getHHCAllServices( HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel) async { hasError = false; @@ -42,4 +43,16 @@ class HomeHealthCareService extends BaseService { super.error = error; }, body: getHHCAllPresOrdersRequestModel.toJson()); } + + Future updateHHCPresOrder(UpdatePresOrderRequestModel updatePresOrderRequestModel) async { + + hasError = false; + await baseAppClient.post(PATIENT_ER_UPDATE_PRES_ORDER, + onSuccess: (dynamic response, int statusCode) { + isOrderUpdated = true; + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: updatePresOrderRequestModel.toJson()); + } } diff --git a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart index 8085e4f2..f9b94415 100644 --- a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart @@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/home_health_care_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; @@ -16,6 +17,9 @@ class HomeHealthCareViewModel extends BaseViewModel { List get hhcAllPresOrders => _homeHealthCareService.hhcAllPresOrdersList; + bool get isOrderUpdated => + _homeHealthCareService.isOrderUpdated; + Future getHHCAllServices() async { HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel = new HHCGetAllServicesRequestModel(); @@ -40,6 +44,17 @@ class HomeHealthCareViewModel extends BaseViewModel { setState(ViewState.Idle); } } + + Future updateHHCPresOrder(UpdatePresOrderRequestModel updatePresOrderRequestModel) async { + setState(ViewState.BusyLocal); + await _homeHealthCareService.updateHHCPresOrder(updatePresOrderRequestModel); + if (_homeHealthCareService.hasError) { + error = _homeHealthCareService.error; + setState(ViewState.ErrorLocal); + } else { + setState(ViewState.Idle); + } + } } /// Sample ordinal data type. diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/Dialog/confirm_cancel_order_dialog.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/Dialog/confirm_cancel_order_dialog.dart new file mode 100644 index 00000000..17be8edd --- /dev/null +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/Dialog/confirm_cancel_order_dialog.dart @@ -0,0 +1,103 @@ +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// ignore: must_be_immutable +class ConfirmCancelOrderDialog extends StatefulWidget { + final HomeHealthCareViewModel model; + final Function onTap; + + + ConfirmCancelOrderDialog( + {Key key, this.model, this.onTap}); + + @override + _ConfirmCancelOrderDialogState createState() => _ConfirmCancelOrderDialogState(); +} + +class _ConfirmCancelOrderDialogState extends State { + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return SimpleDialog( + contentPadding: EdgeInsets.fromLTRB(28.0, 24.0, 28.0, 0.0), + title: Center( + child: Texts( + "Confirm", + color: Colors.black, + ), + ), + children: [ + Column( + children: [ + Divider(), + Center( + child: Texts( + "Are you sure!! want to cancel this order", + color: Colors.grey, + ), + ), + SizedBox( + height: 5.0, + ), + 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( + TranslationBase.of(context).cancel.toUpperCase(), + color: Colors.red, + ), + ), + ), + ), + ), + ), + Container( + width: 1, + height: 30, + color: Colors.grey[500], + ), + Expanded( + flex: 1, + child: InkWell( + onTap: () async{ + widget.onTap(); + Navigator.pop(context); + }, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Center( + child: Texts( + TranslationBase.of(context).ok, + fontWeight: FontWeight.w400, + )), + ), + ), + ), + ], + ) + ], + ) + ], + ); + } +} + + + diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart index d0dca45a..3f15c7d3 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart @@ -1,20 +1,51 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; -import 'package:diplomaticquarterapp/pages/Blood/new_text_Field.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; -import 'package:hexcolor/hexcolor.dart'; + +import 'Dialog/confirm_cancel_order_dialog.dart'; class OrdersLogDetailsPage extends StatelessWidget { final HomeHealthCareViewModel model; const OrdersLogDetailsPage({Key key, this.model}) : super(key: key); + @override Widget build(BuildContext context) { + void showConfirmMessage( + HomeHealthCareViewModel model, GetHHCAllPresOrdersResponseModel order) { + showDialog( + context: context, + child: ConfirmCancelOrderDialog( + model: model, + onTap: () async { + UpdatePresOrderRequestModel updatePresOrderRequestModel = + UpdatePresOrderRequestModel( + presOrderID: order.iD, + rejectionReason: "", + presOrderStatus: 4, editedBy: 3); + await model.updateHHCPresOrder(updatePresOrderRequestModel); + if(model.state == ViewState.ErrorLocal) { + Utils.showErrorToast(model.error); + } else { + AppToast.showSuccessToast(message: "Done Successfully"); + await model.getHHCAllPresOrders(); + await model.getHHCAllServices(); + } + }, + )); + } + return AppScaffold( isShowAppBar: false, - baseViewModel:model, + baseViewModel: model, body: SingleChildScrollView( physics: ScrollPhysics(), child: Container( @@ -26,46 +57,189 @@ class OrdersLogDetailsPage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( - height: 40, + height: 50, ), Column( crossAxisAlignment: CrossAxisAlignment.start, - children: model.hhcAllPresOrders.map((order) { - return Container( - width: double.infinity, - margin: EdgeInsets.only(top: 15), - decoration: BoxDecoration( - border: - Border.all(color: Colors.grey, width: 1), - borderRadius: BorderRadius.circular(12), - color: Colors.white), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - - Container( - - decoration: BoxDecoration( - border: - Border.all(color: Colors.grey, width: 1), - borderRadius: BorderRadius.circular(12), - color: Colors.white), - child: NewTextFields( - readOnly: true, - hintText: "Enter Referral Requester Name*", - initialValue: order.iD.toString(), + return Container( + width: double.infinity, + margin: EdgeInsets.only(top: 15), + decoration: BoxDecoration( + border: + Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 12, + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Request ID", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + order.iD.toString(), + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Status", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + order.description, + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Pickup Date", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + DateUtil.getDayMonthYearDateFormatted( + DateUtil.convertStringToDate( + order.createdOn)), + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Location", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + order.nearestProjectDescription + .toString() ?? + order.nearestProjectDescriptionN + .toString(), + fontSize: 22, + ), + ], + ), + ), + SizedBox( + height: 12, + ), + if (order.status == 1) + Center( + child: Container( + width: MediaQuery + .of(context) + .size + .width * + 0.85, + child: SecondaryButton( + label: "Cancel".toUpperCase(), + onTap: () { + showConfirmMessage(model, order); + } + , + color: Colors.red[800], + disabled: false, + textColor: Theme + .of(context) + .backgroundColor), + ), + ), + SizedBox( + height: 12, ), - ), - Texts(order.status.toString()), - Texts(order.status.toString()), - Texts(order.status.toString()), - Texts(order.status.toString()), - ], - ), - ); - }).toList() - ) + ], + ), + ); + }).toList()) ], ), ), From 31b217aa192b18561620fca8073c84ac9ba87cf6 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 6 Oct 2020 14:05:50 +0300 Subject: [PATCH 03/11] First step from CMC --- lib/config/config.dart | 3 +- .../get_cmc_service_request_model.dart | 0 .../get_cmc_service_response_model.dart | 44 +++ ...rder_detail_by_order_iD_request_model.dart | 68 ++++ ...der_detail_by_order_iD_response_model.dart | 52 +++ .../AlHabibMedicalService/cmc_service.dart | 79 +++++ .../home_health_care_service.dart | 20 ++ .../AlHabibMedicalService/cmc_view_model.dart | 86 +++++ .../home_health_care_view_model.dart | 44 ++- lib/locator.dart | 6 +- .../Dialog/confirm_cancel_order_dialog.dart | 104 ++++++ .../NewCMC/new_cmc_page.dart | 296 ++++++++++++++++++ .../NewCMC/new_cmc_step_one_page.dart | 151 +++++++++ .../cmc_index_page.dart | 67 ++++ .../ComprehensiveMedicalCheckup/cmc_page.dart | 131 ++++++++ .../orders_log_details_page.dart | 252 +++++++++++++++ .../new_home_health_care_page.dart | 227 +++++++++++++- .../orders_log_details_page.dart | 37 +-- lib/pages/landing/home_page.dart | 198 ++++++------ 19 files changed, 1720 insertions(+), 145 deletions(-) create mode 100644 lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_request_model.dart create mode 100644 lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart create mode 100644 lib/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart create mode 100644 lib/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart create mode 100644 lib/core/service/AlHabibMedicalService/cmc_service.dart create mode 100644 lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart create mode 100644 lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/Dialog/confirm_cancel_order_dialog.dart create mode 100644 lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart create mode 100644 lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart create mode 100644 lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart create mode 100644 lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart create mode 100644 lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index da39c40a..b2e108a6 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -258,8 +258,9 @@ const GET_E_REFERRALS = "Services/Patients.svc/REST/GetEReferrals"; // Home Health Care const HHC_GET_ALL_SERVICES = "Services/Patients.svc/REST/PatientER_HHC_GetAllServices"; -const GET_PATIENT_ALL_PRES_ORDERS ="/Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders"; +const GET_PATIENT_ALL_PRES_ORDERS ="Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders"; const PATIENT_ER_UPDATE_PRES_ORDER ="Services/Patients.svc/REST/PatientER_UpdatePresOrder"; +const GET_ORDER_DETAIL_BY_ID ="Services/Patients.svc/REST/PatientER_HHC_GetTransactionsForOrder"; const TIMER_MIN = 10; diff --git a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_request_model.dart b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_request_model.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart new file mode 100644 index 00000000..dbf9e9a3 --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart @@ -0,0 +1,44 @@ +class GetCMCServicesResponseModel { + String description; + String descriptionN; + int iD; + bool isActive; + int price; + int serviceID; + int totalPrice; + int vAT; + + GetCMCServicesResponseModel( + {this.description, + this.descriptionN, + this.iD, + this.isActive, + this.price, + this.serviceID, + this.totalPrice, + this.vAT}); + + GetCMCServicesResponseModel.fromJson(Map json) { + description = json['Description']; + descriptionN = json['DescriptionN']; + iD = json['ID']; + isActive = json['IsActive']; + price = json['Price']; + serviceID = json['ServiceID']; + totalPrice = json['TotalPrice']; + vAT = json['VAT']; + } + + Map toJson() { + final Map data = new Map(); + data['Description'] = this.description; + data['DescriptionN'] = this.descriptionN; + data['ID'] = this.iD; + data['IsActive'] = this.isActive; + data['Price'] = this.price; + data['ServiceID'] = this.serviceID; + data['TotalPrice'] = this.totalPrice; + data['VAT'] = this.vAT; + return data; + } +} diff --git a/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart b/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart new file mode 100644 index 00000000..04b69b98 --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart @@ -0,0 +1,68 @@ +class GetOrderDetailByOrderIDRequestModel { + 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 presOrderID; + + GetOrderDetailByOrderIDRequestModel( + {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.presOrderID}); + + GetOrderDetailByOrderIDRequestModel.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']; + presOrderID = json['PresOrderID']; + } + + 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['PresOrderID'] = this.presOrderID; + return data; + } +} diff --git a/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart b/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart new file mode 100644 index 00000000..6fc31ce8 --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart @@ -0,0 +1,52 @@ +class GetOrderDetailByOrderIDResponseModel { + int iD; + int presOrderID; + int hHCServiceID; + int createdBy; + String createdOn; + int editedBy; + String editedOn; + bool isActive; + String description; + String descriptionN; + + GetOrderDetailByOrderIDResponseModel( + {this.iD, + this.presOrderID, + this.hHCServiceID, + this.createdBy, + this.createdOn, + this.editedBy, + this.editedOn, + this.isActive, + this.description, + this.descriptionN}); + + GetOrderDetailByOrderIDResponseModel.fromJson(Map json) { + iD = json['ID']; + presOrderID = json['PresOrderID']; + hHCServiceID = json['HHC_ServiceID']; + createdBy = json['CreatedBy']; + createdOn = json['CreatedOn']; + editedBy = json['EditedBy']; + editedOn = json['EditedOn']; + isActive = json['IsActive']; + description = json['Description']; + descriptionN = json['DescriptionN']; + } + + Map toJson() { + final Map data = new Map(); + data['ID'] = this.iD; + data['PresOrderID'] = this.presOrderID; + data['HHC_ServiceID'] = this.hHCServiceID; + data['CreatedBy'] = this.createdBy; + data['CreatedOn'] = this.createdOn; + data['EditedBy'] = this.editedBy; + data['EditedOn'] = this.editedOn; + data['IsActive'] = this.isActive; + data['Description'] = this.description; + data['DescriptionN'] = this.descriptionN; + return data; + } +} diff --git a/lib/core/service/AlHabibMedicalService/cmc_service.dart b/lib/core/service/AlHabibMedicalService/cmc_service.dart new file mode 100644 index 00000000..61250c2c --- /dev/null +++ b/lib/core/service/AlHabibMedicalService/cmc_service.dart @@ -0,0 +1,79 @@ +import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hHC_all_pres_orders_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; + +import '../base_service.dart'; + +class CMCService extends BaseService { + List hhcAllServicesList = List(); + List hhcAllPresOrdersList = List(); + + List hhcAllOrderDetail = List(); + + bool isOrderUpdated; + + Future getHHCAllServices( + HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel) async { + hasError = false; + await baseAppClient.post(HHC_GET_ALL_SERVICES, + onSuccess: (dynamic response, int statusCode) { + hhcAllServicesList.clear(); + response['PatientER_HHC_GetAllServicesList'].forEach((data) { + hhcAllServicesList.add(HHCGetAllServicesResponseModel.fromJson(data)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: hHCGetAllServicesRequestModel.toJson()); + } + + + + Future getHHCAllPresOrders() async { + + GetHHCAllPresOrdersRequestModel getHHCAllPresOrdersRequestModel= GetHHCAllPresOrdersRequestModel(); + hasError = false; + await baseAppClient.post(GET_PATIENT_ALL_PRES_ORDERS, + onSuccess: (dynamic response, int statusCode) { + hhcAllPresOrdersList.clear(); + response['PatientER_GetPatientAllPresOrdersList'].forEach((data) { + hhcAllPresOrdersList.add(GetHHCAllPresOrdersResponseModel.fromJson(data)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: getHHCAllPresOrdersRequestModel.toJson()); + } + + Future getOrderDetailByOrderID(GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel) async { + + hasError = false; + await baseAppClient.post(GET_ORDER_DETAIL_BY_ID, + onSuccess: (dynamic response, int statusCode) { + hhcAllOrderDetail.clear(); + response['PatientER_HHC_GetTransactionsForOrderList'].forEach((data) { + hhcAllOrderDetail.add(GetOrderDetailByOrderIDResponseModel.fromJson(data)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: getOrderDetailByOrderIDRequestModel.toJson()); + } + + Future updateHHCPresOrder(UpdatePresOrderRequestModel updatePresOrderRequestModel) async { + + hasError = false; + await baseAppClient.post(PATIENT_ER_UPDATE_PRES_ORDER, + onSuccess: (dynamic response, int statusCode) { + isOrderUpdated = true; + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: updatePresOrderRequestModel.toJson()); + } +} diff --git a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart index 6922f43a..cd9289bc 100644 --- a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart +++ b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart @@ -3,6 +3,8 @@ import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealth import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hHC_all_pres_orders_request_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; import '../base_service.dart'; @@ -10,6 +12,9 @@ import '../base_service.dart'; class HomeHealthCareService extends BaseService { List hhcAllServicesList = List(); List hhcAllPresOrdersList = List(); + + List hhcAllOrderDetail = List(); + bool isOrderUpdated; Future getHHCAllServices( HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel) async { @@ -44,6 +49,21 @@ class HomeHealthCareService extends BaseService { }, body: getHHCAllPresOrdersRequestModel.toJson()); } + Future getOrderDetailByOrderID(GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel) async { + + hasError = false; + await baseAppClient.post(GET_ORDER_DETAIL_BY_ID, + onSuccess: (dynamic response, int statusCode) { + hhcAllOrderDetail.clear(); + response['PatientER_HHC_GetTransactionsForOrderList'].forEach((data) { + hhcAllOrderDetail.add(GetOrderDetailByOrderIDResponseModel.fromJson(data)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: getOrderDetailByOrderIDRequestModel.toJson()); + } + Future updateHHCPresOrder(UpdatePresOrderRequestModel updatePresOrderRequestModel) async { hasError = false; diff --git a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart new file mode 100644 index 00000000..1d350a03 --- /dev/null +++ b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart @@ -0,0 +1,86 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; +import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/cmc_service.dart'; +import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; + +import '../../../locator.dart'; + +class CMCViewModel extends BaseViewModel { + CMCService _homeHealthCareService = + locator(); + + List get hhcAllServicesList => + _homeHealthCareService.hhcAllServicesList; + + List get hhcAllPresOrders => + _homeHealthCareService.hhcAllPresOrdersList; + + List get hhcAllOrderDetail => + _homeHealthCareService.hhcAllOrderDetail; + + bool get isOrderUpdated => _homeHealthCareService.isOrderUpdated; + + Future getHHCAllServices() async { + HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel = + new HHCGetAllServicesRequestModel(); + setState(ViewState.Busy); + await _homeHealthCareService + .getHHCAllServices(hHCGetAllServicesRequestModel); + if (_homeHealthCareService.hasError) { + error = _homeHealthCareService.error; + setState(ViewState.Error); + } else { + setState(ViewState.Idle); + } + } + + Future getHHCAllPresOrders() async { + setState(ViewState.Busy); + await _homeHealthCareService.getHHCAllPresOrders(); + if (_homeHealthCareService.hasError) { + error = _homeHealthCareService.error; + setState(ViewState.Error); + } else { + var pendingOrder = _homeHealthCareService.hhcAllPresOrdersList + .firstWhere((element) => element.status == 1 || element.status == 2, + orElse: () => null); + if (pendingOrder != null) + await getOrderDetailByOrderID(pendingOrder); + setState(ViewState.Idle); + } + } + + Future updateHHCPresOrder( + UpdatePresOrderRequestModel updatePresOrderRequestModel) async { + setState(ViewState.BusyLocal); + await _homeHealthCareService.updateHHCPresOrder( + updatePresOrderRequestModel); + if (_homeHealthCareService.hasError) { + error = _homeHealthCareService.error; + setState(ViewState.ErrorLocal); + } else { + setState(ViewState.Idle); + } + } + + Future getOrderDetailByOrderID(GetHHCAllPresOrdersResponseModel order) async { + GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel = GetOrderDetailByOrderIDRequestModel( + presOrderID: order.iD); + setState(ViewState.Busy); + await _homeHealthCareService.getOrderDetailByOrderID( + getOrderDetailByOrderIDRequestModel); + if (_homeHealthCareService.hasError) { + error = _homeHealthCareService.error; + setState(ViewState.Error); + } else { + setState(ViewState.Idle); + } + } + + +} \ No newline at end of file diff --git a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart index f9b94415..01043596 100644 --- a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart @@ -2,6 +2,8 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/home_health_care_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; @@ -14,11 +16,14 @@ class HomeHealthCareViewModel extends BaseViewModel { List get hhcAllServicesList => _homeHealthCareService.hhcAllServicesList; - List get hhcAllPresOrders => + + List get hhcAllPresOrders => _homeHealthCareService.hhcAllPresOrdersList; - bool get isOrderUpdated => - _homeHealthCareService.isOrderUpdated; + List get hhcAllOrderDetail => + _homeHealthCareService.hhcAllOrderDetail; + + bool get isOrderUpdated => _homeHealthCareService.isOrderUpdated; Future getHHCAllServices() async { HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel = @@ -41,13 +46,20 @@ class HomeHealthCareViewModel extends BaseViewModel { error = _homeHealthCareService.error; setState(ViewState.Error); } else { + var pendingOrder = _homeHealthCareService.hhcAllPresOrdersList + .firstWhere((element) => element.status == 1 || element.status == 2, + orElse: () => null); + if (pendingOrder != null) + await getOrderDetailByOrderID(pendingOrder); setState(ViewState.Idle); } } - Future updateHHCPresOrder(UpdatePresOrderRequestModel updatePresOrderRequestModel) async { + Future updateHHCPresOrder( + UpdatePresOrderRequestModel updatePresOrderRequestModel) async { setState(ViewState.BusyLocal); - await _homeHealthCareService.updateHHCPresOrder(updatePresOrderRequestModel); + await _homeHealthCareService.updateHHCPresOrder( + updatePresOrderRequestModel); if (_homeHealthCareService.hasError) { error = _homeHealthCareService.error; setState(ViewState.ErrorLocal); @@ -55,12 +67,20 @@ class HomeHealthCareViewModel extends BaseViewModel { setState(ViewState.Idle); } } -} -/// Sample ordinal data type. -class ChartSeries { - final String y; - final int x; + Future getOrderDetailByOrderID(GetHHCAllPresOrdersResponseModel order) async { + GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel = GetOrderDetailByOrderIDRequestModel( + presOrderID: order.iD); + setState(ViewState.Busy); + await _homeHealthCareService.getOrderDetailByOrderID( + getOrderDetailByOrderIDRequestModel); + if (_homeHealthCareService.hasError) { + error = _homeHealthCareService.error; + setState(ViewState.Error); + } else { + setState(ViewState.Idle); + } + } + - ChartSeries(this.y, this.x); -} +} \ No newline at end of file diff --git a/lib/locator.dart b/lib/locator.dart index b9b514d6..e4f3467d 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -1,5 +1,4 @@ import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/H2O_service.dart'; -import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/home_health_care_service.dart'; import 'package:diplomaticquarterapp/core/service/qr_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; @@ -7,7 +6,9 @@ import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart'; import 'package:diplomaticquarterapp/uitl/navigation_service.dart'; import 'package:get_it/get_it.dart'; +import 'core/service/AlHabibMedicalService/cmc_service.dart'; import 'core/service/AlHabibMedicalService/e_referral_service.dart'; +import 'core/service/AlHabibMedicalService/home_health_care_service.dart'; import 'core/service/AuthenticatedUserObject.dart'; import 'core/service/appointment_rate_service.dart'; import 'core/service/blood/blood_details_servies.dart'; @@ -35,6 +36,7 @@ import 'core/service/medical/prescriptions_service.dart'; import 'core/service/medical/radiology_service.dart'; import 'core/service/medical/reports_monthly_service.dart'; import 'core/service/medical/vital_sign_service.dart'; +import 'core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; import 'core/viewModels/all_habib_medical_services/e_referral_view_model.dart'; import 'core/viewModels/appointment_rate_view_model.dart'; import 'core/viewModels/blooddonation/blood_details_view_model.dart'; @@ -98,6 +100,7 @@ void setupLocator() { locator.registerLazySingleton(() => AmService()); locator.registerLazySingleton(() => EReferralService()); locator.registerLazySingleton(() => HomeHealthCareService()); + locator.registerLazySingleton(() => CMCService()); locator.registerLazySingleton(() => PatientSickLeaveService()); @@ -151,5 +154,6 @@ void setupLocator() { locator.registerFactory(() => AskDoctorViewModel()); locator.registerFactory(() => AllergiesViewModel()); locator.registerFactory(() => HomeHealthCareViewModel()); + locator.registerFactory(() => CMCViewModel()); } diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/Dialog/confirm_cancel_order_dialog.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/Dialog/confirm_cancel_order_dialog.dart new file mode 100644 index 00000000..45bf01b7 --- /dev/null +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/Dialog/confirm_cancel_order_dialog.dart @@ -0,0 +1,104 @@ +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// ignore: must_be_immutable +class ConfirmCancelOrderDialog extends StatefulWidget { + final CMCViewModel model; + final Function onTap; + + + ConfirmCancelOrderDialog( + {Key key, this.model, this.onTap}); + + @override + _ConfirmCancelOrderDialogState createState() => _ConfirmCancelOrderDialogState(); +} + +class _ConfirmCancelOrderDialogState extends State { + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return SimpleDialog( + contentPadding: EdgeInsets.fromLTRB(28.0, 24.0, 28.0, 0.0), + title: Center( + child: Texts( + "Confirm", + color: Colors.black, + ), + ), + children: [ + Column( + children: [ + Divider(), + Center( + child: Texts( + "Are you sure!! want to cancel this order", + color: Colors.grey, + ), + ), + SizedBox( + height: 5.0, + ), + 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( + TranslationBase.of(context).cancel.toUpperCase(), + color: Colors.red, + ), + ), + ), + ), + ), + ), + Container( + width: 1, + height: 30, + color: Colors.grey[500], + ), + Expanded( + flex: 1, + child: InkWell( + onTap: () async{ + widget.onTap(); + Navigator.pop(context); + }, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Center( + child: Texts( + TranslationBase.of(context).ok, + fontWeight: FontWeight.w400, + )), + ), + ), + ), + ], + ) + ], + ) + ], + ); + } +} + + + diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart new file mode 100644 index 00000000..b8003b4f --- /dev/null +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart @@ -0,0 +1,296 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; +import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/Dialog/confirm_cancel_order_dialog.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/utils.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:flutter/material.dart'; + +import 'new_cmc_step_one_page.dart'; + +class NewCMCPage extends StatefulWidget { + NewCMCPage({this.model}); + + final CMCViewModel model; + + @override + _NewCMCPageState createState() => + _NewCMCPageState(); +} + +class _NewCMCPageState extends State + with TickerProviderStateMixin { + PageController _controller; + int _currentIndex = 1; + int pageSelected = 2; + + + PatientERInsertPresOrderRequestModel patientERInsertPresOrderRequestModel = new PatientERInsertPresOrderRequestModel(); + + @override + void initState() { + super.initState(); + _controller = new PageController(); + } + + @override + void dispose() { + super.dispose(); + } + + changePageViewIndex(pageIndex) { + _controller.jumpToPage(pageIndex); + } + + @override + Widget build(BuildContext context) { + void showConfirmMessage( + CMCViewModel model, GetOrderDetailByOrderIDResponseModel order) { + showDialog( + context: context, + child: ConfirmCancelOrderDialog( + model: model, + onTap: () async { + UpdatePresOrderRequestModel updatePresOrderRequestModel = + UpdatePresOrderRequestModel( + presOrderID: order.presOrderID, + rejectionReason: "", + presOrderStatus: 4, editedBy: 3); + await model.updateHHCPresOrder(updatePresOrderRequestModel); + if(model.state == ViewState.ErrorLocal) { + Utils.showErrorToast(model.error); + } else { + AppToast.showSuccessToast(message: "Done Successfully"); + await model.getHHCAllPresOrders(); + await model.getHHCAllServices(); + } + }, + )); + } + return Scaffold( + body: SafeArea( + child: SingleChildScrollView( + child: Container( + height: MediaQuery.of(context).size.height * 0.8, + child: PageView( + physics: NeverScrollableScrollPhysics(), + controller: _controller, + onPageChanged: (index) { + setState(() { + _currentIndex = index; + }); + }, + scrollDirection: Axis.horizontal, + children: [ + widget.model.hhcAllOrderDetail.length != 0 + ? FractionallySizedBox( + heightFactor: 0.8, + widthFactor: 0.9, + child: Container( + width: double.infinity, + margin: EdgeInsets.only(top: 15), + decoration: BoxDecoration( + border: + Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 12, + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Request ID", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + widget.model.hhcAllOrderDetail[0].iD.toString(), + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Status", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + "Pending", + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Pickup Date", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + DateUtil.getDayMonthYearDateFormatted( + DateUtil.convertStringToDate( + widget.model.hhcAllOrderDetail[0] + .createdOn)), + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Service Name", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + widget.model.hhcAllOrderDetail[0].description + .toString() ?? + widget.model.hhcAllOrderDetail[0] + .descriptionN + .toString(), + fontSize: 22, + ), + ], + ), + ), + SizedBox( + height: 12, + ), + Center( + child: Container( + width: MediaQuery + .of(context) + .size + .width * + 0.85, + child: SecondaryButton( + label: "Cancel".toUpperCase(), + onTap: () { + showConfirmMessage(widget.model, widget.model.hhcAllOrderDetail[0]); + } + , + color: Colors.red[800], + disabled: false, + textColor: Theme + .of(context) + .backgroundColor), + ), + ), + SizedBox( + height: 12, + ), + ], + ), + ), + ) + : NewCMCStepOnePage( + changePageViewIndex: changePageViewIndex, + patientERInsertPresOrderRequestModel: + patientERInsertPresOrderRequestModel, + model: widget.model, + ), + // NewEReferralStepTowPage( + // changePageViewIndex: changePageViewIndex, + // patientERInsertPresOrderRequestModel: patientERInsertPresOrderRequestModel, + // + // ), + // NewEReferralStepThreePage( + // changePageViewIndex: changePageViewIndex, + // patientERInsertPresOrderRequestModel: patientERInsertPresOrderRequestModel, + // + // ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart new file mode 100644 index 00000000..b65343f7 --- /dev/null +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart @@ -0,0 +1,151 @@ +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/PatientERHHCInsertServicesList.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class NewCMCStepOnePage extends StatefulWidget { + final PatientERInsertPresOrderRequestModel + patientERInsertPresOrderRequestModel; + final Function changePageViewIndex; + final CMCViewModel model; + const NewCMCStepOnePage( + {Key key, + this.patientERInsertPresOrderRequestModel, + this.model, + this.changePageViewIndex}) + : super(key: key); + + @override + _NewCMCStepOnePageState createState() => + _NewCMCStepOnePageState(); +} + +class _NewCMCStepOnePageState + extends State { + @override + void initState() { + + widget + .patientERInsertPresOrderRequestModel + .patientERHHCInsertServicesList =[]; + super.initState(); + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + isShowAppBar: false, + baseViewModel: widget.model, + body: SingleChildScrollView( + physics: ScrollPhysics(), + child: Container( + margin: EdgeInsets.all(12), + child: Center( + child: FractionallySizedBox( + widthFactor: 0.94, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 20, + ), + Texts( +// TranslationBase.of(context).advancePaymentLabel, + "Select Home Health Care Services", + textAlign: TextAlign.center, + ), + Column( + children: widget.model.hhcAllServicesList.map((service) { + return Container( + margin: EdgeInsets.only(top: 15), + decoration: BoxDecoration( + border: + Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + children: [ + Row( + children: [ + Checkbox( + value: isServiceSelected( + service.serviceID), + activeColor: Colors.black38, + onChanged: (bool newValue) { + setState(() { + this + .widget + .patientERInsertPresOrderRequestModel + .patientERHHCInsertServicesList + .add(new PatientERHHCInsertServicesList( + recordID: this + .widget + .patientERInsertPresOrderRequestModel + .patientERHHCInsertServicesList + .length, + serviceID: + service.serviceID, + serviceName: + service.description)); + // widget.patientERInsertPresOrderRequestModel + // isPatientInsured = newValue; + }); + }), + Expanded( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Texts( + service.description, + fontSize: 15, + ), + ), + ), + ], + ), + ], + ), + ); + }).toList(), + ) + ], + ), + ), + ), + ), + ), + bottomSheet:Container( + height: MediaQuery.of(context).size.height * 0.10, + width: double.infinity, + child: Column( + children: [ + Container( + width: MediaQuery + .of(context) + .size + .width * 0.9, + child: SecondaryButton( + label: "Next", + disabled: this.widget.patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList.length ==0, + textColor: Theme + .of(context) + .backgroundColor), + ), + ], + ), + )); + } + + isServiceSelected(int serviceId) { + Iterable patientERHHCInsertServicesList = widget + .patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList + .where((element) => serviceId == element.serviceID); + if(patientERHHCInsertServicesList.length > 0) { + return true; + } + return false; + } +} diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart new file mode 100644 index 00000000..8499908a --- /dev/null +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart @@ -0,0 +1,67 @@ +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; +import 'cmc_page.dart'; + +class CMCIndexPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return AppScaffold( + isShowAppBar: true, + appBarTitle: "Service Information", + body: SingleChildScrollView( + padding: EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + "CMC", + fontWeight: FontWeight.normal, + fontSize: 25, + color: Hexcolor("#60686b"), + ), + SizedBox( + height: 12, + ), + Texts( + "This service is designed to help you to set drinking water goals and track the volume of water you are drinking on a daily basis. This service allows for schedule reminders and offers a basic statistical analysis of the amount of what you have consumed over the course of a day, week or month.", + fontWeight: FontWeight.normal, + fontSize: 17, + ), + SizedBox( + height: 22, + ), + Center( + child: Image.asset( + 'assets/images/AlHabibMedicalService/Wifi-AR.png')), + SizedBox( + height: 77, + ), + ], + )), + bottomSheet: Container( + height: MediaQuery.of(context).size.height * 0.10, + width: double.infinity, + child: Column( + children: [ + Container( + width: MediaQuery.of(context).size.width * 0.9, + child: SecondaryButton( + onTap: () => Navigator.push( + context, + FadePage( + page: CMCPage(), + ), + ), + label: "CMC", + textColor: Theme.of(context).backgroundColor), + ), + ], + ), + )); + } +} diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart new file mode 100644 index 00000000..cf851c45 --- /dev/null +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart @@ -0,0 +1,131 @@ +import 'dart:ui'; + +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_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 'NewCMC/new_cmc_page.dart'; +import 'orders_log_details_page.dart'; + +class CMCPage extends StatefulWidget { + @override + _CMCPageState createState() => _CMCPageState(); +} + +class _CMCPageState 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 BaseView( + onModelReady: (model){ + model.getHHCAllServices(); + model.getHHCAllPresOrders(); + }, + builder: (_, model, widget) => AppScaffold( + isShowAppBar: true, + appBarTitle: "Home Health Care", + 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.37, + child: Center( + child: Texts("CMC Service"), + ), + ), + Container( + width: MediaQuery.of(context).size.width * 0.37, + child: Center( + child: Texts("Order Log"), + ), + ), + ], + ), + ), + ), + ), + ], + ), + ), + body: Column( + children: [ + Expanded( + child: TabBarView( + physics: BouncingScrollPhysics(), + controller: _tabController, + children: [ + NewCMCPage( + model: model, + ), + OrdersLogDetailsPage( + model: model, + ) + ], + ), + ) + ], + ), + ), + ), + ); + } +} diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart new file mode 100644 index 00000000..814d672c --- /dev/null +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart @@ -0,0 +1,252 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/utils.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; + +import 'Dialog/confirm_cancel_order_dialog.dart'; + +class OrdersLogDetailsPage extends StatelessWidget { + final CMCViewModel model; + + const OrdersLogDetailsPage({Key key, this.model}) : super(key: key); + + @override + Widget build(BuildContext context) { + void showConfirmMessage( + CMCViewModel model, GetHHCAllPresOrdersResponseModel order) { + showDialog( + context: context, + child: ConfirmCancelOrderDialog( + model: model, + onTap: () async { + UpdatePresOrderRequestModel updatePresOrderRequestModel = + UpdatePresOrderRequestModel( + presOrderID: order.iD, + rejectionReason: "", + presOrderStatus: 4, editedBy: 3); + await model.updateHHCPresOrder(updatePresOrderRequestModel); + if(model.state == ViewState.ErrorLocal) { + Utils.showErrorToast(model.error); + } else { + AppToast.showSuccessToast(message: "Done Successfully"); + await model.getHHCAllPresOrders(); + await model.getHHCAllServices(); + } + }, + )); + } + + return AppScaffold( + isShowAppBar: false, + baseViewModel: model, + body: SingleChildScrollView( + physics: ScrollPhysics(), + child: Container( + margin: EdgeInsets.all(12), + child: Center( + child: FractionallySizedBox( + widthFactor: 0.94, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 50, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: model.hhcAllPresOrders.map((order) { + return Container( + width: double.infinity, + margin: EdgeInsets.only(top: 15), + decoration: BoxDecoration( + border: + Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 12, + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Request ID", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + order.iD.toString(), + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Status", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + order.description, + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Pickup Date", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + DateUtil.getDayMonthYearDateFormatted( + DateUtil.convertStringToDate( + order.createdOn)), + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Location", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + order.nearestProjectDescription + .toString() ?? + order.nearestProjectDescriptionN + .toString(), + fontSize: 22, + ), + ], + ), + ), + SizedBox( + height: 12, + ), + if (order.status == 1 ||order.status == 2 ) + Center( + child: Container( + width: MediaQuery + .of(context) + .size + .width * + 0.85, + child: SecondaryButton( + label: "Cancel".toUpperCase(), + onTap: () { + showConfirmMessage(model, order); + } + , + color: Colors.red[800], + disabled: false, + textColor: Theme + .of(context) + .backgroundColor), + ), + ), + SizedBox( + height: 12, + ), + ], + ), + ); + }).toList()) + ], + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart index 7503b575..2331a489 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart @@ -1,16 +1,22 @@ -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/create_e_referral_request_model.dart'; +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; -import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/E-Referral/New_E_Referral/new_e_referral_step_three_page.dart'; -import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/E-Referral/New_E_Referral/new_e_referral_step_two_page.dart'; +import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/HomeHealthCare/Dialog/confirm_cancel_order_dialog.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/utils.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:flutter/material.dart'; import 'new_Home_health_care_step_one_page.dart'; - class NewHomeHealthCarePage extends StatefulWidget { - NewHomeHealthCarePage({this.model}); + final HomeHealthCareViewModel model; @override @@ -44,6 +50,29 @@ class _NewHomeHealthCarePageState extends State @override Widget build(BuildContext context) { + void showConfirmMessage( + HomeHealthCareViewModel model, GetOrderDetailByOrderIDResponseModel order) { + showDialog( + context: context, + child: ConfirmCancelOrderDialog( + model: model, + onTap: () async { + UpdatePresOrderRequestModel updatePresOrderRequestModel = + UpdatePresOrderRequestModel( + presOrderID: order.presOrderID, + rejectionReason: "", + presOrderStatus: 4, editedBy: 3); + await model.updateHHCPresOrder(updatePresOrderRequestModel); + if(model.state == ViewState.ErrorLocal) { + Utils.showErrorToast(model.error); + } else { + AppToast.showSuccessToast(message: "Done Successfully"); + await model.getHHCAllPresOrders(); + await model.getHHCAllServices(); + } + }, + )); + } return Scaffold( body: SafeArea( child: SingleChildScrollView( @@ -59,9 +88,193 @@ class _NewHomeHealthCarePageState extends State }, scrollDirection: Axis.horizontal, children: [ - NewHomeHealthCareStepOnePage( + widget.model.hhcAllOrderDetail.length != 0 + ? FractionallySizedBox( + heightFactor: 0.8, + widthFactor: 0.9, + child: Container( + width: double.infinity, + margin: EdgeInsets.only(top: 15), + decoration: BoxDecoration( + border: + Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 12, + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Request ID", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + widget.model.hhcAllOrderDetail[0].iD.toString(), + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Status", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + "Pending", + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Pickup Date", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + DateUtil.getDayMonthYearDateFormatted( + DateUtil.convertStringToDate( + widget.model.hhcAllOrderDetail[0] + .createdOn)), + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Service Name", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + widget.model.hhcAllOrderDetail[0].description + .toString() ?? + widget.model.hhcAllOrderDetail[0] + .descriptionN + .toString(), + fontSize: 22, + ), + ], + ), + ), + SizedBox( + height: 12, + ), + Center( + child: Container( + width: MediaQuery + .of(context) + .size + .width * + 0.85, + child: SecondaryButton( + label: "Cancel".toUpperCase(), + onTap: () { + showConfirmMessage(widget.model, widget.model.hhcAllOrderDetail[0]); + } + , + color: Colors.red[800], + disabled: false, + textColor: Theme + .of(context) + .backgroundColor), + ), + ), + SizedBox( + height: 12, + ), + ], + ), + ), + ) + : NewHomeHealthCareStepOnePage( changePageViewIndex: changePageViewIndex, - patientERInsertPresOrderRequestModel: patientERInsertPresOrderRequestModel, + patientERInsertPresOrderRequestModel: + patientERInsertPresOrderRequestModel, model: widget.model, ), // NewEReferralStepTowPage( diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart index 3f15c7d3..2a4fedd4 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart @@ -212,7 +212,7 @@ class OrdersLogDetailsPage extends StatelessWidget { SizedBox( height: 12, ), - if (order.status == 1) + if (order.status == 1 ||order.status == 2 ) Center( child: Container( width: MediaQuery @@ -235,36 +235,17 @@ class OrdersLogDetailsPage extends StatelessWidget { ), SizedBox( height: 12, - ), - ], - ), - ); - }).toList()) - ], - ), + ), + ], + ), + ); + }).toList()) + ], ), ), ), ), - bottomSheet:Container( - height: MediaQuery.of(context).size.height * 0.10, - width: double.infinity, - child: Column( - children: [ - Container( - width: MediaQuery - .of(context) - .size - .width * 0.9, - child: SecondaryButton( - label: "Next", - disabled: false, - textColor: Theme - .of(context) - .backgroundColor), - ), - ], - ), - )); + ), + ); } } diff --git a/lib/pages/landing/home_page.dart b/lib/pages/landing/home_page.dart index f5197941..3c980663 100644 --- a/lib/pages/landing/home_page.dart +++ b/lib/pages/landing/home_page.dart @@ -1,16 +1,16 @@ import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/all_habib_medical_service_page.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/hmg_service.dart'; import 'package:diplomaticquarterapp/pages/ErService/ErOptions.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; -import 'package:diplomaticquarterapp/pages/feedback/feedback_home_page.dart'; +import 'package:diplomaticquarterapp/pages/livecare/livecare_home.dart'; import 'package:diplomaticquarterapp/pages/paymentService/payment_service.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/pages/livecare/livecare_home.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'; @@ -348,109 +348,115 @@ class _HomePageState extends State { ), ], ), - InkWell( - onTap: (){ - Navigator.push( - context, - FadePage( - page: HomeHealthCareIndexPage(), - ), - ); - }, - child: Container( - margin: EdgeInsets.only(left: 15, right: 15), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - DashboardItem( - child: Center( - child: Padding( - padding: const EdgeInsets.all(15.0), - child: Column( - children: [ - Image.asset( - 'assets/images/Dr_Schedule_report.png', - width: 50, - height: 50, - ), - SizedBox( - height: 13.5, - ), - Texts( - TranslationBase.of(context) - .homeHealthCareService, - textAlign: TextAlign.center, - color: Colors.white, - bold: true, - fontSize: SizeConfig.textMultiplier * 1.7, - ) - ], - ), + Container( + margin: EdgeInsets.only(left: 15, right: 15), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + DashboardItem( + onTap: () { + Navigator.push( + context, + FadePage( + page: HomeHealthCareIndexPage(), + ), + ); + }, + child: Center( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Image.asset( + 'assets/images/Dr_Schedule_report.png', + width: 50, + height: 50, + ), + SizedBox( + height: 13.5, + ), + Texts( + TranslationBase.of(context) + .homeHealthCareService, + textAlign: TextAlign.center, + color: Colors.white, + bold: true, + fontSize: SizeConfig.textMultiplier * 1.7, + ) + ], ), ), - height: MediaQuery.of(context).size.width * 0.4, - imageName: 'home_healthcare_service_bg.png', - opacity: 0.5, ), - DashboardItem( - child: Center( - child: Padding( - padding: const EdgeInsets.all(15.0), - child: Column( - children: [ - Image.asset( - 'assets/images/pharmacy_logo.png', - width: 40, - height: 40, - ), - SizedBox( - height: 20, - ), - Texts( - TranslationBase.of(context).onlinePharmacy, - textAlign: TextAlign.center, - color: Colors.white, - bold: true, - fontSize: SizeConfig.textMultiplier * 2.0, - ) - ], - ), + height: MediaQuery.of(context).size.width * 0.4, + imageName: 'home_healthcare_service_bg.png', + opacity: 0.5, + ), + DashboardItem( + child: Center( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Image.asset( + 'assets/images/pharmacy_logo.png', + width: 40, + height: 40, + ), + SizedBox( + height: 20, + ), + Texts( + TranslationBase.of(context).onlinePharmacy, + textAlign: TextAlign.center, + color: Colors.white, + bold: true, + fontSize: SizeConfig.textMultiplier * 2.0, + ) + ], ), ), - height: MediaQuery.of(context).size.width * 0.4, - imageName: 'al-habib_onlne_pharmacy_bg.png', ), - DashboardItem( - child: Center( - child: Padding( - padding: const EdgeInsets.all(15.0), - child: Column( - children: [ - Image.asset( - 'assets/images/comprehensive_medical_checkup_logo.png', - width: 50, - height: 50, - ), - SizedBox( - height: 15, - ), - Texts( - TranslationBase.of(context).emergencyService, - textAlign: TextAlign.center, - color: Colors.white, - bold: true, - fontSize: SizeConfig.textMultiplier * 2.0, - ) - ], - ), + height: MediaQuery.of(context).size.width * 0.4, + imageName: 'al-habib_onlne_pharmacy_bg.png', + ), + DashboardItem( + onTap: (){ + Navigator.push( + context, + FadePage( + page: CMCIndexPage(), + ), + ); + }, + child: Center( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + Image.asset( + 'assets/images/comprehensive_medical_checkup_logo.png', + width: 50, + height: 50, + ), + SizedBox( + height: 15, + ), + Texts( + TranslationBase.of(context).emergencyService, + textAlign: TextAlign.center, + color: Colors.white, + bold: true, + fontSize: SizeConfig.textMultiplier * 2.0, + ) + ], ), ), - height: MediaQuery.of(context).size.width * 0.4, - color: Hexcolor("#747C80"), - imageName: 'emergency_service_image.png', ), - ], - ), + height: MediaQuery.of(context).size.width * 0.4, + color: Hexcolor("#747C80"), + imageName: 'emergency_service_image.png', + ), + ], ), ), SizedBox( From 9ebc6980dd514decaada5d85246725e366399892 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Wed, 7 Oct 2020 11:32:28 +0300 Subject: [PATCH 04/11] change the checkup item based on service --- lib/config/config.dart | 2 + .../cmc_get_items_request_model.dart | 68 ++++++ .../cmc_get_items_response_model.dart | 18 ++ .../cmc_insert_pres_order_request_model.dart | 135 +++++++++++ .../get_cmc_service_request_model.dart | 72 ++++++ .../get_cmc_service_response_model.dart | 6 +- .../AlHabibMedicalService/cmc_service.dart | 57 +++-- .../AlHabibMedicalService/cmc_view_model.dart | 73 +++--- .../NewCMC/new_cmc_page.dart | 44 ++-- .../NewCMC/new_cmc_step_one_page.dart | 223 +++++++++++------- .../ComprehensiveMedicalCheckup/cmc_page.dart | 7 +- .../orders_log_details_page.dart | 9 +- 12 files changed, 560 insertions(+), 154 deletions(-) create mode 100644 lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_request_model.dart create mode 100644 lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_response_model.dart create mode 100644 lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index b2e108a6..0f6bbf10 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -258,9 +258,11 @@ const GET_E_REFERRALS = "Services/Patients.svc/REST/GetEReferrals"; // Home Health Care const HHC_GET_ALL_SERVICES = "Services/Patients.svc/REST/PatientER_HHC_GetAllServices"; +const HHC_GET_ALL_CMC_SERVICES = "Services/Patients.svc/REST/PatientER_CMC_GetAllServices"; const GET_PATIENT_ALL_PRES_ORDERS ="Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders"; const PATIENT_ER_UPDATE_PRES_ORDER ="Services/Patients.svc/REST/PatientER_UpdatePresOrder"; const GET_ORDER_DETAIL_BY_ID ="Services/Patients.svc/REST/PatientER_HHC_GetTransactionsForOrder"; +const GET_CHECK_UP_ITEMS ="Services/Patients.svc/REST/GetCheckUpItems"; const TIMER_MIN = 10; diff --git a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_request_model.dart b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_request_model.dart new file mode 100644 index 00000000..6880f9f5 --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_request_model.dart @@ -0,0 +1,68 @@ +class CMCGetItemsRequestModel { + 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 checkupType; + + CMCGetItemsRequestModel( + {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.checkupType}); + + CMCGetItemsRequestModel.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']; + checkupType = json['CheckupType']; + } + + 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['CheckupType'] = this.checkupType; + return data; + } +} diff --git a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_response_model.dart b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_response_model.dart new file mode 100644 index 00000000..6f362baa --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_response_model.dart @@ -0,0 +1,18 @@ +class CMCGetItemsResponseModel { + String itemDescription; + String itemName; + + CMCGetItemsResponseModel({this.itemDescription, this.itemName}); + + CMCGetItemsResponseModel.fromJson(Map json) { + itemDescription = json['ItemDescription']; + itemName = json['ItemName']; + } + + Map toJson() { + final Map data = new Map(); + data['ItemDescription'] = this.itemDescription; + data['ItemName'] = this.itemName; + return data; + } +} diff --git a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart new file mode 100644 index 00000000..534988a7 --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart @@ -0,0 +1,135 @@ +class CMCInsertPresOrderRequestModel { + 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; + double latitude; + double longitude; + int createdBy; + int orderServiceID; + List patientERCMCInsertServicesList; + + CMCInsertPresOrderRequestModel( + {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.latitude, + this.longitude, + this.createdBy, + this.orderServiceID, + this.patientERCMCInsertServicesList}); + + CMCInsertPresOrderRequestModel.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']; + latitude = json['Latitude']; + longitude = json['Longitude']; + createdBy = json['CreatedBy']; + orderServiceID = json['OrderServiceID']; + if (json['PatientER_CMC_InsertServicesList'] != null) { + patientERCMCInsertServicesList = + new List(); + json['PatientER_CMC_InsertServicesList'].forEach((v) { + patientERCMCInsertServicesList + .add(new PatientERCMCInsertServicesList.fromJson(v)); + }); + } + } + + 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['Latitude'] = this.latitude; + data['Longitude'] = this.longitude; + data['CreatedBy'] = this.createdBy; + data['OrderServiceID'] = this.orderServiceID; + if (this.patientERCMCInsertServicesList != null) { + data['PatientER_CMC_InsertServicesList'] = + this.patientERCMCInsertServicesList.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class PatientERCMCInsertServicesList { + int recordID; + String serviceID; + String selectedServiceName; + String selectedServiceNameAR; + dynamic price; + dynamic vAT; + dynamic totalPrice; + + PatientERCMCInsertServicesList( + {this.recordID, + this.serviceID, + this.selectedServiceName, + this.selectedServiceNameAR, + this.price, + this.vAT, + this.totalPrice}); + + PatientERCMCInsertServicesList.fromJson(Map json) { + recordID = json['RecordID']; + serviceID = json['ServiceID']; + selectedServiceName = json['selectedServiceName']; + selectedServiceNameAR = json['selectedServiceNameAR']; + price = json['Price']; + vAT = json['VAT']; + totalPrice = json['TotalPrice']; + } + + Map toJson() { + final Map data = new Map(); + data['RecordID'] = this.recordID; + data['ServiceID'] = this.serviceID; + data['selectedServiceName'] = this.selectedServiceName; + data['selectedServiceNameAR'] = this.selectedServiceNameAR; + data['Price'] = this.price; + data['VAT'] = this.vAT; + data['TotalPrice'] = this.totalPrice; + return data; + } +} diff --git a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_request_model.dart b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_request_model.dart index e69de29b..e80b656d 100644 --- a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_request_model.dart +++ b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_request_model.dart @@ -0,0 +1,72 @@ +class GetCMCServicesRequestModel { + int channel; + int deviceTypeID; + int genderID; + String generalid; + String identificationNo; + String iPAdress; + bool isDentalAllowedBackend; + int languageID; + int patientID; + int patientOutSA; + int patientType; + int patientTypeID; + String sessionID; + String tokenID; + double versionID; + + GetCMCServicesRequestModel( + {this.channel, + this.deviceTypeID, + this.genderID, + this.generalid, + this.identificationNo, + this.iPAdress, + this.isDentalAllowedBackend, + this.languageID, + this.patientID, + this.patientOutSA, + this.patientType, + this.patientTypeID, + this.sessionID, + this.tokenID, + this.versionID}); + + GetCMCServicesRequestModel.fromJson(Map json) { + channel = json['Channel']; + deviceTypeID = json['DeviceTypeID']; + genderID = json['GenderID']; + generalid = json['generalid']; + identificationNo = json['IdentificationNo']; + iPAdress = json['IPAdress']; + isDentalAllowedBackend = json['isDentalAllowedBackend']; + languageID = json['LanguageID']; + patientID = json['PatientID']; + patientOutSA = json['PatientOutSA']; + patientType = json['PatientType']; + patientTypeID = json['PatientTypeID']; + sessionID = json['SessionID']; + tokenID = json['TokenID']; + versionID = json['VersionID']; + } + + Map toJson() { + final Map data = new Map(); + data['Channel'] = this.channel; + data['DeviceTypeID'] = this.deviceTypeID; + data['GenderID'] = this.genderID; + data['generalid'] = this.generalid; + data['IdentificationNo'] = this.identificationNo; + data['IPAdress'] = this.iPAdress; + data['isDentalAllowedBackend'] = this.isDentalAllowedBackend; + data['LanguageID'] = this.languageID; + data['PatientID'] = this.patientID; + data['PatientOutSA'] = this.patientOutSA; + data['PatientType'] = this.patientType; + data['PatientTypeID'] = this.patientTypeID; + data['SessionID'] = this.sessionID; + data['TokenID'] = this.tokenID; + data['VersionID'] = this.versionID; + return data; + } +} diff --git a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart index dbf9e9a3..5f356e2b 100644 --- a/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart +++ b/lib/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart @@ -3,10 +3,10 @@ class GetCMCServicesResponseModel { String descriptionN; int iD; bool isActive; - int price; + dynamic price; int serviceID; - int totalPrice; - int vAT; + dynamic totalPrice; + dynamic vAT; GetCMCServicesResponseModel( {this.description, diff --git a/lib/core/service/AlHabibMedicalService/cmc_service.dart b/lib/core/service/AlHabibMedicalService/cmc_service.dart index 61250c2c..552da6f7 100644 --- a/lib/core/service/AlHabibMedicalService/cmc_service.dart +++ b/lib/core/service/AlHabibMedicalService/cmc_service.dart @@ -1,6 +1,8 @@ import 'package:diplomaticquarterapp/config/config.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hHC_all_pres_orders_request_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart'; @@ -10,39 +12,42 @@ import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealth import '../base_service.dart'; class CMCService extends BaseService { - List hhcAllServicesList = List(); - List hhcAllPresOrdersList = List(); + List cmcAllServicesList = List(); + List cmcAllPresOrdersList = List(); - List hhcAllOrderDetail = List(); + List cmcAllOrderDetail = List(); + List checkupItemsList = List(); bool isOrderUpdated; - Future getHHCAllServices( - HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel) async { + Future getCMCAllServices() async { + + + GetCMCServicesRequestModel getCMCServicesRequestModel= new GetCMCServicesRequestModel(genderID: user.gender, identificationNo: user.patientIdentificationNo); hasError = false; - await baseAppClient.post(HHC_GET_ALL_SERVICES, + await baseAppClient.post(HHC_GET_ALL_CMC_SERVICES, onSuccess: (dynamic response, int statusCode) { - hhcAllServicesList.clear(); - response['PatientER_HHC_GetAllServicesList'].forEach((data) { - hhcAllServicesList.add(HHCGetAllServicesResponseModel.fromJson(data)); + cmcAllServicesList.clear(); + response['PatientER_CMC_GetAllServicesList'].forEach((data) { + cmcAllServicesList.add(GetCMCServicesResponseModel.fromJson(data)); }); }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; - }, body: hHCGetAllServicesRequestModel.toJson()); + }, body: getCMCServicesRequestModel.toJson()); } - Future getHHCAllPresOrders() async { + Future getCmcAllPresOrders() async { GetHHCAllPresOrdersRequestModel getHHCAllPresOrdersRequestModel= GetHHCAllPresOrdersRequestModel(); hasError = false; await baseAppClient.post(GET_PATIENT_ALL_PRES_ORDERS, onSuccess: (dynamic response, int statusCode) { - hhcAllPresOrdersList.clear(); + cmcAllPresOrdersList.clear(); response['PatientER_GetPatientAllPresOrdersList'].forEach((data) { - hhcAllPresOrdersList.add(GetHHCAllPresOrdersResponseModel.fromJson(data)); + cmcAllPresOrdersList.add(GetHHCAllPresOrdersResponseModel.fromJson(data)); }); }, onFailure: (String error, int statusCode) { hasError = true; @@ -55,9 +60,9 @@ class CMCService extends BaseService { hasError = false; await baseAppClient.post(GET_ORDER_DETAIL_BY_ID, onSuccess: (dynamic response, int statusCode) { - hhcAllOrderDetail.clear(); + cmcAllOrderDetail.clear(); response['PatientER_HHC_GetTransactionsForOrderList'].forEach((data) { - hhcAllOrderDetail.add(GetOrderDetailByOrderIDResponseModel.fromJson(data)); + cmcAllOrderDetail.add(GetOrderDetailByOrderIDResponseModel.fromJson(data)); }); }, onFailure: (String error, int statusCode) { hasError = true; @@ -65,7 +70,23 @@ class CMCService extends BaseService { }, body: getOrderDetailByOrderIDRequestModel.toJson()); } - Future updateHHCPresOrder(UpdatePresOrderRequestModel updatePresOrderRequestModel) async { + + Future getCheckupItems(CMCGetItemsRequestModel cMCGetItemsRequestModel) async { + + hasError = false; + await baseAppClient.post(GET_CHECK_UP_ITEMS, + onSuccess: (dynamic response, int statusCode) { + checkupItemsList.clear(); + response['GetCheckUpItemsList'].forEach((data) { + checkupItemsList.add(CMCGetItemsResponseModel.fromJson(data)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: cMCGetItemsRequestModel.toJson()); + } + + Future updateCmcPresOrder(UpdatePresOrderRequestModel updatePresOrderRequestModel) async { hasError = false; await baseAppClient.post(PATIENT_ER_UPDATE_PRES_ORDER, diff --git a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart index 1d350a03..15bcff9c 100644 --- a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart @@ -1,6 +1,7 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/get_cmc_service_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart'; @@ -11,42 +12,56 @@ import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; import '../../../locator.dart'; class CMCViewModel extends BaseViewModel { - CMCService _homeHealthCareService = + CMCService _cMCService = locator(); - List get hhcAllServicesList => - _homeHealthCareService.hhcAllServicesList; + List get cmcAllServicesList => + _cMCService.cmcAllServicesList; - List get hhcAllPresOrders => - _homeHealthCareService.hhcAllPresOrdersList; + List get cmcAllPresOrders => + _cMCService.cmcAllPresOrdersList; - List get hhcAllOrderDetail => - _homeHealthCareService.hhcAllOrderDetail; + List get cmcAllOrderDetail => + _cMCService.cmcAllOrderDetail; + List get checkupItems => + _cMCService.checkupItemsList; - bool get isOrderUpdated => _homeHealthCareService.isOrderUpdated; + bool get isOrderUpdated => _cMCService.isOrderUpdated; - Future getHHCAllServices() async { - HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel = - new HHCGetAllServicesRequestModel(); + Future getCMCAllServices() async { setState(ViewState.Busy); - await _homeHealthCareService - .getHHCAllServices(hHCGetAllServicesRequestModel); - if (_homeHealthCareService.hasError) { - error = _homeHealthCareService.error; + await _cMCService + .getCMCAllServices(); + CMCGetItemsRequestModel cMCGetItemsRequestModel = new CMCGetItemsRequestModel(checkupType: cmcAllServicesList[0].iD); + + await getCheckupItems(cMCGetItemsRequestModel); + if (_cMCService.hasError) { + error = _cMCService.error; + setState(ViewState.Error); + } else { + setState(ViewState.Idle); + } + } + Future getCheckupItems(CMCGetItemsRequestModel cMCGetItemsRequestModel) async { + setState(ViewState.Busy); + await _cMCService + .getCheckupItems(cMCGetItemsRequestModel); + if (_cMCService.hasError) { + error = _cMCService.error; setState(ViewState.Error); } else { setState(ViewState.Idle); } } - Future getHHCAllPresOrders() async { + Future getCmcAllPresOrders() async { setState(ViewState.Busy); - await _homeHealthCareService.getHHCAllPresOrders(); - if (_homeHealthCareService.hasError) { - error = _homeHealthCareService.error; + await _cMCService.getCmcAllPresOrders(); + if (_cMCService.hasError) { + error = _cMCService.error; setState(ViewState.Error); } else { - var pendingOrder = _homeHealthCareService.hhcAllPresOrdersList + var pendingOrder = _cMCService.cmcAllPresOrdersList .firstWhere((element) => element.status == 1 || element.status == 2, orElse: () => null); if (pendingOrder != null) @@ -55,13 +70,13 @@ class CMCViewModel extends BaseViewModel { } } - Future updateHHCPresOrder( + Future updateCmcPresOrder( UpdatePresOrderRequestModel updatePresOrderRequestModel) async { setState(ViewState.BusyLocal); - await _homeHealthCareService.updateHHCPresOrder( + await _cMCService.updateCmcPresOrder( updatePresOrderRequestModel); - if (_homeHealthCareService.hasError) { - error = _homeHealthCareService.error; + if (_cMCService.hasError) { + error = _cMCService.error; setState(ViewState.ErrorLocal); } else { setState(ViewState.Idle); @@ -72,10 +87,10 @@ class CMCViewModel extends BaseViewModel { GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel = GetOrderDetailByOrderIDRequestModel( presOrderID: order.iD); setState(ViewState.Busy); - await _homeHealthCareService.getOrderDetailByOrderID( + await _cMCService.getOrderDetailByOrderID( getOrderDetailByOrderIDRequestModel); - if (_homeHealthCareService.hasError) { - error = _homeHealthCareService.error; + if (_cMCService.hasError) { + error = _cMCService.error; setState(ViewState.Error); } else { setState(ViewState.Idle); diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart index b8003b4f..4ce0035f 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart @@ -1,6 +1,6 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/Dialog/confirm_cancel_order_dialog.dart'; @@ -29,12 +29,25 @@ class _NewCMCPageState extends State int _currentIndex = 1; int pageSelected = 2; - - PatientERInsertPresOrderRequestModel patientERInsertPresOrderRequestModel = new PatientERInsertPresOrderRequestModel(); + CMCInsertPresOrderRequestModel cMCInsertPresOrderRequestModel; @override void initState() { super.initState(); + + PatientERCMCInsertServicesList patientERCMCInsertServicesList = + new PatientERCMCInsertServicesList( + price: widget.model.cmcAllServicesList[0].price, + serviceID: widget.model.cmcAllServicesList[0].serviceID.toString(), + selectedServiceName: widget.model.cmcAllServicesList[0].description, + selectedServiceNameAR: + widget.model.cmcAllServicesList[0].description, + recordID: 1, + totalPrice: widget.model.cmcAllServicesList[0].totalPrice, + vAT: widget.model.cmcAllServicesList[0].vAT); + cMCInsertPresOrderRequestModel = new CMCInsertPresOrderRequestModel( + patientERCMCInsertServicesList: [patientERCMCInsertServicesList]); + print(widget.model); _controller = new PageController(); } @@ -61,13 +74,13 @@ class _NewCMCPageState extends State presOrderID: order.presOrderID, rejectionReason: "", presOrderStatus: 4, editedBy: 3); - await model.updateHHCPresOrder(updatePresOrderRequestModel); - if(model.state == ViewState.ErrorLocal) { + await model.updateCmcPresOrder(updatePresOrderRequestModel); + if (model.state == ViewState.ErrorLocal) { Utils.showErrorToast(model.error); } else { AppToast.showSuccessToast(message: "Done Successfully"); - await model.getHHCAllPresOrders(); - await model.getHHCAllServices(); + await model.getCmcAllPresOrders(); + await model.getCMCAllServices(); } }, )); @@ -87,7 +100,7 @@ class _NewCMCPageState extends State }, scrollDirection: Axis.horizontal, children: [ - widget.model.hhcAllOrderDetail.length != 0 + widget.model.cmcAllOrderDetail.length != 0 ? FractionallySizedBox( heightFactor: 0.8, widthFactor: 0.9, @@ -131,7 +144,7 @@ class _NewCMCPageState extends State height: 4, ), Texts( - widget.model.hhcAllOrderDetail[0].iD.toString(), + widget.model.cmcAllOrderDetail[0].iD.toString(), fontSize: 22, ), ], @@ -197,7 +210,7 @@ class _NewCMCPageState extends State Texts( DateUtil.getDayMonthYearDateFormatted( DateUtil.convertStringToDate( - widget.model.hhcAllOrderDetail[0] + widget.model.cmcAllOrderDetail[0] .createdOn)), fontSize: 22, ), @@ -230,9 +243,9 @@ class _NewCMCPageState extends State height: 4, ), Texts( - widget.model.hhcAllOrderDetail[0].description + widget.model.cmcAllOrderDetail[0].description .toString() ?? - widget.model.hhcAllOrderDetail[0] + widget.model.cmcAllOrderDetail[0] .descriptionN .toString(), fontSize: 22, @@ -253,7 +266,8 @@ class _NewCMCPageState extends State child: SecondaryButton( label: "Cancel".toUpperCase(), onTap: () { - showConfirmMessage(widget.model, widget.model.hhcAllOrderDetail[0]); + showConfirmMessage(widget.model, + widget.model.cmcAllOrderDetail[0]); } , color: Colors.red[800], @@ -272,8 +286,8 @@ class _NewCMCPageState extends State ) : NewCMCStepOnePage( changePageViewIndex: changePageViewIndex, - patientERInsertPresOrderRequestModel: - patientERInsertPresOrderRequestModel, + cMCInsertPresOrderRequestModel: + cMCInsertPresOrderRequestModel, model: widget.model, ), // NewEReferralStepTowPage( diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart index b65343f7..77ddb053 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart @@ -1,5 +1,5 @@ -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/PatientERHHCInsertServicesList.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_request_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; @@ -8,14 +8,14 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class NewCMCStepOnePage extends StatefulWidget { - final PatientERInsertPresOrderRequestModel - patientERInsertPresOrderRequestModel; + final CMCInsertPresOrderRequestModel cMCInsertPresOrderRequestModel; final Function changePageViewIndex; final CMCViewModel model; + const NewCMCStepOnePage( {Key key, - this.patientERInsertPresOrderRequestModel, - this.model, + this.cMCInsertPresOrderRequestModel, + this.model, this.changePageViewIndex}) : super(key: key); @@ -28,10 +28,6 @@ class _NewCMCStepOnePageState extends State { @override void initState() { - - widget - .patientERInsertPresOrderRequestModel - .patientERHHCInsertServicesList =[]; super.initState(); } @@ -45,74 +41,145 @@ class _NewCMCStepOnePageState child: Container( margin: EdgeInsets.all(12), child: Center( - child: FractionallySizedBox( - widthFactor: 0.94, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 20, - ), - Texts( + child: Column( + children: [ + FractionallySizedBox( + widthFactor: 0.94, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 20, + ), + Texts( // TranslationBase.of(context).advancePaymentLabel, - "Select Home Health Care Services", - textAlign: TextAlign.center, - ), - Column( - children: widget.model.hhcAllServicesList.map((service) { - return Container( - margin: EdgeInsets.only(top: 15), - decoration: BoxDecoration( - border: - Border.all(color: Colors.grey, width: 1), - borderRadius: BorderRadius.circular(12), - color: Colors.white), - child: Column( - children: [ - Row( + "Select Home Health Care Services", + textAlign: TextAlign.center, + ), + Column( + children: widget.model.cmcAllServicesList.map(( + service) { + return Container( + margin: EdgeInsets.only(top: 15), + decoration: BoxDecoration( + border: + Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( children: [ - Checkbox( - value: isServiceSelected( - service.serviceID), - activeColor: Colors.black38, - onChanged: (bool newValue) { - setState(() { - this - .widget - .patientERInsertPresOrderRequestModel - .patientERHHCInsertServicesList - .add(new PatientERHHCInsertServicesList( - recordID: this - .widget - .patientERInsertPresOrderRequestModel - .patientERHHCInsertServicesList - .length, - serviceID: - service.serviceID, - serviceName: - service.description)); - // widget.patientERInsertPresOrderRequestModel - // isPatientInsured = newValue; - }); - }), - Expanded( - child: Padding( - padding: const EdgeInsets.all(20.0), - child: Texts( - service.description, - fontSize: 15, + Row( + children: [ + Radio( + value: service.serviceID, + activeColor: Colors.red[800], + onChanged: (newValue) async { + PatientERCMCInsertServicesList patientERCMCInsertServicesList = + new PatientERCMCInsertServicesList( + price: service.price, + serviceID: service.serviceID + .toString(), + selectedServiceName: service + .description, + selectedServiceNameAR: + service.description, + recordID: 1, + totalPrice: service.totalPrice, + vAT: service.vAT); + + + print(newValue); + setState(() { + widget + .cMCInsertPresOrderRequestModel + .patientERCMCInsertServicesList = + [patientERCMCInsertServicesList]; + }); + CMCGetItemsRequestModel cMCGetItemsRequestModel = new CMCGetItemsRequestModel (checkupType:newValue ); + await widget.model.getCheckupItems(cMCGetItemsRequestModel); + }, + groupValue: int.parse(widget + .cMCInsertPresOrderRequestModel + .patientERCMCInsertServicesList[0] + .serviceID),), + Expanded( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Texts( + service.description, + fontSize: 15, + ), + ), ), - ), + ], ), ], ), - ], - ), - ); - }).toList(), - ) - ], - ), + ); + }).toList(), + ), + ], + ), + ), + SizedBox(height: 30,), + Container( + color: Colors.white, + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: widget.model.checkupItems.map((item) { + return Center( + child: FractionallySizedBox( + widthFactor: 0.8, + child: Container( + margin: EdgeInsets.only(top: 15), + decoration: BoxDecoration( + border: + Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 12, + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 5, top: 5), + decoration: BoxDecoration( + // border: Border( + // bottom: BorderSide( + // color: Colors.grey, + // width: 1.0, + // ), + // ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + item.itemName, + fontSize: 15, + ), + ], + ), + ), + + SizedBox( + height: 12, + ), + ], + ), + ), + ), + ); + }).toList()), + ) + ], ), ), ), @@ -129,7 +196,7 @@ class _NewCMCStepOnePageState .width * 0.9, child: SecondaryButton( label: "Next", - disabled: this.widget.patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList.length ==0, + // disabled: this.widget.patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList.length ==0, textColor: Theme .of(context) .backgroundColor), @@ -139,13 +206,5 @@ class _NewCMCStepOnePageState )); } - isServiceSelected(int serviceId) { - Iterable patientERHHCInsertServicesList = widget - .patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList - .where((element) => serviceId == element.serviceID); - if(patientERHHCInsertServicesList.length > 0) { - return true; - } - return false; - } + } diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart index cf851c45..0613ff80 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart @@ -1,5 +1,6 @@ import 'dart:ui'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_request_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; @@ -36,8 +37,10 @@ class _CMCPageState extends State Widget build(BuildContext context) { return BaseView( onModelReady: (model){ - model.getHHCAllServices(); - model.getHHCAllPresOrders(); + + model.getCMCAllServices(); + // model.getCheckupItems(cMCGetItemsRequestModel); + model.getCmcAllPresOrders(); }, builder: (_, model, widget) => AppScaffold( isShowAppBar: true, diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart index 814d672c..95f16cf2 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart @@ -2,7 +2,6 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; -import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; @@ -32,13 +31,13 @@ class OrdersLogDetailsPage extends StatelessWidget { presOrderID: order.iD, rejectionReason: "", presOrderStatus: 4, editedBy: 3); - await model.updateHHCPresOrder(updatePresOrderRequestModel); + await model.updateCmcPresOrder(updatePresOrderRequestModel); if(model.state == ViewState.ErrorLocal) { Utils.showErrorToast(model.error); } else { AppToast.showSuccessToast(message: "Done Successfully"); - await model.getHHCAllPresOrders(); - await model.getHHCAllServices(); + await model.getCmcAllPresOrders(); + await model.getCMCAllServices(); } }, )); @@ -62,7 +61,7 @@ class OrdersLogDetailsPage extends StatelessWidget { ), Column( crossAxisAlignment: CrossAxisAlignment.start, - children: model.hhcAllPresOrders.map((order) { + children: model.cmcAllPresOrders.map((order) { return Container( width: double.infinity, margin: EdgeInsets.only(top: 15), From da7131015edac0b2dd1e2a66b6539fede127556f Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Thu, 8 Oct 2020 10:13:44 +0300 Subject: [PATCH 05/11] remove print statements --- .../ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart | 1 - .../NewCMC/new_cmc_step_one_page.dart | 3 --- 2 files changed, 4 deletions(-) diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart index 4ce0035f..716f2aea 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart @@ -47,7 +47,6 @@ class _NewCMCPageState extends State vAT: widget.model.cmcAllServicesList[0].vAT); cMCInsertPresOrderRequestModel = new CMCInsertPresOrderRequestModel( patientERCMCInsertServicesList: [patientERCMCInsertServicesList]); - print(widget.model); _controller = new PageController(); } diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart index 77ddb053..cd240de6 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart @@ -86,9 +86,6 @@ class _NewCMCStepOnePageState recordID: 1, totalPrice: service.totalPrice, vAT: service.vAT); - - - print(newValue); setState(() { widget .cMCInsertPresOrderRequestModel From 83ab1b4d617f48c7d71f9bc3829f8601f2c3d2f5 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Sun, 11 Oct 2020 11:21:18 +0300 Subject: [PATCH 06/11] fix issues in the services logic and add some translation --- lib/config/config.dart | 1 + lib/config/localized_values.dart | 72 +++++++++++++------ .../AlHabibMedicalService/cmc_service.dart | 10 +-- .../home_health_care_service.dart | 1 + .../AlHabibMedicalService/cmc_view_model.dart | 1 + .../NewCMC/new_cmc_page.dart | 28 +++++--- .../NewCMC/new_cmc_step_one_page.dart | 6 +- .../cmc_index_page.dart | 3 +- .../ComprehensiveMedicalCheckup/cmc_page.dart | 8 +-- .../E-Referral/e_referral_index_page.dart | 2 +- .../new_home_health_care_page.dart | 1 - .../home_health_care_index_page.dart | 19 ++--- .../HomeHealthCare/home_health_care_page.dart | 7 +- .../h2o/h2o_index_page.dart | 3 +- lib/uitl/translations_delegate_base.dart | 5 ++ 15 files changed, 107 insertions(+), 60 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index 0f6bbf10..cc6d2f2d 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -262,6 +262,7 @@ const HHC_GET_ALL_CMC_SERVICES = "Services/Patients.svc/REST/PatientER_CMC_GetAl const GET_PATIENT_ALL_PRES_ORDERS ="Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders"; const PATIENT_ER_UPDATE_PRES_ORDER ="Services/Patients.svc/REST/PatientER_UpdatePresOrder"; const GET_ORDER_DETAIL_BY_ID ="Services/Patients.svc/REST/PatientER_HHC_GetTransactionsForOrder"; +const GET_CMC_ORDER_DETAIL_BY_ID ="Services/Patients.svc/REST/PatientER_CMC_GetTransactionsForOrder"; const GET_CHECK_UP_ITEMS ="Services/Patients.svc/REST/GetCheckUpItems"; const TIMER_MIN = 10; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 40840423..36415d2d 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -546,26 +546,54 @@ const Map> localizedValues = { "VA":{"en":"Prism","ar":"المحاور"}, "LeftEye":{"en":"Left Eye","ar":"العين اليسرى"}, "Brand":{"en":"Brand","ar":"النوع"}, - "Power":{"en":"Power","ar":"القوة"}, - "Diameter":{"en":"Diameter","ar":"القطر"}, - "Remarks":{"en":"Remarks","ar":"ملاحضات"}, - "ActiveMedications":{"en":"Active Medications","ar":"ادويتي النشطة"}, - "ExpDate":{"en":"Active Exp Date :","VA":"تاريخ الإنتهاء"}, - "Route":{"en":"Route :","ar":"الطريقة"}, - "Frequency":{"en":"Frequency :","ar":"المعدل"}, - "DailyQuantity":{"en":"Daily Quantity :","ar":"جرعات يومية"}, - "AddReminder":{"en":"Add Reminder","ar":"إضافة تذكير"}, - "reminderDes":{"en":"Please select treatment start day and time to be notified when it\'s time to take the medicine","ar":" يرجى تحديد يوم بدء العلاج والوقت ليتم ارسال تنبيه عندما يحين الوقت لتناول الدواء"}, - "StartDay":{"en":"Start Day","ar":"يوم البداية"}, - "EndDay":{"en":"End Day","ar":"يوم الانتهاء"}, - "Days":{"en":"Days ","ar":"أيام"}, - "ScheduleTime":{"en":"Schedule time","ar":"الجدول الزمني"}, - "AskDoctor":{"en":"Ask Doctor","ar":"اسأل طبيبك"}, - "DoctorResponses":{"en":"Doctor Responses","ar":"ردود الأطباء"}, - "New":{"en":"New","ar":"جديد"}, - "All":{"en":"All","ar":"الكل"}, - "QuestionHere":{"en":"Enter the question here...","ar":"اضف الاستفسار هنا"}, - "ViewDoctorResponses":{"en":"View Doctor Responses","ar":"الاطلاع على ردود الأطباء"}, - - + "Power": {"en": "Power", "ar": "القوة"}, + "Diameter": {"en": "Diameter", "ar": "القطر"}, + "Remarks": {"en": "Remarks", "ar": "ملاحضات"}, + "ActiveMedications": {"en": "Active Medications", "ar": "ادويتي النشطة"}, + "ExpDate": {"en": "Active Exp Date :", "VA": "تاريخ الإنتهاء"}, + "Route": {"en": "Route :", "ar": "الطريقة"}, + "Frequency": {"en": "Frequency :", "ar": "المعدل"}, + "DailyQuantity": {"en": "Daily Quantity :", "ar": "جرعات يومية"}, + "AddReminder": {"en": "Add Reminder", "ar": "إضافة تذكير"}, + "reminderDes": { + "en": + "Please select treatment start day and time to be notified when it\'s time to take the medicine", + "ar": + " يرجى تحديد يوم بدء العلاج والوقت ليتم ارسال تنبيه عندما يحين الوقت لتناول الدواء" + }, + "StartDay": {"en": "Start Day", "ar": "يوم البداية"}, + "EndDay": {"en": "End Day", "ar": "يوم الانتهاء"}, + "Days": {"en": "Days ", "ar": "أيام"}, + "ScheduleTime": {"en": "Schedule time", "ar": "الجدول الزمني"}, + "AskDoctor": {"en": "Ask Doctor", "ar": "اسأل طبيبك"}, + "DoctorResponses": {"en": "Doctor Responses", "ar": "ردود الأطباء"}, + "New": {"en": "New", "ar": "جديد"}, + "All": {"en": "All", "ar": "الكل"}, + "QuestionHere": { + "en": "Enter the question here...", + "ar": "اضف الاستفسار هنا" + }, + "ViewDoctorResponses": { + "en": "View Doctor Responses", + "ar": "الاطلاع على ردود الأطباء" + }, + "ServiceInformation": {"en": "Service Information", "ar": "معلومات الخدمة"}, + "HomeHealthCare": { + "en": "Home Health Care", + "ar": " الرعاية الصحية المنزلية " + }, + "HomeHealthCareText": { + "en": + "This service provides a set of home health care services, continuous and comprehensive follow-up in their places of residence for those who cannot access health facilities, such as (laboratory analyzes - radiology - vaccinations - physical therapy), etc.", + "ar": + "توفر هذه الخدمة مجموعه من خدمات الرعايه الصحيه المنزلية و متابعه مستمره وشامله للذين لا يستطيعون الوصول للمنشات الصحيه في اماكن اقامتهم (التحاليل المخبرية – الاشعة – التطعيمات – العلاج الطبيعي)... " + }, + "LoginRegister": { + "en": "Login/Register", + "ar": "دخول / تسجيل" + }, + "OrderLog": { + "en": "Order Log", + "ar": " سجل الطلبات" + }, }; diff --git a/lib/core/service/AlHabibMedicalService/cmc_service.dart b/lib/core/service/AlHabibMedicalService/cmc_service.dart index 552da6f7..b87f54fb 100644 --- a/lib/core/service/AlHabibMedicalService/cmc_service.dart +++ b/lib/core/service/AlHabibMedicalService/cmc_service.dart @@ -47,8 +47,10 @@ class CMCService extends BaseService { onSuccess: (dynamic response, int statusCode) { cmcAllPresOrdersList.clear(); response['PatientER_GetPatientAllPresOrdersList'].forEach((data) { - cmcAllPresOrdersList.add(GetHHCAllPresOrdersResponseModel.fromJson(data)); - }); + if (data['ServiceID'] == 3) + cmcAllPresOrdersList + .add(GetHHCAllPresOrdersResponseModel.fromJson(data)); + }); }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; @@ -58,10 +60,10 @@ class CMCService extends BaseService { Future getOrderDetailByOrderID(GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel) async { hasError = false; - await baseAppClient.post(GET_ORDER_DETAIL_BY_ID, + await baseAppClient.post(GET_CMC_ORDER_DETAIL_BY_ID, onSuccess: (dynamic response, int statusCode) { cmcAllOrderDetail.clear(); - response['PatientER_HHC_GetTransactionsForOrderList'].forEach((data) { + response['PatientER_CMC_GetTransactionsForOrderList'].forEach((data) { cmcAllOrderDetail.add(GetOrderDetailByOrderIDResponseModel.fromJson(data)); }); }, onFailure: (String error, int statusCode) { diff --git a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart index cd9289bc..ffa823e8 100644 --- a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart +++ b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart @@ -41,6 +41,7 @@ class HomeHealthCareService extends BaseService { onSuccess: (dynamic response, int statusCode) { hhcAllPresOrdersList.clear(); response['PatientER_GetPatientAllPresOrdersList'].forEach((data) { + if(data['ServiceID'] == 2) hhcAllPresOrdersList.add(GetHHCAllPresOrdersResponseModel.fromJson(data)); }); }, onFailure: (String error, int statusCode) { diff --git a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart index 15bcff9c..a37228ad 100644 --- a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart @@ -16,6 +16,7 @@ class CMCViewModel extends BaseViewModel { locator(); List get cmcAllServicesList => + _cMCService.cmcAllServicesList; List get cmcAllPresOrders => diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart index 716f2aea..f21aa8f0 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart @@ -34,19 +34,25 @@ class _NewCMCPageState extends State @override void initState() { super.initState(); + PatientERCMCInsertServicesList patientERCMCInsertServicesList; + if (widget.model.cmcAllServicesList.length > 0) { + patientERCMCInsertServicesList = new PatientERCMCInsertServicesList( + price: widget.model.cmcAllServicesList[0].price, + serviceID: widget.model.cmcAllServicesList[0].serviceID.toString(), + selectedServiceName: widget.model.cmcAllServicesList[0].description, + selectedServiceNameAR: widget.model.cmcAllServicesList[0].description, + recordID: 1, + totalPrice: widget.model.cmcAllServicesList[0].totalPrice, + vAT: widget.model.cmcAllServicesList[0].vAT); + cMCInsertPresOrderRequestModel = new CMCInsertPresOrderRequestModel( + patientERCMCInsertServicesList: [patientERCMCInsertServicesList]); + } - PatientERCMCInsertServicesList patientERCMCInsertServicesList = - new PatientERCMCInsertServicesList( - price: widget.model.cmcAllServicesList[0].price, - serviceID: widget.model.cmcAllServicesList[0].serviceID.toString(), - selectedServiceName: widget.model.cmcAllServicesList[0].description, - selectedServiceNameAR: - widget.model.cmcAllServicesList[0].description, - recordID: 1, - totalPrice: widget.model.cmcAllServicesList[0].totalPrice, - vAT: widget.model.cmcAllServicesList[0].vAT); cMCInsertPresOrderRequestModel = new CMCInsertPresOrderRequestModel( - patientERCMCInsertServicesList: [patientERCMCInsertServicesList]); + patientERCMCInsertServicesList: patientERCMCInsertServicesList != null + ? [patientERCMCInsertServicesList] + : []); + _controller = new PageController(); } diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart index cd240de6..52a64a50 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_one_page.dart @@ -95,10 +95,12 @@ class _NewCMCStepOnePageState CMCGetItemsRequestModel cMCGetItemsRequestModel = new CMCGetItemsRequestModel (checkupType:newValue ); await widget.model.getCheckupItems(cMCGetItemsRequestModel); }, - groupValue: int.parse(widget + groupValue: widget + .cMCInsertPresOrderRequestModel + .patientERCMCInsertServicesList.length >0?int.parse(widget .cMCInsertPresOrderRequestModel .patientERCMCInsertServicesList[0] - .serviceID),), + .serviceID):1), Expanded( child: Padding( padding: const EdgeInsets.all(20.0), diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart index 8499908a..ee06c8bb 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart @@ -1,3 +1,4 @@ +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -12,7 +13,7 @@ class CMCIndexPage extends StatelessWidget { Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: "Service Information", + appBarTitle: TranslationBase.of(context).serviceInformation, body: SingleChildScrollView( padding: EdgeInsets.all(12), child: Column( diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart index 0613ff80..5938ac48 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart @@ -1,9 +1,8 @@ import 'dart:ui'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_request_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; -import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; @@ -39,12 +38,11 @@ class _CMCPageState extends State onModelReady: (model){ model.getCMCAllServices(); - // model.getCheckupItems(cMCGetItemsRequestModel); model.getCmcAllPresOrders(); }, builder: (_, model, widget) => AppScaffold( isShowAppBar: true, - appBarTitle: "Home Health Care", + appBarTitle: TranslationBase.of(context).homeHealthCare, body: Scaffold( extendBodyBehindAppBar: true, appBar: PreferredSize( @@ -98,7 +96,7 @@ class _CMCPageState extends State Container( width: MediaQuery.of(context).size.width * 0.37, child: Center( - child: Texts("Order Log"), + child: Texts(TranslationBase.of(context).orderLog), ), ), ], diff --git a/lib/pages/AlHabibMedicalService/E-Referral/e_referral_index_page.dart b/lib/pages/AlHabibMedicalService/E-Referral/e_referral_index_page.dart index 00148889..9080c7e4 100644 --- a/lib/pages/AlHabibMedicalService/E-Referral/e_referral_index_page.dart +++ b/lib/pages/AlHabibMedicalService/E-Referral/e_referral_index_page.dart @@ -19,7 +19,7 @@ class EReferralIndexPage extends StatelessWidget { Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: "Service Information", + appBarTitle: TranslationBase.of(context).serviceInformation, body: SingleChildScrollView( padding: EdgeInsets.all(12), child: diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart index 2331a489..6ef860ee 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart @@ -1,5 +1,4 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart'; diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart index 057fe8c3..3c14c2a7 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart @@ -1,3 +1,4 @@ +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -13,14 +14,14 @@ class HomeHealthCareIndexPage extends StatelessWidget { Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: "Service Information", + appBarTitle: TranslationBase.of(context).serviceInformation, body: SingleChildScrollView( padding: EdgeInsets.all(12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Texts( - "Water Tracker:", + TranslationBase.of(context).homeHealthCare, fontWeight: FontWeight.normal, fontSize: 25, color: Hexcolor("#60686b"), @@ -29,7 +30,7 @@ class HomeHealthCareIndexPage extends StatelessWidget { height: 12, ), Texts( - "This service is designed to help you to set drinking water goals and track the volume of water you are drinking on a daily basis. This service allows for schedule reminders and offers a basic statistical analysis of the amount of what you have consumed over the course of a day, week or month.", + TranslationBase.of(context).homeHealthCareText, fontWeight: FontWeight.normal, fontSize: 17, ), @@ -53,12 +54,12 @@ class HomeHealthCareIndexPage extends StatelessWidget { width: MediaQuery.of(context).size.width * 0.9, child: SecondaryButton( onTap: () => Navigator.push( - context, - FadePage( - page: HomeHealthCarePage(), - ), - ), - label: "Home Health Care Page", + context, + FadePage( + page: HomeHealthCarePage(), + ), + ), + label: TranslationBase.of(context).loginRegister, textColor: Theme.of(context).backgroundColor), ), ], diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart index 21090e6a..9bebea72 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart @@ -3,6 +3,7 @@ import 'dart:ui'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/all_habib_medical_services/e_referral_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; @@ -41,7 +42,7 @@ class _HomeHealthCarePageState extends State }, builder: (_, model, widget) => AppScaffold( isShowAppBar: true, - appBarTitle: "Home Health Care", + appBarTitle: TranslationBase.of(context).homeHealthCare, body: Scaffold( extendBodyBehindAppBar: true, appBar: PreferredSize( @@ -89,13 +90,13 @@ class _HomeHealthCarePageState extends State Container( width: MediaQuery.of(context).size.width * 0.37, child: Center( - child: Texts("Home Health Care"), + child: Texts(TranslationBase.of(context).homeHealthCare), ), ), Container( width: MediaQuery.of(context).size.width * 0.37, child: Center( - child: Texts("Order Log"), + child: Texts(TranslationBase.of(context).orderLog), ), ), ], diff --git a/lib/pages/AlHabibMedicalService/h2o/h2o_index_page.dart b/lib/pages/AlHabibMedicalService/h2o/h2o_index_page.dart index 33048b2f..9e3c4457 100644 --- a/lib/pages/AlHabibMedicalService/h2o/h2o_index_page.dart +++ b/lib/pages/AlHabibMedicalService/h2o/h2o_index_page.dart @@ -1,4 +1,5 @@ import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/h2o_page.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -12,7 +13,7 @@ class H2OPageIndexPage extends StatelessWidget { Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: "Service Information", + appBarTitle: TranslationBase.of(context).serviceInformation, body: SingleChildScrollView( padding: EdgeInsets.all(12), child: Column( diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 28b273e5..55ff42bc 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -589,6 +589,11 @@ class TranslationBase { String get all => localizedValues['All'][locale.languageCode]; String get questionHere => localizedValues['QuestionHere'][locale.languageCode]; String get viewDoctorResponses => localizedValues['ViewDoctorResponses'][locale.languageCode]; + String get serviceInformation => localizedValues['ServiceInformation'][locale.languageCode]; + String get homeHealthCare => localizedValues['HomeHealthCare'][locale.languageCode]; + String get homeHealthCareText => localizedValues['HomeHealthCareText'][locale.languageCode]; + String get loginRegister => localizedValues['LoginRegister'][locale.languageCode]; + String get orderLog => localizedValues['OrderLog'][locale.languageCode]; } From a359a6cd1a8846f5c7664a70012a9a0fb205a92c Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Mon, 12 Oct 2020 10:58:14 +0300 Subject: [PATCH 07/11] fix the loader issue --- .../AlHabibMedicalService/cmc_view_model.dart | 39 +++++++++---------- .../home_health_care_view_model.dart | 24 +++++++----- .../NewCMC/new_cmc_page.dart | 1 - .../ComprehensiveMedicalCheckup/cmc_page.dart | 2 - .../orders_log_details_page.dart | 1 - .../new_home_health_care_page.dart | 2 +- .../HomeHealthCare/home_health_care_page.dart | 2 +- .../orders_log_details_page.dart | 2 +- 8 files changed, 35 insertions(+), 38 deletions(-) diff --git a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart index a37228ad..214514d7 100644 --- a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart @@ -30,7 +30,6 @@ class CMCViewModel extends BaseViewModel { bool get isOrderUpdated => _cMCService.isOrderUpdated; Future getCMCAllServices() async { - setState(ViewState.Busy); await _cMCService .getCMCAllServices(); CMCGetItemsRequestModel cMCGetItemsRequestModel = new CMCGetItemsRequestModel(checkupType: cmcAllServicesList[0].iD); @@ -44,14 +43,11 @@ class CMCViewModel extends BaseViewModel { } } Future getCheckupItems(CMCGetItemsRequestModel cMCGetItemsRequestModel) async { - setState(ViewState.Busy); await _cMCService .getCheckupItems(cMCGetItemsRequestModel); if (_cMCService.hasError) { error = _cMCService.error; setState(ViewState.Error); - } else { - setState(ViewState.Idle); } } @@ -62,12 +58,15 @@ class CMCViewModel extends BaseViewModel { error = _cMCService.error; setState(ViewState.Error); } else { - var pendingOrder = _cMCService.cmcAllPresOrdersList - .firstWhere((element) => element.status == 1 || element.status == 2, + var pendingOrder = _cMCService.cmcAllPresOrdersList.firstWhere( + (element) => element.status == 1 || element.status == 2, orElse: () => null); - if (pendingOrder != null) + if (pendingOrder != null) { await getOrderDetailByOrderID(pendingOrder); - setState(ViewState.Idle); + setState(ViewState.Idle); + } else { + getCMCAllServices(); + } } } @@ -85,18 +84,16 @@ class CMCViewModel extends BaseViewModel { } Future getOrderDetailByOrderID(GetHHCAllPresOrdersResponseModel order) async { - GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel = GetOrderDetailByOrderIDRequestModel( - presOrderID: order.iD); - setState(ViewState.Busy); - await _cMCService.getOrderDetailByOrderID( - getOrderDetailByOrderIDRequestModel); - if (_cMCService.hasError) { - error = _cMCService.error; - setState(ViewState.Error); - } else { - setState(ViewState.Idle); - } + GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel = + GetOrderDetailByOrderIDRequestModel(presOrderID: order.iD); + // setState(ViewState.Busy); + await _cMCService + .getOrderDetailByOrderID(getOrderDetailByOrderIDRequestModel); + // if (_cMCService.hasError) { + // error = _cMCService.error; + // setState(ViewState.Error); + // } else { + // setState(ViewState.Idle); + // } } - - } \ No newline at end of file diff --git a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart index 01043596..2ef1de93 100644 --- a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart @@ -28,7 +28,7 @@ class HomeHealthCareViewModel extends BaseViewModel { Future getHHCAllServices() async { HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel = new HHCGetAllServicesRequestModel(); - setState(ViewState.Busy); + //setState(ViewState.Busy); await _homeHealthCareService .getHHCAllServices(hHCGetAllServicesRequestModel); if (_homeHealthCareService.hasError) { @@ -49,9 +49,13 @@ class HomeHealthCareViewModel extends BaseViewModel { var pendingOrder = _homeHealthCareService.hhcAllPresOrdersList .firstWhere((element) => element.status == 1 || element.status == 2, orElse: () => null); - if (pendingOrder != null) + if (pendingOrder != null) { await getOrderDetailByOrderID(pendingOrder); - setState(ViewState.Idle); + setState(ViewState.Idle); + } else { + getHHCAllServices(); + } + } } @@ -71,15 +75,15 @@ class HomeHealthCareViewModel extends BaseViewModel { Future getOrderDetailByOrderID(GetHHCAllPresOrdersResponseModel order) async { GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel = GetOrderDetailByOrderIDRequestModel( presOrderID: order.iD); - setState(ViewState.Busy); + // setState(ViewState.Busy); await _homeHealthCareService.getOrderDetailByOrderID( getOrderDetailByOrderIDRequestModel); - if (_homeHealthCareService.hasError) { - error = _homeHealthCareService.error; - setState(ViewState.Error); - } else { - setState(ViewState.Idle); - } + // if (_homeHealthCareService.hasError) { + // error = _homeHealthCareService.error; + // setState(ViewState.Error); + // } else { + // setState(ViewState.Idle); + // } } diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart index f21aa8f0..494b0920 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart @@ -85,7 +85,6 @@ class _NewCMCPageState extends State } else { AppToast.showSuccessToast(message: "Done Successfully"); await model.getCmcAllPresOrders(); - await model.getCMCAllServices(); } }, )); diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart index 5938ac48..385d0da3 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart @@ -36,8 +36,6 @@ class _CMCPageState extends State Widget build(BuildContext context) { return BaseView( onModelReady: (model){ - - model.getCMCAllServices(); model.getCmcAllPresOrders(); }, builder: (_, model, widget) => AppScaffold( diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart index 95f16cf2..6c915a4c 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/orders_log_details_page.dart @@ -37,7 +37,6 @@ class OrdersLogDetailsPage extends StatelessWidget { } else { AppToast.showSuccessToast(message: "Done Successfully"); await model.getCmcAllPresOrders(); - await model.getCMCAllServices(); } }, )); diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart index 6ef860ee..84f59e25 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart @@ -67,7 +67,7 @@ class _NewHomeHealthCarePageState extends State } else { AppToast.showSuccessToast(message: "Done Successfully"); await model.getHHCAllPresOrders(); - await model.getHHCAllServices(); + // await model.getHHCAllServices(); } }, )); diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart index 9bebea72..8f4821f6 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart @@ -37,7 +37,7 @@ class _HomeHealthCarePageState extends State Widget build(BuildContext context) { return BaseView( onModelReady: (model){ - model.getHHCAllServices(); + // model.getHHCAllServices(); model.getHHCAllPresOrders(); }, builder: (_, model, widget) => AppScaffold( diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart index 2a4fedd4..0cfedb41 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/orders_log_details_page.dart @@ -37,7 +37,7 @@ class OrdersLogDetailsPage extends StatelessWidget { } else { AppToast.showSuccessToast(message: "Done Successfully"); await model.getHHCAllPresOrders(); - await model.getHHCAllServices(); + // await model.getHHCAllServices(); } }, )); From c0a54c8cbcc8ee1b2ef3084487c7c42e8133c063 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Mon, 12 Oct 2020 11:50:50 +0300 Subject: [PATCH 08/11] remove commit --- .../viewModels/AlHabibMedicalService/cmc_view_model.dart | 7 ------- 1 file changed, 7 deletions(-) diff --git a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart index 214514d7..b4c805b7 100644 --- a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart @@ -86,14 +86,7 @@ class CMCViewModel extends BaseViewModel { Future getOrderDetailByOrderID(GetHHCAllPresOrdersResponseModel order) async { GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel = GetOrderDetailByOrderIDRequestModel(presOrderID: order.iD); - // setState(ViewState.Busy); await _cMCService .getOrderDetailByOrderID(getOrderDetailByOrderIDRequestModel); - // if (_cMCService.hasError) { - // error = _cMCService.error; - // setState(ViewState.Error); - // } else { - // setState(ViewState.Idle); - // } } } \ No newline at end of file From bd2254491c6051cf377823209971348acea7176b Mon Sep 17 00:00:00 2001 From: jammal Date: Mon, 19 Oct 2020 14:35:20 +0300 Subject: [PATCH 09/11] done ER service --- android/app/build.gradle | 30 ++++++-- android/app/src/main/AndroidManifest.xml | 2 +- ios/Runner/AppDelegate.swift | 2 + lib/config/config.dart | 3 +- lib/core/model/er/PatientER.dart | 2 +- lib/core/model/er/PickUpRequestPresOrder.dart | 2 +- lib/core/service/er/am_service.dart | 24 ++++++- .../viewModels/er/am_request_view_model.dart | 14 ++++ lib/core/viewModels/qr_view_model.dart | 41 +++++------ lib/pages/ErService/AmbulanceReq.dart | 9 +-- .../AmbulanceRequestIndex.dart | 71 ++++++++++++++++++- .../PickupLocation.dart | 27 ++++++- .../SelectTransportationMethod.dart | 1 - lib/pages/ErService/OrderLogPage.dart | 24 +++++++ pubspec.yaml | 6 +- 15 files changed, 213 insertions(+), 45 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 9640ea61..5d196986 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -27,7 +27,7 @@ apply plugin: 'com.google.gms.google-services' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 28 + compileSdkVersion 30 sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -41,19 +41,28 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.cloud.diplomaticquarterapp" minSdkVersion 21 - targetSdkVersion 28 + targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true - + } buildTypes { + debug {} release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } + staging { + // Specifies a sorted list of fallback build types that the + // plugin should try to use when a dependency does not include a + // "staging" build type. You may specify as many fallbacks as you + // like, and the plugin selects the first build type that's + // available in the dependency. + matchingFallbacks = ['debug', 'qa', 'release'] + } } } @@ -63,8 +72,15 @@ flutter { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "com.google.firebase:firebase-messaging:20.1.0" - implementation 'pub.devrel:easypermissions:0.4.0' - - + implementation "com.google.firebase:firebase-messaging:20.3.0" + implementation 'pub.devrel:easypermissions:0.4.0' + implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0' + implementation 'com.google.guava:guava:27.0.1-android' + // Dependency on local binaries + implementation fileTree(dir: 'libs', include: ['*.jar']) + + // Dependency on a remote binary +// implementation 'com.example.android:app-magic:12.3' + + } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 8c32edfd..749928d0 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -73,7 +73,7 @@ android:value="2" /> + android:value="AIzaSyDiXnCO00li4V7Ioa2YZ_M4ECxRsu_P9tA"/> diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 70693e4a..23dd69b8 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,5 +1,6 @@ import UIKit import Flutter +import GoogleMaps @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { @@ -7,6 +8,7 @@ import Flutter _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { + GMSServices.provideAPIKey("AIzaSyCiiJiHkocPbcziHt9O8rGWavDrxHRQys8") GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } diff --git a/lib/config/config.dart b/lib/config/config.dart index a3ce19e9..6513f03b 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -6,7 +6,7 @@ import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart'; const MAX_SMALL_SCREEN = 660; -const BASE_URL = 'https://hmgwebservices.com/'; +const BASE_URL = 'https://uat.hmgwebservices.com/'; const GET_PROJECT = 'Services/Lists.svc/REST/GetProject'; @@ -60,6 +60,7 @@ const GET_NEAREST_HOSPITAL = const GET_AMBULANCE_REQUEST = 'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod'; const GET_PATIENT_ALL_PRES_ORDERS= 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; const GET_PICK_UP_REQUEST_BY_PRES_ORDER_ID= 'Services/Patients.svc/REST/PatientER_RRT_GetPickUpRequestByPresOrderID'; +const UPDATE_PRESS_ORDER= 'Services/Patients.svc/REST/PatientER_UpdatePresOrder'; ///FindUs const GET_FINDUS_REQUEST = 'Services/Lists.svc/REST/Get_HMG_Locations'; diff --git a/lib/core/model/er/PatientER.dart b/lib/core/model/er/PatientER.dart index d0827311..f1694f9e 100644 --- a/lib/core/model/er/PatientER.dart +++ b/lib/core/model/er/PatientER.dart @@ -36,7 +36,7 @@ class PatientER { int projectID; int createdBy; int lineItemNo; - int cost; + double cost; double vAT; double totalPrice; String pickupLocationLattitude; diff --git a/lib/core/model/er/PickUpRequestPresOrder.dart b/lib/core/model/er/PickUpRequestPresOrder.dart index 9ce3e678..376e30ae 100644 --- a/lib/core/model/er/PickUpRequestPresOrder.dart +++ b/lib/core/model/er/PickUpRequestPresOrder.dart @@ -18,7 +18,7 @@ class PickUpRequestPresOrder { int pickupSpot; dynamic dropoffLocationId; int transportationMethodId; - int cost; + double cost; double vAT; double totalPrice; int amountCollected; diff --git a/lib/core/service/er/am_service.dart b/lib/core/service/er/am_service.dart index b654e0eb..1e8480d4 100644 --- a/lib/core/service/er/am_service.dart +++ b/lib/core/service/er/am_service.dart @@ -4,6 +4,7 @@ import 'package:diplomaticquarterapp/core/enum/OrderService.dart'; import 'package:diplomaticquarterapp/core/model/er/PatientAllPresOrders.dart'; import 'package:diplomaticquarterapp/core/model/er/PickUpRequestPresOrder.dart'; import 'package:diplomaticquarterapp/core/model/er/get_all_transportation_method_list_model.dart'; +import 'package:flutter/cupertino.dart'; import '../base_service.dart'; class AmService extends BaseService { @@ -35,6 +36,7 @@ class AmService extends BaseService { Future getPatientAllPresOrdersList() async { hasError = false; hasPendingOrder = false; + pickUpRequestPresOrder = null; await baseAppClient.post(GET_PATIENT_ALL_PRES_ORDERS, onSuccess: (dynamic response, int statusCode) { patientAllPresOrdersList.clear(); @@ -58,12 +60,11 @@ class AmService extends BaseService { Future getOrderDetails() async { hasError = false; - hasPendingOrder = false; Map body = Map(); body['PresOrderID'] = pendingOrderID; + body['isDentalAllowedBackend'] = false; await baseAppClient.post(GET_PICK_UP_REQUEST_BY_PRES_ORDER_ID, onSuccess: (dynamic response, int statusCode) { - patientAllPresOrdersList.clear(); response['PatientER_RRT_GetPickUpRequestByPresOrderIDList'] .forEach((item) { pickUpRequestPresOrder = PickUpRequestPresOrder.fromJson(item); @@ -71,6 +72,23 @@ class AmService extends BaseService { }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; - }, body: Map()); + }, body: body); + } + + Future updatePressOrder({@required int presOrderID}) async { + hasError = false; + Map body = Map(); + body['PresOrderID'] = presOrderID; + body['EditedBy'] = 3; + body['RejectionReason'] = ''; + body['PresOrderStatus'] = OrderService.AMBULANCE.getIdOrderService(); + body['isDentalAllowedBackend'] = false; + await baseAppClient.post(UPDATE_PRESS_ORDER, + onSuccess: (dynamic response, int statusCode) { + + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: body); } } diff --git a/lib/core/viewModels/er/am_request_view_model.dart b/lib/core/viewModels/er/am_request_view_model.dart index fbd3d95d..222a3f8c 100644 --- a/lib/core/viewModels/er/am_request_view_model.dart +++ b/lib/core/viewModels/er/am_request_view_model.dart @@ -1,5 +1,6 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/er/PatientAllPresOrders.dart'; +import 'package:diplomaticquarterapp/core/model/er/PickUpRequestPresOrder.dart'; import 'package:diplomaticquarterapp/core/model/er/get_all_transportation_method_list_model.dart'; import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart'; import 'package:diplomaticquarterapp/core/service/er/am_service.dart'; @@ -7,6 +8,7 @@ import 'package:diplomaticquarterapp/core/service/hospital_service.dart'; import 'package:diplomaticquarterapp/core/service/medical/medical_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:flutter/cupertino.dart'; import '../base_view_model.dart'; import '../../../locator.dart'; @@ -28,6 +30,8 @@ class AmRequestViewModel extends BaseViewModel { bool get hasPendingOrder =>_amService.hasPendingOrder; + PickUpRequestPresOrder get pickUpRequestPresOrder =>_amService.pickUpRequestPresOrder; + Future getAppointmentHistory() async { setState(ViewState.BusyLocal); await _medicalService.getAppointmentHistory(isActiveAppointment: true); @@ -79,4 +83,14 @@ class AmRequestViewModel extends BaseViewModel { } else setState(ViewState.Idle); } + + Future updatePressOrder({@required int presOrderID}) async { + setState(ViewState.Busy); + await _amService.updatePressOrder(presOrderID: presOrderID); + if (_hospitalService.hasError) { + error = _hospitalService.error; + setState(ViewState.Error); + } else + getPatientAllPresOrdersList(); + } } diff --git a/lib/core/viewModels/qr_view_model.dart b/lib/core/viewModels/qr_view_model.dart index cc03d9ab..03c88462 100644 --- a/lib/core/viewModels/qr_view_model.dart +++ b/lib/core/viewModels/qr_view_model.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:barcode_scan/platform_wrapper.dart'; +// import 'package:barcode_scan/platform_wrapper.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/qr/qr_parking_model.dart'; @@ -14,25 +14,26 @@ class QrViewModel extends BaseViewModel { QRParkingModel qrParkingModel; readQr() async { - var result = await BarcodeScanner.scan(); - var data = json.decode(result.rawContent); - var qRParkingID = data['QRParkingID']; - setState(ViewState.BusyLocal); - await _qrService.getQRParkingByID(qRParkingID); - if (_qrService.hasError) { - error = _qrService.error; - setState(ViewState.ErrorLocal); - } else { - if (_qrService.qRParkingList.length > 0) { - qrParkingModel = _qrService.qRParkingList[0]; - await sharedPref.setObject(IS_GO_TO_PARKING, qrParkingModel); - isSavePark = true; - setState(ViewState.Idle); - } else { - error = "Invalid Qr Code"; - setState(ViewState.ErrorLocal); - } - } + //TODO fix the barcode scan + // var result = await BarcodeScanner.scan(); + // var data = json.decode(result.rawContent); + // var qRParkingID = data['QRParkingID']; + // setState(ViewState.BusyLocal); + // await _qrService.getQRParkingByID(qRParkingID); + // if (_qrService.hasError) { + // error = _qrService.error; + // setState(ViewState.ErrorLocal); + // } else { + // if (_qrService.qRParkingList.length > 0) { + // qrParkingModel = _qrService.qRParkingList[0]; + // await sharedPref.setObject(IS_GO_TO_PARKING, qrParkingModel); + // isSavePark = true; + // setState(ViewState.Idle); + // } else { + // error = "Invalid Qr Code"; + // setState(ViewState.ErrorLocal); + // } + // } } getIsSaveParking() async { diff --git a/lib/pages/ErService/AmbulanceReq.dart b/lib/pages/ErService/AmbulanceReq.dart index ec96f482..413d80e6 100644 --- a/lib/pages/ErService/AmbulanceReq.dart +++ b/lib/pages/ErService/AmbulanceReq.dart @@ -3,6 +3,9 @@ import 'package:diplomaticquarterapp/core/viewModels/medical/prescriptions_view_ import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_history_page.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_page.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/others/OrderLogItem.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'dart:ui'; @@ -66,7 +69,7 @@ class _AmbulanceReqState extends State child: Container( height: 60.0, margin: EdgeInsets.only(top: 10.0), - width: MediaQuery.of(context).size.width * 0.9, + width: MediaQuery.of(context).size.width * 0.93, decoration: BoxDecoration( border: Border( bottom: BorderSide( @@ -114,9 +117,7 @@ class _AmbulanceReqState extends State physics: BouncingScrollPhysics(), controller: _tabController, children: [ - model.hasPendingOrder - ? Container() - : AmbulanceRequestIndexPage( + AmbulanceRequestIndexPage( amRequestViewModel: model, ), OrderLogPage( diff --git a/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart b/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart index 55e75e22..e4b923b2 100644 --- a/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart +++ b/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart @@ -1,8 +1,13 @@ import 'package:diplomaticquarterapp/core/model/er/PatientER.dart'; import 'package:diplomaticquarterapp/core/viewModels/er/am_request_view_model.dart'; import 'package:diplomaticquarterapp/pages/ErService/widgets/StepsWidget.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/others/OrderLogItem.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'BillAmount.dart'; import 'PickupLocation.dart'; @@ -40,7 +45,71 @@ class _AmbulanceRequestIndexPageState extends State { @override Widget build(BuildContext context) { return AppScaffold( - body: Column( + body: widget.amRequestViewModel.pickUpRequestPresOrder!=null + ? Column( + children: [ + SizedBox( + height: 80, + ), + Container( + margin: EdgeInsets.only(left: 18, right: 18), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(2), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + OrderLogItem( + title: 'Request ID', + value: widget.amRequestViewModel.pickUpRequestPresOrder.presOrderID.toString(), + ), + OrderLogItem( + title: 'Status', + value: widget.amRequestViewModel.pickUpRequestPresOrder.ambulateDescription, + ), + OrderLogItem( + title: 'Last edit time', + value: DateUtil.getDayMonthYearDateFormatted( + DateUtil.convertStringToDate(widget.amRequestViewModel.pickUpRequestPresOrder.lastEditDate)), + ), + OrderLogItem( + title: 'Pickup Location', + value: widget.amRequestViewModel.pickUpRequestPresOrder.pickupLocationName, + ), + OrderLogItem( + title: 'Drop off Location', + value: widget.amRequestViewModel.pickUpRequestPresOrder.dropoffLocationName, + ), + OrderLogItem( + title: 'Trasfaer way', + value: widget.amRequestViewModel.pickUpRequestPresOrder.title, + ), + Container( + padding: EdgeInsets.all(10), + width: double.maxFinite, + margin: EdgeInsets.only(bottom: 4,left: 4,right: 4), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomRight: Radius.circular(12), + bottomLeft: Radius.circular(12), + ), + color: Colors.white + ), + child: SecondaryButton( + color: Colors.red[900], + textColor: Colors.white, + label: TranslationBase.of(context).cancel, + onTap: () { + widget.amRequestViewModel.updatePressOrder(presOrderID:widget.amRequestViewModel.pickUpRequestPresOrder.presOrderID ); + }, + ), + ) + ], + ), + ), + ], + ):Column( children: [ SizedBox( height: 80, diff --git a/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart b/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart index 795f4dcc..bb6db7c0 100644 --- a/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart +++ b/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart @@ -73,7 +73,7 @@ class _PickupLocationState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (widget.patientER.direction == 1) + if (widget.patientER.direction == 0) Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -310,7 +310,7 @@ class _PickupLocationState extends State { context, MaterialPageRoute( builder: (context) => PlacePicker( - apiKey: 'AIzaSyCiD4YqVqLNYbt8-htvFy4Wp8XSph9E3wM​', + apiKey: 'AIzaSyDiXnCO00li4V7Ioa2YZ_M4ECxRsu_P9tA', // Put YOUR OWN KEY here. onPlacePicked: (PickResult result) { print(result.adrAddress); @@ -319,6 +319,29 @@ class _PickupLocationState extends State { }); Navigator.of(context).pop(); }, + selectedPlaceWidgetBuilder: (_, selectedPlace, state, isSearchBarFocused) { + print("state: $state, isSearchBarFocused: $isSearchBarFocused"); + return isSearchBarFocused + ? Container() + : FloatingCard( + bottomPosition: 0.0, // MediaQuery.of(context) will cause rebuild. See MediaQuery document for the information. + leftPosition: 0.0, + rightPosition: 0.0, + width: 500, + borderRadius: BorderRadius.circular(12.0), + child: state == SearchingState.Searching + ? Center(child: CircularProgressIndicator()) + : RaisedButton( + child: Text("Pick Here"), + onPressed: () { + // IMPORTANT: You MUST manage selectedPlace data yourself as using this build will not invoke onPlacePicker as + // this will override default 'Select here' Button. + print("do something with [selectedPlace] data"); + Navigator.of(context).pop(); + }, + ), + ); + }, initialPosition: LatLng(_latitude, _longitude), useCurrentLocation: true, ), diff --git a/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart b/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart index 59c3b85c..563e388a 100644 --- a/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart +++ b/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart @@ -294,7 +294,6 @@ class _SelectTransportationMethodState widget.patientER.cost = _erTransportationMethod.price; widget.patientER.vAT = _erTransportationMethod.vAT ?? 0; widget.patientER.totalPrice = _erTransportationMethod.totalPrice; - widget.changeCurrentTab(1); }); }, diff --git a/lib/pages/ErService/OrderLogPage.dart b/lib/pages/ErService/OrderLogPage.dart index cbb508e5..6929cd0b 100644 --- a/lib/pages/ErService/OrderLogPage.dart +++ b/lib/pages/ErService/OrderLogPage.dart @@ -1,6 +1,8 @@ import 'package:diplomaticquarterapp/core/model/er/PatientAllPresOrders.dart'; import 'package:diplomaticquarterapp/core/viewModels/er/am_request_view_model.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/OrderLogItem.dart'; import 'package:flutter/cupertino.dart'; @@ -53,6 +55,28 @@ class OrderLogPage extends StatelessWidget { value: amRequestViewModel .patientAllPresOrdersList[index].dropoffLocationName, ), + if(amRequestViewModel.patientAllPresOrdersList[index].status==1) + Container( + padding: EdgeInsets.all(10), + width: double.maxFinite, + margin: EdgeInsets.only(bottom: 4,left: 4,right: 4), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomRight: Radius.circular(12), + bottomLeft: Radius.circular(12), + ), + color: Colors.white + ), + child: SecondaryButton( + color: Colors.red[900], + textColor: Colors.white, + label: TranslationBase.of(context).cancel, + onTap: () { + amRequestViewModel.updatePressOrder(presOrderID:amRequestViewModel.pickUpRequestPresOrder.presOrderID ); + + }, + ), + ) ], ), ), diff --git a/pubspec.yaml b/pubspec.yaml index f7e1e67a..fc385b85 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -75,8 +75,8 @@ dependencies: # charts charts_flutter: ^0.9.0 - # Qr code Scanner - barcode_scan: ^3.0.1 + # Qr code Scanner TODO fix it + #barcode_scan: ^3.0.1 # Rating Stars rating_bar: ^0.2.0 @@ -136,7 +136,7 @@ dependencies: #google maps places - google_maps_place_picker: ^0.10.0 + google_maps_place_picker: ^1.0.0 #Dependencies for video call implementation native_device_orientation: ^0.3.0 From 9328f942bacbe5d00136bf56f4e30c5ee5f59eb4 Mon Sep 17 00:00:00 2001 From: jammal Date: Wed, 21 Oct 2020 18:02:03 +0300 Subject: [PATCH 10/11] done ER service --- android/app/src/main/AndroidManifest.xml | 2 +- lib/config/config.dart | 5 +- lib/config/localized_values.dart | 21 +- ...nt_er_insert_pres_order_request_model.dart | 4 +- .../home_health_care_service.dart | 63 +-- lib/core/service/client/base_app_client.dart | 1 + lib/core/service/er/am_service.dart | 13 + .../home_health_care_view_model.dart | 25 +- .../viewModels/er/am_request_view_model.dart | 20 +- .../cmc_index_page.dart | 2 +- .../new_Home_health_care_step_one_page.dart | 74 +-- .../new_home_health_care_page.dart | 439 +++++++++--------- .../HomeHealthCare/StepsWidget.dart | 181 ++++++++ .../home_health_care_index_page.dart | 2 +- .../AmbulanceRequestIndex.dart | 201 ++++---- .../PickupLocation.dart | 184 ++++---- .../SelectTransportationMethod.dart | 5 +- .../AmbulanceRequestIndexPages/Summary.dart | 8 +- lib/uitl/date_uitl.dart | 8 + lib/uitl/translations_delegate_base.dart | 6 +- lib/widgets/others/close_back.dart | 2 +- .../pickupLocation/PickupLocationFromMap.dart | 77 +++ 22 files changed, 824 insertions(+), 519 deletions(-) create mode 100644 lib/pages/AlHabibMedicalService/HomeHealthCare/StepsWidget.dart create mode 100644 lib/widgets/pickupLocation/PickupLocationFromMap.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 749928d0..d0751535 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -73,7 +73,7 @@ android:value="2" /> + android:value="AIzaSyCmevVlr2Bh-c8W1VUzo8gt8JRY7n5PANw"/> diff --git a/lib/config/config.dart b/lib/config/config.dart index 56f16be3..40ffc502 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -60,7 +60,8 @@ const GET_NEAREST_HOSPITAL = const GET_AMBULANCE_REQUEST = 'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod'; const GET_PATIENT_ALL_PRES_ORDERS= 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; const GET_PICK_UP_REQUEST_BY_PRES_ORDER_ID= 'Services/Patients.svc/REST/PatientER_RRT_GetPickUpRequestByPresOrderID'; -const UPDATE_PRESS_ORDER= 'Services/Patients.svc/REST/PatientER_UpdatePresOrder'; +const UPDATE_PRESS_ORDER = 'Services/Patients.svc/REST/PatientER_UpdatePresOrder'; +const INSERT_ER_INERT_PRES_ORDER = 'Services/Patients.svc/REST/PatientER_InsertPresOrder'; ///FindUs const GET_FINDUS_REQUEST = 'Services/Lists.svc/REST/Get_HMG_Locations'; @@ -334,6 +335,8 @@ const GET_CHECK_UP_ITEMS ="Services/Patients.svc/REST/GetCheckUpItems"; const TIMER_MIN = 10; +const GOOGLE_API_KEY = "AIzaSyCmevVlr2Bh-c8W1VUzo8gt8JRY7n5PANw"; + class AppGlobal { static var context; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 033dab5f..a44ffec6 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -609,26 +609,7 @@ const Map> localizedValues = { "en": "Order Log", "ar": " سجل الطلبات" }, - "Power":{"en":"Power","ar":"القوة"}, - "Diameter":{"en":"Diameter","ar":"القطر"}, - "Remarks":{"en":"Remarks","ar":"ملاحضات"}, - "ActiveMedications":{"en":"Active Medications","ar":"ادويتي النشطة"}, - "ExpDate":{"en":"Active Exp Date :","VA":"تاريخ الإنتهاء"}, - "Route":{"en":"Route :","ar":"الطريقة"}, - "Frequency":{"en":"Frequency :","ar":"المعدل"}, - "DailyQuantity":{"en":"Daily Quantity :","ar":"جرعات يومية"}, - "AddReminder":{"en":"Add Reminder","ar":"إضافة تذكير"}, - "reminderDes":{"en":"Please select treatment start day and time to be notified when it\'s time to take the medicine","ar":" يرجى تحديد يوم بدء العلاج والوقت ليتم ارسال تنبيه عندما يحين الوقت لتناول الدواء"}, - "StartDay":{"en":"Start Day","ar":"يوم البداية"}, - "EndDay":{"en":"End Day","ar":"يوم الانتهاء"}, - "Days":{"en":"Days ","ar":"أيام"}, - "ScheduleTime":{"en":"Schedule time","ar":"الجدول الزمني"}, - "AskDoctor":{"en":"Ask Doctor","ar":"اسأل طبيبك"}, - "DoctorResponses":{"en":"Doctor Responses","ar":"ردود الأطباء"}, - "New":{"en":"New","ar":"جديد"}, - "All":{"en":"All","ar":"الكل"}, - "QuestionHere":{"en":"Enter the question here...","ar":"اضف الاستفسار هنا"}, - "ViewDoctorResponses":{"en":"View Doctor Responses","ar":"الاطلاع على ردود الأطباء"}, + "ServiceInformationButton":{"en":"LOGIN / REGISTER","ar":"دخول / تسجيل"}, "ServiceInformationTitle":{"en":"Service Information","ar":"معلومات الخدمة"}, "info-lab": { diff --git a/lib/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart b/lib/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart index 8b300bca..198ae285 100644 --- a/lib/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart +++ b/lib/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart @@ -18,7 +18,7 @@ class PatientERInsertPresOrderRequestModel { double longitude; int createdBy; int orderServiceID; - List patientERHHCInsertServicesList; + List patientERHHCInsertServicesList =List(); PatientERInsertPresOrderRequestModel( {this.versionID, @@ -38,7 +38,7 @@ class PatientERInsertPresOrderRequestModel { this.longitude, this.createdBy, this.orderServiceID, - this.patientERHHCInsertServicesList}); + }); PatientERInsertPresOrderRequestModel.fromJson(Map json) { versionID = json['VersionID']; diff --git a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart index ffa823e8..45a871cd 100644 --- a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart +++ b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart @@ -16,6 +16,7 @@ class HomeHealthCareService extends BaseService { List hhcAllOrderDetail = List(); bool isOrderUpdated; + Future getHHCAllServices( HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel) async { hasError = false; @@ -31,49 +32,51 @@ class HomeHealthCareService extends BaseService { }, body: hHCGetAllServicesRequestModel.toJson()); } - - Future getHHCAllPresOrders() async { - - GetHHCAllPresOrdersRequestModel getHHCAllPresOrdersRequestModel= GetHHCAllPresOrdersRequestModel(); + GetHHCAllPresOrdersRequestModel getHHCAllPresOrdersRequestModel = + GetHHCAllPresOrdersRequestModel(); hasError = false; await baseAppClient.post(GET_PATIENT_ALL_PRES_ORDERS, onSuccess: (dynamic response, int statusCode) { - hhcAllPresOrdersList.clear(); - response['PatientER_GetPatientAllPresOrdersList'].forEach((data) { - if(data['ServiceID'] == 2) - hhcAllPresOrdersList.add(GetHHCAllPresOrdersResponseModel.fromJson(data)); - }); - }, onFailure: (String error, int statusCode) { - hasError = true; - super.error = error; - }, body: getHHCAllPresOrdersRequestModel.toJson()); + hhcAllPresOrdersList.clear(); + response['PatientER_GetPatientAllPresOrdersList'].forEach((data) { + if (data['ServiceID'] == 2) + hhcAllPresOrdersList + .add(GetHHCAllPresOrdersResponseModel.fromJson(data)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: getHHCAllPresOrdersRequestModel.toJson()); } - Future getOrderDetailByOrderID(GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel) async { - + Future getOrderDetailByOrderID(int presOrderID) async { hasError = false; + Map body = Map(); + body['PresOrderID'] = presOrderID; + body['isDentalAllowedBackend'] = false; await baseAppClient.post(GET_ORDER_DETAIL_BY_ID, onSuccess: (dynamic response, int statusCode) { - hhcAllOrderDetail.clear(); - response['PatientER_HHC_GetTransactionsForOrderList'].forEach((data) { - hhcAllOrderDetail.add(GetOrderDetailByOrderIDResponseModel.fromJson(data)); - }); - }, onFailure: (String error, int statusCode) { - hasError = true; - super.error = error; - }, body: getOrderDetailByOrderIDRequestModel.toJson()); + hhcAllOrderDetail.clear(); + response['PatientER_HHC_GetTransactionsForOrderList'].forEach((data) { + hhcAllOrderDetail + .add(GetOrderDetailByOrderIDResponseModel.fromJson(data)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: body); } - Future updateHHCPresOrder(UpdatePresOrderRequestModel updatePresOrderRequestModel) async { - + Future updateHHCPresOrder( + UpdatePresOrderRequestModel updatePresOrderRequestModel) async { hasError = false; await baseAppClient.post(PATIENT_ER_UPDATE_PRES_ORDER, onSuccess: (dynamic response, int statusCode) { - isOrderUpdated = true; - }, onFailure: (String error, int statusCode) { - hasError = true; - super.error = error; - }, body: updatePresOrderRequestModel.toJson()); + isOrderUpdated = true; + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: updatePresOrderRequestModel.toJson()); } } diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart index 237245f8..d2bfa4fa 100644 --- a/lib/core/service/client/base_app_client.dart +++ b/lib/core/service/client/base_app_client.dart @@ -83,6 +83,7 @@ class BaseAppClient { print("URL : $url"); print("Body : ${json.encode(body)}"); + var ss = json.encode(body); if (await Utils.checkConnection()) { final response = await http.post(url.trim(), diff --git a/lib/core/service/er/am_service.dart b/lib/core/service/er/am_service.dart index 1e8480d4..2e9460b8 100644 --- a/lib/core/service/er/am_service.dart +++ b/lib/core/service/er/am_service.dart @@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/enum/OrderService.dart'; import 'package:diplomaticquarterapp/core/model/er/PatientAllPresOrders.dart'; +import 'package:diplomaticquarterapp/core/model/er/PatientER.dart'; import 'package:diplomaticquarterapp/core/model/er/PickUpRequestPresOrder.dart'; import 'package:diplomaticquarterapp/core/model/er/get_all_transportation_method_list_model.dart'; import 'package:flutter/cupertino.dart'; @@ -91,4 +92,16 @@ class AmService extends BaseService { super.error = error; }, body: body); } + + Future insertERPressOrder({@required PatientER patientER}) async { + hasError = false; + + await baseAppClient.post(INSERT_ER_INERT_PRES_ORDER, + onSuccess: (dynamic response, int statusCode) { + + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: patientER.toJson()); + } } diff --git a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart index 2ef1de93..8a4acd2b 100644 --- a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart @@ -1,6 +1,7 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/PatientERHHCInsertServicesList.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart'; @@ -25,6 +26,10 @@ class HomeHealthCareViewModel extends BaseViewModel { bool get isOrderUpdated => _homeHealthCareService.isOrderUpdated; + GetHHCAllPresOrdersResponseModel pendingOrder; + + List patientERHHCInsertServicesList = List(); + Future getHHCAllServices() async { HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel = new HHCGetAllServicesRequestModel(); @@ -40,17 +45,18 @@ class HomeHealthCareViewModel extends BaseViewModel { } Future getHHCAllPresOrders() async { + pendingOrder = null; setState(ViewState.Busy); await _homeHealthCareService.getHHCAllPresOrders(); if (_homeHealthCareService.hasError) { error = _homeHealthCareService.error; setState(ViewState.Error); } else { - var pendingOrder = _homeHealthCareService.hhcAllPresOrdersList + pendingOrder = _homeHealthCareService.hhcAllPresOrdersList .firstWhere((element) => element.status == 1 || element.status == 2, orElse: () => null); if (pendingOrder != null) { - await getOrderDetailByOrderID(pendingOrder); + await _homeHealthCareService.getOrderDetailByOrderID(pendingOrder.iD); setState(ViewState.Idle); } else { getHHCAllServices(); @@ -61,7 +67,7 @@ class HomeHealthCareViewModel extends BaseViewModel { Future updateHHCPresOrder( UpdatePresOrderRequestModel updatePresOrderRequestModel) async { - setState(ViewState.BusyLocal); + setState(ViewState.Busy); await _homeHealthCareService.updateHHCPresOrder( updatePresOrderRequestModel); if (_homeHealthCareService.hasError) { @@ -72,19 +78,6 @@ class HomeHealthCareViewModel extends BaseViewModel { } } - Future getOrderDetailByOrderID(GetHHCAllPresOrdersResponseModel order) async { - GetOrderDetailByOrderIDRequestModel getOrderDetailByOrderIDRequestModel = GetOrderDetailByOrderIDRequestModel( - presOrderID: order.iD); - // setState(ViewState.Busy); - await _homeHealthCareService.getOrderDetailByOrderID( - getOrderDetailByOrderIDRequestModel); - // if (_homeHealthCareService.hasError) { - // error = _homeHealthCareService.error; - // setState(ViewState.Error); - // } else { - // setState(ViewState.Idle); - // } - } } \ No newline at end of file diff --git a/lib/core/viewModels/er/am_request_view_model.dart b/lib/core/viewModels/er/am_request_view_model.dart index 222a3f8c..2cf8e877 100644 --- a/lib/core/viewModels/er/am_request_view_model.dart +++ b/lib/core/viewModels/er/am_request_view_model.dart @@ -1,5 +1,6 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/er/PatientAllPresOrders.dart'; +import 'package:diplomaticquarterapp/core/model/er/PatientER.dart'; import 'package:diplomaticquarterapp/core/model/er/PickUpRequestPresOrder.dart'; import 'package:diplomaticquarterapp/core/model/er/get_all_transportation_method_list_model.dart'; import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart'; @@ -77,8 +78,8 @@ class AmRequestViewModel extends BaseViewModel { Future getOrderDetails() async { setState(ViewState.Busy); await _amService.getOrderDetails(); - if (_hospitalService.hasError) { - error = _hospitalService.error; + if (_amService.hasError) { + error = _amService.error; setState(ViewState.Error); } else setState(ViewState.Idle); @@ -87,10 +88,21 @@ class AmRequestViewModel extends BaseViewModel { Future updatePressOrder({@required int presOrderID}) async { setState(ViewState.Busy); await _amService.updatePressOrder(presOrderID: presOrderID); - if (_hospitalService.hasError) { - error = _hospitalService.error; + if (_amService.hasError) { + error = _amService.error; setState(ViewState.Error); } else getPatientAllPresOrdersList(); } + + Future insertERPressOrder({@required PatientER patientER}) async { + setState(ViewState.Busy); + await _amService.insertERPressOrder(patientER: patientER); + if (_amService.hasError) { + error = _amService.error; + setState(ViewState.ErrorLocal); + } else + getAmRequestOrders(); + + } } diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart index ee06c8bb..e8e9eccc 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_index_page.dart @@ -23,7 +23,7 @@ class CMCIndexPage extends StatelessWidget { "CMC", fontWeight: FontWeight.normal, fontSize: 25, - color: Hexcolor("#60686b"), + color: Color(0xff60686b), ), SizedBox( height: 12, diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_Home_health_care_step_one_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_Home_health_care_step_one_page.dart index 37ada2b7..2dd64605 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_Home_health_care_step_one_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_Home_health_care_step_one_page.dart @@ -14,10 +14,11 @@ class NewHomeHealthCareStepOnePage extends StatefulWidget { patientERInsertPresOrderRequestModel; final Function changePageViewIndex; final HomeHealthCareViewModel model; + const NewHomeHealthCareStepOnePage( {Key key, this.patientERInsertPresOrderRequestModel, - this.model, + this.model, this.changePageViewIndex}) : super(key: key); @@ -30,10 +31,10 @@ class _NewHomeHealthCareStepOnePageState extends State { @override void initState() { + if(widget.patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList==null) + widget.patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList = []; + - widget - .patientERInsertPresOrderRequestModel - .patientERHHCInsertServicesList =[]; super.initState(); } @@ -45,18 +46,19 @@ class _NewHomeHealthCareStepOnePageState body: SingleChildScrollView( physics: ScrollPhysics(), child: Container( - margin: EdgeInsets.all(12), + margin: EdgeInsets.only( + left: MediaQuery.of(context).size.width * 0.05, + right: MediaQuery.of(context).size.width * 0.05), child: Center( child: FractionallySizedBox( - widthFactor: 0.94, + widthFactor: 1, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( - height: 20, + height: 12, ), Texts( -// TranslationBase.of(context).advancePaymentLabel, "Select Home Health Care Services", textAlign: TextAlign.center, ), @@ -65,8 +67,7 @@ class _NewHomeHealthCareStepOnePageState return Container( margin: EdgeInsets.only(top: 15), decoration: BoxDecoration( - border: - Border.all(color: Colors.grey, width: 1), + border: Border.all(color: Colors.grey, width: 1), borderRadius: BorderRadius.circular(12), color: Colors.white), child: Column( @@ -79,20 +80,13 @@ class _NewHomeHealthCareStepOnePageState activeColor: Colors.black38, onChanged: (bool newValue) { setState(() { - this - .widget - .patientERInsertPresOrderRequestModel - .patientERHHCInsertServicesList - .add(new PatientERHHCInsertServicesList( - recordID: this - .widget - .patientERInsertPresOrderRequestModel - .patientERHHCInsertServicesList - .length, - serviceID: - service.serviceID, - serviceName: - service.description)); + if(!isServiceSelected(service.serviceID)) + widget.patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList.add( PatientERHHCInsertServicesList( + recordID:widget.patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList.length, + serviceID: service.serviceID, + serviceName: service.description)); + else + removeSelected(service.serviceID); // widget.patientERInsertPresOrderRequestModel // isPatientInsured = newValue; }); @@ -119,22 +113,22 @@ class _NewHomeHealthCareStepOnePageState ), ), ), - bottomSheet:Container( + bottomSheet: Container( height: MediaQuery.of(context).size.height * 0.10, width: double.infinity, child: Column( children: [ Container( - width: MediaQuery - .of(context) - .size - .width * 0.9, + width: MediaQuery.of(context).size.width * 0.9, child: SecondaryButton( label: "Next", - disabled: this.widget.patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList.length ==0, - textColor: Theme - .of(context) - .backgroundColor), + disabled: this + .widget + .patientERInsertPresOrderRequestModel + .patientERHHCInsertServicesList + .length == + 0, + textColor: Theme.of(context).backgroundColor), ), ], ), @@ -150,4 +144,18 @@ class _NewHomeHealthCareStepOnePageState } return false; } + + removeSelected(int serviceId){ + Iterable patientERHHCInsertServicesList = widget + .patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList + .where((element) => serviceId == element.serviceID); + + if(patientERHHCInsertServicesList.length > 0) + setState(() { + widget.patientERInsertPresOrderRequestModel.patientERHHCInsertServicesList.remove(patientERHHCInsertServicesList); + }); + + + + } } diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart index 84f59e25..40fb6125 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_home_health_care_page.dart @@ -11,6 +11,7 @@ import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:flutter/material.dart'; +import '../StepsWidget.dart'; import 'new_Home_health_care_step_one_page.dart'; class NewHomeHealthCarePage extends StatefulWidget { @@ -19,8 +20,7 @@ class NewHomeHealthCarePage extends StatefulWidget { final HomeHealthCareViewModel model; @override - _NewHomeHealthCarePageState createState() => - _NewHomeHealthCarePageState(); + _NewHomeHealthCarePageState createState() => _NewHomeHealthCarePageState(); } class _NewHomeHealthCarePageState extends State @@ -29,8 +29,8 @@ class _NewHomeHealthCarePageState extends State int _currentIndex = 1; int pageSelected = 2; - - PatientERInsertPresOrderRequestModel patientERInsertPresOrderRequestModel = new PatientERInsertPresOrderRequestModel(); + PatientERInsertPresOrderRequestModel patientERInsertPresOrderRequestModel = + new PatientERInsertPresOrderRequestModel(); @override void initState() { @@ -43,26 +43,31 @@ class _NewHomeHealthCarePageState extends State super.dispose(); } - changePageViewIndex(pageIndex) { - _controller.jumpToPage(pageIndex); + _changeCurrentTab(int tab) { + setState(() { + _currentIndex = tab; + }); + _controller.animateToPage(tab, + duration: Duration(milliseconds: 800), curve: Curves.easeOutQuart); } @override Widget build(BuildContext context) { - void showConfirmMessage( - HomeHealthCareViewModel model, GetOrderDetailByOrderIDResponseModel order) { + void showConfirmMessage(HomeHealthCareViewModel model, + GetOrderDetailByOrderIDResponseModel order) { showDialog( context: context, child: ConfirmCancelOrderDialog( model: model, onTap: () async { UpdatePresOrderRequestModel updatePresOrderRequestModel = - UpdatePresOrderRequestModel( - presOrderID: order.presOrderID, - rejectionReason: "", - presOrderStatus: 4, editedBy: 3); + UpdatePresOrderRequestModel( + presOrderID: order.presOrderID, + rejectionReason: "", + presOrderStatus: 4, + editedBy: 3); await model.updateHHCPresOrder(updatePresOrderRequestModel); - if(model.state == ViewState.ErrorLocal) { + if (model.state == ViewState.ErrorLocal) { Utils.showErrorToast(model.error); } else { AppToast.showSuccessToast(message: "Done Successfully"); @@ -72,220 +77,218 @@ class _NewHomeHealthCarePageState extends State }, )); } + return Scaffold( body: SafeArea( child: SingleChildScrollView( child: Container( height: MediaQuery.of(context).size.height * 0.8, - child: PageView( - physics: NeverScrollableScrollPhysics(), - controller: _controller, - onPageChanged: (index) { - setState(() { - _currentIndex = index; - }); - }, - scrollDirection: Axis.horizontal, - children: [ - widget.model.hhcAllOrderDetail.length != 0 - ? FractionallySizedBox( - heightFactor: 0.8, - widthFactor: 0.9, - child: Container( - width: double.infinity, - margin: EdgeInsets.only(top: 15), - decoration: BoxDecoration( - border: - Border.all(color: Colors.grey, width: 1), - borderRadius: BorderRadius.circular(12), - color: Colors.white), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 12, - ), - Container( - width: double.infinity, - padding: EdgeInsets.only( - left: 15, bottom: 15, top: 15), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: Colors.grey, - width: 1.0, - ), - ), - // borderRadius: BorderRadius.circular(12), - color: Colors.white), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Texts( - "Request ID", - bold: false, - fontSize: 13, - ), - SizedBox( - height: 4, - ), - Texts( - widget.model.hhcAllOrderDetail[0].iD.toString(), - fontSize: 22, - ), - ], - ), - ), - Container( - width: double.infinity, - padding: EdgeInsets.only( - left: 15, bottom: 15, top: 15), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: Colors.grey, - width: 1.0, - ), - ), - // borderRadius: BorderRadius.circular(12), - color: Colors.white), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Texts( - "Status", - bold: false, - fontSize: 13, - ), - SizedBox( - height: 4, - ), - Texts( - "Pending", - fontSize: 22, - ), - ], - ), - ), - Container( - width: double.infinity, - padding: EdgeInsets.only( - left: 15, bottom: 15, top: 15), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: Colors.grey, - width: 1.0, - ), - ), - // borderRadius: BorderRadius.circular(12), - color: Colors.white), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Texts( - "Pickup Date", - bold: false, - fontSize: 13, - ), - SizedBox( - height: 4, - ), - Texts( - DateUtil.getDayMonthYearDateFormatted( - DateUtil.convertStringToDate( - widget.model.hhcAllOrderDetail[0] - .createdOn)), - fontSize: 22, - ), - ], - ), - ), - Container( - width: double.infinity, - padding: EdgeInsets.only( - left: 15, bottom: 15, top: 15), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: Colors.grey, - width: 1.0, + child: Column( + children: [ + + Container( + margin: EdgeInsets.only(left: MediaQuery.of(context).size.width*0.05, right: MediaQuery.of(context).size.width*0.05), + child: StepsWidget( + index: _currentIndex, + changeCurrentTab: _changeCurrentTab, + ), + ), + Expanded( + child: PageView( + physics: NeverScrollableScrollPhysics(), + controller: _controller, + onPageChanged: (index) { + setState(() { + _currentIndex = index; + }); + }, + scrollDirection: Axis.horizontal, + children: [ + widget.model.pendingOrder != null + ? FractionallySizedBox( + widthFactor: 0.9, + child: SingleChildScrollView( + child: Container( + width: double.infinity, + margin: EdgeInsets.only(top: 15), + decoration: BoxDecoration( + border: Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 12, + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + "Request ID", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + widget.model.pendingOrder.iD.toString(), + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + "Status", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + widget.model.pendingOrder.description, + fontSize: 22, + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + "Pickup Date", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + DateUtil.getDayMonthYearDateFormatted( + DateUtil.convertStringToDate(widget + .model.pendingOrder.createdOn)), + fontSize: 22, + ), + ], + ), + ), + ...List.generate( + widget.model.hhcAllOrderDetail.length, + (index) => Container( + width: double.infinity, + padding: EdgeInsets.only( + left: 15, bottom: 15, top: 15), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.grey, + width: 1.0, + ), + ), + // borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Texts( + "Service Name", + bold: false, + fontSize: 13, + ), + SizedBox( + height: 4, + ), + Texts( + widget.model.hhcAllOrderDetail[index] + .description, + fontSize: 22, + bold: true, + ), + ], + ), + ), + ), + SizedBox( + height: 12, + ), + Center( + child: Container( + width: + MediaQuery.of(context).size.width * 0.85, + child: SecondaryButton( + label: "Cancel".toUpperCase(), + onTap: () { + showConfirmMessage(widget.model, + widget.model.hhcAllOrderDetail[0]); + }, + color: Colors.red[800], + disabled: false, + textColor: + Theme.of(context).backgroundColor), + ), + ), + SizedBox( + height: 12, + ), + ], + ), ), ), - // borderRadius: BorderRadius.circular(12), - color: Colors.white), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Texts( - "Service Name", - bold: false, - fontSize: 13, - ), - SizedBox( - height: 4, - ), - Texts( - widget.model.hhcAllOrderDetail[0].description - .toString() ?? - widget.model.hhcAllOrderDetail[0] - .descriptionN - .toString(), - fontSize: 22, - ), - ], - ), - ), - SizedBox( - height: 12, - ), - Center( - child: Container( - width: MediaQuery - .of(context) - .size - .width * - 0.85, - child: SecondaryButton( - label: "Cancel".toUpperCase(), - onTap: () { - showConfirmMessage(widget.model, widget.model.hhcAllOrderDetail[0]); - } - , - color: Colors.red[800], - disabled: false, - textColor: Theme - .of(context) - .backgroundColor), - ), - ), - SizedBox( - height: 12, - ), - ], - ), + ) + : NewHomeHealthCareStepOnePage( + changePageViewIndex: _changeCurrentTab, + patientERInsertPresOrderRequestModel: patientERInsertPresOrderRequestModel, + model: widget.model, + ), + + ], ), - ) - : NewHomeHealthCareStepOnePage( - changePageViewIndex: changePageViewIndex, - patientERInsertPresOrderRequestModel: - patientERInsertPresOrderRequestModel, - model: widget.model, ), - // NewEReferralStepTowPage( - // changePageViewIndex: changePageViewIndex, - // patientERInsertPresOrderRequestModel: patientERInsertPresOrderRequestModel, - // - // ), - // NewEReferralStepThreePage( - // changePageViewIndex: changePageViewIndex, - // patientERInsertPresOrderRequestModel: patientERInsertPresOrderRequestModel, - // - // ), ], ), ), diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/StepsWidget.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/StepsWidget.dart new file mode 100644 index 00000000..ec3020c5 --- /dev/null +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/StepsWidget.dart @@ -0,0 +1,181 @@ +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class StepsWidget extends StatelessWidget { + final int index; + final Function changeCurrentTab; + + StepsWidget({Key key, this.index, this.changeCurrentTab}); + + @override + Widget build(BuildContext context) { + ProjectViewModel projectViewModel = Provider.of(context); + return projectViewModel.isArabic? Stack( + children: [ + Container( + height: 50, + width: MediaQuery.of(context).size.width, + color: Colors.transparent, + child: Center( + child: Divider( + color: Colors.grey, + height: 0.75, + thickness: 0.75, + ), + ), + ), + Positioned( + top: 10, + left: 0, + child: InkWell( + onTap: () => changeCurrentTab(0), + child: Container( + width: 35, + height: 35, + decoration: BoxDecoration( + border: index > 0 ? null:Border.all(color: Colors.black,width: 0.75), + shape: BoxShape.circle, + color: index == 0 ? Colors.grey[800] : index > 0 ?Colors.green: Colors.white, + ), + child: Center( + child: Texts( + '1', + color: index == 0 ? Colors.white : index > 0 ?Colors.white: Colors.grey[800], + ), + ), + ), + ), + ), + Positioned( + top: 10, + left: MediaQuery.of(context).size.width * 0.42, + child: InkWell( + onTap: () => index >= 2 ? changeCurrentTab(1) : null, + child: Container( + width: 35, + height: 35, + decoration: BoxDecoration( + border: index > 1 ? null:Border.all(color: Colors.black,width: 0.75), + shape: BoxShape.circle, + color: index == 1 ? Colors.grey[800] : index > 1 ?Colors.green: Colors.white, + ), + child: Center( + child: Texts( + '2', + color: index == 1? Colors.white : index > 1 ?Colors.white: Colors.grey[800], + ), + ), + ), + ), + ), + Positioned( + top: 10, + right: 0, + child: InkWell( + onTap: () => index == 2 ?changeCurrentTab(3) : null, + child: Container( + width: 35, + height: 35, + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all(color: Colors.black,width: 0.75), + color: index == 2 ? Colors.grey[800] : Colors.white, + ), + child: Center( + child: Texts( + '3', + color: index == 2 ? Colors.white : Colors.grey[800], + ), + ), + ), + ), + ), + + ], + ):Stack( + children: [ + Container( + height: 50, + width: MediaQuery.of(context).size.width, + color: Colors.transparent, + child: Center( + child: Divider( + color: Colors.grey, + height: 0.75, + thickness: 0.75, + ), + ), + ), + Positioned( + top: 10, + right: 0, + child: InkWell( + onTap: () => changeCurrentTab(0), + child: Container( + width: 35, + height: 35, + decoration: BoxDecoration( + border: index > 0 ? null:Border.all(color: Colors.black,width: 0.75), + shape: BoxShape.circle, + color: index == 0 ? Colors.grey[800] : index > 0 ?Colors.green: Colors.white, + ), + child: Center( + child: Texts( + '1', + color: index == 0 ? Colors.white : index > 0 ?Colors.white: Colors.grey[800], + ), + ), + ), + ), + ), + Positioned( + top: 10, + left: MediaQuery.of(context).size.width * 0.42, + child: InkWell( + onTap: () => index >= 2 ? changeCurrentTab(1) : null, + child: Container( + width: 35, + height: 35, + decoration: BoxDecoration( + border: index > 1 ? null:Border.all(color: Colors.black,width: 0.75), + shape: BoxShape.circle, + color: index == 1 ? Colors.grey[800] : index > 1 ?Colors.green: Colors.white, + ), + child: Center( + child: Texts( + '2', + color: index == 1? Colors.white : index > 1 ?Colors.white: Colors.grey[800], + ), + ), + ), + ), + ), + Positioned( + top: 10, + left: 0, + child: InkWell( + onTap: () => index == 2 ?changeCurrentTab(3) : null, + child: Container( + width: 35, + height: 35, + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all(color: Colors.black,width: 0.75), + color: index == 2 ? Colors.grey[800] : Colors.white, + ), + child: Center( + child: Texts( + '3', + color: index == 2 ? Colors.white : Colors.grey[800], + ), + ), + ), + ), + ), + ], + ); + } +} diff --git a/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart index 3c14c2a7..fa0799f9 100644 --- a/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart +++ b/lib/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart @@ -24,7 +24,7 @@ class HomeHealthCareIndexPage extends StatelessWidget { TranslationBase.of(context).homeHealthCare, fontWeight: FontWeight.normal, fontSize: 25, - color: Hexcolor("#60686b"), + color: Color(0xff60686b), ), SizedBox( height: 12, diff --git a/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart b/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart index e4b923b2..5f303846 100644 --- a/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart +++ b/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart @@ -20,7 +20,8 @@ class AmbulanceRequestIndexPage extends StatefulWidget { AmbulanceRequestIndexPage({Key key, this.amRequestViewModel}); @override - _AmbulanceRequestIndexPageState createState() => _AmbulanceRequestIndexPageState(); + _AmbulanceRequestIndexPageState createState() => + _AmbulanceRequestIndexPageState(); } class _AmbulanceRequestIndexPageState extends State { @@ -45,112 +46,124 @@ class _AmbulanceRequestIndexPageState extends State { @override Widget build(BuildContext context) { return AppScaffold( - body: widget.amRequestViewModel.pickUpRequestPresOrder!=null + body: widget.amRequestViewModel.pickUpRequestPresOrder != null ? Column( - children: [ - SizedBox( - height: 80, - ), - Container( - margin: EdgeInsets.only(left: 18, right: 18), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(2), - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, children: [ - OrderLogItem( - title: 'Request ID', - value: widget.amRequestViewModel.pickUpRequestPresOrder.presOrderID.toString(), - ), - OrderLogItem( - title: 'Status', - value: widget.amRequestViewModel.pickUpRequestPresOrder.ambulateDescription, - ), - OrderLogItem( - title: 'Last edit time', - value: DateUtil.getDayMonthYearDateFormatted( - DateUtil.convertStringToDate(widget.amRequestViewModel.pickUpRequestPresOrder.lastEditDate)), - ), - OrderLogItem( - title: 'Pickup Location', - value: widget.amRequestViewModel.pickUpRequestPresOrder.pickupLocationName, - ), - OrderLogItem( - title: 'Drop off Location', - value: widget.amRequestViewModel.pickUpRequestPresOrder.dropoffLocationName, - ), - OrderLogItem( - title: 'Trasfaer way', - value: widget.amRequestViewModel.pickUpRequestPresOrder.title, + SizedBox( + height: 80, ), Container( - padding: EdgeInsets.all(10), - width: double.maxFinite, - margin: EdgeInsets.only(bottom: 4,left: 4,right: 4), + margin: EdgeInsets.only(left: 18, right: 18), decoration: BoxDecoration( - borderRadius: BorderRadius.only( - bottomRight: Radius.circular(12), - bottomLeft: Radius.circular(12), - ), - color: Colors.white + color: Colors.white, + borderRadius: BorderRadius.circular(2), ), - child: SecondaryButton( - color: Colors.red[900], - textColor: Colors.white, - label: TranslationBase.of(context).cancel, - onTap: () { - widget.amRequestViewModel.updatePressOrder(presOrderID:widget.amRequestViewModel.pickUpRequestPresOrder.presOrderID ); - }, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + OrderLogItem( + title: 'Request ID', + value: widget.amRequestViewModel.pickUpRequestPresOrder + .presOrderID + .toString(), + ), + OrderLogItem( + title: 'Status', + value: widget.amRequestViewModel.pickUpRequestPresOrder + .ambulateDescription, + ), + OrderLogItem( + title: 'Last edit time', + value: DateUtil.getDayMonthYearDateFormatted( + DateUtil.convertStringToDate(widget + .amRequestViewModel + .pickUpRequestPresOrder + .lastEditDate)), + ), + OrderLogItem( + title: 'Pickup Location', + value: widget.amRequestViewModel.pickUpRequestPresOrder + .pickupLocationName, + ), + OrderLogItem( + title: 'Drop off Location', + value: widget.amRequestViewModel.pickUpRequestPresOrder + .dropoffLocationName, + ), + OrderLogItem( + title: 'Trasfaer way', + value: widget + .amRequestViewModel.pickUpRequestPresOrder.title, + ), + Container( + padding: EdgeInsets.all(10), + width: double.maxFinite, + margin: EdgeInsets.only(bottom: 4, left: 4, right: 4), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomRight: Radius.circular(12), + bottomLeft: Radius.circular(12), + ), + color: Colors.white), + child: SecondaryButton( + color: Colors.red[900], + textColor: Colors.white, + label: TranslationBase.of(context).cancel, + onTap: () { + widget.amRequestViewModel.updatePressOrder( + presOrderID: widget.amRequestViewModel + .pickUpRequestPresOrder.presOrderID); + }, + ), + ) + ], ), - ) - ], - ), - ), - ], - ):Column( - children: [ - SizedBox( - height: 80, - ), - Container( - margin: EdgeInsets.only(left: 12, right: 12), - child: StepsWidget( - index: currentIndex, - changeCurrentTab: _changeCurrentTab, - )), - Expanded( - child: PageView( - physics: NeverScrollableScrollPhysics(), - controller: pageController, - children: [ - //Container(), - SelectTransportationMethod( - changeCurrentTab: _changeCurrentTab, - patientER: _patientER, - amRequestViewModel: widget.amRequestViewModel, ), - PickupLocation( - changeCurrentTab: _changeCurrentTab, - patientER: _patientER, - amRequestViewModel: widget.amRequestViewModel, + ], + ) + : Column( + children: [ + SizedBox( + height: 80, ), - BillAmount( - changeCurrentTab: _changeCurrentTab, - patientER: _patientER, - amRequestViewModel: widget.amRequestViewModel, + Container( + margin: EdgeInsets.only(left: 12, right: 12), + child: StepsWidget( + index: currentIndex, + changeCurrentTab: _changeCurrentTab, + ), ), - Summary( - changeCurrentTab: _changeCurrentTab, - patientER: _patientER, - amRequestViewModel: widget.amRequestViewModel, + Expanded( + child: PageView( + physics: NeverScrollableScrollPhysics(), + controller: pageController, + children: [ + //Container(), + SelectTransportationMethod( + changeCurrentTab: _changeCurrentTab, + patientER: _patientER, + amRequestViewModel: widget.amRequestViewModel, + ), + PickupLocation( + changeCurrentTab: _changeCurrentTab, + patientER: _patientER, + amRequestViewModel: widget.amRequestViewModel, + ), + BillAmount( + changeCurrentTab: _changeCurrentTab, + patientER: _patientER, + amRequestViewModel: widget.amRequestViewModel, + ), + Summary( + changeCurrentTab: _changeCurrentTab, + patientER: _patientER, + amRequestViewModel: widget.amRequestViewModel, + ), + ], + ), ), ], ), - ), - ], - ), ); } } diff --git a/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart b/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart index bb6db7c0..ee7ed8fa 100644 --- a/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart +++ b/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart @@ -8,8 +8,10 @@ import 'package:diplomaticquarterapp/pages/ErService/widgets/AppointmentCard.dar import 'package:diplomaticquarterapp/pages/landing/home_page.dart'; import 'package:diplomaticquarterapp/uitl/ProgressDialog.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/pickupLocation/PickupLocationFromMap.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -73,7 +75,7 @@ class _PickupLocationState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (widget.patientER.direction == 0) + if (widget.patientER.direction == 1) Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -81,24 +83,42 @@ class _PickupLocationState extends State { SizedBox( height: 15, ), - Container( - padding: EdgeInsets.all(12), - decoration: BoxDecoration( - shape: BoxShape.rectangle, - borderRadius: BorderRadius.circular(8), - border: Border.all(color: Colors.grey, width: 0.5), - color: Colors.white, - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Texts('Select From Map'), - Icon( - FontAwesomeIcons.mapMarkerAlt, - size: 24, - color: Colors.black, - ) - ], + InkWell( + onTap: (){ + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => PickupLocationFromMap( + latitude: _latitude, + longitude: _longitude, + onPick: (value) { + setState(() { + _result = value; + }); + }, + ), + ), + ); + }, + child: Container( + padding: EdgeInsets.all(12), + decoration: BoxDecoration( + shape: BoxShape.rectangle, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.grey, width: 0.5), + color: Colors.white, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Texts(getSelectFromMapName()), + Icon( + FontAwesomeIcons.mapMarkerAlt, + size: 24, + color: Colors.black, + ) + ], + ), ), ), SizedBox( @@ -263,7 +283,7 @@ class _PickupLocationState extends State { ), ], ), - if (widget.patientER.direction == 1) + if (widget.patientER.direction == 0) Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -309,41 +329,14 @@ class _PickupLocationState extends State { Navigator.push( context, MaterialPageRoute( - builder: (context) => PlacePicker( - apiKey: 'AIzaSyDiXnCO00li4V7Ioa2YZ_M4ECxRsu_P9tA', - // Put YOUR OWN KEY here. - onPlacePicked: (PickResult result) { - print(result.adrAddress); + builder: (context) => PickupLocationFromMap( + latitude: _latitude, + longitude: _longitude, + onPick: (value) { setState(() { - _result = result; + _result = value; }); - Navigator.of(context).pop(); - }, - selectedPlaceWidgetBuilder: (_, selectedPlace, state, isSearchBarFocused) { - print("state: $state, isSearchBarFocused: $isSearchBarFocused"); - return isSearchBarFocused - ? Container() - : FloatingCard( - bottomPosition: 0.0, // MediaQuery.of(context) will cause rebuild. See MediaQuery document for the information. - leftPosition: 0.0, - rightPosition: 0.0, - width: 500, - borderRadius: BorderRadius.circular(12.0), - child: state == SearchingState.Searching - ? Center(child: CircularProgressIndicator()) - : RaisedButton( - child: Text("Pick Here"), - onPressed: () { - // IMPORTANT: You MUST manage selectedPlace data yourself as using this build will not invoke onPlacePicker as - // this will override default 'Select here' Button. - print("do something with [selectedPlace] data"); - Navigator.of(context).pop(); - }, - ), - ); }, - initialPosition: LatLng(_latitude, _longitude), - useCurrentLocation: true, ), ), ); @@ -359,7 +352,7 @@ class _PickupLocationState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Texts('Select From Map'), + Texts(getSelectFromMapName()), Icon( FontAwesomeIcons.mapMarkerAlt, size: 24, @@ -384,44 +377,57 @@ class _PickupLocationState extends State { color: Colors.grey[800], textColor: Colors.white, onTap: () { - if(_result==null || _selectedHospital == null) - AppToast.showErrorToast(message: 'please select all fields'); + if (_result == null || _selectedHospital == null) + AppToast.showErrorToast( + message: 'please select all fields'); else - setState(() { - widget.patientER.pickupSpot = _isInsideHome ? 1 : 0; - if (widget.patientER.direction == 0) { - widget.patientER.pickupLocationLattitude = _result.geometry.location.lat.toString(); - widget.patientER.pickupLocationLongitude = _result.geometry.location.lng.toString(); - widget.patientER.dropoffLocationLattitude = _selectedHospital.latitude; - widget.patientER.dropoffLocationLongitude = _selectedHospital.longitude; - - } else { - widget.patientER.pickupLocationLattitude = _selectedHospital.latitude; - widget.patientER.pickupLocationLongitude = _selectedHospital.longitude; - widget.patientER.dropoffLocationLattitude = _result.geometry.location.lat.toString(); - widget.patientER.dropoffLocationLongitude = _result.geometry.location.lng.toString(); - } + setState(() { + widget.patientER.pickupSpot = _isInsideHome ? 1 : 0; + if (widget.patientER.direction == 0) { + widget.patientER.pickupLocationLattitude = _result.geometry.location.lat.toString(); + widget.patientER.pickupLocationLongitude = _result.geometry.location.lng.toString(); + widget.patientER.dropoffLocationLattitude = _selectedHospital.latitude; + widget.patientER.dropoffLocationLongitude = _selectedHospital.longitude; + } else { + widget.patientER.pickupLocationLattitude = _selectedHospital.latitude; + widget.patientER.pickupLocationLongitude = _selectedHospital.longitude; + widget.patientER.dropoffLocationLattitude = _result.geometry.location.lat.toString(); + widget.patientER.dropoffLocationLongitude = _result.geometry.location.lng.toString(); + } - widget.patientER.latitude = widget.patientER.pickupLocationLattitude; - widget.patientER.longitude = widget.patientER.pickupLocationLongitude; + widget.patientER.latitude = widget.patientER.pickupLocationLattitude; + widget.patientER.longitude = widget.patientER.pickupLocationLongitude; + widget.patientER.dropoffLocationName = _selectedHospital.name; + widget.patientER.createdBy = widget.amRequestViewModel.user.patientID; + widget.patientER.isOutPatient = widget.amRequestViewModel.user.outSA; + widget.patientER.patientIdentificationID = widget.amRequestViewModel.user.patientIdentificationNo; + widget.patientER.pickupDateTime = DateUtil.convertDateToStringLocation(DateTime.now()); + widget.patientER.pickupLocationName = _result.formattedAddress; + widget.patientER.projectID = widget.amRequestViewModel.user.projectID; + widget.patientER.requesterFileNo = widget.amRequestViewModel.user.patientID; + widget.patientER.requesterIsOutSA = false; + widget.patientER.lineItemNo =0; + widget.patientER.requesterMobileNo = widget.amRequestViewModel.user.mobileNumber; - if(_haveAppointment == HaveAppointment.YES){ - widget.patientER.appointmentNo = myAppointment.appointmentNo.toString(); - widget.patientER.appointmentClinicName = myAppointment.clinicName; - widget.patientER.appointmentDoctorName = myAppointment.doctorNameObj; - widget.patientER.appointmentBranch = myAppointment.projectName; - widget.patientER.appointmentTime = myAppointment.appointmentDate; - }else{ - widget.patientER.appointmentNo ="0"; - widget.patientER.appointmentClinicName = null; - widget.patientER.appointmentDoctorName = null; - widget.patientER.appointmentBranch = null; - widget.patientER.appointmentTime = null; - } + if (_haveAppointment == HaveAppointment.YES) { + widget.patientER.appointmentNo = myAppointment.appointmentNo.toString(); + widget.patientER.appointmentClinicName = myAppointment.clinicName; + widget.patientER.appointmentDoctorName = myAppointment.doctorNameObj; + widget.patientER.appointmentBranch = myAppointment.projectName; + widget.patientER.appointmentTime = myAppointment.appointmentDate; + widget.patientER.haveAppointment = true; + } else { + widget.patientER.appointmentNo = "0"; + widget.patientER.appointmentClinicName = null; + widget.patientER.appointmentDoctorName = null; + widget.patientER.appointmentBranch = null; + widget.patientER.appointmentTime = null; + widget.patientER.haveAppointment = false; + } - widget.patientER.pickupSpot = _isInsideHome ? 1 : 0; - widget.changeCurrentTab(2); - }); + widget.patientER.pickupSpot = _isInsideHome ? 1 : 0; + widget.changeCurrentTab(2); + }); }, label: 'Next', ), @@ -451,6 +457,10 @@ class _PickupLocationState extends State { return _selectedHospital == null ? title : _selectedHospital.name; } + String getSelectFromMapName() { + return _result != null ? _result.formattedAddress : 'Select From Map'; + } + getAppointment() { ProgressDialogUtil.showProgressDialog(context); widget.amRequestViewModel.getAppointmentHistory().then((value) { diff --git a/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart b/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart index 563e388a..01683b55 100644 --- a/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart +++ b/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart @@ -284,8 +284,9 @@ class _SelectTransportationMethodState textColor: Colors.white, onTap: () { setState(() { - widget.patientER.direction = _direction == Direction.ToHospital ? 0 : 1; - widget.patientER.tripType = _way == Way.TwoWays ? 2 : 1; + widget.patientER.transportationMethodId =(widget.amRequestViewModel.amRequestModeList.indexOf(_erTransportationMethod) + 1); + widget.patientER.direction = _direction == Direction.ToHospital ? 1 : 0; + widget.patientER.tripType = _way == Way.TwoWays ? 0 : 1; widget.patientER.selectedAmbulate = (widget.amRequestViewModel.amRequestModeList.indexOf(_erTransportationMethod) + 1); widget.patientER.patientERTransportationMethod = _erTransportationMethod; widget.patientER.orderServiceID = _orderService.getIdOrderService(); diff --git a/lib/pages/ErService/AmbulanceRequestIndexPages/Summary.dart b/lib/pages/ErService/AmbulanceRequestIndexPages/Summary.dart index 4c189707..7696dd09 100644 --- a/lib/pages/ErService/AmbulanceRequestIndexPages/Summary.dart +++ b/lib/pages/ErService/AmbulanceRequestIndexPages/Summary.dart @@ -17,6 +17,7 @@ class Summary extends StatefulWidget { _SummaryState createState() => _SummaryState(); } +//TODO it should be dynamic class _SummaryState extends State { @override Widget build(BuildContext context) { @@ -30,7 +31,6 @@ class _SummaryState extends State { SizedBox(height: 5,), Container( width: double.infinity, - padding: EdgeInsets.all(10), decoration: BoxDecoration( color: Colors.white, @@ -92,9 +92,11 @@ class _SummaryState extends State { child:SecondaryButton( color: Colors.grey[800], textColor: Colors.white, - label: 'Next', + label: 'Send', + onTap: () async { + await widget.amRequestViewModel.insertERPressOrder(patientER: widget.patientER); - // onTap: ()=> widget.changeCurrentTab(2), + } ), ) ], diff --git a/lib/uitl/date_uitl.dart b/lib/uitl/date_uitl.dart index 0155ff10..b35bbcf4 100644 --- a/lib/uitl/date_uitl.dart +++ b/lib/uitl/date_uitl.dart @@ -27,6 +27,14 @@ class DateUtil { return start + "$milliseconds" + end; } + static String convertDateToStringLocation(DateTime date) { + const start = "/Date("; + const end = ")/"; + int milliseconds = date.millisecondsSinceEpoch; + + return start + "$milliseconds" + end; + } + static String yearMonthDay(DateTime dateTime) { String dateFormat = '${dateTime.year}-${dateTime.month}-${dateTime.day}'; return dateFormat; diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 4a5e7500..e1559bd4 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -681,11 +681,7 @@ class TranslationBase { String get homeHealthCareText => localizedValues['HomeHealthCareText'][locale.languageCode]; String get loginRegister => localizedValues['LoginRegister'][locale.languageCode]; String get orderLog => localizedValues['OrderLog'][locale.languageCode]; - - String get questionHere => - localizedValues['QuestionHere'][locale.languageCode]; - String get viewDoctorResponses => - localizedValues['ViewDoctorResponses'][locale.languageCode];String get serviceInformationButton => localizedValues['ServiceInformationButton'][locale.languageCode]; + String get serviceInformationButton => localizedValues['ServiceInformationButton'][locale.languageCode]; String get serviceInformationTitle => localizedValues['ServiceInformationTitle'][locale.languageCode]; String get infoLab => localizedValues['info-lab'][locale.languageCode]; String get infoRadiology => localizedValues['info-radiology'][locale.languageCode]; diff --git a/lib/widgets/others/close_back.dart b/lib/widgets/others/close_back.dart index 78fe0c86..75fe05e8 100644 --- a/lib/widgets/others/close_back.dart +++ b/lib/widgets/others/close_back.dart @@ -16,7 +16,7 @@ class CloseBack extends StatelessWidget{ onTap: Feedback.wrapForTap(() { onTap!=null ? onTap() : Navigator.pop(context); }, context), - child: Icon(EvaIcons.close, color: Color.fromRGBO(78, 62, 253, 1.0)), + child: Icon(EvaIcons.close, color: Colors.white), ); } } \ No newline at end of file diff --git a/lib/widgets/pickupLocation/PickupLocationFromMap.dart b/lib/widgets/pickupLocation/PickupLocationFromMap.dart new file mode 100644 index 00000000..2e34ad3e --- /dev/null +++ b/lib/widgets/pickupLocation/PickupLocationFromMap.dart @@ -0,0 +1,77 @@ +import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/others/close_back.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:google_maps_place_picker/google_maps_place_picker.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:provider/provider.dart'; + +class PickupLocationFromMap extends StatelessWidget { + final Function(PickResult) onPick; + final double latitude; + final double longitude; + + const PickupLocationFromMap({Key key, this.onPick, this.latitude, this.longitude}) + : super(key: key); + + @override + Widget build(BuildContext context) { + ProjectViewModel projectViewModel = Provider.of(context); + return Scaffold( + appBar: AppBar( + elevation: 0, + textTheme: TextTheme( + headline6: + TextStyle(color: Colors.white, fontWeight: FontWeight.bold), + ), + title: Text('Location'), + leading: CloseBack(), + centerTitle: true, + ), + body: PlacePicker( + apiKey: GOOGLE_API_KEY, + enableMyLocationButton: true, + + autocompleteLanguage: projectViewModel.currentLanguage, + enableMapTypeButton: true, + onPlacePicked: (PickResult result) { + print(result.adrAddress); + onPick(result); + Navigator.of(context).pop(); + }, + selectedPlaceWidgetBuilder: + (_, selectedPlace, state, isSearchBarFocused) { + print("state: $state, isSearchBarFocused: $isSearchBarFocused"); + return isSearchBarFocused + ? Container() + : FloatingCard( + bottomPosition: 0.0, + leftPosition: 0.0, + rightPosition: 0.0, + width: 500, + borderRadius: BorderRadius.circular(12.0), + child: state == SearchingState.Searching + ? Center(child: CircularProgressIndicator()) + : Container( + margin: EdgeInsets.all(12), + child: SecondaryButton( + color: Colors.grey[800], + textColor: Colors.white, + onTap: () { + onPick(selectedPlace); + Navigator.of(context).pop(); + }, + label: TranslationBase.of(context).next, + ), + ), + ); + }, + initialPosition: LatLng(latitude, longitude), + useCurrentLocation: true, + ), + ); + } +} From d1ac4080ca6eabb63739aee4759d33888ee8819e Mon Sep 17 00:00:00 2001 From: mosazaid Date: Sun, 1 Nov 2020 14:18:04 +0200 Subject: [PATCH 11/11] working on pharmacy home page --- assets/app_icons/config.json | 170 +++++++++++- assets/app_icons/fonts/DQIcons.ttf | Bin 7016 -> 13824 bytes assets/images/pharmacy_module/bg_1.png | Bin 0 -> 2898 bytes assets/images/pharmacy_module/bg_2.png | Bin 0 -> 1463 bytes assets/images/pharmacy_module/bg_3.png | Bin 0 -> 1651 bytes assets/images/pharmacy_module/bg_4.png | Bin 0 -> 1483 bytes .../pharmacy_module/medication_icon.png | Bin 0 -> 2080 bytes assets/images/pharmacy_module/offer_icon.png | Bin 0 -> 4540 bytes .../pharmacy_module/pharmacy_logo_green.png | Bin 0 -> 41399 bytes .../pharmacy_module/prescription_icon.png | Bin 0 -> 1498 bytes .../pharmacy_module/search_scan_icon.png | Bin 0 -> 1090 bytes lib/config/config.dart | 53 ++-- lib/config/localized_values.dart | 31 ++- lib/core/model/pharmacy_module/Customer.dart | 128 +++++++++ .../model/pharmacy_module/Manufacturer.dart | 98 +++++++ .../pharmacy_module/PharmacyImageObject.dart | 27 ++ .../pharmacy_module/PharmacyProduct.dart | 149 ++++++++++ lib/core/model/pharmacy_module/Reviews.dart | 82 ++++++ lib/core/service/client/base_app_client.dart | 34 ++- .../parmacyModule/parmacy_module_service.dart | 72 +++++ .../pharmacy_module_view_model.dart | 59 ++++ lib/d_q_icons_icons.dart | 12 + lib/locator.dart | 12 +- lib/pages/landing/home_page.dart | 11 +- lib/pages/landing/landing_page.dart | 262 +++++++++--------- .../pharmacyModule/pharmacy_module_page.dart | 233 ++++++++++++++++ .../pharmacyModule/widgets/BannerPager.dart | 88 ++++++ .../widgets/ProductTileItem.dart | 107 +++++++ .../widgets/borderedButton.dart | 59 ++++ .../widgets/manufacturerItem.dart | 35 +++ .../rate_appointment_doctor.dart | 2 +- lib/uitl/date_uitl.dart | 1 + lib/uitl/translations_delegate_base.dart | 9 + lib/uitl/utils.dart | 21 ++ lib/widgets/others/app_scaffold_widget.dart | 7 +- pubspec.yaml | 4 + 36 files changed, 1606 insertions(+), 160 deletions(-) create mode 100644 assets/images/pharmacy_module/bg_1.png create mode 100644 assets/images/pharmacy_module/bg_2.png create mode 100644 assets/images/pharmacy_module/bg_3.png create mode 100644 assets/images/pharmacy_module/bg_4.png create mode 100644 assets/images/pharmacy_module/medication_icon.png create mode 100644 assets/images/pharmacy_module/offer_icon.png create mode 100644 assets/images/pharmacy_module/pharmacy_logo_green.png create mode 100644 assets/images/pharmacy_module/prescription_icon.png create mode 100644 assets/images/pharmacy_module/search_scan_icon.png create mode 100644 lib/core/model/pharmacy_module/Customer.dart create mode 100644 lib/core/model/pharmacy_module/Manufacturer.dart create mode 100644 lib/core/model/pharmacy_module/PharmacyImageObject.dart create mode 100644 lib/core/model/pharmacy_module/PharmacyProduct.dart create mode 100644 lib/core/model/pharmacy_module/Reviews.dart create mode 100644 lib/core/service/parmacyModule/parmacy_module_service.dart create mode 100644 lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart create mode 100644 lib/pages/pharmacyModule/pharmacy_module_page.dart create mode 100644 lib/pages/pharmacyModule/widgets/BannerPager.dart create mode 100644 lib/pages/pharmacyModule/widgets/ProductTileItem.dart create mode 100644 lib/pages/pharmacyModule/widgets/borderedButton.dart create mode 100644 lib/pages/pharmacyModule/widgets/manufacturerItem.dart diff --git a/assets/app_icons/config.json b/assets/app_icons/config.json index 4c7eefa6..e0f1051d 100644 --- a/assets/app_icons/config.json +++ b/assets/app_icons/config.json @@ -131,6 +131,174 @@ "search": [ "parking_icon" ] + }, + { + "uid": "03df3404af4fa2db99c8dfb9e9729367", + "css": "more_menu_icon", + "code": 59401, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "", + "width": 222 + }, + "search": [ + "more_menu_icon" + ] + }, + { + "uid": "8882d4d64a842809f1cb078522c9b867", + "css": "offer_icon", + "code": 59402, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1089.5 567L1107.2 972.1 1406.5 924.4 1467.7 530ZM1089.5 567L1107.2 972.1 934 924.4 873.6 530ZM856.1 506L865 588.4 1083.3 622.8 1080.4 541.3ZM1495.6 506L1482 588.4 1083.3 622.8 1080.4 541.3ZM856.1 506L1080.4 541.3 1495.5 506 1221.9 481.9ZM994.9 527.4L1351 493.3 1288 487.7 934 518.2ZM1336 519.5L1100 489.9 1059 492.6 1272.6 524.9ZM882.9 591.2L886 611 1092.9 645.6 1455.7 608.2 1458.4 590.4 1092 622.1 1083.4 622.8ZM1308.7 940L1251.5 949.1 1272.6 524.9 1336 519.5ZM1328.3 381.2C1277.7 331.5 1175.8 491.5 1175.8 491.5L1178.7 502.5S1296.2 431.6 1332.9 428.5C1361.9 426 1361.3 449.9 1331.2 461.8 1303.7 472.6 1178.7 502.5 1178.7 502.5A747 747 0 0 0 1274.4 487.3C1351.9 473.5 1369.4 456.8 1369.9 431.4S1349.7 402.1 1328.3 381.2ZM1274.4 487.2C1349.2 473.9 1368.1 457.9 1369.8 434A63.5 63.5 0 0 0 1332.9 428.4C1361.9 425.9 1361.3 449.9 1331.2 461.7 1303.7 472.5 1178.7 502.4 1178.7 502.4H1178.7A880 880 0 0 0 1274.4 487.2ZM1249 462.9S1245.7 453.6 1229.5 452.2 1212.6 441.2 1212.6 441.1A594.4 594.4 0 0 0 1175.8 491.5L1178.7 502.5S1212.2 482.4 1249 463ZM1023.4 381.2C1073.9 331.5 1175.8 491.5 1175.8 491.5L1172.9 502.5S1055.4 431.6 1018.7 428.5C989.8 426 990.3 449.9 1020.5 461.8 1047.9 472.6 1172.9 502.5 1172.9 502.5A747 747 0 0 1 1077.3 487.3C999.8 473.5 982.2 456.8 981.7 431.4S1002 402.1 1023.4 381.2ZM1077.3 487.2C1002.5 473.9 983.5 457.9 981.9 434A63.5 63.5 0 0 1 1018.7 428.4C989.8 425.9 990.3 449.9 1020.5 461.7 1047.9 472.5 1172.9 502.4 1172.9 502.4H1172.9A880 880 0 0 1 1077.3 487.2ZM1102.6 462.9S1105.9 453.6 1122.1 452.2 1139.1 441.2 1139.1 441.1A595 595 0 0 1 1175.8 491.5L1172.9 502.5S1139.4 482.4 1102.6 463ZM1211.9 506H1135.9A5 5 0 0 1 1131.2 500.7H1131.2A16.4 16.4 0 0 1 1146.7 483.6H1201.1A16.4 16.4 0 0 1 1216.6 500.7H1216.6A5 5 0 0 1 1211.9 506ZM233.4 567L251.1 972.1 550.4 924.4 611.6 530ZM233.4 567L251.1 972.1 78 924.4 17.5 530ZM0 506L8.9 588.4 227.1 622.8 224.2 541.3ZM639.5 506L625.9 588.4 227.1 622.8 224.3 541.3ZM0 506L224.2 541.3 639.4 506 365.8 481.9ZM138.8 527.4L494.9 493.3 431.9 487.7 78 518.2ZM479.9 519.5L243.9 489.9 202.9 492.6 416.5 524.9ZM26.8 591.2L29.8 611 236.8 645.6 599.6 608.2 602.3 590.4 235.9 622.1 227.2 622.8ZM452.6 940L395.4 949.1 416.5 524.9 479.9 519.5ZM116.8 935.2L167.5 949.1 138.8 527.4 77.9 518.2ZM472.2 381.2C421.6 331.5 319.8 491.5 319.8 491.5L322.7 502.5S440.1 431.6 476.8 428.5C505.8 426 505.3 449.9 475.1 461.8 447.6 472.6 322.7 502.5 322.7 502.5A747 747 0 0 0 418.3 487.3C495.8 473.5 513.4 456.8 513.8 431.4S493.6 402.1 472.2 381.2ZM418.3 487.2C493.1 473.9 512.1 457.9 513.7 434A63.5 63.5 0 0 0 476.8 428.4C505.8 425.9 505.3 449.9 475.1 461.7 447.6 472.5 322.7 502.4 322.7 502.4H322.7A880 880 0 0 0 418.3 487.2ZM393 462.9S389.7 453.6 373.4 452.2 356.5 441.2 356.5 441.1A595.1 595.1 0 0 0 319.8 491.5L322.7 502.5S356.2 482.4 393 463ZM167.3 381.2C217.8 331.5 319.7 491.5 319.7 491.5L316.8 502.5S199.3 431.6 162.6 428.5C133.6 426 134.2 449.9 164.3 461.8 191.8 472.6 316.8 502.5 316.8 502.5A747 747 0 0 1 221.1 487.3C143.6 473.5 126.1 456.8 125.6 431.4S145.9 402.1 167.3 381.2ZM221.1 487.2C146.3 473.9 127.4 457.9 125.7 434A63.5 63.5 0 0 1 162.7 428.4C133.7 426 134.3 449.9 164.4 461.7 191.9 472.6 316.9 502.5 316.9 502.5H316.9A880.2 880.2 0 0 1 221.1 487.2ZM246.5 462.9S249.8 453.6 266.1 452.2 283 441.2 283 441.1A594.5 594.5 0 0 1 319.8 491.5L316.8 502.5S283.4 482.4 246.6 463ZM355.8 506H279.8A5 5 0 0 1 275.1 500.7H275.1A16.4 16.4 0 0 1 290.6 483.6H345A16.4 16.4 0 0 1 360.6 500.7H360.6A5 5 0 0 1 355.8 506ZM442.3 310.5L747.8 362.8 1053.3 310.5 747.8 276ZM595.1 336.7L747.8 362.9 900.6 336.7 747.8 319.4ZM905 493.5L868 497A388.3 388.3 0 0 1 1017.1 154.2 341.6 341.6 0 0 0 1005.2 189.2 271.6 271.6 0 0 1 1037.7 188.2 345.8 345.8 0 0 0 905 493.5ZM977.3 471.4L937.5 464.6C958 318.6 1048.8 196.5 1174.5 145.9A349.9 349.9 0 0 0 1153.7 179.4 299.7 299.7 0 0 1 1188.3 187.6 354.4 354.4 0 0 0 977.3 471.4ZM811.4 491.9L773.1 489.4A555.9 555.9 0 0 1 946.6 109.9 504.1 504.1 0 0 0 938.1 175.9 517.9 517.9 0 0 0 811.4 491.9ZM562.9 381.4L599.5 374.8A366.4 366.4 0 0 0 378.9 82.6 185.9 185.9 0 0 0 366.4 121.2 326.3 326.3 0 0 1 562.9 381.4ZM535.3 463.1L574.1 451.5C538.7 309 435.9 199.1 305.7 164.6A338.6 338.6 0 0 1 329.9 195.3 302.9 302.9 0 0 0 296.4 207.8 343.9 343.9 0 0 1 535.3 463.1ZM688.7 486.7L726.8 483A552.6 552.6 0 0 0 543.9 109 503.8 503.8 0 0 1 554 174.7 515.1 515.1 0 0 1 688.7 486.7ZM747.8 362.8V1000L985.2 937.7 1053.3 310.5ZM747.8 362.8V1000L510.4 937.7 442.3 310.5ZM973.1 823S943.9 837.1 937.9 904.5A135.6 135.6 0 0 1 925.4 953.4L848 973.7A166.3 166.3 0 0 0 871.7 919C879 883.9 879.9 875.1 879.9 875.1S884.8 854.4 935.2 826.3A61.6 61.6 0 0 1 973.1 823ZM879.9 875.2A105 105 0 0 1 927.1 804.3C1032.3 744.5 1161.9 869.9 1161.9 869.9L1143.7 867.9 1147.7 889.3 1126.3 886.3 1135.7 907 1115.5 902.6 1120.9 918.9 1099.4 912.9 1096.5 938.4S1034.2 853.5 998.2 838.5A100.5 100.5 0 0 0 879.9 875.2ZM522.5 823.1S550.4 840.7 559.5 909A160.3 160.3 0 0 0 570.1 953.4L647.6 973.9A166.4 166.4 0 0 1 623.9 919.1C616.6 884 615.7 875.3 615.7 875.3S610.8 854.6 560.3 826.5A61.6 61.6 0 0 0 522.5 823.1ZM615.7 875.3A105.1 105.1 0 0 0 568.5 804.4C463.3 744.7 333.7 870.1 333.7 870.1L351.9 868.1 347.8 889.5 369.3 886.5 359.9 907.2 380.1 902.8 374.7 919 396.2 913.1 399.1 938.6S463.9 854.9 499.8 839.8A96.5 96.5 0 0 1 615.7 875.3ZM463.6 75.2A38.7 38.7 0 0 0 437.4 56.9L441.1 31.4A62 62 0 0 1 482.9 60.6ZM902.8 42.4A41.8 41.8 0 0 0 882.1 67.7L859.9 59.4A66.8 66.8 0 0 1 893.1 18.9ZM1096.4 123.4A32.9 32.9 0 0 0 1070.9 134.7L1056.2 118.6A52.7 52.7 0 0 1 1096.9 100.4ZM773.5 28.6A41.4 41.4 0 0 0 768.4 58.4L748.3 63.4A66.3 66.3 0 0 1 756.3 15.8ZM632.6 122.7A38.6 38.6 0 0 0 617.6 97.3L629.1 78.3A61.8 61.8 0 0 1 653 118.9ZM206 205.9A34.3 34.3 0 0 0 179.8 193.4Q179.8 181.5 179.8 169.6A55 55 0 0 1 221.6 189.6ZM1171.1 285.2A61.2 61.2 0 0 0 1138.9 287.6 83.4 83.4 0 0 1 1197.3 250.9Q1198.5 262.3 1199.6 273.8A60.3 60.3 0 0 0 1171.1 285.2ZM828.8 208.3A75.2 75.2 0 0 0 810.9 238.1 102.1 102.1 0 0 1 819.9 164.4L837.8 176.3A75.9 75.9 0 0 0 828.8 208.3ZM284 117.2A61.7 61.7 0 0 1 315.8 123.5 85.9 85.9 0 0 0 261.4 79.7L256.8 102.2A61.8 61.8 0 0 1 284 117.2ZM278.4 313.3A59.7 59.7 0 0 1 350.7 314.2L360.8 305.2A64.5 64.5 0 0 0 264.1 293.9ZM221.7 4.5L253 0 274.9 19.2 223.6 20.3ZM728.1 145.8L739 178.5 726.9 206.3 714.7 151.2ZM1240.6 60.6L1209.4 66.5 1193.7 92.1 1243 76.4Z", + "width": 1496 + }, + "search": [ + "offer_icon" + ] + }, + { + "uid": "48bf5922e89257ff0ba5f3ae4a47297d", + "css": "prescription_icon", + "code": 59403, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M466 297H414.1V245A19.5 19.5 0 1 0 374.9 245V297H323A19.5 19.5 0 0 0 323 336.1H374.9V388A19.5 19.5 0 0 0 414.1 388V336.1H466A19.5 19.5 0 1 0 466 297ZM394.5 144.6A171.9 171.9 0 1 0 566.4 316.5 172.1 172.1 0 0 0 394.5 144.6ZM394.5 449.3A132.8 132.8 0 1 1 527.3 316.5 133 133 0 0 1 394.5 449.3ZM783.4 179.6L609.5 5.7A19.5 19.5 0 0 0 595.7 0H58.6A58.7 58.7 0 0 0 0 58.6V941.4A58.7 58.7 0 0 0 58.6 1000H431.7A19.5 19.5 0 1 0 431.7 960.8H58.6A19.6 19.6 0 0 1 39.2 941.4V58.6A19.6 19.6 0 0 1 58.7 39.1H576.2V154.2A58.7 58.7 0 0 0 634.8 212.8H750.1V560.5A19.5 19.5 0 1 0 789.2 560.5V193.4A19.5 19.5 0 0 0 783.4 179.6ZM634.8 173.8A19.6 19.6 0 0 1 615.2 154.3V66.7L722.4 173.8H634.8ZM644.5 546.9H305.3A19.5 19.5 0 0 0 305.3 586.1H644.5A19.5 19.5 0 0 0 644.5 546.9ZM208.2 546.9H144.5A19.5 19.5 0 0 0 144.5 586.1H208.2A19.5 19.5 0 0 0 208.2 546.9ZM500 656.3H305.3A19.5 19.5 0 0 0 305.3 695.4H500A19.5 19.5 0 1 0 500 656.3ZM208.2 656.3H144.5A19.5 19.5 0 0 0 144.5 695.4H208.2A19.5 19.5 0 0 0 208.2 656.3ZM319.1 771.4A19.5 19.5 0 1 0 324.9 785.2 19.6 19.6 0 0 0 319.1 771.4ZM208.2 765.6H144.5A19.5 19.5 0 1 0 144.5 804.8H208.2A19.5 19.5 0 1 0 208.2 765.6ZM879 757.8A121.3 121.3 0 0 0 862.1 759 121.1 121.1 0 0 0 660.5 638.6L505.8 793.3A121.1 121.1 0 0 0 677 964.5L758 883.6A121.1 121.1 0 1 0 878.9 757.9ZM649.4 936.9A82 82 0 1 1 533.4 820.9L597 757.4 713 873.4ZM740.6 845.8L624.6 729.8 688.1 666.2A82 82 0 1 1 804.1 782.2ZM859.4 958.6A82 82 0 0 1 859.4 799.3ZM898.6 958.6V799.3A82 82 0 0 1 898.6 958.6Z", + "width": 1000 + }, + "search": [ + "prescription_icon" + ] + }, + { + "uid": "fce0d47a8f283966d22c8450b4c63f70", + "css": "search_scan_icon", + "code": 59404, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M846.2 544.3A19.5 19.5 0 0 1 828.4 532.9 74.4 74.4 0 0 0 729.8 496.2 19.5 19.5 0 0 1 713.5 460.7 113.5 113.5 0 0 1 863.9 516.6 19.5 19.5 0 0 1 846.2 544.3ZM185.6 174.1V500A19.5 19.5 0 0 0 224.7 500V174.1A19.5 19.5 0 0 0 185.6 174.1ZM305.5 465.2V174.1A19.5 19.5 0 0 0 266.4 174.1V465.2A19.5 19.5 0 0 0 305.5 465.2ZM347.2 454.6A19.5 19.5 0 0 0 386.3 454.6V453.1A19.5 19.5 0 1 0 347.2 453.1ZM366.7 389.9A19.5 19.5 0 0 0 386.2 370.4V174.1A19.5 19.5 0 0 0 347.2 174.1V370.4A19.5 19.5 0 0 0 366.7 389.9ZM467 500V174.1A19.5 19.5 0 0 0 428 174.1V500A19.5 19.5 0 1 0 467 500ZM528.3 389.9A19.5 19.5 0 0 0 547.8 370.4V174.1A19.5 19.5 0 1 0 508.7 174.1V370.4A19.5 19.5 0 0 0 528.3 389.9ZM508.7 454.6A19.5 19.5 0 0 0 547.8 454.6V453.1A19.5 19.5 0 1 0 508.7 453.1ZM249.5 96.4A19.5 19.5 0 0 0 230 76.9H96.3A19.5 19.5 0 0 0 76.8 96.4V230.3A19.5 19.5 0 1 0 115.9 230.3V116H230A19.5 19.5 0 0 0 249.5 96.4ZM76.8 597.8A19.5 19.5 0 0 0 96.3 617.3H230A19.5 19.5 0 0 0 230 578.2H115.9V463.9A19.5 19.5 0 1 0 76.8 463.9ZM798.7 249.8A19.5 19.5 0 0 0 818.2 230.3V96.4A19.5 19.5 0 0 0 798.7 76.9H665A19.5 19.5 0 0 0 665 116H779.1V230.3A19.5 19.5 0 0 0 798.7 249.8ZM993.4 896.6L944.6 790.7A19.5 19.5 0 0 0 918.7 781.1L888.1 795.2 859.6 732.9A196 196 0 0 0 895 421.4V52.9A52.9 52.9 0 0 0 842.3 0H52.8A52.9 52.9 0 0 0-0.1 52.9V259.3A19.5 19.5 0 0 0 39 259.3V52.9A13.8 13.8 0 0 1 52.7 39.1H842.3A13.8 13.8 0 0 1 856 52.9V392.8A198.1 198.1 0 0 0 829.1 380.3 193.8 193.8 0 0 0 709.5 374.9V174.1A19.5 19.5 0 1 0 670.4 174.1V390.5A194.3 194.3 0 0 0 628.6 419.9V174.1A19.5 19.5 0 0 0 589.5 174.1V469.9A195.7 195.7 0 0 0 583.2 645.4C584.7 648.7 586.3 651.9 588 655.1H52.8A13.8 13.8 0 0 1 39.1 641.3V434.9A19.5 19.5 0 1 0-0.1 434.9V641.4A52.9 52.9 0 0 0 52.7 694.3H614.8A194.8 194.8 0 0 0 824 749.2L852.5 811.7 821.8 825.9A19.5 19.5 0 0 0 812.3 851.8L861 957.8A72.8 72.8 0 0 0 993.3 896.8ZM826 706.4A156.2 156.2 0 0 1 618.7 629.2 156.9 156.9 0 0 1 695.8 421.5 156.5 156.5 0 0 1 862.7 444.9L863.1 445.3A156.9 156.9 0 0 1 826 706.4ZM941.3 957.8A33.2 33.2 0 0 1 915.7 958.8 33.6 33.6 0 0 1 896.6 941.3L856 853 917.3 824.9 957.8 913A33.9 33.9 0 0 1 941.2 958ZM19.5 366.7A19.5 19.5 0 1 0-0.1 347V347A19.5 19.5 0 0 0 19.5 366.7Z", + "width": 1000 + }, + "search": [ + "search_scan_icon" + ] + }, + { + "uid": "4aab61c6fa11812333db81c2bb204c83", + "css": "share_icon", + "code": 59405, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M872.7 173.8A139.7 139.7 0 1 1 732.9 34.1 139.7 139.7 0 0 1 872.7 173.8ZM313.7 500A139.7 139.7 0 1 1 173.8 360.2 139.7 139.7 0 0 1 313.7 500ZM872.7 826.1A139.7 139.7 0 1 1 732.9 686.4 139.7 139.7 0 0 1 872.7 826.1ZM294.6 570.3L612.8 755.8M612.3 244.2L294.6 429.7", + "width": 907 + }, + "search": [ + "share_icon" + ] + }, + { + "uid": "65fb587059226e09ea7e14cd39772bb1", + "css": "wishlist_add_icon", + "code": 59406, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M785.4 0A320.4 320.4 0 0 0 541.7 114.3 320.4 320.4 0 0 0 297.9 0 294.5 294.5 0 0 0 0 299.7C0 506.8 184.1 673 463 929.4L541.7 1000.3 620.4 929.4C899.2 673.2 1083.4 507.1 1083.4 299.7A294.5 294.5 0 0 0 785.4 0Z", + "width": 1083 + }, + "search": [ + "wishlist_add_icon" + ] + }, + { + "uid": "c752092fa3a1a55f5bc0ae60f4beb4c7", + "css": "wishlist_icon", + "code": 59407, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M785.4 0A320.4 320.4 0 0 0 541.7 114.3 320.4 320.4 0 0 0 297.9 0 294.5 294.5 0 0 0 0 299.7C0 506.8 184.1 673 463 929.4L541.7 1000.3 620.4 929.4C899.2 673.2 1083.4 507.1 1083.4 299.7A294.5 294.5 0 0 0 785.4 0ZM575 857.5L564 867.7 541.6 888 519.2 867.7 508.2 857.5A3310.1 3310.1 0 0 1 188.7 539.8 382.1 382.1 0 0 1 83.6 299.7 216.7 216.7 0 0 1 145.4 145.3 211.9 211.9 0 0 1 298 83.4 238.8 238.8 0 0 1 478 168L541.7 243.8 605.5 168A237.9 237.9 0 0 1 785.4 83.4 212.9 212.9 0 0 1 938.3 145.3 217.1 217.1 0 0 1 1000.1 299.7 384.1 384.1 0 0 1 894.8 539.8 3316.8 3316.8 0 0 1 575 857.5Z", + "width": 1083 + }, + "search": [ + "wishlist_icon" + ] + }, + { + "uid": "88b990d06e49752b331bb5c6704b3d42", + "css": "bg_1", + "code": 59408, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M80.6 6.2H2052.5A74.4 74.4 0 0 1 2126.9 80.6V923.9A74.4 74.4 0 0 1 2052.5 998.3H80.6A74.4 74.4 0 0 1 6.2 923.9V80.6A74.4 74.4 0 0 1 80.6 6.2ZM1063.2 993.8H1037.3L1039 992.1 1036 993.8H987.3L1020.5 981.6 889 993.8H29.8A52.5 52.5 0 0 1 6.2 946.5V867.8L1027.4 962.7 6.2 565.1V321L1034.3 947 89.8 6.2H367.8L1039.9 927.1 645.9 6.2H809L1059.9 937.4 996.5 6.2H1136.5L1074.3 920.2V920.2L1335.1 6.2H1499.5L1081.7 942.6 1765.2 6.2H2043.3L1103.6 942.1V942.1L1103.6 942.1 2126.9 344.5V586.4L1102.1 963.1 2126.9 867.9V946.5A52.5 52.5 0 0 1 2103.3 993.8H1243.6L1103.2 980.8 1136.7 993.8H1063.2Z", + "width": 2133 + }, + "search": [ + "bg_1" + ] + }, + { + "uid": "ace5228aabf92ff4bf5524cef4c6409f", + "css": "bg_2", + "code": 59409, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M75 1000A75 75 0 0 1 0 925V75A75 75 0 0 1 75 0H2062.5A75 75 0 0 1 2137.5 75V925A75 75 0 0 1 2062.5 1000ZM2142 792.6C2084.5 793.1 2087.9 773.2 2043.5 760.2S1990.1 764.4 1953.4 739.3 1930.2 698.9 1905.4 667 1863.7 645 1847.6 605.3 1850.5 559.6 1845.2 519.5 1820.1 479 1824.9 436.1 1848.9 397.8 1863.1 360.3 1860.4 312.2 1886.3 277.7 1926 257.1 1960.1 232.7 1984.7 190.3 2031.5 175.4 2082.4 179.8 2136.4 179.3M2141.7 750.7C2091.8 751.2 2095.1 731.3 2057.1 720.2S2009.8 726.4 1977.9 704.4 1959.6 667.4 1938.2 640 1900 622.7 1886 588.1 1890.9 547.8 1886.4 513.3 1862.3 478.7 1866.5 441.5 1889.7 409.1 1902 376.8 1897.2 334 1919.7 304.1 1956 288 1985.3 267.1 2005.1 228.2 2045.8 215.3 2090.2 221.5 2136.6 221.1M2141.3 711.9C2098.5 712.2 2101.8 692.5 2069.6 683S2028.1 690.9 2000.7 672 1987 638.3 1968.8 615 1933.8 601.9 1921.9 572.2 1928.8 536.8 1925 507.6 1901.4 478.2 1905.1 446.4 1927.7 419.2 1938.2 391.9 1931.5 354 1950.6 328.4 1983.7 316.9 2008.8 298.9 2024.1 263.2 2059.1 252.3 2097.8 260.4 2137.1 260M742.2 1004.9C740.7 947.4 760.5 950.5 772.8 905.9S767.6 852.6 792.1 815.5 832 791.6 863.4 766.3 884.6 724.1 924.1 707.4 969.8 709.4 1009.8 703.4 1049.8 677.6 1092.7 681.7 1131.4 704.9 1169.1 718.5 1217.1 714.9 1252.1 740.1 1273.4 779.4 1298.4 813.1 1341.2 837 1356.9 883.4 1353.5 934.3 1354.9 988.3M784 1003.8C782.6 954 802.5 956.9 813 918.7S806 871.7 827.4 839.3 864 820.4 890.9 798.5 907.6 760 941.9 745.4 982.3 749.6 1016.6 744.5 1050.8 719.8 1088 723.3 1120.9 745.9 1153.4 757.6 1196 752.1 1226.4 774 1243.1 810 1264.5 838.9 1303.7 858 1317.4 898.4 1311.9 942.9 1313.1 989.2M822.8 1002.7C821.7 960 841.5 962.9 850.4 930.5S841.7 889.3 860.1 861.5 893.5 847.3 916.5 828.7 929 793.4 958.4 781 993.9 787.3 1023.1 782.9 1052 758.8 1083.9 762 1111.4 784.1 1138.9 794 1176.6 786.6 1202.5 805.4 1214.7 838.2 1233.1 862.9 1269 877.6 1280.6 912.4 1273.2 951.2 1274.3 990.5", + "width": 2138 + }, + "search": [ + "bg_2" + ] + }, + { + "uid": "0887f8af7107badceb2618215c9d8053", + "css": "bg_3", + "code": 59410, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M808.5 441.7C833.6 416.6 869 452 894.1 426.9S883.8 366.4 908.9 341.3 969.4 351.6 994.5 326.4 984.2 266 1009.4 240.9 1069.8 251.1 1094.9 226 1084.7 165.5 1109.8 140.4 1170.3 150.6 1195.4 125.5 1185.2 65.1 1210.3 39.9 1270.8 50.1 1295.9 25M85.1 848.6C120.5 851.1 117 901 152.4 903.5S191.3 856.1 226.7 858.5 258.7 910.9 294.1 913.4 333 866 368.4 868.4 400.4 920.8 435.8 923.3 474.7 875.9 510.2 878.3 542.1 930.7 577.5 933.2 616.5 885.8 651.9 888.3 683.9 940.6 719.4 943.1", + "width": 2138 + }, + "search": [ + "bg_3" + ] + }, + { + "uid": "15d14398ff70be8823b96215f803bf80", + "css": "bg_4", + "code": 59411, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1546 479.2C1571.1 454.1 1606.5 489.5 1631.6 464.4S1621.3 403.9 1646.4 378.8 1706.9 389.1 1732 363.9 1721.7 303.5 1746.9 278.4 1807.3 288.6 1832.4 263.5 1822.2 203 1847.3 177.9 1907.8 188.1 1932.9 163 1922.7 102.6 1947.8 77.4 2008.3 87.6 2033.4 62.5M1354.2 796L1262.5 743.1V849ZM1549.7 796L1458.1 743.1V849ZM1745.3 796L1653.6 743.1V849Z", + "width": 2138 + }, + "search": [ + "bg_4" + ] + }, + { + "uid": "1ad61f1d7131991dd2361861dd272499", + "css": "medication_icon", + "code": 59412, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M578.7 308A105.9 105.9 0 0 0 476.3 229.1 106.8 106.8 0 0 0 384.1 282.2L317.1 398.2V398.2L250.1 514.2A106.3 106.3 0 0 0 428.9 628.6Q429.2 628.2 429.4 627.8L568.1 388.5A105.3 105.3 0 0 0 578.7 308ZM411.4 616.8A85.1 85.1 0 0 1 268.4 524.8L330.1 418 353 431.2H353L477.4 503ZM549.8 377.9L487.9 484.6 372.7 418.1 402.3 366.9A10.6 10.6 0 0 0 383.9 356.3L354.4 407.6 340.6 399.6 402.3 292.8A85.6 85.6 0 0 1 476.3 250.3 85.1 85.1 0 0 1 549.6 377.8ZM718.7 591.9A407.8 407.8 0 0 0 526.8 591.9C496.1 600.6 480.5 613 480.5 628.6 480.5 628.6 480.5 628.6 480.5 628.6V722.6C480.5 738.4 496 750.6 526.7 759.4A409.2 409.2 0 0 0 718.7 759.4C749.4 750.7 765 738.3 765 722.6V628.6L765 628.6C765 613 749.4 600.7 718.7 591.9ZM532.6 612.2A387.3 387.3 0 0 1 712.8 612.2C738.3 619.5 743.8 627.4 743.8 628.6H743.8C743.8 629.9 738.3 637.7 712.9 645A387.3 387.3 0 0 1 532.6 645C507 637.7 501.6 629.9 501.6 628.6S507 619.5 532.6 612.2ZM743.8 722.7C743.8 724.2 738.3 731.9 712.9 739.1A388.7 388.7 0 0 1 532.5 739.1C507.1 731.9 501.6 724.2 501.6 722.7V655.7A130.1 130.1 0 0 0 526.8 665.4 407.7 407.7 0 0 0 718.7 665.4 130.2 130.2 0 0 0 743.8 655.7V682.1A222 222 0 0 1 688.6 699.8 10.6 10.6 0 1 0 692.6 720.6 257.9 257.9 0 0 0 743.8 705.4ZM414.4 324.9A10.6 10.6 0 0 0 399.9 328.8L399.7 329.1A10.6 10.6 0 1 0 418.1 339.6L418.2 339.3A10.6 10.6 0 0 0 414.4 324.9ZM669.4 713.7A10.6 10.6 0 0 0 657.8 704.2H657.6A10.6 10.6 0 0 0 658.6 725.3L659.6 725.3 659.9 725.3A10.6 10.6 0 0 0 669.4 713.7ZM999.5 500A500 500 0 0 1 499.5 1000 35.7 35.7 0 1 1 499.5 928.6 428.6 428.6 0 0 0 821 217.1V250A35.7 35.7 0 0 1 749.5 250V107.1A35.7 35.7 0 0 1 785.2 71.4H928.1A35.7 35.7 0 1 1 928.1 142.9H820.9V145.7A35.7 35.7 0 0 1 860.2 153.9 496.8 496.8 0 0 1 999.5 500ZM213.8 678.6A35.7 35.7 0 0 0 178.1 714.3V782.9A428.6 428.6 0 0 1 499.5 71.4 35.7 35.7 0 1 0 499.5 0 500 500 0 0 0 116.9 821.4H70.9A35.7 35.7 0 1 0 70.9 892.8H213.8A35.7 35.7 0 0 0 249.6 857.2V714.3A35.7 35.7 0 0 0 213.8 678.6Z", + "width": 1000 + }, + "search": [ + "medication_icon" + ] } ] -} +} \ No newline at end of file diff --git a/assets/app_icons/fonts/DQIcons.ttf b/assets/app_icons/fonts/DQIcons.ttf index 8365db4766e73d654150b1de29fba2b30ceaaf6b..474ea22c23043d46a05e307809bdb7ba605add04 100644 GIT binary patch delta 7320 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 delta 441 zcmZq3d0{p|sov9^fq}7yfq@|`IXAK3rN7N11_mY`pxA@-oXWJw9M4S*3@j`R48jjG zQWI08b+>c^)jj}XvkagBM-9tTAbSrGt7PPsRH!Kae*@I}1jyIO$xlv{77`U=U|p=ff|^;6yz6|>|B4emVrU)22epS10zst z(Elt323C{*-~az%H2{gA04}fyP?Xiqjw_zu<|_j?^9zuQ+r>MoU^Gx~G^+t~D3H&= zzyuNn0+2~uj8m8xv?ePt<}fkOojifjo{?kn1x8zIpm9K1W+2u9VxZ?4Q=m4-0YyPN zb$~P%Se%8y2&{$$B>sY9as`tzPzl@QgG@grUtr?q2L>e&)PP9_2F}SRnDaz{oGXkI zn3u6suqv?guy?TkEONT-Mho9 zROj2c=-j!;v0cWnV8p9b&$)BOsZ+?bXUex}&9`#Pwr$I}ZOplD&$@ENt5ngxc*Lnx z(Y$xVt5n3QRl})N%Cct5wQbF}Z_T%E&9`vRxpmICbi}Jv#i~=wwP?kvRK==R#j94u ztXapbTgk9r$*^O|v1G)mRl}-O(!YMwzkboZd(ysp#Hv)$ym-W_RK%)O#Hv)ps#V0R zRmH1T#j97vtXIXXSjMbb#;sY#ty;#dTgR?j$F5w*u3g8kUB|Cp$gf|>uwTfqV92mx z$+2O{v0}-wW682(%Ccn2vSrG%Wy-T=%Cl$7v}en-Xv?%|%e86DwQ9_@Ys|K5%(iUJ zwr$O~ZOylC&9`sOxNpw5aL%}K&be~WxpU9DbkDkV(7Sfu9$Rq$002aEQchC<1qKHV z6crT~7Z(^dLPbweQ&m=1SXx_KTwGjSUS3~dd3kzze13q3ii(Sii;a$un5wI*tgWuE zu)Dm@(B0kc^7;Bl`yR{y0004EOGiWkW(#~|000S5NklL@z4^v7CA^;f=2KOzUVZ55 zsL*B6k4)IMW!kb-g-yP{fI4o25O!5nKm9eqef1yYxe7>ot3rL&=|>K1+dOTVWq#(+ zKdS-#R&F9zeEt1Z4Ev|}Nsx9A4()+@!b42cL^$RRy59}d?OwvFs()0Jul`S!(wb1O zUHXYO(=C{NDFnV+SCJcrlprQ^u(Xz1oYXIv#RP3 zm0zkkw2lsROpnq(5?HYj9UFv}f-D0Ho4dK*r5Z~oG zk5zrn!oswJ9DDWYhFW^RDiqh4?{JvQ%E5xPUPErL74tRI`3yNN=3H;+oX-lts``ch-9m1!I^B?n{U%(Jd_Y+6@4Qyjd{~gSE49}cynhva z34XcpMrR?})>|1zCl#04*PO4`8UDL4QGA z91wJ;AgdS_pxsLBr2`Ak1Xm*$5H>|wC9nYPNNlez5H|Ik4~b%F)gQwSZ>!mII^4HI>&5s)rA6ZHq7R-BJ&RcEC%RGX^)a3O)MWT`Ga@a z=xl)jVaKk8Jl6Kre-XlBf?9FfF=(%(Ftf^TBOPdCX_jKGZ}CG3ES?LfFl`gE*F3YI znsef!qqX6cVAW>i=@b@wrCpTP(SUl6ry$OyuDWJ zzPgjyW)B7B7a1!u=_ff@$y{J)&xo^^!|th?thjC(Tz)xeQeF9SSpPOGLObW})nHbC zot@H;U?pG1N_3S6i+eB%&~~_lBwA7xW?L4adlfLuidiFF<-_7_ik?eLosIO^!VFWE zGqY(seaazb?K(V^2v#%~Xxc;8UU6Z@r8C5RHX!T^ur^N+lMogsB8@!SN!DI13f*DE zwS!JMM64AHCX&Dkk}>T76lo%RMT>~kp3aQ8+Q2D?fEA5gzdS4+osOI~Ez&IM!pwo1 zBo-TrsW5xgis-61ES!u{wA+lmLijDUDYMytmzG}+AZu+cfq9|)UJC2G6C|S@vi9nw z!@Q)#bwk`K2gnNOiiLe%n>te5Ym1*&d#*^+qY5+gbgwpM60kJPf~;LRNC1o9-Q7ta z;sbCxw(;2ra?;)FBvl3ZtGsAxql=6c))hT!zm2xyRr4yF3tTdmj_ra`QZ1>qk&P_! z=t7t!VHN2rL0Glux3meTfUdySGQ(M!cu&+Hp{R2tWB8NV@6rT$T zZG1MeN*vHm%xX~qAvxvXS=+MD>R-$XT#+&6!ap$^fD_v2Y{W={Y%{6A*;HIRiddz( za^?+5`AF*@L_f?VV`#^ojU3}FwieIcIu#He1*|e%x$91Dt*bs0IfPBd653X3uRsEN zd~iEX144YtvDXUg>M+y_73NT9TVyW8v|*8k*y|AIh_SfB)B3pll3{HKzoI>@mZ&0D z1+juj#t>6|nZ|_~H$1o{;+oK5cF!nKw~i3>rbkD3uH!B#v!~|ogH=1f ziIcI2wjWhm2ITu&;Y58%60#kV>WcH!{ji|Sk^mgi24^FIy;h|D{zxXnDLLgxSpi)^ zo_Y!_B(o$LL!0<)WJ-35W^iyDhzpN4BAMS733YX|ngs#Mzy_y>8JWe&SV%hy?bQf2 z1cN|aK|q)>tXW-o+b$~n_L8u?%%Zsv(zc1c%pe);1~p|fIvkBzv${Hs^fK=*4NGE$ z%LiaWd#eQY+69CUSX?+DkT4suR#{!yvwF!F-vgVKS(uCw+I{fvd0d3|x{VqM2)l%p z)s-NiejczyX4LRnT1;yO_G;nd+v+&T63v8_(UmZueonB#Hgn6)1wz}z_L|}2Tb!D2 zNSGz8w65%F<<2)g0hX0na7-D{I{Fmb)$_2p9)j{qz^czFPZ{^W?z!^20!h1x7c2)6w{pNHqGG0&{d~@t30kwVKm>8Ym)Y=^1qsm9FecA@x&2rrO=$a&B z0qtPr_paB4-|LfceK;qc(n>AjdaFB{t@bA;uh!+-hc)Kz7}bI@i*mpkTKit#U!IP( zgUc^l6zj^K)d~?-o0!nro^0=q!kq8jF8lS|?6(Z5zxClEO3c^(`E2hlzIpaHT6ox! z<0%w==JmmL^U6o>`$aE2O*WEgVvxl5+S>SzfArm@za}Sxf`E$f7?O#YM@U`oE5GvZ zxNg_OdNCQa4aP!f5Df1cXIrj+@h?X{pjM3bV6s>ruD5&M`mXX#|7lk+O=ftSH1v2E z@5b}Z2?MI$X!Xt6dVje+@m1eYUjLW>k}l6V?Us+@Rm5~%j31Y~ljFUt{{Q*9^2)bA z^S=<+XWx27QNI4Y|Gc!JJ@1x_*sJzpw%nax+Q9z%yI%|bx24y<{F4v<_T=l6k3ael wUw{5-si{=tvF^qQjlAML@f#-Yk9Qvd(}07*qoM6N<$f*j`LGynhq literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy_module/bg_2.png b/assets/images/pharmacy_module/bg_2.png new file mode 100644 index 0000000000000000000000000000000000000000..96cfd3bc7fa1b57db632233ed49f7d44f31cb2b4 GIT binary patch literal 1463 zcmV;o1xWgdP)Wms`#SaD@nab;L>Wms`#SaD@oab;L?W?6G* zT61SxbZA?2XMZDDzCVtQ|4dT(QUaAbUNWPEXD zeR5|1|Nnu;@7MqU01$LiPE!B|2ODf{ZpO#R$;LhOpf%TAeF{~@YmQV{UgjH~xE7lMe9qUT?5|-tE4*ch^)(2QM^d#yMz75YU zd5u;*n=Xk}0uvN4hdOk&RHB$S==SF!lb>LT8ypq7+QIS;#i%(hfxR%?Vioau%6(d_b?y~3k_hkJBWY> zquj$?{2~wini7QSeHILytp+)>d6X}y1q%c;dk3D|9W@lMcLdQ;Fb_Qrt9^&% zH+anChckQV1EfKP5W94pW6$dCD%Z1PeZxZ^M1ryw1cQAb`m6{Wk9EI?K5!O5GfE!B zdJiS0!8#QQGVbqyuWPKkNAnC=2R-zWSestqD^H@{O^S8fLm%e~AjD$057a(fXQQ*8 z;l2Y+*q~{k!KR1ZD-4?b9KEDTW2uSFY(-J@BG}S7W2sSArb}*>Si~Y+ z%=wNpM1GbODq&k#CyAvdD{O%rZj$IXN9l~Q)Of}sudPM6K$fP7rFz$vtxJ$C*Cs&O zOFK~(b?@H6o%2 zuxARW`H*lvk`2wr-^Z#pTNBp$Y0}F#QCsz{mPQX0l~xC^mSbY6S^%qI1GSUMN(ZW# zpi`%Du~crL)-s!Sk=wse>k97-SdScpiVVuHN}LciPXacLilr32o*u7PzvSM2Z8X?4 zDwbO3kG^j*DTKl&06UHYR(r0y7es05?*n)3);h2KavV^A`vF+j(cf6CW8N+Ia%j1lXc~yBk6C~1 ze`kMxETx_{95O%q#Y!91v_7Ser^ixWx-Kb)kVS2*+PXjvh+-^Ul zbbWhbETsihJLtf;lgqgNdV8HxN*``MeK{qTQiCeW0ZmgHb>qdC-)}yo^e=|lZUn{i R^F#mu002ovPDHLkV1jpIv|9iG literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy_module/bg_3.png b/assets/images/pharmacy_module/bg_3.png new file mode 100644 index 0000000000000000000000000000000000000000..127c266984f68af8a40dc6f9aa0b95d0d7282ef4 GIT binary patch literal 1651 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 literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy_module/medication_icon.png b/assets/images/pharmacy_module/medication_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..95851e4ec9be696a0ad3a16d2100e2159f6aa9e2 GIT binary patch literal 2080 zcmV+*2;cXKP)pk>)xKmY5*<;t_98oDkYltXpihJfjUP0Yr$Si@r?SuuF^G>ZJ-_n+y{KJ zLDluZbHE~CE${}g71$g?c&n`3O!l?FcYwYPs;&X92_YvekQpXv?j(M{OU zNcM5+{t~0*`LY6fsCTI?H3SaZV4^n4VA!$*ksa@tFs~EXkeN%l(Jw+Xo`}HYG+D-jk6$7`Zjhs%0qd`wTs+L*4 z{zrOS6|z^=6Fb3%BKkBMu0JkIIKj4_Y?C^)lWZuWQ;|7&c~P>#>KjSpE$W9l*^Wkf zrABU2cO+$7)j>tbo=h6H*p4}t+l(RQIZvWaT~8HC6O(>uuFbt9+49HEG~P^)2hnW8)h9clBo_c)P2k zOv1)YUW$vV5j>q#npeuQ13bOe4eIv_)SakqSKGbiQ=d!pUyxQBr2Z$VbZ(OZZ!*re zfi~C}t4C(C+P(G~9bAf`aA1>rCD1L`W(`ofC$nMnUE+4AJJ4u1vOD|li12V0@Jdp4 zVBO3nY92Q?BgN=!W~*naD+<&fqwcY2tl5}vYGTKV))ybJ?H1~|CIpeF{ zpv^<-%qHxq#WysuqeUIi8p7qVwh8iz`Zslk`UT_epzhL;_4YpXwC2sK%DXwS=Q7kO zN#Vmy5MQajlPSGJy|F?4R&V&r=FO?eo$j1&NBwP5czsFIL)6#QZ>l4+q57tJy?RiM zHlHuj+s(k3e#zqz)ITSMpD0OshcUA0kv#|F`uDQBTAi5GKiC-QT-TAt<@hHh_AEht zDJdLTf^dj&hu$VuG=^@sWW)Fwby!w@dnU7IM;e!to92QxqHaqHPbxt;Q+=XAo#Tu< z_r2;VoB|9a&ZUEaUBH{bCSV1y z444x__*X%BXC}|9f^m&|Dp$BMgfO@si#ixs2b>;4SX!svFklHVE`%`OxZC(CFgY_~ zNoL4K;}sIfX5!Rn#YEJ@ZHr^;5oKh*GNv!8dShc` z^St^{uIv`$hI(A)p&P;&L5(%$aq7-#<8eVA`_=xH5W?%g3rYRS1>}Dn*bgkqJX$3a zR8hwh&n7FtHMurN0!IOpfYCNcOJ+SkDyx5V*0vr}y_bg&wzTF}9t1|@UVc%%Ereh# zwh+QjV~S)d@C2|c8!AT-=hk%K`&EY5Qs7wNS)ih>BhK;d#7sdi;&2^Abb>9wY@+X| ziR>ePE-9V~*-5i{4Dn<*pT-*-LYSKnokW};3qlC{a^;5*mzBeTEx^JM!j3A6Opo6u zTxE=1Pv-v}Paojz%;4967lD-_ggwS>StW$V>)IujJ~F0frY< zwhXd4JzG74=y|UO<`btxEldK=NXqW4C17FlHU8m&ed5aG-N%|R;8x?kg1VujdUj@P z@9cS0CVy&`y1i_hL0@Xld#6d=8-Y2w=MMuv0y=7gdneJE%u_cIoyl@y)U|^c1oX{* z&*O%AP80R<sCcLJpv$8M0-gxx3K6{>J zyo_;$@mftap3m48j}=j1fNe8g+thz|l#v|)b+~bVnn$to$&BDUYhP!1*NrrK-A#!; zEoLWODJn_he(LGOweAmHp>SEKBZz^-5y`8cgb?Z{s?{$W^QJ}7w5!g-)uTGgJqUHqj^`Le!B_d7OEFoFjZ0u?YebQ5_=2O z5m-qamJgK3&euhk%}HavW(F{Un3dZJYy(yUtB9$`xg}DMh4Ej*k8ke>#I$$-0000< KMNUMnLSTZ_nEP7* literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy_module/offer_icon.png b/assets/images/pharmacy_module/offer_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..64db2b76da01e2797ea12705102fa12f16e90877 GIT binary patch literal 4540 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 literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy_module/prescription_icon.png b/assets/images/pharmacy_module/prescription_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..740004c7bd99820ec858f10c14d1386254af4ecf GIT binary patch literal 1498 zcmV<01tt24P)KYK~!jg&6-HKR;3OG_dn?M8|@MJ6O-78-_P zq|}2E6utTo1rZdfL^mp=QX%yr^HQcLqGsT2rY0>*!^=21W@+j;zaG}No#pQAJ^S1o z|FGF-t?#z}XRYunUNyT`U@0&G=nHfL1_93ib*6Iycp$Lt6Ufr=Vb=CI07;F` zxxN_*%#pN6QnREdopY-b^r|GiCh0{6Nm4ie@ zRz<@kdoRpt;G8=x=_4yXmS?<7sLHAcR7e^osVUmD0aGO1XezhadkQ|+w@O;!oNJJ@ zF{V>eWF{f0hv^@eB%qt5&m~pH^kxR1Yb8At*+{y&ux6$s9}*`ewMgnCNzS={fN7Ej znS83Gk@7?5C#zd!@2K$+nUW$i3FllZP%mi&Fx)v;=bXDZ`GDc_B$henzKWSg>qPNq zhaAXvVlTJ%b6E|5u4)@%EAot&IY>S!wjXc`I1h}8$>v%r9TclyXfZMoDEm4QG#31J zqBcdZ3V6eGn}ER?{gwy#&s=Pw@MpX_6+&FM2&C9g+0Cq-B!UIOixdMrIV+6Xil7J&|vUy&{n~oPf@f z!einw=iI?S-b2!mBICD6+U=ZcEyhXOoLDdE?x1`YxXwA(XytlI*Ax@nFi+B3LHSJV z-7eBdESB_lP(C2(L{NTT(mh!NCE%RecDNC?NqR!k=B!TgKAx5fKwn8?B@K|&C~1Rp z?od|a4$V&ZlivdTkvGHz;8UPi7AGA>0_Xv3u{NB--<-?`7Sr}qLmkkkJx4i7n6rKO z!~cF@9sZUglD`+o(w-f_$OHmgE&dMR+L*j2@QukoE0o07vF>dGdIs_=cSq5%m>Bb2 z6A;)A)Fia627jT}N^EzWl|+So8_`o8lUK#$Nl*7e2n70Xo9@gcox~Jt3($!ac}to+ zp+Pm0R!bTssXEQOFbQy3NbJfnNe2Y-qrlD#1i~zIaSq_mBZ)+S zF2J`r+7Mw4QKCs9aVPLn&=Zqm^3lK@?GSLls-#JrM8pWJGrPmqbI}28Hqc<7HvpAo zUF?9z&Hs-C={ctJbVwuzfx)JC(CVu3!)&jWXO)}8O7ow32OA@@GZ->+1D%T`to%sS z8|5bP3x1)>*$Xk2;+>Oh-29vlB=x_Ctt!^LC z+v>uJ-35Og1TarPBYrP`eHlnp0N+`#Ex^6_v|9m;0e*-RFgq6`Hxc;5%Hsn9yMfN( zUFlii&k{Wwflk(--uQeT;WTh2C~qdmpJVWw$Ivd0J;1=QOBc}g8*(YoKrnoOO8mmM z7N7eMe*xQo7efF40T@-7YVv`P3;+NC07*qoM6N<$f}yj+ A761SM literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy_module/search_scan_icon.png b/assets/images/pharmacy_module/search_scan_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d168b0e665eb4e591866e699b15a767b2d702fc0 GIT binary patch literal 1090 zcmV-I1ikx-P)}>0*#I;S_ek1|plr zpn@!d#Pp%?rH4uogEGu|3GD(>FNzamG`$&JBs06~pn-v7l#^lQCA9hVu-7^5*>ldB zInH?YA2w_4?^|o_-}%m7Ykg~@cBuQzSO2P?tCx{cQ1=7p0Pg|A*#>n|Bk(xT8$wt- z!V`bN+FY8?%cucp2mU_$IA^AY z5W-)1LsU~CPW?rBgH%!jumd^~qRYno3Ih z)S06Il6JGzo$9dKo%R)grg#B-29%8qa3WPU0rvoHW!lXl*&>VM1M~u2A%sKf3iT)T zxcZ~|G_V(#59|isR4+->ml9U>clGTG5o}cNP(zsrlp>h1Z;Lr!OUkxM{ZxHR{Wdz z>^D7@Ct)<;8j{2`tM6-k2qbCSFmMaWd1So06*vkE05EFSOrqj!9aNjg*}g5V%kLCz zLH&dzYG)Fqv2+p1@nAy;VaXV9jU>BF2QWK?uoservN9l%D+Ai4?y|DVetsFXZPfv^4Y(R; zAvp`}0{Tea*S2c8VQx~pV-#1Z8`YQdW*Q;&wz%A-bxqz}z=)jjsL3ak>(!I$ro7pJ z(&SNnDrMUcXZ59dvK3(p>K=8!Iwjg>nPk_m@{vf0<r;0c8XD!_0;*nE(I)07*qo IM6N<$f^Q53M*si- literal 0 HcmV?d00001 diff --git a/lib/config/config.dart b/lib/config/config.dart index 40ffc502..457a1a76 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -6,7 +6,8 @@ import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart'; const MAX_SMALL_SCREEN = 660; -const BASE_URL = 'https://uat.hmgwebservices.com/'; +// const BASE_URL = 'https://hmgwebservices.com/'; +const BASE_URL = 'https://uat.hmgwebservices.com//'; const GET_PROJECT = 'Services/Lists.svc/REST/GetProject'; @@ -57,11 +58,16 @@ const GET_NEAREST_HOSPITAL = 'Services/Patients.svc/REST/Patient_GetProjectAvgERWaitingTime'; ///Er Nearest -const GET_AMBULANCE_REQUEST = 'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod'; -const GET_PATIENT_ALL_PRES_ORDERS= 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; -const GET_PICK_UP_REQUEST_BY_PRES_ORDER_ID= 'Services/Patients.svc/REST/PatientER_RRT_GetPickUpRequestByPresOrderID'; -const UPDATE_PRESS_ORDER = 'Services/Patients.svc/REST/PatientER_UpdatePresOrder'; -const INSERT_ER_INERT_PRES_ORDER = 'Services/Patients.svc/REST/PatientER_InsertPresOrder'; +const GET_AMBULANCE_REQUEST = + 'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod'; +const GET_PATIENT_ALL_PRES_ORDERS = + 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; +const GET_PICK_UP_REQUEST_BY_PRES_ORDER_ID = + 'Services/Patients.svc/REST/PatientER_RRT_GetPickUpRequestByPresOrderID'; +const UPDATE_PRESS_ORDER = + 'Services/Patients.svc/REST/PatientER_UpdatePresOrder'; +const INSERT_ER_INERT_PRES_ORDER = + 'Services/Patients.svc/REST/PatientER_InsertPresOrder'; ///FindUs const GET_FINDUS_REQUEST = 'Services/Lists.svc/REST/Get_HMG_Locations'; @@ -141,7 +147,8 @@ const GET_PATIENT_SHARE = "Services/Doctors.svc/REST/GetCheckinScreenAppointmentDetailsByAppointmentNO"; //URL to get patient appointment history -const GET_PATIENT_APPOINTMENT_HISTORY = "Services/Doctors.svc/REST/PateintHasAppoimentHistory"; +const GET_PATIENT_APPOINTMENT_HISTORY = + "Services/Doctors.svc/REST/PateintHasAppoimentHistory"; //URL to get patient appointment curfew history const GET_PATIENT_APPOINTMENT_CURFEW_HISTORY = @@ -264,13 +271,14 @@ const SEND_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT = const CHECK_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT = 'Services/Authentication.svc/REST/CheckActivationCodeForAdvancePayment'; +const GET_COVID_DRIVETHRU_PROJECT_LIST = + 'Services/Doctors.svc/REST/COVID19_ProjectDriveThroughTestingCenter'; -const GET_COVID_DRIVETHRU_PROJECT_LIST = 'Services/Doctors.svc/REST/COVID19_ProjectDriveThroughTestingCenter'; - -const GET_COVID_DRIVETHRU_PAYMENT_INFO = 'Services/Doctors.svc/REST/COVID19_GetPatientPaymentInormation'; - -const GET_COVID_DRIVETHRU_FREE_SLOTS = 'Services/Doctors.svc/REST/COVID19_GetFreeSlots'; +const GET_COVID_DRIVETHRU_PAYMENT_INFO = + 'Services/Doctors.svc/REST/COVID19_GetPatientPaymentInormation'; +const GET_COVID_DRIVETHRU_FREE_SLOTS = + 'Services/Doctors.svc/REST/COVID19_GetFreeSlots'; ///My Trackers const GET_DIABETIC_RESULT_AVERAGE = @@ -324,14 +332,23 @@ const GET_ALL_CITIES = 'services/Lists.svc/rest/GetAllCities'; const CREATE_E_REFERRAL = "Services/Patients.svc/REST/CreateEReferral"; const GET_E_REFERRALS = "Services/Patients.svc/REST/GetEReferrals"; +// pharmacy +const GET_PHARMACY_BANNER = "epharmacy/api/promotionbanners"; +const GET_PHARMACY_TOP_MANUFACTURER = "epharmacy/api/topmanufacturer"; +const GET_PHARMACY_BEST_SELLER_PRODUCT = "epharmacy/api/bestsellerproducts"; // Home Health Care -const HHC_GET_ALL_SERVICES = "Services/Patients.svc/REST/PatientER_HHC_GetAllServices"; -const HHC_GET_ALL_CMC_SERVICES = "Services/Patients.svc/REST/PatientER_CMC_GetAllServices"; -const PATIENT_ER_UPDATE_PRES_ORDER ="Services/Patients.svc/REST/PatientER_UpdatePresOrder"; -const GET_ORDER_DETAIL_BY_ID ="Services/Patients.svc/REST/PatientER_HHC_GetTransactionsForOrder"; -const GET_CMC_ORDER_DETAIL_BY_ID ="Services/Patients.svc/REST/PatientER_CMC_GetTransactionsForOrder"; -const GET_CHECK_UP_ITEMS ="Services/Patients.svc/REST/GetCheckUpItems"; +const HHC_GET_ALL_SERVICES = + "Services/Patients.svc/REST/PatientER_HHC_GetAllServices"; +const HHC_GET_ALL_CMC_SERVICES = + "Services/Patients.svc/REST/PatientER_CMC_GetAllServices"; +const PATIENT_ER_UPDATE_PRES_ORDER = + "Services/Patients.svc/REST/PatientER_UpdatePresOrder"; +const GET_ORDER_DETAIL_BY_ID = + "Services/Patients.svc/REST/PatientER_HHC_GetTransactionsForOrder"; +const GET_CMC_ORDER_DETAIL_BY_ID = + "Services/Patients.svc/REST/PatientER_CMC_GetTransactionsForOrder"; +const GET_CHECK_UP_ITEMS = "Services/Patients.svc/REST/GetCheckUpItems"; const TIMER_MIN = 10; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index a44ffec6..10d82424 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -344,7 +344,7 @@ const Map> localizedValues = { "en": "Home Health Care Service", 'ar': 'الرعاية الصحية المنزلية' }, - "OnlinePharmacy": {"en": "Online Pharmacy", 'ar': 'صيدلايات الحبيب'}, + "OnlinePharmacy": {"en": "Online Pharmacy", 'ar': 'صيدليات الحبيب'}, "EmergencyService": {"en": "Emergency Service", 'ar': 'الفحص الطبي الشامل'}, "OnlinePaymentService": { "en": "Online Payment Service", @@ -621,4 +621,33 @@ const Map> localizedValues = { "ar": "خدمة الاشعة: هذه الخدمة تمكنك من الاطلاع على تقارير وصور الاشعة التي تمت في مجموعة الحبيب الطبية وكذلك ارسال التقرير عن طريق الايميل." }, + // pharmacy module + "medicationRefill": { + "en": "MEDICATION REFILL", + "ar": "إعادة تعبئة الدواء" + }, + "offersAndPromotions": { + "en": "OFFERS & SPECIAL PROMOTIONS", + "ar": "العروض والترقيات الخاصة" + }, + "myPrescriptions": { + "en": "MY PRESCRIPTIONS", + "ar": "وصفاتي" + }, + "searchAndScanMedication": { + "en": "SEARCH & SCAN FOR MEDICATION", + "ar": "البحث والمسح للأدوية" + }, + "shopByBrands": { + "en": "Shop By Brands", + "ar": "تسوق حسب الماركات" + }, + "recentlyViewed": { + "en": "Recently Viewed", + "ar": "شوهدت مؤخرا" + }, + "bestSellers": { + "en": "Best Sellers", + "ar": "أفضل البائعين" + }, }; diff --git a/lib/core/model/pharmacy_module/Customer.dart b/lib/core/model/pharmacy_module/Customer.dart new file mode 100644 index 00000000..a5311489 --- /dev/null +++ b/lib/core/model/pharmacy_module/Customer.dart @@ -0,0 +1,128 @@ +class Customer { + String fileNumber; + String iqamaNumber; + int isOutSa; + int patientType; + String gender; + String birthDate; + String phone; + String countryCode; + String yahalaAccountno; + String billingAddress; + String shippingAddress; + String id; + String username; + String email; + String firstName; + String lastName; + String languageId; + String adminComment; + String isTaxExempt; + String hasShoppingCartItems; + String active; + String deleted; + String isSystemAccount; + String systemName; + String lastIpAddress; + String createdOnUtc; + String lastLoginDateUtc; + String lastActivityDateUtc; + String registeredInStoreId; + + Customer( + {this.fileNumber, + this.iqamaNumber, + this.isOutSa, + this.patientType, + this.gender, + this.birthDate, + this.phone, + this.countryCode, + this.yahalaAccountno, + this.billingAddress, + this.shippingAddress, + this.id, + this.username, + this.email, + this.firstName, + this.lastName, + this.languageId, + this.adminComment, + this.isTaxExempt, + this.hasShoppingCartItems, + this.active, + this.deleted, + this.isSystemAccount, + this.systemName, + this.lastIpAddress, + this.createdOnUtc, + this.lastLoginDateUtc, + this.lastActivityDateUtc, + this.registeredInStoreId}); + + Customer.fromJson(Map json) { + fileNumber = json['file_number']; + iqamaNumber = json['iqama_number']; + isOutSa = json['is_out_sa']; + patientType = json['patient_type']; + gender = json['gender']; + birthDate = json['birth_date']; + phone = json['phone']; + countryCode = json['country_code']; + yahalaAccountno = json['yahala_accountno']; + billingAddress = json['billing_address']; + shippingAddress = json['shipping_address']; + id = json['id']; + username = json['username']; + email = json['email']; + firstName = json['first_name']; + lastName = json['last_name']; + languageId = json['language_id']; + adminComment = json['admin_comment']; + isTaxExempt = json['is_tax_exempt']; + hasShoppingCartItems = json['has_shopping_cart_items']; + active = json['active']; + deleted = json['deleted']; + isSystemAccount = json['is_system_account']; + systemName = json['system_name']; + lastIpAddress = json['last_ip_address']; + createdOnUtc = json['created_on_utc']; + lastLoginDateUtc = json['last_login_date_utc']; + lastActivityDateUtc = json['last_activity_date_utc']; + registeredInStoreId = json['registered_in_store_id']; + } + + Map toJson() { + final Map data = new Map(); + data['file_number'] = this.fileNumber; + data['iqama_number'] = this.iqamaNumber; + data['is_out_sa'] = this.isOutSa; + data['patient_type'] = this.patientType; + data['gender'] = this.gender; + data['birth_date'] = this.birthDate; + data['phone'] = this.phone; + data['country_code'] = this.countryCode; + data['yahala_accountno'] = this.yahalaAccountno; + data['billing_address'] = this.billingAddress; + data['shipping_address'] = this.shippingAddress; + data['id'] = this.id; + data['username'] = this.username; + data['email'] = this.email; + data['first_name'] = this.firstName; + data['last_name'] = this.lastName; + data['language_id'] = this.languageId; + data['admin_comment'] = this.adminComment; + data['is_tax_exempt'] = this.isTaxExempt; + data['has_shopping_cart_items'] = this.hasShoppingCartItems; + data['active'] = this.active; + data['deleted'] = this.deleted; + data['is_system_account'] = this.isSystemAccount; + data['system_name'] = this.systemName; + data['last_ip_address'] = this.lastIpAddress; + data['created_on_utc'] = this.createdOnUtc; + data['last_login_date_utc'] = this.lastLoginDateUtc; + data['last_activity_date_utc'] = this.lastActivityDateUtc; + data['registered_in_store_id'] = this.registeredInStoreId; + return data; + } +} \ No newline at end of file diff --git a/lib/core/model/pharmacy_module/Manufacturer.dart b/lib/core/model/pharmacy_module/Manufacturer.dart new file mode 100644 index 00000000..3b16337b --- /dev/null +++ b/lib/core/model/pharmacy_module/Manufacturer.dart @@ -0,0 +1,98 @@ +import 'PharmacyImageObject.dart'; + +class Manufacturer { + String id; + String name; + String namen; + // List localizedNames; + String description; + int manufacturerTemplateId; + String metaKeywords; + String metaDescription; + String metaTitle; + int pageSize; + String pageSizeOptions; + String priceRanges; + bool published; + bool deleted; + int displayOrder; + String createdOnUtc; + String updatedOnUtc; + PharmacyImageObject image; + + Manufacturer( + {this.id, + this.name, + this.namen, + // this.localizedNames, + this.description, + this.manufacturerTemplateId, + this.metaKeywords, + this.metaDescription, + this.metaTitle, + this.pageSize, + this.pageSizeOptions, + this.priceRanges, + this.published, + this.deleted, + this.displayOrder, + this.createdOnUtc, + this.updatedOnUtc, + this.image}); + + Manufacturer.fromJson(Map json) { + id = json['id']; + name = json['name']; + namen = json['namen']; + // if (json['localized_names'] != null) { + // localizedNames = new List(); + // json['localized_names'].forEach((v) { + // localizedNames.add(new LocalizedNames.fromJson(v)); + // }); + // } + description = json['description']; + manufacturerTemplateId = json['manufacturer_template_id']; + metaKeywords = json['meta_keywords']; + metaDescription = json['meta_description']; + metaTitle = json['meta_title']; + pageSize = json['page_size']; + pageSizeOptions = json['page_size_options']; + priceRanges = json['price_ranges']; + published = json['published']; + deleted = json['deleted']; + displayOrder = json['display_order']; + createdOnUtc = json['created_on_utc']; + updatedOnUtc = json['updated_on_utc']; + image = json['image'] != null + ? new PharmacyImageObject.fromJson(json['image']) + : null; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + data['namen'] = this.namen; + // if (this.localizedNames != null) { + // data['localized_names'] = + // this.localizedNames.map((v) => v.toJson()).toList(); + // } + data['description'] = this.description; + data['manufacturer_template_id'] = this.manufacturerTemplateId; + data['meta_keywords'] = this.metaKeywords; + data['meta_description'] = this.metaDescription; + data['meta_title'] = this.metaTitle; + data['page_size'] = this.pageSize; + data['page_size_options'] = this.pageSizeOptions; + data['price_ranges'] = this.priceRanges; + data['published'] = this.published; + data['deleted'] = this.deleted; + data['display_order'] = this.displayOrder; + data['created_on_utc'] = this.createdOnUtc; + data['updated_on_utc'] = this.updatedOnUtc; + if (this.image != null) { + data['image'] = this.image.toJson(); + } + return data; + } +} diff --git a/lib/core/model/pharmacy_module/PharmacyImageObject.dart b/lib/core/model/pharmacy_module/PharmacyImageObject.dart new file mode 100644 index 00000000..d3db634b --- /dev/null +++ b/lib/core/model/pharmacy_module/PharmacyImageObject.dart @@ -0,0 +1,27 @@ +class PharmacyImageObject { + int id; + int position; + String src; + String thumb; + String attachment; + + PharmacyImageObject({this.id, this.position, this.src, this.thumb, this.attachment}); + + PharmacyImageObject.fromJson(Map json) { + id = json['id']; + position = json['position']; + src = json['src']; + thumb = json['thumb']; + attachment = json['attachment']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['position'] = this.position; + data['src'] = this.src; + data['thumb'] = this.thumb; + data['attachment'] = this.attachment; + return data; + } +} diff --git a/lib/core/model/pharmacy_module/PharmacyProduct.dart b/lib/core/model/pharmacy_module/PharmacyProduct.dart new file mode 100644 index 00000000..cd461ae5 --- /dev/null +++ b/lib/core/model/pharmacy_module/PharmacyProduct.dart @@ -0,0 +1,149 @@ +import 'PharmacyImageObject.dart'; +import 'Reviews.dart'; + +class PharmacyProduct { + String id; + String name; + String namen; + String shortDescription; + String fullDescription; + String fullDescriptionn; + int approvedRatingSum; + int approvedTotalReviews; + String sku; + bool isRx; + String rxMessage; + String rxMessagen; + int stockQuantity; + String stockAvailability; + String stockAvailabilityn; + bool allowBackInStockSubscriptions; + int orderMinimumQuantity; + int orderMaximumQuantity; + double price; + double oldPrice; + String discountName; + String discountNamen; + String discountPercentage; + int displayOrder; + List discountIds; + List reviews; + List images; + + PharmacyProduct( + {this.id, + this.name, + this.namen, + this.shortDescription, + this.fullDescription, + this.fullDescriptionn, + this.approvedRatingSum, + this.approvedTotalReviews, + this.sku, + this.isRx, + this.rxMessage, + this.rxMessagen, + this.stockQuantity, + this.stockAvailability, + this.stockAvailabilityn, + this.allowBackInStockSubscriptions, + this.orderMinimumQuantity, + this.orderMaximumQuantity, + this.price, + this.oldPrice, + this.discountName, + this.discountNamen, + this.discountPercentage, + this.displayOrder, + this.discountIds, + this.reviews, + this.images}); + + PharmacyProduct.fromJson(Map json) { + try { + id = json['id']; + name = json['name']; + namen = json['namen']; + shortDescription = json['short_description']; + fullDescription = json['full_description']; + fullDescriptionn = json['full_descriptionn']; + approvedRatingSum = json['approved_rating_sum']; + approvedTotalReviews = json['approved_total_reviews']; + sku = json['sku']; + isRx = json['is_rx']; + rxMessage = json['rx_message']; + rxMessagen = json['rx_messagen']; + stockQuantity = json['stock_quantity']; + stockAvailability = json['stock_availability']; + stockAvailabilityn = json['stock_availabilityn']; + allowBackInStockSubscriptions = json['allow_back_in_stock_subscriptions']; + orderMinimumQuantity = json['order_minimum_quantity']; + orderMaximumQuantity = json['order_maximum_quantity']; + price = json['price']; + oldPrice = json['old_price']; + discountName = json['discount_name']; + discountNamen = json['discount_namen']; + discountPercentage = json['discount_percentage']; + displayOrder = json['display_order']; + if (json['discount_ids'] != null) { + discountIds = new List(); + json['discount_ids'].forEach((v) { + discountIds.add(v); + }); + } + if (json['reviews'] != null) { + reviews = new List(); + json['reviews'].forEach((v) { + reviews.add(new Reviews.fromJson(v)); + }); + } + if (json['images'] != null) { + images = new List(); + json['images'].forEach((v) { + images.add(new PharmacyImageObject.fromJson(v)); + }); + } + } catch (e) { + print(e); + } + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + data['namen'] = this.namen; + data['short_description'] = this.shortDescription; + data['full_description'] = this.fullDescription; + data['full_descriptionn'] = this.fullDescriptionn; + data['approved_rating_sum'] = this.approvedRatingSum; + data['approved_total_reviews'] = this.approvedTotalReviews; + data['sku'] = this.sku; + data['is_rx'] = this.isRx; + data['rx_message'] = this.rxMessage; + data['rx_messagen'] = this.rxMessagen; + data['stock_quantity'] = this.stockQuantity; + data['stock_availability'] = this.stockAvailability; + data['stock_availabilityn'] = this.stockAvailabilityn; + data['allow_back_in_stock_subscriptions'] = + this.allowBackInStockSubscriptions; + data['order_minimum_quantity'] = this.orderMinimumQuantity; + data['order_maximum_quantity'] = this.orderMaximumQuantity; + data['price'] = this.price; + data['old_price'] = this.oldPrice; + data['discount_name'] = this.discountName; + data['discount_namen'] = this.discountNamen; + data['discount_percentage'] = this.discountPercentage; + data['display_order'] = this.displayOrder; + if (this.discountIds != String) { + data['discount_ids'] = this.discountIds.map((v) => v).toList(); + } + if (this.reviews != String) { + data['reviews'] = this.reviews.map((v) => v.toJson()).toList(); + } + if (this.images != String) { + data['images'] = this.images.map((v) => v.toJson()).toList(); + } + return data; + } +} diff --git a/lib/core/model/pharmacy_module/Reviews.dart b/lib/core/model/pharmacy_module/Reviews.dart new file mode 100644 index 00000000..ec0de75e --- /dev/null +++ b/lib/core/model/pharmacy_module/Reviews.dart @@ -0,0 +1,82 @@ +import 'Customer.dart'; + +class Reviews { + int id; + int position; + int reviewId; + int customerId; + int productId; + int storeId; + bool isApproved; + String title; + String reviewText; + Null replyText; + int rating; + int helpfulYesTotal; + int helpfulNoTotal; + String createdOnUtc; + Customer customer; + Null product; + + Reviews( + {this.id, + this.position, + this.reviewId, + this.customerId, + this.productId, + this.storeId, + this.isApproved, + this.title, + this.reviewText, + this.replyText, + this.rating, + this.helpfulYesTotal, + this.helpfulNoTotal, + this.createdOnUtc, + this.customer, + this.product}); + + Reviews.fromJson(Map json) { + id = json['id']; + position = json['position']; + reviewId = json['review_id']; + customerId = json['customer_id']; + productId = json['product_id']; + storeId = json['store_id']; + isApproved = json['is_approved']; + title = json['title']; + reviewText = json['review_text']; + replyText = json['reply_text']; + rating = json['rating']; + helpfulYesTotal = json['helpful_yes_total']; + helpfulNoTotal = json['helpful_no_total']; + createdOnUtc = json['created_on_utc']; + customer = json['customer'] != null + ? new Customer.fromJson(json['customer']) + : null; + product = json['product']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['position'] = this.position; + data['review_id'] = this.reviewId; + data['customer_id'] = this.customerId; + data['product_id'] = this.productId; + data['store_id'] = this.storeId; + data['is_approved'] = this.isApproved; + data['title'] = this.title; + data['review_text'] = this.reviewText; + data['reply_text'] = this.replyText; + data['rating'] = this.rating; + data['helpful_yes_total'] = this.helpfulYesTotal; + data['helpful_no_total'] = this.helpfulNoTotal; + data['created_on_utc'] = this.createdOnUtc; + if (this.customer != null) { + data['customer'] = this.customer.toJson(); + } + data['product'] = this.product; + return data; + } +} \ No newline at end of file diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart index d2bfa4fa..11319d96 100644 --- a/lib/core/service/client/base_app_client.dart +++ b/lib/core/service/client/base_app_client.dart @@ -77,7 +77,7 @@ class BaseAppClient { body['PatientID'] = body['PatientID'] != null ? body['PatientID'] : user['PatientID']; body['PatientOutSA'] = user['OutSA']; - body['SessionID'] = SESSION_ID;//getSessionId(token); + body['SessionID'] = SESSION_ID; //getSessionId(token); } } @@ -139,6 +139,38 @@ class BaseAppClient { } } + get(String endPoint, + {Function(dynamic response, int statusCode) onSuccess, + Function(String error, int statusCode) onFailure, + bool isAllowAny = false, + Map queryParams}) async { + String url = BASE_URL + endPoint; + if (queryParams != null) { + String queryString = Uri(queryParameters: queryParams).query; + url += '?' + queryString; + } + + print("URL : $url"); + + if (await Utils.checkConnection()) { + final response = await http.get(url.trim(), headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + }); + final int statusCode = response.statusCode; + print("statusCode :$statusCode"); + + if (statusCode < 200 || statusCode >= 400 || json == null) { + onFailure('Error While Fetching data', statusCode); + } else { + var parsed = json.decode(response.body.toString()); + onSuccess(parsed, statusCode); + } + } else { + onFailure('Please Check The Internet Connection', -1); + } + } + logout() async { await sharedPref.remove(LOGIN_TOKEN_ID); Navigator.of(AppGlobal.context).pushReplacementNamed(LOGIN_TYPE); diff --git a/lib/core/service/parmacyModule/parmacy_module_service.dart b/lib/core/service/parmacyModule/parmacy_module_service.dart new file mode 100644 index 00000000..3bec5ba5 --- /dev/null +++ b/lib/core/service/parmacyModule/parmacy_module_service.dart @@ -0,0 +1,72 @@ +import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacy_module/Manufacturer.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacy_module/PharmacyImageObject.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacy_module/PharmacyProduct.dart'; +import 'package:diplomaticquarterapp/core/service/base_service.dart'; + +class PharmacyModuleService extends BaseService { + bool isFinished = true; + bool hasError = false; + String errorMsg = ''; + + List bannerItems = List(); + List manufacturerList = List(); + List bestSellerProducts = List(); + + Future getBannerListList() async { + hasError = false; + try { + await baseAppClient.get(GET_PHARMACY_BANNER, + onSuccess: (dynamic response, int statusCode) { + bannerItems.clear(); + response['images'].forEach((item) { + bannerItems.add(PharmacyImageObject.fromJson(item)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }); + } catch (error) { + throw error; + } + } + + Future getTopManufacturerList() async { + Map queryParams = {'page': '1', 'limit': '8'}; + try { + await baseAppClient.get(GET_PHARMACY_TOP_MANUFACTURER, + onSuccess: (dynamic response, int statusCode) { + manufacturerList.clear(); + response['manufacturer'].forEach((item) { + manufacturerList.add(Manufacturer.fromJson(item)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, queryParams: queryParams); + } catch (error) { + throw error; + } + } + + Future getBestSellerProducts() async { + Map queryParams = { + 'fields': + 'id,discount_ids,name,namen,localized_names,display_order,short_description,full_description,full_descriptionn,sku,order_minimum_quantity,order_maximum_quantity,price,old_price,images,is_rx,rx_message,rx_messagen,discount_name,discount_namen,approved_rating_sum,approved_total_reviews,allow_back_in_stock_subscriptions,stock_quantity,stock_availability,stock_availabilityn,discount_percentage,reviews', + }; + try { + await baseAppClient.get(GET_PHARMACY_BEST_SELLER_PRODUCT, + onSuccess: (dynamic response, int statusCode) { + bestSellerProducts.clear(); + response['products'].forEach((item) { + bestSellerProducts.add(PharmacyProduct.fromJson(item)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, queryParams: queryParams); + } catch (error) { + throw error; + } + } +} diff --git a/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart b/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart new file mode 100644 index 00000000..8d9207b0 --- /dev/null +++ b/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart @@ -0,0 +1,59 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacy_module/Manufacturer.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacy_module/PharmacyImageObject.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacy_module/PharmacyProduct.dart'; +import 'package:diplomaticquarterapp/core/service/parmacyModule/parmacy_module_service.dart'; +import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; + +import '../../../locator.dart'; + +class PharmacyModuleViewModel extends BaseViewModel { + PharmacyModuleService _pharmacyService = locator(); + + List get bannerList => _pharmacyService.bannerItems; + + List get manufacturerList => _pharmacyService.manufacturerList; + + List get bestSellerProduct => _pharmacyService.bestSellerProducts; + + Future getPharmacyHomeData() async { + setState(ViewState.Busy); + await _pharmacyService.getBannerListList(); + if (_pharmacyService.hasError) { + error = _pharmacyService.error; + setState(ViewState.Error); + } else { + _getTopManufacturerList(); + } + } + + List getBannerImagesUrl() { + List images = List(); + images.add('assets/images/pharmacy_module/pharmacy_logo_green.png'); + _pharmacyService.bannerItems.forEach((element) { + images.add(element.src); + }); + + return images; + } + + _getTopManufacturerList() async { + await _pharmacyService.getTopManufacturerList(); + if (_pharmacyService.hasError) { + error = _pharmacyService.error; + setState(ViewState.Error); + } else { + _getBestSellerProducts(); + } + } + + _getBestSellerProducts() async { + await _pharmacyService.getBestSellerProducts(); + if (_pharmacyService.hasError) { + error = _pharmacyService.error; + setState(ViewState.Error); + } else { + setState(ViewState.Idle); + } + } +} diff --git a/lib/d_q_icons_icons.dart b/lib/d_q_icons_icons.dart index fc9679ca..040e6e08 100644 --- a/lib/d_q_icons_icons.dart +++ b/lib/d_q_icons_icons.dart @@ -30,4 +30,16 @@ class DQIcons { static const IconData thermometer = IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg); static const IconData weight_scale = IconData(0xe807, fontFamily: _kFontFam, fontPackage: _kFontPkg); static const IconData parking_icon = IconData(0xe808, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData more_menu_icon = IconData(0xe809, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData offer_icon = IconData(0xe80a, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData prescription_icon = IconData(0xe80b, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData search_scan_icon = IconData(0xe80c, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData share_icon = IconData(0xe80d, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData wishlist_add_icon = IconData(0xe80e, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData wishlist_icon = IconData(0xe80f, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData bg_1 = IconData(0xe810, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData bg_2 = IconData(0xe811, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData bg_3 = IconData(0xe812, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData bg_4 = IconData(0xe813, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData medication_icon = IconData(0xe814, fontFamily: _kFontFam, fontPackage: _kFontPkg); } diff --git a/lib/locator.dart b/lib/locator.dart index a71d7964..203bd8a0 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -43,6 +43,8 @@ import 'core/service/medical/radiology_service.dart'; import 'core/service/medical/reports_monthly_service.dart'; import 'core/service/medical/vital_sign_service.dart'; import 'core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; +import 'core/service/parmacyModule/parmacy_module_service.dart'; + import 'core/viewModels/all_habib_medical_services/e_referral_view_model.dart'; import 'core/viewModels/appointment_rate_view_model.dart'; import 'core/viewModels/blooddonation/blood_details_view_model.dart'; @@ -78,6 +80,7 @@ import 'core/viewModels/pharmacies_view_model.dart'; import 'core/service/pharmacies_service.dart'; import 'core/service/insurance_service.dart'; import 'core/viewModels/insurance_card_View_model.dart'; +import 'core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; import 'core/viewModels/qr_view_model.dart'; import 'core/viewModels/vaccine_view_model.dart'; import 'core/service/vaccine_service.dart'; @@ -132,9 +135,10 @@ void setupLocator() { locator.registerLazySingleton(() => CreteNewBabyService()); locator.registerLazySingleton(() => DeleteBabyService()); + locator.registerLazySingleton(() => VaccinationTableService()); - locator.registerLazySingleton(() => VaccinationTableService()); + locator.registerLazySingleton(() => PharmacyModuleService()); /// View Model @@ -177,8 +181,14 @@ void setupLocator() { locator.registerFactory(() => EyeViewModel()); locator.registerFactory(() => ActiveMedicationsViewModel()); locator.registerFactory(() => AskDoctorViewModel()); + locator.registerFactory(() => AllergiesViewModel()); locator.registerFactory(() => HomeHealthCareViewModel()); locator.registerFactory(() => CMCViewModel()); + + + + locator.registerFactory(() => PharmacyModuleViewModel()); + } diff --git a/lib/pages/landing/home_page.dart b/lib/pages/landing/home_page.dart index 06ac1577..59f01705 100644 --- a/lib/pages/landing/home_page.dart +++ b/lib/pages/landing/home_page.dart @@ -10,6 +10,7 @@ import 'package:diplomaticquarterapp/pages/ErService/ErOptions.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/livecare/livecare_home.dart'; import 'package:diplomaticquarterapp/pages/paymentService/payment_service.dart'; +import 'package:diplomaticquarterapp/pages/pharmacyModule/pharmacy_module_page.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; @@ -478,6 +479,8 @@ class _HomePageState extends State { opacity: 0.5, ), DashboardItem( + onTap: () => Navigator.push(context, FadePage(page: PharmacyPage())), + child: Center( child: Padding( padding: const EdgeInsets.all(15.0), @@ -782,7 +785,8 @@ class DashboardItem extends StatelessWidget { this.width, this.height, this.color, - this.opacity = 0.4}) + this.opacity = 0.4, + this.hasColorFilter = true}) : super(key: key); final bool hasBorder; final String imageName; @@ -792,6 +796,7 @@ class DashboardItem extends StatelessWidget { final double height; final Color color; final double opacity; + final bool hasColorFilter; @override Widget build(BuildContext context) { @@ -818,8 +823,8 @@ class DashboardItem extends StatelessWidget { ? DecorationImage( image: ExactAssetImage('assets/images/$imageName'), fit: BoxFit.cover, - colorFilter: new ColorFilter.mode( - Colors.black.withOpacity(0.2), BlendMode.dstIn), + colorFilter: hasColorFilter ? new ColorFilter.mode( + Colors.black.withOpacity(0.2), BlendMode.dstIn) : null, ) : null, ), diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart index ff21d73e..439622b7 100644 --- a/lib/pages/landing/landing_page.dart +++ b/lib/pages/landing/landing_page.dart @@ -124,137 +124,137 @@ class _LandingPageState extends State with WidgetsBindingObserver { }); _requestIOSPermissions(); pageController = PageController(keepPage: true); - _firebaseMessaging.setAutoInitEnabled(true); - - if (Platform.isIOS) { - _firebaseMessaging.requestNotificationPermissions(); - } - - _firebaseMessaging.getToken().then((String token) { - sharedPref.setString(PUSH_TOKEN, token); - if (token != null) { - checkUserStatus(token); - } - requestPermissions(); - }).catchError((err) { - print(err); - }); - - //_firebase Background message handler - _firebaseMessaging.configure( - // onMessage: (Map message) async { - // showDialog("onMessage: $message"); - // print("onMessage: $message"); - // print(message); - // print(message['name']); - // print(message['appointmentdate']); - // - // if (Platform.isIOS) { - // if (message['is_call'] == "true") { - // var route = ModalRoute.of(context); - // - // if (route != null) { - // print(route.settings.name); - // } - // - // Map myMap = new Map.from(message); - // print(myMap); - // LandingPage.isOpenCallPage = true; - // LandingPage.incomingCallData = IncomingCallData.fromJson(myMap); - // if (!isPageNavigated) { - // isPageNavigated = true; - // Navigator.push( - // context, - // MaterialPageRoute( - // builder: (context) => IncomingCall( - // incomingCallData: LandingPage.incomingCallData))) - // .then((value) { - // isPageNavigated = false; - // }); - // } - // } else { - // print("Is Call Not Found iOS"); - // } - // } else { - // print("Is Call Not Found iOS"); - // } - // - // if (Platform.isAndroid) { - // if (message['data'].containsKey("is_call")) { - // var route = ModalRoute.of(context); - // - // if (route != null) { - // print(route.settings.name); - // } - // - // Map myMap = - // new Map.from(message['data']); - // print(myMap); - // LandingPage.isOpenCallPage = true; - // LandingPage.incomingCallData = IncomingCallData.fromJson(myMap); - // if (!isPageNavigated) { - // isPageNavigated = true; - // Navigator.push( - // context, - // MaterialPageRoute( - // builder: (context) => IncomingCall( - // incomingCallData: LandingPage.incomingCallData))) - // .then((value) { - // isPageNavigated = false; - // }); - // } - // } else { - // print("Is Call Not Found Android"); - // } - // } else { - // print("Is Call Not Found Android"); - // } - // }, - // onBackgroundMessage: Platform.isIOS ? null : myBackgroundMessageHandler, - // onLaunch: (Map message) async { - // print("onLaunch: $message"); - // showDialog("onLaunch: $message"); - // }, - // onResume: (Map message) async { - // print("onResume: $message"); - // print(message); - // print(message['name']); - // print(message['appointmentdate']); - // - // showDialog("onResume: $message"); - // - // if (Platform.isIOS) { - // if (message['is_call'] == "true") { - // var route = ModalRoute.of(context); - // - // if (route != null) { - // print(route.settings.name); - // } - // - // Map myMap = - // new Map.from(message); - // print(myMap); - // LandingPage.isOpenCallPage = true; - // LandingPage.incomingCallData = IncomingCallData.fromJson(myMap); - // if (!isPageNavigated) { - // isPageNavigated = true; - // Navigator.push( - // context, - // MaterialPageRoute( - // builder: (context) => IncomingCall( - // incomingCallData: LandingPage.incomingCallData))) - // .then((value) { - // isPageNavigated = false; - // }); - // } - // } else { - // print("Is Call Not Found iOS"); - // } - // } else { - // print("Is Call Not Found iOS"); - // } - // }, - ); + // _firebaseMessaging.setAutoInitEnabled(true); + // + // if (Platform.isIOS) { + // _firebaseMessaging.requestNotificationPermissions(); + // } + // + // _firebaseMessaging.getToken().then((String token) { + // sharedPref.setString(PUSH_TOKEN, token); + // if (token != null) { + // checkUserStatus(token); + // } + // requestPermissions(); + // }).catchError((err) { + // print(err); + // }); + // + // //_firebase Background message handler + // _firebaseMessaging.configure( + // // onMessage: (Map message) async { + // // showDialog("onMessage: $message"); + // // print("onMessage: $message"); + // // print(message); + // // print(message['name']); + // // print(message['appointmentdate']); + // // + // // if (Platform.isIOS) { + // // if (message['is_call'] == "true") { + // // var route = ModalRoute.of(context); + // // + // // if (route != null) { + // // print(route.settings.name); + // // } + // // + // // Map myMap = new Map.from(message); + // // print(myMap); + // // LandingPage.isOpenCallPage = true; + // // LandingPage.incomingCallData = IncomingCallData.fromJson(myMap); + // // if (!isPageNavigated) { + // // isPageNavigated = true; + // // Navigator.push( + // // context, + // // MaterialPageRoute( + // // builder: (context) => IncomingCall( + // // incomingCallData: LandingPage.incomingCallData))) + // // .then((value) { + // // isPageNavigated = false; + // // }); + // // } + // // } else { + // // print("Is Call Not Found iOS"); + // // } + // // } else { + // // print("Is Call Not Found iOS"); + // // } + // // + // // if (Platform.isAndroid) { + // // if (message['data'].containsKey("is_call")) { + // // var route = ModalRoute.of(context); + // // + // // if (route != null) { + // // print(route.settings.name); + // // } + // // + // // Map myMap = + // // new Map.from(message['data']); + // // print(myMap); + // // LandingPage.isOpenCallPage = true; + // // LandingPage.incomingCallData = IncomingCallData.fromJson(myMap); + // // if (!isPageNavigated) { + // // isPageNavigated = true; + // // Navigator.push( + // // context, + // // MaterialPageRoute( + // // builder: (context) => IncomingCall( + // // incomingCallData: LandingPage.incomingCallData))) + // // .then((value) { + // // isPageNavigated = false; + // // }); + // // } + // // } else { + // // print("Is Call Not Found Android"); + // // } + // // } else { + // // print("Is Call Not Found Android"); + // // } + // // }, + // // onBackgroundMessage: Platform.isIOS ? null : myBackgroundMessageHandler, + // // onLaunch: (Map message) async { + // // print("onLaunch: $message"); + // // showDialog("onLaunch: $message"); + // // }, + // // onResume: (Map message) async { + // // print("onResume: $message"); + // // print(message); + // // print(message['name']); + // // print(message['appointmentdate']); + // // + // // showDialog("onResume: $message"); + // // + // // if (Platform.isIOS) { + // // if (message['is_call'] == "true") { + // // var route = ModalRoute.of(context); + // // + // // if (route != null) { + // // print(route.settings.name); + // // } + // // + // // Map myMap = + // // new Map.from(message); + // // print(myMap); + // // LandingPage.isOpenCallPage = true; + // // LandingPage.incomingCallData = IncomingCallData.fromJson(myMap); + // // if (!isPageNavigated) { + // // isPageNavigated = true; + // // Navigator.push( + // // context, + // // MaterialPageRoute( + // // builder: (context) => IncomingCall( + // // incomingCallData: LandingPage.incomingCallData))) + // // .then((value) { + // // isPageNavigated = false; + // // }); + // // } + // // } else { + // // print("Is Call Not Found iOS"); + // // } + // // } else { + // // print("Is Call Not Found iOS"); + // // } + // // }, + // ); } showDialogs(String message) { diff --git a/lib/pages/pharmacyModule/pharmacy_module_page.dart b/lib/pages/pharmacyModule/pharmacy_module_page.dart new file mode 100644 index 00000000..60d55437 --- /dev/null +++ b/lib/pages/pharmacyModule/pharmacy_module_page.dart @@ -0,0 +1,233 @@ +import 'package:diplomaticquarterapp/config/size_config.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; +import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/pages/landing/home_page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacyModule/widgets/BannerPager.dart'; +import 'package:diplomaticquarterapp/pages/pharmacyModule/widgets/ProductTileItem.dart'; +import 'package:diplomaticquarterapp/pages/pharmacyModule/widgets/borderedButton.dart'; +import 'package:diplomaticquarterapp/pages/pharmacyModule/widgets/manufacturerItem.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; + +class PharmacyPage extends StatelessWidget { + + @override + Widget build(BuildContext context) { + return BaseView( + // onModelReady: (model) => model.getPharmacyHomeData(), + onModelReady: (model) => model.getPharmacyHomeData(), + builder: (_, model, wi) => AppScaffold( + title: "", + isShowAppBar: true, + isShowDecPage: false, + baseViewModel: model, + backgroundColor: Colors.white, + body: Container( + width: double.infinity, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + BannerPager(model), + GridViewButtons(), + /*BannerPager(model.getBannerImagesUrl()),*/ + Container( + margin: EdgeInsets.fromLTRB(10, 0, 10, 0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Texts( + TranslationBase.of(context).shopByBrands, + bold: true, + ), + BorderedButton( + TranslationBase.of(context).viewAll, + hasBorder: true, + vPadding: 6, + borderColor: Colors.green, + color: Colors.green, + handler: () {}, + ), + ], + ), + ), + Container( + height: 60, + child: ListView.builder( + itemBuilder: (ctx, i) => + ManufacturerItem(model.manufacturerList[i]), + scrollDirection: Axis.horizontal, + itemCount: model.manufacturerList.length, + ), + ), + Container( + margin: EdgeInsets.fromLTRB(10, 10, 10, 10), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Texts( + TranslationBase.of(context).recentlyViewed, + bold: true, + ), + BorderedButton( + TranslationBase.of(context).viewAll, + hasBorder: true, + vPadding: 6, + borderColor: Colors.green, + color: Colors.green, + handler: () {}, + ), + ], + ), + ), + Container(), + Container( + margin: EdgeInsets.fromLTRB(10, 10, 10, 10), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Texts( + TranslationBase.of(context).bestSellers, + bold: true, + ), + BorderedButton( + TranslationBase.of(context).viewAll, + hasBorder: true, + borderColor: Colors.green, + color: Colors.green, + vPadding: 6, + handler: () {}, + ), + ], + ), + ), + Container( + height: MediaQuery.of(context).size.height / 4, + child: ListView.builder( + itemBuilder: (ctx, i) => + ProductTileItem(model.bestSellerProduct[i]), + scrollDirection: Axis.horizontal, + itemCount: model.bestSellerProduct.length, + ), + ), + ], + ), + ), + ), + ), + ); + } +} + +class GridViewButtons extends StatelessWidget { + @override + Widget build(BuildContext context) { + final gridHeight = (MediaQuery.of(context).size.width * 0.3) * 1.8; + return Container( + child: SizedBox( + height: gridHeight, + child: GridView.count( + childAspectRatio: 2.2, + crossAxisSpacing: 10, + mainAxisSpacing: 10, + controller: new ScrollController(keepScrollOffset: false), + shrinkWrap: true, + padding: const EdgeInsets.all(4.0), + crossAxisCount: 2, + children: [ + DashboardItem( + imageName: 'pharmacy_module/bg_1.png', + hasColorFilter: false, + opacity: 0.8, + child: GridViewCard( + TranslationBase.of(context).offersAndPromotions, + 'assets/images/pharmacy_module/offer_icon.png', + () {}), + ), + DashboardItem( + imageName: 'pharmacy_module/bg_2.png', + opacity: 0, + hasColorFilter: false, + child: GridViewCard(TranslationBase.of(context).medicationRefill, + 'assets/images/pharmacy_module/medication_icon.png', () {}), + ), + DashboardItem( + imageName: 'pharmacy_module/bg_3.png', + opacity: 0, + hasColorFilter: false, + child: GridViewCard(TranslationBase.of(context).myPrescriptions, + 'assets/images/pharmacy_module/prescription_icon.png', () {}), + ), + DashboardItem( + imageName: 'pharmacy_module/bg_4.png', + opacity: 0, + hasColorFilter: false, + child: GridViewCard( + TranslationBase.of(context).searchAndScanMedication, + 'assets/images/pharmacy_module/search_scan_icon.png', + () {}), + ), + ], + ), + ), + ); + } +} + +class GridViewCard extends StatelessWidget { + final String text; + final String cardImage; + final Function handler; + + GridViewCard(this.text, this.cardImage, this.handler); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: Container( + child: Row( + children: [ + Expanded( + flex: 2, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + flex: 2, + child: Padding( + padding: const EdgeInsets.all(6), + child: Texts( + text, + color: Colors.white, + fontSize: SizeConfig.textMultiplier * 1.5, + ), + ), + ), + Expanded( + child: BorderedButton( + TranslationBase.of(context).viewAll, + handler: () {}, + ), + ), + ], + ), + ), + Expanded( + child: Align( + alignment: Alignment.centerRight, + child: Image.asset( + cardImage, + fit: BoxFit.cover, + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/pages/pharmacyModule/widgets/BannerPager.dart b/lib/pages/pharmacyModule/widgets/BannerPager.dart new file mode 100644 index 00000000..989c7557 --- /dev/null +++ b/lib/pages/pharmacyModule/widgets/BannerPager.dart @@ -0,0 +1,88 @@ +import 'package:carousel_slider/carousel_slider.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; +import 'package:flutter/material.dart'; +import 'package:diplomaticquarterapp/uitl/utils.dart'; + +class BannerPager extends StatefulWidget { + final PharmacyModuleViewModel _model; + + BannerPager(this._model); + + @override + _BannerPagerState createState() => _BannerPagerState(); +} + +class _BannerPagerState extends State { + int _current = 0; + + @override + Widget build(BuildContext context) { + return Container( + child: Column( + children: [ + CarouselSlider( + options: CarouselOptions( + aspectRatio: 7 / 2, + enlargeCenterPage: true, + enableInfiniteScroll: false, + initialPage: 0, + autoPlay: true, + autoPlayInterval: Duration(seconds: 3), + autoPlayAnimationDuration: Duration(milliseconds: 800), + autoPlayCurve: Curves.decelerate, + onPageChanged: (index, reason) { + setState(() { + _current = index; + }); + }, + ), + items: widget._model + .getBannerImagesUrl() + .mapIndexed( + (item, index) => Container( + margin: EdgeInsets.symmetric(horizontal: 1.0), + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(5.0)), + child: Center( + child: index == 0 + ? Image.asset( + item, + fit: BoxFit.cover, + ) + : Image.network( + item, + fit: BoxFit.cover, + ), + ), + ), + ), + ) + .toList(), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: widget._model + .getBannerImagesUrl() + .mapIndexed( + (item, index) => Container( + width: 12.0, + height: 4.0, + margin: + EdgeInsets.symmetric(vertical: 0.0, horizontal: 2.0), + decoration: BoxDecoration( + shape: BoxShape.rectangle, + color: _current == index + ? Color.fromRGBO(0, 250, 0, 0.9) + : Color.fromRGBO(0, 0, 0, 0.4), + ), + ), + ) + .toList(), + ), + ) + ], + )); + } +} diff --git a/lib/pages/pharmacyModule/widgets/ProductTileItem.dart b/lib/pages/pharmacyModule/widgets/ProductTileItem.dart new file mode 100644 index 00000000..fdce3559 --- /dev/null +++ b/lib/pages/pharmacyModule/widgets/ProductTileItem.dart @@ -0,0 +1,107 @@ +import 'package:diplomaticquarterapp/core/model/pharmacy_module/PharmacyProduct.dart'; +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/others/StarRating.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class ProductTileItem extends StatelessWidget { + final PharmacyProduct item; + + ProductTileItem(this.item); + + @override + Widget build(BuildContext context) { + ProjectViewModel projectProvider = Provider.of(context); + return Card( + elevation: 2, + shape: Border(right: BorderSide(color: Colors.grey.shade300, width: 1)), + margin: EdgeInsets.symmetric( + horizontal: 8, + vertical: 4, + ), + child: Container( + padding: EdgeInsets.symmetric(horizontal: 0), + width: MediaQuery.of(context).size.width / 3, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Stack( + children: [ + Container( + margin: EdgeInsets.fromLTRB(0, 16, 0, 0), + alignment: Alignment.center, + child: Image.network( + item.images[0].src, + fit: BoxFit.cover, + height: 80, + ), + ), + Container( + width: item.rxMessage != null + ? MediaQuery.of(context).size.width / 5 + : 0, + padding: EdgeInsets.all(4), + decoration: BoxDecoration( + color: Color(0xffb23838), + borderRadius: + BorderRadius.only(topLeft: Radius.circular(6)), + ), + child: Texts( + item.rxMessage != null ? item.rxMessage : "", + color: Colors.white, + regular: true, + fontSize: 10, + fontWeight: FontWeight.w400, + ), + ) + ], + ), + Container( + margin: EdgeInsets.symmetric( + horizontal: 6, + vertical: 0, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + projectProvider.isArabic ? item.name : item.namen, + regular: true, + fontSize: 12, + fontWeight: FontWeight.w400, + ), + Padding( + padding: const EdgeInsets.only(top: 4, bottom: 4), + child: Texts( + "SAR ${item.price}", + bold: true, + fontSize: 14, + ), + ), + Row( + children: [ + StarRating( + totalAverage: item.approvedTotalReviews > 0 + ? (item.approvedRatingSum.toDouble() / + item.approvedTotalReviews.toDouble()) + .toDouble() + : 0, + forceStars: true), + Texts( + "(${item.approvedTotalReviews})", + regular: true, + fontSize: 10, + fontWeight: FontWeight.w400, + ) + ], + ), + ], + ), + ) + ], + ), + ), + ); + } +} diff --git a/lib/pages/pharmacyModule/widgets/borderedButton.dart b/lib/pages/pharmacyModule/widgets/borderedButton.dart new file mode 100644 index 00000000..5e05448e --- /dev/null +++ b/lib/pages/pharmacyModule/widgets/borderedButton.dart @@ -0,0 +1,59 @@ +import 'package:diplomaticquarterapp/config/size_config.dart'; +import 'package:flutter/material.dart'; + +class BorderedButton extends StatelessWidget { + final String text; + final Function handler; + final Color color; + final bool hasBorder; + final Color borderColor; + final Color backgroundColor; + final double vPadding; + final double hPadding; + + BorderedButton( + this.text, { + this.handler, + this.color, + this.hasBorder = false, + this.borderColor, + this.backgroundColor, + this.vPadding = 0, + this.hPadding = 0, + }); + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(horizontal: 4, vertical: 4), + child: ButtonTheme( + //adds padding inside the button + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + //limits the touch area to the button area + minWidth: 0, + //wraps child's width + height: 0, + //wraps child's height + child: RaisedButton( + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + padding: EdgeInsets.symmetric(horizontal: 12, vertical: vPadding), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(4.0), + side: BorderSide(color: hasBorder ? borderColor : Colors.white, width: 0.8),), + color: backgroundColor ?? Colors.white, + textColor: color ?? Color(0xffc4aa54), + disabledTextColor: color ?? Colors.black, + disabledColor: backgroundColor ?? Colors.white, + onPressed: handler, + child: Text( + text, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: SizeConfig.textMultiplier * 1.6, + fontWeight: FontWeight.normal), + ), + ), //your original button + ), + ); + } +} diff --git a/lib/pages/pharmacyModule/widgets/manufacturerItem.dart b/lib/pages/pharmacyModule/widgets/manufacturerItem.dart new file mode 100644 index 00000000..e29de45c --- /dev/null +++ b/lib/pages/pharmacyModule/widgets/manufacturerItem.dart @@ -0,0 +1,35 @@ +import 'package:diplomaticquarterapp/core/model/pharmacy_module/Manufacturer.dart'; +import 'package:flutter/material.dart'; + +class ManufacturerItem extends StatelessWidget { + final Manufacturer item; + + ManufacturerItem(this.item); + + @override + Widget build(BuildContext context) { + return Card( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + margin: EdgeInsets.symmetric( + horizontal: 8, + vertical: 4, + ), + child: Container( + decoration: BoxDecoration( + border: Border( + right: BorderSide(color: Colors.grey.shade300, width: 1), + bottom: BorderSide(color: Colors.grey.shade300, width: 1), + left: BorderSide(color: Colors.grey.shade300, width: 1), + top: BorderSide(color: Colors.grey.shade300, width: 1)), + ), + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 8), + child: Image.network( + item.image.src, + fit: BoxFit.cover, + ), + ), + ), + ); + } +} diff --git a/lib/pages/rateAppointment/rate_appointment_doctor.dart b/lib/pages/rateAppointment/rate_appointment_doctor.dart index 83674906..d36ef9db 100644 --- a/lib/pages/rateAppointment/rate_appointment_doctor.dart +++ b/lib/pages/rateAppointment/rate_appointment_doctor.dart @@ -100,7 +100,7 @@ class _RateAppointmentDoctorState extends State { height: 4, ), Texts( - model.appointmentDetails.clinicName, + model.appointmentDetails.clinicName??'', bold: true, ), SizedBox( diff --git a/lib/uitl/date_uitl.dart b/lib/uitl/date_uitl.dart index b35bbcf4..8ffaf97c 100644 --- a/lib/uitl/date_uitl.dart +++ b/lib/uitl/date_uitl.dart @@ -265,6 +265,7 @@ class DateUtil { break; case DayOfWeek.Sunday: return "Sunday"; + break; } return ""; diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index e1559bd4..61e24391 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -685,6 +685,15 @@ class TranslationBase { String get serviceInformationTitle => localizedValues['ServiceInformationTitle'][locale.languageCode]; String get infoLab => localizedValues['info-lab'][locale.languageCode]; String get infoRadiology => localizedValues['info-radiology'][locale.languageCode]; + + // pharmacy module + String get medicationRefill => localizedValues['medicationRefill'][locale.languageCode]; + String get offersAndPromotions => localizedValues['offersAndPromotions'][locale.languageCode]; + String get myPrescriptions => localizedValues['myPrescriptions'][locale.languageCode]; + String get searchAndScanMedication => localizedValues['searchAndScanMedication'][locale.languageCode]; + String get shopByBrands => localizedValues['shopByBrands'][locale.languageCode]; + String get recentlyViewed => localizedValues['recentlyViewed'][locale.languageCode]; + String get bestSellers => localizedValues['bestSellers'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/uitl/utils.dart b/lib/uitl/utils.dart index 33a1d072..3b9fa975 100644 --- a/lib/uitl/utils.dart +++ b/lib/uitl/utils.dart @@ -1,4 +1,7 @@ import 'dart:convert'; +import 'dart:core'; +import 'dart:core'; +import 'dart:core'; import 'dart:typed_data'; import 'package:connectivity/connectivity.dart'; @@ -152,4 +155,22 @@ class Utils { static Uint8List dataFromBase64String(String base64String) { return base64Decode(base64String); } + +} +// extension function that use in iterations(list.. etc) to iterate items and get index and item it self +extension IndexedIterable on Iterable { + Iterable mapIndexed(T Function(E e, int i) f) { + var i = 0; + return map((e) => f(e, i++)); + } } +/* + userBoard.asMap().map((i, element) => MapEntry(i, Stack( + GestureDetector(onTap: () { + setState(() { + // print("element=${element.toString()}"); + // print("element=${userBoard[i].toString()}"); + }); + }), + ))).values.toList(); + */ diff --git a/lib/widgets/others/app_scaffold_widget.dart b/lib/widgets/others/app_scaffold_widget.dart index 1bf3cb19..31005606 100644 --- a/lib/widgets/others/app_scaffold_widget.dart +++ b/lib/widgets/others/app_scaffold_widget.dart @@ -35,6 +35,7 @@ class AppScaffold extends StatelessWidget { final String title; final String description; final bool isShowDecPage; + final Color backgroundColor; AuthenticatedUserObject authenticatedUserObject = locator(); @@ -50,14 +51,14 @@ class AppScaffold extends StatelessWidget { this.floatingActionButton, this.title, this.description, - this.isShowDecPage = true, this.isBottomBar}); + this.isShowDecPage = true, this.isBottomBar,this.backgroundColor}); @override Widget build(BuildContext context) { AppGlobal.context = context; return Scaffold( - backgroundColor: Theme.of(context).scaffoldBackgroundColor, + backgroundColor: backgroundColor ?? Theme.of(context).scaffoldBackgroundColor, appBar: isShowAppBar ? AppBar( elevation: 0, @@ -110,6 +111,6 @@ class AppScaffold extends StatelessWidget { buildBodyWidget() { // return body; //Stack(children: [body, buildAppLoaderWidget(isLoading)]); - return Stack(children: [body, FloatingSearchButton()]); + return Stack(children: [body, /*FloatingSearchButton()*/]); } } diff --git a/pubspec.yaml b/pubspec.yaml index 24dc3a23..8155dc59 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -75,6 +75,9 @@ dependencies: # charts charts_flutter: ^0.9.0 + #image banner slider + carousel_slider: ^2.3.1 + # Qr code Scanner TODO fix it #barcode_scan: ^3.0.1 @@ -171,6 +174,7 @@ flutter: - assets/images/svg/ - assets/tracker/ - assets/images/AlHabibMedicalService/ + - assets/images/pharmacy_module/ fonts: