Create Order (before product quantity depletion change)
Fri Aug 02 2024 11:50:47 GMT+0000 (Coordinated Universal Time)
Saved by
@iamkatmakhafola
//CreateOrder Method
[HttpPost]
[Route("CreateOrder")]
public async Task<IActionResult> CreateOrder([FromBody] OrderViewModel ov)
{
// Validate input
if (ov == null || ov.OrderLines == null || !ov.OrderLines.Any())
{
return BadRequest("OrderViewModel or OrderLines field is required.");
}
// Extract user ID from claims
var userId = User.FindFirstValue("userId");
if (userId == null)
{
return Unauthorized("User not logged in");
}
// Retrieve member
var member = await _context.Members.FirstOrDefaultAsync(m => m.User_ID == int.Parse(userId));
if (member == null)
{
return Unauthorized("User is not a member");
}
// Create and save the order
var order = new Order
{
Member_ID = member.Member_ID,
Order_Date = DateTime.UtcNow,
Order_Status_ID = ov.Order_Status_ID, // Use the Order_Status_ID from the view model
IsCollected = ov.IsCollected,
Total_Price = ov.Total_Price // Ensure Total_Price is also set
};
_context.Orders.Add(order);
await _context.SaveChangesAsync(); // Save to get Order_ID
// Add order lines
var orderLines = ov.OrderLines.Select(ol => new Order_Line
{
Product_ID = ol.Product_ID,
Quantity = ol.Quantity,
Unit_Price = ol.Unit_Price,
Order_ID = order.Order_ID // Link to the created order
}).ToList();
_context.Order_Lines.AddRange(orderLines);
await _context.SaveChangesAsync(); // Save order lines
// Clear the member's cart
var cart = await _context.Carts
.Include(c => c.Cart_Items)
.FirstOrDefaultAsync(c => c.Member_ID == member.Member_ID);
if (cart != null)
{
_context.Cart_Items.RemoveRange(cart.Cart_Items);
await _context.SaveChangesAsync();
}
return Ok(order);
}
content_copyCOPY
Comments