public ActionResult Create(AvailabilityBindingModel model) { ReservationCreateBindingModel input = new ReservationCreateBindingModel { Arrival = model.Arrival, Departure = model.Departure, Additions = this.additionsService.GetAdditionBindingModels(), }; return(this.View(input)); }
public async Task <ActionResult> Create(ReservationCreateBindingModel model) { if (!this.ModelState.IsValid) { return(this.View(model)); } string userIdClaimValue = this.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier); string userEmailClaimValue = this.HttpContext.User.FindFirstValue(ClaimTypes.Email); var result = await this.reservationsService.CreateReservation(model, userIdClaimValue); if (result >= 0) { await this.emailSender.SendEmailAsync(GlobalConstants.SendEmailFrom, GlobalConstants.SystemName, userEmailClaimValue, "Успешна резервация", EmailTemplates.ConfirmReservationTemplate()); return(this.RedirectToAction("Success")); } else { return(this.RedirectToAction("Failed")); } }
public IActionResult Create(ReservationCreateBindingModel reservationCreateBindingModel) { if (!ModelState.IsValid) { return(View()); } decimal sum = 0; var roomId = context.Rooms.SingleOrDefault( r => r.Number == reservationCreateBindingModel.RoomNumber).Id; var priceForChild = Convert.ToDecimal(context.Rooms.FirstOrDefault(r => r.Id == roomId).PriceForBedAsChild); var priceForAdult = Convert.ToDecimal(context.Rooms.FirstOrDefault(r => r.Id == roomId).PriceForBedAsAdult); foreach (var item in context.Clients.ToList()) { if (reservationCreateBindingModel.AllInclusive) { sum += 100; if (item.isAdult) { sum += priceForAdult; } else { sum += priceForChild; } } else if (reservationCreateBindingModel.IncludedBreakfast) { sum += 50; if (item.isAdult) { sum += priceForAdult; } else { sum += priceForChild; } } else { sum += 150; if (item.isAdult) { sum += priceForAdult; } else { sum += priceForChild; } } } Reservation reservation = new Reservation { Id = Guid.NewGuid().ToString(), RoomId = roomId, HotelUserId = context.HotelUsers.SingleOrDefault( r => r.UserName == reservationCreateBindingModel.HotelUserUsername).Id, DataOfIncoming = reservationCreateBindingModel.DataOfIncoming, DateOfOutgoing = reservationCreateBindingModel.DateOfOutgoing, includedBreakfast = reservationCreateBindingModel.IncludedBreakfast, allInclusive = reservationCreateBindingModel.AllInclusive, AllAmount = sum.ToString() }; context.Add(reservation); context.SaveChangesAsync(); return(Redirect("/Identity/ReservationList")); }
public async Task <int> CreateReservation(ReservationCreateBindingModel model, string userIdClaimValue) { var reservationDates = new HashSet <DateTime>(); var reservationLength = (model.Departure.Date - model.Arrival.Date).Days; for (int i = 0; i < reservationLength; i++) { reservationDates.Add(model.Arrival.AddDays(i)); } ICollection <Bungalow> bungalows = this.bungalowsRepository.All() .Include(b => b.DatesAvailable.Where(d => d.IsAvailable == true && d.IsDeleted == false)) .ThenInclude(b => b.Price) .ToList() .Where(b => b.IsAvailable == true && reservationDates.All(d => b.DatesAvailable.Any(date => d == date.Date))) .ToList(); Bungalow bungalow = new Bungalow(); if (bungalows.Count > 0) { bungalow = bungalows.FirstOrDefault(); } else { return(-1); } Reservation reservation = new Reservation { ApplicationUserId = userIdClaimValue, Arrival = model.Arrival, Departure = model.Departure, Notes = model.Notes, ReservationPrice = 0, BungalowId = bungalow.Id, }; foreach (var date in bungalow.DatesAvailable) { if (reservationDates.Contains(date.Date)) { date.IsAvailable = false; reservation.ReservationPrice += date.Price.TotalPrice; } } foreach (var addition in model.Additions) { if (addition.IsIncluded) { reservation.ReservationAdditions.Add(new ReservationAdditions { AdditionId = addition.Id }); reservation.ReservationPrice += addition.Price; } } await this.bungalowsRepository.SaveChangesAsync(); await this.reservationsRepository.AddAsync(reservation); await this.reservationsRepository.SaveChangesAsync(); return(reservation.Id); }