Programacion Interactiva

Descubre una Nueva y Poderosa Herramienta.

FrameWork de Nueva Generacion

Acceso a tu Informacion desde cualquier Dispositivo con Navegador.

Enfoque en el Backend

Frontend de forma facil con Odoo y XML.

Creacion de Verticales

Creacion de nuevas Verticales Conquistando nuevos Mercados.

Tu marca aqui mismo

Llega a miles de personas.

Publicidad

Mostrando las entradas con la etiqueta many2many. Mostrar todas las entradas
Mostrando las entradas con la etiqueta many2many. Mostrar todas las entradas

lunes, 13 de febrero de 2017

Inserción de Datos a una nueva tabla desde una consulta SQL

Insertar Datos a una tabla Many2many desde una consulta SQL


Un problema que tuve al momento de generar una base de datos nueva y cargar un catalogo de productos fue que olvide activar una ruta creada, entonces me surgió una duda como puedo insertar datos a una tabla relacional producto de un campo many2many desde una consulta SQL sin usar funciones en la base de datos, pues la respuesta fue muy sencilla y a continuación les describo mi script:

insert into stock_route_product(product_id,route_id) select id as product_id,
5 as route_id from product_template;


  • Primero detectamos la tabla many2many2 que contiene la información por la cual se crean las relaciones.
  • Segundo ingresamos las 2 columnas que se necesitan para obtener la relación muchos a muchos, en mi caso la ruta que querĆ­a insertar era la que tenia el ID 5 para cada producto.
  • Por ultimo hice la consulta de la tabla product_template y de forma automĆ”tica PostreSQL inserto cada registro de la tabla mencionada y su relación correspondiente en la tabla de rutas.


Espero les sea de ayuda.


martes, 22 de septiembre de 2015

Eliminar en Link en campos Many2Many Odoo

No acceder a Campos Relacionales en un Formulario



En algunas ocasiones es necesario eliminar el link que nos da Odoo para acceder a clases relacion por medio de campos many2one, por motivos de seguridad o por necesidad, para ello solo es necesario en la definicion del campo agregar la opcion no_open, su estructura es:

<field name="campo_many2one" options="{'no_open': True}"/>


Widgets para Campos Many2Many Odoo

Widgets para Campos Many2Many Odoo



Los widgets permitidos para Odoo, con campos Many2Many son:

  1. many2many widget (Defecto)
  2. many2many_tags widget (Crea Etiquetas)
  3. many2many_checkboxes widget (Tipo Lista)
  4. many2many_kanban widget (Subvista Grafica)
  5. x2many_counter widget
  6. many2many_binary widget (Subvista para Campos binary).

many2many widget por defecto

El widget many2many  es utilizado por defecto en todos los campos many2many por estĆ”ndar Odoo crea un grid de tipo subvista (tree,form), toma como referencia la "Accion" de la Clase Heredada.
many2many widget
Opciones:
  • no_create - Elimina el Boton “Crear"
Un Ejemplo:
<field name="campo_many2many" options="{'no_create': True}"/>

many2many_tags widget

Este widget te permite seleccionar registros de la clase relación y mostrarlas en forma de etiquetas, por estÔndar solo toma el nombre del registro para mostrarlo, podemos ver este Widget en Recursos Humanos o al definir un nuevo registro de Clientes/Proveedores.
many2many_tags widget
Opciones:
  • no_quick_create - Elimina la opción de crear.
  • no_create_edit -  Elimina la opción de Crear y Editar.
    many2many_tags widget
  • no_create - no_quick_create and no_create_edit combined.
Ejemplo:
<field name="campo_many2many"
widget="many2many_tags"
options="{'no_create_edit': True}"/>

many2many_checkboxes widget

Este modulo mostrara un listado de todos los registros de la clase relacionada, solo para activar los campos que utilizaremos en nuestro registro de formulario, es muy importante destacar que en este widget no es posible crear o editar un registro.
many2many_tags widget
Ejemplo:
<field name="campo_many2many
" widget="many2many_checkboxes"/>

many2many_kanban widget

El widget many2many_kanban  te permite tener una vista de tipo kanban en cada uno de los registros insertados en nuestro Formulario.
many2many_kanban widget
Ejemplo:
<field name="campo_many2many" widget="many2many_kanban">
<kanban>
<field name="name"/>
<templates>
<t t-name="kanban-box">
<field name="name"/>
</t>
</templates>
</kanban>
</field>

x2many_counter widget

Este widget te muestra un conteo de todos los registros disponibles en la tabla o modelo relacionado, este widget tambien se puede utilizar en campos one2many.
x2many_counter widget
Ejemplo
<field name="campo_many2many" widget="x2many_counter" string="things"/>

many2many_binary widget

Este Widget te permite tener un listado de Archivos (ficheros), es exclusivo para campos relacionados con la tabla ir.attachment.
many2many_binary kanban
Ejemplo:
<field name="campo_many2many" widget="many2many_binary" string="Attach a file"/>
Fuente: http://ludwiktrammer.github.io/odoo/form-widgets-many2many-fields-options-odoo.html

lunes, 13 de enero de 2014

Reglas en Odoo (OpenERP) utilizando campos Many2Many y One2Many



Reglas con Campos Many2Many y One2Many


    Durante la creación de Reglas para Grupos en OpenERP en ocasiones tenemos que utilizar  campos many2many ó one2many para comparar que un valor se encuentre dentro de una lista de valores.

    Por ejemplo cuando trabajamos en un entorno MulticompaƱia en OpenERP en ocasiones tenemos errores durante el manejo de Modelos que tengan Acceso a campos que utilicen la campos con referencia a compaƱƭa, por ejemplo si queremos la comprobación de que un elemento se encuentra dentro de una lista ó que un campo compaƱia se encuentre dentro del campo company_ids que se encuentra en Usuarios y que contiene una lista de compaƱias a las cuales el usuario puede tener acceso, tendrĆ­amos que agregar en la creación de regla el dominio siguiente:

[('company_id','in',[x.id for x in user.company_ids])]

 - company_id: Es el campo que encuentra en el modelo OpenERP al cual quiero ligar con mi regla.

 - in: Es el la palabra reservada para comparar que un elemento se encuentra dentro de una lista.

 - [x.id for x in user.company_ids]: En esta linea  utilizamos un poco de código Python para crear una lista con los valores para la comparación de mi dominio, x.id es el valor obtenido de un ciclo for utilizando una variable x para la iterar dentro de el campo user.company_ids que contiene la relación many2many con el modelo de compaƱia. Al Final nos quedarĆ­a en ejecución algo como lo siguiente [('10','in',[1,5,15,10,25,35,2])], esto da como resultado True o False depensiendo si el valor 10 se encuentra dentro de los valores 1, 5, 15, 10, 25, 35, 2. A este proceso se le conoce en Python como Listas de Comprensión 


jueves, 9 de enero de 2014

Manejo de Campos many2many en Odoo (OPENERP)

Manejo de Campos many2many 



    En OPENERP es muy comĆŗn que encontrĆ”semos en el código de algunos módulos la utilización de campos relacionales may2many, los cuales contienen la siguiente sintaxis:

(0, 0, { fields }) Crear nuevos registros con la lista de campos.
(1, ID, { fields }) Modificar la lista de campos.
(2, ID) Borrar un id de la relación many2many.
(3, ID) Quitar (desvincular) un id de la relación manay2many.
(4, ID) Vincular un id
(5, ID) Desvincular todas las veces que aparece un id
(6,?, IDS) Establecer una lista de enlaces

    Por ejemplo para enlazar los impuestos de un producto al crear una linea en pedidos de venta o en lineas de factura nuestros valores quedarĆ­an de la siguiente manera:

pedido_padre_id = 65
product_obj = self.pool.get('product.product')
product_id = product_obj.search(cr, uid, [('name','=','Soda 2.5 Litros')])
product_browse = product_obj.browse(cr, uid, product_id, context=None)[0]

 linea_venta = {
                'product_id'           :  product_browse.id,
                'product_uom_qty' :  1,
                'product_uom'     : product_browse.uom_id.id,
                'product_uos_qty' : 1,
                'price_unit'          : product_browse.list_price,
                'name'                 : product_browse.name,
                'type'                   : 'make_to_stock',
                'default_code'      : product_browse.default_code,
                'tax_id'                : [(6, 0, [x.id for x in line.product_id.taxes_id])],
                'order_id'             :  pedido_padre_id,
            })

 order_line_id = self.pool.get('sale.order.line').create(cr, uid, linea_venta, context=None)

   Que pasa en este ejemplo estoy creando una linea para el pedido de venta con el ID 65 en la cual estoy pasando la información del producto 'Soda de 2.5 Litros' hacia mi linea, el punto mas importante en este ejemplo ó la que estamos estudiando es  'tax_id' : [(6, 0, [x.id for x in line.product_id.taxes_id])], que estamos haciendo en esta parte del código, estamos enlazando los impuestos del producto anterior en mi linea de pedido, Ć©sto nos evita que nosotros realicemos la creación de cada impuesto al momento de mandar cada linea a un pedido de venta.