public bool UpdateQuantity(int TableHeaderId) { try { var tblDetailsObj = _db.TableBookingHeader.Where(t => t.Id == TableHeaderId).FirstOrDefault(); if (tblDetailsObj != null) { TableTrack objT = _db.TableTrack.Include(t => t.Table).Where(t => t.DateTable.Date == tblDetailsObj.SitInDate.Date && t.TimeTable == tblDetailsObj.SitInTime && t.Table.SeatingName == tblDetailsObj.TableName).FirstOrDefault(); if (objT != null) { objT.AmtAva += tblDetailsObj.TableBooked; if (objT.AmtAva > objT.Table.MaxTables) { objT.AmtAva = objT.Table.MaxTables; } _db.SaveChanges(); } } return(true); } catch { return(false); } }
public async Task <IActionResult> Index(CustomerBookingVM objCB) { if (objCB.ChosenTableId <= 0 || objCB.DateChosen == null || objCB.TimeChosen == null) { return(RedirectToAction(nameof(Index))); } var FindIdInTableTrack = _db.TableTrack.Include(t => t.Table).Where(t => t.TableId == objCB.ChosenTableId && t.DateTable.Date == objCB.DateChosen.Value.Date && t.TimeTable == objCB.TimeChosen.Value.TimeOfDay); objCB.TableTracks = new TableTrack(); if (FindIdInTableTrack.Any()) { objCB.TableTracks = await FindIdInTableTrack.FirstAsync(); } else { var GetTable = await _db.Table.FindAsync(objCB.ChosenTableId); int MaxQuan = GetTable.MaxTables; TableTrack tableTrack = new TableTrack { TableId = objCB.ChosenTableId, AmtAva = MaxQuan, DateTable = objCB.DateChosen.Value.Date, TimeTable = objCB.TimeChosen.Value.TimeOfDay }; _db.TableTrack.Add(tableTrack); await _db.SaveChangesAsync(); objCB.TableTracks = await _db.TableTrack.Include(t => t.Table).Where(t => t.Id == tableTrack.Id).Select(t => t).FirstAsync(); } var TableObj = await _db.Table.AnyAsync(); if (TableObj) { objCB.TableList = await _db.Table.Where(t => t.Active == true).OrderBy(t => t.SeatingName).Select(t => new SelectListItem { Text = t.SeatingName, Value = t.Id.ToString() }).ToListAsync(); } else { objCB.TableList = new List <SelectListItem>(); } objCB.Quantity = 0; return(View(objCB)); }
public async Task <IActionResult> DeleteConfirmed(int?id) { var table = await _db.Table.FindAsync(id); if (table == null) { return(View()); } // Delete Image string webRootPath = _hostingEnvironment.WebRootPath; var imagePath = Path.Combine(webRootPath, table.Image.TrimStart('\\')); if (System.IO.File.Exists(imagePath)) { System.IO.File.Delete(imagePath); } //End Delete Image // Send Email to All pending and approved bookings for specific item that is being deleted // Inform Customers that the table is no longer available etc. /* * Following code is to remove all table tracks in TableTrack that is linked to the table being * deleted. */ var CheckTableTrack = await _db.TableTrack.Where(t => t.TableId == id).ToListAsync(); if (CheckTableTrack.Any()) { foreach (var item in CheckTableTrack) { TableTrack tableTrack = await _db.TableTrack.FindAsync(item.Id); _db.TableTrack.Remove(tableTrack); } } /* * Following code is to cancel/reject all bookings that have the soon to be deleted table name */ //Reject Pending Ones: var CheckTableHeaderPending = await _db.TableBookingHeader.Where(t => t.TableName == table.SeatingName && t.Status != SD.TableStatusCancelled && t.BookStatus == SD.BookTableStatusPending && t.SitInDate.Date >= DateTime.Now.Date).ToListAsync(); if (CheckTableHeaderPending.Any()) { foreach (var item in CheckTableHeaderPending) { TableBookingHeader tableHeader = _db.TableBookingHeader.Find(item.Id); tableHeader.BookStatus = SD.BookTableStatusRejected; tableHeader.TimeRejected = DateTime.Now; var claimsIdentity = (ClaimsIdentity)User.Identity; var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); var StaffName = _db.ApplicationUser.Where(a => a.Id == claim.Value).SingleOrDefault().Name; tableHeader.RejectedBy = StaffName; // Send Email saying their booking was rejected because table is unavailable var CustomerInfo = _db.ApplicationUser.Where(u => u.Id == tableHeader.UserId).FirstOrDefault(); var CustomerEmail = CustomerInfo.Email; var CustomerName = CustomerInfo.Name; SendEmail(CustomerName, CustomerEmail, "Table Booking : " + item.Id + " - Rejected", "The following table booking has been rejected:", tableHeader); } } //Cancel Approved Ones: var CheckTableHeaderApproved = await _db.TableBookingHeader.Where(t => t.TableName == table.SeatingName && t.BookStatus == SD.BookTableStatusApproved && t.Status == SD.TableStatusSubmitted && t.SitInDate.Date > DateTime.Now.Date).ToListAsync(); if (CheckTableHeaderApproved.Any()) { foreach (var item in CheckTableHeaderApproved) { TableBookingHeader tableHeader = _db.TableBookingHeader.Find(item.Id); tableHeader.Status = SD.TableStatusCancelled; tableHeader.TimeRejected = DateTime.Now; var claimsIdentity = (ClaimsIdentity)User.Identity; var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); var StaffName = _db.ApplicationUser.Where(a => a.Id == claim.Value).SingleOrDefault().Name; tableHeader.RejectedBy = StaffName; // Send Email saying their booking was cancelled because table is unavailable var CustomerInfo = _db.ApplicationUser.Where(u => u.Id == tableHeader.UserId).FirstOrDefault(); var CustomerEmail = CustomerInfo.Email; var CustomerName = CustomerInfo.Name; SendEmail(CustomerName, CustomerEmail, "Table Booking : " + item.Id + " - Cancelled", "The following table booking has been cancelled, we apologise for the inconvenience:", tableHeader); } } _db.Table.Remove(table); await _db.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); }
public async Task <IActionResult> AddToTable(int?Quantity, int?TableTrackId) { if (Quantity.HasValue) { if (Quantity.Value <= 0) { return(RedirectToAction(nameof(Index))); } } if (!Quantity.HasValue || !TableTrackId.HasValue) { return(RedirectToAction(nameof(Index))); } var claimsIdentity = (ClaimsIdentity)this.User.Identity; var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); var tableTrack = await _db.TableTrack.Include(t => t.Table).Where(t => t.Id == TableTrackId.Value).FirstOrDefaultAsync(); if (tableTrack == null) { return(RedirectToAction(nameof(Index))); } TableBookingHeader objTBH = new TableBookingHeader { UserId = claim.Value, DateBookingMade = SharedMethods.GetDateTime(), SitInDate = tableTrack.DateTable, SitInTime = tableTrack.TimeTable, TableName = tableTrack.Table.SeatingName, TableBooked = Quantity.Value, Status = SD.TableStatusSubmitted, BookStatus = SD.BookTableStatusPending, ApprovedBy = "", RejectedBy = "", TimeApproved = null, TimeCheckOut = null, TimeRejected = null, TimeSitIn = null, Duration = "" }; await _db.TableBookingHeader.AddAsync(objTBH); TableTrack objTT = await _db.TableTrack.FindAsync(tableTrack.Id); objTT.AmtAva -= Quantity.Value; await _db.SaveChangesAsync(); //Send Email var CustomerInfo = _db.ApplicationUser.Where(u => u.Id == claim.Value).FirstOrDefault(); var CustomerEmail = CustomerInfo.Email; var CustomerName = CustomerInfo.Name; SendEmail(CustomerName, CustomerEmail, "Table Booking : " + objTBH.Id + " - Received", "Your Table Booking has been received", "Thank you for your table booking, it is awaiting approval from the Admin.", objTBH); //End Send Email return(View("Confirm", objTBH)); }
public async Task <IActionResult> Edit(TableEditVM objTable) { if (ModelState.IsValid) { if (objTable.Table.MaxTables != objTable.OldMaxValue) { int SubtractTab = objTable.Table.MaxTables - objTable.OldMaxValue; var TableTrackObj = await _db.TableTrack.Include(t => t.Table).Where(t => t.TableId == objTable.Table.Id).ToListAsync(); if (TableTrackObj.Any()) { foreach (var item in TableTrackObj) { TableTrack objTT = await _db.TableTrack.FindAsync(item.Id); objTT.AmtAva += SubtractTab; if (objTT.AmtAva < 0) { objTT.AmtAva = 0; } } } } var TableFromDb = await _db.Table.FindAsync(objTable.Table.Id); //Begin Image string webRootPath = _hostingEnvironment.WebRootPath; var files = HttpContext.Request.Form.Files; if (files.Count > 0) { //New Image File was upload //Combining the webroot path with images var uploads = Path.Combine(webRootPath, @"images\Table"); var extension_new = Path.GetExtension(files[0].FileName); // Delete Image File that was in Database var imagePath = Path.Combine(webRootPath, TableFromDb.Image.TrimStart('\\')); if (System.IO.File.Exists(imagePath)) { System.IO.File.Delete(imagePath); } // New Image File will be uploaded using (var filesStream = new FileStream(Path.Combine(uploads, objTable.Table.Id + extension_new), FileMode.Create)) { //will copy the image to the file location on the sever and rename it files[0].CopyTo(filesStream); } //In database the name will be changed to te loctaion where the image is saved TableFromDb.Image = @"\images\Table\" + objTable.Table.Id + extension_new; } //End Image TableFromDb.MaxTables = objTable.Table.MaxTables; TableFromDb.Active = objTable.Table.Active; await _db.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(objTable)); }