first step from fixing check out process

merge-update-with-lab-changes
Elham Rababh 4 years ago
parent f7aafcda1a
commit f8883f5439

@ -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/';

@ -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<CartOrderPage> {
void initState() {
super.initState();
getData();
}
@override
@ -105,8 +104,8 @@ class _CartOrderPageState extends State<CartOrderPage> {
.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<CartOrderPage> {
? 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<CartOrderPage> {
class OrderBottomWidget extends StatefulWidget {
final List<Addresses> 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<OrderBottomWidget> {
@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<OrderBottomWidget> {
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<OrderBottomWidget> {
),
),
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<OrderBottomWidget> {
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<OrderBottomWidget> {
)
: 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);
}
});
}
}

@ -15,8 +15,9 @@ import 'lakum_widget.dart';
class OrderPreviewPage extends StatefulWidget {
final List<Addresses> addresses;
final OrderPreviewViewModel model;
OrderPreviewPage(this.addresses);
OrderPreviewPage({this.addresses, this.model});
@override
_OrderPreviewPageState createState() => _OrderPreviewPageState();
@ -43,7 +44,7 @@ class _OrderPreviewPageState extends State<OrderPreviewPage> {
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<OrderPreviewPage> {
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<OrderPreviewPage> {
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<OrderPreviewPage> {
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<OrderPreviewPage> {
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<OrderPreviewPage> {
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<OrderPreviewPage> {
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<OrderPreviewPage> {
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<OrderPreviewPage> {
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<OrderPreviewPage> {
: 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<OrderPreviewPage> {
),
),
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),
),
);
}

@ -24,7 +24,7 @@ class _SelectAddressWidgetState extends State<SelectAddressWidget> {
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;

@ -20,7 +20,7 @@ class _SelectPaymentOptionWidgetState extends State<SelectPaymentOptionWidget> {
PaymentOption paymentOption;
_navigateToPaymentOption() {
Navigator.push(context, FadePage(page: PaymentMethodSelectPage()))
Navigator.push(context, FadePage(page: PaymentMethodSelectPage(model: widget.model,)))
.then((result) => {
setState(() {
if (result != 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<OrderPreviewViewModel>(
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,
),
],
),
),
),
),
),
);
}
}

@ -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<PaymentMethodSelectPage> {
@ -79,7 +87,8 @@ class _PaymentMethodSelectPageState extends State<PaymentMethodSelectPage> {
PaymentOption.installments,
() => {
setState(() {
selectedPaymentOption = PaymentOption.installments;
selectedPaymentOption =
PaymentOption.installments;
})
}),
if (Platform.isIOS)
@ -103,7 +112,21 @@ class _PaymentMethodSelectPageState extends State<PaymentMethodSelectPage> {
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(

@ -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<PharmacyAddressesPage> {
() {
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<PharmacyAddressesPage> {
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<PharmacyAddressesPage> {
),
);
}
_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 {

Loading…
Cancel
Save