public JsonResult checarConflictos(Reservacion reservacion) { //Se ajustan las fechas iniciales y finales del total de la reservacion a la sesion inicial y final reservacion.ajustarFechaInicialFinal(); //Se encuentran las reservaciones y sesiones en conflicto var sesionesConConflictos = reservacion.reservacionesQueColisionan(db).ToList(); var reservacionesConflictos = sesionesConConflictos.Select(ses => ses.reservacion).Distinct().ToList(); //Se prepara la informacion para ser respondida como vista en JSON var resultado = (from res in reservacionesConflictos select new Reservacion.VMReservacion(res)).ToList(); var vmReservacionComprobada = new Reservacion.VMReservacion(reservacion); //Dentro del resultado, se marca cada una de las sesiones que estan causando conflicto //Se marcan los conflictos en cada una de las sesiones vmReservacionComprobada.sesiones.ForEach(s2 => //Sesiones consultadas { resultado.ForEach( res => res.sesiones.ForEach(s1 => //Sesiones con conflicto encontradas { if (!s1.conflicto) { s1.conflicto = s2.periodoDeTiempo.hasPartInside(s1.periodoDeTiempo) && s1.salonID == s2.salonID; } })); }); return(Json(resultado, JsonRequestBehavior.AllowGet)); }
public ActionResult Edit([Bind(Exclude = "fechaEventoInicial, fechaEventoFinal", Include = BIND_FIELDS)] Reservacion reservacion, string listServiciosSeleccionados, string listSesiones) { int numRegs = 0; if (ModelState.IsValid) { JavaScriptSerializer js = new JavaScriptSerializer(); //Se eliminan la seleccion de servicios hecha anteriormente var serviciosEliminar = db.ServiciosEnReservaciones .Where(ser => ser.eventoID == reservacion.eventoID); db.ServiciosEnReservaciones.RemoveRange(serviciosEliminar); //Se eliminan la sesiones en las que se divide la reservacion var sesionesEliminar = db.sesionesEnReservaciones .Where(ser => ser.reservacionID == reservacion.eventoID); db.sesionesEnReservaciones.RemoveRange(sesionesEliminar); numRegs = db.SaveChanges(); //Se guardan cambios //Se deserializa la lista de servicios seleccionados y sesiones modificadas List <ServiciosEnReservacion> serviciosSeleccionados = js.Deserialize <List <ServiciosEnReservacion> >(listServiciosSeleccionados); List <SesionDeReservacion> sesionesDeReservacion = js.Deserialize <List <SesionDeReservacion> >(listSesiones); //Se asocia nuevamente los servicios y sesiones con la reservacion serviciosSeleccionados.ForEach(ser => { ser.eventoID = reservacion.eventoID; db.Entry(ser).State = EntityState.Added; }); sesionesDeReservacion.ForEach(ses => { ses.reservacionID = reservacion.eventoID; db.Entry(ses).State = EntityState.Added; }); reservacion.sesiones = sesionesDeReservacion; reservacion.ajustarFechaInicialFinal(); //Se guardan cambios db.Entry(reservacion).State = EntityState.Modified; numRegs = db.SaveChanges(); if (numRegs > 0) //Si la operacion fue satisfactoria, se redirecciona al historial del cliente { return(RedirectToAction("Details", "Eventos", new { id = reservacion.eventoID })); } } //Si llega aqui, es que hubo un error, se muestra nuevamente la forma Reservacion newRes = prepararVista(reservacion.clienteID); reservacion.cliente = newRes.cliente; return(View("Form_Reservacion", reservacion)); }
public ActionResult Create([Bind(Exclude = "fechaEventoInicial, fechaEventoFinal", Include = BIND_FIELDS)] Reservacion reservacion, string listServiciosSeleccionados, string listSesiones) { //Se deserializa la lista de compras en un objeto JavaScriptSerializer js = new JavaScriptSerializer(); List <ServiciosEnReservacion> serviciosSeleccionados = js.Deserialize <List <ServiciosEnReservacion> >(listServiciosSeleccionados); List <SesionDeReservacion> sesionesEnReservacion = js.Deserialize <List <SesionDeReservacion> >(listSesiones); int numRegs = 0; //Si la informacion es valida y no hay colisiones if (ModelState.IsValid) { //Se registran las sesiones en las que se divide la reservación if (sesionesEnReservacion != null && sesionesEnReservacion.Count > 0) { reservacion.sesiones = sesionesEnReservacion; } //Se registran los servicios relacionados si existen if (serviciosSeleccionados != null && serviciosSeleccionados.Count > 0) { reservacion.serviciosContratados = serviciosSeleccionados.Where(ser => ser.cantidad > 0).ToList(); } //Se obtienes todas las reservaciones que colisionan con la que se encuentra registrando var colisiones = reservacion.reservacionesQueColisionan(db); //Si no hay colisiones if (colisiones.Count() == 0) { //Si no hay colisiones se registra reservacion.fechaReservacion = DateTime.Now; reservacion.ajustarFechaInicialFinal(); //Se establece como fecha inicial y final las fechas de las sesiones. //Guardar registro db.reservaciones.Add(reservacion); numRegs = db.SaveChanges(); //return RedirectToAction("Details", "Clientes", new { id = reservacion.clienteID }); return(RedirectToAction("Details", "Eventos", new { id = reservacion.eventoID })); } else { //Se reporta que hubo colsiones ModelState.AddModelError("", "La fecha seleccionada ya esta ocupada por " + "otras reservaciones ya registradas"); //Se carga la informacion relacioada con los servicios ya seleccionados foreach (var ser in reservacion.serviciosContratados) { db.Entry(ser).State = EntityState.Added; db.Entry(ser).Reference(s => s.servicio).Load(); } ViewBag.colisiones = colisiones; } } //Si llega hasta aca, hubo un problema y se muestra la forma de nuevo Reservacion newRes = prepararVista(reservacion.clienteID); reservacion.cliente = newRes.cliente; ViewBag.failPostBack = true; return(View("Form_Reservacion", reservacion)); }