Esempio n. 1
0
        public ActionResult Create(AvailabilityBindingModel model)
        {
            ReservationCreateBindingModel input = new ReservationCreateBindingModel
            {
                Arrival   = model.Arrival,
                Departure = model.Departure,
                Additions = this.additionsService.GetAdditionBindingModels(),
            };

            return(this.View(input));
        }
Esempio n. 2
0
        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"));
        }
Esempio n. 4
0
        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);
        }