* Ardalis/upgrade1 (#44) * Upgrading to netcore 2.0 Updating repository to support async options and refactoring to use it. * Starting work on tracking customer orders feature. * Cleaning up some bugs Working on basket view component implementation * Fixing up styles, especially for basket in header. * Adding Order Features (#47) * Working on order model binding from checkout page - WIP * Small layout tweaks (#43) * Updating quantities implemented. * Fixed basket widget count * Order History (#49) * working on creating and viewing orders. * Working on wiring up listing of orders * List orders page works as expected. Needed to support ThenInclude scenarios. Currently using strings.
97 lines
3.2 KiB
C#
97 lines
3.2 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.eShopWeb.ViewModels;
|
|
using System;
|
|
using ApplicationCore.Entities.OrderAggregate;
|
|
using ApplicationCore.Interfaces;
|
|
using System.Linq;
|
|
using ApplicationCore.Specifications;
|
|
|
|
namespace Microsoft.eShopWeb.Controllers
|
|
{
|
|
[Authorize]
|
|
[Route("[controller]/[action]")]
|
|
public class OrderController : Controller
|
|
{
|
|
private readonly IOrderRepository _orderRepository;
|
|
|
|
public OrderController(IOrderRepository orderRepository) {
|
|
_orderRepository = orderRepository;
|
|
}
|
|
|
|
public async Task<IActionResult> Index()
|
|
{
|
|
var orders = await _orderRepository.ListAsync(new CustomerOrdersWithItemsSpecification(User.Identity.Name));
|
|
|
|
var viewModel = orders
|
|
.Select(o => new OrderViewModel()
|
|
{
|
|
OrderDate = o.OrderDate,
|
|
OrderItems = o.OrderItems?.Select(oi => new OrderItemViewModel()
|
|
{
|
|
Discount = 0,
|
|
PictureUrl = oi.ItemOrdered.PictureUri,
|
|
ProductId = oi.ItemOrdered.CatalogItemId,
|
|
ProductName = oi.ItemOrdered.ProductName,
|
|
UnitPrice = oi.UnitPrice,
|
|
Units = oi.Units
|
|
}).ToList(),
|
|
OrderNumber = o.Id,
|
|
ShippingAddress = o.ShipToAddress,
|
|
Status = "Pending",
|
|
Total = o.Total()
|
|
|
|
});
|
|
return View(viewModel);
|
|
}
|
|
|
|
[HttpGet("{orderId}")]
|
|
public async Task<IActionResult> Detail(int orderId)
|
|
{
|
|
var order = await _orderRepository.GetByIdWithItemsAsync(orderId);
|
|
var viewModel = new OrderViewModel()
|
|
{
|
|
OrderDate = order.OrderDate,
|
|
OrderItems = order.OrderItems.Select(oi => new OrderItemViewModel()
|
|
{
|
|
Discount = 0,
|
|
PictureUrl = oi.ItemOrdered.PictureUri,
|
|
ProductId = oi.ItemOrdered.CatalogItemId,
|
|
ProductName = oi.ItemOrdered.ProductName,
|
|
UnitPrice = oi.UnitPrice,
|
|
Units = oi.Units
|
|
}).ToList(),
|
|
OrderNumber = order.Id,
|
|
ShippingAddress = order.ShipToAddress,
|
|
Status = "Pending",
|
|
Total = order.Total()
|
|
};
|
|
return View(viewModel);
|
|
}
|
|
|
|
private OrderViewModel GetOrder()
|
|
{
|
|
var order = new OrderViewModel()
|
|
{
|
|
OrderDate = DateTimeOffset.Now.AddDays(-1),
|
|
OrderNumber = 12354,
|
|
Status = "Submitted",
|
|
Total = 123.45m,
|
|
ShippingAddress = new Address("123 Main St.", "Kent", "OH", "United States", "44240")
|
|
};
|
|
|
|
order.OrderItems.Add(new OrderItemViewModel()
|
|
{
|
|
ProductId = 1,
|
|
PictureUrl = "",
|
|
ProductName = "Something",
|
|
UnitPrice = 5.05m,
|
|
Units = 2
|
|
});
|
|
|
|
return order;
|
|
}
|
|
}
|
|
}
|