예제 #1
0
        /// <summary>
        /// Obtiene la estructura de todo el proyecto, incluyendo las actividades que la involucran, y las asignaciones.
        /// </summary>
        /// <param name="lista"></param>
        /// <param name="sub"></param>
        /// <param name="nivel"></param>
        /// <returns></returns>
        public static List <ClaseExpGantt> ObtenerEstructuraSubproyectosConActividades(List <ClaseExpGantt> lista, SUBPROYECTO sub, int nivel)
        {
            List <SUBPROYECTO>        listaSubproyectos = ObtenerSubproyectosHijos(subpro: sub);
            List <Actividad_proyecto> actividades       = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(sub);

            ClaseExpGantt estructura = new ClaseExpGantt()
            {
                subproyecto = sub, nivel = nivel
            };

            lista.Add(estructura);
            nivel = nivel + 1;

            foreach (var actividad in actividades)
            {
                Detalle_recurso tarea        = ControladorTareas.ObtenerPorActividad(actividad);
                ClaseExpGantt   ExpoActivida = new ClaseExpGantt()
                {
                    actividadProy = actividad, nivel = nivel, tarea = tarea, subproyecto = null, actividad = ControladorActividades.ObtenerActividad(actividad), usuario = tarea != null?ControladorUsuarios.ObtenerUsuario(tarea.id_usuario.Value) : null
                };
                lista.Add(ExpoActivida);
            }

            foreach (SUBPROYECTO subpro in listaSubproyectos)
            {
                ObtenerEstructuraSubproyectosConActividades(lista, subpro, nivel);
            }
            return(lista);
        }
예제 #2
0
        public static bool EliminarSubproyecto(SUBPROYECTO subproyecto)
        {
            var lista     = new List <Tuple <SUBPROYECTO, int> >();
            var subpHijos = ObtenerEstructuraSubproyectos(lista, subproyecto, 1);

            foreach (var subp in subpHijos)
            {
                List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subp.Item1);
                foreach (var item in actividades)
                {
                    if (ControladorActividades.TieneHorasLogueadas(item))
                    {
                        return(false);
                    }
                }
            }

            foreach (var subp in subpHijos)
            {
                List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subp.Item1);
                foreach (var item in actividades)
                {
                    ControladorActividades.EliminarActividad(item);
                }
                SubproyectoBD.EliminarSubproyecto(subp.Item1);
            }

            return(true);
        }
예제 #3
0
        /// <summary>
        /// Agrega una tarea en la base de datos para el usuario seleccionado.
        /// Se asigna con estado Pendiente.
        /// Si el usuaro ya tiene ese
        /// </summary>
        /// <param name="idActividadProyectoSolicitar"></param>
        /// <param name="idUsuario"></param>
        /// <returns></returns>
        public static Detalle_recurso RequerirTarea(int idActividadProyectoSolicitar, int idUsuario)
        {
            Detalle_recurso tarea = new Detalle_recurso();

            tarea.id_actividad_proyecto = idActividadProyectoSolicitar;
            tarea.forzada              = false;
            tarea.id_usuario           = idUsuario;
            tarea.motivo               = "solicitud";
            tarea.tipo                 = "";
            tarea.porcentaje_avance    = 0;
            tarea.realizada            = false;
            tarea.cantidad_hora        = Convert.ToDecimal(ControladorActividades.ObtenerHorasTotalesActividad(ControladorActividades.ObtenerActividadProyecto(idActividadProyectoSolicitar)));
            tarea.id_estado            = ObtenerEstadoPorNombre("Pendiente").IdEstadoTarea;
            tarea.fecha_inicio         = DateTime.Now;
            tarea.fecha_fin            = ControladorCalendario.CalcularFechaFin(ControladorActividades.ObtenerActividadProyecto(idActividadProyectoSolicitar), ControladorUsuarios.ObtenerUsuario(idUsuario), tarea.fecha_inicio.Value, ControladorActividades.ObtenerHorasTotalesActividad(ControladorActividades.ObtenerActividadProyecto(idActividadProyectoSolicitar)));
            tarea.duracion_cadista     = (decimal)ControladorActividades.ObtenerHorasOrdenCompraParaCadista(ControladorActividades.ObtenerActividadProyecto(idActividadProyectoSolicitar));
            tarea.fecha_inicio_cadista = tarea.fecha_inicio;
            tarea.fecha_fin_cadista    = tarea.fecha_fin;


            if (ControladorTareas.EstaAsignadaAUsuario(idActividadProyectoSolicitar, idUsuario) == null)
            {
                return(Insertar(tarea));
            }
            return(null);
        }
        private void ExportarControlesPredeterminados(IXLWorksheet worksheet, Proyecto proyecto)
        {
            //Controles Predeterminados
            List <CONTROL_SUBPROYECTO> controles = ControladorControles.ObtenerControlesProyecto(proyecto);

            for (int i = 2; i < 15; i++)
            {
                worksheet.Cell(i, 10).Value = "";

                if (controles == null || controles.Count == 0)
                {
                    continue;
                }

                Control control;
                List <Tipo_actividad> actividades = ControladorActividades.ObtenerTiposActividad();

                foreach (var tipo_act in actividades)
                {
                    if (worksheet.Cell(i, 9).Value.ToString().ToLower().Equals(tipo_act.descripcion.ToLower()))
                    {
                        foreach (var ctrlSub in controles)
                        {
                            if (ctrlSub.id_tipo_actividad == tipo_act.id_tipo_actividad)
                            {
                                worksheet.Cell(i, 10).Value = ControladorControles.ObtenerPorID(ctrlSub.id_control).nombre_control;
                                break;
                            }
                        }
                    }
                }
            }
            //Fin controles predeterminados
        }
예제 #5
0
        /// <summary>
        /// Actualiza la hora del subproyecto para que la suma sea igual a las horas de las actividades
        /// incluyendo los subproyectos hijos.
        /// </summary>
        /// <param name="subproyecto">Subproyecto a actualizar, incluyendo sus hijos</param>
        /// <returns></returns>
        public static decimal ActualizarHorasSubproyecto(SUBPROYECTO subproyecto)
        {
            List <SUBPROYECTO>        subproyectos = ObtenerSubproyectosHijos(subproyecto);
            List <Actividad_proyecto> actividades  = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subproyecto);
            List <SUBPROYECTO>        hijos;
            decimal total = 0;

            //Función recursiva para calcular las horas de los subproyectos hijos
            foreach (var subpro in subproyectos)
            {
                total += ActualizarHorasSubproyecto(subpro);
            }

            //Recorre las actividades y suma sus horas
            foreach (var item in actividades)
            {
                item.cantidad_hora = (decimal)ControladorActividades.ObtenerHorasTotalesActividad(item);
                ControladorActividades.ActualizarActividadProyecto(item);
                total += (decimal)ControladorActividades.ObtenerHorasTotalesActividad(item);
            }

            subproyecto.horas_estimadas = total;
            ActualizarSubproyecto(subproyecto);

            return(total);
        }
예제 #6
0
        /// <summary>
        /// Verifica si la actividad tiene asignación automática, y si no tiene
        /// se lo asigna a todos sus miebros.
        /// </summary>
        /// <param name="act"></param>
        /// <returns></returns>
        public static bool VerificarAsignacionAutomatica(Actividad_proyecto act)
        {
            var subproyecto = ControladorSubproyecto.BuscarPorId(act.id_subproyecto.Value);

            if (subproyecto.asignacion_automatica)
            {
                Usuario_Proyecto _Usuario_proyecto         = new Usuario_Proyecto();
                List <USUARIO>   odt_miembros_subproyectos = ControladorSubproyecto.ObtenerMiembrosIndirectos(subproyecto);

                foreach (USUARIO row in odt_miembros_subproyectos)
                {
                    var detalle = new Detalle_recurso()
                    {
                        realizada             = false,
                        tipo                  = "automatico",
                        porcentaje_avance     = 0,
                        id_actividad_proyecto = act.id_actividad_proyecto,
                        motivo                = "- Asignada automáticamente - ",
                        cantidad_hora         = Convert.ToDecimal(ControladorActividades.ObtenerHorasPorOrdenCompra(act)),
                        id_usuario            = Convert.ToInt32(row.id_usuario),
                        fecha_inicio          = null,
                        fecha_fin             = null
                    };

                    ControladorTareas.Insertar(detalle);
                }
                return(true);
            }
            return(false);
        }
예제 #7
0
        /// <summary>
        /// Completar
        /// </summary>
        /// <param name="actividad"></param>
        /// <returns></returns>
        public static bool AsignarActividadProyecto(Actividad_proyecto actividad, double cantidad_horas_solapamiento)
        {
            List <Tuple <USUARIO, decimal> > miembros_habilitados = ControladorSubproyecto.ObtenerMiemrosHabilitadosParaAsignar(actividad);

            DateTime fecha_inicio;
            DateTime fecha_fin;
            double   tiempo_trabajado, tiempo_total;

            tiempo_total     = ControladorActividades.ObtenerHorasTotalesActividad(actividad);
            tiempo_trabajado = 0;//ControladorActividades.ObtenerHorasConsumidas(actividad);
            //Modificar este metodo para que verifique fecha inicio mayor a la actual.
            fecha_inicio = ControladorActividades.ObtenerFechaInicioMinima(actividad);
            //Devuelve la fecha fin ideal
            fecha_fin = ControladorCalendario.ObtenerFechaFinMinima(actividad, fecha_inicio).Value;

            List <Tuple <Tuple <USUARIO, decimal>, Tuple <DateTime, DateTime> > > listaPorFechaFin;
            List <Tuple <Tuple <USUARIO, decimal>, Tuple <DateTime, DateTime> > > listaPorCalifi;

            List <Tuple <Tuple <USUARIO, decimal>, Tuple <DateTime, DateTime> > > listaOrdenada = new List <Tuple <Tuple <USUARIO, decimal>, Tuple <DateTime, DateTime> > >();

            if (!ControladorActividades.EstaCompletada(actividad))
            {
                foreach (var miem in miembros_habilitados)
                {
                    DateTime fecha             = ObtenerFechaInicioMinimaUsuario(miem.Item1, fecha_inicio, tiempo_total - tiempo_trabajado, actividad, fecha_fin);
                    DateTime?fecha_fin_usuario = ControladorCalendario.CalcularFechaFin(actividad, miem.Item1, fecha, null);

                    listaOrdenada.Add(new Tuple <Tuple <USUARIO, decimal>, Tuple <DateTime, DateTime> >(miem, new Tuple <DateTime, DateTime>(fecha, fecha_fin_usuario.Value)));
                }

                if (listaOrdenada.Count > 0)
                {
                    //Ordena la lista primero por fecha de fin, luego por calificaciones, el que tiene mas primero.
                    listaOrdenada    = listaOrdenada.OrderBy(x => x.Item2.Item2).ThenByDescending(x => x.Item1.Item2).ToList();
                    listaPorFechaFin = listaOrdenada.OrderBy(x => x.Item2.Item2).ToList();
                    listaPorCalifi   = listaOrdenada.OrderByDescending(x => x.Item1.Item2).ToList();

                    if (listaOrdenada.ElementAt(0).Item2.Item2.Subtract(listaPorCalifi.ElementAt(0).Item2.Item2).TotalHours <= cantidad_horas_solapamiento)
                    {
                        AsignarActividad(actividad, listaPorCalifi.ElementAt(0).Item1.Item1, listaPorCalifi.ElementAt(0).Item2.Item1, listaPorCalifi.ElementAt(0).Item2.Item2);
                    }
                    else
                    {
                        AsignarActividad(actividad, listaOrdenada.ElementAt(0).Item1.Item1, listaOrdenada.ElementAt(0).Item2.Item1, listaOrdenada.ElementAt(0).Item2.Item2);
                    }


                    return(true);
                }
                return(false);
            }
            return(false);
        }
예제 #8
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.
             */
        }
예제 #9
0
        /// <summary>
        /// Para que sean compatibles el orden que se usaba anteriormente de numeros impares al nuevo por 1,2,3,4..
        /// </summary>
        /// <param name="sub"></param>
        public static void ActualizarOrdenActividades(SUBPROYECTO sub)
        {
            List <Actividad_proyecto> actividades = ObtenerActividadesProyectoDeSubproyecto(sub).OrderBy(x => x.orden).ToList();

            foreach (var act in actividades)
            {
                if (act.orden != actividades.IndexOf(act) + 1)
                {
                    act.orden = actividades.IndexOf(act) + 1;
                    ControladorActividades.ActualizarActividadProyecto(act);
                }
            }
        }
예제 #10
0
        public static List <Tuple <USUARIO, decimal> > ObtenerMiemrosHabilitadosParaAsignar(Actividad_proyecto actividad)
        {
            List <USUARIO> miembros = ObtenerMiembrosIndirectos(BuscarPorId(actividad.id_subproyecto.Value));
            List <Tuple <USUARIO, Tuple <int, decimal> > > listaMiembros = new List <Tuple <USUARIO, Tuple <int, decimal> > >();

            foreach (var item in miembros)
            {
                if (ControladorUsuarios.EstaHabilitadoParaActividad(item, actividad))
                {
                    decimal?calif = ControladorActividades.ObtenerTipoActividadUsuario(ControladorActividades.ObtenerActividad(actividad).id_tipo_actividad, item.id_usuario).calificacion;
                    listaMiembros.Add(new Tuple <USUARIO, Tuple <int, decimal> >(item, new Tuple <int, decimal>(ControladorUsuarios.ObtenerCantidadCalificaciones(item), calif.HasValue ? calif.Value : 1)));
                }
            }

            return(listaMiembros.OrderByDescending(x => x.Item2.Item2).ThenBy(x => x.Item2.Item1).AsEnumerable().Select(x => new Tuple <USUARIO, decimal>(x.Item1, x.Item2.Item2)).ToList());
        }
예제 #11
0
        private void CrearActividad(SUBPROYECTO Subproyecto, int idTipoActividad, string nombre, int orden)
        {
            //TODO controlar duplicaciones
            var actAux = ControladorActividades.InsertarActividad(
                new Entidades.Actividad(
                    ControladorActividades.ObtenerTipoActividad(idTipoActividad).criticidad,
                    idTipoActividad,
                    nombre,
                    1));
            var actpro = ControladorActividades.InsertarActividadProyecto(new Actividad_proyecto(
                                                                              _proyAux.id_proyecto,
                                                                              actAux.id_actividad,
                                                                              fecha_inicio: DateTime.Now,
                                                                              fecha_fin_previsto: DateTime.Now,
                                                                              fecha_fin_real: DateTime.Now,
                                                                              cantidad_hora: 0,//Se actualiza después
                                                                              objetivo: "",
                                                                              prioridad: 1,
                                                                              complejidad: 1,
                                                                              avance: 0,
                                                                              observacion: "",
                                                                              orden: orden,
                                                                              id_controlador_1: 8,
                                                                              id_controlador_2: 8,
                                                                              nro: 0,
                                                                              id_cliente: _proyAux.id_cliente.HasValue ? _proyAux.id_cliente.Value : 0,
                                                                              id_subproyecto: Subproyecto.id_subproyecto,
                                                                              horas: 0,
                                                                              id_estado_proyecto: 0,
                                                                              porcentaje_avance: 0,
                                                                              fecha_inicio_real: DateTime.Now,
                                                                              asignada: false,
                                                                              id_cadista: 0,
                                                                              id_prioridad: 1,
                                                                              id_control: 0,
                                                                              id_proveedor: 0,
                                                                              forzada_fecha_fin: false,
                                                                              forzada_fecha_inicio: false,
                                                                              no_conformidad: false,
                                                                              motivo_no_conformidad: "",
                                                                              asignable: true));

            //ControladorTareas.VerificarAsignacionAutomatica(actpro);
        }
예제 #12
0
        /// <summary>
        /// Obtiene las horas minimas de un subproyecto, esto es la suma de todas las actividades hijas, indirectamente.
        /// </summary>
        /// <param name="subpro"></param>
        /// <returns></returns>
        public static double ObtenerHorasMinimasSubproyecto(SUBPROYECTO subpro)
        {
            double                    total       = 0;
            List <SUBPROYECTO>        lisSubpro   = ObtenerSubproyectosHijos(subpro);
            List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subpro);

            //Función recursiva para calcular las horas de los subproyectos hijos
            foreach (var sub in lisSubpro)
            {
                total += ObtenerHorasMinimasSubproyecto(sub);
            }

            //Recorre las actividades y suma sus horas asignadas
            foreach (var act in actividades)
            {
                total += ControladorActividades.ObtenerHorasAsignadas(act);
            }

            return(total);
        }
예제 #13
0
        public static void SubirOrdenActividad(Actividad_proyecto actividad)
        {
            ActualizarOrdenActividades(ControladorSubproyecto.BuscarPorId(actividad.id_subproyecto.Value));
            List <Actividad_proyecto> actividades = ObtenerActividadesProyectoDeSubproyecto(ControladorSubproyecto.BuscarPorId(actividad.id_subproyecto.Value)).OrderBy(x => x.orden).ToList();

            int indexOf = actividades.IndexOf(actividades.Where(x => x.id_actividad_proyecto == actividad.id_actividad_proyecto).FirstOrDefault());

            if (indexOf == 0)
            {
                return;
            }

            actividades[indexOf].orden--;
            ControladorActividades.ActualizarActividadProyecto(actividades[indexOf]);

            if (indexOf - 1 >= 0)
            {
                actividades[indexOf - 1].orden++;
                ControladorActividades.ActualizarActividadProyecto(actividades[indexOf - 1]);
            }
        }
예제 #14
0
        internal static void ActualizarHorasProyectosActivos()
        {
            List <Proyecto> proyectos_activos = ObtenerProyectosActivos();
            decimal         totalProy         = 0;
            decimal         totalSub          = 0;

            foreach (var proyecto in proyectos_activos)
            {
                totalProy = 0;
                List <SUBPROYECTO> subproyectos = ObtenerSubproyectosHijos(proyecto);

                foreach (var subpro in subproyectos)
                {
                    List <SUBPROYECTO>        subproyectosHijos = ControladorSubproyecto.ObtenerSubproyectosHijos(subpro);
                    List <Actividad_proyecto> actividades       = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subpro);
                    List <SUBPROYECTO>        hijos;
                    totalSub = 0;

                    //Función recursiva para calcular las horas de los subproyectos hijos
                    foreach (var sub in subproyectosHijos)
                    {
                        totalSub += ControladorSubproyecto.ActualizarHorasSubproyecto(sub);
                    }

                    //Recorre las actividades y suma sus horas
                    foreach (var item in actividades)
                    {
                        item.cantidad_hora = (decimal)ControladorActividades.ObtenerHorasTotalesActividad(item);
                        ControladorActividades.ActualizarActividadProyecto(item);
                        totalSub += (decimal)ControladorActividades.ObtenerHorasTotalesActividad(item);
                    }

                    totalProy += totalSub;
                    subpro.horas_estimadas = totalSub;
                    ControladorSubproyecto.ActualizarSubproyecto(subpro);
                }
                proyecto.total_hora = totalProy;
                Update(proyecto);
            }
        }
예제 #15
0
        private void ImportarControlesPredeterminados(IXLWorksheet worksheet, Proyecto proyecto)
        {
            //Controles Predeterminados
            for (int i = 2; i < 15; i++)
            {
                Control control;
                List <Tipo_actividad> actividades = ControladorActividades.ObtenerTiposActividad();
                foreach (var tipo_act in actividades)
                {
                    if (worksheet.Cell(i, 9).Value.ToString().ToLower().Equals(tipo_act.descripcion.ToLower()))
                    {
                        CONTROL_SUBPROYECTO controlSub = ControladorControles.VerificarExistencia(tipo_act, proyecto);
                        control = ControladorControles.ObtenerPorNombre(worksheet.Cell(i, 10).Value.ToString());
                        if (control != null)
                        {
                            if (controlSub == null)
                            {
                                controlSub = new CONTROL_SUBPROYECTO()
                                {
                                    id_proyecto       = proyecto.id_proyecto,
                                    id_control        = control.id_control,
                                    id_subproyecto    = null,
                                    id_tipo_actividad = tipo_act.id_tipo_actividad
                                };
                                ControladorControles.Insertar(controlSub);
                            }

                            //Existe, pero puede haber cambiado el tipo de actividad
                            else
                            {
                                controlSub.id_control = control.id_control;
                                ControladorControles.ActualizarControlSubproyecto(controlSub);
                            }
                        }
                        break;
                    }
                }
            }
            //Fin controles predeterminados
        }
예제 #16
0
        /// <summary>
        /// Asigna la actividad al usuario - VER TEMA DE FECHAS
        /// </summary>
        /// <param name="actividad"></param>
        /// <param name="usuario"></param>
        public static Detalle_recurso AsignarActividad(Actividad_proyecto actividad, USUARIO usuario, DateTime fecha_inicio, DateTime fecha_fin)
        {
            Detalle_recurso tarea = new Detalle_recurso();

            tarea.cantidad_hora         = (decimal)(ControladorActividades.ObtenerHorasTotalesActividad(actividad));
            tarea.fecha_fin             = fecha_fin;
            tarea.fecha_inicio          = fecha_inicio;
            tarea.forzada               = false;
            tarea.id_actividad_proyecto = actividad.id_actividad_proyecto;
            tarea.id_estado             = ObtenerEstadoPorNombre("Asignado") != null?ObtenerEstadoPorNombre("Asignado").IdEstadoTarea : 0;

            tarea.id_usuario        = usuario.id_usuario;
            tarea.motivo            = "asignada por algoritmo";
            tarea.porcentaje_avance = 0;
            tarea.realizada         = false;
            tarea.tipo = "asignada por algoritmo";
            tarea.fecha_inicio_cadista = fecha_inicio;
            tarea.fecha_fin_cadista    = fecha_fin;
            tarea.duracion_cadista     = (decimal)(ControladorActividades.ObtenerHorasOrdenCompraParaCadista(actividad));

            return(TareaDB.AsignarActividad(tarea));
        }
        private void GenerarDatosUnidades(SUBPROYECTO sub)
        {
            IXLWorksheet _worksheetProyecto = _xlworkbook.Worksheet("Template Dispositivo");
            IXLWorksheet _worksheetSoporte  = _xlworkbook.Worksheet("Soporte");

            IXLWorksheet sheetUnidad = _worksheetProyecto.CopyTo(sub.nombre.Length > 31 - sub.ot.Value.ToString().Length - 3 ? sub.ot + " - " + sub.nombre.Substring(0, 31 - sub.ot.Value.ToString().Length - 3) : sub.ot + " - " + sub.nombre, _worksheetProyecto.Position);

            sheetUnidad.Unhide();



            List <HORA_TIPO_SUBPROYECTO> _HORAS = ControladorSubproyecto.ObtenerHorasTipoUnidad();

            //Formato
            var dataV = sheetUnidad.Range("'+" + sheetUnidad.Name + "'!C9:C68").SetDataValidation();

            dataV.List(_worksheetSoporte.Range(_worksheetSoporte.Cell(2, 5), _worksheetSoporte.Cell(_HORAS.Count + 2, 5)));
            dataV.IgnoreBlanks     = true;
            dataV.InCellDropdown   = true;
            dataV.ShowInputMessage = true;
            dataV.ShowErrorMessage = true;
            dataV.ErrorStyle       = ClosedXML.Excel.XLErrorStyle.Stop;


            sheetUnidad.Cell(1, 3).Value = sub.ot;
            sheetUnidad.Cell(2, 3).Value = sub.ot_cliente;
            sheetUnidad.Cell(3, 3).Value = sub.horas_orden_compra.HasValue ? sub.horas_orden_compra : null;

            int fila = 9;

            List <SUBPROYECTO>        subproyectos = ControladorSubproyecto.ObtenerSubproyectosHijos(sub);
            List <Actividad_proyecto> actividades;

            foreach (var subproyecto in subproyectos)
            {
                sheetUnidad.Cell(fila, 1).Value = subproyecto.id_subproyecto;

                sheetUnidad.Cell(fila, 2).Value = subproyecto.nombre;
                HORA_TIPO_SUBPROYECTO hora =
                    ControladorSubproyecto.ObtenerHoraTipoSubproyecto(subproyecto.id_hora_tipo_subproyecto);

                if (hora != null)
                {
                    sheetUnidad.Cell(fila, 3).Value = hora.nombre;
                    //sheetUnidad.Cell(fila, 4).Value = hora.horas;
                }
                else
                {
                    sheetUnidad.Cell(fila, 3).Value = "";
                    sheetUnidad.Cell(fila, 4).Value = ControladorSubproyecto.CalcularHorasOrdenCompra(subproyecto);
                }

                sheetUnidad.Cell(fila, 5).Value = decimal.Round((decimal)ControladorSubproyecto.CalcularHorasOrdenCompra(subproyecto), 2);

                actividades = ControladorSubproyecto.ObtenerActividades(subproyecto);

                int columna = 0;
                foreach (var acti in actividades)
                {
                    switch (ControladorActividades.ObtenerActividad(acti).id_tipo_actividad)
                    {
                    //Concepto
                    case 2:
                        columna = 9;
                        break;

                    case 3:
                        columna = 22;
                        break;

                    case 4:
                        columna = 35;
                        break;

                    default:
                        columna = -1;
                        break;
                    }
                    if (columna > 0)
                    {
                        decimal horaConsumida  = (decimal)(Math.Round(ControladorActividades.ObtenerHorasConsumidas(acti, "prod"), 2));
                        decimal horaAsignada   = (decimal)ControladorActividades.ObtenerHorasAsignadasPorOrdenCompra(acti) * (decimal)0.85;
                        USUARIO responsablePro =
                            ControladorActividades.ObtenerResponsableProduccion(acti.id_actividad_proyecto);

                        sheetUnidad.Cell(fila, columna + 1).DataType = XLCellValues.Number;
                        sheetUnidad.Cell(fila, columna + 1).Value    = horaConsumida;
                        sheetUnidad.Cell(fila, columna + 2).Value    = decimal.Round(horaAsignada, 2);
                        sheetUnidad.Cell(fila, columna + 3).Value    = horaAsignada > 0 ? decimal.Round(horaConsumida / horaAsignada * 100, 2) + "%" : "0%";
                        sheetUnidad.Cell(fila, columna + 4).Value    = responsablePro != null ? responsablePro.nombre + " " +
                                                                       responsablePro.apellido : "Sin asignar";
                        sheetUnidad.Cell(fila, columna + 4).WorksheetColumn().AdjustToContents();

                        columna += 4;
                        //Control
                        horaConsumida  = (decimal)(Math.Round(ControladorActividades.ObtenerHorasConsumidas(acti, "calidad"), 2));
                        horaAsignada   = (decimal)(ControladorActividades.ObtenerHorasAsignadasPorOrdenCompra(acti) * 0.10);
                        responsablePro =
                            ControladorActividades.ObtenerResponsableControln(acti.id_actividad_proyecto);

                        sheetUnidad.Cell(fila, columna + 1).DataType = XLCellValues.Number;
                        sheetUnidad.Cell(fila, columna + 1).Value    = horaConsumida;
                        sheetUnidad.Cell(fila, columna + 2).Value    = decimal.Round(horaAsignada, 2);
                        sheetUnidad.Cell(fila, columna + 3).Value    = horaAsignada > 0 ? decimal.Round(horaConsumida / horaAsignada * 100, 2) + "%" : "0%";
                        sheetUnidad.Cell(fila, columna + 4).Value    = responsablePro != null ? responsablePro.nombre + " " +
                                                                       responsablePro.apellido : "Sin asignar";
                        sheetUnidad.Cell(fila, columna + 4).WorksheetColumn().AdjustToContents();

                        columna += 4;
                        //Correccion
                        horaConsumida  = (decimal)(Math.Round(ControladorActividades.ObtenerHorasConsumidas(acti, "correc"), 2));
                        horaAsignada   = (decimal)(ControladorActividades.ObtenerHorasAsignadasPorOrdenCompra(acti) * 0.05);
                        responsablePro =
                            ControladorActividades.ObtenerResponsableCorreccion(acti.id_actividad_proyecto);

                        sheetUnidad.Cell(fila, columna + 1).DataType = XLCellValues.Number;
                        sheetUnidad.Cell(fila, columna + 1).Value    = horaConsumida;
                        sheetUnidad.Cell(fila, columna + 2).Value    = decimal.Round(horaAsignada, 2);
                        sheetUnidad.Cell(fila, columna + 3).Value    = horaAsignada > 0 ? decimal.Round(horaConsumida / horaAsignada * 100, 2) + "%" : "0%";
                        sheetUnidad.Cell(fila, columna + 4).Value    = responsablePro != null ? responsablePro.nombre + " " +
                                                                       responsablePro.apellido : "Sin asignar";
                        sheetUnidad.Cell(fila, columna + 4).WorksheetColumn().AdjustToContents();
                    }
                }
                fila++;
            }

            //Otras actividades

            fila = 9;
            List <Actividad_proyecto> listaActividades = ControladorSubproyecto.ObtenerActividades(sub);

            foreach (Actividad_proyecto actividad in listaActividades)
            {
                sheetUnidad.Cell(fila, 7).Value = ControladorActividades.ObtenerActividad(actividad).nombre_actividad;
                fila++;
            }
        }
예제 #18
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);
        }
예제 #19
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);
        }
예제 #20
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);
        }
예제 #21
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);
        }
        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");
                }
            }
        }
예제 #23
0
        private void AgregarUnidades(IXLWorksheet worksheet)
        {
            var sub = ControladorSubproyecto.BuscarPorOTDeExportacion(worksheet.Name, _proyAux.id_proyecto);

            if (sub == null)
            {
                return;
            }

            decimal horasOC;
            bool    isNumericOC = decimal.TryParse(worksheet.Cell(3, 3).GetFormattedString(), out horasOC);

            if (isNumericOC)
            {
                sub.horas_orden_compra = horasOC;
            }
            else
            {
                sub.horas_orden_compra = null;
            }

            ControladorSubproyecto.ActualizarSubproyecto(sub);

            int i;
            //Por si las dudas hayan escrito algo en la fila 9 (no deberian) porque anda mal la exportacion de Excel
            int j = 9;

            //Que columna?
            for (i = j; !string.IsNullOrEmpty(worksheet.Cell(i, 2).Value.ToString()); i++)
            {
                int  n;
                bool isNumeric = int.TryParse(worksheet.Cell(i, 4).GetFormattedString(), out n);
                HORA_TIPO_SUBPROYECTO hora_tipo = ControladorSubproyecto.ObtenerHoraTipoSubproyecto(worksheet.Cell(i, 3).Value.ToString());
                decimal?dec    = null;
                var     subAux = new SUBPROYECTO
                {
                    nombre                = worksheet.Cell(i, 2).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            = "",
                    id_tipo_subproyecto   = 4,
                    orden = 0,
                    id_hora_tipo_subproyecto = hora_tipo == null ? 0: hora_tipo.id_hora_tipo_subproyecto,
                    horas_estimadas          = isNumeric ? n : hora_tipo == null ? 0 : hora_tipo.id_hora_tipo_subproyecto > 0 ? ControladorSubproyecto.ObtenerHoraTipoSubproyecto(worksheet.Cell(i, 3).Value.ToString()).horas : 0,
                    id_prioridad             = 0,
                    observaciones            = "",
                    ot = i - 9,
                    id_estado_proyecto            = 0,
                    forzada_fecha_fin_estimada    = false,
                    forzada_fecha_inicio_estimada = false,
                    genera_ot   = false,
                    id_proyecto = _proyAux.id_proyecto
                };

                //mp existe
                //TODO ACTUALIZAR
                int         id;
                SUBPROYECTO subPro            = null;
                bool        existeSubproyecto = false;
                SUBPROYECTO sub2 = null;
                if (int.TryParse(worksheet.Cell(i, 1).Value.ToString(), out id))
                {
                    sub2 = ControladorSubproyecto.BuscarPorId(id);
                }
                if (sub2 == null)
                {
                    ControladorSubproyecto.InsertarSubproyecto(subAux);
                    subAux.id_subproyecto_padre = sub.id_subproyecto;
                    ControladorSubproyecto.ActualizarSubproyecto(subAux);
                    //Check
                    CrearActividades(subAux);
                    subAux.horas_orden_compra = (decimal)ControladorSubproyecto.CalcularHorasOrdenCompra(subAux);
                    ControladorSubproyecto.ActualizarSubproyecto(subAux);
                }
                else
                {
                    sub2.nombre = worksheet.Cell(i, 2).Value.ToString();
                    sub2.id_hora_tipo_subproyecto = subAux.id_hora_tipo_subproyecto;
                    sub2.horas_estimadas          = ControladorSubproyecto.CalcularHorasOrdenCompra(subAux) != null?Convert.ToDecimal(ControladorSubproyecto.CalcularHorasOrdenCompra(subAux).Value.ToString("#.##")) : 0;

                    sub2.orden = subAux.orden;

                    //Eliminar subproyecto
                    if (sub2.nombre == null || sub2.nombre == "")
                    {
                        ControladorSubproyecto.EliminarSubproyecto(sub2);
                    }
                    else
                    {
                        ControladorSubproyecto.ActualizarSubproyecto(sub2);
                        decimal?valor = (decimal)ControladorSubproyecto.CalcularHorasOrdenCompra(sub2);
                        sub2.horas_orden_compra = ControladorSubproyecto.CalcularHorasOrdenCompra(sub2).HasValue ? decimal.Round((decimal)ControladorSubproyecto.CalcularHorasOrdenCompra(sub2).Value, 2, MidpointRounding.AwayFromZero) : 0;
                        ControladorSubproyecto.ActualizarSubproyecto(sub2);
                    }
                }
            }

            List <Actividad> listaActividades = ControladorActividades.ObtenerActividadesDeSubproyecto(sub);

            for (i = 9; !string.IsNullOrEmpty(worksheet.Cell(i, 7).Value.ToString()); i++)
            {
                string nombre = worksheet.Cell(i, 7).Value.ToString();
                if (listaActividades.Count == 0 || !listaActividades.Where(x => x.nombre_actividad == nombre).Any())
                {
                    CrearActividad(sub, ControladorActividades.ObtenerTipoActividad(nombre) == null ? 1 : ControladorActividades.ObtenerTipoActividad(nombre).id_tipo_actividad, nombre, listaActividades.Count == 0 ? 1 : listaActividades.Count + 1);
                }
            }
        }
예제 #24
0
 private void CrearActividades(SUBPROYECTO Subproyecto)
 {
     CrearActividad(Subproyecto, ControladorActividades.ObtenerTipoActividad("Concepto") == null ? 1 : ControladorActividades.ObtenerTipoActividad("Concepto").id_tipo_actividad, "Concepto", 1);
     CrearActividad(Subproyecto, ControladorActividades.ObtenerTipoActividad("Preparación") == null ? 1 : ControladorActividades.ObtenerTipoActividad("Preparación").id_tipo_actividad, "Preparación", 2);
     CrearActividad(Subproyecto, ControladorActividades.ObtenerTipoActividad("Detallado") == null ? 1 : ControladorActividades.ObtenerTipoActividad("Detallado").id_tipo_actividad, "Detallado", 3);
 }