// Función para editar todos los datos de la reserva public ActionResult editarR(JsonReservaNueva_Vieja _ReservaNuevaVieja) { if (Session["COD_USUARIO"] == null) { //return View(); return RedirectToAction("Login", "Home"); } else { using (var basededatos = new DSRIEntities()) { using (var dbContextTransaction = basededatos.Database.BeginTransaction()) { try { // Realizar toda la transaccion de borrar y agregar var _HoraInicioTemp = DateTime.Parse(_ReservaNuevaVieja.hi_viejo, CultureInfo.CreateSpecificCulture("es-ES")); var _HoraFinalTemp = DateTime.Parse(_ReservaNuevaVieja.hf_viejo, CultureInfo.CreateSpecificCulture("es-ES")); /*Convierte las fechas a formato "HH:MM:SS"*/ TimeSpan hi_viejo = _HoraInicioTemp.TimeOfDay; TimeSpan hf_viejo = _HoraFinalTemp.TimeOfDay; var _HoraInicioTemp_n = DateTime.Parse(_ReservaNuevaVieja.horai, CultureInfo.CreateSpecificCulture("es-ES")); var _HoraFinalTemp_n = DateTime.Parse(_ReservaNuevaVieja.horaf, CultureInfo.CreateSpecificCulture("es-ES")); /*Convierte las fechas a formato "HH:MM:SS"*/ TimeSpan horai = _HoraInicioTemp_n.TimeOfDay; TimeSpan horaf = _HoraFinalTemp_n.TimeOfDay; DSRIFRESERVACION reservacionTemporal = new DSRIFRESERVACION(); var _reservaciones = basededatos.DSRIFRESERVACION; var _mobiliarios = basededatos.DSRITMOBILIARIORESERVACION; // se sacan las reservas viejas a editar var _getReservaciones = from reserva in _reservaciones where reserva.NOM_ACTIVIDAD == _ReservaNuevaVieja.nom_viejo && reserva.ID_PERSONA == _ReservaNuevaVieja.idusuario_viejo && reserva.TXT_TELEFONO == _ReservaNuevaVieja.tel_viejo && reserva.TXT_ESTADO != "Rechazada" && reserva.OBJETIVO == _ReservaNuevaVieja.idObjetivo_viejo && reserva.DESCRIPCION == _ReservaNuevaVieja.idDescripcion_viejo && reserva.HOR_INICIO == hi_viejo && reserva.HOR_FINAL == hf_viejo select reserva; var _getMobiliarios = from mobiliario in _mobiliarios where mobiliario.DSRIFRESERVACION.ID_RESERVACION == _ReservaNuevaVieja.id_viejo select mobiliario; List<DSRITMOBILIARIORESERVACION> _ListaMobiliario = new List<DSRITMOBILIARIORESERVACION>(); foreach (var m in _getMobiliarios) { _ListaMobiliario.Add(m); basededatos.DSRITMOBILIARIORESERVACION.Remove(m); } var listaReservas = _getReservaciones.ToList(); //Sacar los id de las reservas anteriores a editar List<int> idinmuebles = new List<int>(); foreach (var reser in listaReservas) { reservacionTemporal.ID_PERSONA = reser.ID_PERSONA; idinmuebles.Add(reser.ID_INMUEBLE); } idinmuebles = idinmuebles.Distinct().ToList(); // Tener en cuenta este pedaso de codigo para revisar el id a la hora de editar puesto que no deberia tener problema, pero al parecer no lo está haciendo bien // Para el viernes int largo = idinmuebles.Count - 1; if (!semanaigual(_ReservaNuevaVieja.ListaDiasViejos, _ReservaNuevaVieja.listaDias) || hi_viejo != horai || hf_viejo != horaf || _ReservaNuevaVieja.fi_viejo != _ReservaNuevaVieja.fechai || _ReservaNuevaVieja.ff_viejo != _ReservaNuevaVieja.fechaf)// si retorna false { foreach (var reser in listaReservas) { if (disponibilidadHora(horai, horaf, _ReservaNuevaVieja.fechai, _ReservaNuevaVieja.fechaf, reser.FEC_FINALRESERVACION, reser.ID_RESERVACION, _ReservaNuevaVieja.listaDias, _ReservaNuevaVieja.listaInmuebles) == false) { return Content("Error al editar reserva"); } } } foreach (var reser in listaReservas) { // eliminar todas las reservas viejas sin hacer commit por aquello de que pase un error de conexion y todo quede como antes DSRIFRESERVACION res_aux = basededatos.DSRIFRESERVACION.Find(reser.ID_RESERVACION); reservacionTemporal = reser; basededatos.DSRIFRESERVACION.Remove(res_aux); basededatos.SaveChanges(); } if (_ListaMobiliario.Count != 0) { reservacionTemporal.DSRITMOBILIARIORESERVACION = _ListaMobiliario; } reservacionTemporal.NOM_ACTIVIDAD = _ReservaNuevaVieja.nombre; reservacionTemporal.TXT_TELEFONO = _ReservaNuevaVieja.telef; reservacionTemporal.HOR_INICIO = horai; reservacionTemporal.HOR_FINAL = horaf; reservacionTemporal.ID_TIPOACTIVIDAD = _ReservaNuevaVieja.tipoactividad; reservacionTemporal.FEC_INICIALRESERVACION = _ReservaNuevaVieja.fechai; reservacionTemporal.FEC_FINALRESERVACION = _ReservaNuevaVieja.fechaf; reservacionTemporal.CAN_AFORO = _ReservaNuevaVieja.cantAforo; reservacionTemporal.CAN_AFORODIA = _ReservaNuevaVieja.cantAforodia; reservacionTemporal.ORGANIZADOR = _ReservaNuevaVieja.organizador; reservacionTemporal.OBJETIVO = _ReservaNuevaVieja.objetivo; reservacionTemporal.DESCRIPCION = _ReservaNuevaVieja.descripcion; if (_ReservaNuevaVieja.des == null || _ReservaNuevaVieja.des == "") { reservacionTemporal.TXT_EXTRA = "N/A"; } else { reservacionTemporal.TXT_EXTRA = _ReservaNuevaVieja.des; } //Empieza la creacion de la nueva reserva modificada y nueva DateTime _fechaI = _ReservaNuevaVieja.fechai; DateTime _fechaF = _ReservaNuevaVieja.fechaf; List<int> listadeDias = _ReservaNuevaVieja.listaDias; listadeDias = listadeDias.Distinct().ToList(); listadeDias.Sort(); while (_fechaI <= _fechaF) { DateTime FECHAINICIALUNICA = _fechaI; bool reservaEntrante = false; bool guardarReserva = false; DateTime UnicaFI = new DateTime(); UnicaFI = _fechaI; reservacionTemporal.FEC_INICIALRESERVACION = UnicaFI; // cargar la nueva fecha a la que se va recorriendo las nuevas fechas //recorrer la lista de dias y asignar la fecha final nueva a cada una de las nuevas reservas for (int dia = 0; dia < listadeDias.Count && (_fechaI <= _fechaF); dia++) { DateTime NuevoInicio = new DateTime(); NuevoInicio = _fechaI; if (listadeDias[dia] == (int)_fechaI.DayOfWeek) { reservaEntrante = true; } if (reservaEntrante) { guardarReserva = true; if (listadeDias[dia] == 6) { if (listadeDias.Count == 1 && listadeDias[dia] != (int)_fechaI.DayOfWeek) { break; } else if (listadeDias[dia] == (int)_fechaI.DayOfWeek && (_fechaI <= _fechaF)) { reservacionTemporal.FEC_FINALRESERVACION = NuevoInicio; } _fechaI = _fechaI.AddDays(1); dia = -1; } else if (listadeDias[dia] == (int)_fechaI.DayOfWeek && (_fechaI <= _fechaF)) { reservacionTemporal.FEC_FINALRESERVACION = NuevoInicio; _fechaI = _fechaI.AddDays(1); } else { break; } } } if (guardarReserva) { foreach (var idinmueble in _ReservaNuevaVieja.listaInmuebles)// Guardar reserva Por cada inmueble seleccionado { reservacionTemporal.ID_INMUEBLE = idinmueble; DateTime FECHAINICIAL = FECHAINICIALUNICA; while (FECHAINICIAL <= reservacionTemporal.FEC_FINALRESERVACION) { reservacionTemporal.FEC_INICIALRESERVACION = FECHAINICIAL; basededatos.DSRIFRESERVACION.Add(reservacionTemporal); ////Para guardar los inmuebles de esta reserva for (int i = 0; i < _ListaMobiliario.Count; i++) { DSRITMOBILIARIORESERVACION temp = _ListaMobiliario.ElementAt(i); temp.ID_RESERVACION = reservacionTemporal.ID_RESERVACION; basededatos.DSRITMOBILIARIORESERVACION.Add(temp); } basededatos.SaveChanges(); FECHAINICIAL = FECHAINICIAL.AddDays(1); } } } if (!reservaEntrante) { _fechaI = _fechaI.AddDays(1); } } dbContextTransaction.Commit(); // para registrar todos los cambios hechos en la base de datos } catch (DbEntityValidationException) // En caso de error se regresa al estado anterior sin necesidad de eliminar la base de datos { dbContextTransaction.Rollback(); return Content("Error al editar reserva"); } } } var resultz = new { Success = "True" }; return Json(resultz, JsonRequestBehavior.AllowGet); } }
public ActionResult Create(DSRIFRESERVACION _Reserva, List<int> _Ldias, DateTime _fechaI, DateTime _fechaF, List<int> _Listainmuebles) { List<int> listadeDias = _Ldias; listadeDias = listadeDias.Distinct().ToList(); listadeDias.Sort(); if (Session["COD_USUARIO"] == null) { return RedirectToAction("Login", "Home"); } else { using (var basededatos = new DSRIEntities()) { using (var dbContextTransaction = basededatos.Database.BeginTransaction()) { try { while (_fechaI <= _fechaF) { DateTime FECHAINICIALUNICA = _fechaI; _Reserva.ID_PERSONA = Session["ID_USUARIO"].ToString(); bool reservaEntrante = false; bool guardarReserva = false; DateTime UnicaFI = new DateTime(); UnicaFI = _fechaI; _Reserva.FEC_INICIALRESERVACION = UnicaFI; // cargar la nueva fecha a la que se va recorriendo las nuevas fechas //recorrer la lista de dias y asignar la fecha final nueva a cada una de las nuevas reservas for (int dia = 0; dia < listadeDias.Count; dia++) { DateTime NuevoInicio = new DateTime(); NuevoInicio = _fechaI; if (listadeDias[dia] == (int)_fechaI.DayOfWeek) { reservaEntrante = true; } if (reservaEntrante) { guardarReserva = true; if (listadeDias[dia] == 6) { if (listadeDias.Count == 1 && listadeDias[dia] != (int)_fechaI.DayOfWeek) { break; } else if (listadeDias[dia] == (int)_fechaI.DayOfWeek && (_fechaI <= _fechaF)) { _Reserva.FEC_FINALRESERVACION = NuevoInicio; _fechaI = _fechaI.AddDays(1); } dia = -1; } else if (listadeDias[dia] == (int)_fechaI.DayOfWeek && (_fechaI <= _fechaF)) { _Reserva.FEC_FINALRESERVACION = NuevoInicio; _fechaI = _fechaI.AddDays(1); } else { break; } } } if (guardarReserva) { foreach (var idReserva in _Listainmuebles)// Guardar reserva Por cada inmueble seleccionado { _Reserva.ID_INMUEBLE = idReserva; DateTime FECHAINICIAL = FECHAINICIALUNICA; while (FECHAINICIAL <= _Reserva.FEC_FINALRESERVACION) { _Reserva.FEC_INICIALRESERVACION = FECHAINICIAL; basededatos.DSRIFRESERVACION.Add(_Reserva); ICollection<DSRITMOBILIARIORESERVACION> _ListaMobiliario = _Reserva.DSRITMOBILIARIORESERVACION; //Para guardar los inmuebles de esta reserva for (int i = 0; i < _ListaMobiliario.Count; i++) { DSRITMOBILIARIORESERVACION temp = _ListaMobiliario.ElementAt(i); basededatos.DSRITMOBILIARIORESERVACION.Add(temp); } basededatos.SaveChanges(); FECHAINICIAL = FECHAINICIAL.AddDays(1); } } } if (!reservaEntrante) { _fechaI = _fechaI.AddDays(1); } } dbContextTransaction.Commit(); var resultz = new { Success = "True" }; return Json(resultz, JsonRequestBehavior.AllowGet); } catch (Exception) { dbContextTransaction.Rollback(); } } } return HttpNotFound(); } }