From 4a8448369842a1516b5ba096527bed72a842ac28 Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Wed, 16 Dec 2020 12:50:41 +0300 Subject: [PATCH 1/6] fixed order details --- assets/images/pharmacy/user.svg | 3 + lib/config/config.dart | 1 + lib/config/localized_values.dart | 3 +- .../order_model_view_model.dart | 48 +- lib/locator.dart | 2 + lib/pages/pharmacy/order/Order.dart | 42 +- lib/pages/pharmacy/order/OrderDetails.dart | 116 ++- lib/pages/pharmacy/order/ProductReview.dart | 343 +++---- lib/pages/pharmacy/profile/profile.dart | 850 ++++++++++-------- .../cancelOrder_service.dart | 21 +- .../orderDetails_service.dart | 2 +- .../pharmacy_services/order_service.dart | 8 +- .../writeReview_service.dart | 40 + lib/uitl/translations_delegate_base.dart | 1 + lib/widgets/pharmacy/product_tile.dart | 26 +- 15 files changed, 864 insertions(+), 642 deletions(-) create mode 100644 assets/images/pharmacy/user.svg create mode 100644 lib/services/pharmacy_services/writeReview_service.dart diff --git a/assets/images/pharmacy/user.svg b/assets/images/pharmacy/user.svg new file mode 100644 index 00000000..8e978105 --- /dev/null +++ b/assets/images/pharmacy/user.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/config/config.dart b/lib/config/config.dart index 52cdd95c..d3fda732 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -368,6 +368,7 @@ const GET_ORDER = "orders?"; const GET_ORDER_DETAILS = "epharmacy/api/orders/"; const GET_ADDRESS = "Customers/"; const GET_Cancel_ORDER = "cancelorder/"; +const WRITE_REVIEW = "Content-Type" + "text/plain; charset=utf-8"; const GET_SHOPPING_CART = "epharmacy/api/shopping_cart_items/"; const GET_SHIPPING_OPTIONS = "epharmacy/api/get_shipping_option/"; const DELETE_SHOPPING_CART = "epharmacy/api/delete_shopping_cart_items/"; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index c3962b5b..c52739f2 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -658,6 +658,7 @@ const Map localizedValues = { "compare": {"en": " Compare", "ar": "مقارنه"}, "medicationsRefill": {"en": " Medication Refill", "ar": "اعادة تعبئة الدواء"}, "myPrescription": {"en": " My Prescriptions", "ar": "وصفاتي"}, + "quantity": {"en": " QTY ", "ar": "الكمية"}, "backMyAccount": { "en": "BACK TO MY ACCOUNT ", "ar": " الرجوع لحسابي الشخصي" @@ -672,7 +673,7 @@ const Map localizedValues = { "ar": " تقييمك سوف يساعد الأخرين في اختيار المنتج الأفضل" }, "shippedMethod": {"en": "SHIP BY:", "ar": " الشحن بواسطة:"}, - "orderDetail": {"en": "Order Detail", "ar": " تفاصيل الطلب"}, + "orderDetail": {"en": "Order Details", "ar": " تفاصيل الطلب"}, "orderSummary": {"en": "Order Summary", "ar": " تفاصيل المنتج"}, "subtotal": {"en": "Subtotal", "ar": " المجموع"}, "shipping": {"en": "Shipping", "ar": " الشحن"}, diff --git a/lib/core/viewModels/pharmacyModule/order_model_view_model.dart b/lib/core/viewModels/pharmacyModule/order_model_view_model.dart index 04cbe8e3..f3262ba3 100644 --- a/lib/core/viewModels/pharmacyModule/order_model_view_model.dart +++ b/lib/core/viewModels/pharmacyModule/order_model_view_model.dart @@ -1,9 +1,13 @@ -//import 'dart:html'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/pages/pharmacy/order/Order.dart'; +import 'package:diplomaticquarterapp/pages/pharmacy/order/OrderDetails.dart'; +import 'package:diplomaticquarterapp/services/pharmacy_services/cancelOrder_service.dart'; import 'package:diplomaticquarterapp/services/pharmacy_services/orderDetails_service.dart'; import 'package:diplomaticquarterapp/services/pharmacy_services/order_service.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:flutter/material.dart'; import '../../../locator.dart'; import '../base_view_model.dart'; @@ -15,20 +19,24 @@ class OrderModelViewModel extends BaseViewModel { OrderDetailsService _orderDetailsService = locator(); List get orderDetails => _orderDetailsService.orderDetails; + CancelOrderService _cancelOrderService = locator(); + List get cancelOrder => _cancelOrderService.cancelOrderList; - Future getOrder(id, pageId) async { + + Future getOrder(customerId, pageID) async { + print("this is customer id"+ customerId); setState(ViewState.Busy); - await _orderService.getOrder(id,pageId); + await _orderService.getOrder(customerId, pageID); if (_orderService.hasError) { error = _orderService.error; setState(ViewState.Error); } else { //order = _orderService.orderList; - print(order.length); setState(ViewState.Idle); } + } Future getOrderDetails(orderId) async { @@ -38,23 +46,47 @@ class OrderModelViewModel extends BaseViewModel { error = _orderDetailsService.error; setState(ViewState.Error); } else { - + setState(ViewState.Idle); } } - Future getProductReview(orderId) async { + Future getProductReview() async { setState(ViewState.Busy); - await _orderService.getProductReview(orderId); + await _orderService.getProductReview(); if (_orderService.hasError) { error = _orderService.error; setState(ViewState.Error); } else { //order = _orderService.orderList; - print(order.length); setState(ViewState.Idle); } } + Future getCanceledOrder(order, context) async { + print("this is order id"+ order); + setState(ViewState.Busy); + dynamic res; + await _cancelOrderService.getCanceledOrder(order).then((value) { + res = value['success']['SuccessEndUserMsg']; + print(value['success']['SuccessEndUserMsg']); + AppToast.showSuccessToast(message: "Request Sent Successfully"); +// Navigator.pop(context); + + }); + if (_cancelOrderService.hasError) { + error = _cancelOrderService.error; + setState(ViewState.Error); + AppToast.showErrorToast(message: error); + } else { + setState(ViewState.Idle); +// AppToast.showSuccessToast(message: "Request Sent Successfully"); +// Navigator.push(context, +// MaterialPageRoute(builder: (context) => OrderPage())); + + } + + return res; + } } \ No newline at end of file diff --git a/lib/locator.dart b/lib/locator.dart index 6d2375e7..c9ecdb06 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -6,6 +6,7 @@ import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_ import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; +import 'package:diplomaticquarterapp/services/pharmacy_services/cancelOrder_service.dart'; import 'package:diplomaticquarterapp/services/pharmacy_services/order_service.dart'; import 'package:diplomaticquarterapp/uitl/navigation_service.dart'; import 'package:get_it/get_it.dart'; @@ -173,6 +174,7 @@ void setupLocator() { locator.registerLazySingleton(() => OrderDetailsService()); locator.registerLazySingleton(() => CustomerAddressesService()); locator.registerLazySingleton(() => TermsConditionService()); + locator.registerLazySingleton(() => CancelOrderService()); /// View Model locator.registerFactory(() => HospitalViewModel()); diff --git a/lib/pages/pharmacy/order/Order.dart b/lib/pages/pharmacy/order/Order.dart index f46eb08f..f153dd35 100644 --- a/lib/pages/pharmacy/order/Order.dart +++ b/lib/pages/pharmacy/order/Order.dart @@ -1,4 +1,5 @@ import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; @@ -11,17 +12,24 @@ import 'package:diplomaticquarterapp/pages/pharmacy/order/OrderDetails.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; + class OrderPage extends StatefulWidget { // orderList({this.customerId, this.pageId}); var languageID ; + String customerID; + + OrderPage({@required this.customerID}); + @override _OrderPageState createState() => _OrderPageState(); } class _OrderPageState extends State with SingleTickerProviderStateMixin{ - String customerId=""; - String page_id=""; + + String pageID= "1"; + String customerId = ""; + String order =""; List orderList = [] ; List deliveredOrderList = [] ; @@ -31,19 +39,23 @@ class _OrderPageState extends State with SingleTickerProviderStateMix TabController _tabController; AppSharedPreferences sharedPref = AppSharedPreferences(); + getLanguageID() async { + return await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); + } @override void initState() { -// WidgetsBinding.instance.addPostFrameCallback((_) => getOrder()); getLanguageID(); super.initState(); + _tabController = new TabController(length: 4, vsync: this,); } @override Widget build(BuildContext context) { + print( "customerID" + widget.customerID); return BaseView( - onModelReady: (model) => model.getOrder(customerId, page_id), + onModelReady: (model) => model.getOrder(widget.customerID, pageID), builder: (_,model, wi )=> AppScaffold( appBarTitle:TranslationBase.of(context).order, baseViewModel: model, @@ -181,7 +193,7 @@ class _OrderPageState extends State with SingleTickerProviderStateMix indent: 0, endIndent: 0, ), - Row( + Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( @@ -196,7 +208,8 @@ class _OrderPageState extends State with SingleTickerProviderStateMix color: Colors.blue[700], borderRadius: BorderRadius.circular(30.0) ), - child: Text( + child: deliveredOrderList[index].orderStatusId == 30 + ? Text( // deliveredOrderList[0].orderStatus.toString().substring(12), TranslationBase.of(context).deliveredOrder, style: TextStyle( @@ -204,7 +217,15 @@ class _OrderPageState extends State with SingleTickerProviderStateMix fontSize: 15.0, fontWeight: FontWeight.bold, ), - ), + ) + : Text( + deliveredOrderList[index].orderStatus.toString().substring(12), + style: TextStyle( + color: Colors.white, + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + ) ), Container( margin: EdgeInsets.only(left: 8, right: 8, top: 1, bottom: 8), @@ -1073,12 +1094,7 @@ class _OrderPageState extends State with SingleTickerProviderStateMix ); } - getLanguageID() async { - var languageID = await sharedPref.getString(APP_LANGUAGE); - setState(() { - widget.languageID = languageID; - }); - } + } diff --git a/lib/pages/pharmacy/order/OrderDetails.dart b/lib/pages/pharmacy/order/OrderDetails.dart index 94b1aba2..57cddeca 100644 --- a/lib/pages/pharmacy/order/OrderDetails.dart +++ b/lib/pages/pharmacy/order/OrderDetails.dart @@ -6,6 +6,7 @@ import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:diplomaticquarterapp/widgets//pharmacy/product_tile.dart'; import 'package:diplomaticquarterapp/config/config.dart'; @@ -19,11 +20,11 @@ import 'package:diplomaticquarterapp/uitl/app_toast.dart'; + class OrderDetailsPage extends StatefulWidget { var languageID ; - OrderModel orderModel; OrderDetailsPage({ @required this.orderModel @@ -34,10 +35,18 @@ class OrderDetailsPage extends StatefulWidget { } class _OrderDetailsPageState extends State { + + getLanguageID() async { + return await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); + } + AppSharedPreferences sharedPref = AppSharedPreferences(); - String customerId=""; - String page_id=""; - String orderId="3516"; + String orderId=""; + + String customerId; + List orderList = [] ; + List cancelledOrderList = []; +// String orderId="3516"; var model; var isCancel = false; var isRefund = false; @@ -48,10 +57,10 @@ class _OrderDetailsPageState extends State { @override void initState() { super.initState(); + print(widget.orderModel.orderItems.length); getLanguageID(); - getCancelOrder(widget.orderModel.id); -// cancelOrderDetail(widget.orderModel.id); +// cancelOrderDetail(order) } @override @@ -98,10 +107,11 @@ class _OrderDetailsPageState extends State { color: getStatusBackgroundColor(), borderRadius: BorderRadius.circular(30.0) ), - child: Text(widget.orderModel.orderStatus.toString().substring(12), -// widget.languageID == "ar" -// ? widget.orderModel.orderStatusn.toString() -// : widget.orderModel.orderStatus.toString().substring(12) , + child: Text( +// widget.orderModel.orderStatus.toString().substring(12), + widget.languageID == "ar" + ? widget.orderModel.orderStatusn.toString() + : widget.orderModel.orderStatus.toString().substring(12) , // TranslationBase.of(context).delivered, style: TextStyle( color: Colors.white, @@ -117,7 +127,7 @@ class _OrderDetailsPageState extends State { child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(model.order[0].shippingAddress.firstName.toString().substring(10) + ' ' +model.order[0].shippingAddress.lastName.toString().substring(9), + Text(widget.orderModel.shippingAddress.firstName.toString().substring(10) + ' ' +model.order[0].shippingAddress.lastName.toString().substring(9), style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold, ), ), @@ -125,12 +135,12 @@ class _OrderDetailsPageState extends State { ), ), Container( - margin: EdgeInsets.fromLTRB(10.0, 5.0, 1.0, 5.0), + margin: EdgeInsets.fromLTRB(11.0, 5.0, 1.0, 5.0), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(model.order[0].shippingAddress.address1.toString().substring(9), - style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold, + Text(widget.orderModel.shippingAddress.address1.toString().substring(9), + style: TextStyle(fontSize: 11.0, fontWeight: FontWeight.bold, color: Colors.grey, ), ), @@ -142,8 +152,10 @@ class _OrderDetailsPageState extends State { child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(model.order[0].shippingAddress.address2.toString().substring(9), - style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold, + Text(widget.orderModel.shippingAddress.address2.toString().substring(9) + + ' ' + widget.orderModel.shippingAddress.country.toString() + + ' ' + widget.orderModel.shippingAddress.zipPostalCode.toString(), + style: TextStyle(fontSize: 10.0, fontWeight: FontWeight.bold, color: Colors.grey, ), ), @@ -161,7 +173,7 @@ class _OrderDetailsPageState extends State { ), Container( margin: EdgeInsets.only(top: 5.0, bottom: 5.0), - child: Text(model.order[0].shippingAddress.phoneNumber.toString(), + child: Text(widget.orderModel.shippingAddress.phoneNumber.toString(), style: TextStyle(fontSize: 15.0, ), ), @@ -193,7 +205,7 @@ class _OrderDetailsPageState extends State { ), ), Container( - child: model.order[0].shippingRateComputationMethodSystemName == "Shipping.FixedOrByWeight" + child: widget.orderModel.shippingRateComputationMethodSystemName == "Shipping.FixedOrByWeight" ? Container( margin: EdgeInsets.only(bottom: 10.0, top: 10.0), child: SvgPicture.asset( @@ -236,7 +248,7 @@ class _OrderDetailsPageState extends State { ), Container( margin: EdgeInsets.only(bottom: 10.0, top: 10.0), - child:Text(model.order[0].paymentName.toString().substring(12), + child:Text(widget.orderModel.paymentName.toString().substring(12), style: TextStyle(fontSize: 13.0, fontWeight: FontWeight.bold, ), ), @@ -274,8 +286,11 @@ class _OrderDetailsPageState extends State { productPrice: widget.orderModel.orderItems[index].product.price.toString(), productRate: widget.orderModel.orderItems[index].product.approvedRatingSum.toDouble(), productReviews:widget.orderModel.orderItems[index].product.approvedTotalReviews, - totalPrice: widget.orderModel.orderItems[index].priceExclTax.toString(), - qyt: widget.orderModel.orderItems[index].quantity.toString(),), + totalPrice: "${(widget.orderModel.orderItems[index].product.price + * widget.orderModel.orderItems[index].quantity).toStringAsFixed(2)}", + qyt: widget.orderModel.orderItems[index].quantity.toString(), + img:widget.orderModel.orderItems[index].product.images[0].src.toString(), + status: widget.orderModel.orderStatusId,), ); } ), @@ -318,7 +333,7 @@ class _OrderDetailsPageState extends State { ), ), ), - Text(model.order[0].orderSubtotalExclTax.toString(), + Text(widget.orderModel.orderSubtotalExclTax.toString(), style: TextStyle(fontSize: 13.0, ), ), @@ -352,7 +367,7 @@ class _OrderDetailsPageState extends State { ), ), ), - Text(model.order[0].orderShippingExclTax.toString(), + Text(widget.orderModel.orderShippingExclTax.toString(), style: TextStyle(fontSize: 13.0, ), ), @@ -418,7 +433,7 @@ class _OrderDetailsPageState extends State { ), ), ), - Text(model.order[0].orderTotal.toString(), + Text(widget.orderModel.orderTotal.toString(), style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold, ), ), @@ -428,8 +443,9 @@ class _OrderDetailsPageState extends State { ], ), widget.orderModel.orderStatusId == 10 ? InkWell( - onTap: (){ - // payOnline link + onTap: () { +// Navigator.push(context, +// MaterialPageRoute(builder: (context) => InAppBrowser())); }, child: Container( // margin: EdgeInsets.only(top: 20.0), @@ -458,12 +474,11 @@ class _OrderDetailsPageState extends State { ), ), ) : Container(), - // getCancelOrder(canCancel, canRefund), isCancel ? InkWell( onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => presentConfirmDialog())); + presentConfirmDialog(model,widget.orderModel.id);//(widget.orderModel.id)); +// }, child: Container( // padding: EdgeInsets.only(left: 13.0, right: 13.0, top: 5.0), @@ -537,37 +552,40 @@ class _OrderDetailsPageState extends State { } } - presentConfirmDialog(){ +// .getCanceledOrder + presentConfirmDialog(cancelFunction, id){ ConfirmDialog dialog = new ConfirmDialog( context: context, confirmMessage: TranslationBase.of(context).confirmCancellation, okText: TranslationBase.of(context).confirm, cancelText: TranslationBase.of(context).cancel_nocaps, - okFunction: () => { -// cancelOrderDetail(widget.orderModel.id), - ConfirmDialog.closeAlertDialog(context) - }, - cancelFunction: () => {}); + okFunction: () => cancelFunction.getCanceledOrder(id, context).then((value){ + print(":D"); + print(value); +// Navigator.pop(context); + Navigator.push(context, + MaterialPageRoute(builder: (context) => + OrderPage(customerID: widget.orderModel.customerId.toString())), + );}), + + cancelFunction: () => {} + ); dialog.showAlertDialog(context); } -// cancelOrderDetail(order){ -// if(widget.orderModel.canCancel && widget.orderModel.canRefund == false){ -//// setState(() { -// cancelOrderDetail(order); + getCanceledOrder(order){ + Navigator.pop(context); + if(widget.orderModel.canCancel && widget.orderModel.canRefund == false){ +// getCanceledOrder(order); // AppToast.showSuccessToast(message: "Request Sent Successfully"); -//// }); -//// return OrderPage(); -// } -// else{} -// } +// Navigator.push(context, +// MaterialPageRoute(builder: (context) => OrderPage())); + + } - getLanguageID() async { - var languageID = await sharedPref.getString(APP_LANGUAGE); - setState(() { - widget.languageID = languageID; - }); } + + } diff --git a/lib/pages/pharmacy/order/ProductReview.dart b/lib/pages/pharmacy/order/ProductReview.dart index 0f9217b7..37ede97c 100644 --- a/lib/pages/pharmacy/order/ProductReview.dart +++ b/lib/pages/pharmacy/order/ProductReview.dart @@ -1,19 +1,21 @@ + import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/pages/pharmacy/profile/profile.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:diplomaticquarterapp/config/config.dart'; -import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; -import 'package:diplomaticquarterapp/services/pharmacy_services/order_service.dart'; -import 'package:diplomaticquarterapp/pages/pharmacy/profile/profile.dart'; -import 'package:rating_bar/rating_bar.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; -import 'package:diplomaticquarterapp/widgets//pharmacy/product_tile.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:rating_bar/rating_bar.dart'; class ProductReviewPage extends StatefulWidget { + OrderModel orderModel; + ProductReviewPage({ + @required this.orderModel + }); @override _ProductReviewPageState createState() => _ProductReviewPageState(); } @@ -26,193 +28,212 @@ class _ProductReviewPageState extends State { String submitTxt =""; var doctorRating= ""; var reviewObj = {}; + AppSharedPreferences sharedPref = AppSharedPreferences(); @override Widget build(BuildContext context) { return BaseView( - onModelReady: (model)=>model.getProductReview(orderId), + onModelReady: (model)=>model.getOrderDetails(widget.orderModel.id), builder: (_,model, wi )=> AppScaffold( appBarTitle: TranslationBase.of(context).writeReview, isShowAppBar: true, isPharmacy:true , - body: Container( - color: Colors.white, - child: SingleChildScrollView( - child: Column( - children: [ -// Container( -// child: productTile(productName: 'Panadol Extra 500 MG', productPrice: '10.00', productRate: 3.00, -// productReviews:4, ), -// ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - margin: EdgeInsets.only(left: 10), - child: SvgPicture.asset( -// model.order[0].orderItems[0].product.images[0].src.toString(), + body: Container( + color: Colors.white, + child: SingleChildScrollView( + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + itemCount:widget.orderModel.orderItems.length, + itemBuilder: (context, index){ + return Container( + margin: EdgeInsets.only(top :15.0, bottom: 15.0), + child: Row( + children:[ + Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Container( + margin: EdgeInsets.only(left: 10), + child: SvgPicture.asset( +// widget.orderModel.orderItems[index].product.images[index].src.toString(), 'assets/images/al-habib_onlne_pharmacy_bg.png', - fit: BoxFit.cover, - width: 80, - height: 80, + fit: BoxFit.cover, + width: 80, + height: 80, ), - ),] - ), - Container( - margin: EdgeInsets.only(top :15.0, bottom: 15.0), - child: Column( - children: [ - Row( - children: [ - Text(model.order[0].orderItems[0].product.name.toString(), - style: TextStyle(fontSize: 16.0, + ), + ] ), - ), - ], - ), - Row( - children: [ - Container( - margin: EdgeInsets.only(left: 5), - child: Text(model.order[0].orderItems[0].product.price.toString(), - style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold, + ], + ), + Column( + children: [ + Row( + children: [ + Text(widget.orderModel.orderItems[index].product.name.toString(), + style: TextStyle(fontSize: 16.0, + ), ), - ), + ], ), - Container( - margin: EdgeInsets.only(left: 5), - child: Text(TranslationBase.of(context).sar, - style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold, + Row( + children: [ + Container( + margin: EdgeInsets.only(left: 5), + child: Text(widget.orderModel.orderItems[index].product.price.toString(), + style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold, + ), + ), ), - ), - ), - ], - ), - Row( - children: [ - Container( - margin: EdgeInsets.all(5), - child: Align( - alignment: Alignment.topLeft, - child: RatingBar.readOnly( - initialRating: 3, - size: 15.0, - filledColor: Colors.yellow[700], - emptyColor: Colors.grey[500], - isHalfAllowed: true, - halfFilledIcon: Icons.star_half, - filledIcon: Icons.star, - emptyIcon: Icons.star, + Container( + margin: EdgeInsets.only(left: 5), + child: Text(TranslationBase.of(context).sar, + style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold, + ), + ), ), - ), + ], ), - Container( - child: Text(model.order[0].orderItems[0].product.approvedRatingSum.toString(), - style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.bold, + Row( + children: [ + Container( + margin: EdgeInsets.all(5), + child: Align( + alignment: Alignment.topLeft, + child: RatingBar.readOnly( + initialRating: 3, + size: 15.0, + filledColor: Colors.yellow[700], + emptyColor: Colors.grey[500], + isHalfAllowed: true, + halfFilledIcon: Icons.star_half, + filledIcon: Icons.star, + emptyIcon: Icons.star, + ), + ), ), - ), - ), - Container( - margin: EdgeInsets.only(left: 5), - child: Text("(" + model.order[0].orderItems[0].product.approvedTotalReviews.toString() - + ' ' + TranslationBase.of(context).review +")", - style: TextStyle(fontSize: 12.0, + Container( + child: Text(widget.orderModel.orderItems[index].product.approvedRatingSum.toString(), + style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.bold, + ), + ), ), - ), + Container( + margin: EdgeInsets.only(left: 5), + child: Text("(" + widget.orderModel.orderItems[index].product.approvedTotalReviews.toString() + + ' ' + TranslationBase.of(context).review +")", + style: TextStyle(fontSize: 12.0, + ), + ), + ), + ], ), ], ), - ], - ), - ), - Divider( - color: Colors.grey[350], - height: 20, - thickness: 8, - indent: 0, - endIndent: 0, + ] + ), + ); + } ), - Container( - margin: EdgeInsets.only( top: 12.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - mainAxisSize: MainAxisSize.max, - children: [ - RatingBar( - // initialRating: - // this.doctor.actualDoctorRate.toDouble(), - size: 40.0, - filledColor: Colors.yellow[700], - emptyColor: Colors.grey[500], - isHalfAllowed: true, - halfFilledIcon: Icons.star_half, - filledIcon: Icons.star, - emptyIcon: Icons.star, - ), - ], + ]), + + Divider( + color: Colors.grey[350], + height: 20, + thickness: 8, + indent: 0, + endIndent: 0, + ), + Container( + margin: EdgeInsets.only( top: 12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.max, + children: [ + RatingBar( + // initialRating: + // this.doctor.actualDoctorRate.toDouble(), + size: 40.0, + filledColor: Colors.yellow[700], + emptyColor: Colors.grey[500], + isHalfAllowed: true, + halfFilledIcon: Icons.star_half, + filledIcon: Icons.star, + emptyIcon: Icons.star, ), - ), - Container( - padding: EdgeInsets.fromLTRB(8.0, 20.0, 8.0,20.0), - child: Column( - children: [ - TextFormField ( - decoration: InputDecoration( - contentPadding: const EdgeInsets.symmetric(vertical: 60.0), - border: InputBorder.none, - hintText: 'Tell us more about product!', - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(5.0), - borderSide: BorderSide(width: 1, color: Colors.grey[400]), - ), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(5.0)), - borderSide: BorderSide(color: Colors.grey[400], width: 1), - ), - ), + ], + ), + ), + Container( + padding: EdgeInsets.fromLTRB(8.0, 20.0, 8.0,20.0), + child: Column( + children: [ + TextFormField ( + decoration: InputDecoration( + contentPadding: const EdgeInsets.symmetric(vertical: 60.0), + border: InputBorder.none, + hintText: 'Tell us more about product!', + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(5.0), + borderSide: BorderSide(width: 1, color: Colors.grey[400]), ), - ], + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(5.0)), + borderSide: BorderSide(color: Colors.grey[400], width: 1), + ), + ), ), - ), - InkWell( - onTap: () { + ], + ), + ), + InkWell( + onTap: () { // Navigator.push(context, // MaterialPageRoute(builder: (context) => )); - }, - child: Container( - height: 50.0, - width: 400.0, - color: Colors.transparent, - child: Container( - decoration: BoxDecoration( - border: Border.all( - color: Colors.yellow[700], - style: BorderStyle.solid, - width: 1.0 - ), + }, + child: Container( + height: 50.0, + width: 400.0, + color: Colors.transparent, + child: Container( + decoration: BoxDecoration( + border: Border.all( color: Colors.yellow[700], - borderRadius: BorderRadius.circular(5.0) + style: BorderStyle.solid, + width: 1.0 ), - child: Center( - child: Text( - TranslationBase.of(context).shareReview, - style: TextStyle( - color: Colors.white, - fontSize: 16.0, - fontWeight: FontWeight.bold, - ), - ), + color: Colors.yellow[700], + borderRadius: BorderRadius.circular(5.0) + ), + child: Center( + child: Text( + TranslationBase.of(context).shareReview, + style: TextStyle( + color: Colors.white, + fontSize: 16.0, + fontWeight: FontWeight.bold, ), ), ), ), - ], - ), + ), ), - ),), - ); + ], + ), + ), + ),), + ); } @@ -346,4 +367,4 @@ class _ProductReviewPageState extends State { submitProductReview(){ } -} +} \ No newline at end of file diff --git a/lib/pages/pharmacy/profile/profile.dart b/lib/pages/pharmacy/profile/profile.dart index 0336370c..e52d059b 100644 --- a/lib/pages/pharmacy/profile/profile.dart +++ b/lib/pages/pharmacy/profile/profile.dart @@ -1,21 +1,18 @@ +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/LiveChat/livechat_page.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/findus/findus_page.dart'; import 'package:diplomaticquarterapp/pages/DrawerPages/family/my-family.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/lakum-main-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/wishlist.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/Order.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart'; -import 'package:diplomaticquarterapp/widgets/avatar/large_avatar.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; -import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; -import 'package:diplomaticquarterapp/config/config.dart'; -import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; -import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; - +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; class PharmacyProfilePage extends StatefulWidget { @override @@ -24,416 +21,501 @@ class PharmacyProfilePage extends StatefulWidget { class _ProfilePageState extends State { AppSharedPreferences sharedPref = AppSharedPreferences(); - String customerId=""; - String page_id=""; + + AuthenticatedUser user; + bool isLogin = false; + String firstName; + String customerId; + _ProfilePageState({this.customerId}); + + getCustomer() async { + String custID; + custID = await sharedPref.getString(PHARMACY_CUSTOMER_ID); + + setState(() { + customerId = custID; + }); + print("customer Id is"+ customerId); + return customerId; + } + + getUser() async { + var userData = await sharedPref.getObject(USER_PROFILE); + if (userData != null) user = AuthenticatedUser.fromJson(userData); + setState(() { + firstName = user.firstName.toString(); + print("this is user" + user.firstName.toString()); + }); +// this.isLogin = user != null; + } + void initState() { + getCustomer(); + super.initState(); + getUser(); + } @override Widget build(BuildContext context) { - return BaseView( - onModelReady: (model) => model.getOrder(customerId, page_id), - builder: (_,model, wi )=> AppScaffold( - appBarTitle: TranslationBase.of(context).myAccount, - isShowAppBar: true, - isPharmacy:true , - body: Container( - child:SingleChildScrollView( - child: Column( - children:[ - Container( - child:Row( - children: [ - Container( - padding:EdgeInsets.only(top:20.0, left:10.0, right:10.0, bottom:10.0,), - child: LargeAvatar(name: "profile", url:'' ,), - ), - Container( - child: Column( + return AppScaffold( + appBarTitle: TranslationBase.of(context).myAccount, + isShowAppBar: true, + isPharmacy: true, + body: Container( + child: SingleChildScrollView( + child: Column( + children: [ + Container( + child: Row( + children: [ +// Container( +// padding:EdgeInsets.only(top:20.0, left:10.0, right:10.0, bottom:10.0,), +// child: LargeAvatar( +// name: "", +// url: "" ,), +// ), + Row( + children: [ + Column( + children: [ + Container( + padding:EdgeInsets.only(top:10.0, left:10.0, right:10.0, bottom:15.0,), + child: SvgPicture.asset( + 'assets/images/pharmacy/user.svg', + width: 60, + height: 60, + ), + ),] + ), + Column( + crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( TranslationBase.of(context).welcome, - style: TextStyle(fontSize: 14.0, + style: TextStyle( + fontSize: 14.0, fontWeight: FontWeight.bold, - color:Colors.grey - ), + color: Colors.grey), ), - Text("Name", -// model.order[0].customer.firstName.toString(), + Text( + user.firstName.toString()+ " " + user.lastName.toString(), style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold - ), + fontSize: 14.0, fontWeight: FontWeight.bold), ), ], ), - ) - ], - ), - ), - Divider( - color: Colors.grey[350], - height: 20, - thickness: 5, - indent: 0, - endIndent: 0, - ), - SizedBox( - height: 15, + ], + ) + ], ), - Container( - child:Row( - children: [ - Expanded( - child: InkWell( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => OrderPage())); - }, - child: Column( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/orders_icon.svg', - width: 50, - height: 50,), - SizedBox( - height: 5, - ), - Text( - TranslationBase.of(context).orders, - style: TextStyle(fontSize: 13.0, - fontWeight: FontWeight.bold,), - ), - ], - ), + ), + Divider( + color: Colors.grey[350], + height: 20, + thickness: 5, + indent: 0, + endIndent: 0, + ), + SizedBox( + height: 15, + ), + Container( + child: Row( + children: [ + Expanded( + child: InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => OrderPage(customerID: customerId))); + }, + child: Column( + children: [ +// Image(image: AssetImage('assets/images/pharmacy/orders_icon.svg')), + SvgPicture.asset( + 'assets/images/pharmacy/orders_icon.svg', + width: 50, + height: 50, ), - ), - Expanded( - child: InkWell( - child: Column( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/lakum_icon.svg', - width: 50, - height: 50,), - SizedBox( - height: 5, - ), - Text( - TranslationBase.of(context).lakum, - style: TextStyle(fontSize: 13.0, - fontWeight: FontWeight.bold - ), - ), - ], - ), - ), - ), - Expanded( - child: InkWell( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => WishlistPage())); - }, - child: Column( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/wishlist_icon.svg', - width: 50, - height: 50,), - SizedBox( - height: 5, - ), - Text( - TranslationBase.of(context).wishlist, - style: TextStyle(fontSize: 13.0, - fontWeight: FontWeight.bold,), - ), - ], - ), + SizedBox( + height: 5, ), - ), - Expanded( - child: InkWell( - child: Column( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/review_icon.svg', - width: 50, - height: 50,), - SizedBox( - height: 5, - ), - Text( - TranslationBase.of(context).reviews, - style: TextStyle(fontSize: 13.0, - fontWeight: FontWeight.bold,), - ), - ], + Text( + TranslationBase.of(context).orders, + style: TextStyle( + fontSize: 13.0, + fontWeight: FontWeight.bold, ), ), - ), - ], - ) - ), - SizedBox( - height: 15, - ), - Divider( - color: Colors.grey[350], - height: 20, - thickness: 5, - indent: 0, - endIndent: 0, - ), - SizedBox( - height: 10, - ), - Container( - padding: EdgeInsets.only(left: 10.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - TranslationBase.of(context).myAccount, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold - ), - ), - SizedBox( - height: 10, + ], ), - Divider( - color: Colors.grey, - height: 20, - ), - InkWell( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => HomePrescriptionsPage())); + ), + ), + Expanded( + child: InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => LakumMainPage())); }, - child: Row( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/my_prescription_icon.svg', - width: 28, - height: 28,), - SizedBox( - width: 15, - ), - Text(TranslationBase.of(context).myPrescription, - style: TextStyle(fontSize: 13.0, - ), - ), - ], - ), - ), - SizedBox( - height: 5, - ), - Divider( - color: Colors.grey, - height: 20, + child: Column( + children: [ + SvgPicture.asset( + 'assets/images/pharmacy/lakum_icon.svg', + width: 50, + height: 50, + ), + SizedBox( + height: 5, + ), + Text( + TranslationBase.of(context).lakum, + style: TextStyle( + fontSize: 13.0, fontWeight: FontWeight.bold), + ), + ], ), - InkWell( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => MyFamily())); - }, - child: Row( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/compare.png', - width: 28, - height: 28,), - SizedBox( - width: 15, - ), - Text(TranslationBase.of(context).compare, - style: TextStyle(fontSize: 13.0, - ), + ), + ), + Expanded( + child: InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => WishlistPage())); + }, + child: Column( + children: [ + SvgPicture.asset( + 'assets/images/pharmacy/wishlist_icon.svg', + width: 50, + height: 50, + ), + SizedBox( + height: 5, + ), + Text( + TranslationBase.of(context).wishlist, + style: TextStyle( + fontSize: 13.0, + fontWeight: FontWeight.bold, ), - ], - ), - ), - SizedBox( - height: 5, - ), - Divider( - color: Colors.grey, - height: 20, + ), + ], ), - InkWell( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => HomePrescriptionsPage())); - }, - child: Row( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/medication_refill_icon.svg', - width: 30, - height: 30,), - SizedBox( - width: 20, - ), - Text(TranslationBase.of(context).medicationsRefill, - style: TextStyle(fontSize: 13.0, - ), + ), + ), + Expanded( + child: InkWell( + child: Column( + children: [ + SvgPicture.asset( + 'assets/images/pharmacy/review_icon.svg', + width: 50, + height: 50, + ), + SizedBox( + height: 5, + ), + Text( + TranslationBase.of(context).reviews, + style: TextStyle( + fontSize: 13.0, + fontWeight: FontWeight.bold, ), - ], - ), - ), - SizedBox( - height: 5, - ), - Divider( - color: Colors.grey, - height: 20, + ), + ], ), - InkWell( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => MyFamily())); - }, - child: Row( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/my_family_icon.svg', - width: 20, - height: 20,), - SizedBox( - width: 20, - ), - Text(TranslationBase.of(context).family, - style: TextStyle(fontSize: 13.0, - ), + ), + ), + ], + )), + SizedBox( + height: 15, + ), + Divider( + color: Colors.grey[350], + height: 20, + thickness: 5, + indent: 0, + endIndent: 0, + ), + SizedBox( + height: 10, + ), + Container( + padding: EdgeInsets.only(left: 10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + TranslationBase.of(context).myAccount, + style: TextStyle( + fontSize: 16.0, fontWeight: FontWeight.bold), + ), + SizedBox( + height: 10, + ), + Divider( + color: Colors.grey, + height: 20, + ), + InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => HomePrescriptionsPage())); + }, + child: Row( + children: [ + SvgPicture.asset( + 'assets/images/pharmacy/my_prescription_icon.svg', + width: 28, + height: 28, + ), + SizedBox( + width: 15, + ), + Text( + TranslationBase.of(context).myPrescription, + style: TextStyle( + fontSize: 13.0, ), - ], - ), + ), + ], ), - SizedBox( - height: 5, + ), + SizedBox( + height: 5, + ), + Divider( + color: Colors.grey, + height: 20, + ), + InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => MyFamily())); + }, + child: Row( + children: [ + Image.asset('assets/images/pharmacy/compare.png', + width: 35, height: 35), + SizedBox( + width: 15, + ), + Text( + TranslationBase.of(context).compare, + style: TextStyle( + fontSize: 13.0, + ), + ), + ], ), - Divider( - color: Colors.grey, - height: 20, + ), + SizedBox( + height: 5, + ), + Divider( + color: Colors.grey, + height: 20, + ), + InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => HomePrescriptionsPage())); + }, + child: Row( + children: [ + SvgPicture.asset( + 'assets/images/pharmacy/medication_refill_icon.svg', + width: 30, + height: 30, + ), + SizedBox( + width: 20, + ), + Text( + TranslationBase.of(context).medicationsRefill, + style: TextStyle( + fontSize: 13.0, + ), + ), + ], ), - InkWell( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => PharmacyAddressesPage())); - }, - child: Row( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/shipping_addresses_icon.svg', - width: 30, - height: 30,), - SizedBox( - width: 20, + ), + SizedBox( + height: 5, + ), + Divider( + color: Colors.grey, + height: 20, + ), + InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => MyFamily())); + }, + child: Row( + children: [ + SvgPicture.asset( + 'assets/images/pharmacy/my_family_icon.svg', + width: 20, + height: 20, + ), + SizedBox( + width: 20, + ), + Text( + TranslationBase.of(context).family, + style: TextStyle( + fontSize: 13.0, ), - Text(TranslationBase.of(context).shippingAddresses, - style: TextStyle(fontSize: 13.0, - ), + ), + ], + ), + ), + SizedBox( + height: 5, + ), + Divider( + color: Colors.grey, + height: 20, + ), + InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => PharmacyAddressesPage())); + }, + child: Row( + children: [ + SvgPicture.asset( + 'assets/images/pharmacy/shipping_addresses_icon.svg', + width: 30, + height: 30, + ), + SizedBox( + width: 20, + ), + Text( + TranslationBase.of(context).shippingAddresses, + style: TextStyle( + fontSize: 13.0, ), - ], - ), + ), + ], ), - ], - ), - ), - SizedBox( - height: 10, - ), - Divider( - color: Colors.grey[350], - height: 20, - thickness: 5, - indent: 0, - endIndent: 0, - ), - SizedBox( - height: 10, + ), + ], ), - Container( - padding: EdgeInsets.only(left: 10.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - TranslationBase.of(context).reachUs, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold - ), - ), - SizedBox( - height: 5, - ), - Divider( - color: Colors.grey, - height: 20, - ), - InkWell( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => LiveChatPage())); - }, - child: Row( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/contact_us_icon.svg', - width: 20, - height: 20,), - SizedBox( - width: 20, - ), - Text( - TranslationBase.of(context).contactUs, - style: TextStyle(fontSize: 13.0), - ), - ], - ), - ), - SizedBox( - height: 5, + ), + SizedBox( + height: 10, + ), + Divider( + color: Colors.grey[350], + height: 20, + thickness: 5, + indent: 0, + endIndent: 0, + ), + SizedBox( + height: 10, + ), + Container( + padding: EdgeInsets.only(left: 10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + TranslationBase.of(context).reachUs, + style: TextStyle( + fontSize: 16.0, fontWeight: FontWeight.bold), + ), + SizedBox( + height: 5, + ), + Divider( + color: Colors.grey, + height: 20, + ), + InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => LiveChatPage())); + }, + child: Row( + children: [ + SvgPicture.asset( + 'assets/images/pharmacy/contact_us_icon.svg', + width: 20, + height: 20, + ), + SizedBox( + width: 20, + ), + Text( + TranslationBase.of(context).contactUs, + style: TextStyle(fontSize: 13.0), + ), + ], ), - Divider( - color: Colors.grey, - height: 20, + ), + SizedBox( + height: 5, + ), + Divider( + color: Colors.grey, + height: 20, + ), + InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => FindUsPage())); + }, + child: Row( + children: [ + SvgPicture.asset( + 'assets/images/pharmacy/our_locations_icon.svg', + width: 30, + height: 30, + ), + SizedBox( + width: 20, + ), + Text( + TranslationBase.of(context).ourLocations, + style: TextStyle(fontSize: 13.0), + ), + ], ), - InkWell( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => FindUsPage())); - }, - child: Row( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/our_locations_icon.svg', - width: 30, - height: 30,), - SizedBox( - width: 20, - ), - Text( - TranslationBase.of(context).ourLocations, - style: TextStyle(fontSize: 13.0), - ), - ], - ), - ) - ], - ), - ) - ], - ), + ) + ], + ), + ) + ], ), ), ), ); - }} - - - - + } +// getUser() async { +// var userData = await sharedPref.getObject(USER_PROFILE); +// if (userData != null) user = AuthenticatedUser.fromJson(userData); +// } +} diff --git a/lib/services/pharmacy_services/cancelOrder_service.dart b/lib/services/pharmacy_services/cancelOrder_service.dart index de80a473..f848c2ff 100644 --- a/lib/services/pharmacy_services/cancelOrder_service.dart +++ b/lib/services/pharmacy_services/cancelOrder_service.dart @@ -16,24 +16,29 @@ class CancelOrderService extends BaseService{ AuthenticatedUser authUser = new AuthenticatedUser(); AuthProvider authProvider = new AuthProvider(); - List get orderDetails => orderDetails; - List _orderList = List(); - List get orderList => _orderList; + List _cancelOrderList = List(); + List get cancelOrderList => _cancelOrderList; String url =""; - Future cancelOrderDetail(order) async { + Future getCanceledOrder(order) async { print("step 1"); hasError = false; + + dynamic res; + await baseAppClient.getPharmacy(GET_Cancel_ORDER+order, onSuccess: (dynamic response, int statusCode) { - _orderList.clear(); - response['orders'].forEach((item) { - _orderList.add(OrderModel.fromJson(item)); - }); + res = response; + print(res); +// _cancelOrderList.clear(); +// response['success'].forEach((item) { +// _cancelOrderList.add(OrderModel.fromJson(item)); +// }); }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; }); + return res; } } \ No newline at end of file diff --git a/lib/services/pharmacy_services/orderDetails_service.dart b/lib/services/pharmacy_services/orderDetails_service.dart index fb58097f..5adbbc24 100644 --- a/lib/services/pharmacy_services/orderDetails_service.dart +++ b/lib/services/pharmacy_services/orderDetails_service.dart @@ -23,7 +23,7 @@ class OrderDetailsService extends BaseService{ Future getOrderDetails(orderId) async { - print("step 1"); + print("step 2" + orderId); hasError = false; await baseAppClient.getPharmacy(GET_ORDER_DETAILS+orderId, onSuccess: (dynamic response, int statusCode) { diff --git a/lib/services/pharmacy_services/order_service.dart b/lib/services/pharmacy_services/order_service.dart index 70523da1..e426b801 100644 --- a/lib/services/pharmacy_services/order_service.dart +++ b/lib/services/pharmacy_services/order_service.dart @@ -18,12 +18,12 @@ class OrderService extends BaseService{ List get orderList => _orderList; String url =""; - Future getOrder(custmerId, page_id) async { - print("step 1"); + Future getOrder(customerId, pageId) async { hasError = false; - url =GET_ORDER+"customer=1,fields=id,order_total,order_status,order_statusn,order_status_id,created_on_utc&page=1&limit=200&customer_id=1367368"; -// url =GET_ORDER+"customer=1,fields=id,order_total,order_status,order_statusn,order_status_id,created_on_utc&page=$page_id&limit=200&customer_id=$custmerId"; + // url =GET_ORDER+"customer=1,fields=id,order_total,order_status,order_statusn,order_status_id,created_on_utc&page=1&limit=200&customer_id=1367368"; + url =GET_ORDER+"customer=1,fields=id,order_total,order_status,order_statusn,order_status_id,created_on_utc&page=$pageId&limit=200&customer_id=$customerId"; print(url); + await baseAppClient.getPharmacy(url, onSuccess: (dynamic response, int statusCode) { _orderList.clear(); diff --git a/lib/services/pharmacy_services/writeReview_service.dart b/lib/services/pharmacy_services/writeReview_service.dart new file mode 100644 index 00000000..573095eb --- /dev/null +++ b/lib/services/pharmacy_services/writeReview_service.dart @@ -0,0 +1,40 @@ + +import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; +import 'package:diplomaticquarterapp/core/service/base_service.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:flutter/material.dart'; + + +class writeReviewService extends BaseService{ + + + + AppSharedPreferences sharedPref = AppSharedPreferences(); + AppGlobal appGlobal = new AppGlobal(); + + AuthenticatedUser authUser = new AuthenticatedUser(); + AuthProvider authProvider = new AuthProvider(); + + List get writeReview => writeReview; + List _writeReviewList = List(); + List get orderList => _writeReviewList; + + + Future getProductReview() async { + hasError = false; + await baseAppClient.getPharmacy(WRITE_REVIEW, + onSuccess: (dynamic response, int statusCode) { + _writeReviewList.clear(); + response[''].forEach((item) { + _writeReviewList.add(OrderModel.fromJson(item)); + }); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }); + } +} \ No newline at end of file diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 7be0a051..d10cb542 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -773,6 +773,7 @@ class TranslationBase { String get compare => localizedValues['compare'][locale.languageCode]; String get medicationsRefill => localizedValues['medicationsRefill'][locale.languageCode]; String get myPrescription => localizedValues['myPrescription'][locale.languageCode]; + String get quantity => localizedValues['quantity'][locale.languageCode]; // pharmacy module diff --git a/lib/widgets/pharmacy/product_tile.dart b/lib/widgets/pharmacy/product_tile.dart index f16ff7e5..b56fc625 100644 --- a/lib/widgets/pharmacy/product_tile.dart +++ b/lib/widgets/pharmacy/product_tile.dart @@ -17,11 +17,14 @@ class productTile extends StatelessWidget { final String qyt; final String totalPrice; final bool isOrderDetails; + final String img; + final int status; productTile({this.productName, this.productPrice, this.productRate, - this.qyt, this.totalPrice, this.productReviews, - this.isOrderDetails=true}); + this.qyt, this.totalPrice, this.productReviews, this.img, + this.isOrderDetails=true, this.status}); + @override Widget build(BuildContext context) { @@ -37,13 +40,10 @@ class productTile extends StatelessWidget { children: [ Container( margin: EdgeInsets.only(left: 10), - child: Image( - image: - AssetImage('assets/images/al-habib_onlne_pharmacy_bg.png'), - fit: BoxFit.cover, - width: 80, - height: 80, - ), + child: Image.network(img), +// fit: BoxFit.cover, + width: 80, + height: 80, ), Expanded( flex: 5, @@ -119,7 +119,7 @@ class productTile extends StatelessWidget { margin: EdgeInsets.only(bottom: 5.0), child: RichText( text: TextSpan( - text: 'QYT: $qyt', + text: TranslationBase.of(context).quantity+"" +'$qyt', style: TextStyle( fontWeight: FontWeight.bold, color: Colors.grey, @@ -163,8 +163,8 @@ class productTile extends StatelessWidget { ), ): Container(), // this.isOrderDetails == true && model.order[0].orderStatusId == 30? - this.isOrderDetails == true? - Expanded( + + if(status ==30 && this.isOrderDetails == true ) Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ @@ -227,7 +227,7 @@ class productTile extends StatelessWidget { ), ], ), - ) : Container(), + ), ], ), ); From 359eba2da01cacfac40d478248c6d09da8ff9dd0 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Wed, 16 Dec 2020 18:10:38 +0200 Subject: [PATCH 2/6] make some updates in firebase version and update gradle, finish review order --- android/app/build.gradle | 12 +- android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- lib/config/config.dart | 1 + .../order_model_view_model.dart | 34 +- lib/pages/pharmacy/order/OrderDetails.dart | 605 ++++++++++-------- lib/pages/pharmacy/order/ProductReview.dart | 373 ++++++----- .../orderDetails_service.dart | 36 ++ lib/widgets/pharmacy/product_tile.dart | 11 +- pubspec.yaml | 2 +- 10 files changed, 593 insertions(+), 485 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 54ea9373..abcdcf6f 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -72,9 +72,17 @@ flutter { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "com.google.firebase:firebase-messaging:20.3.0" + /* implementation ("com.google.firebase:firebase-messaging:21.0.0", { + // protobuf-lite that firebase-config and Tink depends on. + exclude group: 'com.google.protobuf',module: 'protobuf-javalite' +// exclude group: 'com.google.protobuf',module: 'protobuf-lite' + }) + implementation ('com.google.firebase:firebase-inappmessaging-display:19.1.2',{ + // protobuf-lite that firebase-config and Tink depends on. + exclude group: 'com.google.protobuf',module: 'protobuf-javalite' +// exclude group: 'com.google.protobuf',module: 'protobuf-lite' + })*/ 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']) diff --git a/android/build.gradle b/android/build.gradle index 8e56476b..433bc8ad 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,7 +8,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:4.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.google.gms:google-services:4.3.2' + classpath 'com.google.gms:google-services:4.3.4' } } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 5660070d..c935be88 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/lib/config/config.dart b/lib/config/config.dart index d3fda732..3269962b 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -410,6 +410,7 @@ const GET_PATIENT_ALL_PRES_ORD = 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; const PATIENT_ER_INSERT_PRES_ORDER = 'Services/Patients.svc/REST/PatientER_InsertPresOrder'; +const PHARMACY_MAKE_REVIEW = 'epharmacy/api/insertreviews'; // External API const ADD_ADDRESS_INFO = diff --git a/lib/core/viewModels/pharmacyModule/order_model_view_model.dart b/lib/core/viewModels/pharmacyModule/order_model_view_model.dart index f3262ba3..301adea1 100644 --- a/lib/core/viewModels/pharmacyModule/order_model_view_model.dart +++ b/lib/core/viewModels/pharmacyModule/order_model_view_model.dart @@ -1,4 +1,3 @@ - import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/Order.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/OrderDetails.dart'; @@ -12,21 +11,20 @@ import '../../../locator.dart'; import '../base_view_model.dart'; class OrderModelViewModel extends BaseViewModel { - OrderService _orderService = locator(); + List get order => _orderService.orderList; OrderDetailsService _orderDetailsService = locator(); + List get orderDetails => _orderDetailsService.orderDetails; CancelOrderService _cancelOrderService = locator(); - List get cancelOrder => _cancelOrderService.cancelOrderList; - - + List get cancelOrder => _cancelOrderService.cancelOrderList; Future getOrder(customerId, pageID) async { - print("this is customer id"+ customerId); + print("this is customer id" + customerId); setState(ViewState.Busy); await _orderService.getOrder(customerId, pageID); if (_orderService.hasError) { @@ -36,7 +34,6 @@ class OrderModelViewModel extends BaseViewModel { //order = _orderService.orderList; setState(ViewState.Idle); } - } Future getOrderDetails(orderId) async { @@ -52,7 +49,7 @@ class OrderModelViewModel extends BaseViewModel { Future getProductReview() async { setState(ViewState.Busy); - await _orderService.getProductReview(); + // await _orderService.getProductReview(); if (_orderService.hasError) { error = _orderService.error; setState(ViewState.Error); @@ -63,7 +60,7 @@ class OrderModelViewModel extends BaseViewModel { } Future getCanceledOrder(order, context) async { - print("this is order id"+ order); + print("this is order id" + order); setState(ViewState.Busy); dynamic res; await _cancelOrderService.getCanceledOrder(order).then((value) { @@ -71,14 +68,13 @@ class OrderModelViewModel extends BaseViewModel { print(value['success']['SuccessEndUserMsg']); AppToast.showSuccessToast(message: "Request Sent Successfully"); // Navigator.pop(context); - }); if (_cancelOrderService.hasError) { error = _cancelOrderService.error; setState(ViewState.Error); AppToast.showErrorToast(message: error); } else { - setState(ViewState.Idle); + setState(ViewState.Idle); // AppToast.showSuccessToast(message: "Request Sent Successfully"); // Navigator.push(context, // MaterialPageRoute(builder: (context) => OrderPage())); @@ -86,7 +82,19 @@ class OrderModelViewModel extends BaseViewModel { } return res; - } -} \ No newline at end of file + Future makeReview(Product product, double rating, String reviewText) async { + setState(ViewState.Busy); + await _orderDetailsService.makeReview(product, rating, reviewText); + if (_orderDetailsService.hasError) { + error = _orderDetailsService.error; + setState(ViewState.Error); + AppToast.showErrorToast(message: error); + } else { + setState(ViewState.Idle); + AppToast.showSuccessToast( + message: "Your review has been Submitted successfully"); + } + } +} diff --git a/lib/pages/pharmacy/order/OrderDetails.dart b/lib/pages/pharmacy/order/OrderDetails.dart index 57cddeca..1be292c2 100644 --- a/lib/pages/pharmacy/order/OrderDetails.dart +++ b/lib/pages/pharmacy/order/OrderDetails.dart @@ -1,51 +1,41 @@ - import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/Order.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; -import 'package:flutter/material.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:diplomaticquarterapp/widgets//pharmacy/product_tile.dart'; -import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; -import 'package:diplomaticquarterapp/services/pharmacy_services/orderDetails_service.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; -import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; -import 'package:diplomaticquarterapp/uitl/app_toast.dart'; - - - - +import 'package:flutter/src/widgets/image.dart' as flutterImage; class OrderDetailsPage extends StatefulWidget { - - var languageID ; + var languageID; OrderModel orderModel; - OrderDetailsPage({ - @required this.orderModel -}); + + OrderDetailsPage({@required this.orderModel}); @override _OrderDetailsPageState createState() => _OrderDetailsPageState(); } class _OrderDetailsPageState extends State { - getLanguageID() async { return await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); } AppSharedPreferences sharedPref = AppSharedPreferences(); - String orderId=""; + String orderId = ""; String customerId; - List orderList = [] ; - List cancelledOrderList = []; + List orderList = []; + + List cancelledOrderList = []; + // String orderId="3516"; var model; var isCancel = false; @@ -53,11 +43,10 @@ class _OrderDetailsPageState extends State { var dataIsCancel; var dataIsRefund; - @override void initState() { super.initState(); - print(widget.orderModel.orderItems.length); + print(widget.orderModel.orderItems.length); getLanguageID(); getCancelOrder(widget.orderModel.id); // cancelOrderDetail(order) @@ -66,115 +55,139 @@ class _OrderDetailsPageState extends State { @override Widget build(BuildContext context) { return BaseView( - onModelReady:(model) => model.getOrderDetails(widget.orderModel.id), - builder: (_,model, wi )=> AppScaffold( + onModelReady: (model) => model.getOrderDetails(widget.orderModel.id), + builder: (_, model, wi) => AppScaffold( appBarTitle: TranslationBase.of(context).orderDetail, isShowAppBar: true, - isPharmacy:true , + isPharmacy: true, body: Container( color: Colors.white, child: SingleChildScrollView( child: Column( - children: [ + children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - margin: EdgeInsets.fromLTRB(10.0, 15.0, 1.0, 5.0), - child: Row( - children: [ - SvgPicture.asset( - 'assets/images/pharmacy/shipping_mark_icon.svg', - width: 28, - height: 28,), - Text(TranslationBase.of(context).shippingAddress, - style: TextStyle(fontSize: 13.0, fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - Container( - - margin: EdgeInsets.only(top: 15.0, right: 10.0), - padding: EdgeInsets.only(left: 11.0, right: 11.0), - decoration: BoxDecoration( - border: Border.all( - color: getStatusBackgroundColor(), - style: BorderStyle.solid, - width: 5.0, + children: [ + Container( + margin: EdgeInsets.fromLTRB(10.0, 15.0, 1.0, 5.0), + child: Row( + children: [ + SvgPicture.asset( + 'assets/images/pharmacy/shipping_mark_icon.svg', + width: 28, + height: 28, + ), + Text( + TranslationBase.of(context).shippingAddress, + style: TextStyle( + fontSize: 13.0, + fontWeight: FontWeight.bold, ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 15.0, right: 10.0), + padding: EdgeInsets.only(left: 11.0, right: 11.0), + decoration: BoxDecoration( + border: Border.all( color: getStatusBackgroundColor(), - borderRadius: BorderRadius.circular(30.0) - ), - child: Text( + style: BorderStyle.solid, + width: 5.0, + ), + color: getStatusBackgroundColor(), + borderRadius: BorderRadius.circular(30.0)), + child: Text( // widget.orderModel.orderStatus.toString().substring(12), - widget.languageID == "ar" - ? widget.orderModel.orderStatusn.toString() - : widget.orderModel.orderStatus.toString().substring(12) , + widget.languageID == "ar" + ? widget.orderModel.orderStatusn.toString() + : widget.orderModel.orderStatus + .toString() + .substring(12), // TranslationBase.of(context).delivered, - style: TextStyle( - color: Colors.white, - fontSize: 13.0, - fontWeight: FontWeight.bold, - ), + style: TextStyle( + color: Colors.white, + fontSize: 13.0, + fontWeight: FontWeight.bold, ), ), + ), ], ), Container( margin: EdgeInsets.only(left: 10.0, top: 13.0), child: Row( crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(widget.orderModel.shippingAddress.firstName.toString().substring(10) + ' ' +model.order[0].shippingAddress.lastName.toString().substring(9), - style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold, - ), - ), - ] - ), + children: [ + Text( + widget.orderModel.shippingAddress.firstName + .toString() + .substring(10) + + ' ' + + model.order[0].shippingAddress.lastName + .toString() + .substring(9), + style: TextStyle( + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + ), + ]), ), Container( margin: EdgeInsets.fromLTRB(11.0, 5.0, 1.0, 5.0), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(widget.orderModel.shippingAddress.address1.toString().substring(9), - style: TextStyle(fontSize: 11.0, fontWeight: FontWeight.bold, - color: Colors.grey, - ), - ), - ], + child: Text( + widget.orderModel.shippingAddress.address1 + .toString() + .substring(9), + style: TextStyle( + fontSize: 11.0, + fontWeight: FontWeight.bold, + color: Colors.grey, + ), ), ), Container( margin: EdgeInsets.fromLTRB(10.0, 5.0, 1.0, 5.0), child: Row( crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(widget.orderModel.shippingAddress.address2.toString().substring(9) - + ' ' + widget.orderModel.shippingAddress.country.toString() - + ' ' + widget.orderModel.shippingAddress.zipPostalCode.toString(), - style: TextStyle(fontSize: 10.0, fontWeight: FontWeight.bold, - color: Colors.grey, - ), - ), - ] - ), + children: [ + Text( + widget.orderModel.shippingAddress.address2 + .toString() + .substring(9) + + ' ' + + widget.orderModel.shippingAddress.country + .toString() + + ' ' + + widget.orderModel.shippingAddress.zipPostalCode + .toString(), + style: TextStyle( + fontSize: 10.0, + fontWeight: FontWeight.bold, + color: Colors.grey, + ), + ), + ]), ), Container( child: Row( - children: [ + children: [ Container( margin: EdgeInsets.fromLTRB(10.0, 5.0, 8.0, 5.0), child: SvgPicture.asset( 'assets/images/pharmacy/mobile_number_icon.svg', - height: 13,), + height: 13, + ), ), Container( margin: EdgeInsets.only(top: 5.0, bottom: 5.0), - child: Text(widget.orderModel.shippingAddress.phoneNumber.toString(), - style: TextStyle(fontSize: 15.0, + child: Text( + widget.orderModel.shippingAddress.phoneNumber + .toString(), + style: TextStyle( + fontSize: 15.0, ), ), ), @@ -189,38 +202,56 @@ class _OrderDetailsPageState extends State { endIndent: 0, ), Row( - children: [ + children: [ Container( margin: EdgeInsets.fromLTRB(10.0, 10.0, 5.0, 10.0), child: SvgPicture.asset( 'assets/images/pharmacy/shipping_truck_icon.svg', height: 20, - width: 20,), + width: 20, + ), ), Container( margin: EdgeInsets.all(10.0), - child:Text(TranslationBase.of(context).shippedMethod, - style: TextStyle(fontSize: 13.0, fontWeight: FontWeight.bold, + child: Text( + TranslationBase.of(context).shippedMethod, + style: TextStyle( + fontSize: 13.0, + fontWeight: FontWeight.bold, ), ), ), Container( - child: widget.orderModel.shippingRateComputationMethodSystemName == "Shipping.FixedOrByWeight" - ? Container( - margin: EdgeInsets.only(bottom: 10.0, top: 10.0), - child: SvgPicture.asset( - 'assets/images/pharmacy/hmg_shipping_logo.svg', - height: 25, - width: 25,), - ) - : Container( - margin: EdgeInsets.only(bottom: 10.0, top: 10.0), - child: SvgPicture.asset( - 'assets/images/pharmacy/aramex_shipping_logo.svg', - height: 25, - width: 25,), + child: flutterImage.Image.asset( + widget.orderModel + .shippingRateComputationMethodSystemName == + "Shipping.FixedOrByWeight" + ? "assets/images/pharmacy_module/payment/hmg_shipping_logo.png" + : "assets/images/pharmacy_module/payment/aramex_shipping_logo.png", + fit: BoxFit.contain, ), ), + Container( + child: widget.orderModel + .shippingRateComputationMethodSystemName == + "Shipping.FixedOrByWeight" + ? Container( + margin: EdgeInsets.only(bottom: 10.0, top: 10.0), + child: SvgPicture.asset( + 'assets/images/pharmacy_module/payment/hmg_shipping_logo.png', + height: 25, + width: 25, + ), + ) + : Container( + margin: EdgeInsets.only(bottom: 10.0, top: 10.0), + child: SvgPicture.asset( + 'assets/images/pharmacy_module/payment/aramex_shipping_logo.png', + height: 25, + width: 25, + ), + ), + ), ], ), Divider( @@ -231,25 +262,22 @@ class _OrderDetailsPageState extends State { endIndent: 0, ), Row( - children: [ - Container( - margin: EdgeInsets.fromLTRB(10.0, 10.0, 1.0, 10.0), - child: SvgPicture.asset( - 'assets/images/pharmacy/credit_card_icon.svg', - height: 20, - width: 20,), - ), + children: [ Container( margin: EdgeInsets.all(10.0), child: SvgPicture.asset( 'assets/images/pharmacy/credit_card_icon.svg', height: 20, - width: 20,), + width: 20, + ), ), Container( margin: EdgeInsets.only(bottom: 10.0, top: 10.0), - child:Text(widget.orderModel.paymentName.toString().substring(12), - style: TextStyle(fontSize: 13.0, fontWeight: FontWeight.bold, + child: Text( + widget.orderModel.paymentName.toString().substring(12), + style: TextStyle( + fontSize: 13.0, + fontWeight: FontWeight.bold, ), ), ), @@ -268,10 +296,13 @@ class _OrderDetailsPageState extends State { child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(TranslationBase.of(context).orderDetail, - style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold, - ), + Text( + TranslationBase.of(context).orderDetail, + style: TextStyle( + fontSize: 15.0, + fontWeight: FontWeight.bold, ), + ), ], ), ), @@ -279,21 +310,33 @@ class _OrderDetailsPageState extends State { scrollDirection: Axis.vertical, shrinkWrap: true, physics: ScrollPhysics(), - itemCount:widget.orderModel.orderItems.length, - itemBuilder: (context, index){ - return Container( - child: productTile(productName: widget.orderModel.orderItems[index].product.name.toString(), - productPrice: widget.orderModel.orderItems[index].product.price.toString(), - productRate: widget.orderModel.orderItems[index].product.approvedRatingSum.toDouble(), - productReviews:widget.orderModel.orderItems[index].product.approvedTotalReviews, - totalPrice: "${(widget.orderModel.orderItems[index].product.price - * widget.orderModel.orderItems[index].quantity).toStringAsFixed(2)}", - qyt: widget.orderModel.orderItems[index].quantity.toString(), - img:widget.orderModel.orderItems[index].product.images[0].src.toString(), - status: widget.orderModel.orderStatusId,), - ); - } - ), + itemCount: widget.orderModel.orderItems.length, + itemBuilder: (context, index) { + return Container( + child: productTile( + productName: widget + .orderModel.orderItems[index].product.name + .toString(), + productPrice: widget + .orderModel.orderItems[index].product.price + .toString(), + productRate: widget.orderModel.orderItems[index] + .product.approvedRatingSum + .toDouble(), + productReviews: widget.orderModel.orderItems[index] + .product.approvedTotalReviews, + totalPrice: + "${(widget.orderModel.orderItems[index].product.price * widget.orderModel.orderItems[index].quantity).toStringAsFixed(2)}", + qyt: widget.orderModel.orderItems[index].quantity + .toString(), + img: widget.orderModel.orderItems[index].product + .images[0].src + .toString(), + status: widget.orderModel.orderStatusId, + product: widget.orderModel.orderItems[index].product, + ), + ); + }), Container( padding: EdgeInsets.only(bottom: 10.0), @@ -301,19 +344,22 @@ class _OrderDetailsPageState extends State { child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(TranslationBase.of(context).orderSummary, - style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold, - ), + Text( + TranslationBase.of(context).orderSummary, + style: TextStyle( + fontSize: 15.0, + fontWeight: FontWeight.bold, ), + ), ], ), ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ + children: [ Container( padding: EdgeInsets.only(bottom: 10.0), - margin: EdgeInsets.only(top: 5.0, left: 10.0 ), + margin: EdgeInsets.only(top: 5.0, left: 10.0), child: Text( TranslationBase.of(context).subtotal, style: TextStyle( @@ -328,13 +374,17 @@ class _OrderDetailsPageState extends State { children: [ Container( margin: EdgeInsets.only(right: 5.0), - child: Text(TranslationBase.of(context).sar, - style: TextStyle(fontSize: 13.0, + child: Text( + TranslationBase.of(context).sar, + style: TextStyle( + fontSize: 13.0, ), ), ), - Text(widget.orderModel.orderSubtotalExclTax.toString(), - style: TextStyle(fontSize: 13.0, + Text( + widget.orderModel.orderSubtotalExclTax.toString(), + style: TextStyle( + fontSize: 13.0, ), ), ], @@ -344,10 +394,10 @@ class _OrderDetailsPageState extends State { ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ + children: [ Container( padding: EdgeInsets.only(bottom: 10.0), - margin: EdgeInsets.only(top: 5.0, left: 10.0 ), + margin: EdgeInsets.only(top: 5.0, left: 10.0), child: Text( TranslationBase.of(context).shipping, style: TextStyle( @@ -362,13 +412,17 @@ class _OrderDetailsPageState extends State { children: [ Container( margin: EdgeInsets.only(right: 5.0), - child: Text(TranslationBase.of(context).sar, - style: TextStyle(fontSize: 13.0, + child: Text( + TranslationBase.of(context).sar, + style: TextStyle( + fontSize: 13.0, ), ), ), - Text(widget.orderModel.orderShippingExclTax.toString(), - style: TextStyle(fontSize: 13.0, + Text( + widget.orderModel.orderShippingExclTax.toString(), + style: TextStyle( + fontSize: 13.0, ), ), ], @@ -378,10 +432,10 @@ class _OrderDetailsPageState extends State { ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ + children: [ Container( padding: EdgeInsets.only(bottom: 10.0), - margin: EdgeInsets.only(top: 5.0,left: 10.0 ), + margin: EdgeInsets.only(top: 5.0, left: 10.0), child: Text( TranslationBase.of(context).vat, style: TextStyle( @@ -396,13 +450,17 @@ class _OrderDetailsPageState extends State { children: [ Container( margin: EdgeInsets.only(right: 5.0), - child: Text(TranslationBase.of(context).sar, - style: TextStyle(fontSize: 13.0, + child: Text( + TranslationBase.of(context).sar, + style: TextStyle( + fontSize: 13.0, ), ), ), - Text(model.order[0].orderTax.toString(), - style: TextStyle(fontSize: 13.0, + Text( + model.order[0].orderTax.toString(), + style: TextStyle( + fontSize: 13.0, ), ), ], @@ -412,13 +470,14 @@ class _OrderDetailsPageState extends State { ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ + children: [ Container( - margin: EdgeInsets.only(top: 5.0,left: 10.0 ), + margin: EdgeInsets.only(top: 5.0, left: 10.0), child: Text( TranslationBase.of(context).total, style: TextStyle( - fontSize: 15.0,fontWeight: FontWeight.bold, + fontSize: 15.0, + fontWeight: FontWeight.bold, ), ), ), @@ -428,13 +487,19 @@ class _OrderDetailsPageState extends State { children: [ Container( margin: EdgeInsets.only(right: 5.0), - child: Text(TranslationBase.of(context).sar, - style: TextStyle(fontSize: 15.0,fontWeight: FontWeight.bold, + child: Text( + TranslationBase.of(context).sar, + style: TextStyle( + fontSize: 15.0, + fontWeight: FontWeight.bold, ), ), ), - Text(widget.orderModel.orderTotal.toString(), - style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold, + Text( + widget.orderModel.orderTotal.toString(), + style: TextStyle( + fontSize: 15.0, + fontWeight: FontWeight.bold, ), ), ], @@ -442,60 +507,62 @@ class _OrderDetailsPageState extends State { ), ], ), - widget.orderModel.orderStatusId == 10 ? InkWell( - onTap: () { + widget.orderModel.orderStatusId == 10 + ? InkWell( + onTap: () { // Navigator.push(context, // MaterialPageRoute(builder: (context) => InAppBrowser())); - }, - child: Container( + }, + child: Container( // margin: EdgeInsets.only(top: 20.0), - height: 50.0, - color: Colors.transparent, - child: Container( - padding: EdgeInsets.only(left: 150.0, right: 150.0), - decoration: BoxDecoration( - border: Border.all( - color: Colors.green, - style: BorderStyle.solid, - width: 1.0 - ), - color: Colors.green, - borderRadius: BorderRadius.circular(5.0) - ), - child: Center( - child: Text( - TranslationBase.of(context).payOnline, - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, + height: 50.0, + color: Colors.transparent, + child: Container( + padding: EdgeInsets.only(left: 150.0, right: 150.0), + decoration: BoxDecoration( + border: Border.all( + color: Colors.green, + style: BorderStyle.solid, + width: 1.0), + color: Colors.green, + borderRadius: BorderRadius.circular(5.0)), + child: Center( + child: Text( + TranslationBase.of(context).payOnline, + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + ), ), ), - ), - ), - ), - ) : Container(), + ) + : Container(), // getCancelOrder(canCancel, canRefund), - isCancel ? InkWell( - onTap: () { - presentConfirmDialog(model,widget.orderModel.id);//(widget.orderModel.id)); + isCancel + ? InkWell( + onTap: () { + presentConfirmDialog(model, + widget.orderModel.id); //(widget.orderModel.id)); // - }, - child: Container( + }, + child: Container( // padding: EdgeInsets.only(left: 13.0, right: 13.0, top: 5.0), - height: 50.0, - color: Colors.transparent, - child: Center( - child: Text( - TranslationBase.of(context).cancelOrder, - style: TextStyle( - color: Colors.red[900], - fontWeight: FontWeight.bold, - decoration: TextDecoration.underline + height: 50.0, + color: Colors.transparent, + child: Center( + child: Text( + TranslationBase.of(context).cancelOrder, + style: TextStyle( + color: Colors.red[900], + fontWeight: FontWeight.bold, + decoration: TextDecoration.underline), + ), + ), ), - ), - ), - ), - ) : Container(), + ) + : Container(), ], ), ), @@ -504,90 +571,80 @@ class _OrderDetailsPageState extends State { ); } - - Color getStatusBackgroundColor() { - print(widget.orderModel.orderStatusId); + print(widget.orderModel.orderStatusId); // if(orderStatus == 'delivered') - if(widget.orderModel.orderStatusId == 30 ||widget.orderModel.orderStatusId == 997 - ||widget.orderModel.orderStatusId == 994) + if (widget.orderModel.orderStatusId == 30 || + widget.orderModel.orderStatusId == 997 || + widget.orderModel.orderStatusId == 994) return Colors.blue[700]; - else if (widget.orderModel.orderStatusId == 20 ||widget.orderModel.orderStatusId == 995 - ||widget.orderModel.orderStatusId == 998 ||widget.orderModel.orderStatusId == 999) - return Colors.green; - else if (widget.orderModel.orderStatusId == 10) - return Colors.orange[300]; - else if (widget.orderModel.orderStatusId == 40 ||widget.orderModel.orderStatusId == 996 - ||widget.orderModel.orderStatusId == 200) - return Colors.red[900]; + else if (widget.orderModel.orderStatusId == 20 || + widget.orderModel.orderStatusId == 995 || + widget.orderModel.orderStatusId == 998 || + widget.orderModel.orderStatusId == 999) + return Colors.green; + else if (widget.orderModel.orderStatusId == 10) + return Colors.orange[300]; + else if (widget.orderModel.orderStatusId == 40 || + widget.orderModel.orderStatusId == 996 || + widget.orderModel.orderStatusId == 200) return Colors.red[900]; } - - getCancelOrder(dataIsCancel){ - if(widget.orderModel.canCancel && widget.orderModel.canRefund) - { - setState(() { - isCancel = true; - isRefund = false; - }); - } - else if (widget.orderModel.canCancel ){ - setState(() { - isCancel = true; - isRefund = false; - }); - - } - else if (widget.orderModel.canRefund){ - setState(() { - isCancel = false; - isRefund = true; - }); - } - else { - setState(() { - isCancel = false; - isRefund = false; - }); - } -} + getCancelOrder(dataIsCancel) { + if (widget.orderModel.canCancel && widget.orderModel.canRefund) { + setState(() { + isCancel = true; + isRefund = false; + }); + } else if (widget.orderModel.canCancel) { + setState(() { + isCancel = true; + isRefund = false; + }); + } else if (widget.orderModel.canRefund) { + setState(() { + isCancel = false; + isRefund = true; + }); + } else { + setState(() { + isCancel = false; + isRefund = false; + }); + } + } // .getCanceledOrder - presentConfirmDialog(cancelFunction, id){ + presentConfirmDialog(cancelFunction, id) { ConfirmDialog dialog = new ConfirmDialog( context: context, confirmMessage: TranslationBase.of(context).confirmCancellation, okText: TranslationBase.of(context).confirm, cancelText: TranslationBase.of(context).cancel_nocaps, - okFunction: () => cancelFunction.getCanceledOrder(id, context).then((value){ - print(":D"); - print(value); + okFunction: () => + cancelFunction.getCanceledOrder(id, context).then((value) { + print(":D"); + print(value); // Navigator.pop(context); - Navigator.push(context, - MaterialPageRoute(builder: (context) => - OrderPage(customerID: widget.orderModel.customerId.toString())), - );}), - - cancelFunction: () => {} - ); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => OrderPage( + customerID: widget.orderModel.customerId.toString())), + ); + }), + cancelFunction: () => {}); dialog.showAlertDialog(context); } - getCanceledOrder(order){ + getCanceledOrder(order) { Navigator.pop(context); - if(widget.orderModel.canCancel && widget.orderModel.canRefund == false){ + if (widget.orderModel.canCancel && widget.orderModel.canRefund == false) { // getCanceledOrder(order); // AppToast.showSuccessToast(message: "Request Sent Successfully"); // Navigator.push(context, // MaterialPageRoute(builder: (context) => OrderPage())); } - } - - } - - - - diff --git a/lib/pages/pharmacy/order/ProductReview.dart b/lib/pages/pharmacy/order/ProductReview.dart index 37ede97c..4d09191c 100644 --- a/lib/pages/pharmacy/order/ProductReview.dart +++ b/lib/pages/pharmacy/order/ProductReview.dart @@ -1,4 +1,3 @@ - import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/profile/profile.dart'; @@ -8,145 +7,133 @@ import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:intl/intl.dart'; import 'package:rating_bar/rating_bar.dart'; +import 'package:flutter/src/widgets/image.dart' as flutterImage; class ProductReviewPage extends StatefulWidget { + final Product product; + + ProductReviewPage(this.product); - OrderModel orderModel; - ProductReviewPage({ - @required this.orderModel - }); @override _ProductReviewPageState createState() => _ProductReviewPageState(); } class _ProductReviewPageState extends State { - String orderId ="3516"; - var pharmacyUser =""; - var product =""; - var CustomerId =""; - String submitTxt =""; - var doctorRating= ""; - var reviewObj = {}; - AppSharedPreferences sharedPref = AppSharedPreferences(); + double currentRating = 0; + String reviewText = ""; + TextEditingController _reviewController = new TextEditingController(); + bool finishReview = false; @override Widget build(BuildContext context) { + double ratingValue = double.parse("${widget.product.approvedRatingSum}"); return BaseView( - onModelReady: (model)=>model.getOrderDetails(widget.orderModel.id), - builder: (_,model, wi )=> AppScaffold( + builder: (_, model, wi) => AppScaffold( appBarTitle: TranslationBase.of(context).writeReview, isShowAppBar: true, - isPharmacy:true , + isPharmacy: true, body: Container( color: Colors.white, - child: SingleChildScrollView( + child: !finishReview ? SingleChildScrollView( child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - physics: ScrollPhysics(), - itemCount:widget.orderModel.orderItems.length, - itemBuilder: (context, index){ - return Container( - margin: EdgeInsets.only(top :15.0, bottom: 15.0), - child: Row( - children:[ - Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - margin: EdgeInsets.only(left: 10), - child: SvgPicture.asset( -// widget.orderModel.orderItems[index].product.images[index].src.toString(), - 'assets/images/al-habib_onlne_pharmacy_bg.png', - fit: BoxFit.cover, - width: 80, - height: 80, - ), - ), - ] - ), - ], - ), - Column( - children: [ - Row( - children: [ - Text(widget.orderModel.orderItems[index].product.name.toString(), - style: TextStyle(fontSize: 16.0, - ), + children: [ + Container( + margin: EdgeInsets.symmetric(vertical: 8, horizontal: 16), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + widget.product.images != null + ? flutterImage.Image.network( + widget.product.images[0].src, + fit: BoxFit.cover, + height: 80, + ) + : flutterImage.Image.asset( + "assets/images/no_image.png", + fit: BoxFit.cover, + height: 80, + ), + Expanded( + child: Container( + child: Column( + children: [ + Container( + margin: EdgeInsets.all(5), + child: Align( + alignment: Alignment.topLeft, + child: RichText( + text: TextSpan( + text: widget.product.name, + style: TextStyle( + color: Colors.black, + fontSize: 14, + fontWeight: FontWeight.normal), ), - ], + ), ), - Row( - children: [ - Container( - margin: EdgeInsets.only(left: 5), - child: Text(widget.orderModel.orderItems[index].product.price.toString(), - style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold, - ), - ), - ), - Container( - margin: EdgeInsets.only(left: 5), - child: Text(TranslationBase.of(context).sar, - style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold, - ), - ), + ), + Container( + margin: EdgeInsets.all(5), + child: Align( + alignment: Alignment.topLeft, + child: RichText( + text: TextSpan( + text: + '${widget.product.price} ${TranslationBase.of(context).sar}', + style: TextStyle( + fontWeight: FontWeight.bold, + color: Colors.black, + fontSize: 13), ), - ], + ), ), - Row( - children: [ - Container( - margin: EdgeInsets.all(5), - child: Align( - alignment: Alignment.topLeft, - child: RatingBar.readOnly( - initialRating: 3, - size: 15.0, - filledColor: Colors.yellow[700], - emptyColor: Colors.grey[500], - isHalfAllowed: true, - halfFilledIcon: Icons.star_half, - filledIcon: Icons.star, - emptyIcon: Icons.star, - ), - ), - ), - Container( - child: Text(widget.orderModel.orderItems[index].product.approvedRatingSum.toString(), - style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.bold, - ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + child: Align( + alignment: Alignment.topLeft, + child: RatingBar.readOnly( + initialRating: ratingValue, + size: 15.0, + filledColor: Colors.yellow[700], + emptyColor: Colors.grey[500], + isHalfAllowed: true, + halfFilledIcon: Icons.star_half, + filledIcon: Icons.star, + emptyIcon: Icons.star, ), ), - Container( - margin: EdgeInsets.only(left: 5), - child: Text("(" + widget.orderModel.orderItems[index].product.approvedTotalReviews.toString() - + ' ' + TranslationBase.of(context).review +")", - style: TextStyle(fontSize: 12.0, + ), + SizedBox( + width: 20, + ), + Container( + child: Align( + child: RichText( + text: TextSpan( + text: + '(${widget.product.approvedTotalReviews} reviews)', + style: TextStyle( + fontWeight: FontWeight.bold, + color: Colors.grey, + fontSize: 13), ), ), ), - ], - ), - ], - ), - ] + ), + ], + ), + ], ), - ); - } - ), - ]), - + ), + ), + ]), + ), Divider( color: Colors.grey[350], height: 20, @@ -155,15 +142,13 @@ class _ProductReviewPageState extends State { endIndent: 0, ), Container( - margin: EdgeInsets.only( top: 12.0), + margin: EdgeInsets.only(top: 12.0), child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisSize: MainAxisSize.max, children: [ RatingBar( - // initialRating: - // this.doctor.actualDoctorRate.toDouble(), size: 40.0, filledColor: Colors.yellow[700], emptyColor: Colors.grey[500], @@ -171,51 +156,79 @@ class _ProductReviewPageState extends State { halfFilledIcon: Icons.star_half, filledIcon: Icons.star, emptyIcon: Icons.star, + onRatingChanged: (rating) { + currentRating = rating; + }, ), ], ), ), Container( - padding: EdgeInsets.fromLTRB(8.0, 20.0, 8.0,20.0), + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16), child: Column( - children: [ - TextFormField ( + children: [ + TextFormField( + controller: _reviewController, + maxLines: 6, + minLines: 4, decoration: InputDecoration( - contentPadding: const EdgeInsets.symmetric(vertical: 60.0), border: InputBorder.none, hintText: 'Tell us more about product!', focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(5.0), - borderSide: BorderSide(width: 1, color: Colors.grey[400]), + borderSide: + BorderSide(width: 1, color: Colors.grey[400]), ), enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(5.0)), - borderSide: BorderSide(color: Colors.grey[400], width: 1), + borderRadius: + BorderRadius.all(Radius.circular(5.0)), + borderSide: + BorderSide(color: Colors.grey[400], width: 1), ), ), + onChanged: (value) { + setState(() { + reviewText = value; + }); + }, + textAlign: TextAlign.start, + textAlignVertical: TextAlignVertical.top, ), ], ), ), InkWell( - onTap: () { -// Navigator.push(context, -// MaterialPageRoute(builder: (context) => )); - }, + onTap: reviewText != null && reviewText != "" + ? () { + model + .makeReview( + widget.product, ratingValue, reviewText) + .then((value) { + setState(() { + finishReview = true; + }); + }); + } + : null, child: Container( + margin: EdgeInsets.symmetric(vertical: 8, horizontal: 16), height: 50.0, width: 400.0, color: Colors.transparent, child: Container( decoration: BoxDecoration( border: Border.all( - color: Colors.yellow[700], + color: _reviewController.value.text != null && + _reviewController.value.text != "" + ? Colors.yellow[700] + : Color(0xFFf5d69c), style: BorderStyle.solid, - width: 1.0 - ), - color: Colors.yellow[700], - borderRadius: BorderRadius.circular(5.0) - ), + width: 1.0), + color: _reviewController.value.text != null && + _reviewController.value.text != "" + ? Colors.yellow[700] + : Color(0xFFf5d69c), + borderRadius: BorderRadius.circular(5.0)), child: Center( child: Text( TranslationBase.of(context).shareReview, @@ -231,85 +244,89 @@ class _ProductReviewPageState extends State { ), ], ), - ), - ),), + ) : getReviewedProduct(), + ), + ), ); } - - - //new screen is showing after submitting the review - Widget getReviewedProduct(){ + Widget getReviewedProduct() { return Column( mainAxisAlignment: MainAxisAlignment.center, - children: [ + children: [ Row( mainAxisAlignment: MainAxisAlignment.center, - children: [ + children: [ SvgPicture.asset( 'assets/images/pharmacy/check_icon.svg', width: 28, - height: 28,), + height: 28, + ), Container( - margin: EdgeInsets.only(left: 10.0), - child: Text(TranslationBase.of(context).reviewSuccessful, - style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold, + margin: EdgeInsets.symmetric(horizontal: 8), + child: Text( + TranslationBase.of(context).reviewSuccessful, + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.bold, ), ), ), ], ), Container( - margin: EdgeInsets.only(top:5.0, bottom: 20.0 ), - child: Text(TranslationBase.of(context).reviewShared, - style: TextStyle(fontSize: 15.0, + margin: EdgeInsets.symmetric(horizontal: 8, vertical: 8), + child: Text( + TranslationBase.of(context).reviewShared, + style: TextStyle( + fontSize: 15.0, ), ), ), Container( - margin: EdgeInsets.only(bottom: 30.0, top: 30.0 ), + margin: EdgeInsets.only(bottom: 30.0, top: 30.0), child: SvgPicture.asset( 'assets/images/pharmacy/success_review_icon.svg', width: 100, - height: 100,), + height: 100, + ), ), Container( - margin: EdgeInsets.only(left: 20.0, right: 20.0), + margin: EdgeInsets.symmetric(horizontal: 16), child: Column( - children: [ + children: [ Row( mainAxisAlignment: MainAxisAlignment.start, - children: [ + children: [ SvgPicture.asset( 'assets/images/pharmacy/quote_start.svg', width: 15, - height: 15,), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text(TranslationBase.of(context).reviewComment, - style: TextStyle(fontSize: 15.0, - ), + height: 15, ), ], ), + Text( + TranslationBase.of(context).reviewComment, + style: TextStyle( + fontSize: 15.0, + ), + ), Row( mainAxisAlignment: MainAxisAlignment.end, - children: [ + children: [ SvgPicture.asset( 'assets/images/pharmacy/quote_end.svg', width: 15, - height: 15,), + height: 15, + ), ], ), ], ), ), Container( - margin: EdgeInsets.only(top: 20.0 ), + margin: EdgeInsets.only(top: 20.0), child: InkWell( onTap: () { Navigator.push( @@ -320,17 +337,16 @@ class _ProductReviewPageState extends State { ); }, child: Container( - height: 50.0, color: Colors.transparent, + height: 50.0, + color: Colors.transparent, child: Container( decoration: BoxDecoration( border: Border.all( color: Colors.orange, style: BorderStyle.solid, - width: 1.0 - ), + width: 1.0), color: Colors.transparent, - borderRadius: BorderRadius.circular(5.0) - ), + borderRadius: BorderRadius.circular(5.0)), child: Center( child: Text( TranslationBase.of(context).backMyAccount, @@ -348,23 +364,4 @@ class _ProductReviewPageState extends State { ); } -// submit(){ -// this.orderId.id = "0"; -// this.reviewObj.position = 0; -// this.reviewObj.customerId = this.pharmacyUser.CustomerId; -// this.reviewObj.productId = this.product.id; -// this.reviewObj.storeId = 2; -// this.reviewObj.isApproved = false; -// this.reviewObj.title =''; -// this.reviewObj.reviewText = this.submitTxt; -// this.reviewObj.rating = this.doctorRating; -// this.reviewObj.replyText = null; -// this.reviewObj.helpfulYesTotal = 0; -// this.reviewObj.helpfulNoTotal = 0; -// this.reviewObj.createdOnUtc = new Date().toString(); -// this.submitProductReview(); -// } - submitProductReview(){ - - } -} \ No newline at end of file +} diff --git a/lib/services/pharmacy_services/orderDetails_service.dart b/lib/services/pharmacy_services/orderDetails_service.dart index 5adbbc24..a3bb9976 100644 --- a/lib/services/pharmacy_services/orderDetails_service.dart +++ b/lib/services/pharmacy_services/orderDetails_service.dart @@ -36,4 +36,40 @@ class OrderDetailsService extends BaseService{ super.error = error; }); } + + Future makeReview(Product product, double rating, String reviewText) async { + hasError = false; + super.error = ""; + + var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID); + + + Map body = Map(); + Map reviewBody = Map(); + reviewBody["created_on_utc"] = DateTime.now().toString(); + reviewBody["customer_id"] = customerId; + reviewBody["helpful_no_total"] = 0; + reviewBody["helpful_yes_total"] = 0; + reviewBody["id"] = 0; + reviewBody["is_approved"] = false; + reviewBody["position"] = 0; + reviewBody["product_id"] = product.id; + reviewBody["rating"] = rating; + reviewBody["reply_text"] = reviewText; + reviewBody["store_id"] = 2; + reviewBody["title"] = ""; + body['review'] = reviewBody; + await baseAppClient.post("$PHARMACY_MAKE_REVIEW", + onSuccess: (response, statusCode) async { + /* + "success": { + "SuccessEndUserMsg": "Your request has been completed successfuly.", + "SuccessEndUserMsgN": "تمت العملية بنجاح" + } + */ + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: body); + } } \ No newline at end of file diff --git a/lib/widgets/pharmacy/product_tile.dart b/lib/widgets/pharmacy/product_tile.dart index b56fc625..6a31a3ab 100644 --- a/lib/widgets/pharmacy/product_tile.dart +++ b/lib/widgets/pharmacy/product_tile.dart @@ -1,3 +1,4 @@ +import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/ProductReview.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/style.dart'; @@ -5,7 +6,7 @@ import 'package:flutter_html/style.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:rating_bar/rating_bar.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; - +import 'package:flutter/src/widgets/image.dart' as flutterImage; @@ -19,11 +20,11 @@ class productTile extends StatelessWidget { final bool isOrderDetails; final String img; final int status; - + final Product product; productTile({this.productName, this.productPrice, this.productRate, this.qyt, this.totalPrice, this.productReviews, this.img, - this.isOrderDetails=true, this.status}); + this.isOrderDetails=true, this.status, this.product}); @override @@ -40,7 +41,7 @@ class productTile extends StatelessWidget { children: [ Container( margin: EdgeInsets.only(left: 10), - child: Image.network(img), + child: flutterImage.Image.network(img), // fit: BoxFit.cover, width: 80, height: 80, @@ -202,7 +203,7 @@ class productTile extends StatelessWidget { InkWell( onTap: () { Navigator.push(context, - MaterialPageRoute(builder: (context) => ProductReviewPage())); + MaterialPageRoute(builder: (context) => ProductReviewPage(product))); }, child: Container( padding: EdgeInsets.only(left: 13.0, right: 13.0, top: 5.0), diff --git a/pubspec.yaml b/pubspec.yaml index dee882e6..18a8330a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -45,7 +45,7 @@ dependencies: url_launcher: ^5.5.0 shared_preferences: ^0.5.8 flutter_flexible_toast: ^0.1.4 - firebase_messaging: ^7.0.0 + firebase_messaging: ^7.0.3 android_intent: ^0.3.7+7 # Progress bar progress_hud_v2: ^2.0.0 From 0237d71931e2598281bfbd7e6d0462a18a6ddb18 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Thu, 17 Dec 2020 09:37:30 +0200 Subject: [PATCH 3/6] make firebase-in app messaging commented to solve problem Duplicate class com.google.protobuf.WireFormat$Utf8Validation$3 found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1) --- android/app/build.gradle | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index abcdcf6f..d3e44cb9 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -72,16 +72,11 @@ flutter { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - /* implementation ("com.google.firebase:firebase-messaging:21.0.0", { - // protobuf-lite that firebase-config and Tink depends on. - exclude group: 'com.google.protobuf',module: 'protobuf-javalite' + implementation "com.google.firebase:firebase-messaging:21.0.0" +// implementation ('com.google.firebase:firebase-inappmessaging-display:19.1.2',{ +// exclude group: 'com.google.protobuf',module: 'protobuf-javalite' // exclude group: 'com.google.protobuf',module: 'protobuf-lite' - }) - implementation ('com.google.firebase:firebase-inappmessaging-display:19.1.2',{ - // protobuf-lite that firebase-config and Tink depends on. - exclude group: 'com.google.protobuf',module: 'protobuf-javalite' -// exclude group: 'com.google.protobuf',module: 'protobuf-lite' - })*/ +// }) implementation 'pub.devrel:easypermissions:0.4.0' implementation 'com.google.guava:guava:27.0.1-android' // Dependency on local binaries From fda101840ab4fa1b29431413702a42c27b678594 Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Mon, 21 Dec 2020 10:17:17 +0300 Subject: [PATCH 4/6] fixed order isuues --- assets/images/pharmacy/arrow-left-png.png | Bin 0 -> 2208 bytes assets/images/pharmacy/arrow-left.png | Bin 0 -> 2208 bytes assets/images/pharmacy/arrow-right-png.png | Bin 0 -> 2214 bytes assets/images/pharmacy/arrow.png | Bin 0 -> 2214 bytes assets/images/pharmacy/arrow_lef.png | Bin 0 -> 2214 bytes assets/images/pharmacy/arrow_left.svg | 6 + assets/images/pharmacy/terms.png | Bin 0 -> 1782 bytes lib/config/localized_values.dart | 7 +- .../order_model_view_model.dart | 35 ++++-- lib/pages/pharmacy/order/Order.dart | 118 ++++++++++++------ lib/pages/pharmacy/order/OrderDetails.dart | 36 +++--- lib/pages/pharmacy/profile/profile.dart | 103 ++++++++++++++- lib/uitl/translations_delegate_base.dart | 5 + lib/widgets/pharmacy/product_tile.dart | 31 +++-- 14 files changed, 258 insertions(+), 83 deletions(-) create mode 100644 assets/images/pharmacy/arrow-left-png.png create mode 100644 assets/images/pharmacy/arrow-left.png create mode 100644 assets/images/pharmacy/arrow-right-png.png create mode 100644 assets/images/pharmacy/arrow.png create mode 100644 assets/images/pharmacy/arrow_lef.png create mode 100644 assets/images/pharmacy/arrow_left.svg create mode 100644 assets/images/pharmacy/terms.png diff --git a/assets/images/pharmacy/arrow-left-png.png b/assets/images/pharmacy/arrow-left-png.png new file mode 100644 index 0000000000000000000000000000000000000000..18d58c8789d9d62cf07226a8667a3040ca9dc413 GIT binary patch literal 2208 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 iH)cLYqehJym85^pV00xQrb2T70000j literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy/arrow-left.png b/assets/images/pharmacy/arrow-left.png new file mode 100644 index 0000000000000000000000000000000000000000..18d58c8789d9d62cf07226a8667a3040ca9dc413 GIT binary patch literal 2208 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 iH)cLYqehJym85^pV00xQrb2T70000j literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy/arrow-right-png.png b/assets/images/pharmacy/arrow-right-png.png new file mode 100644 index 0000000000000000000000000000000000000000..19af7c0bac23d17d77e5bd6d791c729609adba9b GIT binary patch literal 2214 zcmV;X2wC@uP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+SQj^lJYnVh2OP`SwiHS?B)2Ts@cITe~wHVXrO5b z|2#}m#KCbS>pSu#H2?Wq=`S3vq>Vz9oJvX?j!;5z6*qZ19jB7Fu&(O}`y>4SR!`># z4pkndKmAQ}Z(mU#FE7ac0=Mt=Bz?D&cSHMwFN5AZJKXH;@@~kxQ$6qhsqF97a23w} z)9%*e*iMgb{|5n#5n<0ea?`Wla82gLqX)kDiqhlCo}JY&?t_oGdY>P&qx0^Q$gntYiZP}rF~<^X@+qX4Qj%nIR245lq9hT?Qlw^|LykFR$vKx? ziz^;eSS+asm0U`x6;3NmSG--(qSoe`Z=uDOnzYA9C)hZ}xi_>VM% zMjmC<$rGtG!;CXcnR%936}hHfgGNm%nzd*>tG289T{XT@?zw8bt7eLY)lM#|p<3k2 z1lx2HO*1Iw0z+{z1(49rG}|(V;7mEwY%30fB08wX(Zm^Sib26J*+u2Eb{FNI>P9iV zrJMUnIWp<~gmPrk?aJNj_CU2!*NWnoKsE}E>E;y^8yd`9U9Pq!9WLop1HT(;HR~p# zy-n2>jcQ7G*xO(YqH`qm4MEQ+fZY(ihb+FR@Wi;0I59@C7(=DV5zu?eW@;25R9Njp zJ!I4^jh;NuDI+y3kXRP#>dHqYz19$&>^!VrPMZ~wuhfRjg7mC0E6rY3q&$Cy&Nj@y@8E2nk~gGqHQC5K?5H%0xiN0<= zEuR=-2nMgL7Kg~3e#Mb2G@cfSpM4KR9nCYY&uG!(tazUmU2uI?(kl&Lp+y&5pV6Y< z#?Y&@=uvVVDe1izex^l_lIsX9dOj3ir$x_);_D?H#d}MOo)5*>Y0;|_*Kf4w)rsqa z`RF}b^y$>rSo#?OH#yvb_I>MwVb9{v0rM~kY|Li*m5EK(XnTkF-@I*jM8z< zQqiM0?4#Ry`AJDXH;5}gvTf3arN`RbAQ9S1kS)zVAp`nj;Z!R7W@k?hJtv1h4W%Vn zEjMsa`C&N-C&&)u(eeR=NDO%3+06rhSmt3TW%ur2rhupG7Kd!XkmE?G0d_FA#H;Y zScKpEMy5aXk^LVTvJX}I7h!|UJ5_~sTL1t624YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jc?^2rVWsk+Amw00PEIL_t(|+U=UlZqq;%hQGwA zDzQVN7s{=o66gp-D<~V@VxDx~p`wDq5`@kMmIx%EnV|56t5 zSTpl~Gd^=p9B9?5RjXFz${5pKmbrFHHogk%0c$`Ce6rSlj~PJOEA;}n1)KvnfS1OY z?dt^K=G^yl;AzYd$_9`vxE3{pvH^VbT)%+uFg5^5nVqR>Dk2kL({szZh@7eFaU%gZ z2m=vG9fU=v%vwwkk}5h?)uD(Cf!nb|NUG{sRYwINoQ8&wRM~j}225sO0V~#-vP#$C%|J*a|V2A><+lZ zd7f#(#m)0?tUSRW!GQ9V7nXetdB}ZNAR(@LNoO(5ye}(^dz98mnONEUw zdpYJuF5uN}z7_z^yzl>kL$~r{0;v<&{9#D*l>%4>^OXTG#ykhMbIiXktDcVzfLr-{ zp601DKPD3ON;WUR9pKM`<_tKB$$S-gzyr_q%oR2%k*SV6AX@WP0QkI2=1VV!RrQyM ooB*r9SKvcz&wQ&^ty<0MFCu`1o^i+R`v3p{07*qoM6N<$f*QIMG5`Po literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy/arrow.png b/assets/images/pharmacy/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..19af7c0bac23d17d77e5bd6d791c729609adba9b GIT binary patch literal 2214 zcmV;X2wC@uP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+SQj^lJYnVh2OP`SwiHS?B)2Ts@cITe~wHVXrO5b z|2#}m#KCbS>pSu#H2?Wq=`S3vq>Vz9oJvX?j!;5z6*qZ19jB7Fu&(O}`y>4SR!`># z4pkndKmAQ}Z(mU#FE7ac0=Mt=Bz?D&cSHMwFN5AZJKXH;@@~kxQ$6qhsqF97a23w} z)9%*e*iMgb{|5n#5n<0ea?`Wla82gLqX)kDiqhlCo}JY&?t_oGdY>P&qx0^Q$gntYiZP}rF~<^X@+qX4Qj%nIR245lq9hT?Qlw^|LykFR$vKx? ziz^;eSS+asm0U`x6;3NmSG--(qSoe`Z=uDOnzYA9C)hZ}xi_>VM% zMjmC<$rGtG!;CXcnR%936}hHfgGNm%nzd*>tG289T{XT@?zw8bt7eLY)lM#|p<3k2 z1lx2HO*1Iw0z+{z1(49rG}|(V;7mEwY%30fB08wX(Zm^Sib26J*+u2Eb{FNI>P9iV zrJMUnIWp<~gmPrk?aJNj_CU2!*NWnoKsE}E>E;y^8yd`9U9Pq!9WLop1HT(;HR~p# zy-n2>jcQ7G*xO(YqH`qm4MEQ+fZY(ihb+FR@Wi;0I59@C7(=DV5zu?eW@;25R9Njp zJ!I4^jh;NuDI+y3kXRP#>dHqYz19$&>^!VrPMZ~wuhfRjg7mC0E6rY3q&$Cy&Nj@y@8E2nk~gGqHQC5K?5H%0xiN0<= zEuR=-2nMgL7Kg~3e#Mb2G@cfSpM4KR9nCYY&uG!(tazUmU2uI?(kl&Lp+y&5pV6Y< z#?Y&@=uvVVDe1izex^l_lIsX9dOj3ir$x_);_D?H#d}MOo)5*>Y0;|_*Kf4w)rsqa z`RF}b^y$>rSo#?OH#yvb_I>MwVb9{v0rM~kY|Li*m5EK(XnTkF-@I*jM8z< zQqiM0?4#Ry`AJDXH;5}gvTf3arN`RbAQ9S1kS)zVAp`nj;Z!R7W@k?hJtv1h4W%Vn zEjMsa`C&N-C&&)u(eeR=NDO%3+06rhSmt3TW%ur2rhupG7Kd!XkmE?G0d_FA#H;Y zScKpEMy5aXk^LVTvJX}I7h!|UJ5_~sTL1t624YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jc?^2rVWsk+Amw00PEIL_t(|+U=UlZqq;%hQGwA zDzQVN7s{=o66gp-D<~V@VxDx~p`wDq5`@kMmIx%EnV|56t5 zSTpl~Gd^=p9B9?5RjXFz${5pKmbrFHHogk%0c$`Ce6rSlj~PJOEA;}n1)KvnfS1OY z?dt^K=G^yl;AzYd$_9`vxE3{pvH^VbT)%+uFg5^5nVqR>Dk2kL({szZh@7eFaU%gZ z2m=vG9fU=v%vwwkk}5h?)uD(Cf!nb|NUG{sRYwINoQ8&wRM~j}225sO0V~#-vP#$C%|J*a|V2A><+lZ zd7f#(#m)0?tUSRW!GQ9V7nXetdB}ZNAR(@LNoO(5ye}(^dz98mnONEUw zdpYJuF5uN}z7_z^yzl>kL$~r{0;v<&{9#D*l>%4>^OXTG#ykhMbIiXktDcVzfLr-{ zp601DKPD3ON;WUR9pKM`<_tKB$$S-gzyr_q%oR2%k*SV6AX@WP0QkI2=1VV!RrQyM ooB*r9SKvcz&wQ&^ty<0MFCu`1o^i+R`v3p{07*qoM6N<$f*QIMG5`Po literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy/arrow_lef.png b/assets/images/pharmacy/arrow_lef.png new file mode 100644 index 0000000000000000000000000000000000000000..19af7c0bac23d17d77e5bd6d791c729609adba9b GIT binary patch literal 2214 zcmV;X2wC@uP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+SQj^lJYnVh2OP`SwiHS?B)2Ts@cITe~wHVXrO5b z|2#}m#KCbS>pSu#H2?Wq=`S3vq>Vz9oJvX?j!;5z6*qZ19jB7Fu&(O}`y>4SR!`># z4pkndKmAQ}Z(mU#FE7ac0=Mt=Bz?D&cSHMwFN5AZJKXH;@@~kxQ$6qhsqF97a23w} z)9%*e*iMgb{|5n#5n<0ea?`Wla82gLqX)kDiqhlCo}JY&?t_oGdY>P&qx0^Q$gntYiZP}rF~<^X@+qX4Qj%nIR245lq9hT?Qlw^|LykFR$vKx? ziz^;eSS+asm0U`x6;3NmSG--(qSoe`Z=uDOnzYA9C)hZ}xi_>VM% zMjmC<$rGtG!;CXcnR%936}hHfgGNm%nzd*>tG289T{XT@?zw8bt7eLY)lM#|p<3k2 z1lx2HO*1Iw0z+{z1(49rG}|(V;7mEwY%30fB08wX(Zm^Sib26J*+u2Eb{FNI>P9iV zrJMUnIWp<~gmPrk?aJNj_CU2!*NWnoKsE}E>E;y^8yd`9U9Pq!9WLop1HT(;HR~p# zy-n2>jcQ7G*xO(YqH`qm4MEQ+fZY(ihb+FR@Wi;0I59@C7(=DV5zu?eW@;25R9Njp zJ!I4^jh;NuDI+y3kXRP#>dHqYz19$&>^!VrPMZ~wuhfRjg7mC0E6rY3q&$Cy&Nj@y@8E2nk~gGqHQC5K?5H%0xiN0<= zEuR=-2nMgL7Kg~3e#Mb2G@cfSpM4KR9nCYY&uG!(tazUmU2uI?(kl&Lp+y&5pV6Y< z#?Y&@=uvVVDe1izex^l_lIsX9dOj3ir$x_);_D?H#d}MOo)5*>Y0;|_*Kf4w)rsqa z`RF}b^y$>rSo#?OH#yvb_I>MwVb9{v0rM~kY|Li*m5EK(XnTkF-@I*jM8z< zQqiM0?4#Ry`AJDXH;5}gvTf3arN`RbAQ9S1kS)zVAp`nj;Z!R7W@k?hJtv1h4W%Vn zEjMsa`C&N-C&&)u(eeR=NDO%3+06rhSmt3TW%ur2rhupG7Kd!XkmE?G0d_FA#H;Y zScKpEMy5aXk^LVTvJX}I7h!|UJ5_~sTL1t624YJ`L;wH)0002_L%V+f000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jc?^2rVWsk+Amw00PEIL_t(|+U=UlZqq;%hQGwA zDzQVN7s{=o66gp-D<~V@VxDx~p`wDq5`@kMmIx%EnV|56t5 zSTpl~Gd^=p9B9?5RjXFz${5pKmbrFHHogk%0c$`Ce6rSlj~PJOEA;}n1)KvnfS1OY z?dt^K=G^yl;AzYd$_9`vxE3{pvH^VbT)%+uFg5^5nVqR>Dk2kL({szZh@7eFaU%gZ z2m=vG9fU=v%vwwkk}5h?)uD(Cf!nb|NUG{sRYwINoQ8&wRM~j}225sO0V~#-vP#$C%|J*a|V2A><+lZ zd7f#(#m)0?tUSRW!GQ9V7nXetdB}ZNAR(@LNoO(5ye}(^dz98mnONEUw zdpYJuF5uN}z7_z^yzl>kL$~r{0;v<&{9#D*l>%4>^OXTG#ykhMbIiXktDcVzfLr-{ zp601DKPD3ON;WUR9pKM`<_tKB$$S-gzyr_q%oR2%k*SV6AX@WP0QkI2=1VV!RrQyM ooB*r9SKvcz&wQ&^ty<0MFCu`1o^i+R`v3p{07*qoM6N<$f*QIMG5`Po literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy/arrow_left.svg b/assets/images/pharmacy/arrow_left.svg new file mode 100644 index 00000000..00fa7556 --- /dev/null +++ b/assets/images/pharmacy/arrow_left.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/pharmacy/terms.png b/assets/images/pharmacy/terms.png new file mode 100644 index 0000000000000000000000000000000000000000..76cfacab5761812815688012dadd0001543f321c GIT binary patch literal 1782 zcmb`I=Rezv0>*!d#4(zxRm6%BajYte5Sq63MeH=y5arrLuXS82aw@9jq(=Lx)jHJ* zTH3@ZYE)2^+M`BAj}fz48m=I&>yNlEp6C1S`{H@?WV^ZA!^GfX006)o9c(;K>2?}- z5#iIebx{*J1t`|T{wh#6q_hqI!fzaHu6X?h+A4GLSTdLCbqwZD$48H>K$>2XI7QNN zD-h)bcI7x~Ee32PZk^!bYPbM-tnBSJxd17cL$obbh#j6JI))J{gRWXE~hX zGbC?wye+(~p*5^j!asTYQpY?RgTW-blwANf)z?cu{KO?!HPPBa^GppS>;hMJc5a_6 zFF!Z?-WLc8l51;kzl=rh-PSFJCffvy6I0Sl4Zg$95#Q1toSZ$Up>fvrCYwflj@Jy` z)}>yS6ddw%{FQVY>2$i~@brtUr_eRY_|(D=1|wJG98z=!zX)G*lfC8!ON&Xrz>jTa zv3~Bo3sn+z>#($kGApF05h}{cWfp%7=7f{Uug`{*OcN0;6#kUB&`jc0=BD1jji@pQq?y*^Gnue<3nP-?Yx0H_dQi1AFx zuwM=-PDf4Rllq*_pwTh~^VIqd(+V~0{Lqz_aCl%eUNv6aENay~_)8xyKOIIiOKpOP^7nbED%Pt?p*WFVV(?8N#nc+@vW1m6+wKpo8hG=q-~G8Y>tYV5U~3dQ zVPbO(JuvUeC3yzQ4VlwMoacw2Kk|vMXNVR*z^I_muZ@ho#K)6mxIiVSNaJhE`Ajh(QjW)!o6HORv zbQ)uMK^i-nqOZq(mXR+I1&~Hh4uKKr!l3hjQxIkkRF2Z_(*p`W{a-qGCA;cfioG}1->^njKIm2QtfA8fD3~5jWn)- zO(t9eLb1lSypUd}uUw0~4<^)7g4r!)-`z+WZ06xRift{#X#uOSV~k5GpyHyoe*ZOs z^OtA$^Jkk#W7c@$!XMV3Ytpz?*7bnA~Rtd6c2)4-=tRp1v10EG}*B`@RToQ)!8|o$6TYdVF&-$ryY< zq%>QXd!#Xcrbw#(kZFyLk?+)yE^!w|kl}{>n!ndIeV!gq9Ar8$**lhScu6i&@u;VG zy>nJRk$ZL-XE7{;LS5$z_FEG}G=3UwQ`iSErZXg*B=9>=;jCdib8@{CLN0MHN(|-> zG%#~R-Go&L4qwm3+99&Hoe()mo-;A$78#fKl@E)&s;iE`t0f6SA`(`wb@nil2yr-6 z61q?7#AP&uS>7)RSIw%?0wY;pwv{lmbV!xBO=u&6C-$xZR49lH4oONnxZ3PdC(Rp? zobBrBvS(NSnf6__gPuO}3Es*4b5p$Dw{i3)=_bHWCH0o z^McV6S*b!+F9X-h2xJPzH&+(s1K7`_|556WoZXd<3SS7$a9utb7V805&4fPqIK`yr zIHbB}j9aHH**Err8DDtnl*6FP6u+L5d+<7vEIy_SDnNTU6-T4t$F*({vVFOgcR>z|q##rtT_<`achOH?sf$ literal 0 HcmV?d00001 diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index c52739f2..b60a0f45 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -654,9 +654,12 @@ const Map localizedValues = { "writeReview": {"en": "Write Review", "ar": " اكتب تقييمك"}, "shareReview": {"en": "SHARE REVIEW", "ar": " اكتب تقييمك"}, "review": {"en": " reviews", "ar": " تقييمات"}, + "pendingOrder": {"en": " PENDING", "ar": " معلقة"}, "deliveredOrder": {"en": " DELIVERED", "ar": " تم التوصيل"}, + "processingOrder": {"en": " PROCESSING", "ar": "قيد التنفيذ"}, + "cancelledOrder": {"en": " CANCELLED", "ar": "ملغي"}, "compare": {"en": " Compare", "ar": "مقارنه"}, - "medicationsRefill": {"en": " Medication Refill", "ar": "اعادة تعبئة الدواء"}, + "medicationsRefill": {"en": " Medication Refill", "ar": "طلب أعادة صرف"}, "myPrescription": {"en": " My Prescriptions", "ar": "وصفاتي"}, "quantity": {"en": " QTY ", "ar": "الكمية"}, "backMyAccount": { @@ -683,6 +686,8 @@ const Map localizedValues = { "cancelOrder": {"en": "CANCEL ORDER", "ar": "الغاء الطلب "}, "confirmAddress": {"en": "CONFIRM ADDRESS ", "ar": " تأكيد العنوان "}, "confirmLocation": {"en": "CONFIRM LOCATION ", "ar": " تأكيد الموقع "}, + "conditionsHMG": {"en": "Terms & Conditions ", "ar": "الشروط و الأحكام "}, + "conditions": {"en": "Terms & Conditions of Lakum", "ar": "شروط و احكام لكم"}, "confirmDeleteMsg": { "en": "Are you sure! want to delete ", "ar": "هل انت متأكد تريد الحذف " diff --git a/lib/core/viewModels/pharmacyModule/order_model_view_model.dart b/lib/core/viewModels/pharmacyModule/order_model_view_model.dart index f3262ba3..3ee6d0cf 100644 --- a/lib/core/viewModels/pharmacyModule/order_model_view_model.dart +++ b/lib/core/viewModels/pharmacyModule/order_model_view_model.dart @@ -1,5 +1,10 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/LacumAccountInformation.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/ShoppingCartResponse.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart'; +import 'package:diplomaticquarterapp/core/service/parmacyModule/order-preview-service.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/Order.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/OrderDetails.dart'; import 'package:diplomaticquarterapp/services/pharmacy_services/cancelOrder_service.dart'; @@ -23,6 +28,14 @@ class OrderModelViewModel extends BaseViewModel { List get cancelOrder => _cancelOrderService.cancelOrderList; + OrderPreviewService _orderServices = locator(); + List get addresses => _orderServices.addresses; + LacumAccountInformation get lacumInformation => + _orderServices.lacumInformation; + ShoppingCartResponse cartResponse = ShoppingCartResponse(); + PaymentCheckoutData paymentCheckoutData = PaymentCheckoutData(); + double totalAdditionalShippingCharge = 0; + Future getOrder(customerId, pageID) async { @@ -50,17 +63,6 @@ class OrderModelViewModel extends BaseViewModel { } } - Future getProductReview() async { - setState(ViewState.Busy); - await _orderService.getProductReview(); - if (_orderService.hasError) { - error = _orderService.error; - setState(ViewState.Error); - } else { - //order = _orderService.orderList; - setState(ViewState.Idle); - } - } Future getCanceledOrder(order, context) async { print("this is order id"+ order); @@ -89,4 +91,15 @@ class OrderModelViewModel extends BaseViewModel { } + Future makeOrder() async { + setState(ViewState.Busy); + await _orderServices.makeOrder(paymentCheckoutData, cartResponse.shoppingCarts); + if (_orderServices.hasError) { + error = _orderServices.error; + setState(ViewState.Error); + } else { + setState(ViewState.Idle); + } + } + } \ No newline at end of file diff --git a/lib/pages/pharmacy/order/Order.dart b/lib/pages/pharmacy/order/Order.dart index f153dd35..576bf2a0 100644 --- a/lib/pages/pharmacy/order/Order.dart +++ b/lib/pages/pharmacy/order/Order.dart @@ -1,6 +1,5 @@ import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; -import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; @@ -11,12 +10,13 @@ import 'package:diplomaticquarterapp/services/pharmacy_services/order_service.da import 'package:diplomaticquarterapp/pages/pharmacy/order/OrderDetails.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +import 'package:diplomaticquarterapp/pages/base/base_view.dart'; - +dynamic languageID; class OrderPage extends StatefulWidget { // orderList({this.customerId, this.pageId}); - var languageID ; + String customerID; OrderPage({@required this.customerID}); @@ -38,9 +38,9 @@ class _OrderPageState extends State with SingleTickerProviderStateMix List pendingOrderList = []; TabController _tabController; - AppSharedPreferences sharedPref = AppSharedPreferences(); +// AppSharedPreferences sharedPref = AppSharedPreferences(); getLanguageID() async { - return await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); + languageID = await sharedPref.getString(APP_LANGUAGE); } @override @@ -48,6 +48,7 @@ class _OrderPageState extends State with SingleTickerProviderStateMix getLanguageID(); super.initState(); + _tabController = new TabController(length: 4, vsync: this,); } @@ -179,7 +180,9 @@ class _OrderPageState extends State with SingleTickerProviderStateMix MaterialPageRoute(builder: (context) => OrderDetailsPage(orderModel:deliveredOrderList[index]))); }, child: SvgPicture.asset( - 'assets/images/pharmacy/arrow_right.svg', + languageID == "ar" + ? 'assets/images/pharmacy/arrow_left.svg' + :'assets/images/pharmacy/arrow_right.svg', height: 20, width: 20,), ), @@ -219,7 +222,9 @@ class _OrderPageState extends State with SingleTickerProviderStateMix ), ) : Text( - deliveredOrderList[index].orderStatus.toString().substring(12), + languageID == "ar" + ? deliveredOrderList[index].orderStatusn.toString(): + deliveredOrderList[index].orderStatus.toString(), style: TextStyle( color: Colors.white, fontSize: 15.0, @@ -388,7 +393,9 @@ class _OrderPageState extends State with SingleTickerProviderStateMix MaterialPageRoute(builder: (context) => OrderDetailsPage(orderModel:processingOrderList[index]))); }, child: SvgPicture.asset( - 'assets/images/pharmacy/arrow_right.svg', + languageID == "ar" + ? 'assets/images/pharmacy/arrow_left.svg' + :'assets/images/pharmacy/arrow_right.svg', height: 20, width: 20,), ), @@ -417,14 +424,26 @@ class _OrderPageState extends State with SingleTickerProviderStateMix color: Colors.green, borderRadius: BorderRadius.circular(30.0) ), - child: Text( - processingOrderList[index].orderStatus.toString().substring(12), - style: TextStyle( - color: Colors.white, - fontSize: 15.0, - fontWeight: FontWeight.bold, - ), - ), + child: processingOrderList[index].orderStatusId == 20 + ? Text( +// deliveredOrderList[0].orderStatus.toString().substring(12), + TranslationBase.of(context).processingOrder, + style: TextStyle( + color: Colors.white, + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + ) + : Text( + languageID == "ar" + ? processingOrderList[index].orderStatusn.toString(): + processingOrderList[index].orderStatus.toString(), + style: TextStyle( + color: Colors.white, + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + ) ), Container( margin: EdgeInsets.only(left: 8, right: 8, top: 1, bottom: 8), @@ -765,7 +784,9 @@ class _OrderPageState extends State with SingleTickerProviderStateMix MaterialPageRoute(builder: (context) => OrderDetailsPage(orderModel:pendingOrderList[index]))); }, child: SvgPicture.asset( - 'assets/images/pharmacy/arrow_right.svg', + languageID == "ar" + ? 'assets/images/pharmacy/arrow_left.svg' + :'assets/images/pharmacy/arrow_right.svg', height: 20, width: 20,), ), @@ -794,16 +815,26 @@ class _OrderPageState extends State with SingleTickerProviderStateMix color: Colors.orange[300], borderRadius: BorderRadius.circular(30.0) ), - child: Text( - widget.languageID == "ar" - ? pendingOrderList[index].orderStatusn.toString() - : pendingOrderList[index].orderStatus.toString().substring(12), - style: TextStyle( - color: Colors.white, - fontSize: 15.0, - fontWeight: FontWeight.bold, - ), - ), + child: pendingOrderList[index].orderStatusId == 10 + ? Text( +// deliveredOrderList[0].orderStatus.toString().substring(12), + TranslationBase.of(context).pendingOrder, + style: TextStyle( + color: Colors.white, + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + ) + : Text( + languageID == "ar" + ? pendingOrderList[index].orderStatusn.toString(): + pendingOrderList[index].orderStatus.toString(), + style: TextStyle( + color: Colors.white, + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + ) ), Container( margin: EdgeInsets.all(8.0), @@ -969,7 +1000,9 @@ class _OrderPageState extends State with SingleTickerProviderStateMix MaterialPageRoute(builder: (context) => OrderDetailsPage(orderModel:cancelledOrderList[index]))); }, child: SvgPicture.asset( - 'assets/images/pharmacy/arrow_right.svg', + languageID == "ar" + ? 'assets/images/pharmacy/arrow_left.svg' + :'assets/images/pharmacy/arrow_right.svg', height: 20, width: 20,), ), @@ -998,15 +1031,26 @@ class _OrderPageState extends State with SingleTickerProviderStateMix color: Colors.red[900], borderRadius: BorderRadius.circular(30.0) ), - child: Text( widget.languageID == "ar" - ? cancelledOrderList[index].orderStatusn.toString() - : cancelledOrderList[index].orderStatus.toString().substring(12), - style: TextStyle( - color: Colors.white, - fontSize: 15.0, - fontWeight: FontWeight.bold, - ), - ), + child: cancelledOrderList[index].orderStatusId == 40 + ? Text( +// deliveredOrderList[0].orderStatus.toString().substring(12), + TranslationBase.of(context).cancelledOrder, + style: TextStyle( + color: Colors.white, + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + ) + : Text( + languageID == "ar" + ? cancelledOrderList[index].orderStatusn.toString(): + cancelledOrderList[index].orderStatus.toString(), + style: TextStyle( + color: Colors.white, + fontSize: 15.0, + fontWeight: FontWeight.bold, + ), + ) ), Container( margin: EdgeInsets.only(left: 8, right: 8, top: 1, bottom: 8), diff --git a/lib/pages/pharmacy/order/OrderDetails.dart b/lib/pages/pharmacy/order/OrderDetails.dart index 57cddeca..b7d92543 100644 --- a/lib/pages/pharmacy/order/OrderDetails.dart +++ b/lib/pages/pharmacy/order/OrderDetails.dart @@ -2,11 +2,11 @@ import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/Order.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:diplomaticquarterapp/widgets//pharmacy/product_tile.dart'; import 'package:diplomaticquarterapp/config/config.dart'; @@ -16,15 +16,14 @@ import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:provider/provider.dart'; - +dynamic languageID; class OrderDetailsPage extends StatefulWidget { - var languageID ; - OrderModel orderModel; OrderDetailsPage({ @required this.orderModel @@ -37,12 +36,11 @@ class OrderDetailsPage extends StatefulWidget { class _OrderDetailsPageState extends State { getLanguageID() async { - return await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); + languageID = await sharedPref.getString(APP_LANGUAGE); } - AppSharedPreferences sharedPref = AppSharedPreferences(); +// AppSharedPreferences sharedPref = AppSharedPreferences(); String orderId=""; - String customerId; List orderList = [] ; List cancelledOrderList = []; @@ -56,9 +54,9 @@ class _OrderDetailsPageState extends State { @override void initState() { + getLanguageID(); super.initState(); print(widget.orderModel.orderItems.length); - getLanguageID(); getCancelOrder(widget.orderModel.id); // cancelOrderDetail(order) } @@ -109,9 +107,9 @@ class _OrderDetailsPageState extends State { ), child: Text( // widget.orderModel.orderStatus.toString().substring(12), - widget.languageID == "ar" - ? widget.orderModel.orderStatusn.toString() - : widget.orderModel.orderStatus.toString().substring(12) , +// languageID == "ar" +// ? widget.orderModel.orderStatusn.toString(): + widget.orderModel.orderStatus.toString().substring(12) , // TranslationBase.of(context).delivered, style: TextStyle( color: Colors.white, @@ -140,7 +138,7 @@ class _OrderDetailsPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(widget.orderModel.shippingAddress.address1.toString().substring(9), - style: TextStyle(fontSize: 11.0, fontWeight: FontWeight.bold, + style: TextStyle(fontSize: 10.0, fontWeight: FontWeight.bold, color: Colors.grey, ), ), @@ -289,7 +287,10 @@ class _OrderDetailsPageState extends State { totalPrice: "${(widget.orderModel.orderItems[index].product.price * widget.orderModel.orderItems[index].quantity).toStringAsFixed(2)}", qyt: widget.orderModel.orderItems[index].quantity.toString(), - img:widget.orderModel.orderItems[index].product.images[0].src.toString(), + imgs: widget.orderModel.orderItems[index].product.images != null && + widget.orderModel.orderItems[index].product.images.length != 0 + ? widget.orderModel.orderItems[index].product.images [0].src.toString() + : null, status: widget.orderModel.orderStatusId,), ); } @@ -444,20 +445,19 @@ class _OrderDetailsPageState extends State { ), widget.orderModel.orderStatusId == 10 ? InkWell( onTap: () { -// Navigator.push(context, -// MaterialPageRoute(builder: (context) => InAppBrowser())); + model.makeOrder(); }, child: Container( // margin: EdgeInsets.only(top: 20.0), height: 50.0, color: Colors.transparent, child: Container( - padding: EdgeInsets.only(left: 150.0, right: 150.0), + padding: EdgeInsets.only(left: 130.0, right: 130.0), decoration: BoxDecoration( border: Border.all( color: Colors.green, style: BorderStyle.solid, - width: 1.0 + width: 4.0 ), color: Colors.green, borderRadius: BorderRadius.circular(5.0) @@ -584,9 +584,9 @@ class _OrderDetailsPageState extends State { } } +} -} diff --git a/lib/pages/pharmacy/profile/profile.dart b/lib/pages/pharmacy/profile/profile.dart index e52d059b..eccf9e6a 100644 --- a/lib/pages/pharmacy/profile/profile.dart +++ b/lib/pages/pharmacy/profile/profile.dart @@ -3,35 +3,45 @@ import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.da import 'package:diplomaticquarterapp/pages/ContactUs/LiveChat/livechat_page.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/findus/findus_page.dart'; import 'package:diplomaticquarterapp/pages/DrawerPages/family/my-family.dart'; +import 'package:diplomaticquarterapp/pages/login/welcome.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/lakum-main-page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/lakum-terms-conditions-page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/pharmacy-terms-conditions-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/wishlist.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/Order.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart'; -import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:diplomaticquarterapp/pages/base/base_view.dart'; + +dynamic languageID ; class PharmacyProfilePage extends StatefulWidget { @override _ProfilePageState createState() => _ProfilePageState(); } class _ProfilePageState extends State { - AppSharedPreferences sharedPref = AppSharedPreferences(); + AuthenticatedUser user; bool isLogin = false; String firstName; String customerId; + String lastName, mobileNo, identificationNo; + int languageId; + _ProfilePageState({this.customerId}); + getLanguageID() async { + languageID = await sharedPref.getString(APP_LANGUAGE); + } getCustomer() async { String custID; custID = await sharedPref.getString(PHARMACY_CUSTOMER_ID); - setState(() { customerId = custID; }); @@ -41,15 +51,26 @@ class _ProfilePageState extends State { getUser() async { var userData = await sharedPref.getObject(USER_PROFILE); - if (userData != null) user = AuthenticatedUser.fromJson(userData); + if (userData != null){ user = AuthenticatedUser.fromJson(userData); setState(() { firstName = user.firstName.toString(); print("this is user" + user.firstName.toString()); + print("this is user" + user.firstNameN.toString()); }); -// this.isLogin = user != null; + } else{ + if(userData == null){ + Navigator.push(context, + MaterialPageRoute(builder: (context) => + WelcomeLogin()), + ); + } + } + +// this.isLogin = user != null; } void initState() { getCustomer(); + getLanguageID(); super.initState(); getUser(); } @@ -97,7 +118,9 @@ class _ProfilePageState extends State { color: Colors.grey), ), Text( - user.firstName.toString()+ " " + user.lastName.toString(), + languageID == "ar" + ? user.firstNameN.toString()+ " " + user.lastNameN.toString() + : user.firstName.toString()+ " " + user.lastName.toString(), style: TextStyle( fontSize: 14.0, fontWeight: FontWeight.bold), ), @@ -417,6 +440,74 @@ class _ProfilePageState extends State { ], ), ), + SizedBox( + height: 5, + ), + Divider( + color: Colors.grey, + height: 20, + ), + InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => PharmacyTermsConditions())); + }, + child: Row( + children: [ + Image.asset('assets/images/pharmacy/terms.png', + width: 25, + height: 25, + ), + + SizedBox( + width: 10, + ), + Text( + TranslationBase.of(context).conditionsHMG, + style: TextStyle( + fontSize: 13.0, + ), + ), + ], + ), + ), + SizedBox( + height: 5, + ), + Divider( + color: Colors.grey, + height: 20, + ), + InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => LakumTermsConditions(this.identificationNo, this.firstName, this.lastName, + this.mobileNo, this.languageId))); + }, + child: Row( + children: [ + Image.asset('assets/images/pharmacy/terms.png', + width: 25, + height: 25, + ), +// IconButton(icon: Icon(Icons.error_outline), iconSize: 30, +// color: Colors.black,), + SizedBox( + width: 10, + ), + Text( + TranslationBase.of(context).conditions, + style: TextStyle( + fontSize: 13.0, + ), + ), + ], + ), + ), ], ), ), diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index d10cb542..f60d010f 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -770,10 +770,15 @@ class TranslationBase { String get noOrder => localizedValues['noOrder'][locale.languageCode]; String get review => localizedValues['review'][locale.languageCode]; String get deliveredOrder => localizedValues['deliveredOrder'][locale.languageCode]; + String get pendingOrder => localizedValues['pendingOrder'][locale.languageCode]; + String get processingOrder => localizedValues['processingOrder'][locale.languageCode]; + String get cancelledOrder => localizedValues['cancelledOrder'][locale.languageCode]; String get compare => localizedValues['compare'][locale.languageCode]; String get medicationsRefill => localizedValues['medicationsRefill'][locale.languageCode]; String get myPrescription => localizedValues['myPrescription'][locale.languageCode]; String get quantity => localizedValues['quantity'][locale.languageCode]; + String get conditionsHMG => localizedValues['conditionsHMG'][locale.languageCode]; + String get conditions => localizedValues['conditions'][locale.languageCode]; // pharmacy module diff --git a/lib/widgets/pharmacy/product_tile.dart b/lib/widgets/pharmacy/product_tile.dart index b56fc625..bdb45cb3 100644 --- a/lib/widgets/pharmacy/product_tile.dart +++ b/lib/widgets/pharmacy/product_tile.dart @@ -1,14 +1,14 @@ -import 'package:diplomaticquarterapp/pages/pharmacy/order/ProductReview.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_html/style.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:rating_bar/rating_bar.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/pages/pharmacy/order/ProductReview.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:rating_bar/rating_bar.dart'; + class productTile extends StatelessWidget { final String productName; final String productPrice; @@ -18,12 +18,13 @@ class productTile extends StatelessWidget { final String totalPrice; final bool isOrderDetails; final String img; + final String imgs; final int status; productTile({this.productName, this.productPrice, this.productRate, this.qyt, this.totalPrice, this.productReviews, this.img, - this.isOrderDetails=true, this.status}); + this.isOrderDetails=true, this.status, this.imgs}); @override @@ -38,13 +39,23 @@ class productTile extends StatelessWidget { children: [ Row( children: [ - Container( + this.imgs != null && this.imgs.length > 0 + ? Container( margin: EdgeInsets.only(left: 10), - child: Image.network(img), + child: Image.network(imgs), // fit: BoxFit.cover, width: 80, height: 80, - ), + ) + : Container( + margin: EdgeInsets.only(left: 10), + child: Image.asset( + "assets/images/no_image.png", + width: 80, + height: 80, + ) +// fit: BoxFit.cover, + ), Expanded( flex: 5, child: Column( From 5fa5e9b7c847029212d7357e8f860c39caf92d38 Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Tue, 29 Dec 2020 11:47:52 +0300 Subject: [PATCH 5/6] fixed orders and profile --- assets/images/pharmacy/Logo Parmacy-green.png | Bin 0 -> 38549 bytes .../pharmacy/hmg_shipping_greenlogo.svg | 25 +++++ .../payment/LogoParmacyGreen.png | Bin 0 -> 38549 bytes lib/pages/pharmacy/order/OrderDetails.dart | 89 +++++++++--------- 4 files changed, 69 insertions(+), 45 deletions(-) create mode 100644 assets/images/pharmacy/Logo Parmacy-green.png create mode 100644 assets/images/pharmacy/hmg_shipping_greenlogo.svg create mode 100644 assets/images/pharmacy_module/payment/LogoParmacyGreen.png diff --git a/assets/images/pharmacy/Logo Parmacy-green.png b/assets/images/pharmacy/Logo Parmacy-green.png new file mode 100644 index 0000000000000000000000000000000000000000..72862b330df17999c5094e379a72e46bb0c558ff GIT binary patch literal 38549 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 + + diff --git a/assets/images/pharmacy_module/payment/LogoParmacyGreen.png b/assets/images/pharmacy_module/payment/LogoParmacyGreen.png new file mode 100644 index 0000000000000000000000000000000000000000..72862b330df17999c5094e379a72e46bb0c558ff GIT binary patch literal 38549 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 { getLanguageID(); super.initState(); print(widget.orderModel.orderItems.length); - getLanguageID(); - print(widget.orderModel.orderItems.length); getCancelOrder(widget.orderModel.id); // cancelOrderDetail(order) } @@ -110,9 +105,8 @@ class _OrderDetailsPageState extends State { color: getStatusBackgroundColor(), borderRadius: BorderRadius.circular(30.0)), child: Text( -// widget.orderModel.orderStatus.toString().substring(12), -// languageID == "ar" -// ? widget.orderModel.orderStatusn.toString(): + languageID == "ar" + ? widget.orderModel.orderStatusn.toString(): widget.orderModel.orderStatus.toString().substring(12) , // TranslationBase.of(context).delivered, style: TextStyle( @@ -134,7 +128,7 @@ class _OrderDetailsPageState extends State { .toString() .substring(10) + ' ' + - model.order[0].shippingAddress.lastName + widget.orderModel.shippingAddress.lastName .toString() .substring(9), style: TextStyle( @@ -145,16 +139,20 @@ class _OrderDetailsPageState extends State { ]), ), Container( - margin: EdgeInsets.fromLTRB(11.0, 5.0, 1.0, 5.0), - child: Text( - widget.orderModel.shippingAddress.address1 - .toString() - .substring(9), - style: TextStyle( - fontSize: 10.0, - fontWeight: FontWeight.bold, - color: Colors.grey, - ), + margin: EdgeInsets.fromLTRB(10.0, 5.0, 1.0, 5.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.orderModel.shippingAddress.address1 + .toString() + .substring(9), + style: TextStyle( + fontSize: 10.0, + fontWeight: FontWeight.bold, + color: Colors.grey, + ), + ),] ), ), Container( @@ -232,35 +230,36 @@ class _OrderDetailsPageState extends State { ), Container( child: flutterImage.Image.asset( - widget.orderModel - .shippingRateComputationMethodSystemName == - "Shipping.FixedOrByWeight" - ? "assets/images/pharmacy_module/payment/hmg_shipping_logo.png" + widget.orderModel.shippingRateComputationMethodSystemName != + "Shipping.Aramex" + ? "assets/images/pharmacy_module/payment/LogoParmacyGreen.png" : "assets/images/pharmacy_module/payment/aramex_shipping_logo.png", fit: BoxFit.contain, +// height: 100, + width: 100, ), ), - Container( - child: widget.orderModel - .shippingRateComputationMethodSystemName == - "Shipping.FixedOrByWeight" - ? Container( - margin: EdgeInsets.only(bottom: 10.0, top: 10.0), - child: SvgPicture.asset( - 'assets/images/pharmacy_module/payment/hmg_shipping_logo.png', - height: 25, - width: 25, - ), - ) - : Container( - margin: EdgeInsets.only(bottom: 10.0, top: 10.0), - child: SvgPicture.asset( - 'assets/images/pharmacy_module/payment/aramex_shipping_logo.png', - height: 25, - width: 25, - ), - ), - ), +// Container( +// child: widget.orderModel +// .shippingRateComputationMethodSystemName == +// "Shipping.FixedOrByWeight" +// ? Container( +// margin: EdgeInsets.only(bottom: 10.0, top: 10.0), +// child: SvgPicture.asset( +// 'assets/images/pharmacy_module/payment/hmg_shipping_logo.png', +// height: 25, +// width: 25, +// ), +// ) +// : Container( +// margin: EdgeInsets.only(bottom: 10.0, top: 10.0), +// child: SvgPicture.asset( +// 'assets/images/pharmacy_module/payment/aramex_shipping_logo.png', +// height: 25, +// width: 25, +// ), +// ), +// ), ], ), Divider( @@ -459,7 +458,7 @@ class _OrderDetailsPageState extends State { ), ), Text( - model.order[0].orderTax.toString(), + widget.orderModel.orderTax.toString(), style: TextStyle( fontSize: 13.0, ), From c82f01cd1ab4d80ad16cb4a2f5d3630c19dfed9a Mon Sep 17 00:00:00 2001 From: Mohammad Aljammal Date: Thu, 7 Jan 2021 18:15:34 +0200 Subject: [PATCH 6/6] fix merge issues --- lib/config/config.dart | 2 +- lib/config/localized_values.dart | 4 ---- lib/pages/pharmacy/profile/profile.dart | 8 +++++--- lib/uitl/translations_delegate_base.dart | 1 - 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index c3bf38fd..af925ed1 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -6,7 +6,7 @@ import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; const MAX_SMALL_SCREEN = 660; -const BASE_URL = 'https://hmgwebservices.com/'; +const BASE_URL = 'https://uat.hmgwebservices.com/'; //const BASE_PHARMACY_URL = 'http://swd-pharapp-01:7200/api/'; const BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; const PHARMACY_BASE_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 2f13293b..dea5dd5d 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1194,10 +1194,6 @@ const Map localizedValues = { "ar":"التوفر" }, - "quantity":{ - "en":"Quantity", - "ar":"التوفر" - }, "quantitySize":{ "en":"Quantity", "ar":"كميه" diff --git a/lib/pages/pharmacy/profile/profile.dart b/lib/pages/pharmacy/profile/profile.dart index 3fa7440c..6e2f2a7c 100644 --- a/lib/pages/pharmacy/profile/profile.dart +++ b/lib/pages/pharmacy/profile/profile.dart @@ -14,6 +14,7 @@ import 'package:diplomaticquarterapp/pages/pharmacy/order/Order.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/avatar/large_avatar.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -33,7 +34,8 @@ class PharmacyProfilePage extends StatefulWidget { } class _ProfilePageState extends State { - + AppSharedPreferences sharedPref = AppSharedPreferences(); + String page_id = ""; AuthenticatedUser user; bool isLogin = false; @@ -129,7 +131,7 @@ class _ProfilePageState extends State { ), ], ), - ], + ) ], ), @@ -615,7 +617,7 @@ class _ProfilePageState extends State { ), ), ), - ); + )); }} diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 5e33f54f..65be2d3e 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -1083,7 +1083,6 @@ class TranslationBase { String get specification => localizedValues['specification'][locale.languageCode]; String get details => localizedValues['details'][locale.languageCode]; String get availability => localizedValues['availability'][locale.languageCode]; - String get quantity => localizedValues['quantity'][locale.languageCode]; String get quantitySize => localizedValues['quantitySize'][locale.languageCode]; String get addToCart => localizedValues['addToCart'][locale.languageCode]; String get buyNow => localizedValues['buyNow'][locale.languageCode];