Changes related with Orders API integration.

Added new entities.
Fixed some UI binding errors.
This commit is contained in:
Javier Suárez Ruiz 2016-12-13 12:30:14 +01:00
parent 2ab72466fc
commit 8dc4002e09
22 changed files with 232 additions and 156 deletions

View File

@ -1,21 +1,42 @@
using System; using eShopOnContainers.Core.Models.User;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace eShopOnContainers.Core.Models.Orders namespace eShopOnContainers.Core.Models.Orders
{ {
public class Order public class Order
{ {
public int SequenceNumber { get; set; } public Order()
public decimal Total { get; set; } {
public DateTime OrderDate { get; set; } OrderItems = new List<OrderItem>();
public OrderStatus Status { get; set; } ShippingAddress = new Address();
public User.User ShippingAddress { get; set; } PaymentInfo = new PaymentInfo();
public int BuyerId { get; set; } }
public string Id;
public List<OrderItem> OrderItems { get; set; } public List<OrderItem> OrderItems { get; set; }
public string OrderNumber public string OrderNumber
{ {
get { return string.Format("{0}/{1}-{2}", OrderDate.Year, OrderDate.Month, SequenceNumber); } get
{
return string.Format("{0}/{1}-{2}", OrderDate.Year, OrderDate.Month, SequenceNumber);
}
}
public int SequenceNumber { get; set; }
public virtual string BuyerId { get; set; }
public virtual Address ShippingAddress { get; set; }
public virtual PaymentInfo PaymentInfo { get; set; }
public virtual DateTime OrderDate { get; set; }
public OrderState State { get; set; }
public decimal Total { get { return CalculateTotal(); } }
public decimal CalculateTotal()
{
return OrderItems.Sum(x => x.Quantity * x.UnitPrice);
} }
} }
} }

View File

@ -1,5 +1,4 @@
using eShopOnContainers.Core.Helpers; using eShopOnContainers.Core.Helpers;
using eShopOnContainers.Core.ViewModels.Base;
using eShopOnContainers.ViewModels.Base; using eShopOnContainers.ViewModels.Base;
using System; using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
@ -8,7 +7,7 @@ namespace eShopOnContainers.Core.Models.Orders
{ {
public class OrderItem : ExtendedBindableObject public class OrderItem : ExtendedBindableObject
{ {
private string _productImage; private string _pictureUrl;
private string _productId; private string _productId;
private Guid _orderId; private Guid _orderId;
private string _productName; private string _productName;
@ -85,13 +84,13 @@ namespace eShopOnContainers.Core.Models.Orders
public decimal Total { get { return Quantity * UnitPrice; } } public decimal Total { get { return Quantity * UnitPrice; } }
public string ProductImage public string PictureUrl
{ {
get { return _productImage; } get { return _pictureUrl; }
set set
{ {
_productImage = value; _pictureUrl = value;
RaisePropertyChanged(() => ProductImage); RaisePropertyChanged(() => PictureUrl);
} }
} }

View File

@ -0,0 +1,8 @@
namespace eShopOnContainers.Core.Models.Orders
{
public enum OrderState
{
InProcess,
Delivered
}
}

View File

@ -1,10 +0,0 @@
namespace eShopOnContainers.Core.Models.Orders
{
public enum OrderStatus
{
Pending,
WareHouse,
Delivered,
Lost
}
}

View File

@ -2,16 +2,9 @@
namespace eShopOnContainers.Core.Models.User namespace eShopOnContainers.Core.Models.User
{ {
public class User public class Address
{ {
public string GuidUser { get; set; } public Guid Id { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
public string CardNumber { get; set; }
public string SecurityNumber { get; set; }
public string Expiration { get; set; }
public string CardHolderName { get; set; }
public int CardType { get; set; }
public string Street { get; set; } public string Street { get; set; }
public string City { get; set; } public string City { get; set; }
public string State { get; set; } public string State { get; set; }

View File

@ -0,0 +1,18 @@
using eShopOnContainers.Core.Models.Orders;
using System;
namespace eShopOnContainers.Core.Models.User
{
public class PaymentInfo
{
public Guid Id { get; set; }
public string CardNumber { get; set; }
public string SecurityNumber { get; set; }
public int ExpirationMonth { get; set; }
public int ExpirationYear { get; set; }
public string CardHolderName { get; set; }
public CardType CardType { get; set; }
public string Expiration { get; set; }
}
}

View File

@ -1,5 +1,6 @@
using eShopOnContainers.Core.Extensions; using eShopOnContainers.Core.Extensions;
using eShopOnContainers.Core.Models.Orders; using eShopOnContainers.Core.Models.Orders;
using eShopOnContainers.Core.Models.User;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
@ -10,11 +11,43 @@ namespace eShopOnContainers.Core.Services.Order
{ {
public class OrderMockService : IOrderService public class OrderMockService : IOrderService
{ {
private static DateTime MockExpirationDate = DateTime.Now.AddYears(5);
private static Address MockAdress = new Address
{
Id = Guid.NewGuid(),
City = "Seattle, WA",
Street = "120 E 87th Street",
CountryCode = "98122",
Country = "United States",
Latitude = 40.785091,
Longitude = -73.968285,
State = "Seattle",
StateCode = "WA",
ZipCode = "98101"
};
private static PaymentInfo MockPaymentInfo = new PaymentInfo
{
Id = Guid.NewGuid(),
CardHolderName = "American Express",
CardNumber = "378282246310005",
CardType = new CardType
{
Id = 3,
Name = "MasterCard"
},
Expiration = MockExpirationDate.ToString(),
ExpirationMonth = MockExpirationDate.Month,
ExpirationYear = MockExpirationDate.Year,
SecurityNumber = "123"
};
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, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems }, new Models.Orders.Order { SequenceNumber = 123, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, PaymentInfo = MockPaymentInfo, ShippingAddress = MockAdress },
new Models.Orders.Order { SequenceNumber = 132, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems }, new Models.Orders.Order { SequenceNumber = 132, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, PaymentInfo = MockPaymentInfo, ShippingAddress = MockAdress },
new Models.Orders.Order { SequenceNumber = 231, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems }, new Models.Orders.Order { SequenceNumber = 231, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, PaymentInfo = MockPaymentInfo, ShippingAddress = MockAdress },
}; };
private static List<OrderItem> MockOrderItems = new List<OrderItem>() private static List<OrderItem> MockOrderItems = new List<OrderItem>()

View File

@ -50,7 +50,8 @@ namespace eShopOnContainers.Core.Services.RequestProvider
{ {
HttpClient httpClient = CreateHttpClient(token); HttpClient httpClient = CreateHttpClient(token);
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings)); string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
HttpResponseMessage response = await httpClient.PostAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json")); var content = new StringContent(serialized, Encoding.UTF8, "application/json");
HttpResponseMessage response = await httpClient.PostAsync(uri, content);
await HandleResponse(response); await HandleResponse(response);
@ -100,6 +101,7 @@ namespace eShopOnContainers.Core.Services.RequestProvider
private async Task HandleResponse(HttpResponseMessage response) private async Task HandleResponse(HttpResponseMessage response)
{ {
// TODO:
if (!response.IsSuccessStatusCode) if (!response.IsSuccessStatusCode)
{ {
var content = await response.Content.ReadAsStringAsync(); var content = await response.Content.ReadAsStringAsync();
@ -107,10 +109,10 @@ namespace eShopOnContainers.Core.Services.RequestProvider
if (response.StatusCode == HttpStatusCode.Forbidden if (response.StatusCode == HttpStatusCode.Forbidden
|| response.StatusCode == HttpStatusCode.Unauthorized) || response.StatusCode == HttpStatusCode.Unauthorized)
{ {
throw new ServiceAuthenticationException(content); // throw new ServiceAuthenticationException(content);
} }
throw new HttpRequestException(content); // throw new HttpRequestException(content);
} }
} }
} }

View File

@ -1,9 +1,11 @@
using System.Threading.Tasks; using eShopOnContainers.Core.Models.User;
using System.Threading.Tasks;
namespace eShopOnContainers.Core.Services.User namespace eShopOnContainers.Core.Services.User
{ {
public interface IUserService public interface IUserService
{ {
Task<Models.User.User> GetUserAsync(); Task<Address> GetAddressAsync();
Task<PaymentInfo> GetPaymentInfoAsync();
} }
} }

View File

@ -1,26 +1,56 @@
using System.Threading.Tasks; using System;
using eShopOnContainers.Core.Models.User;
using System.Threading.Tasks;
using eShopOnContainers.Core.Models.Orders;
namespace eShopOnContainers.Core.Services.User namespace eShopOnContainers.Core.Services.User
{ {
public class UserMockService : IUserService public class UserMockService : IUserService
{ {
private Models.User.User MockUser = new Models.User.User private static DateTime MockExpirationDate = DateTime.Now.AddYears(5);
private Address MockAdress = new Address
{ {
GuidUser = "9245fe4a-d402-451c-b9ed-9c1a04247482", Id = Guid.NewGuid(),
Name = "Jhon",
LastName = "Doe",
City = "Seattle, WA", City = "Seattle, WA",
Street = "120 E 87th Street", Street = "120 E 87th Street",
CountryCode = "98122", CountryCode = "98122",
Country = "United States" Country = "United States",
Latitude = 40.785091,
Longitude = -73.968285,
State = "Seattle",
StateCode = "WA",
ZipCode = "98101"
}; };
private PaymentInfo MockPaymentInfo = new PaymentInfo
{
Id = Guid.NewGuid(),
CardHolderName = "American Express",
CardNumber = "378282246310005",
CardType = new CardType
{
Id = 3,
Name = "MasterCard"
},
Expiration = MockExpirationDate.ToString(),
ExpirationMonth = MockExpirationDate.Month,
ExpirationYear = MockExpirationDate.Year,
SecurityNumber = "123"
};
public async Task<Models.User.User> GetUserAsync() public async Task<Address> GetAddressAsync()
{ {
await Task.Delay(500); await Task.Delay(500);
return MockUser; return MockAdress;
}
public async Task<PaymentInfo> GetPaymentInfoAsync()
{
await Task.Delay(500);
return MockPaymentInfo;
} }
} }
} }

View File

@ -4,11 +4,11 @@ using eShopOnContainers.Services;
using System; using System;
using eShopOnContainers.Core.Services.Catalog; using eShopOnContainers.Core.Services.Catalog;
using eShopOnContainers.Core.Services.OpenUrl; using eShopOnContainers.Core.Services.OpenUrl;
using eShopOnContainers.Core.Services.User;
using eShopOnContainers.Core.Services.RequestProvider; using eShopOnContainers.Core.Services.RequestProvider;
using eShopOnContainers.Core.Services.Basket; 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;
namespace eShopOnContainers.ViewModels.Base namespace eShopOnContainers.ViewModels.Base
{ {

View File

@ -1,7 +1,6 @@
using eShopOnContainers.Core.Helpers; using eShopOnContainers.Core.Helpers;
using eShopOnContainers.Core.Models.Basket; using eShopOnContainers.Core.Models.Basket;
using eShopOnContainers.Core.Models.Catalog; using eShopOnContainers.Core.Models.Catalog;
using eShopOnContainers.Core.Models.User;
using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.Basket;
using eShopOnContainers.Core.Services.User; using eShopOnContainers.Core.Services.User;
using eShopOnContainers.Core.ViewModels.Base; using eShopOnContainers.Core.ViewModels.Base;
@ -18,19 +17,19 @@ namespace eShopOnContainers.Core.ViewModels
{ {
public class BasketViewModel : ViewModelBase public class BasketViewModel : ViewModelBase
{ {
private User _user;
private int _badgeCount; private int _badgeCount;
private ObservableCollection<BasketItem> _basketItems; private ObservableCollection<BasketItem> _basketItems;
private decimal _total; private decimal _total;
private IUserService _userService;
private IBasketService _basketService; private IBasketService _basketService;
private IUserService _userService;
public BasketViewModel(IUserService userService, public BasketViewModel(
IBasketService basketService) IBasketService basketService,
IUserService userService)
{ {
_userService = userService;
_basketService = basketService; _basketService = basketService;
_userService = userService;
} }
public int BadgeCount public int BadgeCount
@ -65,7 +64,7 @@ namespace eShopOnContainers.Core.ViewModels
public ICommand CheckoutCommand => new Command(Checkout); public ICommand CheckoutCommand => new Command(Checkout);
public override async 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) =>
{ {
@ -88,8 +87,9 @@ namespace eShopOnContainers.Core.ViewModels
ReCalculateTotal(); ReCalculateTotal();
}); });
_user = await _userService.GetUserAsync();
BasketItems = new ObservableCollection<BasketItem>(); BasketItems = new ObservableCollection<BasketItem>();
return base.InitializeAsync(navigationData);
} }
private void AddCatalogItem(CatalogItem item) private void AddCatalogItem(CatalogItem item)
@ -121,7 +121,7 @@ namespace eShopOnContainers.Core.ViewModels
ReCalculateTotal(); ReCalculateTotal();
} }
private void ReCalculateTotal() private async void ReCalculateTotal()
{ {
Total = 0; Total = 0;
@ -135,11 +135,13 @@ namespace eShopOnContainers.Core.ViewModels
Total += (orderItem.Quantity * orderItem.UnitPrice); Total += (orderItem.Quantity * orderItem.UnitPrice);
} }
var shippingAddress = await _userService.GetAddressAsync();
var authToken = Settings.AuthAccessToken; var authToken = Settings.AuthAccessToken;
_basketService.UpdateBasketAsync(new CustomerBasket await _basketService.UpdateBasketAsync(new CustomerBasket
{ {
BuyerId = _user.GuidUser, BuyerId = shippingAddress.Id.ToString(),
Items = BasketItems.ToList() Items = BasketItems.ToList()
}, authToken); }, authToken);
} }

View File

@ -6,10 +6,11 @@ using eShopOnContainers.Core.ViewModels.Base;
using eShopOnContainers.Core.Models.Catalog; using eShopOnContainers.Core.Models.Catalog;
using eShopOnContainers.Core.Services.Catalog; using eShopOnContainers.Core.Services.Catalog;
using System.Windows.Input; using System.Windows.Input;
using eShopOnContainers.Core.Services.User;
using System.Linq; using System.Linq;
using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.Basket;
using eShopOnContainers.Core.Helpers; using eShopOnContainers.Core.Helpers;
using System;
using eShopOnContainers.Core.Services.User;
namespace eShopOnContainers.Core.ViewModels namespace eShopOnContainers.Core.ViewModels
{ {
@ -21,17 +22,18 @@ namespace eShopOnContainers.Core.ViewModels
private ObservableCollection<CatalogType> _types; private ObservableCollection<CatalogType> _types;
private CatalogType _type; private CatalogType _type;
private IUserService _userService;
private IBasketService _basketService; private IBasketService _basketService;
private ICatalogService _productsService; private ICatalogService _productsService;
private IUserService _userService;
public CatalogViewModel(IUserService userService, public CatalogViewModel(
IBasketService basketService, IBasketService basketService,
ICatalogService productsService) ICatalogService productsService,
IUserService userService)
{ {
_userService = userService;
_basketService = basketService; _basketService = basketService;
_productsService = productsService; _productsService = productsService;
_userService = userService;
} }
public ObservableCollection<CatalogItem> Products public ObservableCollection<CatalogItem> Products
@ -102,13 +104,13 @@ namespace eShopOnContainers.Core.ViewModels
Brands = await _productsService.GetCatalogBrandAsync(); Brands = await _productsService.GetCatalogBrandAsync();
Types = await _productsService.GetCatalogTypeAsync(); Types = await _productsService.GetCatalogTypeAsync();
var user = await _userService.GetUserAsync(); var shippingAddress = await _userService.GetAddressAsync();
var authToken = Settings.AuthAccessToken; var authToken = Settings.AuthAccessToken;
var basket = await _basketService.GetBasketAsync(user.GuidUser, authToken);
var basket = await _basketService.GetBasketAsync(shippingAddress.Id.ToString(), authToken);
if (basket != null && basket.Items.Any()) if (basket != null && basket.Items.Any())
{ {
System.Diagnostics.Debug.WriteLine(basket.Items.Count);
MessagingCenter.Send(this, MessengerKeys.UpdateBasket, basket.Items); MessagingCenter.Send(this, MessengerKeys.UpdateBasket, basket.Items);
} }

View File

@ -1,19 +1,18 @@
using eShopOnContainers.Core.Models.Navigation; using eShopOnContainers.Core.Models.Navigation;
using eShopOnContainers.Core.Services.User;
using eShopOnContainers.ViewModels.Base; using eShopOnContainers.ViewModels.Base;
using System.Windows.Input; using System.Windows.Input;
using Xamarin.Forms; using Xamarin.Forms;
using System.Threading.Tasks; using System.Threading.Tasks;
using eShopOnContainers.Core.Models.User;
using eShopOnContainers.Core.Models.Orders; using eShopOnContainers.Core.Models.Orders;
using System; using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq;
using eShopOnContainers.Core.Models.Basket; using eShopOnContainers.Core.Models.Basket;
using System.Collections.Generic; using System.Collections.Generic;
using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.Basket;
using eShopOnContainers.Core.Services.Order; using eShopOnContainers.Core.Services.Order;
using eShopOnContainers.Core.Helpers; using eShopOnContainers.Core.Helpers;
using eShopOnContainers.Core.Services.User;
using eShopOnContainers.Core.Models.User;
namespace eShopOnContainers.Core.ViewModels namespace eShopOnContainers.Core.ViewModels
{ {
@ -21,19 +20,20 @@ namespace eShopOnContainers.Core.ViewModels
{ {
private ObservableCollection<BasketItem> _orderItems; private ObservableCollection<BasketItem> _orderItems;
private Order _order; private Order _order;
private User _user; private Address _shippingAddress;
private IUserService _userService;
private IBasketService _basketService; private IBasketService _basketService;
private IOrderService _orderService; private IOrderService _orderService;
private IUserService _userService;
public CheckoutViewModel(IUserService userService, public CheckoutViewModel(
IBasketService basketService, IBasketService basketService,
IOrderService orderService) IOrderService orderService,
IUserService userService)
{ {
_basketService = basketService; _basketService = basketService;
_userService = userService;
_orderService = orderService; _orderService = orderService;
_userService = userService;
} }
public ObservableCollection<BasketItem> OrderItems public ObservableCollection<BasketItem> OrderItems
@ -56,13 +56,13 @@ namespace eShopOnContainers.Core.ViewModels
} }
} }
public User User public Address ShippingAddress
{ {
get { return _user; } get { return _shippingAddress; }
set set
{ {
_user = value; _shippingAddress = value;
RaisePropertyChanged(() => User); RaisePropertyChanged(() => ShippingAddress);
} }
} }
@ -78,15 +78,16 @@ namespace eShopOnContainers.Core.ViewModels
OrderItems = orderItems; OrderItems = orderItems;
User = await _userService.GetUserAsync(); ShippingAddress = await _userService.GetAddressAsync();
var paymentInfo = await _userService.GetPaymentInfoAsync();
Order = new Order Order = new Order
{ {
ShippingAddress = User,
OrderItems = CreateOrderItems(orderItems), OrderItems = CreateOrderItems(orderItems),
Status = OrderStatus.Pending, State = OrderState.InProcess,
OrderDate = DateTime.Now, OrderDate = DateTime.Now,
Total = GetOrderTotal() PaymentInfo = paymentInfo,
ShippingAddress = _shippingAddress
}; };
IsBusy = false; IsBusy = false;
@ -98,7 +99,8 @@ namespace eShopOnContainers.Core.ViewModels
var authToken = Settings.AuthAccessToken; var authToken = Settings.AuthAccessToken;
await _orderService.CreateOrderAsync(Order); await _orderService.CreateOrderAsync(Order);
await _basketService.ClearBasketAsync(User.GuidUser, authToken);
await _basketService.ClearBasketAsync(_shippingAddress.Id.ToString(), authToken);
await NavigationService.NavigateToAsync<MainViewModel>(new TabParameter { TabIndex = 1 }); await NavigationService.NavigateToAsync<MainViewModel>(new TabParameter { TabIndex = 1 });
await NavigationService.RemoveLastFromBackStackAsync(); await NavigationService.RemoveLastFromBackStackAsync();
@ -117,7 +119,7 @@ namespace eShopOnContainers.Core.ViewModels
{ {
ProductId = basketItem.ProductId, ProductId = basketItem.ProductId,
ProductName = basketItem.ProductName, ProductName = basketItem.ProductName,
ProductImage = basketItem.PictureUrl, PictureUrl = basketItem.PictureUrl,
Quantity = basketItem.Quantity, Quantity = basketItem.Quantity,
UnitPrice = basketItem.UnitPrice UnitPrice = basketItem.UnitPrice
}); });
@ -125,17 +127,5 @@ namespace eShopOnContainers.Core.ViewModels
return orderItems; return orderItems;
} }
private decimal GetOrderTotal()
{
decimal total = 0;
foreach (var orderItem in OrderItems)
{
total += orderItem.Total;
}
return total;
}
} }
} }

View File

@ -209,13 +209,6 @@ namespace eShopOnContainers.Core.ViewModels
} }
} }
} }
/*
if(url.Contains("endsession"))
{
await SignInAsync();
}
*/
} }
private bool Validate() private bool Validate()

View File

@ -2,8 +2,6 @@
using eShopOnContainers.Core.Models.Orders; 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.User;
using eShopOnContainers.Core.Models.User;
using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.Basket;
namespace eShopOnContainers.Core.ViewModels namespace eShopOnContainers.Core.ViewModels
@ -11,19 +9,16 @@ namespace eShopOnContainers.Core.ViewModels
public class OrderDetailViewModel : ViewModelBase public class OrderDetailViewModel : ViewModelBase
{ {
private Order _order; private Order _order;
private User _user;
private IBasketService _orderService; private IBasketService _orderService;
private ICatalogService _catalogService; private ICatalogService _catalogService;
private IUserService _userService;
public OrderDetailViewModel(IBasketService orderService, public OrderDetailViewModel(
ICatalogService catalogService, IBasketService orderService,
IUserService userService) ICatalogService catalogService)
{ {
_orderService = orderService; _orderService = orderService;
_catalogService = catalogService; _catalogService = catalogService;
_userService = userService;
} }
public Order Order public Order Order
@ -36,16 +31,6 @@ namespace eShopOnContainers.Core.ViewModels
} }
} }
public User User
{
get { return _user; }
set
{
_user = value;
RaisePropertyChanged(() => User);
}
}
public override async Task InitializeAsync(object navigationData) public override async Task InitializeAsync(object navigationData)
{ {
if (navigationData is Order) if (navigationData is Order)
@ -57,11 +42,10 @@ namespace eShopOnContainers.Core.ViewModels
foreach (var orderItem in order.OrderItems) foreach (var orderItem in order.OrderItems)
{ {
var catalogItem = await _catalogService.GetCatalogItemAsync(orderItem.ProductId.ToString()); var catalogItem = await _catalogService.GetCatalogItemAsync(orderItem.ProductId.ToString());
orderItem.ProductImage = catalogItem.PictureUri; orderItem.PictureUrl = catalogItem.PictureUri;
} }
Order = order; Order = order;
User = await _userService.GetUserAsync();
IsBusy = false; IsBusy = false;
} }

View File

@ -133,7 +133,7 @@
Text="STATUS" Text="STATUS"
Style="{StaticResource OrderTitleStyle}"/> Style="{StaticResource OrderTitleStyle}"/>
<Label <Label
Text="{Binding Order.Status, Converter={StaticResource ToUpperConverter}}" Text="{Binding Order.State, Converter={StaticResource ToUpperConverter}}"
Style="{StaticResource OrderContentStyle}"/> Style="{StaticResource OrderContentStyle}"/>
</StackLayout> </StackLayout>
</Grid> </Grid>
@ -153,16 +153,16 @@
<StackLayout <StackLayout
Grid.Row="1"> Grid.Row="1">
<Label <Label
Text="{Binding User.Street}" Text="{Binding ShippingAddress.Street}"
Style="{StaticResource AddressStyle}"/> Style="{StaticResource AddressStyle}"/>
<Label <Label
Text="{Binding User.City}" Text="{Binding ShippingAddress.City}"
Style="{StaticResource AddressStyle}"/> Style="{StaticResource AddressStyle}"/>
<Label <Label
Text="{Binding User.CountryCode}" Text="{Binding ShippingAddress.CountryCode}"
Style="{StaticResource AddressStyle}"/> Style="{StaticResource AddressStyle}"/>
<Label <Label
Text="{Binding User.Country}" Text="{Binding ShippingAddress.Country}"
Style="{StaticResource AddressStyle}"/> Style="{StaticResource AddressStyle}"/>
</StackLayout> </StackLayout>
</Grid> </Grid>

View File

@ -155,7 +155,7 @@
Text="STATUS" Text="STATUS"
Style="{StaticResource OrderTitleStyle}"/> Style="{StaticResource OrderTitleStyle}"/>
<Label <Label
Text="{Binding Order.Status, Converter={StaticResource ToUpperConverter}}" Text="{Binding Order.State, Converter={StaticResource ToUpperConverter}}"
Style="{StaticResource OrderContentStyle}"/> Style="{StaticResource OrderContentStyle}"/>
</StackLayout> </StackLayout>
</Grid> </Grid>
@ -176,16 +176,16 @@
<StackLayout <StackLayout
Grid.Row="1"> Grid.Row="1">
<Label <Label
Text="{Binding User.Street}" Text="{Binding Order.ShippingAddress.Street}"
Style="{StaticResource AddressStyle}"/> Style="{StaticResource AddressStyle}"/>
<Label <Label
Text="{Binding User.City}" Text="{Binding Order.ShippingAddress.City}"
Style="{StaticResource AddressStyle}"/> Style="{StaticResource AddressStyle}"/>
<Label <Label
Text="{Binding User.CountryCode}" Text="{Binding Order.ShippingAddress.CountryCode}"
Style="{StaticResource AddressStyle}"/> Style="{StaticResource AddressStyle}"/>
<Label <Label
Text="{Binding User.Country}" Text="{Binding Order.ShippingAddress.Country}"
Style="{StaticResource AddressStyle}"/> Style="{StaticResource AddressStyle}"/>
</StackLayout> </StackLayout>
</Grid> </Grid>

View File

@ -73,7 +73,7 @@
<ffimageloading:CachedImage <ffimageloading:CachedImage
Grid.Column="0" Grid.Column="0"
Grid.Row="0" Grid.Row="0"
Source="{Binding ProductImage, Converter={StaticResource ImageConverter}}" Source="{Binding PictureUrl, Converter={StaticResource ImageConverter}}"
CacheDuration="30" CacheDuration="30"
CacheType="Disk" CacheType="Disk"
DownsampleToViewSize="True" DownsampleToViewSize="True"

View File

@ -78,7 +78,7 @@
Text="STATUS" Text="STATUS"
Style="{StaticResource OrderTitleStyle}"/> Style="{StaticResource OrderTitleStyle}"/>
<Label <Label
Text="{Binding Status, Converter={StaticResource ToUpperConverter}}" Text="{Binding State, Converter={StaticResource ToUpperConverter}}"
Style="{StaticResource OrderContentStyle}"/> Style="{StaticResource OrderContentStyle}"/>
</StackLayout> </StackLayout>
<Grid <Grid

View File

@ -76,10 +76,11 @@
<Compile Include="Models\Orders\CardType.cs" /> <Compile Include="Models\Orders\CardType.cs" />
<Compile Include="Models\Orders\Order.cs" /> <Compile Include="Models\Orders\Order.cs" />
<Compile Include="Models\Orders\OrderItem.cs" /> <Compile Include="Models\Orders\OrderItem.cs" />
<Compile Include="Models\Orders\OrderStatus.cs" /> <Compile Include="Models\Orders\OrderState.cs" />
<Compile Include="Models\Catalog\CatalogItem.cs" /> <Compile Include="Models\Catalog\CatalogItem.cs" />
<Compile Include="Models\User\Address.cs" />
<Compile Include="Models\User\LogoutParameter.cs" /> <Compile Include="Models\User\LogoutParameter.cs" />
<Compile Include="Models\User\User.cs" /> <Compile Include="Models\User\PaymentInfo.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\Catalog\CatalogService.cs" /> <Compile Include="Services\Catalog\CatalogService.cs" />
<Compile Include="Services\Dialog\DialogService.cs" /> <Compile Include="Services\Dialog\DialogService.cs" />

View File

@ -1,5 +1,5 @@
using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.Order;
using eShopOnContainers.Core.Services.User; using eShopOnContainers.Core.Services.RequestProvider;
using System.Threading.Tasks; using System.Threading.Tasks;
using Xunit; using Xunit;
@ -10,12 +10,20 @@ namespace eShopOnContainers.UnitTests
[Fact] [Fact]
public async Task GetFakeOrdersTest() public async Task GetFakeOrdersTest()
{ {
var userMockService = new UserMockService(); var ordersMockService = new OrderMockService();
var user = await userMockService.GetUserAsync(); var result = await ordersMockService.GetOrdersAsync();
var ordersMockService = new BasketMockService(); Assert.NotEqual(0, result.Count);
var result = await ordersMockService.GetBasketAsync(user.GuidUser); }
Assert.NotEqual(0, result.Items.Count);
[Fact]
public async Task GetOrdersTest()
{
var requestProvider = new RequestProvider();
var ordersService = new OrderService(requestProvider);
var result = await ordersService.GetOrdersAsync();
Assert.NotEqual(0, result.Count);
} }
} }
} }