Pour montrer comment modifier par héritage, un script javascript existant, je vais prendre l'exemple suivant :
- comme cela est fait en mode "debug", afficher systématiquement, le nom de la base de données à droite du nom d'utilisateur
Pour cela, je vais partir du code inclus dans le fichier addons/web/static/src/js/chrome.js et mon objectif est de modifier par héritage la fonction "do_update" de "instance.web.UserMenu" (ligne 1025).
- créer un nouveau module dans /addons, appelé ici mydisplaydb avec l'arborescence suivante :
- laisser le fichier __init__.py vide
- créer le fichier __openerp__.py
{
'name': 'PMA Display DB Name',
'version': '1.0.0',
'category': '',
'sequence': 1,
'author': 'PMA',
'summary': 'Display DB Name',
'description': "",
'depends': ["web"],
'data': ['mydisplaydb.xml'],
'js': [],
'qweb': [],
'css':[],
'installable': True,
'application': False,
'auto_install': False,
}
- créer le fichier mydisplaydb.xml , ce qui va permettre d'inclure le nouveau script js dans l'asset bundle et ainsi de le charger dans le navigateur :
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="assets_backend" name="mydisplaydb" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/mydisplaydb/static/src/js/mydisplaydb.js"></script>
</xpath>
</template>
</data>
</openerp>
- créer le fichier mydisplaydb.js : mise en commentaire de la ligne " if(instance.session.debug)" dans la fonction "do_update" :
openerp.mydisplaydb = function (instance) {
instance.web.UserMenu.include({
do_update: function () {
var self = this;
var fct = function() {
var $avatar = self.$el.find('.oe_topbar_avatar');
$avatar.attr('src', $avatar.data('default-src'));
if (!self.session.uid)
return;
var func = new instance.web.Model("res.users").get_func("read");
return self.alive(func(self.session.uid, ["name", "company_id"])).then(function(res) {
var topbar_name = res.name;
/*
if(instance.session.debug)
*/
topbar_name = _.str.sprintf("%s (%s)", topbar_name, instance.session.db);
if(res.company_id[0] > 1)
topbar_name = _.str.sprintf("%s (%s)", topbar_name, res.company_id[1]);
self.$el.find('.oe_topbar_name').text(topbar_name);
if (!instance.session.debug) {
topbar_name = _.str.sprintf("%s (%s)", topbar_name, instance.session.db);
}
var avatar_src = self.session.url('/web/binary/image', {model:'res.users', field: 'image_small', id: self.session.uid});
$avatar.attr('src', avatar_src);
openerp.web.bus.trigger('resize'); // Re-trigger the reflow logic
});
};
this.update_promise = this.update_promise.then(fct, fct);
}
});
}
- Une fois, ce module installé, le nom de la base s'affiche comme désiré
svp je veux ajouter un script qui permet de convertir le montant d'un facture à des lettres et je n'arrive pas à résoudre le problème
I truly appreciate this post. I’ve been looking all over for this! Thank goodness I found it on Bing. You’ve made my day! Thanks again! dbgdkbdkaabe