// GET: /Reservacion/Edit/5 public ActionResult EditarReserva(int? id) { if (Session["COD_USUARIO"] == null) { return RedirectToAction("Login", "Home"); } else { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } DSRIFRESERVACION temp = db.DSRIFRESERVACION.Find(id); int id_aux = fechaPrincipal(temp.FEC_INICIALRESERVACION, temp.FEC_FINALRESERVACION, temp.ID_RESERVACION); DSRIFRESERVACION dsrifreservacion = db.DSRIFRESERVACION.Find(id_aux); DSRIEntities dbN = new DSRIEntities(); var reservas_a_editar = from reser_edit in dbN.DSRIFRESERVACION where dsrifreservacion.NOM_ACTIVIDAD == reser_edit.NOM_ACTIVIDAD && dsrifreservacion.OBJETIVO == reser_edit.OBJETIVO && dsrifreservacion.ORGANIZADOR == reser_edit.ORGANIZADOR && dsrifreservacion.ID_TIPOACTIVIDAD == reser_edit.ID_TIPOACTIVIDAD && dsrifreservacion.TXT_TELEFONO == reser_edit.TXT_TELEFONO && dsrifreservacion.HOR_INICIO == reser_edit.HOR_INICIO && dsrifreservacion.ID_PERSONA == reser_edit.ID_PERSONA && dsrifreservacion.HOR_FINAL == reser_edit.HOR_FINAL select reser_edit; List<int> Lista_de_dias = new List<int>(); List<int> Lista_de_inmuebles = new List<int>(); var lista_reservas_a_ = reservas_a_editar.ToList(); foreach (var r in reservas_a_editar) { while (r.FEC_INICIALRESERVACION <= r.FEC_FINALRESERVACION) { Lista_de_inmuebles.Add((int)r.ID_INMUEBLE); Lista_de_dias.Add((int)r.FEC_INICIALRESERVACION.DayOfWeek); r.FEC_INICIALRESERVACION = r.FEC_INICIALRESERVACION.AddDays(1); } } Lista_de_inmuebles = Lista_de_inmuebles.Distinct().ToList();// Quitar los inmuebles repetidos de la lista Lista_de_dias = Lista_de_dias.Distinct().ToList(); //Quitar los dias que estan repetidos en la lista de dias de la parte de editar las reservas //PARA LOS INMUEBLES List<string> Lista_de_inmuebles_string = new List<string>(); // Esta parte es para crear la lista de dias pero en string para poder verlos en la parte de html en viewbag foreach (var inmueblenumero in Lista_de_inmuebles) { Lista_de_inmuebles_string.Add(inmueblenumero.ToString()); } ViewBag.ListaInmuebles = String.Join(",", Lista_de_inmuebles_string.Cast<string>().ToArray()); // PARA LOS DIAS List<string> Lista_de_dias_string = new List<string>(); // Esta parte es para crear la lista de dias pero en string para poder verlos en la parte de html en viewbag foreach (var dianumero in Lista_de_dias) { Lista_de_dias_string.Add(dianumero.ToString()); } ViewBag.DiasEditar = String.Join(",", Lista_de_dias_string.Cast<string>().ToArray()); if (dsrifreservacion == null) { return HttpNotFound(); } var todo = from reserva in db.DSRIFRESERVACION where reserva.NOM_ACTIVIDAD == dsrifreservacion.NOM_ACTIVIDAD && reserva.TXT_TELEFONO == dsrifreservacion.TXT_TELEFONO && reserva.TXT_ESTADO == dsrifreservacion.TXT_ESTADO && reserva.OBJETIVO == dsrifreservacion.OBJETIVO && reserva.DESCRIPCION == dsrifreservacion.DESCRIPCION && reserva.HOR_INICIO == dsrifreservacion.HOR_INICIO && reserva.HOR_FINAL == dsrifreservacion.HOR_FINAL && reserva.ID_PERSONA == dsrifreservacion.ID_PERSONA select reserva; var listaDeTodasLasReservas = todo.ToList(); // Sacar la fecha mayor foreach (var i in listaDeTodasLasReservas) { if (dsrifreservacion.FEC_FINALRESERVACION < i.FEC_FINALRESERVACION) { dsrifreservacion.FEC_FINALRESERVACION = i.FEC_FINALRESERVACION; } } var fecha = dsrifreservacion.FEC_INICIALRESERVACION; var hora1 = dsrifreservacion.HOR_INICIO; var hora2 = dsrifreservacion.HOR_FINAL; var Inm = GetInm(Lista_de_inmuebles); //ViewBag.INMUEBLE = new SelectList(db.DSRIFINMUEBLE, "ID_INMUEBLE", "NOM_INMUEBLE", dsrifreservacion.ID_INMUEBLE); ViewBag.ID_INMUEBLE = new SelectList(Inm, "Value", "Text"); //ViewBag.ID_PERSONA = Session["ID_USUARIO"].ToString(); ViewBag.ID_TIPOACTIVIDAD = new SelectList(db.DSRIFTIPOSACTIVIDAD, "ID_TIPOACTIVIDAD", "NOM_TIPOACTIVIDAD"); return View(dsrifreservacion); } }
// 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 bool disponibleInmueble(DateTime _fechaI, DateTime _fechaF, TimeSpan _horaInicio, TimeSpan _horaFinal, List<int> _lDias, int iddisponible, DSRIEntities basededatos) { var _res = Json(new[] { new { id="", name=""}, }, JsonRequestBehavior.AllowGet); JsonObject _resultado = new JsonObject(); List<int> listaGeneralInmueblesDisponibles = new List<int>(); List<int> listaGeneralInmueblesDisponibles_aux = new List<int>(); //QUITAR LOS VALORES REPETIDOS _lDias = _lDias.Distinct().ToList(); // TODOS LOS INMUBLES EN EL SISTEMA var queryTodosLosInmuebles = from Inm in basededatos.DSRIFINMUEBLE select new { id = Inm.ID_INMUEBLE, name = Inm.NOM_INMUEBLE }; bool listaVacia = true; //COMPARAR CADA UNO POR DIA Y ELIMINARLO DE TODOS LOS INMUEBLES DateTime inicioAux = _fechaI; //AL HACER LA CONSULTA POR DIA, SOLO SE OCUPA LA FECHA DE INICIO PARA VERIFICAR SI EN ESE DIA ESTA LIBRE EL INMUEBLE Y RECORRE DIA POR DIA while (inicioAux <= _fechaF) { foreach (var i in _lDias) { if (i == (int)(inicioAux.DayOfWeek)) { var queryInmueblesParaUnDia = from Inm in basededatos.inmublesDisponibles(inicioAux, inicioAux, _horaInicio, _horaFinal) select new { id = Inm.ID_INMUEBLE, name = Inm.NOM_INMUEBLE }; if (listaVacia) { foreach (var soloinmu in queryInmueblesParaUnDia) { listaGeneralInmueblesDisponibles.Add(soloinmu.id); } listaVacia = false; } else { foreach (var soloinmu in queryInmueblesParaUnDia) {// por cada inmueble de este dia foreach (var inmu in listaGeneralInmueblesDisponibles) {//por cada inmueble disponible para el primer dia if (soloinmu.id == inmu) { //Agregar los inmuebles que estan disponibles para este dia en especifico a otra lista listaGeneralInmueblesDisponibles_aux.Add(soloinmu.id); } } } //restaurar a la lista original y vaciar la auxiliar listaGeneralInmueblesDisponibles.RemoveRange(0, listaGeneralInmueblesDisponibles.Count); foreach (var id in listaGeneralInmueblesDisponibles_aux) { listaGeneralInmueblesDisponibles.Add(id); } listaGeneralInmueblesDisponibles_aux.RemoveRange(0, listaGeneralInmueblesDisponibles_aux.Count); } break; } } inicioAux = inicioAux.AddDays(1); } var queryB = from Inm in basededatos.DSRIFINMUEBLE select new { id = Inm.ID_INMUEBLE, name = Inm.NOM_INMUEBLE }; var resTemp = queryB.ToList(); foreach (var Inm in queryB) { bool del = false; foreach (var soloI in listaGeneralInmueblesDisponibles) { if (soloI == Inm.id) { del = false; break; } del = true; } if (del) { for (int i = 0; i < resTemp.Count; i++) { if (resTemp.ElementAt(i).id == Inm.id) { resTemp.Remove(resTemp.ElementAt(i)); del = false; break; } } } } int contador = 0; bool bromelia = false; foreach (var inmueble in resTemp) { if (inmueble.name == "Bromelia 1" || inmueble.name == "Bromelia 2") { contador++; } if (inmueble.name == "Bromelia Completo") { bromelia = true; } } if (bromelia == false) { for (int i = 0; i < resTemp.Count; i++) { if (resTemp.ElementAt(i).name == "Bromelia 1") { resTemp.Remove(resTemp.ElementAt(i)); } } for (int i = 0; i < resTemp.Count; i++) { if (resTemp.ElementAt(i).name == "Bromelia 2") { resTemp.Remove(resTemp.ElementAt(i)); } } } else if (contador < 2) { for (int i = 0; i < resTemp.Count; i++) { if (resTemp.ElementAt(i).name == "Bromelia Completo") { resTemp.Remove(resTemp.ElementAt(i)); } } } // Comprobar la disponibilidad del inmueble de la edicion con la nueva fecha foreach (var reserva in resTemp) { if (reserva.id == iddisponible) { return true; } } return false; }
public bool disponibilidadHora(TimeSpan hi_nueva, TimeSpan hf_nueva, DateTime fi_nueva, DateTime ff_nueva, DateTime fi, int id, List<int> _lDias, List<int> _lInmuebles) { using (var basededatos = new DSRIEntities()) { using (var dbContextTransaction = basededatos.Database.BeginTransaction()) { try { // Realizar toda la transaccion de borrar y agregar DSRIFRESERVACION temp = basededatos.DSRIFRESERVACION.Find(id); var all_reservas_relacionadas = from reservas in basededatos.DSRIFRESERVACION where (reservas.NOM_ACTIVIDAD == temp.NOM_ACTIVIDAD && reservas.OBJETIVO == temp.OBJETIVO && reservas.ORGANIZADOR == temp.ORGANIZADOR && reservas.HOR_INICIO == temp.HOR_INICIO && reservas.HOR_FINAL == temp.HOR_FINAL && reservas.ID_PERSONA == temp.ID_PERSONA && reservas.ID_TIPOACTIVIDAD == temp.ID_TIPOACTIVIDAD && reservas.TXT_ESTADO == temp.TXT_ESTADO && reservas.TXT_TELEFONO == temp.TXT_TELEFONO && reservas.TXT_EXTRA == temp.TXT_EXTRA && reservas.TXT_ESTADO != "Rechazada") select reservas; var lista_reservas_aeliminar = all_reservas_relacionadas.ToList(); foreach (var r in lista_reservas_aeliminar) { basededatos.DSRIFRESERVACION.Remove(r); basededatos.SaveChanges(); } // VERIFICAR DISPONIBILIDAD DE TODOS LOS INMUEBLES foreach (var i in _lInmuebles) { if (!disponibleInmueble(fi_nueva, ff_nueva, hi_nueva, hf_nueva, _lDias, i, basededatos)) { dbContextTransaction.Rollback(); return false; } } return true; } catch (Exception) { dbContextTransaction.Rollback(); return false; } } } }
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(); } }
public ActionResult nuevopdf2(string formcollection) { if (Session["COD_USUARIO"] == null) { return RedirectToAction("Login", "Home"); } else { List<string> listaFiltros = Session["Filtros"] as List<string>; List<string> list = formcollection.Split(',').ToList(); int largo = list.Count; DateTime FechaI = DateTime.Parse(list[largo - 2]); DateTime FechaF = DateTime.Parse(list[largo - 1]); largo = largo - 3; int largo_aux = largo; var reservaciones = db.DSRIFRESERVACION; var inmuebles = db.DSRIFINMUEBLE; var _query0 = from reserva in reservaciones where ((reserva.FEC_INICIALRESERVACION >= FechaI && reserva.FEC_INICIALRESERVACION <= FechaF && reserva.TXT_ESTADO != "Rechazada" && reserva.TXT_ESTADO != "En Proceso")) select reserva; var listaTemporal1 = _query0.ToList(); foreach (var reserva in _query0.ToList()) { bool eliminar = true; for (int a = 0; a <= largo; a++) { if (reserva.ID_INMUEBLE == Convert.ToInt32(list[a])) { eliminar = false; break; } } if (eliminar) { for (int i = 0; i < listaTemporal1.Count; i++) { if (listaTemporal1.ElementAt(i).ID_INMUEBLE == reserva.ID_INMUEBLE) { listaTemporal1.Remove(listaTemporal1.ElementAt(i)); eliminar = true; break; } } } } // Eliminar con los filtros las reservas que no esten foreach (var filtro in listaFiltros) { for (int i = 0; i < listaTemporal1.Count; i++) { if ((listaTemporal1.ElementAt(i).DSRIFTIPOSACTIVIDAD.NOM_TIPOACTIVIDAD == "Alquiler Instalaciones" && filtro == "alquiler") || (listaTemporal1.ElementAt(i).DSRIFTIPOSACTIVIDAD.NOM_TIPOACTIVIDAD == "Actividad Interna" && filtro == "actividad") || ((listaTemporal1.ElementAt(i).DSRIFTIPOSACTIVIDAD.NOM_TIPOACTIVIDAD == "Transferencia Tecnológica" || listaTemporal1.ElementAt(i).DSRIFTIPOSACTIVIDAD.NOM_TIPOACTIVIDAD == "Vinculación Empresarial" || listaTemporal1.ElementAt(i).DSRIFTIPOSACTIVIDAD.NOM_TIPOACTIVIDAD == "Educación Continua") && filtro == "ejes")) { listaTemporal1.Remove(listaTemporal1.ElementAt(i)); i--; } } } var _query1 = listaTemporal1.ToList().OrderBy(ll => ll.FEC_INICIALRESERVACION.Year); var _query2 = _query1.ToList().OrderBy(ll => ll.FEC_INICIALRESERVACION.Month); var _query3 = _query2.ToList().OrderBy(ll => ll.FEC_INICIALRESERVACION.Date); // quitar los valores repetidos de la lista para que quede listo la busqueda y el pdf Document pdfDoc = new Document(PageSize.A4, 10, 10, 10, 10); try { PdfWriter.GetInstance(pdfDoc, System.Web.HttpContext.Current.Response.OutputStream); pdfDoc.Open(); string url = "http://3.bp.blogspot.com/-qZcs1DZ8Wys/TWU1PrkuMzI/AAAAAAAAAXM/u85hsQzQc_w/s320/image002.jpg"; Image jpg = Image.GetInstance(new Uri(url)); jpg.SpacingBefore = 7f; jpg.ScalePercent(35f); pdfDoc.Add(jpg); Chunk Titulo = new Chunk("Sistema de Reservas de Inmuebles, TEC-SSC", FontFactory.GetFont(FontFactory.TIMES_BOLD, 16)); Paragraph p = new Paragraph(); p.Alignment = Element.ALIGN_LEFT; p.Add(Titulo); pdfDoc.Add(p); Chunk subtitulo = new Chunk("Centro de Transferencia Tecnológica y Educación Continua.", FontFactory.GetFont(FontFactory.TIMES, 12)); Paragraph p1 = new Paragraph(); p1.Alignment = Element.ALIGN_LEFT; p1.Add(subtitulo); pdfDoc.Add(p1); Chunk extrainfo = new Chunk("Informe Generado Por: " + @Session["NOM_USUARIO"], FontFactory.GetFont(FontFactory.TIMES, 10)); Paragraph pextra = new Paragraph(); pextra.Alignment = Element.ALIGN_LEFT; pextra.Add(extrainfo); pdfDoc.Add(pextra); Chunk extrainfo1 = new Chunk("El día: " + @DateTime.Now.ToShortDateString(), FontFactory.GetFont(FontFactory.TIMES, 10)); Paragraph pextra1 = new Paragraph(); pextra1.SpacingAfter = 7f; pextra1.Alignment = Element.ALIGN_LEFT; pextra1.Add(extrainfo1); pdfDoc.Add(pextra1); PdfPTable table = new PdfPTable(3); table.WidthPercentage = 100; float[] widths = new float[] { 20f, 20f, 60f }; table.SetWidths(widths); table.HorizontalAlignment = 0; table.SpacingAfter = 10; PdfPCell cellFI = new PdfPCell(new Phrase("Fecha Inicio", FontFactory.GetFont(FontFactory.TIMES_BOLD, 11))); cellFI.Colspan = 1; cellFI.BackgroundColor = new iTextSharp.text.BaseColor(204, 204, 204); cellFI.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right PdfPCell cellFF = new PdfPCell(new Phrase("Fecha Finalización", FontFactory.GetFont(FontFactory.TIMES_BOLD, 11))); cellFF.Colspan = 1; cellFF.BackgroundColor = new iTextSharp.text.BaseColor(204, 204, 204); cellFF.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right PdfPCell cellN = new PdfPCell(new Phrase("Informe de la reserva", FontFactory.GetFont(FontFactory.TIMES_BOLD, 11))); cellN.Colspan = 1; cellN.BackgroundColor = new iTextSharp.text.BaseColor(204, 204, 204); cellN.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right table.AddCell(cellFI); table.AddCell(cellFF); table.AddCell(cellN); var listaOrdenada = _query3.ToList(); for (int i = 0; i < listaOrdenada.Count; i++) { table.AddCell(new Phrase(listaOrdenada.ElementAt(i).FEC_INICIALRESERVACION.ToShortDateString(), FontFactory.GetFont(FontFactory.HELVETICA, 10))); table.AddCell(new Phrase(listaOrdenada.ElementAt(i).FEC_FINALRESERVACION.ToShortDateString(), FontFactory.GetFont(FontFactory.HELVETICA, 10))); DateTime horaI = new DateTime(); horaI = DateTime.Today.Add(listaOrdenada.ElementAt(i).HOR_INICIO); DateTime HoraF = new DateTime(); HoraF = DateTime.Today.Add(listaOrdenada.ElementAt(i).HOR_FINAL); string hor_inicio = horaI.ToString("h:mm"); string hor_final = HoraF.ToString("h:mm"); if (listaOrdenada.ElementAt(i).HOR_INICIO.Hours <= 11) { hor_inicio = hor_inicio + " am"; } else { hor_inicio = hor_inicio + " pm"; } if (listaOrdenada.ElementAt(i).HOR_FINAL.Hours <= 11) { hor_final = hor_final + " am"; } else { hor_final = hor_final + " pm"; } int? costo = 0; if (listaOrdenada.ElementAt(i).DSRIFINMUEBLE.DSRIFCLASIFINMUEBLE.NOM_CLASIFINMUEBLE == "CTEC") // Aqui se cobro por hora { while (listaOrdenada.ElementAt(i).FEC_INICIALRESERVACION <= listaOrdenada.ElementAt(i).FEC_FINALRESERVACION) { while (listaOrdenada.ElementAt(i).HOR_INICIO < listaOrdenada.ElementAt(i).HOR_FINAL) { TimeSpan mediaHora = TimeSpan.FromHours(1); // Agregar Media hora a la hora de inicio costo += listaOrdenada.ElementAt(i).DSRIFINMUEBLE.COS_INMUEBLE; listaOrdenada.ElementAt(i).HOR_INICIO = listaOrdenada.ElementAt(i).HOR_INICIO.Add(mediaHora); } if (listaOrdenada.ElementAt(i).DSRIFINMUEBLE.NOM_INMUEBLE == "Tecnoaula 1") { costo += 20000; } DateTime nuevaFecha = listaOrdenada.ElementAt(i).FEC_INICIALRESERVACION.AddDays(1); listaOrdenada.ElementAt(i).FEC_INICIALRESERVACION = nuevaFecha; } PdfPCell celda = new PdfPCell(); Phrase texto = new Phrase("ACTIVIDAD: " + listaOrdenada.ElementAt(i).NOM_ACTIVIDAD + "\nINMUEBLE: " + listaOrdenada.ElementAt(i).DSRIFINMUEBLE.NOM_INMUEBLE + "\nINICIO: " + hor_inicio + "\nFIN: " + hor_final + "\nCOSTO POR HORA ¢: " + listaOrdenada.ElementAt(i).DSRIFINMUEBLE.COS_INMUEBLE + "\nCOSTO TOTAL ¢: " + costo, FontFactory.GetFont(FontFactory.HELVETICA, 8)); celda.AddElement(texto); table.AddCell(celda); } else if (listaOrdenada.ElementAt(i).DSRIFINMUEBLE.DSRIFCLASIFINMUEBLE.NOM_CLASIFINMUEBLE == "ECOTEC") // Aqui se cobra por Día { while (listaOrdenada.ElementAt(i).FEC_INICIALRESERVACION <= listaOrdenada.ElementAt(i).FEC_FINALRESERVACION) { costo += listaOrdenada.ElementAt(i).DSRIFINMUEBLE.COS_INMUEBLE; DateTime nuevaFecha = listaOrdenada.ElementAt(i).FEC_INICIALRESERVACION.AddDays(1); listaOrdenada.ElementAt(i).FEC_INICIALRESERVACION = nuevaFecha; } PdfPCell celda = new PdfPCell(); Phrase texto = new Phrase("ACTIVIDAD: " + listaOrdenada.ElementAt(i).NOM_ACTIVIDAD + "\nINMUEBLE: " + listaOrdenada.ElementAt(i).DSRIFINMUEBLE.NOM_INMUEBLE + "\nINICIO: " + hor_inicio + "\nFIN: " + hor_final + "\nCOSTO POR DÍA ¢: " + listaOrdenada.ElementAt(i).DSRIFINMUEBLE.COS_INMUEBLE + "\nCOSTO TOTAL ¢: " + costo, FontFactory.GetFont(FontFactory.HELVETICA, 8)); celda.AddElement(texto); table.AddCell(celda); } } // Hasta Aqui llega la tabla // Se Crea una nueva instancia para que no se vea afectaba sobre la otra consulta DSRIEntities nn = new DSRIEntities(); var res = nn.DSRIFRESERVACION; var todasReservas = from r in res where ((r.FEC_INICIALRESERVACION >= FechaI && r.FEC_INICIALRESERVACION <= FechaF && r.TXT_ESTADO != "Rechazada" && r.TXT_ESTADO != "En Proceso")) select r; var lTemporal1 = todasReservas.ToList(); foreach (var reser in todasReservas.ToList()) { bool eli = true; for (int a = 0; a <= largo; a++) { if (reser.ID_INMUEBLE == Convert.ToInt32(list[a])) { eli = false; break; } } if (eli) { for (int i = 0; i < lTemporal1.Count; i++) { if (lTemporal1.ElementAt(i).ID_INMUEBLE == reser.ID_INMUEBLE) { lTemporal1.Remove(lTemporal1.ElementAt(i)); eli = true; break; } } } } // Eliminar con los filtros las reservas que no esten foreach (var filtro in listaFiltros) { for (int i = 0; i < listaTemporal1.Count; i++) { if ((lTemporal1.ElementAt(i).DSRIFTIPOSACTIVIDAD.NOM_TIPOACTIVIDAD == "Alquiler Instalaciones" && filtro == "alquiler") || (lTemporal1.ElementAt(i).DSRIFTIPOSACTIVIDAD.NOM_TIPOACTIVIDAD == "Actividad Interna" && filtro == "actividad") || ((lTemporal1.ElementAt(i).DSRIFTIPOSACTIVIDAD.NOM_TIPOACTIVIDAD == "Transferencia Tecnológica" || lTemporal1.ElementAt(i).DSRIFTIPOSACTIVIDAD.NOM_TIPOACTIVIDAD == "Vinculación Empresarial" || lTemporal1.ElementAt(i).DSRIFTIPOSACTIVIDAD.NOM_TIPOACTIVIDAD == "Educación Continua") && filtro == "ejes")) { lTemporal1.Remove(lTemporal1.ElementAt(i)); i--; } } } pdfDoc.Add(table); // Hasta aqui toda la tabla var lista1 = lTemporal1.ToList().OrderBy(aa => aa.FEC_INICIALRESERVACION.Year); var lista2 = lista1.ToList().OrderBy(aa => aa.FEC_INICIALRESERVACION.Month); var lista3 = lista2.ToList().OrderBy(aa => aa.FEC_INICIALRESERVACION.Date); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// var listaInmuebles = lista3.ToList(); List<int> UnicosInmuebles = new List<int>();// Dejar solo un inmueble de cada clase foreach (var inmue in listaInmuebles) { UnicosInmuebles.Add(inmue.DSRIFINMUEBLE.ID_INMUEBLE); } UnicosInmuebles = UnicosInmuebles.Distinct().ToList(); /////////// // Agregamos Un Titulo Para la descripción de todo el costo general de los inmuebles para que no se vea feo XD Chunk factura = new Chunk("COSTO TOTAL DE CADA INMUEBLE", FontFactory.GetFont(FontFactory.TIMES_BOLD, 11)); Paragraph pfactura = new Paragraph(); pfactura.Alignment = Element.ALIGN_CENTER; pfactura.Add(factura); pdfDoc.Add(pfactura); for (int a = 0; a < UnicosInmuebles.Count; a++) // recorre la lista de inmuebles unicos de la lista previamente llenada { int? costoGeneral = 0; int? costoUnitario = 0; foreach (var reserva in listaInmuebles) // recorre la lista en donde estan todas las reservas que se encuentran en el modelo { if (reserva.ID_INMUEBLE == UnicosInmuebles.ElementAt(a)) // se compara si el id de la lista es igual a la de la reserva para empezar a sumar { ////////////////////////////////////////////////////////////////////// if (reserva.DSRIFINMUEBLE.DSRIFCLASIFINMUEBLE.NOM_CLASIFINMUEBLE == "CTEC") // Aqui se cobro por hora para los del CTEC { while (reserva.FEC_INICIALRESERVACION <= reserva.FEC_FINALRESERVACION) { while (reserva.HOR_INICIO < reserva.HOR_FINAL) { TimeSpan mediaHora = TimeSpan.FromHours(1); // Agregar Media hora a la hora de inicio costoUnitario += reserva.DSRIFINMUEBLE.COS_INMUEBLE; reserva.HOR_INICIO = reserva.HOR_INICIO.Add(mediaHora); } if (reserva.DSRIFINMUEBLE.NOM_INMUEBLE == "Tecnoaula 1") { costoUnitario += 20000; } DateTime nuevaFecha = reserva.FEC_INICIALRESERVACION.AddDays(1); reserva.FEC_INICIALRESERVACION = nuevaFecha; } } ////////////////////////////////////////////////////////////////////// else if (reserva.DSRIFINMUEBLE.DSRIFCLASIFINMUEBLE.NOM_CLASIFINMUEBLE == "ECOTEC") // Aqui se cobra por Día para los del ECOTEC { while (reserva.FEC_INICIALRESERVACION <= reserva.FEC_FINALRESERVACION) { costoUnitario += reserva.DSRIFINMUEBLE.COS_INMUEBLE; DateTime nuevaFecha = reserva.FEC_INICIALRESERVACION.AddDays(1); reserva.FEC_INICIALRESERVACION = nuevaFecha; } } } } costoGeneral += costoUnitario; DSRIFINMUEBLE inmuebleUnico = db.DSRIFINMUEBLE.Find(UnicosInmuebles.ElementAt(a)); Chunk nuevoParrafo = new Chunk(inmuebleUnico.NOM_INMUEBLE + ": ¢" + costoGeneral, FontFactory.GetFont(FontFactory.TIMES, 10)); Paragraph nuevoP = new Paragraph(); nuevoP.Alignment = Element.ALIGN_CENTER; nuevoP.Add(nuevoParrafo); pdfDoc.Add(nuevoP); costoUnitario = 0; costoGeneral = 0; } pdfDoc.Close(); Response.ContentType = "application/pdf"; Response.AddHeader("content-disposition", "attachment; filename= Informe de Reservas.pdf"); System.Web.HttpContext.Current.Response.Write(pdfDoc); Response.Flush(); Response.End(); System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest(); } catch (DocumentException de) { System.Web.HttpContext.Current.Response.Write(de.Message); } catch (IOException ioEx) { System.Web.HttpContext.Current.Response.Write(ioEx.Message); } catch (Exception ex) { System.Web.HttpContext.Current.Response.Write(ex.Message); } return View(); } }