public async Task <IActionResult> Edit(BookingViewModel model) { if (!HasPermission("EDIT_BOOKINGS")) { return(Unauthorized()); } if (ModelState.IsValid) { var booking = await _context.Bookings .Include(b => b.Invoice) .Include(b => b.Package) .Include(b => b.Package.PackageType) .SingleAsync(m => m.Id == model.Id); booking = model.UpdateEntity(booking); if (booking.Invoice.Status == InvoiceStatus.NotIssued) { booking.Invoice.Status = InvoiceStatus.Pending; } if (booking.Invoice.AmountPaid >= booking.Invoice.Total) { booking.Invoice.Status = InvoiceStatus.Paid; booking.Invoice.AmountDue = 0; } _context.Update(booking); await _context.SaveChangesAsync(); return(RedirectToAction("Index")); } ViewData["LocationId"] = new SelectList(_context.Locations, "Id", "Name"); ViewData["ServiceId"] = new SelectList(_context.Services, "Id", "Name", model.ServiceId); ViewData["PackageTypeId"] = new SelectList(_context.PackageTypes, "Id", "Name"); return(View(model)); }