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); } } }
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); }
/// <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); } } }
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. */ }
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); }
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(); }
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); } } }
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); } } }
/// <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))); } } }
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); }
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)); }
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"); } } }
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 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); }