コード例 #1
0
        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);
        }
コード例 #2
0
 public InformationFileDTO getByProjectTaskId(int projectId, int taskId)
 {
     return((InformationFileDTO)informationFileRepository.getFirstOrDefault(filter: infoFile => infoFile.id_proyecto == projectId && infoFile.id_tarea == taskId));
 }