diff --git a/lib/config/config.dart b/lib/config/config.dart index 200e5776..694cb602 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -15,8 +15,8 @@ const PACKAGES_CUSTOMER = '/api/customers'; const PACKAGES_SHOPPING_CART = '/api/shopping_cart_items'; const PACKAGES_ORDERS = '/api/orders'; const PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara'; -const BASE_URL = 'https://uat.hmgwebservices.com/'; -// const BASE_URL = 'https://hmgwebservices.com/'; +// const BASE_URL = 'https://uat.hmgwebservices.com/'; +const BASE_URL = 'https://hmgwebservices.com/'; // Pharmacy UAT URLs // const BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; diff --git a/lib/pages/pharmacies/screens/cart-page/cart-order-page.dart b/lib/pages/pharmacies/screens/cart-page/cart-order-page.dart index 9c6fa42e..3b7d080f 100644 --- a/lib/pages/pharmacies/screens/cart-page/cart-order-page.dart +++ b/lib/pages/pharmacies/screens/cart-page/cart-order-page.dart @@ -6,6 +6,7 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/pharmacy-terms-conditions-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderItem.dart'; +import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; @@ -22,7 +23,6 @@ import 'package:provider/provider.dart'; import 'cart-order-preview.dart'; class CartOrderPage extends StatefulWidget { - final Function(int) changeTab; const CartOrderPage({Key key, this.changeTab}) : super(key: key); @@ -38,7 +38,6 @@ class _CartOrderPageState extends State { void initState() { super.initState(); getData(); - } @override @@ -105,8 +104,8 @@ class _CartOrderPageState extends State { .shoppingCarts[index]) .then((value) { if (model.state != ViewState.Error) { - // appScaffold.appBar.badgeUpdater( - // '${value.quantityCount ?? 0}'); + // appScaffold.appBar.badgeUpdater( + // '${value.quantityCount ?? 0}'); } if (model.state == ViewState.ErrorLocal) { @@ -250,7 +249,7 @@ class _CartOrderPageState extends State { ? height * 0.15 : 0, color: Colors.white, - child: OrderBottomWidget(model.addresses, height), + child: OrderBottomWidget(model.addresses, height, model), ), ), ); @@ -268,8 +267,9 @@ class _CartOrderPageState extends State { class OrderBottomWidget extends StatefulWidget { final List addresses; final double height; + final OrderPreviewViewModel model; - OrderBottomWidget(this.addresses, this.height); + OrderBottomWidget(this.addresses, this.height, this.model); @override _OrderBottomWidgetState createState() => _OrderBottomWidgetState(); @@ -281,9 +281,10 @@ class _OrderBottomWidgetState extends State { @override Widget build(BuildContext context) { ProjectViewModel projectProvider = Provider.of(context); - OrderPreviewViewModel cart = Provider.of(context); - return !(cart.cartResponse.shoppingCarts == null || - cart.cartResponse.shoppingCarts.length == 0) + OrderPreviewViewModel model = Provider.of(context); + + return !(model.cartResponse.shoppingCarts == null || + model.cartResponse.shoppingCarts.length == 0) ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -373,7 +374,7 @@ class _OrderBottomWidgetState extends State { child: Row( children: [ Texts( - "${TranslationBase.of(context).sar} ${(cart.cartResponse.subtotalWithVat).toStringAsFixed(2)}", + "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotalWithVat).toStringAsFixed(2)}", fontSize: projectProvider.isArabic ? 12 : 14, fontWeight: FontWeight.bold, ), @@ -391,7 +392,7 @@ class _OrderBottomWidgetState extends State { ), ), Texts( - "${cart.cartResponse.quantityCount} ${TranslationBase.of(context).items}", + "${model.cartResponse.quantityCount} ${TranslationBase.of(context).items}", fontSize: 10, color: Colors.grey, fontWeight: FontWeight.bold, @@ -403,50 +404,36 @@ class _OrderBottomWidgetState extends State { onPressed: isAgree // && cart.cartResponse.shoppingCarts[1].product.stockQuantity ==0 ? () => { - if(cart.isCartItemsOutOfStock()){ - // Toast msg - AppToast.showErrorToast(message: TranslationBase.of(context).outOfStockMsg) - }else { - Navigator.push( - context, - FadePage( - page: - OrderPreviewPage(widget.addresses))) - } - } + if (model + .isCartItemsOutOfStock()) + { + // Toast msg + AppToast.showErrorToast( + message: TranslationBase.of(context) + .outOfStockMsg) + } + else + { + _navigateToAddressPage(model + .user.patientIdentificationNo) + // Navigator.push( + // context, + // FadePage( + // page: + // OrderPreviewPage(widget.addresses))) + } + } : null, child: new Text( "${TranslationBase.of(context).checkOut}", style: new TextStyle( color: - isAgree ? Colors.white : Colors.grey.shade300, + isAgree ? Colors.white : Colors.grey.shade300, fontSize: 14), ), color: Color(0xFF4CAF50), - disabledColor:Color(0xFF848484), -// disabledColor: Color(0xff005aff), + disabledColor: Color(0xFF848484), ) -// RaisedButton( -// onPressed: isAgree -//// && cart.cartResponse.shoppingCarts[1].product.stockQuantity ==0 -// ? () => { -// Navigator.push( -// context, -// FadePage( -// page: -// OrderPreviewPage(widget.addresses))) -// } -// : null, -// child: new Text( -// "${TranslationBase.of(context).checkOut}", -// style: new TextStyle( -// color: -// isAgree ? Colors.white : Colors.grey.shade300, -// fontSize: 14), -// ), -// color: Color(0xff005aff), -// disabledColor: Color(0xff005aff), -// ) ], ), ), @@ -454,4 +441,19 @@ class _OrderBottomWidgetState extends State { ) : Container(); } + + _navigateToAddressPage(String identificationNo) { + Navigator.push(context, FadePage(page: PharmacyAddressesPage(orderPreviewViewModel: widget.model,))) + .then((result) async { + if (result != null) { + GifLoaderDialogUtils.showMyDialog(context); + var address = result; + widget.model.paymentCheckoutData.address = Addresses.fromJson(address.toJson()); + await widget.model.getInformationsByAddress(identificationNo); + await widget.model.getShoppingCart(); + // widget.changeMainState(); + GifLoaderDialogUtils.hideDialog(context); + } + }); + } } diff --git a/lib/pages/pharmacies/screens/cart-page/cart-order-preview.dart b/lib/pages/pharmacies/screens/cart-page/cart-order-preview.dart index 50cee7c3..40af2e02 100644 --- a/lib/pages/pharmacies/screens/cart-page/cart-order-preview.dart +++ b/lib/pages/pharmacies/screens/cart-page/cart-order-preview.dart @@ -15,8 +15,9 @@ import 'lakum_widget.dart'; class OrderPreviewPage extends StatefulWidget { final List addresses; + final OrderPreviewViewModel model; - OrderPreviewPage(this.addresses); + OrderPreviewPage({this.addresses, this.model}); @override _OrderPreviewPageState createState() => _OrderPreviewPageState(); @@ -43,7 +44,7 @@ class _OrderPreviewPageState extends State { Widget build(BuildContext context) { final mediaQuery = MediaQuery.of(context); final height = mediaQuery.size.height - 60 - mediaQuery.padding.top; - OrderPreviewViewModel model = Provider.of(context); + // OrderPreviewViewModel widget.model = Provider.of(context); return AppScaffold( appBarTitle: "${TranslationBase.of(context).checkOut}", isShowAppBar: true, @@ -52,7 +53,7 @@ class _OrderPreviewPageState extends State { isLoading: isLoading, isLocalLoader: true, backgroundColor: Colors.white, - // baseViewModel: model, + // baseViewModel: widget.model, body: Container( color: Color(0xFFF1F1F1), height: height * 0.90, @@ -61,19 +62,19 @@ class _OrderPreviewPageState extends State { color: Color(0xFFF1F1F1), child: Column( children: [ - SelectAddressWidget(model, widget.addresses, changeMainState), + SelectAddressWidget(widget.model, widget.addresses, changeMainState), SizedBox( height: 10, ), - SelectPaymentOptionWidget(model, changeMainState), + SelectPaymentOptionWidget(widget.model, changeMainState), SizedBox( height: 10, ), - model.paymentCheckoutData.lacumInformation != null + widget.model.paymentCheckoutData.lacumInformation != null ? Container( child: Column( children: [ - LakumWidget(model), + LakumWidget(widget.model), SizedBox( height: 10, ), @@ -95,8 +96,8 @@ class _OrderPreviewPageState extends State { color: Colors.black, ), ...List.generate( - model.cartResponse.shoppingCarts != null ? model.cartResponse.shoppingCarts.length : 0, - (index) => ProductOrderPreviewItem(model.cartResponse.shoppingCarts[index]), + widget.model.cartResponse.shoppingCarts != null ? widget.model.cartResponse.shoppingCarts.length : 0, + (index) => ProductOrderPreviewItem(widget.model.cartResponse.shoppingCarts[index]), ), ], ), @@ -104,7 +105,7 @@ class _OrderPreviewPageState extends State { Container( width: double.infinity, padding: EdgeInsets.all(8), - child: model.cartResponse.subtotal != null + child: widget.model.cartResponse.subtotal != null ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -127,7 +128,7 @@ class _OrderPreviewPageState extends State { fontWeight: FontWeight.w500, ), Texts( - "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", + "${TranslationBase.of(context).sar} ${(widget.model.cartResponse.subtotal).toStringAsFixed(2)}", fontSize: 14, color: Colors.black, fontWeight: FontWeight.w500, @@ -151,7 +152,7 @@ class _OrderPreviewPageState extends State { fontWeight: FontWeight.w500, ), Texts( - "${TranslationBase.of(context).sar} ${(model.totalAdditionalShippingCharge).toStringAsFixed(2)}", + "${TranslationBase.of(context).sar} ${(widget.model.totalAdditionalShippingCharge).toStringAsFixed(2)}", fontSize: 14, color: Colors.black, fontWeight: FontWeight.w500, @@ -175,7 +176,7 @@ class _OrderPreviewPageState extends State { fontWeight: FontWeight.w500, ), Texts( - "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotalVatAmount).toStringAsFixed(2)}", + "${TranslationBase.of(context).sar} ${(widget.model.cartResponse.subtotalVatAmount).toStringAsFixed(2)}", fontSize: 14, color: Colors.black, fontWeight: FontWeight.w500, @@ -199,7 +200,7 @@ class _OrderPreviewPageState extends State { fontWeight: FontWeight.bold, ), Texts( - "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", + "${TranslationBase.of(context).sar} ${(widget.model.cartResponse.subtotal).toStringAsFixed(2)}", fontSize: 14, color: Colors.black, fontWeight: FontWeight.bold, @@ -214,7 +215,7 @@ class _OrderPreviewPageState extends State { : Container(), ), SizedBox( - height: model.cartResponse.shoppingCarts != null ? height * 0.10 : 0, + height: widget.model.cartResponse.shoppingCarts != null ? height * 0.10 : 0, ) ], ), @@ -222,9 +223,9 @@ class _OrderPreviewPageState extends State { ), ), bottomSheet: Container( - height: model.cartResponse.shoppingCarts != null ? height * 0.10 : 0, + height: widget.model.cartResponse.shoppingCarts != null ? height * 0.10 : 0, color: Colors.white, - child: PaymentBottomWidget(model), + child: PaymentBottomWidget(widget.model), ), ); } diff --git a/lib/pages/pharmacies/screens/cart-page/select_address_widget.dart b/lib/pages/pharmacies/screens/cart-page/select_address_widget.dart index e03a4b35..4228af0a 100644 --- a/lib/pages/pharmacies/screens/cart-page/select_address_widget.dart +++ b/lib/pages/pharmacies/screens/cart-page/select_address_widget.dart @@ -24,7 +24,7 @@ class _SelectAddressWidgetState extends State { AddressInfo address; _navigateToAddressPage(String identificationNo) { - Navigator.push(context, FadePage(page: PharmacyAddressesPage())).then((result) async { + Navigator.push(context, FadePage(page: PharmacyAddressesPage(orderPreviewViewModel: widget.model,))).then((result) async { if (result != null) { GifLoaderDialogUtils.showMyDialog(context); address = result; diff --git a/lib/pages/pharmacies/screens/cart-page/select_payment_option_widget.dart b/lib/pages/pharmacies/screens/cart-page/select_payment_option_widget.dart index 825e2577..66e1b16b 100644 --- a/lib/pages/pharmacies/screens/cart-page/select_payment_option_widget.dart +++ b/lib/pages/pharmacies/screens/cart-page/select_payment_option_widget.dart @@ -20,7 +20,7 @@ class _SelectPaymentOptionWidgetState extends State { PaymentOption paymentOption; _navigateToPaymentOption() { - Navigator.push(context, FadePage(page: PaymentMethodSelectPage())) + Navigator.push(context, FadePage(page: PaymentMethodSelectPage(model: widget.model,))) .then((result) => { setState(() { if (result != null) { diff --git a/lib/pages/pharmacies/screens/order-preview-page.dart b/lib/pages/pharmacies/screens/order-preview-page.dart deleted file mode 100644 index 6b5f4f51..00000000 --- a/lib/pages/pharmacies/screens/order-preview-page.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; -import 'package:diplomaticquarterapp/pages/base/base_view.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/widgets/buttons/GestureIconButton.dart'; -import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; -import 'package:flutter/material.dart'; - -class OrderPreviewPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - return BaseView( - builder: (_, model, wi) => AppScaffold( - title: TranslationBase.of(context).shoppingCart, - isShowAppBar: true, - isShowDecPage: false, - baseViewModel: model, - backgroundColor: Colors.white, - body: Container( - width: double.infinity, - child: SingleChildScrollView( - child: Container( - margin: EdgeInsets.all(10), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - GestureIconButton( - TranslationBase.of(context).deleteAllItems, - Icon(Icons.delete_outline_sharp, color: Colors.grey.shade800,), - onTap: () => {}, - ), - const Divider( - color: Colors.grey, - height: 20, - thickness: 1, - indent: 0, - endIndent: 0, - ), - - ], - ), - ), - ), - ), - ), - ); - } -} - diff --git a/lib/pages/pharmacies/screens/payment-method-select-page.dart b/lib/pages/pharmacies/screens/payment-method-select-page.dart index 92065102..719fd45d 100644 --- a/lib/pages/pharmacies/screens/payment-method-select-page.dart +++ b/lib/pages/pharmacies/screens/payment-method-select-page.dart @@ -6,11 +6,19 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; +import 'cart-page/cart-order-preview.dart'; + class PaymentMethodSelectPage extends StatefulWidget { + final OrderPreviewViewModel model; + + const PaymentMethodSelectPage({Key key, this.model}) : super(key: key); + @override - _PaymentMethodSelectPageState createState() => _PaymentMethodSelectPageState(); + _PaymentMethodSelectPageState createState() => + _PaymentMethodSelectPageState(); } class _PaymentMethodSelectPageState extends State { @@ -79,7 +87,8 @@ class _PaymentMethodSelectPageState extends State { PaymentOption.installments, () => { setState(() { - selectedPaymentOption = PaymentOption.installments; + selectedPaymentOption = + PaymentOption.installments; }) }), if (Platform.isIOS) @@ -103,7 +112,21 @@ class _PaymentMethodSelectPageState extends State { padding: EdgeInsets.symmetric(horizontal: 16, vertical: 20), child: DefaultButton( TranslationBase.of(context).next, - selectedPaymentOption != null ? () => {Navigator.pop(context, selectedPaymentOption)} : null, + selectedPaymentOption != null + ? () { + + + widget.model.paymentCheckoutData.paymentOption = + selectedPaymentOption; + // Navigator.pop(context, selectedPaymentOption); + + Navigator.push( + context, + FadePage( + page: + OrderPreviewPage(model: widget.model,),),); + } + : null, color: Color(0xff5AB154), ), ), @@ -117,12 +140,14 @@ class PaymentMethodCard extends StatelessWidget { final PaymentOption paymentOption; final Function selectMethod; - PaymentMethodCard(this.cardWidth, this.selectedPaymentOption, this.paymentOption, this.selectMethod); + PaymentMethodCard(this.cardWidth, this.selectedPaymentOption, + this.paymentOption, this.selectMethod); @override Widget build(BuildContext context) { bool isSelected = false; - if (selectedPaymentOption != null && selectedPaymentOption == paymentOption) { + if (selectedPaymentOption != null && + selectedPaymentOption == paymentOption) { isSelected = true; } @@ -136,7 +161,9 @@ class PaymentMethodCard extends StatelessWidget { color: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), - side: isSelected ? BorderSide(color: Colors.green, width: 2.0) : BorderSide(color: Colors.transparent, width: 0.0), + side: isSelected + ? BorderSide(color: Colors.green, width: 2.0) + : BorderSide(color: Colors.transparent, width: 0.0), ), child: Padding( padding: const EdgeInsets.all(12.0), @@ -145,7 +172,13 @@ class PaymentMethodCard extends StatelessWidget { Container( width: 24, height: 24, - decoration: containerColorRadiusBorderWidth(isSelected ? CustomColors.accentColor : Colors.transparent, 100, Colors.grey, 0.5), + decoration: containerColorRadiusBorderWidth( + isSelected + ? CustomColors.accentColor + : Colors.transparent, + 100, + Colors.grey, + 0.5), ), mWidth(12), Container( @@ -157,7 +190,8 @@ class PaymentMethodCard extends StatelessWidget { if (isSelected) Container( decoration: containerRadius(CustomColors.green, 200), - padding: EdgeInsets.only(top: 6, bottom: 6, left: 12, right: 12), + padding: + EdgeInsets.only(top: 6, bottom: 6, left: 12, right: 12), child: Text( TranslationBase.of(context).paymentSelected, style: TextStyle( diff --git a/lib/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart b/lib/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart index b763e960..9fd40f2b 100644 --- a/lib/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart +++ b/lib/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart @@ -1,7 +1,9 @@ import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/customer_addresses_service.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/payment-method-select-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/AddAddress.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; @@ -13,7 +15,12 @@ import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +///TODO Elham* split this to tow files class PharmacyAddressesPage extends StatefulWidget { + + final OrderPreviewViewModel orderPreviewViewModel; + + const PharmacyAddressesPage({Key key, this.orderPreviewViewModel}) : super(key: key); @override _PharmacyAddressesState createState() => _PharmacyAddressesState(); } @@ -53,10 +60,13 @@ class _PharmacyAddressesState extends State { () { setState(() { model.setSelectedAddressIndex(index); + //TODO Elham* + widget.orderPreviewViewModel.paymentCheckoutData.address = Addresses.fromJson(model.addresses[index].toJson()); }); }, model.selectedAddressIndex == index, (address) { + navigateToAddressPage(context, model, address); }), ), @@ -109,8 +119,8 @@ class _PharmacyAddressesState extends State { vPadding: 8, handler: () { model.saveSelectedAddressLocally(model.addresses[model.selectedAddressIndex]); - Navigator.pop(context, model.addresses[model.selectedAddressIndex]); - }, + _navigateToPaymentOption(); + }, ), ), ], @@ -119,6 +129,20 @@ class _PharmacyAddressesState extends State { ), ); } + + _navigateToPaymentOption() { + Navigator.push(context, FadePage(page: PaymentMethodSelectPage(model: widget.orderPreviewViewModel,))) + .then((result) => { + setState(() { + if (result != null) { + var paymentOption = result; + widget.orderPreviewViewModel.paymentCheckoutData.paymentOption = + paymentOption; + } + // widget.changeMainState(); + }) + }); + } } class AddressItemWidget extends StatelessWidget {