Exemple #1
0
        /// <summary>
        /// Cuidado con esto!!.. Va a verificar que todos los proyectos y usuarios tengan asignados el calendario
        /// Descar, y para los usuarios, crea un calendario propio.
        /// </summary>
        public static void ActualizarCalendariosUsuariosYProyectos()
        {
            List <USUARIO> usuarios = ControladorUsuarios.ObtenerTodosUsuarios();

            foreach (var item in usuarios)
            {
                if (item.id_calendario_laboral == 1 || item.id_calendario_laboral == null)
                {
                    Calendario_Laboral calendario = new Calendario_Laboral()
                    {
                        es_calendario_base  = false,
                        id_calendario_padre = 1,
                        nombre_calendario   = item.FullName
                    };
                    calendario = ControladorCalendario.Insertar(calendario);
                    item.id_calendario_laboral = calendario.id_calendario_laboral;
                    ControladorUsuarios.Actualizar(item);
                }
            }


            List <Proyecto> proyectos = ControladorProyecto.ObtenerProyectos();

            foreach (var item in proyectos)
            {
                if (item.id_calendario_laboral_base == null)
                {
                    item.id_calendario_laboral_base = 1;
                    ControladorProyecto.Update(item);
                }
            }
        }
Exemple #2
0
 public static Calendario_Laboral InsertarCalendario(Calendario_Laboral calendario)
 {
     using (var bd = new DescarEntity())
     {
         bd.Calendario_Laboral.Add(calendario);
         bd.SaveChanges();
     }
     return(calendario);
 }
        /// <summary>
        /// Inserta un nuevo usuario en la base de datos, y crea el calendario para el mismo,
        /// con calendario base indicado. Éste calendario se actualiza con el nuevo id.
        /// </summary>
        /// <param name="usuario"></param>
        /// <returns></returns>
        public static USUARIO InsertarYcreaCalendario(USUARIO usuario)
        {
            Calendario_Laboral calendario = new Calendario_Laboral()
            {
                es_calendario_base  = false,
                id_calendario_padre = usuario.id_calendario_laboral,
                nombre_calendario   = usuario.FullName
            };

            calendario = ControladorCalendario.Insertar(calendario);
            usuario.id_calendario_laboral = calendario.id_calendario_laboral;
            return(UsuariosBD.Insertar(usuario));
        }
Exemple #4
0
 public static List <Definicion_Calendario_Laboral> ObtenerDefiniciones(Calendario_Laboral calendario)
 {
     if (calendario == null)
     {
         return(new List <Definicion_Calendario_Laboral>());
     }
     using (var bd = new DescarEntity())
     {
         var sub = (from s in bd.Definicion_Calendario_Laboral
                    where s.id_calendario_laboral == calendario.id_calendario_laboral
                    select s);
         return(sub.ToList());
     }
 }
Exemple #5
0
        public static Calendario_Laboral ActualizarCalendario(Calendario_Laboral calendario)
        {
            using (var bd = new DescarEntity())
            {
                var sub = (from s in bd.Calendario_Laboral
                           select s).Single();

                sub.nombre_calendario   = calendario.nombre_calendario;
                sub.id_calendario_padre = calendario.id_calendario_padre;
                sub.es_calendario_base  = calendario.es_calendario_base;

                bd.SaveChanges();
                return(sub);
            }
        }
Exemple #6
0
        public static List <Tuple <DateTime, Tuple <TimeSpan, TimeSpan> > > PruebaObtenerFechas(USUARIO usuario, DateTime fecha_inicio, DateTime fecha_fin)
        {
            Calendario_Laboral calendario = ObtenerCalendarioLaboraldeMiembro(usuario);

            List <Tuple <DateTime, Tuple <TimeSpan, TimeSpan> > > lista = new List <Tuple <DateTime, Tuple <TimeSpan, TimeSpan> > >();

            for (DateTime i = fecha_inicio; i < fecha_fin; i = i.AddDays(1))
            {
                var listaHoraDia = ObtenerHorasLaboralesDia(calendario, i);
                foreach (var item in listaHoraDia)
                {
                    lista.Add(new Tuple <DateTime, Tuple <TimeSpan, TimeSpan> >(i, item));
                }
            }
            return(lista);
        }
Exemple #7
0
        public static List <Excepcion_Calendario> ObtenerExcepcionesTotales(Calendario_Laboral calendario)
        {
            if (!calendario.es_calendario_base)
            {
                //Si no es calendario base, y tiene excepciones, solo toma esas, sino las de la base
                using (var bd = new DescarEntity())
                {
                    var sub = (from s in bd.Excepcion_Calendario
                               where calendario.id_calendario_laboral == s.id_calendario_laboral
                               select s);

                    if (sub.ToList().Count > 0)
                    {
                        return(sub.ToList());
                    }

                    else
                    {
                        //Devuelve las excepciones del padre
                        sub = (from s in bd.Excepcion_Calendario
                               join cb in bd.Calendario_Laboral on calendario.id_calendario_padre equals cb.id_calendario_laboral
                               where cb.id_calendario_laboral == s.id_calendario_laboral
                               select s);

                        return(sub.ToList());
                    }
                }
            }

            //Si el calendario ya es base, devuelve sus excepciones
            using (var bd = new DescarEntity())
            {
                var sub = (from s in bd.Excepcion_Calendario
                           where calendario.id_calendario_laboral == s.id_calendario_laboral
                           select s);

                return(sub.ToList());
            }
        }
Exemple #8
0
 private static List <Excepcion_Calendario> ObtenerExcepcionesTotales(Calendario_Laboral calendario)
 {
     return(CalendarioDB.ObtenerExcepcionesTotales(calendario));
 }
Exemple #9
0
        public static List <Definicion_Calendario_Laboral> ObtenerDefinicionesTotales(Calendario_Laboral calendario)
        {
            if (!calendario.es_calendario_base)
            {
                using (var bd = new DescarEntity())
                {
                    var sub = (from s in bd.Definicion_Calendario_Laboral
                               join c in bd.Calendario_Laboral on calendario.id_calendario_padre equals c.id_calendario_laboral
                               where calendario.id_calendario_laboral == s.id_calendario_laboral ||
                               s.id_calendario_laboral == c.id_calendario_laboral
                               select s);

                    return(sub.ToList());
                }
            }
            else
            {
                using (var bd = new DescarEntity())
                {
                    var sub = (from s in bd.Definicion_Calendario_Laboral
                               where calendario.id_calendario_laboral == s.id_calendario_laboral
                               select s);

                    return(sub.ToList());
                }
            }
        }
Exemple #10
0
        public static DateTime?CalcularFechaFin(Actividad_proyecto actividad, USUARIO usuario, DateTime fecha_inicio, double?horas)
        {
            Calendario_Laboral calendario = ObtenerCalendarioLaboraldeMiembro(usuario);
            Calendario_Laboral padre      = ObtenerCalendario(calendario.id_calendario_padre.Value);

            List <Definicion_Calendario_Laboral> definiciones_padre = ObtenerDefiniciones(padre).OrderByDescending(x => x.fecha_hasta).ToList();
            List <Excepcion_Calendario>          excepciones        = ObtenerExcepciones(padre);
            List <Definicion_Calendario_Laboral> definiciones_hijo  = ObtenerDefiniciones(calendario).OrderByDescending(x => x.fecha_hasta).ToList();
            List <Excepcion_Calendario>          excepciones_hijo   = ObtenerExcepciones(calendario);

            List <DateTime> fechasIncluidas = new List <DateTime>();

            fechasIncluidas.AddRange(definiciones_padre.Select(x => x.fecha_hasta));
            fechasIncluidas.AddRange(excepciones.Select(x => x.fecha_fin.Value).ToList());
            fechasIncluidas.AddRange(definiciones_hijo.Select(x => x.fecha_hasta));
            fechasIncluidas.AddRange(excepciones_hijo.Select(x => x.fecha_fin.Value).ToList());
            fechasIncluidas.Sort((a, b) => b.CompareTo(a));

            double   horasActividad = horas.HasValue ? horas.Value : ControladorActividades.ObtenerHorasTotalesActividad(actividad);
            double   restante       = horasActividad * 60;
            TimeSpan hora           = fecha_inicio.TimeOfDay;
            DateTime fecha_fin;

            if (fechasIncluidas.Count > 0)
            {
                for (DateTime i = fecha_inicio; i <= fechasIncluidas.First(); i = i.AddDays(1))
                {
                    //Agregar si la expcecion no base no define un dia pero la base si,
                    //dentro de un período
                    var    aux       = ObtenerHorasLaboralesDia(calendario, i);
                    double tiempoDia = 0;

                    foreach (var item in aux)
                    {
                        if (fecha_inicio.Date == i.Date)
                        {
                            //Hay que tener en cuenta la hora, sino no
                            if (hora.Ticks > item.Item1.Ticks && hora.Ticks < item.Item2.Ticks)
                            {
                                tiempoDia += (item.Item2.Ticks - hora.Ticks) / TimeSpan.TicksPerMinute;
                            }
                            else if (hora.Ticks <= item.Item1.Ticks)
                            {
                                tiempoDia += (item.Item2.Ticks - item.Item1.Ticks) / TimeSpan.TicksPerMinute;
                            }
                        }
                        else
                        {
                            tiempoDia += (item.Item2.Ticks - item.Item1.Ticks) / TimeSpan.TicksPerMinute;
                        }

                        if (restante - tiempoDia == 0)
                        {
                            fecha_fin = i;
                            TimeSpan hora_fin = TimeSpan.FromTicks(item.Item2.Ticks);
                            DateTime nuevo    = new DateTime(i.Year, i.Month, i.Day, hora_fin.Hours, hora_fin.Minutes, hora_fin.Seconds);
                            return(nuevo);
                        }
                        else if (restante - tiempoDia < 0)
                        {
                            TimeSpan hora_fin;
                            if (fecha_inicio.Date == i.Date && (hora.Ticks > item.Item1.Ticks && hora.Ticks < item.Item2.Ticks))
                            {
                                hora_fin = TimeSpan.FromTicks((long)(hora.Ticks + (restante * TimeSpan.TicksPerMinute)));
                            }
                            else
                            {
                                hora_fin = TimeSpan.FromTicks((long)(item.Item1.Ticks + (restante * TimeSpan.TicksPerMinute)));
                            }

                            fecha_fin = i;
                            DateTime nuevo = new DateTime(i.Year, i.Month, i.Day, hora_fin.Hours, hora_fin.Minutes, hora_fin.Seconds);
                            return(nuevo);
                        }
                        else
                        {
                            restante  = restante - tiempoDia;
                            tiempoDia = 0;
                        }
                    }
                }
            }

            return(null);
        }
Exemple #11
0
        public static DateTime?ObtenerFechaFinMinima(Actividad_proyecto actividad, DateTime fecha_inicio)
        {
            Proyecto           proyecto = ControladorProyecto.ObtenerPorID(actividad.id_proyecto.Value);
            Calendario_Laboral padre    = ObtenerCalendario(proyecto.id_calendario_laboral_base.Value);
            List <Definicion_Calendario_Laboral> definiciones_padre = ObtenerDefiniciones(padre).OrderByDescending(x => x.fecha_hasta).ToList();
            List <Excepcion_Calendario>          excepciones        = ObtenerExcepciones(padre);

            List <DateTime> fechasIncluidas = ObtenerDefiniciones(padre).OrderByDescending(x => x.fecha_hasta).Select(x => x.fecha_hasta).ToList();

            fechasIncluidas.AddRange(excepciones.Select(x => x.fecha_fin.Value).ToList());
            fechasIncluidas.Sort((a, b) => b.CompareTo(a));

            double   horasActividad = ControladorActividades.ObtenerHorasTotalesActividad(actividad);
            double   restante       = horasActividad * 60;
            TimeSpan hora           = fecha_inicio.TimeOfDay;
            DateTime fecha_fin;

            if (fechasIncluidas.Count > 0)
            {
                for (DateTime i = fecha_inicio; i <= fechasIncluidas.First(); i = i.AddDays(1))
                {
                    var aux = ObtenerHorasLaboralesDia(padre, i);

                    double tiempoDia = 0;

                    foreach (var item in aux)
                    {
                        if (fecha_inicio.Date == i.Date)
                        {
                            //Hay que tener en cuenta la hora, sino no
                            if (hora.Ticks > item.Item1.Ticks && hora.Ticks < item.Item2.Ticks)
                            {
                                tiempoDia += (item.Item2.Ticks - hora.Ticks) / TimeSpan.TicksPerMinute;
                            }
                            else if (hora.Ticks <= item.Item1.Ticks)
                            {
                                tiempoDia += (item.Item2.Ticks - item.Item1.Ticks) / TimeSpan.TicksPerMinute;
                            }
                        }
                        else
                        {
                            tiempoDia += (item.Item2.Ticks - item.Item1.Ticks) / TimeSpan.TicksPerMinute;
                        }
                        //restante = restante - tiempoDia;
                        if (restante - tiempoDia == 0)
                        {
                            fecha_fin = i;
                            TimeSpan hora_fin = TimeSpan.FromTicks(item.Item2.Ticks);
                            DateTime nuevo    = new DateTime(i.Year, i.Month, i.Day, hora_fin.Hours, hora_fin.Minutes, hora_fin.Seconds);
                            return(nuevo);
                        }
                        else if (restante - tiempoDia < 0)
                        {
                            var hora_fin = TimeSpan.FromTicks((long)(item.Item1.Ticks + (restante * TimeSpan.TicksPerMinute)));
                            fecha_fin = i;
                            DateTime nuevo = new DateTime(i.Year, i.Month, i.Day, hora_fin.Hours, hora_fin.Minutes, hora_fin.Seconds);
                            return(nuevo);
                        }
                        else
                        {
                            restante  = restante - tiempoDia;
                            tiempoDia = 0;
                        }
                    }
                }
            }

            return(null);
        }
Exemple #12
0
 public static List <Definicion_Calendario_Laboral> ObtenerDefinicionesTotalesDentroDelRango(Calendario_Laboral calendario, DateTime fecha)
 {
     return(CalendarioDB.ObtenerDefinicionesTotales(calendario).Where(x => x.fecha_desde.Date <= fecha.Date && x.fecha_hasta.Date >= fecha.Date).ToList());
 }
Exemple #13
0
 private static List <Excepcion_Calendario> ObtenerExcepcionesTotalesDentroDelRango(Calendario_Laboral calendario, DateTime fecha)
 {
     return(CalendarioDB.ObtenerExcepcionesTotales(calendario).Where(x => x.fecha_comienzo.Value.Date <= fecha.Date && x.fecha_fin.Value.Date >= fecha.Date).ToList());
 }
Exemple #14
0
 public static List <Excepcion_Calendario> ObtenerExcepciones(Calendario_Laboral calendario)
 {
     return(CalendarioDB.ObtenerExcepciones(calendario));
 }
Exemple #15
0
        /// <summary>
        /// Obtiene las horas laborales de ese calendario para la fecha indicada. Ignora los días no
        /// laborables. (Si se trabaja ese dia, entonces va a retornar algo).
        /// TODO: Periodos nulos, o del padre.
        /// </summary>
        /// <param name="calendario"></param>
        /// <param name="fecha"></param>
        /// <returns></returns>
        public static List <Tuple <TimeSpan, TimeSpan> > ObtenerHorasLaboralesDia(Calendario_Laboral calendario, DateTime fecha)
        {
            List <Excepcion_Calendario> excepciones = ObtenerExcepcionesTotalesDentroDelRango(calendario, fecha);
            //Este no considera si llama de la base, tenerlo en cuenta para futuro.
            List <Definicion_Calendario_Laboral> definiciones = ObtenerDefinicionesTotalesDentroDelRango(calendario, fecha);

            List <Excepcion_Calendario>          excepcionesBase  = new List <Excepcion_Calendario>();
            List <Definicion_Calendario_Laboral> definicionesBase = new List <Definicion_Calendario_Laboral>();

            if (!calendario.es_calendario_base && calendario.id_calendario_padre.HasValue)
            {
                excepcionesBase  = ObtenerExcepcionesTotalesDentroDelRango(ObtenerCalendario(calendario.id_calendario_padre.Value), fecha);
                definicionesBase = ObtenerDefinicionesTotalesDentroDelRango(ObtenerCalendario(calendario.id_calendario_padre.Value), fecha);
            }

            List <Detalle_Calendario_Laboral>  detalles;
            List <Tuple <TimeSpan, TimeSpan> > listaHoras = new List <Tuple <TimeSpan, TimeSpan> >();
            bool laborable = true;

            //Si tiene excepciones, tienen prioridad y se ignoran las deciniciones
            if (excepciones.Count > 0 || excepcionesBase.Count > 0)
            {
                List <Tuple <TimeSpan, TimeSpan> > aux = ObtenerHorasDeExcepciones(excepciones, fecha, out laborable);
                if (laborable)
                {
                    //El dia no tiene definiciones de que no sea laborable. Si viene vacío, entonces
                    // hay que usar el calendario base, sino tomar los datos de este.
                    if (aux.Count == 0 && !calendario.es_calendario_base &&
                        calendario.id_calendario_padre.HasValue)
                    {
                        listaHoras.AddRange(ObtenerHorasDeExcepciones(excepcionesBase, fecha, out laborable));
                    }
                    else
                    {
                        //Si tiene datos, entonces solo se cuenta el del calendario del usuario/proyecto.
                        listaHoras.AddRange(aux);
                    }
                }
                else
                {
                    return(new List <Tuple <TimeSpan, TimeSpan> >());
                }
            }

            if (laborable == false)
            {
                //En este caso, habia excepciones del original, pero no para ese dia en particular,
                //sin embargo el calendario base si tiene definicion para ese dia, e indica que no es laboral
                return(new List <Tuple <TimeSpan, TimeSpan> >());
            }
            //Sino no tiene excepciones o no hay excepciones para ese dia en particular,
            //se toman las definiciones
            if ((laborable = true && listaHoras.Count == 0 &&
                             (excepciones.Count > 0 || excepcionesBase.Count > 0)) ||
                (excepciones.Count == 0 || excepcionesBase.Count == 0))
            {
                laborable = true;
                List <Tuple <TimeSpan, TimeSpan> > auxDef = ObtenerHorasDeDefiniciones(definiciones, fecha, out laborable);
                if (laborable)
                {
                    //El dia no tiene definiciones de que no sea laborable. Si viene vacío, entonces
                    // hay que usar el calendario base, sino tomar los datos de este.
                    if (auxDef.Count == 0 && !calendario.es_calendario_base &&
                        calendario.id_calendario_padre.HasValue)
                    {
                        listaHoras.AddRange(ObtenerHorasDeDefiniciones(definicionesBase, fecha, out laborable));
                    }
                    else
                    {
                        //Si tiene datos, entonces solo se cuenta el del calendario del usuario/proyecto.
                        listaHoras.AddRange(auxDef);
                    }
                }
                else
                {
                    return(new List <Tuple <TimeSpan, TimeSpan> >());
                }
            }

            return(listaHoras);
        }
Exemple #16
0
 public static Calendario_Laboral ActualizarCalendario(Calendario_Laboral calendario)
 {
     return(CalendarioDB.ActualizarCalendario(calendario));
 }
Exemple #17
0
        /// <summary>
        /// Calcula la cantidad de minutos disponibles para ese usuario entre las fecha indicadas, en base a su calendario
        /// </summary>
        /// <param name="usuario"></param>
        /// <param name="fecha_fin"></param>
        /// <param name="fecha_inicio"></param>
        /// <returns></returns>
        public static double CalcularTiempoEntreFechas(Calendario_Laboral calendario, DateTime fecha_fin, DateTime fecha_inicio)
        {
            if (fecha_inicio > fecha_fin)
            {
                return(-1);
            }

            List <Definicion_Calendario_Laboral> definiciones_padre = ObtenerDefiniciones(calendario).OrderByDescending(x => x.fecha_hasta).ToList();
            List <Excepcion_Calendario>          excepciones        = ObtenerExcepciones(calendario);

            List <DateTime> fechasIncluidas = ObtenerDefiniciones(calendario).OrderByDescending(x => x.fecha_hasta).Select(x => x.fecha_hasta).ToList();

            fechasIncluidas.AddRange(excepciones.Select(x => x.fecha_fin.Value).ToList());

            if (!calendario.es_calendario_base && calendario.id_calendario_padre.HasValue)
            {
                Calendario_Laboral calBase = ObtenerCalendario(calendario.id_calendario_padre.Value);
                List <Definicion_Calendario_Laboral> definiciones_base = ObtenerDefiniciones(calBase).OrderByDescending(x => x.fecha_hasta).ToList();
                List <Excepcion_Calendario>          excepcionesBase   = ObtenerExcepciones(calBase);

                fechasIncluidas.AddRange(definiciones_base.Select(x => x.fecha_hasta).ToList());
                fechasIncluidas.AddRange(excepcionesBase.Select(x => x.fecha_fin.Value).ToList());
            }

            fechasIncluidas.Sort((a, b) => b.CompareTo(a));

            TimeSpan hora   = fecha_inicio.TimeOfDay;
            double   tiempo = 0;

            if (fechasIncluidas.Count > 0)
            {
                for (DateTime i = fecha_inicio; i < fecha_fin; i = i.AddDays(1))
                {
                    var aux = ObtenerHorasLaboralesDia(calendario, i);
                    foreach (var item in aux)
                    {
                        if (fecha_inicio.Date == i.Date)
                        {
                            //Hay que tener en cuenta la hora, sino no
                            if (hora.Ticks > item.Item1.Ticks && hora.Ticks < item.Item2.Ticks)
                            {
                                if (fecha_fin.Date == fecha_inicio.Date)
                                {
                                    if (fecha_fin.TimeOfDay.Ticks < item.Item2.Ticks)
                                    {
                                        tiempo += (fecha_fin.TimeOfDay.Ticks - hora.Ticks) / TimeSpan.TicksPerMinute;
                                        return(tiempo);
                                    }
                                    else
                                    {
                                        tiempo += (item.Item2.Ticks - hora.Ticks) / TimeSpan.TicksPerMinute;
                                        return(tiempo);
                                    }
                                }
                                else
                                {
                                    tiempo += (item.Item2.Ticks - hora.Ticks) / TimeSpan.TicksPerMinute;
                                }
                            }
                            else if (hora.Ticks <= item.Item1.Ticks)
                            {
                                tiempo += (item.Item2.Ticks - item.Item1.Ticks) / TimeSpan.TicksPerMinute;
                            }
                        }
                        else
                        {
                            tiempo += (item.Item2.Ticks - item.Item1.Ticks) / TimeSpan.TicksPerMinute;
                        }
                    }
                }
            }

            return(tiempo);
        }
Exemple #18
0
 private static List <Definicion_Calendario_Laboral> ObtenerDefinicionesTotales(Calendario_Laboral calendario)
 {
     return(CalendarioDB.ObtenerDefinicionesTotales(calendario));
 }
Exemple #19
0
 public static Calendario_Laboral Insertar(Calendario_Laboral calendario)
 {
     return(CalendarioDB.InsertarCalendario(calendario));
 }