From 19da19fa8433e85d5de22010b4c7150b9c8e4308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Su=C3=A1rez=20Ruiz?= Date: Mon, 19 Dec 2016 12:31:11 +0100 Subject: [PATCH] Changes in client APIs integration --- eShopOnContainers.sln | 3 ++ .../ItemTappedCommandListViewBehavior.cs | 52 +++++++++++++++++++ .../Converters/ToUpperConverter.cs | 5 +- .../Models/Basket/BasketItem.cs | 15 +++++- .../Models/Orders/CardType.cs | 8 --- .../Models/Orders/Order.cs | 28 +++++----- .../Models/Orders/OrderItem.cs | 14 ++++- .../Services/Basket/BasketService.cs | 17 ++++-- .../Services/Identity/IIdentityService.cs | 4 +- .../Services/Order/OrderMockService.cs | 15 +++--- .../ViewModels/Base/ViewModelLocator.cs | 11 ++++ .../ViewModels/BasketViewModel.cs | 19 ++++++- .../ViewModels/CheckoutViewModel.cs | 23 +++++++- .../ViewModels/OrderDetailViewModel.cs | 17 +++--- .../Views/BasketView.xaml | 6 ++- .../Views/OrderDetailView.xaml | 10 ++-- .../eShopOnContainers.Core.csproj | 1 + 17 files changed, 189 insertions(+), 59 deletions(-) create mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/ItemTappedCommandListViewBehavior.cs delete mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/CardType.cs diff --git a/eShopOnContainers.sln b/eShopOnContainers.sln index 9c33cab6f..4e735a06d 100644 --- a/eShopOnContainers.sln +++ b/eShopOnContainers.sln @@ -427,6 +427,8 @@ Global {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|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.Build.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.Deploy.0 = 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.Build.0 = Debug|x64 {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.Deploy.0 = Debug|x64 diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/ItemTappedCommandListViewBehavior.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/ItemTappedCommandListViewBehavior.cs new file mode 100644 index 000000000..a14bd7993 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/ItemTappedCommandListViewBehavior.cs @@ -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); + } + } +} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Converters/ToUpperConverter.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Converters/ToUpperConverter.cs index 2db9a6805..451ee37aa 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Converters/ToUpperConverter.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Converters/ToUpperConverter.cs @@ -8,7 +8,10 @@ namespace eShopOnContainers.Core.Converters { 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) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs index f95a10b49..e02f66668 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs @@ -1,9 +1,12 @@ using System; +using Xamarin.Forms; namespace eShopOnContainers.Core.Models.Basket { - public class BasketItem + public class BasketItem : BindableObject { + private int _quantity; + public string Id { get; set; } public string ProductId { get; set; } @@ -12,7 +15,15 @@ namespace eShopOnContainers.Core.Models.Basket 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; } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/CardType.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/CardType.cs deleted file mode 100644 index 07873e79c..000000000 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/CardType.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace eShopOnContainers.Core.Models.Orders -{ - public class CardType - { - public int Id { get; set; } - public string Name { get; set; } - } -} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/Order.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/Order.cs index 2d3e3c6b2..15967156e 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/Order.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/Order.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using Newtonsoft.Json; namespace eShopOnContainers.Core.Models.Orders @@ -17,19 +16,25 @@ namespace eShopOnContainers.Core.Models.Orders public int SequenceNumber { get; set; } + [JsonProperty("date")] public DateTime OrderDate { get; set; } + [JsonProperty("status")] public OrderState State { get; set; } + [JsonProperty("city")] public string ShippingCity { get; set; } + [JsonProperty("street")] public string ShippingStreet { get; set; } + [JsonProperty("state")] public string ShippingState { get; set; } + [JsonProperty("country")] public string ShippingCountry { get; set; } - public string CardType { get; set; } + public int CardTypeId { get; set; } public string CardNumber { get; set; } @@ -39,22 +44,13 @@ namespace eShopOnContainers.Core.Models.Orders public string CardSecurityNumber { get; set; } - [JsonProperty("items")] + [JsonProperty("orderitems")] public List OrderItems { get; set; } - public decimal Total { get { return CalculateTotal(); } } + [JsonProperty("total")] + public decimal Total { get; set; } - public string OrderNumber { get { return CalculateOrderNumber(); } } - - - 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); - } + [JsonProperty("ordernumber")] + public string OrderNumber { get; set; } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs index 5c7565ce7..8732a59f4 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs @@ -1,15 +1,25 @@ -using System; +using Newtonsoft.Json; +using System; namespace eShopOnContainers.Core.Models.Orders { public class OrderItem { public string ProductId { get; set; } - public Guid OrderId { get; set; } + public Guid? OrderId { get; set; } + + [JsonProperty("unitprice")] public decimal UnitPrice { get; set; } + + [JsonProperty("productname")] public string ProductName { get; set; } + + [JsonProperty("pictureurl")] public string PictureUrl { get; set; } + + [JsonProperty("units")] public int Quantity { get; set; } + public decimal Discount { get; set; } public decimal Total { get { return Quantity * UnitPrice; } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs index 104d8fe11..bf89afb13 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs @@ -41,13 +41,20 @@ namespace eShopOnContainers.Core.Services.Basket public async Task 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) @@ -58,7 +65,7 @@ namespace eShopOnContainers.Core.Services.Basket string uri = builder.ToString(); - await _requestProvider.DeleteAsync(uri, token); + await _requestProvider.DeleteAsync(uri, token); } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IIdentityService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IIdentityService.cs index 134e2ee73..118690002 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IIdentityService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IIdentityService.cs @@ -1,4 +1,6 @@ -namespace eShopOnContainers.Core.Services.Identity +using System.Threading.Tasks; + +namespace eShopOnContainers.Core.Services.Identity { public interface IIdentityService { diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs index dc1fb1447..e1491a75d 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; +using Xamarin.Forms; namespace eShopOnContainers.Core.Services.Order { @@ -45,15 +46,15 @@ namespace eShopOnContainers.Core.Services.Order private List MockOrders = new List() { - 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 { 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 { 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 = "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 { 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 { 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 MockOrderItems = new List() { - 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.MockCatalogItemId03, Discount = 0, ProductName = ".NET Bot Black Sweatshirt (M)", Quantity = 2, UnitPrice = 19.95M } + 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, PictureUrl = Device.OS != TargetPlatform.Windows ? "fake_product_03.png" : "Assets/fake_product_03.png" } }; private static List MockCardTypes = new List() @@ -88,7 +89,9 @@ namespace eShopOnContainers.Core.Services.Order await Task.Delay(500); if (!string.IsNullOrEmpty(token)) - return MockOrders.FirstOrDefault(o => o.SequenceNumber == orderId); + return MockOrders + .FirstOrDefault(o => o.OrderNumber.Equals(orderId.ToString(), + StringComparison.CurrentCultureIgnoreCase)); else return new Models.Orders.Order(); } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs index 859ba811e..8535249e6 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs @@ -9,6 +9,11 @@ using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.Identity; using eShopOnContainers.Core.Services.Order; 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 { @@ -58,6 +63,12 @@ namespace eShopOnContainers.ViewModels.Base public void UpdateDependencies(bool useMockServices) { + // Clear message subscriptions + var basketViewModel = _unityContainer.Resolve(); + MessagingCenter.Unsubscribe>(basketViewModel, MessengerKeys.UpdateBasket); + MessagingCenter.Unsubscribe(basketViewModel, MessengerKeys.AddProduct); + + // Change injected dpendencies if (useMockServices) { _unityContainer.RegisterInstance(new CatalogMockService()); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs index d56b11466..3ac5123aa 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs @@ -62,14 +62,14 @@ namespace eShopOnContainers.Core.ViewModels } } + public ICommand AddCommand => new Command(AddItem); + public ICommand CheckoutCommand => new Command(Checkout); public override Task InitializeAsync(object navigationData) { MessagingCenter.Subscribe>(this, MessengerKeys.UpdateBasket, (sender, arg) => { - MessagingCenter.Unsubscribe>(this, MessengerKeys.UpdateBasket); - foreach (var basketItem in arg) { BadgeCount += basketItem.Quantity; @@ -111,6 +111,21 @@ namespace eShopOnContainers.Core.ViewModels 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) { BasketItems.Add(item); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs index 74c510359..b58ea8bb3 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs @@ -83,16 +83,19 @@ namespace eShopOnContainers.Core.ViewModels ShippingAddress = new Address { + Id = new Guid(userInfo.UserId), Street = userInfo?.Street, ZipCode = userInfo?.ZipCode, State = userInfo?.State, Country = userInfo?.Country, + City = string.Empty }; var paymentInfo = new PaymentInfo { CardNumber = userInfo?.CardNumber, CardHolderName = userInfo?.CardHolder, + CardType = new CardType { Id = 3, Name = "MasterCard" }, SecurityNumber = userInfo?.CardSecurityNumber }; @@ -106,9 +109,12 @@ namespace eShopOnContainers.Core.ViewModels CardNumber = paymentInfo.CardNumber, CardSecurityNumber = paymentInfo.SecurityNumber, CardExpiration = DateTime.Now.AddYears(5), + CardTypeId = paymentInfo.CardType.Id, ShippingState = _shippingAddress.State, ShippingCountry = _shippingAddress.Country, - ShippingStreet = _shippingAddress.Street + ShippingStreet = _shippingAddress.Street, + ShippingCity = _shippingAddress.City, + Total = CalculateTotal(CreateOrderItems(orderItems)) }; IsBusy = false; @@ -126,7 +132,7 @@ namespace eShopOnContainers.Core.ViewModels await NavigationService.NavigateToAsync(new TabParameter { TabIndex = 1 }); 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(); } @@ -138,6 +144,7 @@ namespace eShopOnContainers.Core.ViewModels { orderItems.Add(new OrderItem { + OrderId = null, ProductId = basketItem.ProductId, ProductName = basketItem.ProductName, PictureUrl = basketItem.PictureUrl, @@ -148,5 +155,17 @@ namespace eShopOnContainers.Core.ViewModels return orderItems; } + + private decimal CalculateTotal(List orderItems) + { + decimal total = 0; + + foreach(var orderItem in orderItems) + { + total += (orderItem.Quantity * orderItem.UnitPrice); + } + + return total; + } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/OrderDetailViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/OrderDetailViewModel.cs index 58da9f5a2..d87b39262 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/OrderDetailViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/OrderDetailViewModel.cs @@ -3,6 +3,9 @@ using eShopOnContainers.Core.Models.Orders; using eShopOnContainers.ViewModels.Base; using eShopOnContainers.Core.Services.Catalog; using eShopOnContainers.Core.Services.Basket; +using eShopOnContainers.Core.Services.Order; +using System; +using eShopOnContainers.Core.Helpers; namespace eShopOnContainers.Core.ViewModels { @@ -12,13 +15,16 @@ namespace eShopOnContainers.Core.ViewModels private IBasketService _orderService; private ICatalogService _catalogService; + private IOrderService _ordersService; public OrderDetailViewModel( IBasketService orderService, - ICatalogService catalogService) + ICatalogService catalogService, + IOrderService ordersService) { _orderService = orderService; _catalogService = catalogService; + _ordersService = ordersService; } public Order Order @@ -39,13 +45,10 @@ namespace eShopOnContainers.Core.ViewModels var order = navigationData as Order; - foreach (var orderItem in order.OrderItems) - { - var catalogItem = await _catalogService.GetCatalogItemAsync(orderItem.ProductId.ToString()); - orderItem.PictureUrl = catalogItem.PictureUri; - } + var authToken = Settings.AuthAccessToken; + Order = await _ordersService.GetOrderAsync(Convert.ToInt32(order.OrderNumber), authToken); - Order = order; + // TODO: Change Mock Order Service IsBusy = false; } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/BasketView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/BasketView.xaml index 8f4117a50..12950583f 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/BasketView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/BasketView.xaml @@ -1,7 +1,8 @@  @@ -73,7 +74,8 @@ + Title="{Binding Order.OrderNumber}"> @@ -176,16 +176,16 @@ diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj index fddbac45f..2411cc6dc 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj @@ -44,6 +44,7 @@ +