From 7faa4a278bae61146f58bf9df5d0a0b9ca9b7a17 Mon Sep 17 00:00:00 2001 From: Olivier Laurent Date: Mon, 17 Nov 2008 14:44:17 +0100 Subject: [PATCH 01/18] French translations bzr revid: olt@tinyerp.com-20081117134417-jzmcrebr1cztidm5 --- bin/addons/base/i18n/fr_FR.po | 141 ++++++++++++++++++---------------- bin/report/custom.py | 3 +- 2 files changed, 78 insertions(+), 66 deletions(-) diff --git a/bin/addons/base/i18n/fr_FR.po b/bin/addons/base/i18n/fr_FR.po index 4b3419d31c7..9b44dc28807 100644 --- a/bin/addons/base/i18n/fr_FR.po +++ b/bin/addons/base/i18n/fr_FR.po @@ -121,7 +121,7 @@ msgstr "" #. module: base #: selection:ir.actions.todo,state:0 msgid "Skipped" -msgstr "" +msgstr "Omis" #. module: base #, python-format @@ -172,7 +172,7 @@ msgstr "Objet" #. module: base #: view:wizard.module.lang.export:0 msgid "To browse official translations, you can visit this link: " -msgstr "" +msgstr "Pour consulter les traductions officielles, vous pouvez visiter ce lien :" #. module: base #: model:ir.actions.act_window,name:base.action_module_category_tree @@ -188,7 +188,7 @@ msgstr "" #. module: base #: selection:ir.actions.todo,state:0 msgid "Not Started" -msgstr "" +msgstr "Pas commencé" #. module: base #: selection:ir.ui.menu,icon:0 @@ -248,7 +248,7 @@ msgstr "Avoir le Max" #. module: base #: view:ir.module.module:0 msgid "Created Views" -msgstr "" +msgstr "Vues créées" #. module: base #: selection:res.request,priority:0 @@ -275,7 +275,7 @@ msgstr "Importer une nouvelle langue" #: wizard_field:server.action.create,step_1,report:0 #: wizard_view:server.action.create,step_1:0 msgid "Select Report" -msgstr "" +msgstr "Sélectionnez le rapport" #. module: base #: field:ir.report.custom.fields,fc1_condition:0 @@ -297,7 +297,7 @@ msgstr "Grouper par" #. module: base #: view:ir.actions.server:0 msgid "Field Mapping" -msgstr "" +msgstr "Association de Champs" #. module: base #: field:ir.sequence,suffix:0 @@ -344,7 +344,7 @@ msgstr "Activités" #. module: base #: field:ir.actions.todo,start_on:0 msgid "Start On" -msgstr "" +msgstr "Débuté le" #. module: base #: rml:ir.module.reference:0 @@ -446,7 +446,7 @@ msgstr "Autre propriétaire" #. module: base #: field:ir.actions.server,address:0 msgid "Email / Mobile" -msgstr "" +msgstr "E-mail / Mobile" #. module: base #: field:res.partner,comment:0 @@ -495,6 +495,8 @@ msgstr "Impossible de définir la colonne %s. Mot clé réservé !" #: help:ir.ui.menu,groups_id:0 msgid "If you put groups, the visibility of this menu will be based on these groups. If this field is empty, Open ERP will compute visibility based on the related object's read access." msgstr "" +"Si vous ajoutez des groupes, la visibilité de ce menu sera basée sur ces groupes. Si ce champ reste " +"vide, Open ERP calculera la visibilité en se basant sur l'accès en lecture des objets concernés." #. module: base #: field:workflow.transition,act_to:0 @@ -504,7 +506,7 @@ msgstr "Activité de Destination" #. module: base #: model:res.partner.category,name:base.res_partner_category_10 msgid "Open Source Service Company" -msgstr "" +msgstr "Société de Service Open Source" #. module: base #: view:ir.actions.server:0 @@ -812,7 +814,7 @@ msgstr "" #: wizard_field:server.action.create,init,type:0 #: wizard_view:server.action.create,init:0 msgid "Select Action Type" -msgstr "" +msgstr "Sélectionnez le Type d'Action" #. module: base #, python-format @@ -830,7 +832,7 @@ msgstr "Devises" #. module: base #: selection:ir.actions.todo,type:0 msgid "Configure" -msgstr "" +msgstr "Configuration" #. module: base #: help:res.partner,lang:0 @@ -892,7 +894,7 @@ msgstr "Réf. ID" #. module: base #: help:res.partner.address,active:0 msgid "Uncheck the active field to hide the contact." -msgstr "" +msgstr "Désélectionnez le champ actif pour cacher ce contact." #. module: base #: model:ir.ui.menu,name:base.next_id_10 @@ -980,7 +982,7 @@ msgstr "historique des Requêtes" #. module: base #: view:res.users:0 msgid "Roles are used to defined available actions, provided by workflows." -msgstr "" +msgstr "Les Rôles sont utilisés pour définir les actions possibles, fournies par les workflows." #. module: base #: selection:ir.ui.menu,icon:0 @@ -997,7 +999,7 @@ msgstr "Évènements Partenaire" #. module: base #: field:ir.actions.todo,note:0 msgid "Text" -msgstr "" +msgstr "Texte" #. module: base #: selection:ir.ui.menu,icon:0 @@ -1282,7 +1284,7 @@ msgstr "Modèle" #, python-format #: code:addons/base/module/module.py:0 msgid "You try to install a module that depends on the module: %s.\nBut this module is not available in your system." -msgstr "" +msgstr "Vous essayez d'installer un module qui dépend du module : %s.\nMais ce module n'est pas disponible sur votre système." #. module: base #: wizard_field:res.partner.spam_send,init,text:0 @@ -1375,7 +1377,7 @@ msgstr "Position inconnue dans la vue héritée %s !" #. module: base #: view:res.users:0 msgid "Add User" -msgstr "" +msgstr "Ajouter un Utilisateur" #. module: base #: field:res.request,trigger_date:0 @@ -1485,7 +1487,7 @@ msgstr "Envoyer un E-mail" #. module: base #: model:res.partner.category,name:base.res_partner_category_4 msgid "Basic Partner" -msgstr "" +msgstr "Partenaire de Base" #. module: base #: selection:ir.ui.menu,icon:0 @@ -1534,7 +1536,7 @@ msgstr "" #, python-format #: code:addons/base/module/module.py:0 msgid "Can not create the module file:\n %s" -msgstr "" +msgstr "Imossible de créer le fichier du module :\n %s" #. module: base #: model:ir.actions.act_window,name:base.action_workflow_form @@ -1651,7 +1653,7 @@ msgstr "Le chemin vers le fichier .rml ou NULL si le contenu se trouve dans 'rep #. module: base #: view:res.users:0 msgid "Skip" -msgstr "" +msgstr "Passer" #. module: base #: model:ir.actions.act_window,name:base.act_menu_create @@ -1716,7 +1718,7 @@ msgstr "Détaillant" #. module: base #: wizard_button:server.action.create,init,step_1:0 msgid "Next" -msgstr "" +msgstr "Suivant" #. module: base #: model:ir.ui.menu,name:base.next_id_11 @@ -1757,7 +1759,7 @@ msgstr "Type" #. module: base #: view:ir.module.module:0 msgid "Defined Reports" -msgstr "" +msgstr "Rapports définis" #. module: base #: field:workflow.transition,act_from:0 @@ -1772,7 +1774,7 @@ msgstr "" #. module: base #: model:res.partner.category,name:base.res_partner_category_9 msgid "Components Supplier" -msgstr "" +msgstr "Fournisseur de Composants" #. module: base #: view:ir.rule.group:0 @@ -1820,6 +1822,8 @@ msgstr "" #: help:res.partner,supplier:0 msgid "Check this box if the partner if a supplier. If it's not checked, purchase people will not see it when encoding a purchase order." msgstr "" +"Cochez cette case si le partenaire est un fournisseur. Si elle n'est pas cochée, les responsables " +"de l'achat ne la verront pas lorsqu'ils encoderont une commande d'achat. " #. module: base #: selection:ir.model.fields,select_level:0 @@ -1845,7 +1849,7 @@ msgstr "" #, python-format #: code:report/report_sxw.py:0 msgid "print" -msgstr "" +msgstr "imprimer" #. module: base #, python-format @@ -1914,7 +1918,7 @@ msgstr "" #. module: base #: selection:ir.actions.todo,start_on:0 msgid "At Once" -msgstr "" +msgstr "n une fois" #. module: base #: model:ir.ui.menu,name:base.menu_security @@ -2012,7 +2016,7 @@ msgstr "Nom du canal" #. module: base #: view:ir.actions.configuration.wizard:0 msgid "Continue" -msgstr "" +msgstr "Continuer" #. module: base #: selection:res.config.view,view:0 @@ -2301,7 +2305,7 @@ msgstr "Code" #. module: base #: view:ir.module.module:0 msgid "Features" -msgstr "" +msgstr "Fonctionnalités" #. module: base #: selection:ir.ui.menu,icon:0 @@ -2446,7 +2450,7 @@ msgstr "Chemin vers le RML" #. module: base #: field:ir.actions.configuration.wizard,item_id:0 msgid "Next Configuration Wizard" -msgstr "" +msgstr "Prochain Assistant de Configuration" #. module: base #: field:workflow.workitem,inst_id:0 @@ -2579,7 +2583,7 @@ msgstr "Cumul" #. module: base #: model:res.partner.category,name:base.res_partner_category_14 msgid "Bad customers" -msgstr "" +msgstr "Mauvais Clients" #. module: base #: model:ir.model,name:base.model_res_lang @@ -2644,7 +2648,7 @@ msgstr "" #. module: base #: field:ir.module.module,reports_by_module:0 msgid "Reports" -msgstr "" +msgstr "Rapports" #. module: base #: field:workflow,on_create:0 @@ -2763,7 +2767,7 @@ msgstr "" #: model:ir.actions.wizard,name:base.wizard_lang_install #: model:ir.ui.menu,name:base.menu_wizard_lang_install msgid "Reload an Official Translation" -msgstr "" +msgstr "Recharger une Traduction Officielle" #. module: base #: model:ir.model,name:base.model_res_request_link @@ -3046,7 +3050,7 @@ msgstr "Aide" #, python-format #: code:addons/base/module/module.py:0 msgid "Some installed modules depends on the module you plan to desinstall :\n %s" -msgstr "" +msgstr "Quelques modules installés dépendent du module que vous voulez désinstaller :\n %s" #. module: base #: model:ir.actions.act_window,name:base.res_request_link-act @@ -3124,7 +3128,7 @@ msgstr "Nom du déclencheur" #. module: base #: wizard_button:server.action.create,step_1,create:0 msgid "Create" -msgstr "" +msgstr "Créer" #. module: base #, python-format @@ -3166,12 +3170,12 @@ msgstr "Source" #: model:ir.actions.act_window,name:base.action_partner_title_contact #: model:ir.ui.menu,name:base.menu_partner_title_contact msgid "Contacts Titles" -msgstr "" +msgstr "Titres de Contacts" #. module: base #: help:res.partner.address,partner_id:0 msgid "Keep empty for a private address, not related to partner." -msgstr "" +msgstr "Laisser vide pour une adresse privée, non associée au partenaire." #. module: base #: selection:ir.translation,type:0 @@ -3307,7 +3311,7 @@ msgstr "Les Arbres peuvent uniquement utilisés dans les rapports tabulaires" #. module: base #: selection:ir.actions.todo,start_on:0 msgid "Manual" -msgstr "" +msgstr "Manuel" #. module: base #: view:res.partner.bank:0 @@ -3325,7 +3329,7 @@ msgstr "Arbre" #. module: base #: model:res.partner.category,name:base.res_partner_category_12 msgid "Segmentation" -msgstr "" +msgstr "Segmentation" #. module: base #: selection:ir.ui.menu,icon:0 @@ -3361,7 +3365,7 @@ msgstr "Champ Personalisé" #. module: base #: field:ir.model.fields,relation_field:0 msgid "Relation Field" -msgstr "" +msgstr "Champ Relation" #. module: base #, python-format @@ -3412,7 +3416,7 @@ msgstr "Règles" #: model:ir.actions.act_window,name:base.action_partner_title #: model:ir.ui.menu,name:base.menu_partner_title msgid "Titles" -msgstr "" +msgstr "Titres" #. module: base #: wizard_view:module.upgrade,start:0 @@ -3440,7 +3444,7 @@ msgstr "pdf" #. module: base #: field:ir.actions.todo,start_date:0 msgid "Start Date" -msgstr "" +msgstr "Date de Début" #. module: base #: model:ir.actions.act_window,name:base.action_partner_address_form @@ -3468,12 +3472,14 @@ msgstr "" #. module: base #: model:res.partner.category,name:base.res_partner_category_11 msgid "Textile Suppliers" -msgstr "" +msgstr "Fournisseurs de Textile" #. module: base #: view:wizard.module.lang.export:0 msgid "The official translations pack of all OpenERP/OpenObjects module are managed through launchpad. We use their online interface to synchronize all translations efforts." msgstr "" +"Les paquets de traductions officiels de tous les module Open ERP/Open Objets sont gérés " +"par Launchpad. Nous utilisons l'interface en ligne pour synchronizer tous les efforts de Traduction." #. module: base #: model:ir.actions.act_window,name:base.grant_menu_access @@ -3495,7 +3501,7 @@ msgstr "Nouvelle fenêtre" #. module: base #: help:res.partner,customer:0 msgid "Check this box if the partner if a customer." -msgstr "" +msgstr "Cochez cette case si le partenaire est un client." #. module: base #, python-format @@ -3532,7 +3538,7 @@ msgstr "Nombre de modules mis à jour" #. module: base #: view:ir.actions.configuration.wizard:0 msgid "Skip Step" -msgstr "" +msgstr "Passer cette étape" #. module: base #: model:ir.actions.act_window,name:base.act_res_partner_event @@ -3568,12 +3574,12 @@ msgstr "Évènements Actifs des Partenaires" #, python-format #: code:osv/orm.py:0 msgid "Error occured while validating the field(s) %s: %s" -msgstr "" +msgstr "Une erreur est survenue pendant la validation du(des) champ(s) %s: %s" #. module: base #: view:res.users:0 msgid "Define New Users" -msgstr "" +msgstr "Définir de Nouveaux Utilisateurs" #. module: base #: model:ir.actions.act_window,name:base.action_rule @@ -3649,7 +3655,7 @@ msgstr "Actif" #. module: base #: view:ir.module.module:0 msgid "Created Menus" -msgstr "" +msgstr "Menus Créés" #. module: base #: field:ir.ui.view.custom,ref_id:0 @@ -3810,7 +3816,7 @@ msgstr "" #. module: base #: selection:ir.actions.todo,state:0 msgid "Done" -msgstr "" +msgstr "Terminé" #. module: base #: field:ir.actions.server,trigger_obj_id:0 @@ -3886,7 +3892,7 @@ msgstr "Module :" #. module: base #: field:ir.actions.configuration.wizard,name:0 msgid "Next Wizard" -msgstr "" +msgstr "Assistant Suivant" #. module: base #: selection:ir.rule,operator:0 @@ -3909,7 +3915,7 @@ msgstr "<=" #. module: base #: view:wizard.module.lang.export:0 msgid "Export Data" -msgstr "" +msgstr "Exporter les Données" #. module: base #: field:workflow.triggers,instance_id:0 @@ -3949,7 +3955,7 @@ msgstr "Champ Enfant" #. module: base #: view:wizard.module.lang.export:0 msgid "https://translations.launchpad.net/openobject" -msgstr "" +msgstr "https://translations.launchpad.net/openobject" #. module: base #: selection:ir.ui.menu,icon:0 @@ -3986,7 +3992,7 @@ msgstr "Autres Actions" #: model:ir.actions.wizard,name:base.wizard_server_action_create #: view:ir.actions.server:0 msgid "Create Action" -msgstr "" +msgstr "Créer l'Action" #. module: base #: model:ir.model,name:base.model_workflow_workitem @@ -4062,7 +4068,7 @@ msgstr "Menu fils" #. module: base #: field:ir.actions.todo,end_date:0 msgid "End Date" -msgstr "" +msgstr "Date de Fin" #. module: base #: field:ir.exports,resource:0 @@ -4275,7 +4281,7 @@ msgstr "" #. module: base #: selection:ir.actions.todo,type:0 msgid "Service" -msgstr "" +msgstr "Service" #. module: base #: help:ir.actions.act_window,auto_refresh:0 @@ -4290,7 +4296,7 @@ msgstr "Fichier" #. module: base #: field:ir.model,access_ids:0 msgid "Access" -msgstr "" +msgstr "Accès" #. module: base #: selection:ir.ui.menu,icon:0 @@ -4327,7 +4333,7 @@ msgstr "Fax" #. module: base #: view:res.users:0 msgid "Groups are used to defined access rights on each screen and menu." -msgstr "" +msgstr "Les Groupes sont utilisés pour définir les droits d'accès sur chaque écran et menu." #. module: base #: model:ir.actions.act_window,name:base.action_workflow_workitem_form @@ -4343,8 +4349,8 @@ msgstr "" #. module: base #, python-format #: code:report/custom.py:0 -msgid "The sum of the data (2nd field) is null.\nWe can draw a pie chart !" -msgstr "" +msgid "The sum of the data (2nd field) is null.\nWe can't draw a pie chart !" +msgstr "La somme des données (2ème champ) est nulle.\nImpossible de générer un Graphique en Camembert" #. module: base #: field:ir.default,company_id:0 @@ -4447,7 +4453,7 @@ msgstr "Ou" #. module: base #: model:res.partner.category,name:base.res_partner_category_7 msgid "Openstuff.net" -msgstr "" +msgstr "Openstuff.net" #. module: base #: model:ir.model,name:base.model_ir_rule_group @@ -4596,7 +4602,7 @@ msgstr "Imprimé:" #, python-format #: code:addons/base/module/module.py:0 msgid "Can not upgrade module '%s'. It is not installed." -msgstr "" +msgstr "Impossoble de mettre à jour le module '%s'. Il n'est pas installé." #. module: base #, python-format @@ -4701,7 +4707,7 @@ msgstr "Le Champ %d doit être une image" #: selection:ir.ui.view,type:0 #: selection:wizard.ir.model.menu.create.line,view_type:0 msgid "Gantt" -msgstr "" +msgstr "Gantt" #. module: base #, python-format @@ -4728,7 +4734,7 @@ msgstr "Type de compte bancaire" #. module: base #: view:ir.actions.configuration.wizard:0 msgid "Next Configuration Step" -msgstr "" +msgstr "Prochaine Étape de la Configuration" #. module: base #: selection:ir.ui.menu,icon:0 @@ -4766,6 +4772,8 @@ msgstr "Description courte" #: help:ir.actions.report.xml,attachment:0 msgid "This is the prefix of the file name the print will be saved as attachement. Keep empty to not save the printed reports" msgstr "" +"C'est le préfixe du nom du fichier sous lequel l'impression sera sauvegardée " +"en pièce jointe. Laisser vide pour ne pas Sauvegarder les rapports imprimés." #. module: base #: field:res.country.state,name:0 @@ -4814,6 +4822,9 @@ msgstr "" #: view:wizard.module.lang.export:0 msgid "To improve some terms of the official translations of OpenERP, you should modify the terms directly on the launchpad interface. If you made lots of translations for your own module, you can also publish all your translation at once." msgstr "" +"Pour améliorer certains termes de la traduction officielle d'Open ERP, vous devez " +"modifier les termes directement dans l'interface de Launchpad. Si vous avez effectué " +"beaucoup de traductions pour votre module, vous pouvez aussi publier toutes les traductions en une fois." #. module: base #: view:res.users:0 @@ -4878,7 +4889,7 @@ msgstr "" #. module: base #: model:res.partner.category,name:base.res_partner_category_2 msgid "OpenERP Partners" -msgstr "" +msgstr "Partenaires OpenERP" #. module: base #: view:res.config.view:0 @@ -4899,7 +4910,7 @@ msgstr "Actions Serveur" #. module: base #: selection:ir.module.module,license:0 msgid "GPL-3" -msgstr "" +msgstr "GPL-3" #. module: base #: view:ir.sequence:0 @@ -4918,7 +4929,7 @@ msgstr "Nom de l'Action" #. module: base #: field:ir.actions.configuration.wizard,progress:0 msgid "Configuration Progress" -msgstr "" +msgstr "Progression de la Configuration" #. module: base #: field:res.company,rml_footer2:0 @@ -4992,7 +5003,7 @@ msgstr "Importer un Fichier de Traduction" #, python-format #: code:addons/base/ir/ir_actions.py:0 msgid "Please specify the Partner Email address !" -msgstr "" +msgstr "Veuillez spécifier l'adresse E-mail du Partenaire !" #. module: base #: model:ir.actions.act_window,name:base.action_partner_title_partner @@ -5198,7 +5209,7 @@ msgstr "Commencer la Mise à Jour" #. module: base #: model:res.partner.category,name:base.res_partner_category_13 msgid "Important customers" -msgstr "" +msgstr "Client Important" #. module: base #: field:res.partner.som,factor:0 diff --git a/bin/report/custom.py b/bin/report/custom.py index e8276fa0d4f..3bbcbb1f338 100644 --- a/bin/report/custom.py +++ b/bin/report/custom.py @@ -28,6 +28,7 @@ import print_xml import render from interface import report_int import common +from osv import except_osv from osv.orm import browse_null from osv.orm import browse_record_list import pooler @@ -564,7 +565,7 @@ class report_custom(report_int): colors = map(lambda x:fill_style.Plain(bgcolor=x), misc.choice_colors(len(results))) if reduce(lambda x,y : x+y, map(lambda x : x[1],results)) == 0.0: - raise(_('The sum of the data (2nd field) is null.\nWe can draw a pie chart !')) + raise osv.except_osv('Error', _("The sum of the data (2nd field) is null.\nWe can't draw a pie chart !")) plot = pie_plot.T(data=results, arc_offsets=[0,10,0,10], shadow = (2, -2, fill_style.gray50), From 13874f2585e54f52414df39d14fa5936dbc74506 Mon Sep 17 00:00:00 2001 From: Olivier Laurent Date: Mon, 17 Nov 2008 14:46:53 +0100 Subject: [PATCH 02/18] Import error bzr revid: olt@tinyerp.com-20081117134653-059s2xfoanftr1mh --- bin/report/custom.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/report/custom.py b/bin/report/custom.py index 3bbcbb1f338..1826b37096f 100644 --- a/bin/report/custom.py +++ b/bin/report/custom.py @@ -28,7 +28,7 @@ import print_xml import render from interface import report_int import common -from osv import except_osv +from osv.osv import except_osv from osv.orm import browse_null from osv.orm import browse_record_list import pooler @@ -565,7 +565,7 @@ class report_custom(report_int): colors = map(lambda x:fill_style.Plain(bgcolor=x), misc.choice_colors(len(results))) if reduce(lambda x,y : x+y, map(lambda x : x[1],results)) == 0.0: - raise osv.except_osv('Error', _("The sum of the data (2nd field) is null.\nWe can't draw a pie chart !")) + raise except_osv('Error', _("The sum of the data (2nd field) is null.\nWe can't draw a pie chart !")) plot = pie_plot.T(data=results, arc_offsets=[0,10,0,10], shadow = (2, -2, fill_style.gray50), From d28f6a3feb0b6e6dc3ff11c4f7ac29a5dccce080 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Mon, 17 Nov 2008 16:40:47 +0100 Subject: [PATCH 03/18] better_menu_name_import_transaltion bzr revid: fp@tinyerp.com-20081117154047-lc08ewjn25e5yjcz --- bin/addons/base/module/module_wizard.xml | 2 +- bin/addons/base/res/partner/partner.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/addons/base/module/module_wizard.xml b/bin/addons/base/module/module_wizard.xml index 737a3bb60e8..ff8f51bef6d 100644 --- a/bin/addons/base/module/module_wizard.xml +++ b/bin/addons/base/module/module_wizard.xml @@ -17,7 +17,7 @@ - Reload an Official Translation + Load an Official Translation module.lang.install diff --git a/bin/addons/base/res/partner/partner.py b/bin/addons/base/res/partner/partner.py index f5a7bf5a3bb..09cce57c49c 100644 --- a/bin/addons/base/res/partner/partner.py +++ b/bin/addons/base/res/partner/partner.py @@ -269,7 +269,7 @@ class res_partner_address(osv.osv): _name = 'res.partner.address' _order = 'id' _columns = { - 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='cascade', select=True, help="Keep empty for a private address, not related to partner."), + 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null', select=True, help="Keep empty for a private address, not related to partner."), 'type': fields.selection( [ ('default','Default'),('invoice','Invoice'), ('delivery','Delivery'), ('contact','Contact'), ('other','Other') ],'Address Type', help="Used to select automatically the right address according to the context in sales and purchases documents."), 'function': fields.many2one('res.partner.function', 'Function'), 'title': fields.selection(_contact_title_get, 'Title', size=32), From d8b98de4b774d881c61d8d2e82ceac763e283129 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Mon, 17 Nov 2008 17:56:01 +0100 Subject: [PATCH 04/18] bugfix bzr revid: fp@tinyerp.com-20081117165601-guq0krwmx8copxt3 --- bin/addons/base/ir/ir_actions.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/bin/addons/base/ir/ir_actions.py b/bin/addons/base/ir/ir_actions.py index 7a479344e18..8e601589f60 100644 --- a/bin/addons/base/ir/ir_actions.py +++ b/bin/addons/base/ir/ir_actions.py @@ -164,21 +164,16 @@ class act_window(osv.osv): res={} for act in self.browse(cr, uid, ids): res[act.id]=[(view.view_id.id, view.view_mode) for view in act.view_ids] - if (not act.view_ids): - modes = act.view_mode.split(',') + modes = act.view_mode.split(',') + if len(modes)>len(act.view_ids): find = False if act.view_id: res[act.id].append((act.view_id.id, act.view_id.type)) - for t in modes: + for t in modes[len(act.view_ids):]: if act.view_id and (t == act.view_id.type) and not find: find = True continue res[act.id].append((False, t)) - - if 'calendar' not in modes: - mobj = self.pool.get(act.res_model) - if hasattr(mobj, '_date_name') and mobj._date_name in mobj._columns: - res[act.id].append((False, 'calendar')) return res _columns = { From 8c654e8278bfcafebc240c8887e9dd5cbde80be3 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Mon, 17 Nov 2008 18:22:09 +0100 Subject: [PATCH 05/18] [REF] Remove unless code bzr revid: stephane@tinyerp.com-20081117172209-4dv7lii9h0l44xf4 --- bin/tools/misc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/tools/misc.py b/bin/tools/misc.py index 9e4dd3c3cdd..af765d58a7f 100644 --- a/bin/tools/misc.py +++ b/bin/tools/misc.py @@ -666,7 +666,6 @@ def scan_languages(): import glob file_list = [os.path.splitext(os.path.basename(f))[0] for f in glob.glob(os.path.join(config['root_path'],'addons', 'base', 'i18n', '*.po'))] lang_dict = get_languages() - r=[(lang, lang_dict.get(lang, lang)) for lang in file_list] return [(lang, lang_dict.get(lang, lang)) for lang in file_list] From 115fff5b2354cfea5d183b293a2ccb7a28c25ed0 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Mon, 17 Nov 2008 18:25:26 +0100 Subject: [PATCH 06/18] [IMP] Use scan_languages instead of get_languages bzr revid: stephane@tinyerp.com-20081117172526-1kxpcstje4czrkpx --- bin/tools/translate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/tools/translate.py b/bin/tools/translate.py index c5630d7bcff..8c535f7314e 100644 --- a/bin/tools/translate.py +++ b/bin/tools/translate.py @@ -506,7 +506,7 @@ def trans_load_data(db_name, fileobj, fileformat, lang, strict=False, lang_name= if not ids: if not lang_name: lang_name=lang - languages=tools.get_languages() + languages=tools.scan_languages() lang_name = languages.get(lang, lang) ids = lang_obj.create(cr, uid, { 'code': lang, From 7089927d840f946f41c0a2a2a08759071a4c0ee0 Mon Sep 17 00:00:00 2001 From: Olivier Laurent Date: Tue, 18 Nov 2008 09:41:29 +0100 Subject: [PATCH 07/18] Localisation of the error message bzr revid: olt@tinyerp.com-20081118084129-by68mb6txj60x6c6 --- bin/report/custom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/report/custom.py b/bin/report/custom.py index 1826b37096f..1735e0dcafc 100644 --- a/bin/report/custom.py +++ b/bin/report/custom.py @@ -565,7 +565,7 @@ class report_custom(report_int): colors = map(lambda x:fill_style.Plain(bgcolor=x), misc.choice_colors(len(results))) if reduce(lambda x,y : x+y, map(lambda x : x[1],results)) == 0.0: - raise except_osv('Error', _("The sum of the data (2nd field) is null.\nWe can't draw a pie chart !")) + raise except_osv(_('Error'), _("The sum of the data (2nd field) is null.\nWe can't draw a pie chart !")) plot = pie_plot.T(data=results, arc_offsets=[0,10,0,10], shadow = (2, -2, fill_style.gray50), From 5c2082d4d47a4c9d9b6976000888f0d0eb6203da Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Tue, 18 Nov 2008 11:35:11 +0100 Subject: [PATCH 08/18] [FIX] Import the module in a zip archive lp bug: https://launchpad.net/bugs/297092 fixed lp bug: https://launchpad.net/bugs/298723 fixed bzr revid: stephane@tinyerp.com-20081118103511-8zdsbevbaxijf1dk --- bin/addons/base/module/module.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bin/addons/base/module/module.py b/bin/addons/base/module/module.py index 579231724b2..6afbca50597 100644 --- a/bin/addons/base/module/module.py +++ b/bin/addons/base/module/module.py @@ -428,13 +428,15 @@ class module(osv.osv): terp = self.get_module_info(mod_name) if not terp or not terp.get('installable', True): continue - if not os.path.isfile(mod_path+'.zip'): + + if not os.path.isfile( mod_path ): import imp # XXX must restrict to only addons paths - imp.load_module(name, *imp.find_module(mod_name)) + path = imp.find_module(mod_name) + imp.load_module(name, *path) else: import zipimport - zimp = zipimport.zipimporter(mod_path+'.zip') + zimp = zipimport.zipimporter(mod_path) zimp.load_module(mod_name) id = self.create(cr, uid, { 'name': mod_name, From 0d5946419b502206c143fd603e7d89401e542bc4 Mon Sep 17 00:00:00 2001 From: Fabian Semal Date: Tue, 18 Nov 2008 13:54:32 +0100 Subject: [PATCH 09/18] Added default partner category from tree view Moved partner titles from demo to data bzr revid: fabian@tinyerp.com-20081118125432-7gejw224kxqf42m4 --- bin/addons/base/res/partner/partner.py | 7 +++ bin/addons/base/res/partner/partner_data.xml | 44 +++++++++++++++++++ bin/addons/base/res/partner/partner_demo.xml | 46 -------------------- 3 files changed, 51 insertions(+), 46 deletions(-) diff --git a/bin/addons/base/res/partner/partner.py b/bin/addons/base/res/partner/partner.py index 09cce57c49c..33b1371d56a 100644 --- a/bin/addons/base/res/partner/partner.py +++ b/bin/addons/base/res/partner/partner.py @@ -147,9 +147,16 @@ class res_partner(osv.osv): 'city':fields.related('address','city',type='char', string='City'), 'country':fields.related('address','country_id',type='many2one', relation='res.country', string='Country'), } + + def _default_category(self, cr, uid, context={}): + if 'category_id' in context and context['category_id']: + return [context['category_id']] + return [] + _defaults = { 'active': lambda *a: 1, 'customer': lambda *a: 1, + 'category_id': _default_category, } _sql_constraints = [ ('name_uniq', 'unique (name)', 'The name of the partner must be unique !') diff --git a/bin/addons/base/res/partner/partner_data.xml b/bin/addons/base/res/partner/partner_data.xml index 443f2b0ea74..1345fb2dfab 100644 --- a/bin/addons/base/res/partner/partner_data.xml +++ b/bin/addons/base/res/partner/partner_data.xml @@ -1,6 +1,50 @@ + + + + partner + Corp. + Corp. + + + + partner + Ltd + ltd + + + + contact + Madam + Ms. + + + contact + Miss + Mss + + + contact + Sir + M. + + + + Director + CEO + + + Chief Technical Officer + CTO + + + Salesman + + Bank account diff --git a/bin/addons/base/res/partner/partner_demo.xml b/bin/addons/base/res/partner/partner_demo.xml index 92797377da1..ae583ace947 100644 --- a/bin/addons/base/res/partner/partner_demo.xml +++ b/bin/addons/base/res/partner/partner_demo.xml @@ -1,52 +1,6 @@ - - - - partner - Corp. - Corp. - - - - partner - Ltd - ltd - - - - contact - Madam - Ms. - - - contact - Miss - Mss - - - contact - Sir - M. - - - - Director - CEO - - - Chief Technical Officer - CTO - - - Salesman - - - - From fd94fbacb4c4a3fc8f01f43c587608369632e15b Mon Sep 17 00:00:00 2001 From: Harshad Modi Date: Tue, 18 Nov 2008 18:30:12 +0530 Subject: [PATCH 10/18] fixed bug : append datetime on file name after print report and resolve problem of open file bzr revid: hmo@tinyerp.com-20081118130012-11i9vtv48mdp7xoc --- bin/report/report_sxw.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/report/report_sxw.py b/bin/report/report_sxw.py index 203eca102c8..67f93fdb811 100644 --- a/bin/report/report_sxw.py +++ b/bin/report/report_sxw.py @@ -20,7 +20,7 @@ # ############################################################################## - +import base64 import xml.dom.minidom import os, time import ir, netsvc @@ -668,10 +668,10 @@ class report_sxw(report_rml): pdf = create_doc(rml2, logo,title) if attach: - # TODO: save multiple print with symbolic links in attach + # TODO: save multiple print with symbolic links in attach pool.get('ir.attachment').create(cr, uid, { - 'name': title or _('print'), - 'datas': pdf, + 'name': (title or _('print'))+':'+time.strftime('%Y-%m-%d %H:%M:%S'), + 'datas': base64.encodestring(pdf), 'datas_fname': attach+time.strftime('%Y-%m-%d')+'.'+report_type, 'res_model': self.table, 'res_id': ids[0] From 75a42d16595aa06a8c73ff3fe43b3d5607a96e6d Mon Sep 17 00:00:00 2001 From: Jay Vora Date: Tue, 18 Nov 2008 18:36:59 +0530 Subject: [PATCH 11/18] Bugfix:Minor edit for account report report csv in l10n_lu bzr revid: jvo@tinyerp.com-20081118130659-ybkj0d0k5bpk5bbw --- addons/l10n_lu/account.report.report.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/l10n_lu/account.report.report.csv b/addons/l10n_lu/account.report.report.csv index 0e4095972fc..89e497ce8c6 100644 --- a/addons/l10n_lu/account.report.report.csv +++ b/addons/l10n_lu/account.report.report.csv @@ -1,7 +1,7 @@ "expression","note","parent_id","sequence","badness_limit","goodness_limit","type","code","name" 0,,,,0,1,"indicator","BILAN","Bilan" "report('BIMMO','BSTOCK','BREAL','BDISPO')",,"BILAN",,0,1,"fiscal","Actif","Actif" -"balance(][2'])",,"Actif",,0,1,"indicator","BIMMO","Valeurs immobilisées" +"balance(['2'])",,"Actif",,0,1,"indicator","BIMMO","Valeurs immobilisées" "balance(['3']",,"Actif",2,0,1,"indicator","BSTOCK","Stocks" "balance(['4'])",,"Actif",3,0,1,"indicator","BREAL","Réalisable" "balance(['5'])",,"Actif",4,0,1,"fiscal","BDISPO","Disponible" From 53f9028afb402f2e6d0e6b1265d8a852920c57a6 Mon Sep 17 00:00:00 2001 From: Harshad Modi Date: Tue, 18 Nov 2008 18:34:58 +0530 Subject: [PATCH 12/18] Improvement on check_duplicate function bzr revid: hmo@tinyerp.com-20081118130458-odf78zo2p17jwtmc --- addons/document/document.py | 122 ++++++++++++++++++++++-------------- 1 file changed, 76 insertions(+), 46 deletions(-) diff --git a/addons/document/document.py b/addons/document/document.py index 21064169335..f62816c1511 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -95,8 +95,7 @@ class node_class(object): where.append( ('parent_id','=',self.object.id) ) where.append( ('res_id','=',False) ) if nodename: - where.append( (fobj._rec_name,'=',nodename) ) - print where+[ ('parent_id','=',self.object and self.object.id or False) ] + where.append( (fobj._rec_name,'=',nodename) ) ids = fobj.search(self.cr, self.uid, where+[ ('parent_id','=',self.object and self.object.id or False) ], context=self.context) if self.object and self.root and (self.object.type=='ressource'): ids += fobj.search(self.cr, self.uid, where+[ ('parent_id','=',False) ], context=self.context) @@ -248,27 +247,7 @@ class document_directory(osv.osv): path.append(self.pool.get(directory.ressource_type_id.model).browse(cr,uid,res_id).name) user=self.pool.get('res.users').browse(cr,uid,uid) return "ftp://%s:%s@localhost:8021/%s/%s"%(user.login,user.password,cr.dbname,'/'.join(path)) - return False - def _check_duplication(self, cr, uid,vals): - if 'name' in vals: - where=" name='%s'"% (vals['name']) - if not 'parent_id' in vals or not vals['parent_id']: - where+=' and parent_id is null' - else: - where+=' and parent_id=%d'%(vals['parent_id']) - if not 'ressource_parent_type_id' in vals or not vals['ressource_parent_type_id']: - where+= ' and ressource_parent_type_id is null' - else: - where+=" and ressource_parent_type_id='%s'"%(vals['ressource_parent_type_id']) -# if not 'ressource_id' in vals or not vals['ressource_id']: -# where+= ' and ressource_id is null' -# else: -# where+=" and ressource_id=%d"%(vals['ressource_id']) - cr.execute("select id from document_directory where" + where) - res = cr.fetchall() - if len(res): - return False - return True + return False def _check_recursion(self, cr, uid, ids): level = 100 while len(ids): @@ -344,13 +323,7 @@ class document_directory(osv.osv): result = map(lambda node: node.path_get(), children) #childs,object2 = self._get_childs(cr, uid, object, False, context) #result = map(lambda x: urlparse.urljoin(path+'/',x.name), childs) - return result - - def write(self, cr, uid, ids, vals, context=None): - # need to make constraints to checking duplicate - #if not self._check_duplication(cr,uid,vals): - # raise except_orm('ValidateError', 'Directory name must be unique!') - return super(document_directory,self).write(cr,uid,ids,vals,context=context) + return result def copy(self, cr, uid, id, default=None, context=None): if not default: @@ -359,9 +332,37 @@ class document_directory(osv.osv): default.update({'name': name+ " (copy)"}) return super(document_directory,self).copy(cr,uid,id,default,context) + def _check_duplication(self, cr, uid,vals,ids=[],op='create'): + name=vals.get('name',False) + parent_id=vals.get('parent_id',False) + ressource_parent_type_id=vals.get('ressource_parent_type_id',False) + ressource_id=vals.get('ressource_id',0) + if op=='write': + for directory in self.browse(cr,uid,ids): + if not name: + name=directory.name + if not parent_id: + parent_id=directory.parent_id and directory.parent_id.id or False + if not ressource_parent_type_id: + ressource_parent_type_id=directory.ressource_parent_type_id and directory.ressource_parent_type_id.id or False + if not ressource_id: + ressource_id=directory.ressource_id and directory.ressource_id.id or 0 + res=self.search(cr,uid,[('id','<>',directory.id),('name','=',name),('parent_id','=',parent_id),('ressource_parent_type_id','=',ressource_parent_type_id),('ressource_id','=',ressource_id)]) + if len(res): + return False + if op=='create': + res=self.search(cr,uid,[('name','=',name),('parent_id','=',parent_id),('ressource_parent_type_id','=',ressource_parent_type_id),('ressource_id','=',ressource_id)]) + if len(res): + return False + return True + def write(self, cr, uid, ids, vals, context=None): + if not self._check_duplication(cr,uid,vals,ids,op='write'): + raise except_orm('ValidateError', 'Directory name must be unique!') + return super(document_directory,self).write(cr,uid,ids,vals,context=context) + def create(self, cr, uid, vals, context=None): if not self._check_duplication(cr,uid,vals): - raise except_orm('ValidateError', 'Directory name must be unique!') + raise except_orm('ValidateError', 'Directory name must be unique!') if vals.get('name',False) and (vals.get('name').find('/')+1 or vals.get('name').find('@')+1 or vals.get('name').find('$')+1 or vals.get('name').find('#')+1) : raise 'Error' return super(document_directory,self).create(cr, uid, vals, context) @@ -548,18 +549,39 @@ class document_file(osv.osv): } _sql_constraints = [ ('filename_uniq', 'unique (name,parent_id,res_id,res_model)', 'The file name must be unique !') - ] - - def _check_duplication(self, cr, uid,vals): - if 'name' in vals: - res=self.search(cr,uid,[('name','=',vals['name']),('parent_id','=','parent_id' in vals and vals['parent_id'] or False),('res_id','=','res_id' in vals and vals['res_id'] or False),('res_model','=','res_model' in vals and vals['res_model']) or False]) + ] + def _check_duplication(self, cr, uid,vals,ids=[],op='create'): + name=vals.get('name',False) + parent_id=vals.get('parent_id',False) + res_model=vals.get('res_model',False) + res_id=vals.get('res_id',0) + if op=='write': + for file in self.browse(cr,uid,ids): + if not name: + name=file.name + if not parent_id: + parent_id=file.parent_id and file.parent_id.id or False + if not res_model: + res_model=file.res_model and file.res_model or False + if not res_id: + res_id=file.res_id and file.res_id or 0 + res=self.search(cr,uid,[('id','<>',file.id),('name','=',name),('parent_id','=',parent_id),('res_model','=',res_model),('res_id','=',res_id)]) + if len(res): + return False + if op=='create': + res=self.search(cr,uid,[('name','=',name),('parent_id','=',parent_id),('res_id','=',res_id),('res_model','=',res_model)]) if len(res): return False return True - - def write(self, cr, uid, ids, vals, context=None): - if not self._check_duplication(cr,uid,vals): - raise except_orm('ValidateError', 'File name must be unique!') + def copy(self, cr, uid, id, default=None, context=None): + if not default: + default ={} + name = self.read(cr, uid, [id])[0]['name'] + default.update({'name': name+ " (copy)"}) + return super(document_file,self).copy(cr,uid,id,default,context) + def write(self, cr, uid, ids, vals, context=None): + if not self._check_duplication(cr,uid,vals,ids,'write'): + raise except_orm('ValidateError', 'File name must be unique!') result = super(document_file,self).write(cr,uid,ids,vals,context=context) cr.commit() try: @@ -575,8 +597,12 @@ class document_file(osv.osv): pass return result - def create(self, cr, uid, vals, context={}): + def create(self, cr, uid, vals, context={}): vals['title']=vals['name'] + if not vals.get('res_id', False) and context.get('default_res_id',False): + vals['res_id']=context.get('default_res_id',False) + if not vals.get('res_model', False) and context.get('default_res_model',False): + vals['res_model']=context.get('default_res_model',False) if vals.get('res_id', False) and vals.get('res_model',False): obj_model=self.pool.get(vals['res_model']) result = obj_model.read(cr, uid, [vals['res_id']], context=context) @@ -585,18 +611,22 @@ class document_file(osv.osv): vals['title'] = (obj['name'] or '')[:60] if obj_model._name=='res.partner': vals['partner_id']=obj['id'] - elif 'address_id' in obj: - address=self.pool.get('res.partner.address').read(cr,uid,[obj['address_id']],context=context) + elif obj.get('address_id',False): + if isinstance(obj['address_id'],tuple) or isinstance(obj['address_id'],list): + address_id=obj['address_id'][0] + else: + address_id=obj['address_id'] + address=self.pool.get('res.partner.address').read(cr,uid,[address_id],context=context) if len(address): - vals['partner_id']=address[0]['partner_id'] or False - elif 'partner_id' in obj: + vals['partner_id']=address[0]['partner_id'][0] or False + elif obj.get('partner_id',False): if isinstance(obj['partner_id'],tuple) or isinstance(obj['partner_id'],list): vals['partner_id']=obj['partner_id'][0] else: vals['partner_id']=obj['partner_id'] datas=None - if 'datas' not in vals: + if vals.get('datas',False) and vals.get('link',False) : import urllib datas=base64.encodestring(urllib.urlopen(vals['link']).read()) else: From c7edb76980c9c9af9b610f605ac5522dc3099d33 Mon Sep 17 00:00:00 2001 From: Jay Vora Date: Tue, 18 Nov 2008 20:09:15 +0530 Subject: [PATCH 13/18] Minor textual edit on partner bzr revid: jvo@tinyerp.com-20081118143915-mukgzgf32ym8hkr6 --- bin/addons/base/res/partner/partner.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/addons/base/res/partner/partner.py b/bin/addons/base/res/partner/partner.py index 33b1371d56a..e7dfbb08605 100644 --- a/bin/addons/base/res/partner/partner.py +++ b/bin/addons/base/res/partner/partner.py @@ -1,7 +1,7 @@ # -*- encoding: utf-8 -*- ############################################################################## # -# OpenERP, Open Source Management Solution +# OpenERP, Open Source Management Solution # Copyright (C) 2004-2008 Tiny SPRL (). All Rights Reserved # $Id$ # @@ -142,8 +142,8 @@ class res_partner(osv.osv): 'credit_limit': fields.float(string='Credit Limit'), 'ean13': fields.char('EAN13', size=13), 'active': fields.boolean('Active'), - 'customer': fields.boolean('Customer', help="Check this box if the partner if a customer."), - 'supplier': fields.boolean('Supplier', help="Check this box if the partner if a supplier. If it's not checked, purchase people will not see it when encoding a purchase order."), + 'customer': fields.boolean('Customer', help="Check this box if the partner is a customer."), + 'supplier': fields.boolean('Supplier', help="Check this box if the partner is a supplier. If it's not checked, purchase people will not see it when encoding a purchase order."), 'city':fields.related('address','city',type='char', string='City'), 'country':fields.related('address','country_id',type='many2one', relation='res.country', string='Country'), } From 681f77aa0ca2167e2c4af978ecfaf050cbce6fd3 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Tue, 18 Nov 2008 16:21:53 +0100 Subject: [PATCH 14/18] [FIX] Use get_languages instead of scan_languages ( Sorry, It is my fault ) lp bug: https://launchpad.net/bugs/299433 fixed bzr revid: stephane@tinyerp.com-20081118152153-dim22dfbj5i8pg4u --- bin/tools/translate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/tools/translate.py b/bin/tools/translate.py index 8c535f7314e..c5630d7bcff 100644 --- a/bin/tools/translate.py +++ b/bin/tools/translate.py @@ -506,7 +506,7 @@ def trans_load_data(db_name, fileobj, fileformat, lang, strict=False, lang_name= if not ids: if not lang_name: lang_name=lang - languages=tools.scan_languages() + languages=tools.get_languages() lang_name = languages.get(lang, lang) ids = lang_obj.create(cr, uid, { 'code': lang, From 2e501e323dfa319dd150f0d650cb8e4575c24dbd Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 18 Nov 2008 18:10:22 +0100 Subject: [PATCH 15/18] fix lang exportation wizard view bzr revid: christophe@tinyerp.com-20081118171022-qdipyyq74qphlugz --- bin/addons/base/module/module_wizard.xml | 31 ++++++++++++------------ 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/bin/addons/base/module/module_wizard.xml b/bin/addons/base/module/module_wizard.xml index ff8f51bef6d..3b340ca0191 100644 --- a/bin/addons/base/module/module_wizard.xml +++ b/bin/addons/base/module/module_wizard.xml @@ -28,15 +28,20 @@ form
- + - - - + + + - - - + + + + + + + + @@ -46,15 +51,11 @@ - - - - - + -