Hello Team,
The error message I'm getting says that UserId does not exist, and I tried to create a relationship between user table and tblOrder table but it also says foreign key conflict whenever I tried to insert data so i remove the relationship, the Schema for both tblUser and tblOrder is Order, and though the UserId is present in the tblUser, kindly assist.
public int AddOrder(OrderViewModel objOrderViewModel)
{
// Check if User Exists
var userExists = objRestaurantDBEntities.tblUsers
.Any(u => u.UserId == objOrderViewModel.UserId);
if (!userExists)
{
throw new Exception("? Error: UserId (" + objOrderViewModel.UserId + ") does not exist in tblUser.");
}
// Create Order Object
tblOrder objOrder = new tblOrder
{
CustomerId = objOrderViewModel.CustomerId,
FinalTotal = objOrderViewModel.FinalTotal,
OrderDate = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss"),
OrderNumber = DateTime.Now.ToString("ddMMMyyyyHHmmss"),
PaymentTypeId = objOrderViewModel.PaymentTypeId,
UserId = objOrderViewModel.UserId
};
objRestaurantDBEntities.tblOrders.Add(objOrder);
objRestaurantDBEntities.SaveChanges();
int OrderId = objOrder.OderId; // ? Ensure correct field name
// List to store Order Details
List<tblOrderDetail> orderDetailsList = new List<tblOrderDetail>();
foreach (var item in objOrderViewModel.ListofOrderDetailViewModel)
{
tblOrderDetail objOrderDetails = new tblOrderDetail
{
OderId = OrderId,
Discount = item.Discount,
ItemId = item.ItemId,
Total = item.Total,
UnitPrice = item.UnitPrice,
Quantity = Convert.ToInt32(item.Quantity),
Vat = item.Vat
};
orderDetailsList.Add(objOrderDetails);
// Check if Item exists in stock before updating
var tblQty = objRestaurantDBEntities.tblQuantities
.SingleOrDefault(x => x.ItemId == item.ItemId);
if (tblQty != null)
{
int newQuantity = Convert.ToInt32(tblQty.Quantity) - Convert.ToInt32(item.Quantity);
tblQty.Quantity = newQuantity >= 0 ? newQuantity : 0; // Prevent negative stock
objRestaurantDBEntities.Entry(tblQty).State = EntityState.Modified;
}
}
// Save all Order Details in one go
objRestaurantDBEntities.tblOrderDetails.AddRange(orderDetailsList);
objRestaurantDBEntities.SaveChanges(); // ? Single SaveChanges() for better performance
return OrderId;
}
}
}