ODOO 8 – Ajout d’un « smart button »

Les "smart button" sont apparus avec la version 8.
Exemple sur le formulaire "client"

Nous allons créer un "smart button" spécifique affichant le nombre de bons de livraison en lien avec un client.

- créer un nouveau module dans /addons, appelé ici mysbdelivery avec l'arborescence suivante :

- créer le fichier __init__.py :
import mysbdelivery

- créer le fichier __openerp__.py :
{
'name': 'PMA smart button delivery',
'version': '1.0.0',
'category': '',
'sequence': 1,
'author': 'PMA',
'summary': 'smart button delivery',
'description': "",
'depends': ['sale'],
'data': ['mysbdelivery.xml'],
'js': [],
'qweb': [],
'css':[],
'installable': True,
'application': False,
'auto_install': False,
}

- créer le fichier mysbdelivery.py :
from openerp.osv import fields,osv

class res_partner(osv.osv):
    _inherit = 'res.partner'

    def _delivery_count(self, cr, uid, ids, field_name, arg, context=None):
        res = dict(map(lambda x: (x,0), ids))

        try:
            for partner in self.browse(cr, uid, ids, context):
                res[partner.id] = len(partner.delivery_ids)
        except:
            pass
        return res

    _columns = {
        'delivery_count': fields.function(_delivery_count, string='# of Delivery Order', type='integer'),
        'delivery_ids': fields.one2many('stock.move','partner_id','Delivery Order')
    }

- créer le fichier mysbdelivery.xml :
<?xml version="1.0"?>
<openerp>
    <data>

        <record id="act_res_partner_2_stock_move" model="ir.actions.act_window">
            <field name="name">Delivery</field>
            <field name="res_model">stock.move</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form,graph</field>
            <field name="context">{'search_default_partner_id': active_id}</field>
        </record>

        <record id="mysbdelivery_view_buttons" model="ir.ui.view">
            <field name="name">mysbdelivery.view.buttons</field>
            <field name="model">res.partner</field>
            <field name="inherit_id" ref="base.view_partner_form" />
            <field name="priority" eval="20"/>
            <field name="arch" type="xml">
                <xpath expr="//div[@name='buttons']" position="inside">
                    <button class="oe_inline oe_stat_button" type="action" name="%(act_res_partner_2_stock_move)d"
                        attrs="{'invisible': [('customer', '=', False)]}"
                        icon="fa-book">
                        <field string="Delivery" name="delivery_count" widget="statinfo"/>
                    </button>    
                </xpath>
            </field>
        </record>

    </data>
</openerp>

- Une fois, ce module installé, un nouveau smart button "delivery" s'affiche

- Pour finaliser proprement l'exercice, il resterait à :

  • utiliser les nouvelles API v8
  • trouver une icône plus adaptée
  • réaliser la traduction (fichier fr.po) ... du terme "delivery"

3 réflexions au sujet de « ODOO 8 – Ajout d’un « smart button » »

  1. Bonjour j'aurais voulu savoir si vous auriez une idée ou quelques pistes de comment faire un smart button vers la fiche d'un client. Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *