From 0a9d0e5eaa3c2f8bee3d982959ec1e4e18b49f91 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 11 Oct 2021 16:27:32 +0300 Subject: [PATCH 1/3] fixes --- .../medical/prescriptions_service.dart | 2 +- .../medical/prescriptions_view_model.dart | 19 ++- .../AlHabibMedicalService/h2o/h2o_page.dart | 160 ++++-------------- 3 files changed, 42 insertions(+), 139 deletions(-) diff --git a/lib/core/service/medical/prescriptions_service.dart b/lib/core/service/medical/prescriptions_service.dart index ce91be53..fa2a24c6 100644 --- a/lib/core/service/medical/prescriptions_service.dart +++ b/lib/core/service/medical/prescriptions_service.dart @@ -34,10 +34,10 @@ class PrescriptionsService extends BaseService { } Future getPrescriptionsOrders() async { + prescriptionsOrderList.clear(); Map body = Map(); body['isDentalAllowedBackend'] = false; await baseAppClient.post(GET_PRESCRIPTIONS_ALL_ORDERS, onSuccess: (dynamic response, int statusCode) { - prescriptionsOrderList.clear(); response['PatientER_GetPatientAllPresOrdersList'].forEach((prescriptionsOrder) { prescriptionsOrderList.add(PrescriptionsOrder.fromJson(prescriptionsOrder)); }); diff --git a/lib/core/viewModels/medical/prescriptions_view_model.dart b/lib/core/viewModels/medical/prescriptions_view_model.dart index 38009f45..0c1fafdf 100644 --- a/lib/core/viewModels/medical/prescriptions_view_model.dart +++ b/lib/core/viewModels/medical/prescriptions_view_model.dart @@ -77,14 +77,17 @@ class PrescriptionsViewModel extends BaseViewModel { } getPrescriptionsOrders({bool showLoading = false}) async { - if (showLoading) setState(ViewState.Busy); - await _prescriptionsService.getPrescriptionsOrders(); - if (_prescriptionsService.hasError) { - error = _prescriptionsService.error; - setState(ViewState.ErrorLocal); - } else { - setState(ViewState.Idle); - } + // print(showLoading); + setState(ViewState.Busy); + Future.delayed(new Duration(milliseconds: 300)).then((value) async { + await _prescriptionsService.getPrescriptionsOrders(); + if (_prescriptionsService.hasError) { + error = _prescriptionsService.error; + setState(ViewState.ErrorLocal); + } else { + setState(ViewState.Idle); + } + }); } setFilterType(FilterType filterType) { diff --git a/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart b/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart index 982b9044..9478ae38 100644 --- a/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart +++ b/lib/pages/AlHabibMedicalService/h2o/h2o_page.dart @@ -1,20 +1,15 @@ import 'dart:ui'; -import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/core/model/ImagesInfo.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/H2O_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/extensions/string_extensions.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/h20_setting.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/month_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/today_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/week_page.dart'; -import 'package:diplomaticquarterapp/pages/ToDoList/ToDo.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; -import 'package:diplomaticquarterapp/pages/medical/medical_profile_page_new.dart'; -import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.dart'; -import 'package:diplomaticquarterapp/extensions/string_extensions.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; @@ -77,132 +72,37 @@ class _H2OPageState extends State with SingleTickerProviderStateMixin { }, ), ], - 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, - // alignment: Alignment.center, - // // margin: EdgeInsets.only(top: 10.0), - // // width: MediaQuery.of(context).size.width * 0.9, - // - // child: TabBar( - // isScrollable: false, - // controller: _tabController, - // indicatorWeight: 5.0, - // indicatorSize: TabBarIndicatorSize.tab, - // indicatorColor: Colors.red[800], - // labelColor: Theme.of(context).primaryColor, - // labelPadding: EdgeInsets.only(top: 4.0, left: 10.0, right: 13.0), - // unselectedLabelColor: Colors.grey[800], - // tabs: [ - // Container( - // width: MediaQuery.of(context).size.width * 0.28, - // child: Center( - // child: Texts(TranslationBase.of(context).today), - // ), - // ), - // Container( - // width: MediaQuery.of(context).size.width * 0.28, - // child: Center( - // child: Texts(TranslationBase.of(context).week), - // ), - // ), - // Container( - // width: MediaQuery.of(context).size.width * 0.28, - // child: Center( - // child: Texts(TranslationBase.of(context).month), - // ), - // ), - // ], - // ), - // ), - // ), - // ], - // ), - // ), - // backgroundColor: Colors.white, - body: Column( - children: [ - TabBar( + body: Column( + children: [ + TabBar( + controller: _tabController, + indicatorWeight: 3.0, + indicatorSize: TabBarIndicatorSize.tab, + labelColor: Color(0xff2B353E), + unselectedLabelColor: Color(0xff575757), + labelPadding: EdgeInsets.only(top: 15, bottom: 13, left: 20, right: 20), + labelStyle: TextStyle( + fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + unselectedLabelStyle: TextStyle( + fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', + fontSize: 16, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + ), + tabs: [Text(TranslationBase.of(context).today), Text(TranslationBase.of(context).week), Text(TranslationBase.of(context).month.toLowerCase().capitalizeFirstofEach)], + ), + Expanded( + child: TabBarView( + physics: BouncingScrollPhysics(), controller: _tabController, - indicatorWeight: 3.0, - indicatorSize: TabBarIndicatorSize.tab, - labelColor: Color(0xff2B353E), - unselectedLabelColor: Color(0xff575757), - labelPadding: EdgeInsets.only(top: 15, bottom: 13, left: 20, right: 20), - labelStyle: TextStyle( - fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', - fontSize: 16, - fontWeight: FontWeight.w600, - letterSpacing: -0.48, - ), - unselectedLabelStyle: TextStyle( - fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', - fontSize: 16, - fontWeight: FontWeight.w600, - letterSpacing: -0.48, - ), - tabs: [Text(TranslationBase.of(context).today), Text(TranslationBase.of(context).week), Text(TranslationBase.of(context).month.toLowerCase().capitalizeFirstofEach)], + children: [TodayPage(), WeekPage(), MonthPage()], ), - Expanded( - child: TabBarView( - physics: BouncingScrollPhysics(), - controller: _tabController, - children: [TodayPage(), WeekPage(), MonthPage()], - ), - ) - ], - ), - bottomNavigationBar: BottomNavBar( - changeIndex: (index) { - if (index == 0) { - IS_VOICE_COMMAND_CLOSED = false; - } else if (index == 1) { - Navigator.push( - context, - FadePage( - page: AppScaffold( - appBarTitle: TranslationBase.of(context).medicalProfile, - isShowAppBar: true, - showHomeAppBarIcon: false, - appBarIcons: [ - IconButton( - icon: Image.asset("assets/images/new-design/setting_gear_icon.png"), - color: Colors.white, - onPressed: () => Navigator.of(context).pushNamed( - SETTINGS, - ), - ), - ], - body: MedicalProfilePageNew()))); - } else if (index == 2) { - Navigator.of(context).pushNamedAndRemoveUntil(HOME, (Route route) => false); - } else if (index == 3) { - Navigator.of(context).pushNamed(MY_FAMILIY); - } else if (index == 4) { - Navigator.push(context, FadePage(page: ToDo(isShowAppBar: false))); - } - }, - showHomeIcon: true, - index: 0, - ), + ) + ], ), ), ); From e62e3dae1bfa14cf3a9bfb41ddbaddc37476afa6 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 11 Oct 2021 18:42:03 +0300 Subject: [PATCH 2/3] CMC APIs coverting to RC --- lib/config/config.dart | 5 + .../cmc_insert_pres_order_request_model.dart | 13 +- .../get_cmc_service_response_model.dart | 72 ++- .../AlHabibMedicalService/cmc_service.dart | 38 +- lib/core/service/client/base_app_client.dart | 87 +-- .../AlHabibMedicalService/cmc_view_model.dart | 17 +- .../NewCMC/new_cmc_page.dart | 8 +- .../NewCMC/new_cmc_step_one_page.dart | 69 +- .../NewCMC/new_cmc_step_three_page.dart | 2 +- lib/pages/MyAppointments/SchedulePage.dart | 597 +++++++++++++----- 10 files changed, 586 insertions(+), 322 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index 7840b97d..f12c9191 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -438,6 +438,11 @@ const PHARMACY_MAKE_REVIEW = 'epharmacy/api/insertreviews'; const BLOOD_DONATION_REGISTER_BLOOD_TYPE = 'Services/PatientVarification.svc/REST/BloodDonation_RegisterBloodType'; const ADD_USER_AGREEMENT_FOR_BLOOD_DONATION = 'Services/PatientVarification.svc/REST/AddUserAgreementForBloodDonation'; + +// CMC RC SERVICES +const GET_ALL_CMC_SERVICES_RC = 'rc/api/cmc/getallcmc'; +const ADD_CMC_ORDER_RC = 'rc/api/cmc/add'; + //Pharmacy wishlist const GET_WISHLIST = "shopping_cart_items/"; const DELETE_WISHLIST = "delete_shopping_cart_item_by_product?customer_id="; 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 index 534988a7..8cece1f5 100644 --- 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 @@ -73,20 +73,21 @@ class CMCInsertPresOrderRequestModel { data['LanguageID'] = this.languageID; data['IPAdress'] = this.iPAdress; data['generalid'] = this.generalid; - data['PatientOutSA'] = this.patientOutSA; + data['patientOutSa'] = this.patientOutSA; + data['isOutPatient'] = this.patientOutSA == 0 ? false : true; data['SessionID'] = this.sessionID; data['isDentalAllowedBackend'] = this.isDentalAllowedBackend; data['DeviceTypeID'] = this.deviceTypeID; - data['PatientID'] = this.patientID; + data['patientId'] = this.patientID.toString(); 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['latitude'] = this.latitude; + data['longitude'] = this.longitude; + // data['CreatedBy'] = this.createdBy; data['OrderServiceID'] = this.orderServiceID; if (this.patientERCMCInsertServicesList != null) { - data['PatientER_CMC_InsertServicesList'] = + data['procedures'] = this.patientERCMCInsertServicesList.map((v) => v.toJson()).toList(); } 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 5f356e2b..42d2fb99 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 @@ -1,44 +1,56 @@ class GetCMCServicesResponseModel { - String description; - String descriptionN; - int iD; - bool isActive; + int id; + String serviceID; + int orderServiceID; + String text; + String textN; dynamic price; - int serviceID; - dynamic totalPrice; - dynamic vAT; + dynamic priceVAT; + dynamic priceTotal; + bool isEnabled; + int orderId; + int quantity; GetCMCServicesResponseModel( - {this.description, - this.descriptionN, - this.iD, - this.isActive, - this.price, + {this.id, this.serviceID, - this.totalPrice, - this.vAT}); + this.orderServiceID, + this.text, + this.textN, + this.price, + this.priceVAT, + this.priceTotal, + this.isEnabled, + this.orderId, + this.quantity}); 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']; + id = json['id']; + serviceID = json['serviceID']; + orderServiceID = json['orderServiceID']; + text = json['text']; + textN = json['textN']; + price = json['price']; + priceVAT = json['priceVAT']; + priceTotal = json['priceTotal']; + isEnabled = json['isEnabled']; + orderId = json['orderId']; + quantity = json['quantity']; } 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; + data['id'] = this.id; + data['serviceID'] = this.serviceID; + data['orderServiceID'] = this.orderServiceID; + data['text'] = this.text; + data['textN'] = this.textN; + data['price'] = this.price; + data['priceVAT'] = this.priceVAT; + data['priceTotal'] = this.priceTotal; + data['isEnabled'] = this.isEnabled; + data['orderId'] = this.orderId; + data['quantity'] = this.quantity; return data; } } diff --git a/lib/core/service/AlHabibMedicalService/cmc_service.dart b/lib/core/service/AlHabibMedicalService/cmc_service.dart index 012e4d90..b79b6fdb 100644 --- a/lib/core/service/AlHabibMedicalService/cmc_service.dart +++ b/lib/core/service/AlHabibMedicalService/cmc_service.dart @@ -23,17 +23,30 @@ class CMCService extends BaseService { bool isOrderUpdated; Future getCMCAllServices() async { - GetCMCServicesRequestModel getCMCServicesRequestModel = new GetCMCServicesRequestModel(genderID: authenticatedUserObject.user.gender, identificationNo: authenticatedUserObject.user.patientIdentificationNo); + GetCMCServicesRequestModel getCMCServicesRequestModel = + new GetCMCServicesRequestModel(genderID: authenticatedUserObject.user.gender, identificationNo: authenticatedUserObject.user.patientIdentificationNo); hasError = false; - await baseAppClient.post(HHC_GET_ALL_CMC_SERVICES, onSuccess: (dynamic response, int statusCode) { + + // RC IMPLEMENTATION + await baseAppClient.post(GET_ALL_CMC_SERVICES_RC + "?patientID=" + user.patientID.toString(), isAllowAny: true, onSuccess: (dynamic response, int statusCode) { cmcAllServicesList.clear(); - response['PatientER_CMC_GetAllServicesList'].forEach((data) { + response.forEach((data) { cmcAllServicesList.add(GetCMCServicesResponseModel.fromJson(data)); }); }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; - }, body: getCMCServicesRequestModel.toJson()); + }, body: {}); + + // await baseAppClient.post(HHC_GET_ALL_CMC_SERVICES, onSuccess: (dynamic response, int statusCode) { + // cmcAllServicesList.clear(); + // response['PatientER_CMC_GetAllServicesList'].forEach((data) { + // cmcAllServicesList.add(GetCMCServicesResponseModel.fromJson(data)); + // }); + // }, onFailure: (String error, int statusCode) { + // hasError = true; + // super.error = error; + // }, body: getCMCServicesRequestModel.toJson()); } Future getCmcAllPresOrders() async { @@ -87,12 +100,25 @@ class CMCService extends BaseService { }, body: updatePresOrderRequestModel.toJson()); } + Future insertCMCOrderRC({CMCInsertPresOrderRequestModel order}) async { + hasError = false; + String reqId = ""; + await baseAppClient.post(ADD_CMC_ORDER_RC, onSuccess: (dynamic response, int statusCode) { + isOrderUpdated = true; + reqId = response['RequestNo'].toString(); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: order.toJson()); + return reqId; + } + Future insertPresPresOrder({CMCInsertPresOrderRequestModel order}) async { hasError = false; - String reqId=""; + String reqId = ""; await baseAppClient.post(PATIENT_ER_INSERT_PRES_ORDER, onSuccess: (dynamic response, int statusCode) { isOrderUpdated = true; - reqId=response['RequestNo'].toString(); + reqId = response['RequestNo'].toString(); }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart index b0c0925f..a9d03fd5 100644 --- a/lib/core/service/client/base_app_client.dart +++ b/lib/core/service/client/base_app_client.dart @@ -126,60 +126,65 @@ class BaseAppClient { } else { var decoded = utf8.decode(response.bodyBytes); var parsed = json.decode(utf8.decode(response.bodyBytes)); - if (parsed['Response_Message'] != null) { + + if (isAllowAny) { onSuccess(parsed, statusCode); } else { - if (parsed['ErrorType'] == 4) { - navigateToAppUpdate(AppGlobal.context, parsed['ErrorEndUserMessage']); - } - if (parsed['ErrorType'] == 2) { - await logout(); - } - if (isAllowAny) { + if (parsed['Response_Message'] != null) { onSuccess(parsed, statusCode); - } else if (parsed['IsAuthenticated'] == null) { - if (parsed['isSMSSent'] == true) { - onSuccess(parsed, statusCode); - } else if (parsed['MessageStatus'] == 1) { - onSuccess(parsed, statusCode); - } else if (parsed['Result'] == 'OK') { + } else { + if (parsed['ErrorType'] == 4) { + navigateToAppUpdate(AppGlobal.context, parsed['ErrorEndUserMessage']); + } + if (parsed['ErrorType'] == 2) { + await logout(); + } + if (isAllowAny) { onSuccess(parsed, statusCode); - } else { - if (parsed != null) { + } else if (parsed['IsAuthenticated'] == null) { + if (parsed['isSMSSent'] == true) { + onSuccess(parsed, statusCode); + } else if (parsed['MessageStatus'] == 1) { + onSuccess(parsed, statusCode); + } else if (parsed['Result'] == 'OK') { onSuccess(parsed, statusCode); } else { - onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); - logout(); + if (parsed != null) { + onSuccess(parsed, statusCode); + } else { + onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); + logout(); + } } - } - } else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) { - onSuccess(parsed, statusCode); - } else if (parsed['MessageStatus'] == 2 && parsed['IsAuthenticated']) { - if (parsed['SameClinicApptList'] != null) { + } else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) { onSuccess(parsed, statusCode); - } else { - if (parsed['message'] == null && parsed['ErrorEndUserMessage'] == null) { - if (parsed['ErrorSearchMsg'] == null) { - onFailure("Server Error found with no available message", statusCode); + } else if (parsed['MessageStatus'] == 2 && parsed['IsAuthenticated']) { + if (parsed['SameClinicApptList'] != null) { + onSuccess(parsed, statusCode); + } else { + if (parsed['message'] == null && parsed['ErrorEndUserMessage'] == null) { + if (parsed['ErrorSearchMsg'] == null) { + onFailure("Server Error found with no available message", statusCode); + } else { + onFailure(parsed['ErrorSearchMsg'], statusCode); + } } else { - onFailure(parsed['ErrorSearchMsg'], statusCode); + onFailure(parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); } - } else { - onFailure(parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); } } - } - // else if (!parsed['IsAuthenticated']) { - // await logout(); - // } - else { - if (parsed['SameClinicApptList'] != null) { - onSuccess(parsed, statusCode); - } else { - if (parsed['message'] != null) { - onFailure(parsed['message'] ?? parsed['message'], statusCode); + // else if (!parsed['IsAuthenticated']) { + // await logout(); + // } + else { + if (parsed['SameClinicApptList'] != null) { + onSuccess(parsed, statusCode); } else { - onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); + if (parsed['message'] != null) { + onFailure(parsed['message'] ?? parsed['message'], statusCode); + } else { + onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); + } } } } diff --git a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart index de007d67..8080ddec 100644 --- a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart +++ b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart @@ -38,9 +38,6 @@ class CMCViewModel extends BaseViewModel { Future getCMCAllServices() async { await _cMCService.getCMCAllServices(); - CMCGetItemsRequestModel cMCGetItemsRequestModel = new CMCGetItemsRequestModel(checkupType: cmcAllServicesList[0].iD); - - await getCheckupItems(cMCGetItemsRequestModel: cMCGetItemsRequestModel, isFirst: true); if (_cMCService.hasError) { error = _cMCService.error; setState(ViewState.Error); @@ -92,7 +89,6 @@ class CMCViewModel extends BaseViewModel { await _cMCService.getOrderDetailByOrderID(getOrderDetailByOrderIDRequestModel); } - //TODO check it in uat Future insertPresPresOrder({CMCInsertPresOrderRequestModel order}) async { setState(ViewState.Busy); order.createdBy = user.patientID; @@ -104,7 +100,20 @@ class CMCViewModel extends BaseViewModel { } else { getCmcAllPresOrders(); } + return requestId; + } + Future insertCMCOrderRC({CMCInsertPresOrderRequestModel order}) async { + setState(ViewState.Busy); + order.createdBy = user.patientID; + order.orderServiceID = OrderService.Comprehensive_Medical_Checkup.getIdOrderService(); + String requestId = await _cMCService.insertCMCOrderRC(order: order); + if (_cMCService.hasError) { + error = _cMCService.error; + setState(ViewState.ErrorLocal); + } else { + getCmcAllPresOrders(); + } return requestId; } diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart index 859580ef..5093729c 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_page.dart @@ -46,11 +46,11 @@ class _NewCMCPageState extends State with TickerProviderStateMixin { 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].descriptionN, + selectedServiceName: widget.model.cmcAllServicesList[0].text, + selectedServiceNameAR: widget.model.cmcAllServicesList[0].textN, recordID: 1, - totalPrice: widget.model.cmcAllServicesList[0].totalPrice, - vAT: widget.model.cmcAllServicesList[0].vAT); + totalPrice: widget.model.cmcAllServicesList[0].priceTotal, + vAT: widget.model.cmcAllServicesList[0].priceVAT); cMCInsertPresOrderRequestModel = new CMCInsertPresOrderRequestModel(patientERCMCInsertServicesList: [patientERCMCInsertServicesList]); } 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 32aaa898..5e2b0498 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 @@ -63,18 +63,18 @@ class _NewCMCStepOnePageState extends State { return Row( children: [ Radio( - value: widget.model.cmcAllServicesList[index].serviceID, + value: num.tryParse(widget.model.cmcAllServicesList[index].serviceID), activeColor: Colors.red[800], onChanged: (newValue) async { selectedItem = index; PatientERCMCInsertServicesList patientERCMCInsertServicesList = new PatientERCMCInsertServicesList( price: widget.model.cmcAllServicesList[index].price, - serviceID: widget.model.cmcAllServicesList[index].serviceID.toString(), - selectedServiceName: widget.model.cmcAllServicesList[index].description, - selectedServiceNameAR: widget.model.cmcAllServicesList[index].descriptionN, + serviceID: widget.model.cmcAllServicesList[index].serviceID, + selectedServiceName: widget.model.cmcAllServicesList[index].text, + selectedServiceNameAR: widget.model.cmcAllServicesList[index].textN, recordID: 1, - totalPrice: widget.model.cmcAllServicesList[index].totalPrice, - vAT: widget.model.cmcAllServicesList[index].vAT); + totalPrice: widget.model.cmcAllServicesList[index].priceTotal, + vAT: widget.model.cmcAllServicesList[index].priceVAT); setState(() { widget.cMCInsertPresOrderRequestModel.patientERCMCInsertServicesList = [patientERCMCInsertServicesList]; }); @@ -93,7 +93,7 @@ class _NewCMCStepOnePageState extends State { bottom: 20, ), child: Text( - projectViewModel.isArabic ? widget.model.cmcAllServicesList[index].descriptionN : widget.model.cmcAllServicesList[index].description, + projectViewModel.isArabic ? widget.model.cmcAllServicesList[index].textN : widget.model.cmcAllServicesList[index].text, style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, @@ -135,50 +135,6 @@ class _NewCMCStepOnePageState extends State { ), ], ), - // Card( - // shape: cardRadius(12), - // elevation: 4, - // child: Container( - // width: double.infinity, - // child: Column( - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // Padding( - // padding: const EdgeInsets.only(left: 12, right: 12, top: 12), - // child: Text( - // TranslationBase.of(context).coveredService, - // style: TextStyle( - // fontSize: 14, - // fontWeight: FontWeight.w600, - // letterSpacing: -0.45, - // ), - // ), - // ), - // ListView.separated( - // itemBuilder: (context, index) { - // return Padding( - // padding: const EdgeInsets.all(12.0), - // child: Text( - // widget.model.checkupItems[index].itemName, - // style: TextStyle( - // fontSize: 12, - // fontWeight: FontWeight.w600, - // letterSpacing: -0.45, - // ), - // ), - // ); - // }, - // separatorBuilder: (context, index) { - // return mDivider(Colors.grey); - // }, - // physics: NeverScrollableScrollPhysics(), - // shrinkWrap: true, - // itemCount: widget.model.checkupItems.length, - // ), - // ], - // ), - // ), - // ), ], ), ), @@ -194,13 +150,16 @@ class _NewCMCStepOnePageState extends State { PatientERCMCInsertServicesList patientERCMCInsertServicesList = new PatientERCMCInsertServicesList( price: widget.model.cmcAllServicesList[selectedItem].price, serviceID: widget.model.cmcAllServicesList[selectedItem].serviceID.toString(), - selectedServiceName: widget.model.cmcAllServicesList[selectedItem].description, - selectedServiceNameAR: widget.model.cmcAllServicesList[selectedItem].descriptionN, + selectedServiceName: widget.model.cmcAllServicesList[selectedItem].text, + selectedServiceNameAR: widget.model.cmcAllServicesList[selectedItem].textN, recordID: 1, - totalPrice: widget.model.cmcAllServicesList[selectedItem].totalPrice, - vAT: widget.model.cmcAllServicesList[selectedItem].vAT, + totalPrice: widget.model.cmcAllServicesList[selectedItem].priceTotal, + vAT: widget.model.cmcAllServicesList[selectedItem].priceVAT, ); + widget.cMCInsertPresOrderRequestModel.patientID = projectViewModel.user.patientID; + widget.cMCInsertPresOrderRequestModel.patientOutSA = projectViewModel.user.outSA; + widget.cMCInsertPresOrderRequestModel.patientERCMCInsertServicesList = [patientERCMCInsertServicesList]; await widget.model.getCustomerInfo(); // if (widget.model.state == ViewState.ErrorLocal) { diff --git a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_three_page.dart b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_three_page.dart index c314812c..a1b7ccee 100644 --- a/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_three_page.dart +++ b/lib/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/NewCMC/new_cmc_step_three_page.dart @@ -202,7 +202,7 @@ class _NewCMCStepThreePageState extends State { color: CustomColors.green, onTap: () async { GifLoaderDialogUtils.showMyDialog(context); - String requestId = await widget.model.insertPresPresOrder(order: widget.cmcInsertPresOrderRequestModel); + String requestId = await widget.model.insertCMCOrderRC(order: widget.cmcInsertPresOrderRequestModel); GifLoaderDialogUtils.hideDialog(context); if (widget.model.state != ViewState.ErrorLocal) { //show scuccess dialog diff --git a/lib/pages/MyAppointments/SchedulePage.dart b/lib/pages/MyAppointments/SchedulePage.dart index 2287cff5..92fbeedf 100644 --- a/lib/pages/MyAppointments/SchedulePage.dart +++ b/lib/pages/MyAppointments/SchedulePage.dart @@ -1,33 +1,30 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/viewModels/medical/medical_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; -import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart'; - import 'package:diplomaticquarterapp/pages/MyAppointments/models/DoctorScheduleResponse.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/indicator.dart'; -import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; -import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; -import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; -import 'package:flutter/material.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; -import 'package:diplomaticquarterapp/core/viewModels/medical/medical_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; -import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; -import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; -import 'package:diplomaticquarterapp/core/viewModels/project_view_model.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'; import 'package:provider/provider.dart'; -import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; class SchedulePage extends StatefulWidget { DoctorList doctorList; AppoitmentAllHistoryResultList appo; + SchedulePage({ this.appo, this.doctorList, }); + @override _SchedulePageState createState() => _SchedulePageState(); } @@ -45,6 +42,7 @@ class _SchedulePageState extends State { bool isPageChange = false; AppSharedPreferences sharedPref = AppSharedPreferences(); + @override void initState() { this.doctorList = widget.doctorList; @@ -56,169 +54,132 @@ class _SchedulePageState extends State { Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return BaseView( - onModelReady: (model) => model.getDoctorSchedule(doctorList), - allowAny: true, - builder: (_, model, widget) => BaseView( - onModelReady: (model2) => model2.getFreeSlots(doctorList), - allowAny: true, - builder: (_, model2, widget2) { - if (model2.freeSlots.length > 0 && isPageChange == false && model2.state == ViewState.Idle) { - this.freeSlots = model2.freeSlots; - this.doctorScheduleResponse = model.getDoctorScheduleList; + onModelReady: (model) => model.getDoctorSchedule(doctorList), + allowAny: true, + builder: (_, model, widget) => BaseView( + onModelReady: (model2) => model2.getFreeSlots(doctorList), + allowAny: true, + builder: (_, model2, widget2) { + if (model2.freeSlots.length > 0 && isPageChange == false && model2.state == ViewState.Idle) { + this.freeSlots = model2.freeSlots; + this.doctorScheduleResponse = model.getDoctorScheduleList; - this.generateWeeksSchedules(); - } else if (model2.freeSlots.length == 0 && model2.state == ViewState.Idle) { - AppToast.showErrorToast(message: TranslationBase.of(context).emptySchedule); - Navigator.pop(context); - } - return AppScaffold( - appBarTitle: TranslationBase.of(context).schedule, - showNewAppBar: true, - showNewAppBarTitle: true, - isShowAppBar: true, - backgroundColor: Color(0xffF7F7F7), - baseViewModel: model2, - isShowDecPage: false, - body: Column( - children: [ - SizedBox(height: 21), - PageViewIndicator( - isActive: true, - currentPage: this.currentPage, - length: weeks.length, - ), - Expanded( - child: PageView.builder( - controller: _pageController, - itemCount: weeks.length, - onPageChanged: (index) { - setState(() { - isPageChange = true; - this.currentPage = index.toDouble(); - }); - }, - itemBuilder: (context, index) { - return ListView.separated( - itemCount: weeks[index].length, - padding: EdgeInsets.all(21), - separatorBuilder: (context, index) => SizedBox(height: 12), - itemBuilder: (context, index2) { - bool isToday = DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10); - Color toDayColor = isToday ? Color(0xff359846) : Colors.white; - - return InkWell( - onTap: () { - openBookAppointment(weeks[index][index2]); + this.generateWeeksSchedules(); + } else if (model2.freeSlots.length == 0 && model2.state == ViewState.Idle) { + AppToast.showErrorToast(message: TranslationBase.of(context).emptySchedule); + Navigator.pop(context); + } + return AppScaffold( + appBarTitle: TranslationBase.of(context).schedule, + showNewAppBar: true, + showNewAppBarTitle: true, + isShowAppBar: true, + baseViewModel: model2, + isShowDecPage: false, + body: SizedBox( + height: MediaQuery.of(context).size.height, + child: Stack( + children: [ + Container( + margin: EdgeInsets.only(top: 40), + child: PageView.builder( + controller: _pageController, + itemCount: weeks.length, + onPageChanged: (index) { + setState(() { + isPageChange = true; + this.currentPage = index.toDouble(); + }); + }, + itemBuilder: (context, index) { + return Container( + child: ListView.builder( + itemCount: weeks[index].length, + itemBuilder: (context, index2) => InkWell( + onTap: () { + openBookAppointment(weeks[index][index2]); + }, + child: Row( + children: [ + Expanded( + flex: 1, + child: Padding( + padding: projectViewModel.isArabic ? EdgeInsets.only(right: 20) : EdgeInsets.only(left: 20), + child: Row(children: [ + Column( + children: [ + Texts( + weeks[index][index2]['DayName'], + fontSize: 13, + fontWeight: projectViewModel.isArabic ? FontWeight.w600 : FontWeight.w500, + ), + Texts( + getDayMonths( + DateUtil.convertStringToDate( + weeks[index][index2]['Date'], + ), + ), + fontWeight: FontWeight.bold, + fontSize: 18, + ) + ], + ) + ])), + ), + Expanded( + flex: 3, + child: ClipRRect( + borderRadius: const BorderRadius.all(Radius.circular(20.0)), + child: Container( + padding: EdgeInsets.only(left: 10, right: 10, top: 15, bottom: 20), + margin: EdgeInsets.only(left: 20, right: 20, top: 7, bottom: 7), + decoration: BoxDecoration(boxShadow: [ + DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10) + ? BoxShadow(color: Colors.green, offset: Offset(projectViewModel.isArabic ? 5 : -5, 0)) + : BoxShadow( + color: Colors.grey[100], + blurRadius: 5, + spreadRadius: 4, + offset: Offset(0, 10), + ), + ], borderRadius: const BorderRadius.all(Radius.circular(10.0)), color: Colors.white), + child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10) + ? Texts( + TranslationBase.of(context).today, + color: Colors.green, + fontWeight: FontWeight.w600, + fontSize: 12, + marginTop: 0, + ) + : SizedBox(), + Row( + children: [ + Expanded( + child: Text( + weeks[index][index2]['WorkingHours'], + style: TextStyle( + fontWeight: FontWeight.w600, + ), + ), + ), + Icon(Icons.arrow_forward, size: 16.0), + ], + ) + ]))), + ), + ], + )))); }, - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 1, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - weeks[index][index2]['DayName'], - style: TextStyle( - fontSize: 13, - fontWeight: FontWeight.w600, - color: Color(0xff2E303A), - letterSpacing: -0.52, - ), - ), - Text( - getDayMonths(DateUtil.convertStringToDate(weeks[index][index2]['Date'])), - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.w700, - color: Color(0xff2E303A), - letterSpacing: -0.72, - ), - ), - ], - ), - ), - Expanded( - flex: 3, - child: Container( - decoration: BoxDecoration( - color: toDayColor, - borderRadius: BorderRadius.all( - Radius.circular(10.0), - ), - boxShadow: [ - BoxShadow( - color: Color(0xff000000).withOpacity(.05), - blurRadius: 27, - offset: Offset(0, -3), - ), - ], - ), - child: Container( - margin: EdgeInsets.only(left: projectViewModel.isArabic ? 0 : 6, right: projectViewModel.isArabic ? 6 : 0), - padding: EdgeInsets.symmetric(vertical: 14, horizontal: 12), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.white, width: 1), - borderRadius: BorderRadius.only( - bottomRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), - topRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), - bottomLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), - topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), - ), - ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (isToday) - Text( - TranslationBase.of(context).today, - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w600, - color: toDayColor, - letterSpacing: -0.48, - ), - ), - Row( - children: [ - Expanded( - child: Text( - weeks[index][index2]['WorkingHours'], - style: TextStyle( - fontSize: 13, - fontWeight: FontWeight.w600, - color: Color(0xff2E303A), - letterSpacing: -0.56, - ), - ), - ), - ], - ) - ]), - ), - Icon(Icons.arrow_forward, color: Color(0xff2B353E)), - ], - ), - ), - ), - ), - ], - ), - ); - }); - }, - ), - ), - ], - ), - ); - }), - ); + )), + PageViewIndicator( + isActive: true, + currentPage: this.currentPage, + length: weeks.length, + ) + ], + ))); + })); } generateWeeksSchedules() { @@ -284,3 +245,289 @@ class _SchedulePageState extends State { // ); } } + +// import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +// import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart'; +// +// import 'package:diplomaticquarterapp/pages/MyAppointments/models/DoctorScheduleResponse.dart'; +// import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/indicator.dart'; +// import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +// import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +// import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +// import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +// import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; +// import 'package:flutter/material.dart'; +// import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +// import 'package:diplomaticquarterapp/core/viewModels/medical/medical_view_model.dart'; +// import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +// import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +// import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +// import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +// import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +// import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +// import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +// import 'package:provider/provider.dart'; +// import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +// +// class SchedulePage extends StatefulWidget { +// DoctorList doctorList; +// AppoitmentAllHistoryResultList appo; +// SchedulePage({ +// this.appo, +// this.doctorList, +// }); +// @override +// _SchedulePageState createState() => _SchedulePageState(); +// } +// +// class _SchedulePageState extends State { +// DoctorsListService service; +// PageController _pageController = PageController(); +// double currentPage = 0; +// int selectedindex = 0; +// List weeks = []; +// List doctorScheduleResponse = []; +// int weekMS = 604800 * 1000; +// DoctorList doctorList; +// List freeSlots = []; +// bool isPageChange = false; +// +// AppSharedPreferences sharedPref = AppSharedPreferences(); +// @override +// void initState() { +// this.doctorList = widget.doctorList; +// +// super.initState(); +// } +// +// @override +// Widget build(BuildContext context) { +// ProjectViewModel projectViewModel = Provider.of(context); +// return BaseView( +// onModelReady: (model) => model.getDoctorSchedule(doctorList), +// allowAny: true, +// builder: (_, model, widget) => BaseView( +// onModelReady: (model2) => model2.getFreeSlots(doctorList), +// allowAny: true, +// builder: (_, model2, widget2) { +// if (model2.freeSlots.length > 0 && isPageChange == false && model2.state == ViewState.Idle) { +// this.freeSlots = model2.freeSlots; +// this.doctorScheduleResponse = model.getDoctorScheduleList; +// +// this.generateWeeksSchedules(); +// } else if (model2.freeSlots.length == 0 && model2.state == ViewState.Idle) { +// AppToast.showErrorToast(message: TranslationBase.of(context).emptySchedule); +// Navigator.pop(context); +// } +// return AppScaffold( +// appBarTitle: TranslationBase.of(context).schedule, +// showNewAppBar: true, +// showNewAppBarTitle: true, +// isShowAppBar: true, +// backgroundColor: Color(0xffF7F7F7), +// baseViewModel: model2, +// isShowDecPage: false, +// body: Column( +// children: [ +// SizedBox(height: 21), +// PageViewIndicator( +// isActive: true, +// currentPage: this.currentPage, +// length: weeks.length, +// ), +// Expanded( +// child: PageView.builder( +// controller: _pageController, +// itemCount: weeks.length, +// onPageChanged: (index) { +// setState(() { +// isPageChange = true; +// this.currentPage = index.toDouble(); +// }); +// }, +// itemBuilder: (context, index) { +// return ListView.separated( +// itemCount: weeks[index].length, +// padding: EdgeInsets.all(21), +// separatorBuilder: (context, index) => SizedBox(height: 12), +// itemBuilder: (context, index2) { +// bool isToday = DateUtil.convertStringToDate(weeks[index][index2]['Date']).toString().substring(0, 10) == DateTime.now().toString().substring(0, 10); +// Color toDayColor = isToday ? Color(0xff359846) : Colors.white; +// return InkWell( +// onTap: () { +// openBookAppointment(weeks[index][index2]); +// }, +// child: Row( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Expanded( +// flex: 1, +// child: Column( +// mainAxisSize: MainAxisSize.min, +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Text( +// weeks[index][index2]['DayName'], +// style: TextStyle( +// fontSize: 13, +// fontWeight: FontWeight.w600, +// color: Color(0xff2E303A), +// letterSpacing: -0.52, +// ), +// ), +// Text( +// getDayMonths(DateUtil.convertStringToDate(weeks[index][index2]['Date'])), +// style: TextStyle( +// fontSize: 18, +// fontWeight: FontWeight.w700, +// color: Color(0xff2E303A), +// letterSpacing: -0.72, +// ), +// ), +// ], +// ), +// ), +// Expanded( +// flex: 3, +// child: Container( +// decoration: BoxDecoration( +// color: toDayColor, +// borderRadius: BorderRadius.all( +// Radius.circular(10.0), +// ), +// boxShadow: [ +// BoxShadow( +// color: Color(0xff000000).withOpacity(.05), +// blurRadius: 27, +// offset: Offset(0, -3), +// ), +// ], +// ), +// child: Container( +// margin: EdgeInsets.only(left: projectViewModel.isArabic ? 0 : 6, right: projectViewModel.isArabic ? 6 : 0), +// padding: EdgeInsets.symmetric(vertical: 14, horizontal: 12), +// decoration: BoxDecoration( +// color: Colors.white, +// border: Border.all(color: Colors.white, width: 1), +// borderRadius: BorderRadius.only( +// bottomRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), +// topRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), +// bottomLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), +// topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), +// ), +// ), +// child: Row( +// crossAxisAlignment: CrossAxisAlignment.center, +// children: [ +// Expanded( +// child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ +// if (isToday) +// Text( +// TranslationBase.of(context).today, +// style: TextStyle( +// fontSize: 12, +// fontWeight: FontWeight.w600, +// color: toDayColor, +// letterSpacing: -0.48, +// ), +// ), +// Row( +// children: [ +// Expanded( +// child: Text( +// weeks[index][index2]['WorkingHours'], +// style: TextStyle( +// fontSize: 13, +// fontWeight: FontWeight.w600, +// color: Color(0xff2E303A), +// letterSpacing: -0.56, +// ), +// ), +// ), +// ], +// ) +// ]), +// ), +// Icon(Icons.arrow_forward, color: Color(0xff2B353E)), +// ], +// ), +// ), +// ), +// ), +// ], +// ), +// ); +// }); +// }, +// ), +// ), +// ], +// ), +// ); +// }), +// ); +// } +// +// generateWeeksSchedules() { +// this.weeks.clear(); +// for (var i = 0; i < 8; i++) { +// var weekSchedule = generateNewWeekSchedule(i); +// this.markWeekFreeDays(weekSchedule); +// this.weeks.add(weekSchedule); +// } +// //print(this.weeks); +// } +// +// markWeekFreeDays(schedule) { +// for (var workDay in schedule) { +// workDay['fullDay'] = !this.hasFreeSlot(workDay['Date']); +// } +// } +// +// generateNewWeekSchedule(weekIndex) { +// var weekMSOffset = weekIndex * weekMS; +// +// var newWeekSchedule = []; +// for (var workDay in this.doctorScheduleResponse) { +// Map newWorkDay = Map(); +// newWorkDay['Date'] = DateUtil.convertDateMSToJsonDate(DateUtil.convertStringToDate(workDay.date).millisecondsSinceEpoch + weekMSOffset); +// newWorkDay['DayName'] = workDay.dayName; +// newWorkDay['WorkingHours'] = workDay.workingHours; +// newWeekSchedule.add(newWorkDay); +// } +// return newWeekSchedule; +// } +// +// hasFreeSlot(String jsonDate) { +// var date = DateUtil.convertStringToDate(jsonDate); +// var scheduleDay = date; +// for (var event in this.freeSlots) { +// var date = DateUtil.convertStringToDate(event); +// var nDate = DateTime(date.year, date.month, date.day); +// +// if (nDate.millisecondsSinceEpoch == scheduleDay.millisecondsSinceEpoch) { +// return true; +// } +// } +// return false; +// } +// +// String getDayMonths(DateTime dateTime) { +// String dateFormat = '${dateTime.day} ${DateUtil.getMonth(dateTime.month).toString().substring(0, 3)}'; +// return dateFormat; +// } +// +// openBookAppointment(selectedDate) { +// //sharedPref.setObject(DOCTOR_SCHEDULE_DATE_SEL, selectedDate); +// Navigator.of(context).pop(selectedDate); +// // Navigator.push( +// // context, +// // FadePage( +// // page: AppointmentDetails( +// // appo: widget.appo, +// // doctorSchedule: selectedDate, +// // ), +// // ), +// // ); +// } +// } From b475adb5c33b8a1b3f885713df99568803ca7b64 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Wed, 13 Oct 2021 13:58:20 +0300 Subject: [PATCH 3/3] Updates & fixes --- assets/images/new/payment/Apple_Pay.png | Bin 0 -> 6592 bytes assets/images/new/payment/Mada.png | Bin 0 -> 10340 bytes assets/images/new/payment/Mastercard.png | Bin 0 -> 14639 bytes assets/images/new/payment/installments.png | Bin 0 -> 5041 bytes assets/images/new/payment/visa.png | Bin 0 -> 16450 bytes lib/config/localized_values.dart | 7 +- .../e_referral_service.dart | 3 + lib/core/service/client/base_app_client.dart | 10 + .../new_e_referral_step_one_page.dart | 53 ++-- .../E-Referral/referral_details.dart | 4 +- .../E-Referral/search_for_referrals_page.dart | 2 +- lib/pages/BookAppointment/BookSuccess.dart | 16 +- .../covid-payment-details.dart | 5 +- .../covid-payment-summary.dart | 36 +-- lib/pages/ToDoList/ToDo.dart | 14 +- lib/pages/ToDoList/payment_method_select.dart | 10 +- lib/pages/ToDoList/widgets/paymentDialog.dart | 252 +++++++----------- .../widgets/LiveCarePaymentDialog.dart | 21 +- lib/pages/livecare/widgets/clinic_list.dart | 5 +- .../PrescriptionOrderOverveiw.dart | 20 +- lib/uitl/translations_delegate_base.dart | 8 + lib/uitl/utils_new.dart | 16 ++ pubspec.yaml | 1 + 23 files changed, 224 insertions(+), 259 deletions(-) create mode 100644 assets/images/new/payment/Apple_Pay.png create mode 100644 assets/images/new/payment/Mada.png create mode 100644 assets/images/new/payment/Mastercard.png create mode 100644 assets/images/new/payment/installments.png create mode 100644 assets/images/new/payment/visa.png diff --git a/assets/images/new/payment/Apple_Pay.png b/assets/images/new/payment/Apple_Pay.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc75042f37de9d6b7629dc7e3f33e7c5d5671b4 GIT binary patch literal 6592 zcmV;x89(NUP)Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR92ET97b z1ONa40RR91djJ3c0J_IuqW}OIHc3Q5RCodHT?^P2RkhXtQ8BZB}_$yyo*X| z26-zl2g`eESF@9PEX+%3ob>4Ps70AKo&-$IFw&!`C2Ho4Kul8v0u?0V@~csxnCHCj z4->=u-}lX4Yi@gH)_R`z|GsZ#t-aQM_sp8T_w1Q}z4fXsy-~fhfC<10z&k)+z{D6Z z28;nO80ds3jsqS6{ssJB1cUM0#27FJjDbQKSRdX;1G9l>k_!JGRA`ju+!!zhYR|xq zVBk?8oS2$@->UX(83D$CF;Ex-r@-@apjm_A>dWO2S7L} zwfg>CZP~Jl8v_+!pmT}qFb=VQQ5gR-LVe%VH}oVRUKCaVyjYkR1GzC!)`WE_7?LI{ zlKL?JlvtJ__KiG>|DTAZ4Oj@w16~5A15W{q0TW}O_6&R$3`mB7!4Q!rSND>$$2tV{ z@%fX>NoE390DAx?#y~9@=!07Gimo|XCsly4vLvi%`#cZs*(3I;cUXbL!K&ap15*%S z^ki`Ty|3?;bBM332`gx$zoL%k0$m;IYAVJ+sTnvN(FX^<^z)HY*L-d8WlvZ^yS;)c z9lEw!_RScm9s|=*rQm>X~02?M&hoo-aErLBoUqu& zTx_~Si~8FxW59a`u0({AgvCcjPWQf6x&W)5u-MMCfF3$}%&O`Pl;P2wT?LK6H;R4^ zxL06P2UYf5n8=ez7Z`JRzHyR59BlcjpqqhX9du2_81RmPml2Um59?{@Red<2?O~<) zcnlL3UxLV?`XvCL&*W=+T-r#Ya|+5dF$PM<09Qx1I?$J3|2Y6(ja+r{Az?M*n9pdQ z2Jmedt=dYmkL|hzU}6lEih*VcYYu900l<@`F5+v#3iJO-{CE+NB&TM&*M|$X@5VqG z7`P8Xaw7Iw;7;IMz%ZbWQig=ZcG&>9641O=Bb>arG^H6^KY(Tjn#*=3m`8zA0p2oq73!W0JO*f!RHOK~ zO8y>TcfdC(Yr^7szvqBPe7kIWz_*65c*?^7S0P^ma6;7OV3X*yq0Acq4(A#TSGjHf zH9BwOQ&P56mx=2}AUvGJ&qAfF35%p13`pA`(C0d@53>*xV?e?HZ&|+%1P4-X_7= z0ZxXt5+hofI}26SngpfJYojPQ-5*5S8O+6%y7N3686QDRTWGlyxM)N56Ox%IX;A zyzfK6@jzP1;=%;+7Im>j$nC=ANZO@PpIK8zhmYad@;;DNBbK?`dEjN=4vgiqp$ZA> z&;-X-8vp%>BZtudpK{3iIQ$EIegWtNB$2)_*4_ZSHi_dDY>!468s53&scR$u%zz|T zQ)ty~?guYD8k|HfuP zU!g2e6GWM8ZUrxCb?KXNAGf^<32ShI<4b$
Tkad4vCmt&42n9BghrjgTOq^-*k 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 literal 0 HcmV?d00001 diff --git a/assets/images/new/payment/Mada.png b/assets/images/new/payment/Mada.png new file mode 100644 index 0000000000000000000000000000000000000000..905a5ba893f3e650656028f91f2f7833b5408ede GIT binary patch literal 10340 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 Hu0mjf;~=R2 literal 0 HcmV?d00001 diff --git a/assets/images/new/payment/visa.png b/assets/images/new/payment/visa.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6d90dd128ebe6c69ae31e1f89dcb028976aa72 GIT binary patch literal 16450 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 { super.initState(); } + void showSMSDialog(EReferralViewModel model) { + SMSOTP( + context, + 1, + _selectedCountry['code'] + _mobileTextController.text, + (value) { + submit(model, value); + }, + () => { + Navigator.pop(context), + }, + ).displayDialog(context); + } + @override Widget build(BuildContext context) { projectViewModel = Provider.of(context); - void showSMSDialog(EReferralViewModel model) { - SMSOTP( - context, - 1, - _selectedCountry['code'] + _mobileTextController.text, - (value) { - submit(model, value); - }, - () => { - Navigator.pop(context), - }, - ).displayDialog(context); - // showDialog( - // context: context, - // barrierDismissible: false, - // child: EReferralConfirmSMSDialog( - // phoneNumber: _selectedCountry['code'] + _mobileTextController.text, - // onSucces: () { - // Navigator.of(context).pop(); - // widget.changePageViewIndex(1); - // widget.createEReferralRequestModel.requesterName = - // _nameTextController.text; - // widget.createEReferralRequestModel.requesterContactNo = - // _selectedCountry['code'].toString().substring(1) + - // _mobileTextController.text; - // widget.createEReferralRequestModel.requesterRelationship = - // _selectedRelation.iD; - // }), - // ).then((value) { - // print("dialog dismissed"); - // print(value); - // if (value != null && value) {} - // }); - } return BaseView( onModelReady: (model) => model.getRelationTypes(), @@ -205,6 +186,10 @@ class _NewEReferralStepOnePageState extends State { await model.checkActivationCodeForEReferral(checkActivationCodeForEReferralRequestModel); if (model.state == ViewState.ErrorLocal) { GifLoaderDialogUtils.hideDialog(context); + Future.delayed(Duration(seconds: 1), () { + AppToast.showErrorToast(message: model.error); + showSMSDialog(model); + }); } else { GifLoaderDialogUtils.hideDialog(context); Navigator.of(context).pop(); diff --git a/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart b/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart index 85ea80e6..1eaf9875 100644 --- a/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart +++ b/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart @@ -42,7 +42,7 @@ class _ReferralDetailsState extends State { Container( margin: EdgeInsets.only(bottom: 10.0), child: Text( - TranslationBase.of(context).referralDetails, + TranslationBase.of(context).ereferral, style: TextStyle( letterSpacing: -0.64, color: Colors.black, @@ -116,7 +116,7 @@ class _ReferralDetailsState extends State { ), Expanded( child: _getNormalText( - DateUtil.getMonthDayYearDateFormatted( + DateUtil.getDayMonthYearDateFormatted( DateUtil.convertStringToDateNoTimeZone( widget.referral.referralDate)), isBold: true), diff --git a/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart b/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart index 513eb3b2..356e8eb1 100644 --- a/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart +++ b/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart @@ -172,7 +172,7 @@ class _SearchForReferralsPageState extends State { child: myRichText(TranslationBase.of(context).patientName + ": ", model.allReferral[index].patientName, projectViewModel.isArabic)), myRichText(TranslationBase.of(context).hospital + ": ", model.allReferral[index].preferredBranchName, projectViewModel.isArabic), myRichText(TranslationBase.of(context).referralDate + ": ", - DateUtil.getMonthDayYearDateFormatted(DateUtil.convertStringToDateNoTimeZone(model.allReferral[index].referralDate)), projectViewModel.isArabic), + DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDateNoTimeZone(model.allReferral[index].referralDate)), projectViewModel.isArabic), ], ), Icon(projectViewModel.isArabic ? Icons.arrow_back_ios_outlined : Icons.arrow_forward_outlined), diff --git a/lib/pages/BookAppointment/BookSuccess.dart b/lib/pages/BookAppointment/BookSuccess.dart index 2c278f5e..84af56d6 100644 --- a/lib/pages/BookAppointment/BookSuccess.dart +++ b/lib/pages/BookAppointment/BookSuccess.dart @@ -175,7 +175,7 @@ class _BookSuccessState extends State { ), height: 45.0, child: RaisedButton( - color: new Color(0xFF60686b), + color: CustomColors.green, textColor: Colors.white, disabledTextColor: Colors.white, disabledColor: new Color(0xFFbcc2c4), @@ -365,10 +365,11 @@ class _BookSuccessState extends State { ), ], ), - Container( - margin: EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 20.0), - child: Image.asset("assets/images/new-design/payment-method.png"), - ), + // Container( + // margin: EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 20.0), + // child: Image.asset("assets/images/new-design/payment-method.png"), + // ), + Container(margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), child: getPaymentMethods()), ], ); } @@ -447,10 +448,7 @@ class _BookSuccessState extends State { fontSize: 12.0, letterSpacing: -0.36, )), - Container( - margin: EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 20.0), - child: Image.asset("assets/images/new-design/payment-method.png"), - ), + Container(margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), child: getPaymentMethods()), Text( TranslationBase.of(context).payNowBookSuccesstext2, overflow: TextOverflow.clip, diff --git a/lib/pages/Covid-DriveThru/covid-payment-details.dart b/lib/pages/Covid-DriveThru/covid-payment-details.dart index 81ba1285..f31aa53e 100644 --- a/lib/pages/Covid-DriveThru/covid-payment-details.dart +++ b/lib/pages/Covid-DriveThru/covid-payment-details.dart @@ -262,10 +262,7 @@ class _CovidPaymentDetailsState extends State { letterSpacing: -0.46, ), ), - Container( - margin: EdgeInsets.only(top: 12, bottom: 12), - child: Image.asset("assets/images/new-design/payment_options_invoice_confirmation.png", width: 300), - ), + Container(margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), child: getPaymentMethods()), ], ), ), diff --git a/lib/pages/Covid-DriveThru/covid-payment-summary.dart b/lib/pages/Covid-DriveThru/covid-payment-summary.dart index c47c8d36..c5bcb23b 100644 --- a/lib/pages/Covid-DriveThru/covid-payment-summary.dart +++ b/lib/pages/Covid-DriveThru/covid-payment-summary.dart @@ -13,6 +13,7 @@ import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/dragable_sheet.dart'; import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; @@ -95,9 +96,9 @@ class _CovidPaymentSummaryState extends State { decoration: containerColorRadiusBorderWidth(CustomColors.accentColor, 200, Colors.white, 4), ), Container( - height: 60.0, + height: 100.0, padding: EdgeInsets.all(7.0), - child: widget.selectedPaymentMethod == "ApplePay" ? SvgPicture.asset(getImagePath(widget.selectedPaymentMethod)) : Image.asset(getImagePath(widget.selectedPaymentMethod)), + child: Image.asset(getImagePath(widget.selectedPaymentMethod), width: 100, height: 100), ), mFlex(1), InkWell( @@ -154,17 +155,16 @@ class _CovidPaymentSummaryState extends State { ), ), bottomSheet: Container( - color: Colors.white, - height: MediaQuery.of(context).size.height * 0.1, + color: Theme.of(context).scaffoldBackgroundColor, + margin: EdgeInsets.only(bottom: 5.0), width: double.infinity, padding: EdgeInsets.all(12), - child: SecondaryButton( - textColor: Colors.white, - color: CustomColors.green, - label: TranslationBase.of(context).confirm.toUpperCase(), - onTap: () { + child: DefaultButton( + TranslationBase.of(context).confirm.toUpperCase(), + () { startPaymentProcess(projectViewModel.user); }, + color: CustomColors.green, ), ), ); @@ -335,25 +335,25 @@ class _CovidPaymentSummaryState extends State { String getImagePath(String paymentMethod) { switch (paymentMethod) { case "MADA": - return 'assets/images/new-design/mada.png'; - break; - case "SADAD": - return 'assets/images/new-design/sadad.png'; + return 'assets/images/new/payment/Mada.png'; break; + // case "SADAD": + // return 'assets/images/new-design/sadad.png'; + // break; case "VISA": - return 'assets/images/new-design/visa.png'; + return 'assets/images/new/payment/visa.png'; break; case "MASTERCARD": - return 'assets/images/new-design/mastercard.png'; + return 'assets/images/new/payment/Mastercard.png'; break; case "Installment": - return 'assets/images/new-design/installment.png'; + return 'assets/images/new/payment/installments.png'; break; case "ApplePay": - return 'assets/images/new-design/applepay.svg'; + return 'assets/images/new/payment/Apple_Pay.png'; break; } - return 'assets/images/new-design/mada.png'; + return 'assets/images/new/payment/Mada.png'; } } diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index a143fa15..1a0ec103 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -57,6 +57,8 @@ class _ToDoState extends State { ToDoCountProviderModel toDoProvider; CountdownTimerController controller; + ProjectViewModel projectViewModel; + @override void initState() { widget.patientShareResponse = new PatientShareResponse(); @@ -73,7 +75,7 @@ class _ToDoState extends State { @override Widget build(BuildContext context) { toDoProvider = Provider.of(context); - ProjectViewModel projectViewModel = Provider.of(context); + projectViewModel = Provider.of(context); return AppScaffold( appBarTitle: TranslationBase.of(context).todoList, imagesInfo: imagesInfo, @@ -169,12 +171,12 @@ class _ToDoState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(widget.appoList[index].doctorTitle + " " + widget.appoList[index].doctorNameObj, - style: TextStyle(fontSize: 14.0, color: Colors.black, fontWeight: FontWeight.bold, letterSpacing: 1.0)), + style: TextStyle(fontSize: 14.0, color: Colors.black, fontWeight: FontWeight.bold, letterSpacing: -0.64)), if (getDoctorSpeciality(widget.appoList[index].doctorSpeciality) != "null\n") Container( margin: EdgeInsets.only(top: 3.0, bottom: 3.0), child: Text(getDoctorSpeciality(widget.appoList[index].doctorSpeciality).trim(), - style: TextStyle(fontSize: 12.0, color: Colors.grey[600], letterSpacing: 1.0)), + style: TextStyle(fontSize: 12.0, color: Colors.grey[600], letterSpacing: -0.64)), ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -267,7 +269,7 @@ class _ToDoState extends State { color: Color(0xff20bc44), ), height: 30.0, - padding: EdgeInsets.only(right: 15), + padding: EdgeInsets.only(right: 10, left: 10), margin: EdgeInsets.symmetric(horizontal: 20), transform: Matrix4.translationValues(0.0, -8.0, 0.0), child: Row( @@ -319,11 +321,11 @@ class _ToDoState extends State { break; case 15: - return widget.languageID == 'ar' ? "assets/images/new-design/pay_online_button_arabic_disabled.png" : "assets/images/new-design/pay_online_button_disabled.png"; + return projectViewModel.isArabic ? "assets/images/new-design/pay_online_button_arabic_disabled.png" : "assets/images/new-design/pay_online_button_disabled.png"; break; case 20: - return widget.languageID == 'ar' ? "assets/images/new-design/pay_online_button_arabic.png" : "assets/images/new-design/pay_online_button.png"; + return projectViewModel.isArabic ? "assets/images/new-design/pay_online_button_arabic.png" : "assets/images/new-design/pay_online_button.png"; break; case 30: diff --git a/lib/pages/ToDoList/payment_method_select.dart b/lib/pages/ToDoList/payment_method_select.dart index f2a96651..3e7678cc 100644 --- a/lib/pages/ToDoList/payment_method_select.dart +++ b/lib/pages/ToDoList/payment_method_select.dart @@ -60,7 +60,7 @@ class _PaymentMethodState extends State { height: 60.0, width: 60, padding: EdgeInsets.all(7.0), - child: Image.asset("assets/images/new-design/mada.png"), + child: Image.asset("assets/images/new/payment/Mada.png"), ), mWidth(12), Text( @@ -96,7 +96,7 @@ class _PaymentMethodState extends State { height: 60.0, padding: EdgeInsets.all(7.0), width: 60, - child: Image.asset("assets/images/new-design/visa.png"), + child: Image.asset("assets/images/new/payment/visa.png"), ), mWidth(12), Text( @@ -132,7 +132,7 @@ class _PaymentMethodState extends State { height: 60.0, padding: EdgeInsets.all(7.0), width: 60, - child: Image.asset("assets/images/new-design/mastercard.png"), + child: Image.asset("assets/images/new/payment/Mastercard.png"), ), mWidth(12), Text( @@ -168,7 +168,7 @@ class _PaymentMethodState extends State { height: 60.0, padding: EdgeInsets.all(7.0), width: 60, - child: Image.asset("assets/images/new-design/installment.png"), + child: Image.asset("assets/images/new/payment/installments.png"), ), mWidth(12), Text( @@ -205,7 +205,7 @@ class _PaymentMethodState extends State { height: 60.0, padding: EdgeInsets.all(7.0), width: 60, - child: SvgPicture.asset("assets/images/new-design/applepay.svg"), + child: Image.asset("assets/images/new/payment/Apple_Pay.png"), ), mWidth(12), Text( diff --git a/lib/pages/ToDoList/widgets/paymentDialog.dart b/lib/pages/ToDoList/widgets/paymentDialog.dart index 7c461815..c46535b3 100644 --- a/lib/pages/ToDoList/widgets/paymentDialog.dart +++ b/lib/pages/ToDoList/widgets/paymentDialog.dart @@ -1,7 +1,9 @@ import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:flutter/material.dart'; class PaymentDialog extends StatefulWidget { @@ -21,159 +23,106 @@ class _PaymentDialogState extends State { Widget build(BuildContext context) { return Container( child: Dialog( - shape: - RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)), child: Container( height: 550.0, width: 450.0, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: [ - Container( - margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 5.0), - child: Text("Invoice Detail", - style: TextStyle( - fontSize: 25.0, - fontWeight: FontWeight.bold, - fontFamily: "Open-Sans-Bold")), - ), - Divider( - color: Colors.grey, - ), - Container( - margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), - child: Text("Appointment Details", - style: TextStyle( - fontSize: 15.0, - fontWeight: FontWeight.bold, - fontFamily: "Open-Sans-Bold")), - ), - Container( - margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), - child: Text( - widget.appo.doctorTitle + " " + widget.appo.doctorNameObj, - style: TextStyle( - color: Colors.grey[700], - fontSize: 15.0, - fontWeight: FontWeight.bold, - fontFamily: "Open-Sans-Bold")), - ), - Container( - margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), - child: Text(getDate(widget.appo.appointmentDate), - style: getTextStyle()), - ), - Container( - margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), - child: Text(widget.appo.projectName, style: getTextStyle()), - ), - Divider( - color: Colors.grey, - ), - Container( - margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 5.0), - child: Table( - children: [ - TableRow(children: [ - TableCell( - child: _getNormalText( - TranslationBase.of(context).patientShareToDo)), - TableCell( - child: _getNormalText(widget - .patientShareResponse.patientShare - .toString())), - ]), - TableRow(children: [ - TableCell( - child: _getNormalText( - TranslationBase.of(context).patientTaxToDo)), - TableCell( - child: _getNormalText(widget - .patientShareResponse.patientTaxAmount - .toString())), - ]), - TableRow(children: [ - TableCell( - child: _getNormalText(TranslationBase.of(context) - .patientShareTotalToDo)), - TableCell( - child: _getNormalText(widget - .patientShareResponse.patientShareWithTax - .toString())), - ]), - ], - ), - ), - Container( - alignment: Alignment.center, - margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 5.0), - child: Text("You can pay by following options: ", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, - fontFamily: "Open-Sans")), - ), - Container( - alignment: Alignment.center, - margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 5.0), - child: Image.asset( - "assets/images/new-design/payment_options_invoice_confirmation.png", - width: 300), - ), - Container( - alignment: Alignment.center, - margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 15.0), - child: Text( - "Are You Sure You Want To Make payment for this Appointment?", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 14.0, - color: Colors.red[700], - fontFamily: "Open-Sans")), - ), - Divider( - color: Colors.grey, - ), - Container( - alignment: Alignment.center, - height: 40.0, - child: Flex( - direction: Axis.horizontal, - children: [ - Expanded( - child: InkWell( - onTap: () { - Navigator.pop(context, null); - }, - child: Container( - child: Text("Cancel", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 18.0, color: Colors.red[700])), - ), - ), + child: Column(crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ + Container( + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 5.0), + child: Text(TranslationBase.of(context).invoiceDetails, style: TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold)), + ), + Divider( + color: Colors.grey, + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text(TranslationBase.of(context).appoDetails, style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold)), + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text(widget.appo.doctorTitle + " " + widget.appo.doctorNameObj, style: TextStyle(color: Colors.grey[700], fontSize: 15.0, fontWeight: FontWeight.bold)), + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text(getDate(widget.appo.appointmentDate), style: getTextStyle()), + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text(widget.appo.projectName, style: getTextStyle()), + ), + Divider( + color: Colors.grey, + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 5.0), + child: Table( + children: [ + TableRow(children: [ + TableCell(child: _getNormalText(TranslationBase.of(context).patientShareToDo)), + TableCell(child: _getNormalText(widget.patientShareResponse.patientShare.toString())), + ]), + TableRow(children: [ + TableCell(child: _getNormalText(TranslationBase.of(context).patientTaxToDo)), + TableCell(child: _getNormalText(widget.patientShareResponse.patientTaxAmount.toString())), + ]), + TableRow(children: [ + TableCell(child: _getNormalText(TranslationBase.of(context).patientShareTotalToDo)), + TableCell(child: _getNormalText(widget.patientShareResponse.patientShareWithTax.toString())), + ]), + ], + ), + ), + Divider( + color: Colors.grey, + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 5.0), + child: Text(TranslationBase.of(context).YouCanPayByTheFollowingOptions, style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.bold)), + ), + Container(margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), child: getPaymentMethods()), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 15.0), + child: Text(TranslationBase.of(context).appoPaymentConfirm, style: TextStyle(fontSize: 14.0, color: CustomColors.accentColor)), + ), + Divider( + color: Colors.grey, + ), + Container( + alignment: Alignment.center, + height: 40.0, + child: Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: InkWell( + onTap: () { + Navigator.pop(context, null); + }, + child: Container( + child: Text(TranslationBase.of(context).cancel, textAlign: TextAlign.center, style: TextStyle(fontSize: 18.0, color: CustomColors.accentColor)), ), - Expanded( - child: InkWell( - onTap: () { - Navigator.pop(context, widget.patientShareResponse); + ), + ), + Expanded( + child: InkWell( + onTap: () { + Navigator.pop(context, widget.patientShareResponse); // widget.onPaymentMethodSelected(); - }, - child: Container( - child: Text("Ok", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 18.0, - )), - ), - ), + }, + child: Container( + child: Text(TranslationBase.of(context).ok, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 18.0, + )), ), - ], + ), ), - ), - ]), + ], + ), + ), + ]), ), ), ); @@ -182,19 +131,12 @@ class _PaymentDialogState extends State { _getNormalText(text) { return Container( margin: EdgeInsets.only(top: 10.0, right: 10.0), - child: Text(text, - textAlign: TextAlign.end, - style: TextStyle( - fontSize: 15, - fontFamily: 'Open-Sans', - letterSpacing: 0.5, - color: Colors.grey[700])), + child: Text(text, style: TextStyle(fontSize: 13, letterSpacing: 0.5, color: Colors.grey[700])), ); } TextStyle getTextStyle() { - return TextStyle( - color: Colors.grey[700], fontSize: 15.0, fontFamily: "Open-Sans-Bold"); + return TextStyle(color: Colors.grey[700], fontSize: 13.0); } // Future navigateToPaymentMethod(context) async { diff --git a/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart b/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart index 30c273ae..a8950e5d 100644 --- a/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart +++ b/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart @@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/LiveCare/ERAppointmentFeesResponse.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -38,7 +39,7 @@ class _LiveCarePaymentDialogState extends State { child: Container( height: 600.0, margin: EdgeInsets.all(20.0), - width: 450.0, + width: 500.0, child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -81,10 +82,8 @@ class _LiveCarePaymentDialogState extends State { ], ), Container( - alignment: Alignment.center, margin: EdgeInsets.only(bottom: 10.0, top: 10.0), child: Text(widget.clinicName, - textAlign: TextAlign.center, style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.bold)), ), @@ -194,21 +193,13 @@ class _LiveCarePaymentDialogState extends State { color: Colors.grey[400], ), Container( - alignment: Alignment.center, margin: EdgeInsets.only(top: 10.0), child: new Text( TranslationBase.of(context).upComingPayOption, - textAlign: TextAlign.center, style: new TextStyle(fontSize: 14.0), ), ), - Container( - alignment: Alignment.center, - margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 5.0), - child: Image.asset( - "assets/images/new-design/payment_options_invoice_confirmation.png", - width: 300), - ), + Container(margin: EdgeInsets.fromLTRB(10.0, 5.0, 10.0, 5.0), child: getPaymentMethods()), Divider( thickness: 1.0, color: Colors.grey[400], @@ -272,10 +263,9 @@ class _LiveCarePaymentDialogState extends State { return Container( margin: EdgeInsets.only(top: 10.0, right: 10.0), child: Text(text, - textAlign: TextAlign.end, + textAlign: TextAlign.start, style: TextStyle( fontSize: 14, - // fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', letterSpacing: 0.5, color: Colors.black)), ); @@ -285,10 +275,9 @@ class _LiveCarePaymentDialogState extends State { return Container( margin: EdgeInsets.only(top: 10.0, right: 10.0, bottom: 10.0), child: Text(text, - textAlign: TextAlign.end, + textAlign: TextAlign.start, style: TextStyle( fontSize: 14, - // fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins', letterSpacing: 0.5, fontWeight: FontWeight.bold, color: Colors.black)), diff --git a/lib/pages/livecare/widgets/clinic_list.dart b/lib/pages/livecare/widgets/clinic_list.dart index 87dd7d2b..3e2ba0cf 100644 --- a/lib/pages/livecare/widgets/clinic_list.dart +++ b/lib/pages/livecare/widgets/clinic_list.dart @@ -21,6 +21,7 @@ import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; @@ -439,7 +440,7 @@ class _clinic_listState extends State { isDataLoaded ? Container( height: MediaQuery.of(context).size.height * 0.7, - child: Column( + child: liveCareScheduleClinicsListResponse.clinicsHaveScheduleList.length > 0 ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ListView.builder( @@ -465,7 +466,7 @@ class _clinic_listState extends State { height: 10.0, ), ], - ), + ): getNoDataWidget(context), ) : Container(), isDataLoaded diff --git a/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart b/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart index e081e32b..fd4f8b26 100644 --- a/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart +++ b/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart @@ -10,7 +10,6 @@ import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/ConfirmWithMessageDialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; @@ -77,9 +76,11 @@ class PrescriptionOrderOverview extends StatelessWidget { child: Padding( padding: const EdgeInsets.all(8.0), child: Center( - child: Text(prescriptionReportList[index].itemDescription.isNotEmpty - ? prescriptionReportList[index].itemDescription - : prescriptionReportList[index].itemDescriptionN)), + child: Text( + prescriptionReportList[index].itemDescription.isNotEmpty + ? prescriptionReportList[index].itemDescription + : prescriptionReportList[index].itemDescriptionN, + style: TextStyle(fontFamily: prescriptionReportList[index].itemDescription.isNotEmpty ? 'Poppins' : 'Cairo'))), )), ], ), @@ -130,7 +131,16 @@ class PrescriptionOrderOverview extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(prescriptionReportEnhList[index].itemDescription), + Text( + (prescriptionReportList[index].itemDescription.isNotEmpty + ? prescriptionReportList[index].itemDescription + : prescriptionReportList[index].itemDescriptionN ?? ''), + style: TextStyle( + fontFamily: prescriptionReportList[index].itemDescription.isNotEmpty ? 'Poppins' : 'Cairo', + letterSpacing: -0.64, + color: Color(0xff2E303A), + fontSize: 16.0, + fontWeight: FontWeight.w600)), ], ), ), diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 0a3177e0..d663881f 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -2361,6 +2361,14 @@ class TranslationBase { String get selectSlot => localizedValues["selectSlot"][locale.languageCode]; + String get invoiceDetails => localizedValues["invoiceDetails"][locale.languageCode]; + + String get appoDetails => localizedValues["appoDetails"][locale.languageCode]; + + String get appoPaymentConfirm => localizedValues["appoPaymentConfirm"][locale.languageCode]; + + + } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/uitl/utils_new.dart b/lib/uitl/utils_new.dart index 0bbad901..e9d70a1f 100644 --- a/lib/uitl/utils_new.dart +++ b/lib/uitl/utils_new.dart @@ -26,6 +26,22 @@ Color getColorFromHex(String hexColor) { return Color(int.parse(hexColor, radix: 16)); } +Widget getPaymentMethods() { + return Container( + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Image.asset("assets/images/new/payment/Mada.png", width: 50, height: 50), + Image.asset("assets/images/new/payment/visa.png", width: 50, height: 50), + Image.asset("assets/images/new/payment/Mastercard.png", width: 50, height: 50), + Image.asset("assets/images/new/payment/Apple_Pay.png", width: 50, height: 50), + Image.asset("assets/images/new/payment/installments.png", width: 50, height: 50), + ], + ), + ); +} + Widget getNoDataWidget(BuildContext context) { return Container( child: Center( diff --git a/pubspec.yaml b/pubspec.yaml index c5541181..c9de653d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -244,6 +244,7 @@ flutter: - assets/images/new/bottom_nav/ - assets/images/new/services/ - assets/images/new/appointment-rating/ + - assets/images/new/payment/ fonts: - family: WorkSans