Acceso a traves de la API de Odoo

        LINKS dE Documentación

        a) Documentación de API de odoo https://www.odoo.com/documentation/11.0/webservices/odoo.html
        Dentro del link de la documentación oficial va a encontrar casos de ejemplo para varios lenguajes de programación incluyendo: Python, Ruby, PHP y Java.

        b) Documentación de librería que la implementa y facilita su uso en python https://erppeek.readthedocs.io/en/latest/
        Si se va a implementar usando python recomendamos usar la librearía erppeek que facilita mucho la conexión a la base de datos y la llamada de los métodos.

        c) Para probar conectarte se debe usar cualquier base de entrenamiento. Debería solicitar una base, usuario y contraseña al líder de proyecto. IMPORTANTE: Si su base de datos de Odoo tiene varias compañías por favor notificar e indicar en cuales compañías va a operar. 

        EJEMPLOS BÁSICOS (PYTHON)

        Conectarse a la base de datos, diferencia entre  python xmlrpclib vs erppeelk.

        import xmlrpclib

        url = "https://train-....nubeadhoc.com"
        db = "train-..."
        username = "email@example.com"
        password = "password" common = xmlrpclib.ServerProxy('{}/xmlrpc/2/common'.format(url))
        uid = common.authenticate(db, username, password, {})
        common.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', True], ['customer', '=', True]]])
        from erppeek import Client
        url = "https://train-....nubeadhoc.com"
        db = "train-..."
        username = "email@example.com"
        password = "password"
        client = Client(url, db, username, password)
        print(client.common.version())
        client.model('res.partner').search([['is_company', '=', True], ['customer', '=', True]])

        Como se puede ver con python erppeek es mas claro ya que cuando se tiene la conexión activa (client) no es necesario manejar los otros datos de id de usuario, base de datos, contraseña, etc. A demás la llamada al ORM de Odoo es mas parecido a como funciona Odoo en realidad.

        Ejemplos para consultar datos en la base de datos

        # Consultar precio de los productos
        product_data = client.model('product.product').search_read([['active', '=', True]], 'website_price')

        # Crear contacto
        partner = client.model('res.partner').create({'name': 'John Doe', ...}) 

        # Crear orden de venta
        product_data = client.model('sale.order').create({'partner_id': partner, 'order_line': ....}) 

          COnSULTAR PRODUCTOS y STOCK

          Para conseguir los productos tienen que consultar el modelo "product.product"

          • SKU

            • Referencia Interna (default_code): este es el campo en Odoo que se ve en la vista formulario y que generalmente se usa para guardar los SKU.

          • Precio: Existen varios campos que permiten calcular el precio de un producto

            • Precio de venta (list_price): Este equivale al precio de venta de un producto sin impuestos

            • Precio de venta con impuestos (taxed_lst_price): Este equivale al precio de venta de un producto con impuestos.

          • Stock

            • Cantidad a mano (qty_available): seria el campo para saber la cantidad disponible en mano de un producto. Considero que pueden utilizar este en primera instancia

            • Cantidad Prevista (virtual_available): Es el total de lo que esta en mano más lo que esta planificado o pronosticado. Puede ser que que haya un pedido de compra de dicho producto y que se estime que este por recibir nuevas unidades que pueden estimarse para vender. Esta cantidad podría ser negativa cuando se tiene una cantidad de producto comprometida a entregar mayor de la disponible (este caso puede suceder si venden sin tener disponibilidad de producto). Depende del ciclo de ventas que lleve el cliente podrían necesitar este campo.

            • Precio tarifa (price): Precio de un producto sin impuestos bajo una lista de precios especifica. Si el cliente utiliza lista de precios entonces debe utilizar este campo en su lugar y debe pasar por contexto la información del tipo de cliente que hace la operación 

          • Otros campos útiles

            • Name (name): campo char con el nombre del producto

            • Activo/Archivado (active): campo booleano indicando si el producto esta activo o no, generalmente solo los que están activos están disponible para la venta.

            • Descripción para Clientes (description_sale): es la descripción del producto a comunicar con el cliente, es un campo de texto sin formato donde están las características el producto. Generalmente esta info se auto agrega en la lineas de una orden de venta, factura, etc., dentro de Odoo. Tal vez pueden usarla para agregarla en la info que muestran en el e-commerce

          Ejemplos de como hacer consultas 

          1. Para buscar todos los productos activos, esto devuelve una lista de ids

              $ids = $models->execute_kw($db, $uid, $password, 'product.product', 'search', array(array()));

          2. Para buscar un producto en especifico en Odoo conociendo el SKU, retorna una lista con un solo id

              $id = models->execute_kw($db, $uid, $password, 'product.product', 'search', array(array(array('default_code ', '=', $sku))), array('limit'=>1));

          3. Para leer valores de estos registros. el resultado serpa una lista con la info de cada registro consultado

              $product_values = $models->execute_kw(
                  $db, $uid, $password, 'product.product', 'read', 
                  array($ids),
                  array('fields'=>array('name', 'sku', 'list_price', 'qty_available')));

          4. Pueden hacer la búsqueda y lectura en una misma llamada si prefieren

              $product_values = $models->execute_kw(
                  $db, $uid, $password, 'product.product', 'search_read',
                  array(array(array('default_code ', 'in', $sku_list))),
                  array('fields'=>array('name', 'sku', 'list_price', 'qty_available'))
              );

          • Acceso a traves de la API de Odoo