예제 #1
0
        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);

            byte[] pdf_content = File.ReadAllBytes("./Properties/prueba.pdf");
            String base64_pdf  = Convert.ToBase64String(pdf_content);

            // Se obtendría el id del albarán donde queremos añadir el adjunto
            // Cojo un id de un albarán cualquiera
            int picking = 209;
            // Creamos el adjunto
            XmlRpcStruct vals = new XmlRpcStruct();

            vals.Add("name", "Pdf prueba");                                // Nombre del pdf
            vals.Add("datas", base64_pdf);                                 // base64
            vals.Add("datas_fname", "Pdf prueba");                         // Nombre del pdf
            vals.Add("res_model", "stock.picking");                        // Valor fijo, modelo al que se asocia el pdf
            vals.Add("res_id", picking);                                   // Id del registro al que se asocia el pdf
            vals.Add("to_print", true);
            long attachment_id = connection.Create("ir.attachment", vals); // se crea
            // stock_custom.report_picking_with_attachments es el nombre del informe, valor fijo
            // 209 vuelve a ser el id del picking
            Object x = connection.Print("report", "stock_custom.report_picking_with_attachments", new long[] { 209 });
        }
예제 #2
0
파일: Main.cs 프로젝트: ssanche/CMNT_004_15
        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();
        }
예제 #3
0
        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"])) });
            }
        }
예제 #4
0
파일: Main.cs 프로젝트: ssanche/CMNT_004_15
        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();
        }