/// <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; } } } }
/// <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(); }
/// <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(); }
/// <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(); }
/// <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; }
/// <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; }
/// <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; }
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; }
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(); }