Changes related with Orders API integration.
Added new entities. Fixed some UI binding errors.
This commit is contained in:
parent
2ab72466fc
commit
8dc4002e09
@ -1,21 +1,42 @@
|
||||
using System;
|
||||
using eShopOnContainers.Core.Models.User;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace eShopOnContainers.Core.Models.Orders
|
||||
{
|
||||
public class Order
|
||||
{
|
||||
public int SequenceNumber { get; set; }
|
||||
public decimal Total { get; set; }
|
||||
public DateTime OrderDate { get; set; }
|
||||
public OrderStatus Status { get; set; }
|
||||
public User.User ShippingAddress { get; set; }
|
||||
public int BuyerId { get; set; }
|
||||
public Order()
|
||||
{
|
||||
OrderItems = new List<OrderItem>();
|
||||
ShippingAddress = new Address();
|
||||
PaymentInfo = new PaymentInfo();
|
||||
}
|
||||
|
||||
public string Id;
|
||||
public List<OrderItem> OrderItems { get; set; }
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
using eShopOnContainers.Core.Helpers;
|
||||
using eShopOnContainers.Core.ViewModels.Base;
|
||||
using eShopOnContainers.ViewModels.Base;
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
@ -8,7 +7,7 @@ namespace eShopOnContainers.Core.Models.Orders
|
||||
{
|
||||
public class OrderItem : ExtendedBindableObject
|
||||
{
|
||||
private string _productImage;
|
||||
private string _pictureUrl;
|
||||
private string _productId;
|
||||
private Guid _orderId;
|
||||
private string _productName;
|
||||
@ -85,13 +84,13 @@ namespace eShopOnContainers.Core.Models.Orders
|
||||
|
||||
public decimal Total { get { return Quantity * UnitPrice; } }
|
||||
|
||||
public string ProductImage
|
||||
public string PictureUrl
|
||||
{
|
||||
get { return _productImage; }
|
||||
get { return _pictureUrl; }
|
||||
set
|
||||
{
|
||||
_productImage = value;
|
||||
RaisePropertyChanged(() => ProductImage);
|
||||
_pictureUrl = value;
|
||||
RaisePropertyChanged(() => PictureUrl);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,8 @@
|
||||
namespace eShopOnContainers.Core.Models.Orders
|
||||
{
|
||||
public enum OrderState
|
||||
{
|
||||
InProcess,
|
||||
Delivered
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
namespace eShopOnContainers.Core.Models.Orders
|
||||
{
|
||||
public enum OrderStatus
|
||||
{
|
||||
Pending,
|
||||
WareHouse,
|
||||
Delivered,
|
||||
Lost
|
||||
}
|
||||
}
|
@ -2,16 +2,9 @@
|
||||
|
||||
namespace eShopOnContainers.Core.Models.User
|
||||
{
|
||||
public class User
|
||||
public class Address
|
||||
{
|
||||
public string GuidUser { 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 Guid Id { get; set; }
|
||||
public string Street { get; set; }
|
||||
public string City { get; set; }
|
||||
public string State { get; set; }
|
||||
@ -22,4 +15,4 @@ namespace eShopOnContainers.Core.Models.User
|
||||
public double Latitude { get; set; }
|
||||
public double Longitude { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
using eShopOnContainers.Core.Extensions;
|
||||
using eShopOnContainers.Core.Models.Orders;
|
||||
using eShopOnContainers.Core.Models.User;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
@ -10,11 +11,43 @@ namespace eShopOnContainers.Core.Services.Order
|
||||
{
|
||||
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>()
|
||||
{
|
||||
new Models.Orders.Order { SequenceNumber = 123, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems },
|
||||
new Models.Orders.Order { SequenceNumber = 132, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems },
|
||||
new Models.Orders.Order { SequenceNumber = 231, 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, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, PaymentInfo = MockPaymentInfo, ShippingAddress = MockAdress },
|
||||
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>()
|
||||
@ -29,7 +62,7 @@ namespace eShopOnContainers.Core.Services.Order
|
||||
new CardType { Id = 2, Name = "Visa" },
|
||||
new CardType { Id = 3, Name = "MasterCard" },
|
||||
};
|
||||
|
||||
|
||||
public async Task CreateOrderAsync(Models.Orders.Order newOrder)
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
@ -50,7 +50,8 @@ namespace eShopOnContainers.Core.Services.RequestProvider
|
||||
{
|
||||
HttpClient httpClient = CreateHttpClient(token);
|
||||
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);
|
||||
|
||||
@ -100,6 +101,7 @@ namespace eShopOnContainers.Core.Services.RequestProvider
|
||||
|
||||
private async Task HandleResponse(HttpResponseMessage response)
|
||||
{
|
||||
// TODO:
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
@ -107,10 +109,10 @@ namespace eShopOnContainers.Core.Services.RequestProvider
|
||||
if (response.StatusCode == HttpStatusCode.Forbidden
|
||||
|| response.StatusCode == HttpStatusCode.Unauthorized)
|
||||
{
|
||||
throw new ServiceAuthenticationException(content);
|
||||
// throw new ServiceAuthenticationException(content);
|
||||
}
|
||||
|
||||
throw new HttpRequestException(content);
|
||||
// throw new HttpRequestException(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
using System.Threading.Tasks;
|
||||
using eShopOnContainers.Core.Models.User;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace eShopOnContainers.Core.Services.User
|
||||
{
|
||||
public interface IUserService
|
||||
{
|
||||
Task<Models.User.User> GetUserAsync();
|
||||
Task<Address> GetAddressAsync();
|
||||
Task<PaymentInfo> GetPaymentInfoAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
{
|
||||
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",
|
||||
Name = "Jhon",
|
||||
LastName = "Doe",
|
||||
Id = Guid.NewGuid(),
|
||||
City = "Seattle, WA",
|
||||
Street = "120 E 87th Street",
|
||||
CountryCode = "98122",
|
||||
Country = "United States"
|
||||
Country = "United States",
|
||||
Latitude = 40.785091,
|
||||
Longitude = -73.968285,
|
||||
State = "Seattle",
|
||||
StateCode = "WA",
|
||||
ZipCode = "98101"
|
||||
};
|
||||
|
||||
|
||||
public async Task<Models.User.User> GetUserAsync()
|
||||
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<Address> GetAddressAsync()
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
||||
return MockUser;
|
||||
return MockAdress;
|
||||
}
|
||||
|
||||
public async Task<PaymentInfo> GetPaymentInfoAsync()
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
||||
return MockPaymentInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,11 +4,11 @@ using eShopOnContainers.Services;
|
||||
using System;
|
||||
using eShopOnContainers.Core.Services.Catalog;
|
||||
using eShopOnContainers.Core.Services.OpenUrl;
|
||||
using eShopOnContainers.Core.Services.User;
|
||||
using eShopOnContainers.Core.Services.RequestProvider;
|
||||
using eShopOnContainers.Core.Services.Basket;
|
||||
using eShopOnContainers.Core.Services.Identity;
|
||||
using eShopOnContainers.Core.Services.Order;
|
||||
using eShopOnContainers.Core.Services.User;
|
||||
|
||||
namespace eShopOnContainers.ViewModels.Base
|
||||
{
|
||||
|
@ -1,7 +1,6 @@
|
||||
using eShopOnContainers.Core.Helpers;
|
||||
using eShopOnContainers.Core.Models.Basket;
|
||||
using eShopOnContainers.Core.Models.Catalog;
|
||||
using eShopOnContainers.Core.Models.User;
|
||||
using eShopOnContainers.Core.Services.Basket;
|
||||
using eShopOnContainers.Core.Services.User;
|
||||
using eShopOnContainers.Core.ViewModels.Base;
|
||||
@ -18,19 +17,19 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
public class BasketViewModel : ViewModelBase
|
||||
{
|
||||
private User _user;
|
||||
private int _badgeCount;
|
||||
private ObservableCollection<BasketItem> _basketItems;
|
||||
private decimal _total;
|
||||
|
||||
private IUserService _userService;
|
||||
private IBasketService _basketService;
|
||||
private IUserService _userService;
|
||||
|
||||
public BasketViewModel(IUserService userService,
|
||||
IBasketService basketService)
|
||||
public BasketViewModel(
|
||||
IBasketService basketService,
|
||||
IUserService userService)
|
||||
{
|
||||
_userService = userService;
|
||||
_basketService = basketService;
|
||||
_userService = userService;
|
||||
}
|
||||
|
||||
public int BadgeCount
|
||||
@ -65,7 +64,7 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
|
||||
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) =>
|
||||
{
|
||||
@ -88,8 +87,9 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
ReCalculateTotal();
|
||||
});
|
||||
|
||||
_user = await _userService.GetUserAsync();
|
||||
BasketItems = new ObservableCollection<BasketItem>();
|
||||
|
||||
return base.InitializeAsync(navigationData);
|
||||
}
|
||||
|
||||
private void AddCatalogItem(CatalogItem item)
|
||||
@ -121,7 +121,7 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
ReCalculateTotal();
|
||||
}
|
||||
|
||||
private void ReCalculateTotal()
|
||||
private async void ReCalculateTotal()
|
||||
{
|
||||
Total = 0;
|
||||
|
||||
@ -135,11 +135,13 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
Total += (orderItem.Quantity * orderItem.UnitPrice);
|
||||
}
|
||||
|
||||
|
||||
var shippingAddress = await _userService.GetAddressAsync();
|
||||
var authToken = Settings.AuthAccessToken;
|
||||
|
||||
_basketService.UpdateBasketAsync(new CustomerBasket
|
||||
await _basketService.UpdateBasketAsync(new CustomerBasket
|
||||
{
|
||||
BuyerId = _user.GuidUser,
|
||||
BuyerId = shippingAddress.Id.ToString(),
|
||||
Items = BasketItems.ToList()
|
||||
}, authToken);
|
||||
}
|
||||
|
@ -6,10 +6,11 @@ using eShopOnContainers.Core.ViewModels.Base;
|
||||
using eShopOnContainers.Core.Models.Catalog;
|
||||
using eShopOnContainers.Core.Services.Catalog;
|
||||
using System.Windows.Input;
|
||||
using eShopOnContainers.Core.Services.User;
|
||||
using System.Linq;
|
||||
using eShopOnContainers.Core.Services.Basket;
|
||||
using eShopOnContainers.Core.Helpers;
|
||||
using System;
|
||||
using eShopOnContainers.Core.Services.User;
|
||||
|
||||
namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
@ -21,17 +22,18 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
private ObservableCollection<CatalogType> _types;
|
||||
private CatalogType _type;
|
||||
|
||||
private IUserService _userService;
|
||||
private IBasketService _basketService;
|
||||
private ICatalogService _productsService;
|
||||
private IUserService _userService;
|
||||
|
||||
public CatalogViewModel(IUserService userService,
|
||||
public CatalogViewModel(
|
||||
IBasketService basketService,
|
||||
ICatalogService productsService)
|
||||
ICatalogService productsService,
|
||||
IUserService userService)
|
||||
{
|
||||
_userService = userService;
|
||||
_basketService = basketService;
|
||||
_productsService = productsService;
|
||||
_userService = userService;
|
||||
}
|
||||
|
||||
public ObservableCollection<CatalogItem> Products
|
||||
@ -101,14 +103,14 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
Products = await _productsService.GetCatalogAsync();
|
||||
Brands = await _productsService.GetCatalogBrandAsync();
|
||||
Types = await _productsService.GetCatalogTypeAsync();
|
||||
|
||||
var user = await _userService.GetUserAsync();
|
||||
|
||||
var shippingAddress = await _userService.GetAddressAsync();
|
||||
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())
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(basket.Items.Count);
|
||||
MessagingCenter.Send(this, MessengerKeys.UpdateBasket, basket.Items);
|
||||
}
|
||||
|
||||
|
@ -1,19 +1,18 @@
|
||||
using eShopOnContainers.Core.Models.Navigation;
|
||||
using eShopOnContainers.Core.Services.User;
|
||||
using eShopOnContainers.ViewModels.Base;
|
||||
using System.Windows.Input;
|
||||
using Xamarin.Forms;
|
||||
using System.Threading.Tasks;
|
||||
using eShopOnContainers.Core.Models.User;
|
||||
using eShopOnContainers.Core.Models.Orders;
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using eShopOnContainers.Core.Models.Basket;
|
||||
using System.Collections.Generic;
|
||||
using eShopOnContainers.Core.Services.Basket;
|
||||
using eShopOnContainers.Core.Services.Order;
|
||||
using eShopOnContainers.Core.Helpers;
|
||||
using eShopOnContainers.Core.Services.User;
|
||||
using eShopOnContainers.Core.Models.User;
|
||||
|
||||
namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
@ -21,19 +20,20 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
private ObservableCollection<BasketItem> _orderItems;
|
||||
private Order _order;
|
||||
private User _user;
|
||||
private Address _shippingAddress;
|
||||
|
||||
private IUserService _userService;
|
||||
private IBasketService _basketService;
|
||||
private IOrderService _orderService;
|
||||
private IUserService _userService;
|
||||
|
||||
public CheckoutViewModel(IUserService userService,
|
||||
public CheckoutViewModel(
|
||||
IBasketService basketService,
|
||||
IOrderService orderService)
|
||||
IOrderService orderService,
|
||||
IUserService userService)
|
||||
{
|
||||
_basketService = basketService;
|
||||
_userService = userService;
|
||||
_orderService = orderService;
|
||||
_userService = userService;
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
_user = value;
|
||||
RaisePropertyChanged(() => User);
|
||||
_shippingAddress = value;
|
||||
RaisePropertyChanged(() => ShippingAddress);
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,15 +78,16 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
|
||||
OrderItems = orderItems;
|
||||
|
||||
User = await _userService.GetUserAsync();
|
||||
|
||||
ShippingAddress = await _userService.GetAddressAsync();
|
||||
var paymentInfo = await _userService.GetPaymentInfoAsync();
|
||||
|
||||
Order = new Order
|
||||
{
|
||||
ShippingAddress = User,
|
||||
OrderItems = CreateOrderItems(orderItems),
|
||||
Status = OrderStatus.Pending,
|
||||
State = OrderState.InProcess,
|
||||
OrderDate = DateTime.Now,
|
||||
Total = GetOrderTotal()
|
||||
PaymentInfo = paymentInfo,
|
||||
ShippingAddress = _shippingAddress
|
||||
};
|
||||
|
||||
IsBusy = false;
|
||||
@ -98,7 +99,8 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
var authToken = Settings.AuthAccessToken;
|
||||
|
||||
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.RemoveLastFromBackStackAsync();
|
||||
@ -117,7 +119,7 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
ProductId = basketItem.ProductId,
|
||||
ProductName = basketItem.ProductName,
|
||||
ProductImage = basketItem.PictureUrl,
|
||||
PictureUrl = basketItem.PictureUrl,
|
||||
Quantity = basketItem.Quantity,
|
||||
UnitPrice = basketItem.UnitPrice
|
||||
});
|
||||
@ -125,17 +127,5 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
|
||||
return orderItems;
|
||||
}
|
||||
|
||||
private decimal GetOrderTotal()
|
||||
{
|
||||
decimal total = 0;
|
||||
|
||||
foreach (var orderItem in OrderItems)
|
||||
{
|
||||
total += orderItem.Total;
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
||||
}
|
||||
}
|
@ -209,13 +209,6 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if(url.Contains("endsession"))
|
||||
{
|
||||
await SignInAsync();
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
private bool Validate()
|
||||
|
@ -2,8 +2,6 @@
|
||||
using eShopOnContainers.Core.Models.Orders;
|
||||
using eShopOnContainers.ViewModels.Base;
|
||||
using eShopOnContainers.Core.Services.Catalog;
|
||||
using eShopOnContainers.Core.Services.User;
|
||||
using eShopOnContainers.Core.Models.User;
|
||||
using eShopOnContainers.Core.Services.Basket;
|
||||
|
||||
namespace eShopOnContainers.Core.ViewModels
|
||||
@ -11,19 +9,16 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
public class OrderDetailViewModel : ViewModelBase
|
||||
{
|
||||
private Order _order;
|
||||
private User _user;
|
||||
|
||||
private IBasketService _orderService;
|
||||
private ICatalogService _catalogService;
|
||||
private IUserService _userService;
|
||||
|
||||
public OrderDetailViewModel(IBasketService orderService,
|
||||
ICatalogService catalogService,
|
||||
IUserService userService)
|
||||
public OrderDetailViewModel(
|
||||
IBasketService orderService,
|
||||
ICatalogService catalogService)
|
||||
{
|
||||
_orderService = orderService;
|
||||
_catalogService = catalogService;
|
||||
_userService = userService;
|
||||
}
|
||||
|
||||
public Order Order
|
||||
@ -36,32 +31,21 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public User User
|
||||
{
|
||||
get { return _user; }
|
||||
set
|
||||
{
|
||||
_user = value;
|
||||
RaisePropertyChanged(() => User);
|
||||
}
|
||||
}
|
||||
|
||||
public override async Task InitializeAsync(object navigationData)
|
||||
{
|
||||
if(navigationData is Order)
|
||||
if (navigationData is Order)
|
||||
{
|
||||
IsBusy = true;
|
||||
|
||||
var order = navigationData as Order;
|
||||
|
||||
|
||||
foreach (var orderItem in order.OrderItems)
|
||||
{
|
||||
var catalogItem = await _catalogService.GetCatalogItemAsync(orderItem.ProductId.ToString());
|
||||
orderItem.ProductImage = catalogItem.PictureUri;
|
||||
orderItem.PictureUrl = catalogItem.PictureUri;
|
||||
}
|
||||
|
||||
Order = order;
|
||||
User = await _userService.GetUserAsync();
|
||||
|
||||
IsBusy = false;
|
||||
}
|
||||
|
@ -133,7 +133,7 @@
|
||||
Text="STATUS"
|
||||
Style="{StaticResource OrderTitleStyle}"/>
|
||||
<Label
|
||||
Text="{Binding Order.Status, Converter={StaticResource ToUpperConverter}}"
|
||||
Text="{Binding Order.State, Converter={StaticResource ToUpperConverter}}"
|
||||
Style="{StaticResource OrderContentStyle}"/>
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
@ -153,16 +153,16 @@
|
||||
<StackLayout
|
||||
Grid.Row="1">
|
||||
<Label
|
||||
Text="{Binding User.Street}"
|
||||
Text="{Binding ShippingAddress.Street}"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
<Label
|
||||
Text="{Binding User.City}"
|
||||
Text="{Binding ShippingAddress.City}"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
<Label
|
||||
Text="{Binding User.CountryCode}"
|
||||
Text="{Binding ShippingAddress.CountryCode}"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
<Label
|
||||
Text="{Binding User.Country}"
|
||||
Text="{Binding ShippingAddress.Country}"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
|
@ -155,7 +155,7 @@
|
||||
Text="STATUS"
|
||||
Style="{StaticResource OrderTitleStyle}"/>
|
||||
<Label
|
||||
Text="{Binding Order.Status, Converter={StaticResource ToUpperConverter}}"
|
||||
Text="{Binding Order.State, Converter={StaticResource ToUpperConverter}}"
|
||||
Style="{StaticResource OrderContentStyle}"/>
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
@ -176,16 +176,16 @@
|
||||
<StackLayout
|
||||
Grid.Row="1">
|
||||
<Label
|
||||
Text="{Binding User.Street}"
|
||||
Text="{Binding Order.ShippingAddress.Street}"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
<Label
|
||||
Text="{Binding User.City}"
|
||||
Text="{Binding Order.ShippingAddress.City}"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
<Label
|
||||
Text="{Binding User.CountryCode}"
|
||||
Text="{Binding Order.ShippingAddress.CountryCode}"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
<Label
|
||||
Text="{Binding User.Country}"
|
||||
Text="{Binding Order.ShippingAddress.Country}"
|
||||
Style="{StaticResource AddressStyle}"/>
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
|
@ -73,7 +73,7 @@
|
||||
<ffimageloading:CachedImage
|
||||
Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
Source="{Binding ProductImage, Converter={StaticResource ImageConverter}}"
|
||||
Source="{Binding PictureUrl, Converter={StaticResource ImageConverter}}"
|
||||
CacheDuration="30"
|
||||
CacheType="Disk"
|
||||
DownsampleToViewSize="True"
|
||||
|
@ -78,7 +78,7 @@
|
||||
Text="STATUS"
|
||||
Style="{StaticResource OrderTitleStyle}"/>
|
||||
<Label
|
||||
Text="{Binding Status, Converter={StaticResource ToUpperConverter}}"
|
||||
Text="{Binding State, Converter={StaticResource ToUpperConverter}}"
|
||||
Style="{StaticResource OrderContentStyle}"/>
|
||||
</StackLayout>
|
||||
<Grid
|
||||
|
@ -76,10 +76,11 @@
|
||||
<Compile Include="Models\Orders\CardType.cs" />
|
||||
<Compile Include="Models\Orders\Order.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\User\Address.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="Services\Catalog\CatalogService.cs" />
|
||||
<Compile Include="Services\Dialog\DialogService.cs" />
|
||||
|
@ -1,5 +1,5 @@
|
||||
using eShopOnContainers.Core.Services.Basket;
|
||||
using eShopOnContainers.Core.Services.User;
|
||||
using eShopOnContainers.Core.Services.Order;
|
||||
using eShopOnContainers.Core.Services.RequestProvider;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
@ -10,12 +10,20 @@ namespace eShopOnContainers.UnitTests
|
||||
[Fact]
|
||||
public async Task GetFakeOrdersTest()
|
||||
{
|
||||
var userMockService = new UserMockService();
|
||||
var user = await userMockService.GetUserAsync();
|
||||
var ordersMockService = new OrderMockService();
|
||||
var result = await ordersMockService.GetOrdersAsync();
|
||||
|
||||
var ordersMockService = new BasketMockService();
|
||||
var result = await ordersMockService.GetBasketAsync(user.GuidUser);
|
||||
Assert.NotEqual(0, result.Items.Count);
|
||||
Assert.NotEqual(0, result.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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user