From c380359fc658e47664499a554bae102f24f74f80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Su=C3=A1rez=20Ruiz?= Date: Fri, 25 Nov 2016 11:57:21 +0100 Subject: [PATCH] Added more basket API methods --- .../Controls/BindablePicker.cs | 12 +++++++----- .../eShopOnContainers.Core/GlobalSettings.cs | 2 ++ .../Models/Basket/BasketItem.cs | 11 +++++++---- .../Models/Orders/OrderItem.cs | 3 --- .../Services/Basket/BasketMockService.cs | 11 ++++++++++- .../Services/Basket/BasketService.cs | 11 +++++++++++ .../Services/Basket/IBasketService.cs | 1 + .../Services/RequestProvider/IRequestProvider.cs | 4 +++- .../Services/RequestProvider/RequestProvider.cs | 7 +++++++ .../ViewModels/BasketViewModel.cs | 14 ++++++++------ .../ViewModels/CheckoutViewModel.cs | 12 +++++++++--- .../eShopOnContainers.Core/Views/CheckoutView.xaml | 3 ++- .../Views/Templates/BasketItemTemplate.xaml | 4 +++- .../Renderers/CustomTabbedPageRenderer.cs | 1 - 14 files changed, 70 insertions(+), 26 deletions(-) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs index 5699f5b2d..07f592e14 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs @@ -23,6 +23,7 @@ namespace eShopOnContainers.Core.Controls } var index = 0; + foreach (var item in ItemsSource) { if (index == SelectedIndex) @@ -30,6 +31,7 @@ namespace eShopOnContainers.Core.Controls SelectedItem = item; break; } + index++; } }; @@ -62,6 +64,7 @@ namespace eShopOnContainers.Core.Controls if (ItemsSource != null) { var index = 0; + foreach (var item in ItemsSource) { string strItem = item?.ToString(); @@ -73,6 +76,7 @@ namespace eShopOnContainers.Core.Controls selectedIndex = index; break; } + index++; } } @@ -102,12 +106,10 @@ namespace eShopOnContainers.Core.Controls { var boundPicker = (BindablePicker)bindable; - if (boundPicker.ItemSelected != null) - { - boundPicker.ItemSelected(boundPicker, new SelectedItemChangedEventArgs(newValue)); - } + boundPicker.ItemSelected?.Invoke(boundPicker, + new SelectedItemChangedEventArgs(newValue)); boundPicker.InternalUpdateSelectedIndex(); } } -} +} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs index d942bc439..264146e9f 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs @@ -7,5 +7,7 @@ public const string CatalogEndpoint = "http://104.40.62.65:5101/"; public const string BasketEndpoint = "http://104.40.62.65:5103/"; + + public const string IdentityEndpoint = "http://104.40.62.65:5105/"; } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs index 9b5090e41..c10da754f 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs @@ -67,11 +67,14 @@ namespace eShopOnContainers.Core.Models.Basket get { return _quantity; } set { - _quantity = value; - RaisePropertyChanged(() => Quantity); - RaisePropertyChanged(() => Total); + if (_quantity != value) + { + _quantity = value; + RaisePropertyChanged(() => Quantity); + RaisePropertyChanged(() => Total); - MessagingCenter.Send(this, MessengerKeys.UpdateProduct); + MessagingCenter.Send(this, MessengerKeys.UpdateProduct); + } } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs index 10712da68..8ec118a24 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs @@ -3,7 +3,6 @@ using eShopOnContainers.Core.ViewModels.Base; using eShopOnContainers.ViewModels.Base; using System; using System.Collections.ObjectModel; -using Xamarin.Forms; namespace eShopOnContainers.Core.Models.Orders { @@ -71,8 +70,6 @@ namespace eShopOnContainers.Core.Models.Orders _quantity = value; RaisePropertyChanged(() => Quantity); RaisePropertyChanged(() => Total); - - MessagingCenter.Send(this, MessengerKeys.UpdateProduct); } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs index 6bdcf0df5..5a76fc5c2 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Threading.Tasks; using Xamarin.Forms; -using System; namespace eShopOnContainers.Core.Services.Basket { @@ -38,5 +37,15 @@ namespace eShopOnContainers.Core.Services.Basket return MockCustomBasket; } + + public async Task ClearBasketAsync(string guidUser) + { + await Task.Delay(500); + + if (!string.IsNullOrEmpty(guidUser)) + { + MockCustomBasket.Items.Clear(); + } + } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs index e5bc66202..2fb8c1f90 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs @@ -49,5 +49,16 @@ namespace eShopOnContainers.Core.Services.Basket return result; } + + public async Task ClearBasketAsync(string guidUser) + { + UriBuilder builder = new UriBuilder(GlobalSetting.BasketEndpoint); + + builder.Path = guidUser; + + string uri = builder.ToString(); + + await _requestProvider.DeleteAsync(uri); + } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs index 356eb40f7..3c6893773 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs @@ -7,5 +7,6 @@ namespace eShopOnContainers.Core.Services.Basket { Task GetBasketAsync(string guidUser); Task UpdateBasketAsync(CustomerBasket customerBasket); + Task ClearBasketAsync(string guidUser); } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs index 7c36620fa..c5846a001 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs @@ -13,5 +13,7 @@ namespace eShopOnContainers.Core.Services.RequestProvider Task PutAsync(string uri, TResult data); Task PutAsync(string uri, TRequest data); + + Task DeleteAsync(string uri); } -} +} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs index dd6a1bce5..3bc4c15e0 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs @@ -77,6 +77,13 @@ namespace eShopOnContainers.Core.Services.RequestProvider return await Task.Run(() => JsonConvert.DeserializeObject(responseData, _serializerSettings)); } + public async Task DeleteAsync(string uri) + { + HttpClient httpClient = CreateHttpClient(); + + await httpClient.DeleteAsync(uri); + } + private HttpClient CreateHttpClient() { var httpClient = new HttpClient(); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs index 0ffea52ad..c24f3cbba 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs @@ -1,6 +1,5 @@ using eShopOnContainers.Core.Models.Basket; using eShopOnContainers.Core.Models.Catalog; -using eShopOnContainers.Core.Models.Orders; using eShopOnContainers.Core.Models.User; using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.User; @@ -69,10 +68,9 @@ namespace eShopOnContainers.Core.ViewModels { MessagingCenter.Subscribe>(this, MessengerKeys.UpdateBasket, (sender, arg) => { - BadgeCount = arg.Count; - foreach (var basketItem in arg) { + BadgeCount += basketItem.Quantity; AddBasketItem(basketItem); } }); @@ -84,7 +82,7 @@ namespace eShopOnContainers.Core.ViewModels AddCatalogItem(arg); }); - MessagingCenter.Subscribe(this, MessengerKeys.UpdateProduct, (sender) => + MessagingCenter.Subscribe(this, MessengerKeys.UpdateProduct, (sender) => { ReCalculateTotal(); }); @@ -126,12 +124,16 @@ namespace eShopOnContainers.Core.ViewModels { Total = 0; + if (BasketItems == null) + { + return; + } + foreach (var orderItem in BasketItems) { Total += (orderItem.Quantity * orderItem.UnitPrice); } - - + _basketService.UpdateBasketAsync(new CustomerBasket { BuyerId = _user.GuidUser, diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs index e842f310f..2c1b19e36 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs @@ -11,6 +11,7 @@ using System.Collections.ObjectModel; using System.Linq; using eShopOnContainers.Core.Models.Basket; using System.Collections.Generic; +using eShopOnContainers.Core.Services.Basket; namespace eShopOnContainers.Core.ViewModels { @@ -21,9 +22,12 @@ namespace eShopOnContainers.Core.ViewModels private User _user; private IUserService _userService; + private IBasketService _basketService; - public CheckoutViewModel(IUserService userService) + public CheckoutViewModel(IUserService userService, + IBasketService basketService) { + _basketService = basketService; _userService = userService; } @@ -86,10 +90,12 @@ namespace eShopOnContainers.Core.ViewModels private async void Checkout() { + await _basketService.ClearBasketAsync(User.GuidUser); + await NavigationService.NavigateToAsync(new TabParameter { TabIndex = 1 }); await NavigationService.RemoveLastFromBackStackAsync(); - await DialogService.ShowAlertAsync("Order sent successfully", string.Format("Order {0}", Order.OrderNumber), "Ok"); + await DialogService.ShowAlertAsync("Order sent successfully!", string.Format("Order {0}", Order.OrderNumber), "Ok"); await NavigationService.RemoveLastFromBackStackAsync(); } @@ -124,4 +130,4 @@ namespace eShopOnContainers.Core.ViewModels return total; } } -} +} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml index 2cc066c56..0fe1cd300 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml @@ -176,7 +176,8 @@ +