Skip to content
Israel Lugo edited this page Apr 15, 2017 · 10 revisions

Welcome to the cash_box wiki!

Como cambiar lo que aparece en el broadcrumbs cuando se ve o edita un modelo?

Se debe agregar el atributo _rec_name al modelo este llevara por valor el nombre de otro atributo del modelo que es lo que se va a mostrar.

Como crear los archivos de control de restricciones y seguridad de grupos en odoo 10

PASO 1: Se creara 2 archivos en la carpeta MY_MODULE/security/ si no existe la carpeta créala.

NOTA: si usaste el scaffold de odoo 10 para crear tu modulo esta carpeta estará creada con un archivo dentro.

El primer archivo se llama ir.model.access.csv, este es un archivo csv que lleva esta estructura

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink

  • id => hace referencia al id de la restricción que se esta creando
  • name => hace referencia al nombre de la restricción.
  • model_id:id => hace referencia al name del modelo, ojo este debe comenzar el nombre con la palabra 'model'
  • group_id:id => hace refecencia al id que se le dara a la restriccion-grupo, este id es el que sera usado para aplicar las restricciones a la vista, mas adelante se observara.
  • perm_read => hace referencia a la permisologia de leer, su valor puede ser 0 o 1
  • perm_write => hace referencia a la permisologia de escribir, su valor puede ser 0 o 1
  • perm_create => hace referencia a la permisologia de crear, su valor puede ser 0 o 1
  • perm_unlink => hace referencia a la permisologia de eliminar, su valor puede ser 0 o 1

Como añadir un Custom button en el header de un list view (tree)?

PASO 1: El primer paso sera crear un archivo xml (qweb) que va a contener el boton, este ira en la siguiente ubicacion static/src/xml/custom_button.xml su contenido sera el siguiente

<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-extend="ListView.buttons">
    <t t-jquery="button.o_list_button_add" t-operation="after">
        <t t-if="widget.model=='my_module.my_model'">
            <button class="btn btn-primary btn-large" id="custom_btn" name='custom_button' type="button">Custom Button</button>
        </t>
    </t>
</t>
</templates>

Explicación:

  • t-extend="ListView.buttons" => esto extiende al widget ListView, que es donde vamos a insertar nuestro boton
  • t-jquery="button.o_list_button_add" t-operation="after" => esto hace referencia a la accion que vamos a realizar dentro del widget, aqui estamos indicando que nuestro boton se va a posicionar despues del boton Crear que trae odoo por defecto, NOTA: o_list_button_add esta es la clase del boton crear por defecto, esta clase debe ser escrita exactamente o si no, no mostrara el boton. Tambien podemos remplazar el boton crear que trae odoo por defecto solo cambiado el valor de t-operation por "replace"
  • t-if="widget.model=='my_module.my_model'" => ese sera el condicional que hara la magia para que solo el boton aparezca en el modelo que se desee

PASO 2: Agregar el archivo qweb al manifest para que lo reconozca. esta es la linea que colocaremos

'qweb': ['static/src/xml/custom_button.xml'],

Listo ya tenemos un nuevo boton en nuestro header del list view.

Ahora te preguntaras como le agregas una accion al boton? hay que realizar un par de cosas para agregarle accion al boton, las acciones se agregan por medio de javascript al boton.

PASO 3: Crear un archivo js, que guardaremos en la siguiente ubicacion static/src/js/custom_button_actions.js contendra la siguiente informacion.

openerp.my_module = function (instance, local) {
var QWeb = openerp.web.qweb;
var _t = instance.web._t;
var self = this;

instance.web.ListView.include({
    render_buttons: function () {
        var self = this;
        var add_button = false;
        if (!this.$buttons) { // Ensures that this is only done once
            add_button = true;
        }
        this._super.apply(this, arguments); // Sets this.$buttons
        if (add_button) {
            this.$buttons.find('#custom_btn').click(this.proxy('my_accion'));
        }
    },
    my_accion: function () {
        var self = this;
        alert("presionado el boton");
    }
});
};

explicación:

  • this.$buttons.find('#custom_btn').click(this.proxy('my_accion')); => con esta linea obtenemos el boton y le agregamos la accion que seria la funcion declarada "my_accion", se debe tener en cuenta que estamos obteniendo el boton por medio del id que fue declarado en la vista qweb. la función this.proxy buscara la funcion que le asignaremos al evento. En la función my_accion declararemos toda la logia que hará el boton al presionarlo.

PASO 4: Crear otro archivo xml el que contendrá la importación del archivo creado anteriormente, para que odoo pueda reconocerlo. este archivo lo ubicaremos en la carpeta views del modulo siempre se acostumbra a ponerle como nombre a este archivo el nombre del modulo con la extension. views/my_module.xml, va a contener las siguiente lineas.

<?xml version="1.0" encoding="utf-8"?>

<openerp>
<data>
    <template id="assets_backend" name="project assets" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <script type="text/javascript" src="/my_module/static/src/js/custom_button_actions.js"></script>
        </xpath>
    </template>
</data>
</openerp>

Con este codigo incluimos el archivo js para que odoo lo cargue directamente. Listo con este tendremos nuestro custom button en el header del list view.