public IEnumerable <ContactDTO> getAllContactsErp()
        {
            List <ContactDTO> contactResult = new List <ContactDTO>();

            // contactos de Odoo
            int[] idsUsers = odooApi.Search("res.users", new object[] { });
            List <XmlRpcStruct> usersTuples = odooApi.Read("res.users", idsUsers, new object[] { "id" })
                                              .ToList()
                                              .Cast <XmlRpcStruct>()
                                              .ToList();

            // REALIZAR EL CRUZE DE TABLAS
            List <int> idContacts = new List <int>();

            foreach (var idUser in idsUsers.ToList())
            {
                idContacts.AddRange((odooApi.Search("res.partner", new object[] {
                    new object[] { "user_ids", "=", idUser }
                })).ToList());
            }
            List <XmlRpcStruct> contactsTuples = odooApi.Read("res.partner", idContacts.ToArray(), new object[] { "id", "name", "email", "display_name", "phone", "street", "customer", "supplier", "employee" })
                                                 .ToList()
                                                 .Cast <XmlRpcStruct>()
                                                 .ToList();

            contactsTuples.ForEach(
                (contact) =>
            {
                var contactModel = new ContactDTO
                {
                    id          = (int)contact["id"],
                    displayName = (string)contact["display_name"],
                    email       = (string)contact["email"],
                    name        = (string)contact["name"],
                    phone       = !(contact["phone"]).Equals(false) ? (string)contact["phone"] : string.Empty,
                    //isCustomer = (bool)contact["is_customer"],
                    street        = !(contact["street"]).Equals(false) ? (string)contact["street"] : string.Empty,
                    id_membership = 1     // Afiliacion Delta Cargo SRL
                };
                contactResult.Add(contactModel);
            });
            return(contactResult);
        }
Ejemplo n.º 2
0
        // metodod pendiente de implementacion
        public static List <ContactDTO> getPasswords()
        {
            int[] idPass = odooApi.Search("res.users", new object[] { });
            List <XmlRpcStruct> passTuples = odooApi.Read("res.users", idPass, new object[] { }).ToList().Cast <XmlRpcStruct>().ToList();

            // listar las contraseñas de los usuarios
            List <ContactDTO> changePassResult = new List <ContactDTO>();

            passTuples.ForEach(
                (pass) =>
            {
                int passId = (int)pass["id"];
            }

                );
            return(changePassResult);
        }
        public string getNameTaskByIdInERP(int taskIdErp)
        {
            /*var odooCredentials = new OdooConnectionCredentials("https://deltacargo-deltaqa-646890.dev.odoo.com", "deltacargo-deltaqa-646890", "*****@*****.**", "delta011235813");
             * var odooApi = new OdooAPI(odooCredentials);*/

            var filterTask = new object[1]
            {
                new object[]
                {
                    "id", "=", taskIdErp
                }
            };

            int[] idsTask = odooAPI.Search("project.task", filterTask);
            List <XmlRpcStruct> tasksTuples = odooAPI.Read("project.task", idsTask, new object[] { })
                                              .ToList()
                                              .Cast <XmlRpcStruct>()
                                              .ToList();

            return(tasksTuples.Find(x => ((int)x["id"]) == taskIdErp)["name"].ToString());
        }
        // Rediseñar el algoritmo para enviar el modelo de cotizacion de acuerdo a los parametros de Odoo
        public bool createInERP(QuotationDTO quotation)
        {
            //var odooCredentials = new OdooConnectionCredentials("https://deltacargo-deltaqa-646890.dev.odoo.com", "deltacargo-deltaqa-646890", "*****@*****.**", "delta011235813");
            //var odooApi = new OdooAPI(odooCredentials);

            var modelXML = new XmlRpcStruct();

            modelXML["name"]         = quotation.company_name;
            modelXML["contact_name"] = quotation.name;
            modelXML["email_from"]   = quotation.email_from;
            modelXML["phone"]        = quotation.phone;
            modelXML["city"]         = quotation.routeCityOrigin;

            var routeOriginModel = (RouteDTO)routeRepository.getById(quotation.idMacroRouteOrigin.GetValueOrDefault());

            if (!isNull(routeOriginModel))
            {
                int[] ids = odooApi.Search("res.country", new object[1] {
                    new object[] { "name", "=", routeOriginModel.name }
                });
                List <XmlRpcStruct> countriesTuples = odooApi.Read("res.country", ids, new object[] { })
                                                      .ToList()
                                                      .Cast <XmlRpcStruct>()
                                                      .ToList();
                if (countriesTuples.Count > 0)
                {
                    modelXML["country_id"] = countriesTuples[0]["id"];
                    /*modelXML["country_id"] = new object[1] { new object[] { countriesTuples[0]["id"], countriesTuples[0]["name"]} };*/
                }
            }
            // arreglar para obtener el nombre del pais
            modelXML["street"]       = quotation.street;
            modelXML["kanban_state"] = quotation.kanban_state; //"grey"; // [grey, red]
            modelXML["type"]         = quotation.type;         //"lead";
            modelXML["description"]  = quotation.description;

            int idObjCreated = odooApi.Create("crm.lead", modelXML);

            return(idObjCreated > 0); // analizar la respuesta
        }
Ejemplo n.º 5
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);
        }