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"
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
simple et très utile ! merci monsieur
article clair et efficace! merci!