Changes in client APIs integration
This commit is contained in:
parent
a042894edd
commit
19da19fa84
@ -427,6 +427,8 @@ Global
|
|||||||
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhone.Build.0 = Debug|x86
|
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhone.Build.0 = Debug|x86
|
||||||
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhone.Deploy.0 = Debug|x86
|
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhone.Deploy.0 = Debug|x86
|
||||||
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
|
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
|
||||||
|
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhoneSimulator.Build.0 = Debug|x86
|
||||||
|
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhoneSimulator.Deploy.0 = Debug|x86
|
||||||
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.ActiveCfg = Debug|x64
|
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.Build.0 = Debug|x64
|
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.Build.0 = Debug|x64
|
||||||
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.Deploy.0 = Debug|x64
|
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.Deploy.0 = Debug|x64
|
||||||
@ -657,6 +659,7 @@ Global
|
|||||||
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhone.Build.0 = Debug|x86
|
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhone.Build.0 = Debug|x86
|
||||||
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhone.Deploy.0 = Debug|x86
|
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhone.Deploy.0 = Debug|x86
|
||||||
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
|
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
|
||||||
|
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhoneSimulator.Build.0 = Debug|x86
|
||||||
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.ActiveCfg = Debug|x64
|
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.Build.0 = Debug|x64
|
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.Build.0 = Debug|x64
|
||||||
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.Deploy.0 = Debug|x64
|
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.Deploy.0 = Debug|x64
|
||||||
|
@ -0,0 +1,52 @@
|
|||||||
|
using System.Windows.Input;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace eShopOnContainers.Core.Behaviors
|
||||||
|
{
|
||||||
|
public sealed class ItemTappedCommandListViewBehavior
|
||||||
|
{
|
||||||
|
public static readonly BindableProperty ItemTappedCommandProperty =
|
||||||
|
BindableProperty.CreateAttached(
|
||||||
|
"ItemTappedCommand",
|
||||||
|
typeof(ICommand),
|
||||||
|
typeof(ItemTappedCommandListViewBehavior),
|
||||||
|
default(ICommand),
|
||||||
|
BindingMode.OneWay,
|
||||||
|
null,
|
||||||
|
PropertyChanged);
|
||||||
|
|
||||||
|
private static void PropertyChanged(BindableObject bindable, object oldValue, object newValue)
|
||||||
|
{
|
||||||
|
var listView = bindable as ListView;
|
||||||
|
if (listView != null)
|
||||||
|
{
|
||||||
|
listView.ItemTapped -= ListViewOnItemTapped;
|
||||||
|
listView.ItemTapped += ListViewOnItemTapped;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ListViewOnItemTapped(object sender, ItemTappedEventArgs e)
|
||||||
|
{
|
||||||
|
var list = sender as ListView;
|
||||||
|
if (list != null && list.IsEnabled && !list.IsRefreshing)
|
||||||
|
{
|
||||||
|
list.SelectedItem = null;
|
||||||
|
var command = GetItemTappedCommand(list);
|
||||||
|
if (command != null && command.CanExecute(e.Item))
|
||||||
|
{
|
||||||
|
command.Execute(e.Item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ICommand GetItemTappedCommand(BindableObject bindableObject)
|
||||||
|
{
|
||||||
|
return (ICommand)bindableObject.GetValue(ItemTappedCommandProperty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetItemTappedCommand(BindableObject bindableObject, object value)
|
||||||
|
{
|
||||||
|
bindableObject.SetValue(ItemTappedCommandProperty, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -8,7 +8,10 @@ namespace eShopOnContainers.Core.Converters
|
|||||||
{
|
{
|
||||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
{
|
{
|
||||||
return value.ToString().ToUpperInvariant();
|
if (value != null)
|
||||||
|
return value.ToString().ToUpperInvariant();
|
||||||
|
else
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.Models.Basket
|
namespace eShopOnContainers.Core.Models.Basket
|
||||||
{
|
{
|
||||||
public class BasketItem
|
public class BasketItem : BindableObject
|
||||||
{
|
{
|
||||||
|
private int _quantity;
|
||||||
|
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
|
||||||
public string ProductId { get; set; }
|
public string ProductId { get; set; }
|
||||||
@ -12,7 +15,15 @@ namespace eShopOnContainers.Core.Models.Basket
|
|||||||
|
|
||||||
public decimal UnitPrice { get; set; }
|
public decimal UnitPrice { get; set; }
|
||||||
|
|
||||||
public int Quantity { get; set; }
|
public int Quantity
|
||||||
|
{
|
||||||
|
get { return _quantity; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_quantity = value;
|
||||||
|
OnPropertyChanged("Quantity");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string PictureUrl { get; set; }
|
public string PictureUrl { get; set; }
|
||||||
|
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
namespace eShopOnContainers.Core.Models.Orders
|
|
||||||
{
|
|
||||||
public class CardType
|
|
||||||
{
|
|
||||||
public int Id { get; set; }
|
|
||||||
public string Name { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.Models.Orders
|
namespace eShopOnContainers.Core.Models.Orders
|
||||||
@ -17,19 +16,25 @@ namespace eShopOnContainers.Core.Models.Orders
|
|||||||
|
|
||||||
public int SequenceNumber { get; set; }
|
public int SequenceNumber { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("date")]
|
||||||
public DateTime OrderDate { get; set; }
|
public DateTime OrderDate { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("status")]
|
||||||
public OrderState State { get; set; }
|
public OrderState State { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("city")]
|
||||||
public string ShippingCity { get; set; }
|
public string ShippingCity { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("street")]
|
||||||
public string ShippingStreet { get; set; }
|
public string ShippingStreet { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("state")]
|
||||||
public string ShippingState { get; set; }
|
public string ShippingState { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("country")]
|
||||||
public string ShippingCountry { get; set; }
|
public string ShippingCountry { get; set; }
|
||||||
|
|
||||||
public string CardType { get; set; }
|
public int CardTypeId { get; set; }
|
||||||
|
|
||||||
public string CardNumber { get; set; }
|
public string CardNumber { get; set; }
|
||||||
|
|
||||||
@ -39,22 +44,13 @@ namespace eShopOnContainers.Core.Models.Orders
|
|||||||
|
|
||||||
public string CardSecurityNumber { get; set; }
|
public string CardSecurityNumber { get; set; }
|
||||||
|
|
||||||
[JsonProperty("items")]
|
[JsonProperty("orderitems")]
|
||||||
public List<OrderItem> OrderItems { get; set; }
|
public List<OrderItem> OrderItems { get; set; }
|
||||||
|
|
||||||
public decimal Total { get { return CalculateTotal(); } }
|
[JsonProperty("total")]
|
||||||
|
public decimal Total { get; set; }
|
||||||
|
|
||||||
public string OrderNumber { get { return CalculateOrderNumber(); } }
|
[JsonProperty("ordernumber")]
|
||||||
|
public string OrderNumber { get; set; }
|
||||||
|
|
||||||
private decimal CalculateTotal()
|
|
||||||
{
|
|
||||||
return OrderItems.Sum(x => x.Quantity * x.UnitPrice);
|
|
||||||
}
|
|
||||||
|
|
||||||
private string CalculateOrderNumber()
|
|
||||||
{
|
|
||||||
return string.Format("{0}/{1}-{2}", OrderDate.Year, OrderDate.Month, SequenceNumber);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,15 +1,25 @@
|
|||||||
using System;
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.Models.Orders
|
namespace eShopOnContainers.Core.Models.Orders
|
||||||
{
|
{
|
||||||
public class OrderItem
|
public class OrderItem
|
||||||
{
|
{
|
||||||
public string ProductId { get; set; }
|
public string ProductId { get; set; }
|
||||||
public Guid OrderId { get; set; }
|
public Guid? OrderId { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("unitprice")]
|
||||||
public decimal UnitPrice { get; set; }
|
public decimal UnitPrice { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("productname")]
|
||||||
public string ProductName { get; set; }
|
public string ProductName { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("pictureurl")]
|
||||||
public string PictureUrl { get; set; }
|
public string PictureUrl { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("units")]
|
||||||
public int Quantity { get; set; }
|
public int Quantity { get; set; }
|
||||||
|
|
||||||
public decimal Discount { get; set; }
|
public decimal Discount { get; set; }
|
||||||
public decimal Total { get { return Quantity * UnitPrice; } }
|
public decimal Total { get { return Quantity * UnitPrice; } }
|
||||||
|
|
||||||
|
@ -41,13 +41,20 @@ namespace eShopOnContainers.Core.Services.Basket
|
|||||||
|
|
||||||
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
|
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
|
||||||
{
|
{
|
||||||
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
|
try
|
||||||
|
{
|
||||||
|
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
|
||||||
|
|
||||||
string uri = builder.ToString();
|
string uri = builder.ToString();
|
||||||
|
|
||||||
var result = await _requestProvider.PostAsync(uri, customerBasket, token);
|
var result = await _requestProvider.PostAsync(uri, customerBasket, token);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return new CustomerBasket();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ClearBasketAsync(string guidUser, string token)
|
public async Task ClearBasketAsync(string guidUser, string token)
|
||||||
@ -58,7 +65,7 @@ namespace eShopOnContainers.Core.Services.Basket
|
|||||||
|
|
||||||
string uri = builder.ToString();
|
string uri = builder.ToString();
|
||||||
|
|
||||||
await _requestProvider.DeleteAsync(uri, token);
|
await _requestProvider.DeleteAsync(uri, token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,6 @@
|
|||||||
namespace eShopOnContainers.Core.Services.Identity
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace eShopOnContainers.Core.Services.Identity
|
||||||
{
|
{
|
||||||
public interface IIdentityService
|
public interface IIdentityService
|
||||||
{
|
{
|
||||||
|
@ -6,6 +6,7 @@ using System.Collections.Generic;
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.Services.Order
|
namespace eShopOnContainers.Core.Services.Order
|
||||||
{
|
{
|
||||||
@ -45,15 +46,15 @@ namespace eShopOnContainers.Core.Services.Order
|
|||||||
|
|
||||||
private List<Models.Orders.Order> MockOrders = new List<Models.Orders.Order>()
|
private List<Models.Orders.Order> MockOrders = new List<Models.Orders.Order>()
|
||||||
{
|
{
|
||||||
new Models.Orders.Order { SequenceNumber = 123, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardType = MockPaymentInfo.CardType.ToString(), CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street },
|
new Models.Orders.Order { OrderNumber = "1", SequenceNumber = 123, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardTypeId = MockPaymentInfo.CardType.Id, CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street, Total = 36.46M },
|
||||||
new Models.Orders.Order { SequenceNumber = 132, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardType = MockPaymentInfo.CardType.ToString(), CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street },
|
new Models.Orders.Order { OrderNumber = "2", SequenceNumber = 132, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardTypeId = MockPaymentInfo.CardType.Id, CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street, Total = 36.46M },
|
||||||
new Models.Orders.Order { SequenceNumber = 231, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardType = MockPaymentInfo.CardType.ToString(), CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street },
|
new Models.Orders.Order { OrderNumber = "3", SequenceNumber = 231, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardTypeId = MockPaymentInfo.CardType.Id, CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street, Total = 36.46M }
|
||||||
};
|
};
|
||||||
|
|
||||||
private static List<OrderItem> MockOrderItems = new List<OrderItem>()
|
private static List<OrderItem> MockOrderItems = new List<OrderItem>()
|
||||||
{
|
{
|
||||||
new OrderItem { OrderId = Guid.NewGuid(), ProductId = Common.Common.MockCatalogItemId01, Discount = 15, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 16.50M },
|
new OrderItem { OrderId = Guid.NewGuid(), ProductId = Common.Common.MockCatalogItemId01, Discount = 15, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 16.50M, PictureUrl = Device.OS != TargetPlatform.Windows ? "fake_product_01.png" : "Assets/fake_product_01.png" },
|
||||||
new OrderItem { OrderId = Guid.NewGuid(), ProductId = Common.Common.MockCatalogItemId03, Discount = 0, ProductName = ".NET Bot Black Sweatshirt (M)", Quantity = 2, UnitPrice = 19.95M }
|
new OrderItem { OrderId = Guid.NewGuid(), ProductId = Common.Common.MockCatalogItemId03, Discount = 0, ProductName = ".NET Bot Black Sweatshirt (M)", Quantity = 2, UnitPrice = 19.95M, PictureUrl = Device.OS != TargetPlatform.Windows ? "fake_product_03.png" : "Assets/fake_product_03.png" }
|
||||||
};
|
};
|
||||||
|
|
||||||
private static List<CardType> MockCardTypes = new List<CardType>()
|
private static List<CardType> MockCardTypes = new List<CardType>()
|
||||||
@ -88,7 +89,9 @@ namespace eShopOnContainers.Core.Services.Order
|
|||||||
await Task.Delay(500);
|
await Task.Delay(500);
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(token))
|
if (!string.IsNullOrEmpty(token))
|
||||||
return MockOrders.FirstOrDefault(o => o.SequenceNumber == orderId);
|
return MockOrders
|
||||||
|
.FirstOrDefault(o => o.OrderNumber.Equals(orderId.ToString(),
|
||||||
|
StringComparison.CurrentCultureIgnoreCase));
|
||||||
else
|
else
|
||||||
return new Models.Orders.Order();
|
return new Models.Orders.Order();
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,11 @@ using eShopOnContainers.Core.Services.Basket;
|
|||||||
using eShopOnContainers.Core.Services.Identity;
|
using eShopOnContainers.Core.Services.Identity;
|
||||||
using eShopOnContainers.Core.Services.Order;
|
using eShopOnContainers.Core.Services.Order;
|
||||||
using eShopOnContainers.Core.Services.User;
|
using eShopOnContainers.Core.Services.User;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using eShopOnContainers.Core.Models.Basket;
|
||||||
|
using eShopOnContainers.Core.Models.Catalog;
|
||||||
|
using eShopOnContainers.Core.ViewModels.Base;
|
||||||
|
|
||||||
namespace eShopOnContainers.ViewModels.Base
|
namespace eShopOnContainers.ViewModels.Base
|
||||||
{
|
{
|
||||||
@ -58,6 +63,12 @@ namespace eShopOnContainers.ViewModels.Base
|
|||||||
|
|
||||||
public void UpdateDependencies(bool useMockServices)
|
public void UpdateDependencies(bool useMockServices)
|
||||||
{
|
{
|
||||||
|
// Clear message subscriptions
|
||||||
|
var basketViewModel = _unityContainer.Resolve<BasketViewModel>();
|
||||||
|
MessagingCenter.Unsubscribe<CatalogViewModel, List<BasketItem>>(basketViewModel, MessengerKeys.UpdateBasket);
|
||||||
|
MessagingCenter.Unsubscribe<CatalogViewModel, CatalogItem>(basketViewModel, MessengerKeys.AddProduct);
|
||||||
|
|
||||||
|
// Change injected dpendencies
|
||||||
if (useMockServices)
|
if (useMockServices)
|
||||||
{
|
{
|
||||||
_unityContainer.RegisterInstance<ICatalogService>(new CatalogMockService());
|
_unityContainer.RegisterInstance<ICatalogService>(new CatalogMockService());
|
||||||
|
@ -62,14 +62,14 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ICommand AddCommand => new Command<BasketItem>(AddItem);
|
||||||
|
|
||||||
public ICommand CheckoutCommand => new Command(Checkout);
|
public ICommand CheckoutCommand => new Command(Checkout);
|
||||||
|
|
||||||
public override Task InitializeAsync(object navigationData)
|
public override Task InitializeAsync(object navigationData)
|
||||||
{
|
{
|
||||||
MessagingCenter.Subscribe<CatalogViewModel, List<BasketItem>>(this, MessengerKeys.UpdateBasket, (sender, arg) =>
|
MessagingCenter.Subscribe<CatalogViewModel, List<BasketItem>>(this, MessengerKeys.UpdateBasket, (sender, arg) =>
|
||||||
{
|
{
|
||||||
MessagingCenter.Unsubscribe<CatalogViewModel, List<BasketItem>>(this, MessengerKeys.UpdateBasket);
|
|
||||||
|
|
||||||
foreach (var basketItem in arg)
|
foreach (var basketItem in arg)
|
||||||
{
|
{
|
||||||
BadgeCount += basketItem.Quantity;
|
BadgeCount += basketItem.Quantity;
|
||||||
@ -111,6 +111,21 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
ReCalculateTotal();
|
ReCalculateTotal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void AddItem(BasketItem parameter)
|
||||||
|
{
|
||||||
|
BadgeCount++;
|
||||||
|
|
||||||
|
var basketItem = BasketItems
|
||||||
|
.FirstOrDefault(bi => bi.ProductId.Equals(parameter.ProductId,
|
||||||
|
StringComparison.CurrentCultureIgnoreCase));
|
||||||
|
|
||||||
|
basketItem.Quantity++;
|
||||||
|
|
||||||
|
RaisePropertyChanged(() => BasketItems);
|
||||||
|
|
||||||
|
ReCalculateTotal();
|
||||||
|
}
|
||||||
|
|
||||||
private void AddBasketItem(BasketItem item)
|
private void AddBasketItem(BasketItem item)
|
||||||
{
|
{
|
||||||
BasketItems.Add(item);
|
BasketItems.Add(item);
|
||||||
|
@ -83,16 +83,19 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
|
|
||||||
ShippingAddress = new Address
|
ShippingAddress = new Address
|
||||||
{
|
{
|
||||||
|
Id = new Guid(userInfo.UserId),
|
||||||
Street = userInfo?.Street,
|
Street = userInfo?.Street,
|
||||||
ZipCode = userInfo?.ZipCode,
|
ZipCode = userInfo?.ZipCode,
|
||||||
State = userInfo?.State,
|
State = userInfo?.State,
|
||||||
Country = userInfo?.Country,
|
Country = userInfo?.Country,
|
||||||
|
City = string.Empty
|
||||||
};
|
};
|
||||||
|
|
||||||
var paymentInfo = new PaymentInfo
|
var paymentInfo = new PaymentInfo
|
||||||
{
|
{
|
||||||
CardNumber = userInfo?.CardNumber,
|
CardNumber = userInfo?.CardNumber,
|
||||||
CardHolderName = userInfo?.CardHolder,
|
CardHolderName = userInfo?.CardHolder,
|
||||||
|
CardType = new CardType { Id = 3, Name = "MasterCard" },
|
||||||
SecurityNumber = userInfo?.CardSecurityNumber
|
SecurityNumber = userInfo?.CardSecurityNumber
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -106,9 +109,12 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
CardNumber = paymentInfo.CardNumber,
|
CardNumber = paymentInfo.CardNumber,
|
||||||
CardSecurityNumber = paymentInfo.SecurityNumber,
|
CardSecurityNumber = paymentInfo.SecurityNumber,
|
||||||
CardExpiration = DateTime.Now.AddYears(5),
|
CardExpiration = DateTime.Now.AddYears(5),
|
||||||
|
CardTypeId = paymentInfo.CardType.Id,
|
||||||
ShippingState = _shippingAddress.State,
|
ShippingState = _shippingAddress.State,
|
||||||
ShippingCountry = _shippingAddress.Country,
|
ShippingCountry = _shippingAddress.Country,
|
||||||
ShippingStreet = _shippingAddress.Street
|
ShippingStreet = _shippingAddress.Street,
|
||||||
|
ShippingCity = _shippingAddress.City,
|
||||||
|
Total = CalculateTotal(CreateOrderItems(orderItems))
|
||||||
};
|
};
|
||||||
|
|
||||||
IsBusy = false;
|
IsBusy = false;
|
||||||
@ -126,7 +132,7 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
await NavigationService.NavigateToAsync<MainViewModel>(new TabParameter { TabIndex = 1 });
|
await NavigationService.NavigateToAsync<MainViewModel>(new TabParameter { TabIndex = 1 });
|
||||||
await NavigationService.RemoveLastFromBackStackAsync();
|
await NavigationService.RemoveLastFromBackStackAsync();
|
||||||
|
|
||||||
await DialogService.ShowAlertAsync("Order sent successfully!", string.Format("Order {0}", Order.SequenceNumber), "Ok");
|
await DialogService.ShowAlertAsync("Order sent successfully!", string.Format("Order {0}", Order.OrderNumber), "Ok");
|
||||||
await NavigationService.RemoveLastFromBackStackAsync();
|
await NavigationService.RemoveLastFromBackStackAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,6 +144,7 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
{
|
{
|
||||||
orderItems.Add(new OrderItem
|
orderItems.Add(new OrderItem
|
||||||
{
|
{
|
||||||
|
OrderId = null,
|
||||||
ProductId = basketItem.ProductId,
|
ProductId = basketItem.ProductId,
|
||||||
ProductName = basketItem.ProductName,
|
ProductName = basketItem.ProductName,
|
||||||
PictureUrl = basketItem.PictureUrl,
|
PictureUrl = basketItem.PictureUrl,
|
||||||
@ -148,5 +155,17 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
|
|
||||||
return orderItems;
|
return orderItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private decimal CalculateTotal(List<OrderItem> orderItems)
|
||||||
|
{
|
||||||
|
decimal total = 0;
|
||||||
|
|
||||||
|
foreach(var orderItem in orderItems)
|
||||||
|
{
|
||||||
|
total += (orderItem.Quantity * orderItem.UnitPrice);
|
||||||
|
}
|
||||||
|
|
||||||
|
return total;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,6 +3,9 @@ using eShopOnContainers.Core.Models.Orders;
|
|||||||
using eShopOnContainers.ViewModels.Base;
|
using eShopOnContainers.ViewModels.Base;
|
||||||
using eShopOnContainers.Core.Services.Catalog;
|
using eShopOnContainers.Core.Services.Catalog;
|
||||||
using eShopOnContainers.Core.Services.Basket;
|
using eShopOnContainers.Core.Services.Basket;
|
||||||
|
using eShopOnContainers.Core.Services.Order;
|
||||||
|
using System;
|
||||||
|
using eShopOnContainers.Core.Helpers;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.ViewModels
|
namespace eShopOnContainers.Core.ViewModels
|
||||||
{
|
{
|
||||||
@ -12,13 +15,16 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
|
|
||||||
private IBasketService _orderService;
|
private IBasketService _orderService;
|
||||||
private ICatalogService _catalogService;
|
private ICatalogService _catalogService;
|
||||||
|
private IOrderService _ordersService;
|
||||||
|
|
||||||
public OrderDetailViewModel(
|
public OrderDetailViewModel(
|
||||||
IBasketService orderService,
|
IBasketService orderService,
|
||||||
ICatalogService catalogService)
|
ICatalogService catalogService,
|
||||||
|
IOrderService ordersService)
|
||||||
{
|
{
|
||||||
_orderService = orderService;
|
_orderService = orderService;
|
||||||
_catalogService = catalogService;
|
_catalogService = catalogService;
|
||||||
|
_ordersService = ordersService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Order Order
|
public Order Order
|
||||||
@ -39,13 +45,10 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
|
|
||||||
var order = navigationData as Order;
|
var order = navigationData as Order;
|
||||||
|
|
||||||
foreach (var orderItem in order.OrderItems)
|
var authToken = Settings.AuthAccessToken;
|
||||||
{
|
Order = await _ordersService.GetOrderAsync(Convert.ToInt32(order.OrderNumber), authToken);
|
||||||
var catalogItem = await _catalogService.GetCatalogItemAsync(orderItem.ProductId.ToString());
|
|
||||||
orderItem.PictureUrl = catalogItem.PictureUri;
|
|
||||||
}
|
|
||||||
|
|
||||||
Order = order;
|
// TODO: Change Mock Order Service
|
||||||
|
|
||||||
IsBusy = false;
|
IsBusy = false;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
x:Class="eShopOnContainers.Core.Views.BasketView"
|
x:Class="eShopOnContainers.Core.Views.BasketView"
|
||||||
|
xmlns:behaviors="clr-namespace:eShopOnContainers.Core.Behaviors;assembly=eShopOnContainers.Core"
|
||||||
xmlns:templates="clr-namespace:eShopOnContainers.Core.Views.Templates;assembly=eShopOnContainers.Core"
|
xmlns:templates="clr-namespace:eShopOnContainers.Core.Views.Templates;assembly=eShopOnContainers.Core"
|
||||||
Title="Cart">
|
Title="Cart">
|
||||||
<ContentPage.Resources>
|
<ContentPage.Resources>
|
||||||
@ -73,7 +74,8 @@
|
|||||||
<!-- ITEMS -->
|
<!-- ITEMS -->
|
||||||
<ListView
|
<ListView
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
ItemsSource="{Binding BasketItems}"
|
ItemsSource="{Binding BasketItems}"
|
||||||
|
behaviors:ItemTappedCommandListViewBehavior.ItemTappedCommand="{Binding AddCommand}"
|
||||||
HeightRequest="{Binding BasketItems.Count, Converter={StaticResource ItemsToHeightConverter}}"
|
HeightRequest="{Binding BasketItems.Count, Converter={StaticResource ItemsToHeightConverter}}"
|
||||||
HasUnevenRows="True"
|
HasUnevenRows="True"
|
||||||
SeparatorVisibility="None"
|
SeparatorVisibility="None"
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
xmlns:templates="clr-namespace:eShopOnContainers.Core.Views.Templates;assembly=eShopOnContainers.Core"
|
xmlns:templates="clr-namespace:eShopOnContainers.Core.Views.Templates;assembly=eShopOnContainers.Core"
|
||||||
xmlns:animations="clr-namespace:eShopOnContainers.Core.Animations;assembly=eShopOnContainers.Core"
|
xmlns:animations="clr-namespace:eShopOnContainers.Core.Animations;assembly=eShopOnContainers.Core"
|
||||||
xmlns:triggers="clr-namespace:eShopOnContainers.Core.Triggers;assembly=eShopOnContainers.Core"
|
xmlns:triggers="clr-namespace:eShopOnContainers.Core.Triggers;assembly=eShopOnContainers.Core"
|
||||||
Title="{Binding Order.SequenceNumber}">
|
Title="{Binding Order.OrderNumber}">
|
||||||
<ContentPage.Resources>
|
<ContentPage.Resources>
|
||||||
<ResourceDictionary>
|
<ResourceDictionary>
|
||||||
|
|
||||||
@ -176,16 +176,16 @@
|
|||||||
<StackLayout
|
<StackLayout
|
||||||
Grid.Row="1">
|
Grid.Row="1">
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Order.ShippingAddress.Street}"
|
Text="{Binding Order.ShippingStreet}"
|
||||||
Style="{StaticResource AddressStyle}"/>
|
Style="{StaticResource AddressStyle}"/>
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Order.ShippingAddress.City}"
|
Text="{Binding Order.ShippingCity}"
|
||||||
Style="{StaticResource AddressStyle}"/>
|
Style="{StaticResource AddressStyle}"/>
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Order.ShippingAddress.CountryCode}"
|
Text="{Binding Order.ShippingState}"
|
||||||
Style="{StaticResource AddressStyle}"/>
|
Style="{StaticResource AddressStyle}"/>
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Order.ShippingAddress.Country}"
|
Text="{Binding Order.ShippingCountry}"
|
||||||
Style="{StaticResource AddressStyle}"/>
|
Style="{StaticResource AddressStyle}"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Behaviors\Base\BindableBehavior.cs" />
|
<Compile Include="Behaviors\Base\BindableBehavior.cs" />
|
||||||
<Compile Include="Behaviors\EventToCommandBehavior.cs" />
|
<Compile Include="Behaviors\EventToCommandBehavior.cs" />
|
||||||
|
<Compile Include="Behaviors\ItemTappedCommandListViewBehavior.cs" />
|
||||||
<Compile Include="Behaviors\WebViewNavigationBehavior.cs" />
|
<Compile Include="Behaviors\WebViewNavigationBehavior.cs" />
|
||||||
<Compile Include="Controls\BindablePicker.cs" />
|
<Compile Include="Controls\BindablePicker.cs" />
|
||||||
<Compile Include="Controls\AddBasketButton.xaml.cs">
|
<Compile Include="Controls\AddBasketButton.xaml.cs">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user