Example #1
0
        /// <summary>
        /// Comprueba que el rango actual no se superponga con el rángo pasado
        /// como parámetro. No tiene en cuenta los segundos.
        /// </summary>
        /// <param name="otroRango">rango a comparar con el actual</param>
        /// <returns>true si el rango se superpone, caso contrario false</returns>
        public bool rangoSuperpuesto(RangoHorario otroRango)
        {
            if (this.fin.Hora < otroRango.inicio.Hora)
            {
                return(false);
            }
            else if (this.fin.Hora == otroRango.inicio.Hora)
            {
                if (this.fin.Minuto < otroRango.inicio.Minuto)
                {
                    return(false);
                }
            }


            if (this.inicio.Hora < otroRango.inicio.Hora)
            {
                return(true);
            }
            else if (this.inicio.Hora == otroRango.inicio.Hora)
            {
                if (this.inicio.Minuto < otroRango.inicio.Minuto)
                {
                    return(true);
                }
            }


            if (otroRango.fin.Hora < this.inicio.Hora)
            {
                return(false);
            }
            else if (otroRango.fin.Hora == this.inicio.Hora)
            {
                if (otroRango.fin.Minuto < this.inicio.Minuto)
                {
                    return(false);
                }
            }


            return(true);
        }
        /// <summary>
        /// Comprueba que el rango actual no se superponga con el rángo pasado
        /// como parámetro. No tiene en cuenta los segundos.
        /// </summary>
        /// <param name="otroRango">rango a comparar con el actual</param>
        /// <returns>true si el rango se superpone, caso contrario false</returns>
        public bool rangoSuperpuesto(RangoHorario otroRango)
        {
            if (this.fin.Hora < otroRango.inicio.Hora)
                return false;
            else if (this.fin.Hora == otroRango.inicio.Hora)
                if (this.fin.Minuto < otroRango.inicio.Minuto)
                    return false;

            if (this.inicio.Hora < otroRango.inicio.Hora)
                return true;
            else if (this.inicio.Hora == otroRango.inicio.Hora)
                if (this.inicio.Minuto < otroRango.inicio.Minuto)
                    return true;

            if (otroRango.fin.Hora < this.inicio.Hora)
                return false;
            else if (otroRango.fin.Hora == this.inicio.Hora)
                if (otroRango.fin.Minuto < this.inicio.Minuto)
                    return false;

            return true;
        }
        /// <summary>
        /// Valida el horario ingresado y lo guarda en la base de datos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void guardarButton_Click(object sender, EventArgs e)
        {
            if(areaCombo.SelectedIndex == -1)
            {
                MessageBox.Show("No se seleccionó un área", "Error", MessageBoxButtons.OK , MessageBoxIcon.Error);
                return;
            }

            if (diaCombo.SelectedIndex == -1)
            {
                MessageBox.Show("No se seleccionó un día", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            try
            {
                //este constructor verifica la integridad
                Horario ingreso = new Horario(ingresoText.Text);
                Horario egreso = new Horario(egresoText.Text);

                //el constructor verifica la integridad
                RangoHorario rango = new RangoHorario(ingreso, egreso);

                //el tamaño minimo es 59 minutos
                if (rango.rangoMenor(0, 59))
                    throw new RangoMinimoException();

                //armo la entidad turno DTO
                HorarioHabitualDTO turno = new HorarioHabitualDTO();
                turno.Area = areaCombo.Text;
                turno.Dia = diaCombo.Text;
                turno.Ingreso = ingreso;
                turno.Egreso = egreso;
                turno.Duracion = rango.getDuracion();
                turno.Confirmado = "NO";

                //hay que validar que no se superponga a otros horarios

                foreach (HorarioHabitualDTO t in turnos)
                {
                    if (Fecha.getNumeroDia(t.Dia) == Fecha.getNumeroDia(turno.Dia))
                    {
                        RangoHorario r1 = new RangoHorario(t.Ingreso, t.Egreso);

                        if (r1.rangoSuperpuesto(rango))
                            throw new TurnoSuperpuestoException();

                    }
                }

                //y finalmente guardo el horario
                GestorHorarios gestor = new GestorHorarios();
                gestor.crearHorarioHabitual(this.usuario, turno);

                // y si anda todo bien agrego la columna a la tabla
                this.agregarColumna(turno);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }