/// <summary> /// Оформляет заказ. Если у клиента нет долга за прошлую неделю: /// записывает пиццы из корзины в новый заказ, сохраняет его в бд, /// переадресует на страницу Спасибо за заказ. /// Если долг есть, отправляет на страницу ошибка, где сообщаетя о долге и /// предлагается оплатить долг. /// </summary> /// <returns></returns> public async Task <IActionResult> Checkout() { ShoppingCart = SessionHelper.GetObjectFromJson <List <Pizza> >(HttpContext.Session, "cart"); string customerId = User.Claims.Where(c => c.Type == "Id").FirstOrDefault().Value; var weeklyFinanceData = await FinanceHelper.GetWeeklyData(_context, customerId); long orderId; if (weeklyFinanceData.ContainsKey(FinanceHelper.GetWeekKey(DateTime.Now))) { orderId = await CreateNewOrder(ShoppingCart, customerId); HttpContext.Session.Remove("cart"); return(RedirectToAction("ThankYou", "Cart", new { orderId = orderId })); } string lastWeekThatHasData = FinanceHelper.GetLastWeekThatHasData(weeklyFinanceData.Keys); double debt = lastWeekThatHasData == "" ? 0 : weeklyFinanceData[lastWeekThatHasData].delta; if (debt > 0) { return(RedirectToAction("Error", "Cart", new { debt = debt })); } orderId = await CreateNewOrder(ShoppingCart, customerId); HttpContext.Session.Remove("cart"); return(RedirectToAction("ThankYou", "Cart", new { orderId = orderId })); }
public async Task <IActionResult> Index() { _customerId = User.Claims.Where(c => c.Type == "Id").FirstOrDefault().Value; var orders = await FinanceHelper.GetOrdersData(_context, _customerId); ViewBag.TotalOrdersCost = FinanceHelper.GetTotalOrdersCost(orders); var payments = await FinanceHelper.GetPaymentsData(_context, _customerId); ViewBag.TotalAmountPaid = FinanceHelper.GetTotalAmountPaid(payments); ViewBag.CustomerPayments = payments; ViewBag.WeeklyData = FinanceHelper.GetWeeklyData(orders, payments); // словарь с суммами закаов и платежей за сгруппированными по неделям ViewBag.CurrentWeekKey = FinanceHelper.GetWeekKey(DateTime.Now); // номер текущей недели, чтобы выводить инфоормационно клиенту return(View(orders)); }