public IEnumerable <ProjectDTO> getAllOperations() { var filterProjects = new object[] { }; int[] idsProjects = odooApi.Search("project.project", filterProjects); List <XmlRpcStruct> projectTuples = odooApi.Read("project.project", idsProjects, new object[] { }) .ToList() .Cast <XmlRpcStruct>() .ToList(); // obtener las tareas de los proyectos relacionados con el cliente List <int> idsTaskList = new List <int>(); projectTuples.ForEach( (v) => { var filterTask = new object[1] { new object[] { "project_id", "=", (int)v["id"] } }; idsTaskList.AddRange(odooApi.Search("project.task", filterTask)); }); // iterar los proyectos del cliente que solicita List <ProjectDTO> projectsResult = new List <ProjectDTO>(); projectTuples.ForEach( (projectCurrent) => { projectsResult.Add(new ProjectDTO { id = (int)projectCurrent["id"], name = (string)projectCurrent["name"] }); // leer las tareas de cada proyecto int[] idsTask = odooApi.Search("project.task", new object[1] { new object[] { "project_id", "=", projectsResult.Last().id } }); List <XmlRpcStruct> taskTuples = odooApi.Read("project.task", idsTask, new object[] { }).ToList().Cast <XmlRpcStruct>().ToList(); // filtrar las tareas que el cliente no puede visualizar List <string> taskNames = new List <string>(); // obtener los nombres de las tareas de [ConfiguracionTarea] var queryTaskConfiguration = taskConfigurationRepository.get(taskConf => taskConf.estado == 1).ToList().ConvertAll(e => (TaskConfigurationDTO)e); queryTaskConfiguration.ToList() .ForEach((v) => taskNames.Add(v.name)); // suprimir case sensitive for (int i = 0; i < taskNames.Count(); i++) { taskNames[i] = taskNames[i].ToLower(); } taskTuples.RemoveAll((v) => !taskNames.Contains(((string)v["name"]).ToLower())); // iterar las tareas validas del proyecto actual taskTuples.ForEach( (taskCurrent) => { int stageId = (int)((object[])taskCurrent["stage_id"])[0]; XmlRpcStruct stageXML = (XmlRpcStruct)odooApi.Read("project.task.type", new int[] { stageId }, new object[] { })[0]; var stageModel = new StageDTO { id = (int)stageXML["id"], name = (string)stageXML["name"], sequence = (int)stageXML["sequence"], projectId = ((int[])stageXML["project_ids"])[0], // posible array de proyectos }; if (!projectsResult.Last().stages.Contains(stageModel)) { projectsResult.Last().stages .Add(stageModel); projectsResult.Last().stages = projectsResult.Last() .stages .OrderBy(s => s.sequence) .ToList(); } int lastProjectId = projectsResult.Last().id; // relacionar la tarea actual obtenida de odoo, con su respectiva plantilla en base de datos, mejorar posteriormente var taskTemplate = queryTaskConfiguration.FirstOrDefault(t => t.name.ToLower() == ((string)taskCurrent["name"]).ToLower()); // existe documento ya guardado var documentInTask = (InformationFileDTO)informationFileRepository.getFirstOrDefault(i => i.id_proyecto == lastProjectId && i.id_tarea == taskTemplate.id); bool documentExist = !isNull(documentInTask); // obtener formato string documentFormat = documentExist ? documentInTask.format : string.Empty; var taskModel = new TaskDTO { id = (int)taskCurrent["id"], name = (string)taskCurrent["name"], kanbanState = (string)taskCurrent["kanban_state"], date_start = Convert.ToDateTime(taskCurrent["date_start"].ToString()), stageId = stageId, projectId = projectsResult.Last().id, // agregar los nuevos atributos canUpload = Convert.ToBoolean(taskTemplate.allowDocuments), uploaded = documentExist, // no se subio aun el documento (valor por defecto) format = documentFormat }; // agregar la tarea a su respectiva etapa y consecutivo proyecto int index = projectsResult.Last().stages.IndexOf(stageModel); projectsResult.Last().stages[index].tasks.Add(taskModel); } ); }); return(projectsResult); }
public InformationFileDTO getByProjectTaskId(int projectId, int taskId) { return((InformationFileDTO)informationFileRepository.getFirstOrDefault(filter: infoFile => infoFile.id_proyecto == projectId && infoFile.id_tarea == taskId)); }