コード例 #1
0
        private void GenerarEstructuraCATIA(Product product, int id_proyecto, int id_subproyecto, bool esProyecto)
        {
            var controladorSubproyecto = new ControladorSubproyecto();
            var controladorProyecto    = new ControladorProyecto();
            var subproyectosHijos      = new List <SUBPROYECTO>();

            //Verifica que la raiz del arbol sea un proyecto, o un subroyecto, y si es este ultimo
            //verifica si es unidad o no.
            if (esProyecto)
            {
                if (id_subproyecto != null & id_subproyecto > 1)
                {
                    SUBPROYECTO subproyecto = ControladorSubproyecto.BuscarPorId(id_subproyecto);
                    {
                        product = CreateProduct(null, subproyecto.nombre);
                    }
                }
                else
                {
                    Proyecto proyecto = ControladorProyecto.ObtenerPorID(id_proyecto);
                    product = CreateProduct(null, ((Proyecto)proyecto).nombre_proyecto);
                }
            }


            subproyectosHijos = ControladorSubproyecto.ObtenerPorProyecto(id_proyecto, id_subproyecto);
            if (subproyectosHijos.Count > 0)
            {
                foreach (var subproyecto in subproyectosHijos)
                {
                    Product prod = CreateProduct(product, subproyecto.nombre);
                    GenerarEstructuraCATIA(prod, id_proyecto, subproyecto.id_subproyecto, false);
                }
            }
        }
コード例 #2
0
        public static bool AsignarTareasAutomaticamente(double cant_horas_solapamiento)
        {
            List <SUBPROYECTO> subproyectosOrdenados = ControladorSubproyecto.ObtenerSubproyectosConActividadesActivos();

            EliminarDetalleRecursoProyectosActivos();
            bool salida = true;

            foreach (var item in subproyectosOrdenados)
            {
                List <Tuple <SUBPROYECTO, int> > estrucuraProyecto = new List <Tuple <SUBPROYECTO, int> >();
                List <SUBPROYECTO> listaSubproyectos = ControladorSubproyecto.ObtenerEstructuraSubproyectos(estrucuraProyecto, item, 1).OrderByDescending(x => x.Item2).Select(x => x.Item1).ToList();
                listaSubproyectos = listaSubproyectos.OrderByDescending(x => x.horas_estimadas).ToList();

                foreach (var sub in listaSubproyectos)
                {
                    if (!AsignarSubproyecto(sub, cant_horas_solapamiento))
                    {
                        salida = false;
                    }
                }
            }

            ControladorProyecto.ActualizarHorasProyectosActivos();
            return(salida);
        }
コード例 #3
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);
                }
            }
        }
コード例 #4
0
        public static bool AsignarSubproyecto(SUBPROYECTO subproyecto, double cantidad_horas_solapamiento)
        {
            bool salida = true;

            if (subproyecto != null && subproyecto.asignacion_automatica)
            {
                ControladorActividades.ActualizarOrdenActividades(subproyecto);

                List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subproyecto).OrderBy(x => x.orden).ToList();
                Proyecto proyecto = ControladorProyecto.ObtenerPorID(subproyecto.id_proyecto.Value);

                if (!proyecto.activo.Value)
                {
                    return(false);
                }

                foreach (var actividad in actividades)
                {
                    if (!ControladorActividades.EstaCompletada(actividad) && ObtenerPorActividad(actividad) == null)
                    {
                        if (!AsignarActividadProyecto(actividad, cantidad_horas_solapamiento))
                        {
                            //La actividad no pudo ser asignada
                            salida = false;
                        }
                    }

                    else if (ObtenerPorActividad(actividad) != null)
                    {
                        //TODO si la actividad ya esta logueada, verificar el tema de las horas, calcular hora fin, etc
                    }
                }
                return(salida);
            }
            return(salida);

            /*
             * Consideraciones:
             * - El subproyecto tiene que tener los miembros asignados, o el proyecto.
             * - El proyecto tiene que estar activo
             * - Las actividades no tienen que estar completadas (recordar que pasa con el primer control)
             * - Las actividades no tienen que tener una tarea asignada, ya que los correspondtientes fueron borrados, sino
             * hay que respetar la tarea a ese usuario o esta forzada.
             * - Solo los usuarios miembros para esa actividad pueden realizarla
             * - Primero las actividades mas largas
             * - Ordenar la lista de usuarios por el que tiene menos calificaciones primero.
             * - Tener en cuenta que a futuro se agregan prioridades.
             *
             *  Como ordenar por fecha?. SI erdeno la lista por usuarios, pero otro que está mas alto en la lista
             *  puede empezarlo antes.
             */
        }
コード例 #5
0
        public static DateTime CalcularFechaFinProyecto(Proyecto item)
        {
            List <SUBPROYECTO> subproyectos = ControladorProyecto.ObtenerSubproyectosHijos(item);
            List <DateTime?>   fechas       = new List <DateTime?>();

            foreach (var subpro in subproyectos)
            {
                fechas.Add(CalcularFechaFinSubproyecto(subpro));
            }

            fechas.Sort((a, b) => a.Value.CompareTo(b.Value));
            return(fechas.Count > 0 ? fechas.ElementAt(fechas.Count - 1).Value : item.fecha_fin_prevista.Value);
        }
コード例 #6
0
        private void OpenFile()
        {
            if (string.IsNullOrEmpty(_proyAux.path))
            {
                _proyAux.path = @"E:\Proyectos\Exportaciones Excel\" + ControladorClientes.ObtenerCLiente(_proyAux.id_cliente).nombre_cliente + @"\" + _proyAux.nombre_proyecto;
                //_proyAux.path = @"C:\Users\infodba\Documents\Descar\export\" + _proyAux.nombre_proyecto;
                ControladorProyecto.Update(_proyAux);

                if (!Directory.Exists(_proyAux.path))
                {
                    Directory.CreateDirectory(_proyAux.path);
                }
            }
            Stream str = GetResourceStream("Sistema.xlsx");

            _xlworkbook = new XLWorkbook(str);
            ActualizarDesdeBaseDatos();
        }
コード例 #7
0
        public static void GenerarCarpetasProyecto(string path, int id_proyecto, int?id_subproyecto, bool esProyecto)
        {
            var subproyectosHijos = new List <SUBPROYECTO>();

            if (esProyecto)
            {
                path = path + "/" + ControladorProyecto.ObtenerPorID(id_proyecto).nombre_proyecto;
                Directory.CreateDirectory(path);
            }
            subproyectosHijos = ControladorSubproyecto.ObtenerPorProyecto(id_proyecto, id_subproyecto);
            if (subproyectosHijos.Count > 0)
            {
                foreach (var subproyecto in subproyectosHijos)
                {
                    Directory.CreateDirectory(path + "/" + subproyecto.nombre);
                    GenerarCarpetasProyecto(path + "/" + subproyecto.nombre, id_proyecto, subproyecto.id_subproyecto, false);
                }
            }
        }
コード例 #8
0
        public static void AsignarProyecto(int id_proyecto)
        {
            Proyecto           proyecto = ControladorProyecto.ObtenerPorID(id_proyecto);
            List <SUBPROYECTO> lista    = ControladorProyecto.ObtenerSubproyectosHijos(proyecto);

            EliminarDetalleRecursoProyecto(proyecto);

            foreach (var item in lista)
            {
                List <Tuple <SUBPROYECTO, int> > estrucuraProyecto = new List <Tuple <SUBPROYECTO, int> >();
                List <SUBPROYECTO> listaSubproyectos = ControladorSubproyecto.ObtenerEstructuraSubproyectos(estrucuraProyecto, item, 1).OrderByDescending(x => x.Item2).Select(x => x.Item1).ToList();
                listaSubproyectos.OrderByDescending(x => x.horas_estimadas).ToList();

                foreach (var sub in listaSubproyectos)
                {
                    AsignarSubproyecto(sub, 0);
                }
            }
        }
コード例 #9
0
        /// <summary>
        /// Obtiene la lista de miembros a un subproyecto. Esto es indirectamente, es decir
        /// si el subproyecto no tiene asignados miembros explicitamente, se buscará en el nivel del arbol
        /// hacia arriba
        /// </summary>
        /// <param name="subproyecto">El subproyecto a buscar sus miembros</param>
        /// <returns>Lista de miembros que pueden trabajar en ese subproyecto</returns>
        public static List <USUARIO> ObtenerMiembrosIndirectos(SUBPROYECTO subproyecto)
        {
            List <USUARIO> miembros = ObtenerMiembrosDirectos(subproyecto);
            SUBPROYECTO    subp_padre;

            if (miembros.Count > 0)
            {
                return(miembros);
            }
            else
            {
                subp_padre = ObtenerSubproyectoPadre(subproyecto);
                if (subp_padre != null)
                {
                    return(ObtenerMiembrosIndirectos(subp_padre));
                }
                else
                {
                    return(ControladorProyecto.ObtenerMiembros(ControladorProyecto.ObtenerPorID(subproyecto.id_proyecto.Value)));
                }
            }
        }
コード例 #10
0
        public static DateTime ObtenerFechaInicioMinima(Actividad_proyecto actividad)
        {
            //Si la actividad es Concepto, le fecha minima de inicio es la fecha del proyecto
            //Si la actividad es Preparacion, la fecha minima de inicio es la fecha del proyecto
            //mas el tiempo de concepto, pero si el concepto ya esta asignado, que la fecha minima de inicio sea la fecha
            //fin de concepto.. Lo mismo para preparacion.
            String      tipo_actividad = ControladorActividades.ObtenerTipoActividad(actividad).descripcion.ToLower();
            SUBPROYECTO sub            = ControladorSubproyecto.BuscarPorId(actividad.id_subproyecto.Value);

            List <Detalle_recurso> tareas = new List <Detalle_recurso>();
            DateTime fecha;

            Actividad_proyecto act_anterior = ControladorActividades.ObtenerActividadAnterior(actividad);

            if (act_anterior != null)
            {
                double tiempo_actividad;

                //Suma los tiempos del
                var act_anterior_aux = act_anterior;
                tiempo_actividad = 0;
                do
                {
                    tiempo_actividad = ObtenerHorasTotalesActividad(act_anterior_aux);
                    act_anterior_aux = ControladorActividades.ObtenerActividadAnterior(act_anterior_aux);
                } while (act_anterior_aux != null);

                tareas = obtenerTareasDeActividad(act_anterior);

                if (tareas.Count == 0)
                {
                    //No esta asignada, se asigna a la fecha de proyecto + tiempo_actividad
                    fecha = ControladorCalendario.CalcularFechaFinDesdeProyecto(actividad, tiempo_actividad).Value;
                }
                else
                {
                    //Está asignada, se asigna a la fecha fin de la asignacion de actividad anterior.
                    tareas = tareas.OrderByDescending(x => x.fecha_fin).ToList();
                    fecha  = tareas.First().fecha_fin.Value;
                }
            }
            else
            {
                fecha = ControladorProyecto.ObtenerPorID(actividad.id_proyecto.Value).fecha_inicio.Value;
            }

            //if (tipo_actividad.Contains("prep") || (tipo_actividad.Contains("deta")))
            //{
            //    List<AvanceSubproyecto> avance;
            //    double tiempo_actividad;

            //    if (tipo_actividad.Contains("deta"))
            //    {
            //        tiempo_actividad = ObtenerHorasTotalesActividad(ObtenerActividadPorTipoActividad(sub,acti_concepto)) + ObtenerHorasTotalesActividad(ObtenerActividadPorTipoActividad(sub, acti_prepa));
            //        tareas = obtenerTareasDeActividad(ObtenerActividadPorTipoActividad(sub, acti_prepa));
            //    }
            //    else
            //    {
            //        tiempo_actividad = ObtenerHorasTotalesActividad(ObtenerActividadPorTipoActividad(sub, acti_concepto));
            //        tareas = obtenerTareasDeActividad(ObtenerActividadPorTipoActividad(sub, acti_concepto));
            //    }

            //    if (tareas.Count == 0)
            //    {
            //        //No esta asignada, se asigna a la fecha de proyecto + tiempo_actividad
            //        fecha = ControladorCalendario.CalcularFechaFinDesdeProyecto(actividad, tiempo_actividad).Value;
            //    }else
            //    {
            //        //Está asignada, se asigna a la fecha fin de la asignacion de actividad anterior.
            //        tareas = tareas.OrderByDescending(x => x.fecha_fin).ToList();
            //        fecha = tareas.First().fecha_fin.Value;
            //    }

            //}
            //else //Es concepto, o cualquier otro tipo de actividad, inicia cuando lo hace el proyecto.
            //{
            //    fecha = ControladorProyecto.ObtenerPorID(actividad.id_proyecto.Value).fecha_inicio.Value;
            //}

            return(fecha < DateTime.Now ? DateTime.Now : fecha);
        }
コード例 #11
0
        public void AgregarProyectoExcel(Entidades.Proyecto proyecto)
        {
            var orden = new int[100];

            orden[0] = 1;

            _proyAux = proyecto;

            OpenFile(proyecto.path + "\\" + proyecto.nombre_proyecto + ".xlsx");

            foreach (IXLWorksheet worksheet in _xlworkbook.Worksheets)
            {
                if (worksheet.Name.ToLower().Contains("proyecto"))
                {
                    ImportarControlesPredeterminados(worksheet, proyecto);

                    SUBPROYECTO subAux;
                    //22 es la fila donde empiezan los nombres de los subproyectos, columna 2.
                    for (var i = 3; !string.IsNullOrEmpty(worksheet.Cell(i, 2).Value.ToString()); i++)
                    {
                        int         id;
                        SUBPROYECTO sub = null;
                        bool        existeSubproyecto = false;
                        if (int.TryParse(worksheet.Cell(i, 1).Value.ToString(), out id))
                        {
                            sub = ControladorSubproyecto.BuscarPorId(id);
                        }
                        if (sub == null)
                        {
                            subAux = new SUBPROYECTO
                            {
                                nombre                = worksheet.Cell(i, 3).Value.ToString(),
                                fecha_fin_estimada    = DateTime.Today,
                                asignacion_automatica = true,
                                fecha_inicio_estimada = DateTime.Today,
                                fecha_inicio_real     = DateTime.Today,
                                fecha_fin_real        = DateTime.Today,
                                ot_cliente            = worksheet.Cell(i, 6).Value.ToString(),
                                horas_estimadas       = string.IsNullOrEmpty(worksheet.Cell(i, 7).Value.ToString()) ?
                                                        0 : Convert.ToInt32(worksheet.Cell(i, 7).Value.ToString()),
                                id_tipo_subproyecto = ControladorSubproyecto.ObtenerTipoSubproyectoPorNombre(worksheet.Cell(i, 4).Value.ToString()).id_tipo_subproyecto,
                                orden = 0,
                                id_hora_tipo_subproyecto = 0,
                                id_prioridad             = 0,
                                observaciones            = "",
                                ot = 0,
                                id_estado_proyecto            = 0,
                                forzada_fecha_fin_estimada    = false,
                                forzada_fecha_inicio_estimada = false,
                                genera_ot =
                                    worksheet.Cell(i, 5).Value.ToString() == "SI",
                                id_proyecto = _proyAux.id_proyecto
                            };

                            ControladorSubproyecto.InsertarSubproyecto(subAux);
                        }
                        else
                        {
                            //Actualizacion de datos
                            subAux                 = sub;
                            subAux.nombre          = worksheet.Cell(i, 3).Value.ToString();
                            subAux.ot_cliente      = worksheet.Cell(i, 6).Value.ToString();
                            subAux.horas_estimadas = string.IsNullOrEmpty(worksheet.Cell(i, 6).Value.ToString()) ?
                                                     0 : Convert.ToInt32(worksheet.Cell(i, 7).Value.ToString());
                            subAux.genera_ot =
                                worksheet.Cell(i, 5).Value.ToString() != "NO";
                            subAux.id_tipo_subproyecto = ControladorSubproyecto.ObtenerTipoSubproyectoPorNombre(worksheet.Cell(i, 4).Value.ToString()).id_tipo_subproyecto;
                        }

                        if (subAux.nombre == null || subAux.nombre == "")
                        {
                            ControladorSubproyecto.EliminarSubproyecto(subAux);
                        }
                        else
                        {
                            //Asigna el nivel del subproyecto
                            int nivel = Convert.ToInt32(worksheet.Cell(i, 2).Value.ToString());
                            orden[nivel] = subAux.id_subproyecto;
                            subAux.id_subproyecto_padre = orden[nivel - 1];

                            //Actualiza la informacion
                            ControladorSubproyecto.ActualizarSubproyecto(subAux);

                            //Orden de trabajo. TODO verificar si ya tiene que no asigne otra
                            if (subAux.genera_ot == true)
                            {
                                ControladorSubproyecto.AsignarOT(subAux.id_subproyecto);
                            }
                        }
                    }
                }
                else if (!worksheet.Name.ToLower().Contains("Template Dispositivo") && !worksheet.Name.ToLower().Contains("SOPORTE"))
                {
                    AgregarUnidades(worksheet);
                }
            }

            CloseFile();
            ControladorProyecto.ActualizarHorasSubproyecto(ControladorProyecto.ObtenerPorID(_proyAux.id_proyecto));
        }
コード例 #12
0
        public void ExportarTodosProyectos()
        {
            List <Proyecto> proyectos = ControladorProyecto.ObtenerProyectosActivos();

            if (OpenFile())
            {
                IXLWorksheet         _worksheetProyecto = _xlworkbook.Worksheet("Tabla_Tareas");
                List <ClaseExpGantt> estructura;

                int fila     = 2;
                int filaAsig = 2;

                CrearRecursos();

                foreach (var item in proyectos)
                {
                    estructura = _controladorProyecto.ObtenerEstructuraProyectoConActividades(item);



                    _worksheetProyecto.Cell(fila, 1).Value = fila - 1;
                    _worksheetProyecto.Cell(fila, 2).Value = "Sí";
                    _worksheetProyecto.Cell(fila, 3).Value = "Programada manualmente";
                    _worksheetProyecto.Cell(fila, 4).Value = item.nombre_proyecto;
                    _worksheetProyecto.Cell(fila, 5).Value = item.total_hora + " horas";
                    _worksheetProyecto.Cell(fila, 6).Value = ControladorTareas.CalcularFechaInicioProyecto(item);
                    _worksheetProyecto.Cell(fila, 7).Value = ControladorTareas.CalcularFechaFinProyecto(item);
                    _worksheetProyecto.Cell(fila, 9).Value = 1;

                    fila++;

                    foreach (ClaseExpGantt subproyecto in estructura)
                    {
                        filaAsig = CrearAsignacion(subproyecto, filaAsig, fila - 1);

                        if (subproyecto.subproyecto != null)
                        {
                            _worksheetProyecto.Cell(fila, 1).Value = fila - 1;
                            _worksheetProyecto.Cell(fila, 2).Value = "Sí";
                            _worksheetProyecto.Cell(fila, 3).Value = "Programada manualmente";
                            _worksheetProyecto.Cell(fila, 4).Value = subproyecto.subproyecto.nombre;
                            _worksheetProyecto.Cell(fila, 5).Value = subproyecto.subproyecto.horas_estimadas + " horas";// ControladorSubproyecto.ObtenerHorasOrdenCompra(subproyecto.subproyecto) + " horas";
                            _worksheetProyecto.Cell(fila, 6).Value = ControladorTareas.CalcularFechaInicioSubproyecto(subproyecto.subproyecto);
                            _worksheetProyecto.Cell(fila, 7).Value = ControladorTareas.CalcularFechaFinSubproyecto(subproyecto.subproyecto);
                            _worksheetProyecto.Cell(fila, 9).Value = subproyecto.nivel + 1;
                        }
                        else
                        {
                            _worksheetProyecto.Cell(fila, 1).Value = fila - 1;
                            _worksheetProyecto.Cell(fila, 2).Value = "Sí";
                            _worksheetProyecto.Cell(fila, 3).Value = "Programada automáticamente";
                            _worksheetProyecto.Cell(fila, 4).Value = subproyecto.actividad.nombre_actividad;

                            if (subproyecto.tarea != null)
                            {
                                if (subproyecto.actividad.id_tipo_actividad == ControladorActividades.ObtenerTipoActividad("prepa").id_tipo_actividad ||
                                    subproyecto.actividad.id_tipo_actividad == ControladorActividades.ObtenerTipoActividad("deta").id_tipo_actividad)
                                {
                                    //Predecesores
                                    //_worksheetProyecto.Cell(fila, 8).Value = fila - 2;
                                }

                                _worksheetProyecto.Cell(fila, 4).Value  = subproyecto.actividad.nombre_actividad + " - " + subproyecto.usuario.FullName;
                                _worksheetProyecto.Cell(fila, 5).Value  = subproyecto.tarea.cantidad_hora + " horas";
                                _worksheetProyecto.Cell(fila, 6).Value  = subproyecto.tarea.fecha_inicio;
                                _worksheetProyecto.Cell(fila, 7).Value  = subproyecto.tarea.fecha_fin;
                                _worksheetProyecto.Cell(fila, 11).Value = subproyecto.actividadProy.id_actividad_proyecto;
                            }

                            _worksheetProyecto.Cell(fila, 9).Value = subproyecto.nivel + 1;
                        }

                        fila++;
                    }
                }

                if (CloseFile())
                {
                    System.Diagnostics.Process.Start(path + "\\" + "Gantt" + ".xlsx");
                }
            }
        }
コード例 #13
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);
        }
コード例 #14
0
        public static bool TieneLogueoPermitido(Detalle_recurso dr)
        {
            Actividad_proyecto ap          = ActividadProyectoDB.ObtenerActividadProyecto(dr.id_actividad_proyecto.Value);
            SUBPROYECTO        subproyecto = ControladorSubproyecto.BuscarPorId(ap.id_subproyecto.Value);
            Proyecto           p           = ControladorProyecto.ObtenerPorID(ap.id_proyecto.Value);
            Tipo_actividad     ta          = ControladorActividades.ObtenerTipoActividad(ap);
            Movimiento_voz     mv          = ControladorActividades.ObtenerMovimientoVoz(ap);

            bool decision = false;
            int  orden    = (int)ap.orden;

            if (dr.realizada.Value)
            {
                return(false);
            }
            if (dr.forzada && !dr.realizada.Value)
            {
                decision = true;
            }
            if (ap.no_conformidad)
            {
                return(false);
            }
            if (p.activo.HasValue && !p.activo.Value)
            {
                return(false);
            }

            if (orden == 1)
            {
                decision = true;
            }

            var anterior = ControladorActividades.ObtenerActividadAnterior(ap);

            if (anterior == null)
            {
                return(true);
            }

            if (ControladorActividades.TieneControl_prod_1_Completado(anterior))
            {
                decision = true;
            }

            else
            {
                decision = false;
            }

            ///////// TODO - CAMBIAR A POR ORDEN
            //if (ta.descripcion.ToLower().Contains("conce"))
            //{
            //    if(mv == null || !mv.control_prod.Value)
            //    {
            //        decision = true;
            //    }
            //}
            //else if (ta.descripcion.ToLower().Contains("prep"))
            //{
            //    Tipo_actividad tipo_act_concepto = ControladorActividades.ObtenerTipoActividad("concepto");
            //    Actividad_proyecto concepto = ControladorSubproyecto.ObtenerActividaHijaDeTipo(subproyecto, tipo_act_concepto);
            //    if (ControladorActividades.TieneControl_prod_1_Completado(concepto) && !ControladorActividades.TieneControl_prod_1_Completado(ap))
            //    {
            //        decision = true;
            //    }
            //}
            //else if (ta.descripcion.ToLower().Contains("deta"))
            //{
            //    Tipo_actividad tipo_act_concepto = ControladorActividades.ObtenerTipoActividad("concepto");
            //    Tipo_actividad tipo_act_preparacion = ControladorActividades.ObtenerTipoActividad("preparac");

            //    Actividad_proyecto concepto = ControladorSubproyecto.ObtenerActividaHijaDeTipo(subproyecto, tipo_act_concepto);
            //    Actividad_proyecto preparacion = ControladorSubproyecto.ObtenerActividaHijaDeTipo(subproyecto, tipo_act_preparacion);
            //    if (ControladorActividades.TieneControl_prod_1_Completado(concepto) && ControladorActividades.TieneControl_prod_1_Completado(preparacion) && !ControladorActividades.TieneControl_prod_1_Completado(ap))
            //    {
            //        decision = true;
            //    }
            //}
            //else
            //{
            //    decision = true;
            //}

            ////////////// END TODO

            if (decision)
            {
                if (dr.id_estado.HasValue)
                {
                    if (dr.id_estado <= 2)
                    {
                        return(true);
                    }
                    return(false);
                }
                else
                {
                    return(decision);
                }
            }
            return(false);
        }