//Insert the cart into the database public IActionResult ProceedCheckout(int idAvailability, int idStaff, TimeSpan choosenTime) { ViewBag.username = HttpContext.Session.GetString("username"); ViewBag.userType = HttpContext.Session.GetInt32("userType"); ViewBag.totalAmount = HttpContext.Session.GetInt32("TotalAmount"); int idCredentials = (int)HttpContext.Session.GetInt32("id"); CustomerManager cManger = new CustomerManager(Configuration); int idCustomer = cManger.GetCustomerIDByCredentials(idCredentials); AvailibilityManager aManager = new AvailibilityManager(Configuration); if (idAvailability % 15 < 14 && idAvailability % 15 >= 1) { //additioning the counter of the cur. time + cur. time + 15 + cur. time + 30 int totalCounter = aManager.GetCounter(idAvailability) + aManager.GetCounter(idAvailability + 1) + aManager.GetCounter(idAvailability + 2); if (totalCounter >= 4) { //Make deliveryBoy unavailable at the choosen time, 0 means unavailable aManager.UpdateAvailability(idAvailability, 0); } for (int i = idAvailability; i <= idAvailability + 2; i++) { //increment counter aManager.IncrementCounter(i); } } else if (idAvailability % 15 == 14) { int totalCounter = aManager.GetCounter(idAvailability) + aManager.GetCounter(idAvailability + 1); if (totalCounter >= 4) { //Make deliveryBoy unavailable at the choosen time aManager.UpdateAvailability(idAvailability, 0); } for (int i = idAvailability; i <= idAvailability + 1; i++) { //increment counter aManager.IncrementCounter(i); } } else if (idAvailability % 15 == 0) { int totalCounter = aManager.GetCounter(idAvailability); if (totalCounter >= 4) { //Make deliveryBoy unavailable at the choosen time aManager.UpdateAvailability(idAvailability, 0); } aManager.IncrementCounter(idAvailability); } //First we add the delivery DeliveryManager dManager = new DeliveryManager(Configuration); dManager.AddDelivery(choosenTime, idStaff); int lastDelivery = dManager.GetLastId(); OrderManager oManager = new OrderManager(Configuration); //Then we create the order oManager.AddOrder(idCustomer, lastDelivery); int lastOrder = oManager.GetLastId(); //Finaly we link each dish to the order in the dish_order table List <Item> cart = SessionHelper.GetObjectFromJson <List <Item> >(HttpContext.Session, "cart"); Dishes_orderManager doManager = new Dishes_orderManager(Configuration); foreach (Item dish in cart) { doManager.AddDishes_order(dish.Dishe.idDishes, lastOrder, dish.Quantity); } //This way we respect every foreign key and we do not generate errors. cart = null; //Clean up cart SessionHelper.SetObjectAsJson(HttpContext.Session, "cart", cart); HttpContext.Session.SetInt32("TotalAmount", 0); return(View()); }