/* * // Post: vistaDatosReservaPostCliente - Método de acción del botón crear reserva en Details - Alejandro Moya * // Cogemos los datos del cliente y lo vamos rescatando * [HttpPost, ActionName("vistaDatosReserva")] * [ValidateAntiForgeryToken] * public async Task<IActionResult> vistaDatosReservaPostCliente(Cliente cliente) * { * if (ModelState.IsValid) * { * return View(cliente); * } * * return RedirectToAction("Index", "ClientesController", ""); * } * */ // Se encarga de crear la vista para introducir los datos de la reserva, en este caso, solo queremos crear la vista con los datos del cliente. public async Task <IActionResult> vistaDatosReserva(int id) { var cliente = await _context.Cliente.SingleOrDefaultAsync(m => m.idPersona == id); DatosReservaViewModel datosReservaSoloCliente = new DatosReservaViewModel { idPersona = cliente.idPersona, nombre = cliente.nombre, apellidos = cliente.apellidos, nif = cliente.nif, fechaInicio = DateTime.Now, fechaFin = DateTime.Now }; return(View(datosReservaSoloCliente)); }
public async Task <IActionResult> vistaDatosReservaPost([Bind("idPersona,nombre,apellidos,nif,fechaInicio,fechaFin,regimenComida,comentarios")] DatosReservaViewModel datosReserva) { if (ModelState.IsValid) { DatosHabitacionReservaViewModel datosReservasProceso = new DatosHabitacionReservaViewModel { idPersona = datosReserva.idPersona, nombre = datosReserva.nombre, apellidos = datosReserva.apellidos, nif = datosReserva.nif, fechaFin = datosReserva.fechaFin, fechaInicio = datosReserva.fechaInicio, comentarios = datosReserva.comentarios, regimenComida = datosReserva.regimenComida }; if (datosReserva.fechaFin.Subtract(datosReserva.fechaInicio) <= TimeSpan.Zero) { ModelState.AddModelError("", $"Oops, posiblemente ha confundido la Fecha de Inicio con la Fecha de Fin"); return(View(datosReserva)); } if (DateTime.Today.CompareTo(datosReserva.fechaInicio.Date) > 0) { ModelState.AddModelError("", $"Oops, las fechas introducidas no pueden ser anteriores a la fecha actual"); return(View(datosReserva)); } // Habitaciones disponibles IEnumerable <int> reservasMalas = _context.Reserva.Where(rh => (datosReserva.fechaInicio.Subtract(rh.fechaInicio) >= TimeSpan.Zero && rh.fechaFin.Subtract(datosReserva.fechaInicio) >= TimeSpan.Zero) || (rh.fechaInicio.Subtract(datosReserva.fechaInicio) >= TimeSpan.Zero && datosReserva.fechaFin.Subtract(rh.fechaInicio) > TimeSpan.Zero) || (rh.fechaFin.Subtract(datosReserva.fechaInicio) > TimeSpan.Zero && datosReserva.fechaFin.Subtract(rh.fechaFin) >= TimeSpan.Zero)).AsEnumerable().Select(s => s.idReserva).ToList(); IEnumerable <int> habmalas = _context.ReservaHabitacion.Where(h => reservasMalas.Contains(h.Reserva.idReserva)).Select(s => s.Habitacion.numero).ToList(); IEnumerable <Habitacion> Habitaciones = _context.Habitacion.Where <Habitacion>(h => !habmalas.Contains(h.numero)).ToList(); // Si no hay habitaciones, devolvemos la vista de DatosReserva para que cambie las fechas seleccionadas. if (!Habitaciones.Any()) { ModelState.AddModelError("", $"No hay habitaciones disponibles con las fechas dadas"); return(View(datosReserva)); } return(RedirectToAction("vistaSeleccionHabitacionReserva", datosReservasProceso)); } else { ModelState.AddModelError("", $"Por favor, escriba las fechas en el formato correcto aaaa-mm-dd"); return(View(datosReserva)); } }
public async Task vistaDatosReservaPost_ModelIsValid_NotRooms() { // Arrange using (context) { var controller = new ReservasController(context); DatosReservaViewModel expectedModel = new DatosReservaViewModel { idPersona = 2 }; // Act var result = await controller.vistaDatosReservaPost(new DatosReservaViewModel { idPersona = 2, nombre = "Prueba2", apellidos = "Prueba2 Prueba2", nif = "87654321B", comentarios = "patata", fechaFin = new DateTime(2018, 01, 20), fechaInicio = new DateTime(2018, 01, 10), regimenComida = 1 }); //Assert var viewResult = Assert.IsType <ViewResult>(result); DatosReservaViewModel model = (result as ViewResult).Model as DatosReservaViewModel; Assert.Equal(expectedModel, model, Comparer.Get <DatosReservaViewModel>((p1, p2) => p1.idPersona == p2.idPersona)); } }
public async Task vistaDatosReserva() { // Arrange using (context) { var controller = new ReservasController(context); DatosReservaViewModel expectedModel = new DatosReservaViewModel { idPersona = 2, nombre = "Prueba2", apellidos = "Prueba2 Prueba2", nif = "87654321B" }; // Act var result = await controller.vistaDatosReserva(2); //Assert var viewResult = Assert.IsType <ViewResult>(result); DatosReservaViewModel model = (result as ViewResult).Model as DatosReservaViewModel; Assert.Equal(expectedModel, model, Comparer.Get <DatosReservaViewModel>((p1, p2) => p1.idPersona == p2.idPersona && p1.nif == p2.nif && p1.nombre == p2.nombre && p1.apellidos == p2.apellidos)); } }
public async Task vistaDatosReservaPost_ModelIsNotValid() { // Arrange using (context) { var controller = new ReservasController(context); controller.ModelState.AddModelError("fechaInicio", "Required"); DatosReservaViewModel expectedModel = new DatosReservaViewModel { idPersona = 2 }; // Act var result = await controller.vistaDatosReservaPost(new DatosReservaViewModel { idPersona = 2 }); //Assert var viewResult = Assert.IsType <ViewResult>(result); DatosReservaViewModel model = (result as ViewResult).Model as DatosReservaViewModel; Assert.Equal(expectedModel, model, Comparer.Get <DatosReservaViewModel>((p1, p2) => p1.idPersona == p2.idPersona)); } }