private void btn_modificar_Click(object sender, EventArgs e) { //Obtiene la campaña a modificar a partir del ID de la grilla Campaña campania = iFachadaCampaña.ObtenerCampaña(Convert.ToInt32(DGV_Campañas.CurrentRow.Cells[0].Value)); // Abre el formulario de alta de campañas tomando los datos de la campaña a modificar AgregarCampaña campaniaInterfaz = new AgregarCampaña(campania); campaniaInterfaz.ShowDialog(); this.Close(); btn_eliminar.Enabled = false; btn_modificar.Enabled = false; }
private void btn_guardarCampaña_Click(object sender, EventArgs e) { try { //Variable auxiliar con tiempo máximo para la hora. TimeSpan tiempoMaximo = new TimeSpan(23, 59, 59); //Variable auxiliar para controlar la duracion total de todas las imagenes de la campaña. TimeSpan duracionTotalImagenes = new TimeSpan(00, 00, 00); //Variable auxiliar donde guardamos las imagenes de la campaña. List <Imagen> imagenesCampaña = new List <Imagen>(); //Controles sobre las fechas y horas if ((DGV_imagenes.Rows.Count > 0) && //Si la cantidad de filas de la grilla es mayor que 0 (TimeSpan.Parse(mtxt_horaFin.Text) < tiempoMaximo || TimeSpan.Parse(mtxt_horaInicio.Text) < tiempoMaximo) && //HoraInicio u HoraFin deben ser menores a (23,59,59) (TimeSpan.Parse(mtxt_horaInicio.Text) < TimeSpan.Parse(mtxt_horaFin.Text)) && //HoraInicio menor a HoraFin (Convert.ToDateTime(dtp_fechaInicio.Text) < Convert.ToDateTime(dtp_fechaFin.Text)) && //FechaInicio menor a FechaFin (Convert.ToDateTime(dtp_fechaInicio.Text) >= DateTime.Today && Convert.ToDateTime(dtp_fechaFin.Text) > DateTime.Today)) //Fecha de inicio o igual a la fecha actual y fecha de fin mayor a a la fecha actual { //Llenamos la campaña nueva con los nuevos atributos ingresados. Campaña campaña = new Campaña { iNombre = txt_nombreCampaña.Text, iHoraFin = TimeSpan.Parse(mtxt_horaFin.Text), iHoraInicio = TimeSpan.Parse(mtxt_horaInicio.Text), iFechaInicio = Convert.ToDateTime(dtp_fechaInicio.Text), iFechaFin = Convert.ToDateTime(dtp_fechaFin.Text), }; //Insertamos las imágenes de la grilla a una lista para poder usarlas en los métodos de la fachada, //tanto en agregar campaña, como en modificar. for (int i = 0; i < DGV_imagenes.Rows.Count; i++) { string ruta = (DGV_imagenes.Rows[i].Cells[1].Value.ToString()); int posicion = (Convert.ToInt32(DGV_imagenes.Rows[i].Cells[2].Value)); TimeSpan duracion = TimeSpan.Parse(DGV_imagenes.Rows[i].Cells[3].Value.ToString()); //Controlamos que no se agreguen imágenes con posiciones repetidas o inválidas. if (posicion > 0 && posicion <= DGV_imagenes.Rows.Count && //Cantidad de imagenes de la campaña. (!imagenesCampaña.Any(imagenesActuales => imagenesActuales.iPosicion == posicion))) //Si ya existe la posición. { Imagen imagen = new Imagen { iRuta = ruta, iDuracion = duracion, iPosicion = posicion, }; //Actualizamos el contador de duración total de las imágenes. duracionTotalImagenes = duracionTotalImagenes.Add(imagen.iDuracion); imagenesCampaña.Add(imagen); } else //Si la posición ingresada para la imagen es inválida. { imagenesCampaña = null; throw new PosicionImagenException("Error! Alguna de las posiciones de las imágenes están mal o repetidas. Por favor reviselas nuevamente."); } }//end del for con las imágenes de la grilla. //La suma de duraciones de las imágenes de la campaña debe ser menor a la diferencia de tiempo entre la HoraInicio y HoraFin. if (duracionTotalImagenes > (TimeSpan.Parse(mtxt_horaFin.Text).Subtract(TimeSpan.Parse(mtxt_horaInicio.Text)))) { { MessageBox.Show("Error! La duración total de las imágenes de la campaña excede al tiempo que se mostrará la campaña"); } } else //Duración total es menor o igual a la diferencia de tiempo. { if (iCampaña == null)//Es decir que se está agregando NUEVA campaña. { campaña.iImagenes = imagenesCampaña; iFachadaCampaña.AgregarCampaña(campaña); MessageBox.Show("La campaña fue creada con éxito!"); this.Close(); } else//Si la campaña es diferente de nula, es decir que estamos MODIFICANDO una campaña existente. { //Para el modificar necesitamos la id y al principio no se la pasamos puesto que //hay codigo que tambien aplica para el agregar, pero en el id difiere ya que este esta dado //y en el agregar no. Campaña campañaAModificar = iFachadaCampaña.ObtenerCampaña(iCampaña.iIdCampaña); campañaAModificar.iHoraInicio = campaña.iHoraInicio; campañaAModificar.iHoraFin = campaña.iHoraFin; campañaAModificar.iFechaInicio = campaña.iFechaInicio; campañaAModificar.iFechaFin = campaña.iFechaFin; campañaAModificar.iNombre = campaña.iNombre; iFachadaCampaña.ModificarCampaña(campañaAModificar); #region Actualizacion de las imagenes de la campañas //Recorremos todas las imagenes del datagrid view for (int i = 0; i <= this.DGV_imagenes.Rows.Count - 1; i++) { //Si alguna posee un 1 en la columna de agregar, es porque hay que agregarla a la BD if (Convert.ToInt32(DGV_imagenes.Rows[i].Cells[4].Value) == 1) { Imagen imagenAgregar = new Imagen { iIdCampaña = iCampaña.iIdCampaña, iRuta = Convert.ToString(DGV_imagenes.Rows[i].Cells[1].Value), iPosicion = Convert.ToInt32(DGV_imagenes.Rows[i].Cells[2].Value), iDuracion = TimeSpan.Parse(Convert.ToString(DGV_imagenes.Rows[i].Cells[3].Value)) }; iFachadaImagen.AgregarImagen(imagenAgregar); } else { //Si alguna posee un 1 en la columna de modificar entonces hay que modificar //una imagen ya existente en la BD if (Convert.ToInt32(DGV_imagenes.Rows[i].Cells[5].Value) == 1) { //Obtenemos la imagen en cuestion. Imagen imagenModificar = iFachadaImagen.ObtenerImagen(Convert.ToInt32(DGV_imagenes.Rows[i].Cells[0].Value)); //Actualizamos los atributos que pueden ser modificados. imagenModificar.iRuta = Convert.ToString(DGV_imagenes.Rows[i].Cells[1].Value); imagenModificar.iPosicion = Convert.ToInt32(DGV_imagenes.Rows[i].Cells[2].Value); imagenModificar.iDuracion = TimeSpan.Parse(Convert.ToString(DGV_imagenes.Rows[i].Cells[3].Value)); //guardamos los cambios. iFachadaImagen.ModificarImagen(imagenModificar); } } } //Si se borraron imagenes que ya existian en la base de datos terminan aqui para ser eliminadas de la //base de datos. foreach (Imagen imagenEliminada in iImagenesEliminadas) { iFachadaImagen.EliminarImagen(imagenEliminada.iIdImagen); } #endregion MessageBox.Show("La campaña se ha modificado con éxito!"); this.Close(); } //IF de (iCampaña == null) } //IF de duración total de imágenes. } //IF de controles sobre Fechas y Horas. else //Si no se cumple alguno de los controles sobre Fechas y Horas. Datos erróneos ingresados. { //A la error string le concatenamos los errores segun coincidan en las condiciones de los if. string ErrorString = "Se han detectado el (o los) siguente(s) error(es): \n"; if (DGV_imagenes.Rows.Count == 0) //No hay ninguna imagen cargada. { ErrorString = ErrorString + ("• Faltan ingresar datos de imagenes \n"); } if (TimeSpan.Parse(mtxt_horaFin.Text) > tiempoMaximo || TimeSpan.Parse(mtxt_horaInicio.Text) > tiempoMaximo) //HoraInicio u HoraFin inválidas. { ErrorString = ErrorString + ("• La hora de inicio y/o de fin estan mal ingresadas. Valores validos desde 00:00:00 hasta 23:59:59 \n"); } if ((TimeSpan.Parse(mtxt_horaInicio.Text) >= TimeSpan.Parse(mtxt_horaFin.Text))) //HoraInicio mayor a HoraFin. { ErrorString = ErrorString + ("• La hora de inicio no puede ser mayor o igual a la de fin \n"); } if (Convert.ToDateTime(dtp_fechaInicio.Text) > Convert.ToDateTime(dtp_fechaFin.Text)) //FechaInicio mayor a FechaFin. { ErrorString = ErrorString + ("• La fecha de inicio no puede ser mayor que la de fin \n"); } if (Convert.ToDateTime(dtp_fechaInicio.Text) <= DateTime.Today || Convert.ToDateTime(dtp_fechaFin.Text) < DateTime.Today) //FechaInicio y fin menores a la actual. { ErrorString = ErrorString + ("• La fecha de inicio y/o fin deben ser mayores a la actual \n"); } MessageBox.Show(ErrorString); } //ELSE si no se cumplen controles de datos ingresados. } //end del try catch (FormatException) { MessageBox.Show("Error, revise los datos ingresados"); } catch (PosicionImagenException ex) { MessageBox.Show(ex.Message); } catch (CampañaNoDisponibleException ex) { MessageBox.Show(ex.Message); } }