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); }
// 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 }
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); }