public static void Main(string[] args) { // Datos de conexión String Url = "http://localhost:8069"; String Dbname = "visiotech_devel"; String Login = "******"; String Password = "******"; // Login OpenERPConnect connection = new OpenERPConnect(Url, Dbname, Login, Password); connection.Login(); Console.WriteLine(connection.UserId); Object[] domain = new Object[3]; domain[0] = "|"; //OR domain[1] = new Object[3] {"state", "=", "confirmed"}; //Esperando materias primas domain[2] = new Object[3] {"state", "=", "ready"}; //Lista para producir long[] production_ids = connection.Search("mrp.production", domain); var prods_data = connection.Read("mrp.production", production_ids, new string[] {"state", "move_lines", "move_created_ids", "name", "product_id"}); foreach(var prod in prods_data) { Console.WriteLine ("Procesando: {0}", prod ["name"]); if ((string) prod ["state"] == "confirmed") { connection.Execute("mrp.production", "force_production", new long[] {Convert.ToInt64(((int) prod["id"]))}); //Confirmado -> Listo para producir } // Recorremos las lineas a consumir y les ponemos nº serie int[] moves = (int[]) prod["move_lines"]; foreach (long move in moves) { XmlRpcStruct[] move_data = connection.Read("stock.move", new long[] {(long) move}, new string[] {"product_id"}); //buscamos si hay un lote ya creado con el código 0001 para el producto del movimiento Object[] lot_domain = new Object[2]; lot_domain[0] = new Object[3] {"product_id", "=", Convert.ToInt64(((object[]) move_data[0]["product_id"])[0])}; lot_domain[1] = new Object[3] {"name", "=", "0001"}; long[] lot_ids = connection.Search ("stock.production.lot", lot_domain); long lot_id = 0; if (lot_ids.Length > 0) { lot_id = lot_ids [0]; } else { XmlRpcStruct vals = new XmlRpcStruct(); vals.Add("name", "0001"); vals.Add("product_id", Convert.ToInt64(((object[]) move_data[0]["product_id"])[0])); lot_id = connection.Create("stock.production.lot", vals); } XmlRpcStruct w_vals = new XmlRpcStruct(); w_vals.Add("restrict_lot_id", lot_id); connection.Write("stock.move", new long[] {(long) move}, w_vals); } // Recorremos los productos finales y les ponemos nº serie int[] final_moves = (int[]) prod["move_created_ids"]; foreach (long fmove in final_moves) { XmlRpcStruct[] fmove_data = connection.Read("stock.move", new long[] {(long) fmove}, new string[] {"product_id"}); //buscamos si hay un lote ya creado con el código 0001 para el producto del movimiento Object[] flot_domain = new Object[2]; flot_domain[0] = new Object[3] {"product_id", "=", Convert.ToInt64(((object[]) fmove_data[0]["product_id"])[0])}; flot_domain[1] = new Object[3] {"name", "=", "0001"}; long[] flot_ids = connection.Search ("stock.production.lot", flot_domain); long flot_id = 0; if (flot_ids.Length > 0) { flot_id = flot_ids [0]; } else { XmlRpcStruct fvals = new XmlRpcStruct(); fvals.Add("name", "0001"); fvals.Add("product_id", Convert.ToInt64(((object[]) fmove_data[0]["product_id"])[0])); flot_id = connection.Create("stock.production.lot", fvals); } XmlRpcStruct wf_vals = new XmlRpcStruct(); wf_vals.Add("restrict_lot_id", flot_id); connection.Write("stock.move", new long[] {(long) fmove}, wf_vals); } connection.Execute("mrp.production", "action_production_end", new long[] {Convert.ToInt64(((int) prod["id"]))}); } }
public static void Main(string[] args) { // Datos de conexión String Url = "http://localhost:8069"; String Dbname = "test_db"; String Login = "******"; String Password = "******"; // Login OpenERPConnect connection = new OpenERPConnect(Url, Dbname, Login, Password); connection.Login(); Console.WriteLine(connection.UserId); // Nos devuelve todos los ids de empresas ArrayList filters = new ArrayList(); long[] partner_ids = connection.Search("res.partner", filters.ToArray()); ArrayList fields = new ArrayList(); fields.Add("name"); // Leemos para todos los ids de empresas obtenidos arriba el campo nombre. Read siempre nos devuelve el id y los campos pedidos. var partner_data = connection.Read("res.partner", partner_ids, (string[]) fields.ToArray(typeof(string))); foreach(var partner in partner_data) { Console.WriteLine("Partner {0} with Id {1}", partner["name"], partner["id"]); } //Comprobarmos que no existe un partner con nombre Prueba Object[] domain = new Object[1]; domain[0] = new Object[3] {"name", "=like", "Prueba%"}; long[] prueba_partner_ids = connection.Search("res.partner", domain); if (prueba_partner_ids.Length > 0) { // El partner ya existe lo borramos Console.WriteLine("Partnes exists"); bool deleted = connection.Unlink("res.partner", prueba_partner_ids); Console.WriteLine("Deleted: {0}", deleted); } else { // El partner no existe lo creamos Console.WriteLine("Partnes not exists"); XmlRpcStruct vals = new XmlRpcStruct(); vals.Add("name", "Prueba"); vals.Add("is_company", true); vals.Add("vat", "ES33552390J"); long new_partner_id = connection.Create("res.partner", vals); Console.WriteLine("New Partner created {0}", new_partner_id); // Le cambiamos el nombre XmlRpcStruct vals2 = new XmlRpcStruct(); vals2.Add("name", "Prueba2"); long[] ids_to_update = new long[1]; ids_to_update[0] = new_partner_id; bool updated = connection.Write("res.partner", ids_to_update, vals2); Console.WriteLine("Updated: {0}", updated); //Mostramos el nuevo nombre var new_partner_data = connection.Read("res.partner", ids_to_update, new string[] {"name"}); foreach(var partner in new_partner_data) { Console.WriteLine("Partner {0} with Id {1}", partner["name"], partner["id"]); } // Como ejemplo del método execute comprobamos si el cif es válido var result = connection.Execute ("res.partner", "button_check_vat", ids_to_update); Console.WriteLine("VAT valid: {0}", Convert.ToBoolean(result)); } Console.ReadLine(); }
public static void Main(string[] args) { // Datos de conexión String Url = "http://localhost:8069"; String Dbname = "test_db"; String Login = "******"; String Password = "******"; // Login OpenERPConnect connection = new OpenERPConnect(Url, Dbname, Login, Password); connection.Login(); Console.WriteLine(connection.UserId); //Listamos todos los productos almacenables con su stock inicial Object[] domain = new Object[1]; // [('type.code', '=', 'product')] domain[0] = new Object[3] {"type", "=", "product"}; long[] product_ids = connection.Search("product.product", domain); Console.WriteLine("Productos encontrados: {0}", product_ids.Length); XmlRpcStruct context = new XmlRpcStruct(); context.Add("lang", "es_ES"); // cargamos en contexto el idioma español XmlRpcStruct[] products_data = connection.Read ("product.product", product_ids, new string[] {"name", "qty_available", "uom_id"}, context); Console.WriteLine("STOCK INICIAL"); foreach(var product in products_data) { Console.WriteLine("Producto: {0} - Stock actual: {1} unidades", product["name"], product["qty_available"]); } Console.WriteLine("\n\n"); // Con un inventario vamos a aumentarle una unidad a cada uno siempre que el stock no sea en negativo, si es negativo ponemos 0. //Creamos un inventario nuevo. XmlRpcStruct vals = new XmlRpcStruct(); vals.Add("name", "Inventario de prueba"); //Motivo de inventario long inv_id = connection.Create("stock.inventory", vals); // se crea // Necesitamos recuperar el id de la ubicación de stock del inventario XmlRpcStruct[] inv_data = connection.Read("stock.inventory", new long[] {inv_id}, new string[] {"location_id"}); long location_id = Convert.ToInt64(((object[]) inv_data[0]["location_id"])[0]); foreach(var product in products_data) //Para cada producto creamos una linea en el inventario { XmlRpcStruct line_vals = new XmlRpcStruct(); line_vals.Add("inventory_id", inv_id); line_vals.Add("product_id", product["id"]); line_vals.Add("location_id", location_id); if (Convert.ToDouble(product["qty_available"]) >= 0){ line_vals.Add("product_qty", Convert.ToDouble(product["qty_available"]) + 1.0); // cantidad actual + 1 } else{ line_vals.Add("product_qty", 0); // cantidad actual <= 0 entonces 0 } line_vals.Add("product_uom_id", Convert.ToInt64(((object[]) product["uom_id"])[0])); //unidad de medida connection.Create("stock.inventory.line", line_vals); } //Una vez rellenado lo confirmamos connection.Execute("stock.inventory", "prepare_inventory", new long[] {inv_id}); connection.Execute("stock.inventory", "action_done", new long[] {inv_id}); //Para comprobar el cambio volvemso a leer productos y mostrarlos por pantalla. long[] product_ids2 = connection.Search("product.product", domain); Console.WriteLine("Productos encontrados: {0}", product_ids2.Length); XmlRpcStruct[] products_data2 = connection.Read ("product.product", product_ids2, new string[] {"name", "qty_available", "uom_id"}, context); Console.WriteLine("STOCK ACTUAL"); foreach(var product in products_data2) { Console.WriteLine("Producto: {0} - Stock actual: {1} unidades", product["name"], product["qty_available"]); } Console.ReadLine(); }