Esempio n. 1
0
        /// <summary>
        /// Obtiene una lista de campañas que se superponen en fecha y horario con la indicada.
        /// </summary>
        /// <param name="pCampaña">Campaña nueva.</param>
        /// <returns>Lista de campañas existentes que se superponen con la nueva.</returns>
        public List<Campaña> ListaCampañasEnHorario(Campaña pCampaña)
        {
            DateTime mFIni = pCampaña.FechaInicio;
            DateTime mFFin = pCampaña.FechaFin;
            TimeSpan mHIni = pCampaña.HoraInicio;
            TimeSpan mHFin = pCampaña.HoraFin;

            var mConsulta = iUnidadDeTrabajo.RepositorioCampaña.Queryable.Where(c => (
                (
                    (mFIni >= c.FechaInicio && mFFin <= c.FechaFin) || // Intervalo dentro del otro (includio)
                    (mFIni < c.FechaInicio && mFFin >= c.FechaInicio && mFFin <= c.FechaFin) || // Intervalo que arranca antes y termina dentro
                    (mFIni >= c.FechaInicio && mFIni <= c.FechaFin && mFFin > c.FechaFin) || // Intervalo que arranque dentro y termine por fuera
                    (mFIni < c.FechaInicio && mFFin > c.FechaFin) // Intervalo que contenga al otro
                )
                    &&
                (
                    (mHIni >= c.HoraInicio && mHFin <= c.HoraFin) || // Intervalo dentro del otro (includio)
                    (mHIni < c.HoraInicio && mHFin >= c.HoraInicio && mHFin <= c.HoraFin) || // Intervalo que arranca antes y termina dentro
                    (mHIni >= c.HoraInicio && mHIni <= c.HoraFin && mHFin > c.HoraFin) || // Intervalo que arranque dentro y termine por fuera
                    (mHIni < c.HoraInicio && mHFin > c.HoraFin) // Intervalo que contenga al otro 
                )
                    &&
                (c.Activo == true)
            ));

            return mConsulta.ToList();
        }
        public FormAgregarModificarCampaña(EasyLog pLogger, int pIdCampaña)
        {
            InitializeComponent();

            iLogger = pLogger;

            if (pIdCampaña > 0)
            {
                iCampaña = iCtrlCampaña.ObtenerPorId(pIdCampaña);
                lbTitulo.Text = "Modificar campaña";
                iAgregar = false;
            }
            else
            {
                lbTitulo.Text = "Agregar Campaña";
                iAgregar = true;
            }

            iLogger.Info("Initialize form AgregarModificarCampaña finalizado.");
        }
        private void btnAgregar_Click(object sender, EventArgs e)
        {
            Campaña mCampaña = new Campaña()
            {
                FechaInicio = dtpFechaInicio.Value.Date,
                HoraInicio = dtpHoraInicio.Value.TimeOfDay,
                FechaFin = dtpFechaFin.Value.Date,
                HoraFin = dtpHoraFin.Value.TimeOfDay
            };
            List<string> listaGaleria = galeria.ListaImagenes;

            if (txtNombreCampaña.Text == "")
            {
                Utilidades.MensajeError(this, "¡Atención!", "Debe ingresar un nombre para la campaña.");
                txtNombreCampaña.Focus();
            }
            else if (dtpFechaFin.Value < dtpFechaInicio.Value)
            {
                Utilidades.MensajeError(this, "¡Atención!", "La fecha de finalización de la campaña debe ser posterior a la de inicio.");
                dtpFechaFin.Focus();
            }
            else if (dtpHoraFin.Value <= dtpHoraInicio.Value)
            {
                Utilidades.MensajeError(this, "¡Atención!", "La hora en la que termina la campaña debe ser posterior a la de inicio.");
                dtpHoraFin.Focus();
            }
            else if (iAgregar && iCtrlCampaña.ExisteCampañaEnHorario(mCampaña))
            {
                Utilidades.MensajeError(this, "¡Atención!", "Existe otra campaña en ese horario. Elija otro momento del día en el cual mostrarla.");
                dtpHoraInicio.Focus();
            }
            else if(dgridPrioridades.Rows.Count == 0)
                Utilidades.MensajeError(this, "¡Atención!", "Toda campaña debe constar de almenos 1 (una) imagen.");
            else
            {
                List<Campaña> mListaSolapamientos = null;
                int mSolapamientos = 0;
                if (!iAgregar)//Para optimizar tiempo, solo se consulta esto si se modifica
                {
                    mListaSolapamientos = iCtrlCampaña.ListaCampañasEnHorario(mCampaña);
                    mSolapamientos = mListaSolapamientos.Count;
                }

                if ( ((iCampaña==null)? false: iCampaña.Activo) && //Si no esta activo no se verifica los solapamientos, se lo haran en el formBuscar al querer activar
                     (
                        (!iAgregar && mSolapamientos > 1) ||
                        (!iAgregar && mSolapamientos == 1 && iCampaña.Id != mListaSolapamientos.ElementAt(0).Id)
                     )
                   )
                {
                    Utilidades.MensajeError(this, "¡Atención!", "Existe otra campaña en ese horario. Elija otro momento del día en el cual mostrarla.");
                    dtpHoraInicio.Focus();
                }
                else
                {
                    try
                    {
                        btnAceptar.Text = "Procesando...";
                        btnAceptar.Enabled = false;
                        galeria.ListaImagenes = new List<string>();

                        List<Imagen>  mListaImagenes = (List<Imagen>)dgridPrioridades.DataSource;
                        if (iAgregar)
                            iCampaña = new Campaña();
                        else
                            iCampaña = iCtrlCampaña.ObtenerPorId(iCampaña.Id);

                        iCampaña.Nombre = txtNombreCampaña.Text;                      
                        iCampaña.FechaInicio = dtpFechaInicio.Value.Date;
                        iCampaña.FechaFin = dtpFechaFin.Value.Date;
                        iCampaña.HoraInicio = dtpHoraInicio.Value.TimeOfDay;
                        iCampaña.HoraFin = dtpHoraFin.Value.TimeOfDay;

                        string mRuta = Utilidades.RutaPrograma();

                        //En caso de modificar o agregar, si hay imagenes nuevas, se copian a la carpeta y se les asigna su nueva ruta        
                        for (int i = 0; i < (mListaImagenes.Count); i++)
                        {
                            Imagen mImg = mListaImagenes.ElementAt(i);
                            if (! mImg.Ruta.StartsWith(mRuta))
                            {
                                string mRutaArchivoNueva = Utilidades.CopiarArchivos(new List<string>() {mImg.Ruta},
                                                                                        mRuta + "Imagenes\\").ElementAt(0);
                                mImg.Ruta = mRutaArchivoNueva;
                            }
                        }

                        
                        iCampaña.IntervaloEnSeg = (mListaImagenes.Count > 1)? tbarIntervalo.Value: 0;

                        if (iAgregar) //Agregar
                        {
                            iCampaña.ListaImagenes = mListaImagenes;
                            iCampaña.Activo = true;
                            iCtrlUsuario.UsuarioLogueado.ListaCampaña.Add(iCampaña);
                            iCtrlUsuario.Modificar(iCtrlUsuario.UsuarioLogueado);
                            Utilidades.MensajeExito(this, "¡Perfecto!", "Campaña agregada correctamente.");
                        }
                        else // Modificar
                        {
                            var mListaAux = iCampaña.ListaImagenes.ToList();
                            iCampaña.ListaImagenes = mListaImagenes;

                            iCtrlCampaña.Modificar(iCampaña);
                            this.EliminarImagenesBasura(mListaAux, mListaImagenes);
                            Utilidades.MensajeExito(this, "¡Perfecto!", "Campaña modificada correctamente.");
                        }
                        this.Close();
                        iLogger.Info("Campaña nueva/modificada insertada correctamente.");
                    }
                    catch (Exception ex)
                    {
                        iLogger.Error(ex.Source + ": " + ex.Message);
                        Utilidades.MensajeError(this, "¡Error!", "Ocurrió un error inesperado.");

                        btnAceptar.Enabled = true;
                        btnAceptar.Text = "ACEPTAR";
                        galeria.ListaImagenes = listaGaleria;
                    }
                }
            }
        }
Esempio n. 4
0
 /// <summary>
 ///     Elimina una campaña del repositorio.
 /// </summary>
 /// <param name="pCampaña">Campaña a eliminar.</param>
 public void Eliminar(Campaña pCampaña)
 {
     Campaña mCampaña = iUnidadDeTrabajo.RepositorioCampaña.ObtenerPorId(pCampaña.Id);
     iUnidadDeTrabajo.RepositorioCampaña.Eliminar(mCampaña);
     iUnidadDeTrabajo.Guardar();
 }
Esempio n. 5
0
 /// <summary>
 ///     Inserta una campaña en el repositorio.
 /// </summary>
 /// <param name="pCampaña">Campaña a insertar.</param>
 public void Insertar(Campaña pCampaña)
 {
     iUnidadDeTrabajo.RepositorioCampaña.Insertar(pCampaña);
     iUnidadDeTrabajo.Guardar();
 }
Esempio n. 6
0
 /// <summary>
 ///     Modifica una campaña del repositorio.
 /// </summary>
 /// <param name="pCampaña">Campaña a modificar.</param>
 public void Modificar(Campaña pCampaña)
 {
     iUnidadDeTrabajo.RepositorioCampaña.Modificar(pCampaña);
     iUnidadDeTrabajo.Guardar();
 }
Esempio n. 7
0
        /// <summary>
        /// Devuelve la campaña que debe mostrarse en la fecha/hora indicada
        /// </summary>
        /// <param name="pFechaHora">Fecha de interes</param>
        /// <returns>Una campaña</returns>
        public Campaña ObtenerCampaña(DateTime pFechaHora)
        {
            //Valores para inicializar la campaña auxiliar
            DateTime mFechaFin = pFechaHora.AddMinutes(1);
            TimeSpan mHoraInicio = new TimeSpan(pFechaHora.Hour, pFechaHora.Minute, pFechaHora.Second);
            TimeSpan mHoraFin = new TimeSpan(mFechaFin.Hour, mFechaFin.Minute, mFechaFin.Second);

            Campaña mCampañaAuxiliar = new Campaña
            {
                FechaInicio = pFechaHora.Date,
                HoraInicio = mHoraInicio,
                FechaFin = mFechaFin.Date,
                HoraFin = mHoraFin,
                Intervalo = 0,
                Nombre = "Go News",
                ListaImagenes = new List<Imagen>()//Se inicializa vacia, ya q la clase lo reconoce y devuelve una imagen por defecto.
            };

            //Valores utilizados para la busqueda
            DateTime mDia = mCampañaAuxiliar.FechaInicio;
            TimeSpan mHora = mCampañaAuxiliar.HoraInicio;

            var mConsulta = iUnidadDeTrabajo.RepositorioCampaña.Queryable.Where(c => (
                (c.Activo == true)
                &&
                (mDia >= c.FechaInicio && mDia <= c.FechaFin)
                &&
                (mHora >= c.HoraInicio && mHora <= c.HoraFin)
            ));

            return mConsulta.Count() == 1 ? mConsulta.First() : mCampañaAuxiliar;
        }
Esempio n. 8
0
 /// <summary>
 ///  Obtiene la existencia de campañas que se superpongan en fecha y horario a la indicada
 /// </summary>
 /// <param name="pCampaña">Campaña nueva</param>
 /// <returns>Existencia o no de seperposicion (bool)</returns>
 public bool ExisteCampañaEnHorario(Campaña pCampaña)
 {
     return CantidadCampañasEnHorario(pCampaña) > 0;
 }
Esempio n. 9
0
 /// <summary>
 /// Obtiene la cantidad de campañas que se superpongan en fecha y horario al indicado.
 /// </summary>
 /// <param name="pCampaña">Campaña nueva.</param>
 /// <returns>Cantidad de campañas que se superponen.</returns>
 public int CantidadCampañasEnHorario(Campaña pCampaña)
 {
     return ListaCampañasEnHorario(pCampaña).Count;
 }
Esempio n. 10
0
        private void btnEntrar_Click(object sender, EventArgs e)
        {
            btnEntrar.Enabled = false;
            if (txtUsuario.Text == "" || txtContraseña.Text == "")
            {
                Utilidades.MensajeError(this,"¡Atención!", "Ni el usuario, ni la contraseña deben estar vacios");
            }
            else if( ! iCtrlUser.Logear(txtUsuario.Text, Utilidades.MD5(txtContraseña.Text)) )
            {
                Utilidades.MensajeError(this, "¡Atención!", "Usuario o contraseña incorrectos");
            }
            else//Usuario logueado con exito
            {
                this.PararAnimacion();
                pboxSlide.SizeMode = PictureBoxSizeMode.StretchImage;
                pboxSlide.Image = iCtrlOperativo.ObtenerCampaña(default(DateTime)).ProximaImagen();
                iLogger.Info("Abriendo form Administrar");
                var mForm = new FormAdministrar(this.iLogger);

                panelLogin.Visible = false;
                mForm.ShowDialog();

                //Para actualizar la campaña y banner a mostrar por si hubo cambios
                iCampaña = null;
                iBanner = null;
                iMostrarBanner = default(TimeSpan);
                this.IniciarAnimacion();
                txtUsuario.Text = "";
                txtContraseña.Text = "";
            }
            btnEntrar.Enabled = true;

        }
Esempio n. 11
0
        private void timerCampaña_Tick(object sender, EventArgs e)
        {
            timerCampaña.Stop();
            int mIntevaloEnMseg = 0;//Intervalo en milisegundos de espera para el timer
            DateTime mAhora = DateTime.Now;

            if (iCampaña == null || mAhora.TimeOfDay > iCampaña.HoraFin)
            {
                iCampaña = iCtrlOperativo.ObtenerCampaña(mAhora);
            }

            TimeSpan duracion = mAhora.AddSeconds( Convert.ToDouble(iCampaña.IntervaloEnSeg) ).TimeOfDay;

            //Quiere decir que hasta que finalice el timepo de la campaña, cabe entero almenos 1 de sus intervalos
            // Y que se trata de una que posee mas de 1 imagen (x eso Intervalo > 0)
            if (duracion <= iCampaña.HoraFin && iCampaña.Intervalo > 0)
                mIntevaloEnMseg = iCampaña.Intervalo;
            else
            //Entre el tiempo actual y de fin, de la misma NO cabe otro de sus intervalos O QUE
            //Es una campaña de una SOLA imagen y debe calcularse el tiempo de espera
                mIntevaloEnMseg = (int) Math.Floor( iCampaña.HoraFin.Subtract(mAhora.TimeOfDay).TotalMilliseconds );

            timerCampaña.Interval = mIntevaloEnMseg;
            Utilidades.AnimacionSlider(pboxSlide, iCampaña.ProximaImagen());
            timerCampaña.Start();
        }