Browse Source

Added more basket API methods

pull/49/merge
Javier Suárez Ruiz 8 years ago
parent
commit
c380359fc6
14 changed files with 70 additions and 26 deletions
  1. +7
    -5
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs
  2. +2
    -0
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs
  3. +7
    -4
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs
  4. +0
    -3
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs
  5. +10
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs
  6. +11
    -0
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs
  7. +1
    -0
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs
  8. +3
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs
  9. +7
    -0
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs
  10. +8
    -6
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs
  11. +9
    -3
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs
  12. +2
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml
  13. +3
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/BasketItemTemplate.xaml
  14. +0
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Renderers/CustomTabbedPageRenderer.cs

+ 7
- 5
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs View File

@ -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();
}
}
}
}

+ 2
- 0
src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs View File

@ -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/";
}
}

+ 7
- 4
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs View File

@ -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);
}
}
}


+ 0
- 3
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs View File

@ -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);
}
}


+ 10
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs View File

@ -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();
}
}
}
}

+ 11
- 0
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs View File

@ -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);
}
}
}

+ 1
- 0
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs View File

@ -7,5 +7,6 @@ namespace eShopOnContainers.Core.Services.Basket
{
Task<CustomerBasket> GetBasketAsync(string guidUser);
Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket);
Task ClearBasketAsync(string guidUser);
}
}

+ 3
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs View File

@ -13,5 +13,7 @@ namespace eShopOnContainers.Core.Services.RequestProvider
Task<TResult> PutAsync<TResult>(string uri, TResult data);
Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data);
Task DeleteAsync(string uri);
}
}
}

+ 7
- 0
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs View File

@ -77,6 +77,13 @@ namespace eShopOnContainers.Core.Services.RequestProvider
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
}
public async Task DeleteAsync(string uri)
{
HttpClient httpClient = CreateHttpClient();
await httpClient.DeleteAsync(uri);
}
private HttpClient CreateHttpClient()
{
var httpClient = new HttpClient();


+ 8
- 6
src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs View File

@ -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<CatalogViewModel, List<BasketItem>>(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<OrderItem>(this, MessengerKeys.UpdateProduct, (sender) =>
MessagingCenter.Subscribe<BasketItem>(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,


+ 9
- 3
src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs View File

@ -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<MainViewModel>(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;
}
}
}
}

+ 2
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml View File

@ -176,7 +176,8 @@
</Grid.RowDefinitions>
<ListView
Grid.Row="0"
ItemsSource="{Binding Order.OrderItems}"
ItemsSource="{Binding Order.OrderItems}"
HeightRequest="{Binding Order.OrderItems.Count, Converter={StaticResource ItemsToHeightConverter}}"
HasUnevenRows="True"
SeparatorVisibility="None"
VerticalOptions="FillAndExpand"


+ 3
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/BasketItemTemplate.xaml View File

@ -56,6 +56,8 @@
<Style x:Key="QuantityPickerStyle"
TargetType="{x:Type controls:BindablePicker}">
<Setter Property="TextColor"
Value="{StaticResource BlackColor}" />
<Setter Property="BackgroundColor"
Value="Transparent" />
<Setter Property="HorizontalOptions"
@ -139,7 +141,7 @@
<controls:BindablePicker
Grid.Column="1"
ItemsSource="{Binding Numbers}"
SelectedItem="{Binding Quantity, Mode=TwoWay}"
SelectedItem="{Binding Quantity, Mode=TwoWay}"
Style="{StaticResource QuantityPickerStyle}">
<controls:BindablePicker.WidthRequest>
<OnPlatform


+ 0
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Renderers/CustomTabbedPageRenderer.cs View File

@ -8,7 +8,6 @@ using System.Linq;
using Xamarin.Forms;
using Xamarin.Forms.Internals;
using Xamarin.Forms.Platform.UWP;
using UI = Windows.UI;
using Xaml = Windows.UI.Xaml;
[assembly: ExportRenderer(typeof(TabbedPage), typeof(CustomTabbedPageRenderer))]


Loading…
Cancel
Save