示例#1
0
        private SaleOrders CalculateOrder(CartViewModel model)
        {
            var order = new SaleOrders();

            order.AcceptedTime = null;
            order.CancledTime  = null;

            order.Id           = _rand.RandomStringFrom(RandomExtension.Uppers_Digits, 10);
            order.OrderTime    = DateTime.UtcNow;
            order.FinishedTime = null;
            order.Status       = "New";

            var details = new List <SaleOrderDetails>();

            foreach (var kv in model.details)
            {
                var d   = kv.Value;
                var pro = _context.Products.FirstOrDefault(p => p.Id == d.product_id && p.Active == true);
                var oD  = new SaleOrderDetails();
                oD.Id          = Guid.NewGuid().ToString();
                oD.OrderId     = order.Id;
                oD.ProductId   = pro.Id;
                oD.Quantity    = d.quantity;
                oD.TotalAmount = d.quantity * pro.UnitPrice;
                if (pro.DiscountAmount != null)
                {
                    oD.FinalAmount = oD.TotalAmount - pro.DiscountAmount;
                }
                else if (pro.DiscountPercent != null)
                {
                    oD.FinalAmount = oD.TotalAmount - (oD.TotalAmount * pro.DiscountPercent / 100.0);
                }
                else
                {
                    oD.FinalAmount = oD.TotalAmount;
                }
                details.Add(oD);
            }
            order.SaleOrderDetails = details;

            order.TotalAmount = details.Sum(oD => oD.TotalAmount);
            order.FinalAmount = details.Sum(oD => oD.FinalAmount);
            return(order);
        }
示例#2
0
 public IActionResult CheckCart(CartViewModel model)
 {
     try
     {
         var result = ValidateCart(model);
         if (result.Any())
         {
             return(BadRequest(new
             {
                 messages = result
             }));
         }
         var order = CalculateOrder(model);
         return(Ok(ToOrderResponse(order)));
     }
     catch (Exception e)
     {
         return(Error(new
         {
             message = "Có lỗi xảy ra. Vui lòng thử lại.",
             data = e,
         }));
     }
 }