Beispiel #1
0
        //Crear evento nuevo
        public Respuesta crearEvento(string pTipoEvento, JObject pDatosEventoJSON, JArray pListaCategorias)
        {
            Respuesta respuesta = null;

            try
            {
                string nombreEvento = null;
                switch (pTipoEvento)
                {
                //Si el evento a crear es una cartelera
                case "cartelera":
                    //Verificar si cartelera existe
                    Cartelera nuevaCartelera = _serial.leerDatosCartelera(pDatosEventoJSON);
                    nombreEvento = nuevaCartelera.Nombre;
                    eventos eveAux = _manejador.obtenerEvento(nuevaCartelera.Nombre);
                    if (eveAux != null)
                    {
                        return(_fabricaRespuestas.crearRespuesta(false, "Error: Evento ya existente. Intentar de nuevo por favor."));
                    }

                    //Verificar que existan categorias en la cartelera
                    FestivalCategoriaBanda[] categoriasSerial = _serial.getArrayFestivalCategoriaBanda(pListaCategorias);
                    if (categoriasSerial.Length == 0)
                    {
                        return(_fabricaRespuestas.crearRespuesta(false, "No se puede crear cartelera sin categorías. Por favor intente de nuevo."));
                    }

                    //Organiza información para envío
                    List <categoriasevento> categoriasEvento = _convertidor.updatecategoriasevento(categoriasSerial);

                    //Verificar existencia de bandas en categoria
                    foreach (categoriasevento catEve in categoriasEvento)
                    {
                        if (_manejador.obtenerBanda(catEve.FK_CATEGORIASEVENTO_BANDAS) == null)
                        {
                            string nombreCategoria = _manejador.obtenerCategoria(catEve.FK_CATEGORIASEVENTO_CATEGORIAS).categoria;
                            return(_fabricaRespuestas.crearRespuesta(false, "No se puede crear una cartelera si " + nombreCategoria
                                                                     + " no tiene bandas asociadas. Por favor intente de nuevo."));
                        }
                        bandas bandaAuxiliar = _manejador.obtenerBanda(catEve.FK_CATEGORIASEVENTO_BANDAS);
                        if (_manejador.comprobarBandaEnCartelera(nuevaCartelera.FechaInicioFestival, nuevaCartelera.FechaFinalFestival, bandaAuxiliar))
                        {
                            return(_fabricaRespuestas.crearRespuesta(false, "La banda " + bandaAuxiliar.nombreBan + " no se encuentra disponible para las fechas indicadas."));
                        }
                    }

                    //Almacena nuevo evento en persistencia
                    _manejador.añadirCartelera(_convertidor.updateeventos(nuevaCartelera), categoriasEvento);

                    //Publicar tweets de bandas agregadas a evento
                    publicarBandasTwitter(nombreEvento, categoriasEvento);

                    //Operación completada
                    respuesta = _fabricaRespuestas.crearRespuesta(true, "Cartelera creada exitosamente.");
                    break;

                //Si el evento a crear es un festival
                case "festival":
                    //Verificar si festival existe
                    Festival nuevoFestival = _serial.leerDatosFestival(pDatosEventoJSON);
                    eventos  eveAux1       = _manejador.obtenerEvento(nuevoFestival.Nombre);
                    if (eveAux1 == null)
                    {
                        return(_fabricaRespuestas.crearRespuesta(false, "Error: Cartelera no existente. Intentar de nuevo por favor. Se necesita partir de una cartelera para convertir a festival."));
                    }

                    FestivalCategoriaBanda[] categoriasFestival = _serial.getArrayFestivalCategoriaBanda(pListaCategorias);

                    eventos nuevoEvento = _convertidor.updateeventos(nuevoFestival);


                    //Organiza la información para envío
                    List <bandas>     bandasGanadorasFestival = parseBandas(categoriasFestival);
                    List <categorias> categoriasCartelera     = _manejador.obtenerCategoriasEvento(nuevoEvento.PK_eventos);
                    List <bandas>     todasBandasCartelera    = extraerBandasEvento(nuevoEvento, categoriasCartelera);

                    List <bandas> bandasPerdedoras = extraerBandasNoSeleccionadas(bandasGanadorasFestival, todasBandasCartelera);

                    Console.WriteLine("*** Cartelera ***");
                    printList(todasBandasCartelera);

                    Console.WriteLine("*** Ganadoras ***");
                    printList(bandasGanadorasFestival);

                    Console.WriteLine("*** Perdedoras ***");
                    printList(bandasPerdedoras);

                    List <string> bandasGanadoras        = bandasToString(bandasGanadorasFestival);
                    List <string> bandasPerdedorasString = bandasToString(bandasPerdedoras);

                    string bandaRecomendada = _chef.executeChefProcess(bandasGanadoras, bandasGanadorasFestival, nuevoEvento.PK_eventos);

                    nuevoEvento.FK_EVENTOS_BANDAS_CHEF = _manejador.obtenerBanda(bandaRecomendada).PK_bandas;

                    //Almacena nuevo evento en persistencia
                    _manejador.crearFestival(nuevoEvento, bandasPerdedoras);

                    //Publica tweet de nuevo festival
                    publicarFestivalNuevoTwitter(nuevoEvento.nombreEve);

                    //Operación completada
                    respuesta = _fabricaRespuestas.crearRespuesta(true, "Festival creado exitosamente. Nuestra banda recomendada por el chef para el festival es: " + bandaRecomendada);
                    break;

                default:
                    //Tipo de evento no existe
                    respuesta = _fabricaRespuestas.crearRespuesta(false, "Tipo de evento no existente.");
                    break;
                }
            } catch (Exception e)
            {
                //respuesta = _fabricaRespuestas.crearRespuesta(false, "Error al crear evento por falta de información. Verifique los datos ingresados por favor.");
                respuesta = _fabricaRespuestas.crearRespuesta(false, "Error al crear evento. Por favor intente de nuevo.", e.ToString());
            }

            //Retorna respuesta
            return(respuesta);
        }