コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }