IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ Odoo / OpenERPConsultez toutes les FAQ

Nombre d'auteurs : 2, nombre de questions : 39, dernière mise à jour : 25 décembre 2014 

 
OuvrirSommaireDéveloppement de modules

Pour ajouter des chemins vers un répertoire supplémentaire, éditez le fichier de configuration du serveur d'OpenERP : openerp-server.conf et ajoutez les chemins complets en les séparant par des virgules :

 
Sélectionnez
addons_path = /opt/openerp/addons,/openerp/addons,/autre/chemin/openerp/addons

Pour retrouver facilement vos modules, créez un dossier "openerp" dans le répertoire de votre choix, puis créez un dossier "addons".
Changez ensuite le groupe des dossiers openerp + addons pour "openerp".
Changez également le propriétaire des dossiers pour "openerp".
Redémarrez ensuite le serveur OpenERP.

Mis à jour le 4 juin 2013  par Thierry Godin

Encore un problème que l'on rencontre souvent sur le Web.
Vous venez de terminer votre Super-Module, vous l'avez placé sur le serveur en suivant bien les instructions, mais il refuse de se montrer !

  • Tout d'abord, assurez-vous d'avoir bien ajouté le chemin vers votre répertoire qui contient vos modules additionnels dans le fichier de configuration du serveur.
  • Vous devez ensuite redémarrer le serveur OpenERP.
  • Connectez-vous à OpenERP en tant qu'administrateur de la base de données que vous gérez.
  • Cliquez sur le menu "Configuration" dans la barre de menu du haut.
  • Cliquez sur "Mettre à jour la liste des modules" dans la rubrique "Modules".
  • Cliquez ensuite sur "Modules installés".
  • Dans la barre de recherche en haut à droite, supprimez le filtre «Installé».
  • Puis entrez le nom ou une partie du nom de votre module, il devrait finalement apparaître.

Si vous cliquez sur "Applications" dans la rubrique des modules, vous ne le verrez pas, même si vous supprimez les filtres dans la barre de recherche. Il semblerait qu'OpenERP ne reconnaisse pas votre module comme une application.

Mis à jour le 4 juin 2013  par Thierry Godin

Pour appeler une fonction Python depuis JavaScript, vous pouvez utiliser la fonction get_func().

get_func()
Sélectionnez
new instance.web.Model('model')).get_func('py_function')([parameters])

Où :

  • model : le nom de la table dans la base de données;
  • py_function : le nom de la fonction Python à appeler;
  • parameters : les paramètres à passer à la fonction;

Vous devez écrire le nom de la table en remplaçant le signe underscore _ par le point . :
Exemple : remplacer pos_order par pos.order, product_product par product.product, etc.

Voici un exemple extrait du module Point Of Sale (Point De Vente) lors de la validation de la commande :

get_func()
Sélectionnez
(new instance.web.Model('pos.order')).get_func('create_from_ui')([order])
    .fail(function(unused, event){
        //don't show error popup if it fails 
        event.preventDefault();
        console.error('Failed to send order:',order);
        self._flush(index+1);
    })
    .done(function(){
        //remove from db if success
        self.db.remove_order(order.id);
        self._flush(index);
    });

Ici, on envoit les commandes à la fonction create_from_ui() qui se trouve dans le fichier point_of_sale.py du module.
En cas de succès, on supprime les commandes de la base de données du Point De Vente (puisqu'elles ont été envoyées à OpenERP), et en cas d'échec un message sera affiché dans la console JavaScript.

Créé le 25 novembre 2013  par Thierry Godin

Pour appeler une fonction Python depuis JavaScript, vous pouvez utiliser la fonction call().

call()
Sélectionnez
new instance.web.Model('model')).call('py_function', [parameters], ctx)

Où :

  • model : le nom de la table dans la base de données;
  • py_function : le nom de la fonction Python à appeler;
  • parameters : les paramètres à passer à la fonction;
  • ctx : dictionnaire de contexte : {'lang': 'fr_FR'};

Vous devez écrire le nom de la table en remplaçant le signe underscore _ par le point . :
Exemple : remplacer pos_order par pos.order, product_product par product.product, etc.

Voici un exemple qui permet d'appeler la fonction write_partner_from_pos() depuis JavaScript:

call()
Sélectionnez
(new instance.web.Model('res.partner')).call('write_partner_from_pos', [cid, cname, cfirstname, czip, cphone], { shadow:true })
    .fail(function(clientId){
        alert('Error : customer has not been created nor updated');
    })
    .done(function(clientId){
	    // retourne le résultat de la fonction
    });

Ici, on envoit les données du client à la fonction write_partner_from_pos().
En cas d'échec un message sera affiché.

Créé le 25 novembre 2013  par Thierry Godin

Voici une fonction qui vous permettra de récupérer des données de la base de données d'OpenERP depuis JavaScript :

fetch()
Sélectionnez
fetch: function(model, fields, domain, ctx){
    return new instance.web.Model(model).query(fields).filter(domain).context(ctx).all();
},

Où :

  • model : le nom de la table dans la base de données;
  • fields : le nom des champs dans un tableau : ['champ1', 'champ2'];
  • domain : le domaine de la recherche : ['company_id', '=', id];
  • ctx : dictionnaire de contexte : {'lang': 'fr_FR'};
  • all() : retourne tous les enregistrements;
  • first() : retourne le premier enregistrement (à mettre à la place de all());

Astuce :
On aurait pu rajouter également le paramètre limit à la fonction : function(model, fields, domain, ctx, limit)
Avec le paramètre .limit(10) et .all(), la fonction retournerait alors les 10 premiers enregistrements.

Voici un exemple qui permet de récupérer les caissiers du Point De Vente (Voir le module Pos_CashierVoir le module Pos_Cashier) :

Utilisation de fetch()
Sélectionnez
var loaded = self.fetch('pos.cashier',['cashier_name'],[['pos_config_id','=', config_id], ['active', '=','true']])
   .then(function(cashiers){
       // ici le reste du code sera exécuté lorsque les données auront été récupérées
    });

La fonction retourne un tableau d'objets (ici cashiers). Il vous sera ensuite facile de parcourir le tableau pour récupérer les données.

Astuce :
Rajoutez console.log(cashiers) à l'intérieur de la fonction pour voir les objets dans la console JavaScript (avec FirebugFirebug, par exemple).

Créé le 25 novembre 2013  par Thierry Godin

Pour faire apparaîte un message de confirmation lors d'un click sur un bouton dans une vue, il faut simplement rajouter l'attribut "confirm" dans le code XML du bouton :

Message de confirmation
Sélectionnez

<button name="apply_my_function" type="object" confirm="Are you sure you want to apply this function ?" />
Créé le 9 août 2014  par Thierry Godin

Prenons le cas où vous créez votre module et vous voulez que l'utilisateur puisse éditer ou supprimer ses propres enregistrements et qu'il puisse voir les enregistrements des autres utilisateurs en lecture seule

Pour cela, il vous faut créer des règles d'accès dans un fichier XML que vous n'oublierez pas de mentionner dans le fichier __openerp__.py du module. Ce fichier doit comporter deux règles. Une règle globale (pour tous) qui permet de lire les enregistrements, puis une règle qui s'appliquera à l'utilisateur et qui lui permettra d'éditer ou de supprimer ses propres enregistrements:

Règles d'accès
Sélectionnez

        #Règle de lecture pour tous (globale)
        <record id="rule_pos_support_read" model="ir.rule">
            <field name="name">Point Of Sale Support read</field>
            <field name="model_id" ref="model_pos_support" />
            <field eval="1" name="global"/>
            <field eval="0" name="perm_unlink"/>
            <field eval="0" name="perm_write"/>
            <field eval="1" name="perm_read"/>
            <field eval="0" name="perm_create"/>
        </record>

        #règle ecriture pour ses propres objets
        <record id="rule_pos_support" model="ir.rule">
            <field name="name">Point Of Sale Support</field>
            <field name="model_id" ref="model_pos_support" />
            <field name="domain_force">[('create_uid', '=', user.id)]</field>
            <field eval="0" name="global"/>
            <field eval="[(6,0,[ref('point_of_sale.group_pos_manager')])]" name="groups"/>
            <field eval="1" name="perm_unlink"/>
            <field eval="1" name="perm_write"/>
            <field eval="0" name="perm_read"/>
            <field eval="1" name="perm_create"/>
        </record>

Dans le code ci-dessus, il s'agit de règles d'accès pour un module personnel, pos_support.
Il s'agit ici de mettre un champ pour chaque permission:

  • perm_unlink : suppression
  • perm_write : édition
  • perm_read : lecture
  • perm_create : création

Et de les mettre à True (eval="1") ou False (eval="0") selon le cas.

La règle rule_pos_support_read s'appliquera à tous les utilisateurs, elle autorise seulement la lecture.

La règle rule_pos_support autorise la création, l'édition et la suppression seulement pour l'utilisateur qui la créé l'enregistrement, et à condition qu'il soit membre du groupe "Manager" du Point De Vente. Pour cela on a rajouté un champ domain_force pour autoriser seulement l'utilisateur qui a créé l'enregistrement.

Créé le 25 août 2014  par Thierry Godin

Pour qu'un champ many2one n'affiche pas de lien hypertexte dans une vue, il faut rajouter l'option no_open :

many2one sans lien hypertexte
Sélectionnez

<field name="company_id" options="{'no_open': True}" />
Mis à jour le 17 septembre 2014  par Thierry Godin
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.