FAQ Odoo / OpenERPConsultez toutes les FAQ
Nombre d'auteurs : 2, nombre de questions : 39, dernière mise à jour : 25 août 2014 Ajouter une question
Cette FAQ a été réalisée pour répondre aux questions concernant le progiciel de gestion intégré Odoo (anciennement OpenERP).
- Comment ajouter des chemins vers des modules?
- J'ai installé un module, mais il n'apparaît pas dans la liste des modules
- Comment appeler une fonction Python depuis JavaScript avec get_func()?
- Comment appeler une fonction Python depuis JavaScript avec call()?
- Comment récupérer des données de la base de données depuis JavaScript?
- Comment faire apparaitre un message de confirmation lors d'un click sur un bouton ?
- Comment permettre à l'utilisateur d'éditer ou supprimer seulement les enregistrements qu'il a créé?
- Comment empêcher qu'un champ many2one s'affiche comme un lien hypertexte dans une vue et l'afficher en texte seulement?
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 :
Code ini : | Sélectionner tout |
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. |
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. |
Pour appeler une fonction Python depuis JavaScript, vous pouvez utiliser la fonction get_func().
Code javascript : | Sélectionner tout |
new instance.web.Model('model')).get_func('py_function')([parameters])
- 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. |
Code javascript : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | (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); }); |
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.
Pour appeler une fonction Python depuis JavaScript, vous pouvez utiliser la fonction call().
Code javascript : | Sélectionner tout |
new instance.web.Model('model')).call('py_function', [parameters], ctx)
- 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. |
Code javascript : | Sélectionner tout |
1 2 3 4 5 6 7 | (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 }); |
En cas d'échec un message sera affiché.
Voici une fonction qui vous permettra de récupérer des données de la base de données d'OpenERP depuis JavaScript :
Code javascript : | Sélectionner tout |
1 2 3 | fetch: function(model, fields, domain, ctx){ return new instance.web.Model(model).query(fields).filter(domain).context(ctx).all(); }, |
- 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. |
Code javascript : | Sélectionner tout |
1 2 3 4 | 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 }); |
Astuce : Rajoutez console.log(cashiers) à l'intérieur de la fonction pour voir les objets dans la console JavaScript (avec Firebug , par exemple). |
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 :
Code XML : | Sélectionner tout |
<button name="apply_my_function" type="object" confirm="Are you sure you want to apply this function ?" />
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:
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #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> |
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.
Pour qu'un champ many2one n'affiche pas de lien hypertexte dans une vue, il faut rajouter l'option no_open :
Code xml : | Sélectionner tout |
<field name="company_id" options="{'no_open': True}" />
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes 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 © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.