public async Task<IActionResult> Details(int? id) { if (id == null) { return RedirectToAction("Index", new { invalidOrderSearch = Request.Query["id"] }); } var order = await _ordersQuery.FindOrderAsync(id.Value); if (order == null) { return RedirectToAction("Index", new { invalidOrderSearch = id.ToString() }); } var itemsCount = order.OrderDetails.Sum(x => x.Quantity); var subTotal = order.OrderDetails.Sum(x => x.Quantity * x.Product.Price); var shipping = itemsCount * (decimal)5.00; var tax = (subTotal + shipping) * (decimal)0.05; var total = subTotal + shipping + tax; var costSummary = new OrderCostSummary { CartSubTotal = subTotal.ToString("C"), CartShipping = shipping.ToString("C"), CartTax = tax.ToString("C"), CartTotal = total.ToString("C") }; var viewModel = new OrderDetailsViewModel { OrderCostSummary = costSummary, Order = order }; return View(viewModel); }
public async Task<IActionResult> Details(int? id) { if (id == null) { _telemetry.TrackTrace("Order/Server/NullId"); return RedirectToAction("Index", new { invalidOrderSearch = Request.Query["id"] }); } var order = await _ordersQuery.FindOrderAsync(id.Value); var username = User.GetUserName(); // If the username isn't the same as the logged in user, return as if the order does not exist if (order == null || !String.Equals(order.Username, username, StringComparison.Ordinal)) { _telemetry.TrackTrace("Order/Server/UsernameMismatch"); return RedirectToAction("Index", new { invalidOrderSearch = id.ToString() }); } // Capture order review event for analysis var eventProperties = new Dictionary<string, string>() { {"Id", id.ToString() }, {"Username", username } }; if (order.OrderDetails == null) { _telemetry.TrackEvent("Order/Server/NullDetails", eventProperties, null); } else { var eventMeasurements = new Dictionary<string, double>() { {"LineItemCount", order.OrderDetails.Count } }; _telemetry.TrackEvent("Order/Server/Details", eventProperties, eventMeasurements); } var itemsCount = order.OrderDetails.Sum(x => x.Quantity); var subTotal = order.OrderDetails.Sum(x => x.Quantity * x.Product.Price); var shipping = itemsCount * (decimal)5.00; var tax = (subTotal + shipping) * (decimal)0.05; var total = subTotal + shipping + tax; var costSummary = new OrderCostSummary { CartSubTotal = subTotal.ToString("C"), CartShipping = shipping.ToString("C"), CartTax = tax.ToString("C"), CartTotal = total.ToString("C") }; var viewModel = new OrderDetailsViewModel { OrderCostSummary = costSummary, Order = order }; return View(viewModel); }