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.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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
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; }
|
@ -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.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>()
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -209,13 +209,6 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
if(url.Contains("endsession"))
|
|
||||||
{
|
|
||||||
await SignInAsync();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool Validate()
|
private bool Validate()
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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"
|
||||||
|
@ -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
|
||||||
|
@ -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" />
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user