From 1ab5f9101c82eaeffad1ff1ca848f2c6f228b7f7 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 30 Jan 2016 22:25:36 -0500 Subject: [PATCH 01/18] OCA Transbot updated translations from Transifex --- base_export_manager/__openerp__.py | 41 ++++++++++ .../i18n/base_exports_manager.pot | 50 ++++++++++++ .../static/description/icon.svg | 79 +++++++++++++++++++ base_export_manager/static/src/js/main.js | 54 +++++++++++++ base_export_manager/views/ir_exports_view.xml | 51 ++++++++++++ 5 files changed, 275 insertions(+) create mode 100644 base_export_manager/__openerp__.py create mode 100644 base_export_manager/i18n/base_exports_manager.pot create mode 100644 base_export_manager/static/description/icon.svg create mode 100644 base_export_manager/static/src/js/main.js create mode 100644 base_export_manager/views/ir_exports_view.xml diff --git a/base_export_manager/__openerp__.py b/base_export_manager/__openerp__.py new file mode 100644 index 000000000..0d2c49aa2 --- /dev/null +++ b/base_export_manager/__openerp__.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Python source code encoding : https://www.python.org/dev/peps/pep-0263/ +############################################################################## +# +# OpenERP, Odoo Source Management Solution +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +{ + 'name': "Manages model export profiles", + 'category': 'Personalization', + 'version': '8.0.1.0.0', + 'depends': [ + 'web', + ], + 'data': [ + 'views/assets.xml', + 'views/ir_exports_view.xml', + ], + 'qweb': [ + "static/src/xml/base.xml", + ], + 'author': 'Antiun Ingeniería S.L.,Odoo Community Association (OCA)', + 'website': 'http://www.antiun.com', + 'license': 'AGPL-3', + 'installable': True, +} diff --git a/base_export_manager/i18n/base_exports_manager.pot b/base_export_manager/i18n/base_exports_manager.pot new file mode 100644 index 000000000..973fa809c --- /dev/null +++ b/base_export_manager/i18n/base_exports_manager.pot @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_exports_manager +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-27 12:38+0000\n" +"PO-Revision-Date: 2015-10-27 12:38+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: base_exports_manager +#: view:ir.exports:base_exports_manager.ir_exports_form_view +msgid "Export Profile" +msgstr "" + +#. module: base_exports_manager +#: model:ir.actions.act_window,name:base_exports_manager.ir_exports_action +#: view:ir.exports:base_exports_manager.ir_exports_tree_view +#: model:ir.ui.menu,name:base_exports_manager.ir_exports_menu +msgid "Export Profiles" +msgstr "" + +#. module: base_exports_manager +#: code:addons/base_exports_manager/models/ir_exports_line.py:62 +#, python-format +msgid "Field '%s' already exists" +msgstr "" + +#. module: base_exports_manager +#: code:addons/base_exports_manager/models/ir_exports_line.py:57 +#, python-format +msgid "Field '%s' does not exist" +msgstr "" + +#. module: base_exports_manager +#: field:ir.exports.line,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: base_exports_manager +#: field:ir.exports.line,label:0 +msgid "Label" +msgstr "" diff --git a/base_export_manager/static/description/icon.svg b/base_export_manager/static/description/icon.svg new file mode 100644 index 000000000..a7a26d093 --- /dev/null +++ b/base_export_manager/static/description/icon.svg @@ -0,0 +1,79 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/base_export_manager/static/src/js/main.js b/base_export_manager/static/src/js/main.js new file mode 100644 index 000000000..480768164 --- /dev/null +++ b/base_export_manager/static/src/js/main.js @@ -0,0 +1,54 @@ +/** + * # -*- coding: utf-8 -*- + * ############################################################################## + * # + * # OpenERP, Open Source Management Solution + * # This module copyright : + * # (c) 2014 Antiun Ingenieria, SL (Madrid, Spain, http://www.antiun.com) + * # Antonio Espinosa + * # + * # This program is free software: you can redistribute it and/or modify + * # it under the terms of the GNU Affero General Public License as + * # published by the Free Software Foundation, either version 3 of the + * # License, or (at your option) any later version. + * # + * # This program is distributed in the hope that it will be useful, + * # but WITHOUT ANY WARRANTY; without even the implied warranty of + * # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * # GNU Affero General Public License for more details. + * # + * # You should have received a copy of the GNU Affero General Public License + * # along with this program. If not, see . + * # + * ############################################################################## + */ + +// Check jQuery available +if (typeof jQuery === 'undefined') { throw new Error('Requires jQuery') } + ++function ($) { + 'use strict'; + + openerp.base_exports_manager = function(instance, local) { + var _t = instance.web._t, + _lt = instance.web._lt; + var QWeb = instance.web.qweb; + + instance.web.DataExport.include({ + do_load_export_field: function(field_list) { + var export_node = this.$el.find("#fields_list"); + _(field_list).each(function (field) { + export_node.append(new Option(field.label + ' (' + field.name + ')', field.name)); + }); + }, + add_field: function(field_id, string) { + var field_list = this.$el.find('#fields_list'); + if (this.$el.find("#fields_list option[value='" + field_id + "']") + && !this.$el.find("#fields_list option[value='" + field_id + "']").length) { + field_list.append(new Option(string + ' (' + field_id + ')', field_id)); + } + }, + }); + } + +}(jQuery); diff --git a/base_export_manager/views/ir_exports_view.xml b/base_export_manager/views/ir_exports_view.xml new file mode 100644 index 000000000..a4f3741fb --- /dev/null +++ b/base_export_manager/views/ir_exports_view.xml @@ -0,0 +1,51 @@ + + + + + + Export Profiles + ir.exports + form + tree,form + + + + + + Export Profile tree + ir.exports + + + + + + + + + + Export Profile form + ir.exports + +
+ + + + + + + + + + + + + +
+
+
+ +
+
From 2d3ce14fe8bbdbc49fc01be8fe6275d556e15447 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sun, 8 May 2016 09:18:17 -0400 Subject: [PATCH 02/18] OCA Transbot updated translations from Transifex --- base_export_manager/i18n/en.po | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 base_export_manager/i18n/en.po diff --git a/base_export_manager/i18n/en.po b/base_export_manager/i18n/en.po new file mode 100644 index 000000000..18540d3d8 --- /dev/null +++ b/base_export_manager/i18n/en.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_export_manager +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-06 02:41+0000\n" +"PO-Revision-Date: 2016-05-04 19:15+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: English (http://www.transifex.com/oca/OCA-server-tools-8-0/language/en/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: base_export_manager +#: view:ir.exports:base_export_manager.ir_exports_form_view +msgid "Export Profile" +msgstr "Export Profile" + +#. module: base_export_manager +#: model:ir.actions.act_window,name:base_export_manager.ir_exports_action +#: view:ir.exports:base_export_manager.ir_exports_tree_view +#: model:ir.ui.menu,name:base_export_manager.ir_exports_menu +msgid "Export Profiles" +msgstr "Export Profiles" + +#. module: base_export_manager +#: code:addons/base_export_manager/models/ir_exports_line.py:61 +#, python-format +msgid "Field '%s' already exists" +msgstr "Field '%s' already exists" + +#. module: base_export_manager +#: code:addons/base_export_manager/models/ir_exports_line.py:56 +#, python-format +msgid "Field '%s' does not exist" +msgstr "Field '%s' does not exist" + +#. module: base_export_manager +#: field:ir.exports.line,label:0 +msgid "Label" +msgstr "Label" + +#. module: base_export_manager +#: field:ir.exports.line,sequence:0 +msgid "Sequence" +msgstr "Sequence" From 5df8e1f97da4140d74563e4a7a42c80f469317cb Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Thu, 24 Dec 2015 16:38:59 +0100 Subject: [PATCH 03/18] Improve UX for base_export_manager. - Improve user instructions in README. - Require some required fields. - Allow to select models from a list. - Allow to select up to 3 fields from dynamic lists. - Improve translations. - More tests. - Translate column labels. Some methods have been renamed, so version tag is raised to 8.0.2.0.0. --- base_export_manager/__openerp__.py | 27 ++-------- .../i18n/base_exports_manager.pot | 50 ------------------- base_export_manager/static/src/js/main.js | 26 +--------- base_export_manager/views/ir_exports_view.xml | 32 +++++++++++- 4 files changed, 38 insertions(+), 97 deletions(-) delete mode 100644 base_export_manager/i18n/base_exports_manager.pot diff --git a/base_export_manager/__openerp__.py b/base_export_manager/__openerp__.py index 0d2c49aa2..72248ebae 100644 --- a/base_export_manager/__openerp__.py +++ b/base_export_manager/__openerp__.py @@ -1,33 +1,16 @@ # -*- coding: utf-8 -*- -# Python source code encoding : https://www.python.org/dev/peps/pep-0263/ -############################################################################## -# -# OpenERP, Odoo Source Management Solution -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + { 'name': "Manages model export profiles", 'category': 'Personalization', - 'version': '8.0.1.0.0', + 'version': '8.0.2.0.0', 'depends': [ 'web', ], 'data': [ + 'data/ir_exports_data.xml', 'views/assets.xml', 'views/ir_exports_view.xml', ], diff --git a/base_export_manager/i18n/base_exports_manager.pot b/base_export_manager/i18n/base_exports_manager.pot deleted file mode 100644 index 973fa809c..000000000 --- a/base_export_manager/i18n/base_exports_manager.pot +++ /dev/null @@ -1,50 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_exports_manager -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-27 12:38+0000\n" -"PO-Revision-Date: 2015-10-27 12:38+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: base_exports_manager -#: view:ir.exports:base_exports_manager.ir_exports_form_view -msgid "Export Profile" -msgstr "" - -#. module: base_exports_manager -#: model:ir.actions.act_window,name:base_exports_manager.ir_exports_action -#: view:ir.exports:base_exports_manager.ir_exports_tree_view -#: model:ir.ui.menu,name:base_exports_manager.ir_exports_menu -msgid "Export Profiles" -msgstr "" - -#. module: base_exports_manager -#: code:addons/base_exports_manager/models/ir_exports_line.py:62 -#, python-format -msgid "Field '%s' already exists" -msgstr "" - -#. module: base_exports_manager -#: code:addons/base_exports_manager/models/ir_exports_line.py:57 -#, python-format -msgid "Field '%s' does not exist" -msgstr "" - -#. module: base_exports_manager -#: field:ir.exports.line,sequence:0 -msgid "Sequence" -msgstr "" - -#. module: base_exports_manager -#: field:ir.exports.line,label:0 -msgid "Label" -msgstr "" diff --git a/base_export_manager/static/src/js/main.js b/base_export_manager/static/src/js/main.js index 480768164..43d04a5fe 100644 --- a/base_export_manager/static/src/js/main.js +++ b/base_export_manager/static/src/js/main.js @@ -1,27 +1,5 @@ -/** - * # -*- coding: utf-8 -*- - * ############################################################################## - * # - * # OpenERP, Open Source Management Solution - * # This module copyright : - * # (c) 2014 Antiun Ingenieria, SL (Madrid, Spain, http://www.antiun.com) - * # Antonio Espinosa - * # - * # This program is free software: you can redistribute it and/or modify - * # it under the terms of the GNU Affero General Public License as - * # published by the Free Software Foundation, either version 3 of the - * # License, or (at your option) any later version. - * # - * # This program is distributed in the hope that it will be useful, - * # but WITHOUT ANY WARRANTY; without even the implied warranty of - * # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * # GNU Affero General Public License for more details. - * # - * # You should have received a copy of the GNU Affero General Public License - * # along with this program. If not, see . - * # - * ############################################################################## - */ +/* © 2015 Antiun Ingeniería S.L. - Antonio Espinosa + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). */ // Check jQuery available if (typeof jQuery === 'undefined') { throw new Error('Requires jQuery') } diff --git a/base_export_manager/views/ir_exports_view.xml b/base_export_manager/views/ir_exports_view.xml index a4f3741fb..80be56c5b 100644 --- a/base_export_manager/views/ir_exports_view.xml +++ b/base_export_manager/views/ir_exports_view.xml @@ -20,6 +20,7 @@ + @@ -32,14 +33,43 @@
+ + + + + - + + + From 9505eb588a9d18c1d9b24cbfb915f722eee40043 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Mon, 28 Dec 2015 17:26:15 +0100 Subject: [PATCH 04/18] Fix test. --- base_export_manager/views/ir_exports_view.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/base_export_manager/views/ir_exports_view.xml b/base_export_manager/views/ir_exports_view.xml index 80be56c5b..ea1602c0f 100644 --- a/base_export_manager/views/ir_exports_view.xml +++ b/base_export_manager/views/ir_exports_view.xml @@ -48,6 +48,7 @@ Date: Mon, 25 Jul 2016 18:00:58 +0200 Subject: [PATCH 06/18] Hardcode constraints in the `create` method instead of using normal ones. Depending on the context where the record is created, it gets `resource` or `model_id`. The problem is that Odoo checks constrains before inverses, so constrains would fail always. Test added to ensure future versions contemplate all use cases. --- base_export_manager/views/ir_exports_view.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/base_export_manager/views/ir_exports_view.xml b/base_export_manager/views/ir_exports_view.xml index ea1602c0f..afbc799ef 100644 --- a/base_export_manager/views/ir_exports_view.xml +++ b/base_export_manager/views/ir_exports_view.xml @@ -1,4 +1,6 @@ + @@ -38,7 +40,8 @@ - + From 3a040e7c04dad6c08674ffae110f357e55042b37 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Mon, 25 Jul 2016 18:07:16 +0200 Subject: [PATCH 07/18] Allow to reorder fields. --- base_export_manager/views/ir_exports_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base_export_manager/views/ir_exports_view.xml b/base_export_manager/views/ir_exports_view.xml index afbc799ef..a9b9b9a6b 100644 --- a/base_export_manager/views/ir_exports_view.xml +++ b/base_export_manager/views/ir_exports_view.xml @@ -43,7 +43,7 @@ - + From 5707bc5e6ee3bce7683577cfa8b1b50e5ee701d4 Mon Sep 17 00:00:00 2001 From: Dave Lasley Date: Tue, 19 Jul 2016 12:51:10 -0700 Subject: [PATCH 08/18] base_export_manager: Upgrade to v9 * Upgrade base_export_manager to v9 * Rename JS to base_export_manager --- base_export_manager/README.rst | 3 +- base_export_manager/__openerp__.py | 6 +- .../static/description/icon.svg | 79 ------------------- base_export_manager/static/src/js/main.js | 32 -------- base_export_manager/views/ir_exports_view.xml | 7 +- 5 files changed, 9 insertions(+), 118 deletions(-) delete mode 100644 base_export_manager/static/description/icon.svg delete mode 100644 base_export_manager/static/src/js/main.js diff --git a/base_export_manager/README.rst b/base_export_manager/README.rst index 07454a9f0..4e236a3b9 100644 --- a/base_export_manager/README.rst +++ b/base_export_manager/README.rst @@ -44,7 +44,8 @@ To manage export profiles, you need to: * Choose a name. * Choose a model (table in the database). * Choose the fields to export. - * If you choose a related field, you can choose also up to 3 levels of subfields. + * If you choose a related field, you can choose also up to 3 levels of + subfields. * You can drag & drop to reorder the fields. To use one of those profiles, you need to: diff --git a/base_export_manager/__openerp__.py b/base_export_manager/__openerp__.py index 1ac8b1d71..477f749c5 100644 --- a/base_export_manager/__openerp__.py +++ b/base_export_manager/__openerp__.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- -# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa +# Copyright 2015 Antiun Ingeniería S.L. - Antonio Espinosa # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': "Manage model export profiles", 'category': 'Personalization', - 'version': '8.0.2.0.0', + 'version': '9.0.1.0.0', 'depends': [ 'web', ], @@ -19,8 +19,10 @@ ], 'author': 'Antiun Ingeniería S.L., ' 'Tecnativa, ' + 'LasLabs, ' 'Odoo Community Association (OCA)', 'website': 'http://www.antiun.com', 'license': 'AGPL-3', 'installable': True, + 'application': False, } diff --git a/base_export_manager/static/description/icon.svg b/base_export_manager/static/description/icon.svg deleted file mode 100644 index a7a26d093..000000000 --- a/base_export_manager/static/description/icon.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/base_export_manager/static/src/js/main.js b/base_export_manager/static/src/js/main.js deleted file mode 100644 index 43d04a5fe..000000000 --- a/base_export_manager/static/src/js/main.js +++ /dev/null @@ -1,32 +0,0 @@ -/* © 2015 Antiun Ingeniería S.L. - Antonio Espinosa - * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). */ - -// Check jQuery available -if (typeof jQuery === 'undefined') { throw new Error('Requires jQuery') } - -+function ($) { - 'use strict'; - - openerp.base_exports_manager = function(instance, local) { - var _t = instance.web._t, - _lt = instance.web._lt; - var QWeb = instance.web.qweb; - - instance.web.DataExport.include({ - do_load_export_field: function(field_list) { - var export_node = this.$el.find("#fields_list"); - _(field_list).each(function (field) { - export_node.append(new Option(field.label + ' (' + field.name + ')', field.name)); - }); - }, - add_field: function(field_id, string) { - var field_list = this.$el.find('#fields_list'); - if (this.$el.find("#fields_list option[value='" + field_id + "']") - && !this.$el.find("#fields_list option[value='" + field_id + "']").length) { - field_list.append(new Option(string + ' (' + field_id + ')', field_id)); - } - }, - }); - } - -}(jQuery); diff --git a/base_export_manager/views/ir_exports_view.xml b/base_export_manager/views/ir_exports_view.xml index a9b9b9a6b..106948f7e 100644 --- a/base_export_manager/views/ir_exports_view.xml +++ b/base_export_manager/views/ir_exports_view.xml @@ -1,8 +1,8 @@ - - + + Export Profiles @@ -81,5 +81,4 @@ - - + From e7d2a7494934cac96352384766fa68c47d577142 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sun, 7 Aug 2016 16:38:16 -0400 Subject: [PATCH 09/18] OCA Transbot updated translations from Transifex --- base_export_manager/i18n/en.po | 83 ++++++++++++++++++++++++++++------ 1 file changed, 69 insertions(+), 14 deletions(-) diff --git a/base_export_manager/i18n/en.po b/base_export_manager/i18n/en.po index 18540d3d8..041856065 100644 --- a/base_export_manager/i18n/en.po +++ b/base_export_manager/i18n/en.po @@ -2,51 +2,106 @@ # This file contains the translation of the following modules: # * base_export_manager # -# Translators: msgid "" msgstr "" -"Project-Id-Version: server-tools (8.0)\n" +"Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-05-06 02:41+0000\n" -"PO-Revision-Date: 2016-05-04 19:15+0000\n" -"Last-Translator: OCA Transbot \n" -"Language-Team: English (http://www.transifex.com/oca/OCA-server-tools-8-0/language/en/)\n" +"POT-Creation-Date: 2016-08-06 02:49+0000\n" +"PO-Revision-Date: 2016-08-06 02:49+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: en\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: \n" #. module: base_export_manager -#: view:ir.exports:base_export_manager.ir_exports_form_view +#: model:ir.model.fields,help:base_export_manager.field_ir_exports_line_model1_id +#: model:ir.model.fields,help:base_export_manager.field_ir_exports_model_id +msgid "Database model to export." +msgstr "Database model to export." + +#. module: base_export_manager +#: model:ir.ui.view,arch_db:base_export_manager.ir_exports_form_view msgid "Export Profile" msgstr "Export Profile" #. module: base_export_manager #: model:ir.actions.act_window,name:base_export_manager.ir_exports_action -#: view:ir.exports:base_export_manager.ir_exports_tree_view #: model:ir.ui.menu,name:base_export_manager.ir_exports_menu +#: model:ir.ui.view,arch_db:base_export_manager.ir_exports_tree_view msgid "Export Profiles" msgstr "Export Profiles" #. module: base_export_manager -#: code:addons/base_export_manager/models/ir_exports_line.py:61 +#: code:addons/base_export_manager/models/ir_exports_line.py:141 #, python-format msgid "Field '%s' already exists" msgstr "Field '%s' already exists" #. module: base_export_manager -#: code:addons/base_export_manager/models/ir_exports_line.py:56 +#: code:addons/base_export_manager/models/ir_exports_line.py:136 #, python-format msgid "Field '%s' does not exist" msgstr "Field '%s' does not exist" #. module: base_export_manager -#: field:ir.exports.line,label:0 +#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_field1_id +msgid "First field" +msgstr "First field" + +#. module: base_export_manager +#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_model1_id +msgid "First model" +msgstr "First model" + +#. module: base_export_manager +#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_label msgid "Label" msgstr "Label" #. module: base_export_manager -#: field:ir.exports.line,sequence:0 +#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_model_id +msgid "Model" +msgstr "Model" + +#. module: base_export_manager +#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_field2_id +msgid "Second field" +msgstr "Second field" + +#. module: base_export_manager +#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_model2_id +msgid "Second model" +msgstr "Second model" + +#. module: base_export_manager +#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_sequence msgid "Sequence" msgstr "Sequence" + +#. module: base_export_manager +#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_field3_id +msgid "Third field" +msgstr "Third field" + +#. module: base_export_manager +#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_model3_id +msgid "Third model" +msgstr "Third model" + +#. module: base_export_manager +#: code:addons/base_export_manager/models/ir_exports.py:66 +#, python-format +msgid "You must supply a model or resource." +msgstr "You must supply a model or resource." + +#. module: base_export_manager +#: model:ir.model,name:base_export_manager.model_ir_exports +msgid "ir.exports" +msgstr "ir.exports" + +#. module: base_export_manager +#: model:ir.model,name:base_export_manager.model_ir_exports_line +msgid "ir.exports.line" +msgstr "ir.exports.line" From f7bd099f308d175281929a359352fc85d01f041e Mon Sep 17 00:00:00 2001 From: Sandip Mangukiya Date: Fri, 5 Aug 2016 11:54:57 -0500 Subject: [PATCH 10/18] Add export permission --- base_export_manager/README.rst | 3 +- base_export_manager/__openerp__.py | 8 +- base_export_manager/views/ir_exports_view.xml | 84 ------------------- 3 files changed, 7 insertions(+), 88 deletions(-) delete mode 100644 base_export_manager/views/ir_exports_view.xml diff --git a/base_export_manager/README.rst b/base_export_manager/README.rst index 4e236a3b9..07454a9f0 100644 --- a/base_export_manager/README.rst +++ b/base_export_manager/README.rst @@ -44,8 +44,7 @@ To manage export profiles, you need to: * Choose a name. * Choose a model (table in the database). * Choose the fields to export. - * If you choose a related field, you can choose also up to 3 levels of - subfields. + * If you choose a related field, you can choose also up to 3 levels of subfields. * You can drag & drop to reorder the fields. To use one of those profiles, you need to: diff --git a/base_export_manager/__openerp__.py b/base_export_manager/__openerp__.py index 477f749c5..b5a9be97d 100644 --- a/base_export_manager/__openerp__.py +++ b/base_export_manager/__openerp__.py @@ -5,14 +5,17 @@ { 'name': "Manage model export profiles", 'category': 'Personalization', - 'version': '9.0.1.0.0', + 'version': '9.0.1.1.0', 'depends': [ 'web', ], 'data': [ 'data/ir_exports_data.xml', 'views/assets.xml', - 'views/ir_exports_view.xml', + 'views/ir_exports.xml', + 'views/ir_model.xml', + 'views/ir_model_access.xml', + 'views/res_groups.xml', ], 'qweb': [ "static/src/xml/base.xml", @@ -20,6 +23,7 @@ 'author': 'Antiun Ingeniería S.L., ' 'Tecnativa, ' 'LasLabs, ' + 'Ursa Information Systems, ' 'Odoo Community Association (OCA)', 'website': 'http://www.antiun.com', 'license': 'AGPL-3', diff --git a/base_export_manager/views/ir_exports_view.xml b/base_export_manager/views/ir_exports_view.xml deleted file mode 100644 index 106948f7e..000000000 --- a/base_export_manager/views/ir_exports_view.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - Export Profiles - ir.exports - form - tree,form - - - - - - Export Profile tree - ir.exports - - - - - - - - - - - Export Profile form - ir.exports - - - - - - - - - - - - - - - - - - - - - - - - - - - From 8ecb4890c1c3c495bdcd25979f8dfb6286e6f37f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Mon, 15 Aug 2016 22:15:16 +0200 Subject: [PATCH 11/18] remove en.po that was erroneously created by transbot --- base_export_manager/i18n/en.po | 107 --------------------------------- 1 file changed, 107 deletions(-) delete mode 100644 base_export_manager/i18n/en.po diff --git a/base_export_manager/i18n/en.po b/base_export_manager/i18n/en.po deleted file mode 100644 index 041856065..000000000 --- a/base_export_manager/i18n/en.po +++ /dev/null @@ -1,107 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * base_export_manager -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-08-06 02:49+0000\n" -"PO-Revision-Date: 2016-08-06 02:49+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: base_export_manager -#: model:ir.model.fields,help:base_export_manager.field_ir_exports_line_model1_id -#: model:ir.model.fields,help:base_export_manager.field_ir_exports_model_id -msgid "Database model to export." -msgstr "Database model to export." - -#. module: base_export_manager -#: model:ir.ui.view,arch_db:base_export_manager.ir_exports_form_view -msgid "Export Profile" -msgstr "Export Profile" - -#. module: base_export_manager -#: model:ir.actions.act_window,name:base_export_manager.ir_exports_action -#: model:ir.ui.menu,name:base_export_manager.ir_exports_menu -#: model:ir.ui.view,arch_db:base_export_manager.ir_exports_tree_view -msgid "Export Profiles" -msgstr "Export Profiles" - -#. module: base_export_manager -#: code:addons/base_export_manager/models/ir_exports_line.py:141 -#, python-format -msgid "Field '%s' already exists" -msgstr "Field '%s' already exists" - -#. module: base_export_manager -#: code:addons/base_export_manager/models/ir_exports_line.py:136 -#, python-format -msgid "Field '%s' does not exist" -msgstr "Field '%s' does not exist" - -#. module: base_export_manager -#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_field1_id -msgid "First field" -msgstr "First field" - -#. module: base_export_manager -#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_model1_id -msgid "First model" -msgstr "First model" - -#. module: base_export_manager -#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_label -msgid "Label" -msgstr "Label" - -#. module: base_export_manager -#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_model_id -msgid "Model" -msgstr "Model" - -#. module: base_export_manager -#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_field2_id -msgid "Second field" -msgstr "Second field" - -#. module: base_export_manager -#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_model2_id -msgid "Second model" -msgstr "Second model" - -#. module: base_export_manager -#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_sequence -msgid "Sequence" -msgstr "Sequence" - -#. module: base_export_manager -#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_field3_id -msgid "Third field" -msgstr "Third field" - -#. module: base_export_manager -#: model:ir.model.fields,field_description:base_export_manager.field_ir_exports_line_model3_id -msgid "Third model" -msgstr "Third model" - -#. module: base_export_manager -#: code:addons/base_export_manager/models/ir_exports.py:66 -#, python-format -msgid "You must supply a model or resource." -msgstr "You must supply a model or resource." - -#. module: base_export_manager -#: model:ir.model,name:base_export_manager.model_ir_exports -msgid "ir.exports" -msgstr "ir.exports" - -#. module: base_export_manager -#: model:ir.model,name:base_export_manager.model_ir_exports_line -msgid "ir.exports.line" -msgstr "ir.exports.line" From 327468f4d839528c6e6bb3d4038b483bab367436 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 6 Oct 2016 16:08:19 +0200 Subject: [PATCH 12/18] Make modules uninstallable --- base_export_manager/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base_export_manager/__openerp__.py b/base_export_manager/__openerp__.py index b5a9be97d..5c27c0a07 100644 --- a/base_export_manager/__openerp__.py +++ b/base_export_manager/__openerp__.py @@ -27,6 +27,6 @@ 'Odoo Community Association (OCA)', 'website': 'http://www.antiun.com', 'license': 'AGPL-3', - 'installable': True, + 'installable': False, 'application': False, } From 221eb3532c99fa597bd5b2bdee44a77975ebdc0f Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 6 Oct 2016 16:08:27 +0200 Subject: [PATCH 13/18] Rename manifest files --- base_export_manager/__openerp__.py | 32 ------------------------------ 1 file changed, 32 deletions(-) delete mode 100644 base_export_manager/__openerp__.py diff --git a/base_export_manager/__openerp__.py b/base_export_manager/__openerp__.py deleted file mode 100644 index 5c27c0a07..000000000 --- a/base_export_manager/__openerp__.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2015 Antiun Ingeniería S.L. - Antonio Espinosa -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -{ - 'name': "Manage model export profiles", - 'category': 'Personalization', - 'version': '9.0.1.1.0', - 'depends': [ - 'web', - ], - 'data': [ - 'data/ir_exports_data.xml', - 'views/assets.xml', - 'views/ir_exports.xml', - 'views/ir_model.xml', - 'views/ir_model_access.xml', - 'views/res_groups.xml', - ], - 'qweb': [ - "static/src/xml/base.xml", - ], - 'author': 'Antiun Ingeniería S.L., ' - 'Tecnativa, ' - 'LasLabs, ' - 'Ursa Information Systems, ' - 'Odoo Community Association (OCA)', - 'website': 'http://www.antiun.com', - 'license': 'AGPL-3', - 'installable': False, - 'application': False, -} From e2df05532763c79c9555676f4a40a8ec43378c78 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Tue, 18 Oct 2016 12:53:13 +0200 Subject: [PATCH 14/18] [8.0][FIX][base_export_manager] Fix "Expected singleton" bug. (#521) [FIX][base_export_manager] Fix "Expected singleton" bug. If you had a field that got translated in more than 1 addon, you'd possibly getto this error: File "/opt/odoo/0079_ahk_openerp/oca/base_export_manager/models/ir_exports_line.py", line 105, in _compute_label field.name)), File "/opt/odoo/common/openerp/v8/openerp/fields.py", line 825, in __get__ record.ensure_one() File "/opt/odoo/common/openerp/v8/openerp/models.py", line 5355, in ensure_one raise except_orm("ValueError", "Expected singleton: %s" % self) except_orm: ('ValueError', 'Expected singleton: ir.translation(4899, 703976)') With this patch, now we let Odoo return the translated string by using its standard method to do so, so we have to care for less. * Move installation outside a data file. This makes the whole installation to be able to roll back if something goes wrong, instead of entering an error loop. * Include envorionment in its manager. * Add 4th field * Move to api.multi, refactoring some stuff. - Add some comments in complex parts. - Rename `onchange_name` to `_onchange_name` (guidelines). - Make `_compute_name`'s try block shorter and easier to understand. * Allow R/W of name directly in model. * Update tests to cover new behaviors. --- base_export_manager/README.rst | 3 +- base_export_manager/__init__.py | 1 + base_export_manager/data/ir_exports_data.xml | 6 - base_export_manager/hooks.py | 20 +++ .../migrations/8.0.2.1.0/post-migrate.py | 9 + base_export_manager/models/ir_exports_line.py | 157 +++++++++++------- base_export_manager/tests/__init__.py | 3 +- .../tests/test_ir_exports_line.py | 53 +++++- base_export_manager/views/ir_exports.xml | 28 ++-- 9 files changed, 190 insertions(+), 90 deletions(-) delete mode 100644 base_export_manager/data/ir_exports_data.xml create mode 100644 base_export_manager/hooks.py create mode 100644 base_export_manager/migrations/8.0.2.1.0/post-migrate.py diff --git a/base_export_manager/README.rst b/base_export_manager/README.rst index 07454a9f0..be8bf9c81 100644 --- a/base_export_manager/README.rst +++ b/base_export_manager/README.rst @@ -44,7 +44,8 @@ To manage export profiles, you need to: * Choose a name. * Choose a model (table in the database). * Choose the fields to export. - * If you choose a related field, you can choose also up to 3 levels of subfields. + * If you choose a related field, you can choose also up to 4 levels of + subfields. * You can drag & drop to reorder the fields. To use one of those profiles, you need to: diff --git a/base_export_manager/__init__.py b/base_export_manager/__init__.py index 13d8b17b5..ba332de8d 100644 --- a/base_export_manager/__init__.py +++ b/base_export_manager/__init__.py @@ -3,3 +3,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models +from .hooks import post_init_hook diff --git a/base_export_manager/data/ir_exports_data.xml b/base_export_manager/data/ir_exports_data.xml deleted file mode 100644 index c04761a89..000000000 --- a/base_export_manager/data/ir_exports_data.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/base_export_manager/hooks.py b/base_export_manager/hooks.py new file mode 100644 index 000000000..5718758cc --- /dev/null +++ b/base_export_manager/hooks.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from openerp import api, SUPERUSER_ID + + +def post_init_hook(cr, registry): + """Loaded after installing the module. + + ``ir.exports.line.name`` was before a char field, and now it is a computed + char field with stored values. We have to inverse it to avoid database + inconsistencies. + """ + with api.Environment.manage(): + env = api.Environment(cr, SUPERUSER_ID, {}) + env["ir.exports.line"].search([ + ("field1_id", "=", False), + ("export_id", "!=", False), + ("name", "!=", False), + ])._inverse_name() diff --git a/base_export_manager/migrations/8.0.2.1.0/post-migrate.py b/base_export_manager/migrations/8.0.2.1.0/post-migrate.py new file mode 100644 index 000000000..146b535b8 --- /dev/null +++ b/base_export_manager/migrations/8.0.2.1.0/post-migrate.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openerp.addons.base_export_manager import post_init_hook + + +def migrate(cr, version): + """When updating, now you need the post_init_hook.""" + post_init_hook(cr, None) diff --git a/base_export_manager/models/ir_exports_line.py b/base_export_manager/models/ir_exports_line.py index d4c268099..581c39f68 100644 --- a/base_export_manager/models/ir_exports_line.py +++ b/base_export_manager/models/ir_exports_line.py @@ -30,6 +30,10 @@ class IrExportsLine(models.Model): "ir.model.fields", "Third field", domain="[('model_id', '=', model3_id)]") + field4_id = fields.Many2one( + "ir.model.fields", + "Fourth field", + domain="[('model_id', '=', model4_id)]") model1_id = fields.Many2one( "ir.model", "First model", @@ -44,6 +48,10 @@ class IrExportsLine(models.Model): "ir.model", "Third model", compute="_compute_model3_id") + model4_id = fields.Many2one( + "ir.model", + "Fourth model", + compute="_compute_model4_id") sequence = fields.Integer() label = fields.Char( compute="_compute_label") @@ -54,98 +62,117 @@ class IrExportsLine(models.Model): return self.env.context.get("default_model1_id", False) @api.multi - @api.depends("field1_id", "field2_id", "field3_id") + @api.depends("field1_id", "field2_id", "field3_id", "field4_id") def _compute_name(self): """Get the name from the selected fields.""" - for s in self: - s.name = "/".join((s.field_n(num).name - for num in range(1, 4) - if s.field_n(num))) + for one in self: + name = "/".join((one.field_n(num).name for num in range(1, 5) + if one.field_n(num))) + if name != one.name: + one.name = name @api.multi @api.depends("field1_id") def _compute_model2_id(self): """Get the related model for the second field.""" - ir_model = self.env["ir.model"] - for s in self: - s.model2_id = ( - s.field1_id.ttype and - "2" in s.field1_id.ttype and - ir_model.search([("model", "=", s.field1_id.relation)])) + IrModel = self.env["ir.model"] + for one in self: + one.model2_id = ( + one.field1_id.ttype and + "2" in one.field1_id.ttype and + IrModel.search([("model", "=", one.field1_id.relation)])) @api.multi @api.depends("field2_id") def _compute_model3_id(self): """Get the related model for the third field.""" - ir_model = self.env["ir.model"] - for s in self: - s.model3_id = ( - s.field2_id.ttype and - "2" in s.field2_id.ttype and - ir_model.search([("model", "=", s.field2_id.relation)])) + IrModel = self.env["ir.model"] + for one in self: + one.model3_id = ( + one.field2_id.ttype and + "2" in one.field2_id.ttype and + IrModel.search([("model", "=", one.field2_id.relation)])) + + @api.multi + @api.depends("field3_id") + def _compute_model4_id(self): + """Get the related model for the third field.""" + IrModel = self.env["ir.model"] + for one in self: + one.model4_id = ( + one.field3_id.ttype and + "2" in one.field3_id.ttype and + IrModel.search([("model", "=", one.field3_id.relation)])) @api.multi @api.depends('name') def _compute_label(self): """Column label in a user-friendly format and language.""" - translations = self.env["ir.translation"] - for s in self: + for one in self: parts = list() - for num in range(1, 4): - field = s.field_n(num) + for num in range(1, 5): + field = one.field_n(num) if not field: break - # Translate label if possible - parts.append( - translations.search([ - ("type", "=", "field"), - ("lang", "=", self.env.context.get("lang")), - ("name", "=", "%s,%s" % (s.model_n(num).model, - field.name)), - ]).value or - field.display_name) - s.label = ("%s (%s)" % ("/".join(parts), s.name) - if parts and s.name else False) + try: + parts.append( + one.env[one.model_n(num).model]._fields[field.name] + .get_description(one.env)["string"]) + except KeyError: + # No human-readable string available, so empty this + return + one.label = ("%s (%s)" % ("/".join(parts), one.name) + if parts and one.name else False) @api.multi def _inverse_name(self): """Get the fields from the name.""" - for s in self: - # Field names can have up to only 3 indentation levels - parts = s.name.split("/", 2) - - for num in range(1, 4): - try: - # Fail in excessive subfield level - field_name = parts[num - 1] - except IndexError: - # Remove subfield on failure - s[s.field_n(num, True)] = False - else: - model = s.model_n(num) - s[s.field_n(num, True)] = self._get_field_id( - model, field_name) + for one in self: + # Field names can have up to only 4 indentation levels + parts = one.name.split("/") + if len(parts) > 4: + raise exceptions.ValidationError( + _("It's not allowed to have more than 4 levels depth: " + "%s") % one.name) + for num in range(1, 5): + if num > len(parts): + # Empty subfield in this case + one[one.field_n(num, True)] = False + continue + field_name = parts[num - 1] + model = one.model_n(num) + # You could get to failing constraint while populating the + # fields, so we skip the uniqueness check and manually check + # the full constraint after the loop + one.with_context(skip_check=True)[one.field_n(num, True)] = ( + one._get_field_id(model, field_name)) + one._check_name() @api.multi - @api.constrains("field1_id", "field2_id", "field3_id") + @api.constrains("field1_id", "field2_id", "field3_id", "field4_id") def _check_name(self): - for rec_id in self: - if not rec_id.label: + for one in self: + if not one.label: raise exceptions.ValidationError( - _("Field '%s' does not exist") % rec_id.name) - lines = self.search([('export_id', '=', rec_id.export_id.id), - ('name', '=', rec_id.name)]) - if len(lines) > 1: - raise exceptions.ValidationError( - _("Field '%s' already exists") % rec_id.name) + _("Field '%s' does not exist") % one.name) + if not one.env.context.get('skip_check'): + lines = one.search([('export_id', '=', one.export_id.id), + ('name', '=', one.name)]) + if len(lines) > 1: + raise exceptions.ValidationError( + _("Field '%s' already exists") % one.name) - @api.model - def _install_base_export_manager(self): - """Populate ``field*_id`` fields.""" - self.search([("export_id", "=", False)]).unlink() - self.search([("field1_id", "=", False), - ("name", "!=", False)])._inverse_name() + @api.multi + @api.onchange('name') + def _onchange_name(self): + if self.name: + self._inverse_name() + else: + self.field1_id = False + self.field2_id = False + self.field3_id = False + self.field4_id = False @api.model def _get_field_id(self, model, name): @@ -157,9 +184,13 @@ class IrExportsLine(models.Model): :param str name: Technical name of the field, like ``child_ids``. """ - return self.env["ir.model.fields"].search( + field = self.env["ir.model.fields"].search( [("name", "=", name), ("model_id", "=", model.id)]) + if not field.exists(): + raise exceptions.ValidationError( + _("Field '%s' not found in model '%s'") % (name, model.model)) + return field @api.multi def field_n(self, n, only_name=False): diff --git a/base_export_manager/tests/__init__.py b/base_export_manager/tests/__init__.py index 242cd85cd..5a46641eb 100644 --- a/base_export_manager/tests/__init__.py +++ b/base_export_manager/tests/__init__.py @@ -3,4 +3,5 @@ # Copyright 2015 Antiun Ingeniería S.L. - Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import test_ir_exports, test_ir_exports_line +from . import test_ir_exports +from . import test_ir_exports_line diff --git a/base_export_manager/tests/test_ir_exports_line.py b/base_export_manager/tests/test_ir_exports_line.py index acfb3cc3a..bcfa3cb5b 100644 --- a/base_export_manager/tests/test_ir_exports_line.py +++ b/base_export_manager/tests/test_ir_exports_line.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- # Copyright 2015 Antiun Ingenieria S.L. - Javier Iniesta +# Copyright 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp.tests.common import TransactionCase @@ -7,12 +8,19 @@ from openerp.exceptions import ValidationError class TestIrExportsLineCase(TransactionCase): - def setUp(self): super(TestIrExportsLineCase, self).setUp() m_ir_exports = self.env['ir.exports'] self.export = m_ir_exports.create({'name': 'Partner Test', 'resource': 'res.partner'}) + self.partner_model = self.env['ir.model'].search( + [('model', '=', 'res.partner')]) + self.field_parent_id = self.env['ir.model.fields'].search( + [('name', '=', 'parent_id'), + ('model_id', '=', self.partner_model.id)]) + self.field_name = self.env['ir.model.fields'].search( + [('name', '=', 'name'), + ('model_id', '=', self.partner_model.id)]) def test_check_name(self): m_ir_exports_line = self.env['ir.exports.line'] @@ -34,3 +42,46 @@ class TestIrExportsLineCase(TransactionCase): with self.assertRaises(ValidationError): m_ir_exports_line.create({'name': '', 'export_id': self.export.id}) + + def test_model_default_by_context(self): + """Fields inherit the model_id by context.""" + line = self.env["ir.exports.line"].with_context( + default_model1_id=self.export.model_id.id).create({ + "name": "name", + "export_id": self.export.id, + }) + self.assertEqual(line.model1_id, self.export.model_id) + + def test_inverse_name(self): + line = self.env['ir.exports.line'].create({ + 'export_id': self.export.id, + 'name': 'parent_id/parent_id/parent_id/name', + }) + self.assertEqual(line.model1_id, self.partner_model) + self.assertEqual(line.model2_id, self.partner_model) + self.assertEqual(line.field1_id, self.field_parent_id) + self.assertEqual(line.field2_id, self.field_parent_id) + self.assertEqual(line.field3_id, self.field_parent_id) + self.assertEqual(line.field4_id, self.field_name) + + def test_compute_name(self): + line = self.env['ir.exports.line'].create({ + 'export_id': self.export.id, + 'field1_id': self.field_parent_id.id, + 'field2_id': self.field_parent_id.id, + 'field3_id': self.field_parent_id.id, + 'field4_id': self.field_name.id, + }) + self.assertEqual(line.name, 'parent_id/parent_id/parent_id/name') + + def test_write_name_same_root(self): + self.env['ir.exports.line'].create({ + 'export_id': self.export.id, + 'name': 'parent_id', + }) + line = self.env['ir.exports.line'].create({ + 'export_id': self.export.id, + 'name': 'name', + }) + # This should end without errors + line.name = 'parent_id/name' diff --git a/base_export_manager/views/ir_exports.xml b/base_export_manager/views/ir_exports.xml index 106948f7e..c252d47cd 100644 --- a/base_export_manager/views/ir_exports.xml +++ b/base_export_manager/views/ir_exports.xml @@ -47,33 +47,25 @@ + + options="{'no_open': True, 'no_create': True}"/> + attrs="{'readonly': [('model2_id', '=', False)]}" + options="{'no_open': True, 'no_create': True}"/> + attrs="{'readonly': [('model3_id', '=', False)]}" + options="{'no_open': True, 'no_create': True}"/> + From 42282458dd03705a573519a8266da038f02119f8 Mon Sep 17 00:00:00 2001 From: serpentcs Date: Tue, 24 Jan 2017 18:49:06 +0530 Subject: [PATCH 15/18] [MIG]Migrated base_export_manager module. --- base_export_manager/__manifest__.py | 4 +- base_export_manager/models/ir_exports.py | 4 +- base_export_manager/models/ir_exports_line.py | 4 +- base_export_manager/models/ir_model_access.py | 2 +- base_export_manager/models/res_users.py | 2 +- .../static/src/js/base_export_manager.js | 83 ++++--------------- base_export_manager/static/src/xml/base.xml | 4 +- base_export_manager/tests/test_ir_exports.py | 4 +- .../tests/test_ir_exports_line.py | 7 +- 9 files changed, 34 insertions(+), 80 deletions(-) diff --git a/base_export_manager/__manifest__.py b/base_export_manager/__manifest__.py index 5c27c0a07..a99f74e52 100644 --- a/base_export_manager/__manifest__.py +++ b/base_export_manager/__manifest__.py @@ -5,7 +5,7 @@ { 'name': "Manage model export profiles", 'category': 'Personalization', - 'version': '9.0.1.1.0', + 'version': '10.0.1.0.0', 'depends': [ 'web', ], @@ -27,6 +27,6 @@ 'Odoo Community Association (OCA)', 'website': 'http://www.antiun.com', 'license': 'AGPL-3', - 'installable': False, + 'installable': True, 'application': False, } diff --git a/base_export_manager/models/ir_exports.py b/base_export_manager/models/ir_exports.py index 523696085..1e48b93ec 100644 --- a/base_export_manager/models/ir_exports.py +++ b/base_export_manager/models/ir_exports.py @@ -2,8 +2,8 @@ # Copyright 2015-2016 Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import _, api, fields, models -from openerp.exceptions import ValidationError +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError class IrExports(models.Model): diff --git a/base_export_manager/models/ir_exports_line.py b/base_export_manager/models/ir_exports_line.py index 581c39f68..9d901c2e8 100644 --- a/base_export_manager/models/ir_exports_line.py +++ b/base_export_manager/models/ir_exports_line.py @@ -3,8 +3,8 @@ # Copyright 2015-2016 Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields, api, exceptions -from openerp.tools.translate import _ +from odoo import models, fields, api, exceptions +from odoo.tools.translate import _ class IrExportsLine(models.Model): diff --git a/base_export_manager/models/ir_model_access.py b/base_export_manager/models/ir_model_access.py index 24fed7261..7dfc16358 100644 --- a/base_export_manager/models/ir_model_access.py +++ b/base_export_manager/models/ir_model_access.py @@ -3,7 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) -from openerp import models, fields +from odoo import models, fields class IrModelAccess(models.Model): diff --git a/base_export_manager/models/res_users.py b/base_export_manager/models/res_users.py index 759bf266a..4db9dd660 100644 --- a/base_export_manager/models/res_users.py +++ b/base_export_manager/models/res_users.py @@ -3,7 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) -from openerp import api, models +from odoo import api, models class ResUsers(models.Model): diff --git a/base_export_manager/static/src/js/base_export_manager.js b/base_export_manager/static/src/js/base_export_manager.js index a5a642e9b..e24d15ed9 100644 --- a/base_export_manager/static/src/js/base_export_manager.js +++ b/base_export_manager/static/src/js/base_export_manager.js @@ -5,58 +5,13 @@ odoo.define('base_export_manager.base_export_manager', function(require) { 'use strict'; - var jQuery = require('$'); - var DataExport = require('web.DataExport'); var core = require('web.core'); var Model = require('web.DataModel'); var ListView = require('web.ListView'); var Sidebar = require('web.Sidebar'); var _t = core._t; - var Session = require('web.Session'); - var session = require('web.session'); - - - DataExport.include({ - do_load_export_field: function(field_list) { - var export_node = this.$el.find("#fields_list"); - _(field_list).each(function (field) { - export_node.append(new Option(field.label + ' (' + field.name + ')', field.name)); - }); - }, - add_field: function(field_id, string) { - var field_list = this.$el.find('#fields_list'); - if (this.$el.find("#fields_list option[value='" + field_id + "']") && - !this.$el.find("#fields_list option[value='" + field_id + "']").length) - { - field_list.append(new Option(string + ' (' + field_id + ')', field_id)); - } - }, - }); - - - Session.include({ - get_export_models: function() { - if (!this.uid) { - return $.when().resolve(false); - } - var Users = new Model('res.users'); - var export_models = Users.call('fetch_export_models', []); - return export_models; - }, - }); ListView.include({ - view_loading: function(fvg) { - this._super(fvg); - this.is_export_manager(); - }, - is_export_manager: function () { - var self = this; - $.when(self.session.get_export_models()).then(function - (export_models) { - self.export_models=export_models; - }); - }, /** * Instantiate and render the sidebar. * Sets this.sidebar @@ -66,26 +21,24 @@ odoo.define('base_export_manager.base_export_manager', function(require) { **/ render_sidebar: function($node) { var self = this; - self.render_export_enable = jQuery.inArray( this.model, self.export_models ); - if (!this.sidebar && this.options.sidebar) { - this.sidebar = new Sidebar(this, {editable: this.is_action_enabled('edit')}); - if (this.fields_view.toolbar) { - this.sidebar.add_toolbar(this.fields_view.toolbar); - } - this.sidebar.add_items('other', _.compact([ - self.render_export_enable >= 0 && {label: _t("Export"), callback: this.on_sidebar_export}, - this.fields_view.fields.active && {label: _t("Archive"), callback: this.do_archive_selected}, - this.fields_view.fields.active && {label: _t("Unarchive"), callback: this.do_unarchive_selected}, - this.is_action_enabled('delete') && {label: _t('Delete'), callback: this.do_delete_selected} - ])); - - $node = $node || this.options.$sidebar; - this.sidebar.appendTo($node); - - // Hide the sidebar by default (it will be shown as soon as a record is selected) - this.sidebar.do_hide(); - } + this._super($node); + var Users = new Model('res.users'); + Users.call('fetch_export_models', []).done(function(export_models){ + self.export_models = export_models; + self.render_export_enable = jQuery.inArray( self.model, self.export_models ); + if(self.sidebar && self.sidebar.items && self.sidebar.items.other){ + var items_data = []; + _.each(self.sidebar.items.other,function(rec){ + if(rec.label != _t("Export")){ + items_data.push(rec); + } + }); + self.sidebar.items.other = items_data; + self.sidebar.add_items('other', _.compact([ + self.render_export_enable >= 0 && {label: _t("Export"), callback: self.on_sidebar_export}, + ])); + } + }); }, }); - }); diff --git a/base_export_manager/static/src/xml/base.xml b/base_export_manager/static/src/xml/base.xml index b9b51f28a..b26077a69 100644 --- a/base_export_manager/static/src/xml/base.xml +++ b/base_export_manager/static/src/xml/base.xml @@ -1,8 +1,8 @@ - - + + () diff --git a/base_export_manager/tests/test_ir_exports.py b/base_export_manager/tests/test_ir_exports.py index 983c995ee..f5c9041ea 100644 --- a/base_export_manager/tests/test_ir_exports.py +++ b/base_export_manager/tests/test_ir_exports.py @@ -2,8 +2,8 @@ # © 2015 Antiun Ingeniería S.L. - Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.exceptions import ValidationError -from openerp.tests.common import TransactionCase +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase class TestIrExportsCase(TransactionCase): diff --git a/base_export_manager/tests/test_ir_exports_line.py b/base_export_manager/tests/test_ir_exports_line.py index bcfa3cb5b..b9639e0a4 100644 --- a/base_export_manager/tests/test_ir_exports_line.py +++ b/base_export_manager/tests/test_ir_exports_line.py @@ -3,8 +3,8 @@ # Copyright 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.tests.common import TransactionCase -from openerp.exceptions import ValidationError +from odoo.tests.common import TransactionCase +from odoo.exceptions import ValidationError class TestIrExportsLineCase(TransactionCase): @@ -37,8 +37,9 @@ class TestIrExportsLineCase(TransactionCase): m_ir_exports_line = self.env['ir.exports.line'] export_line = m_ir_exports_line.create({'name': 'parent_id/name', 'export_id': self.export.id}) + check_label = " (res.partner) (parent_id/name)" self.assertEqual(export_line.with_context(lang="en_US").label, - "Related Company/Name (parent_id/name)") + "Related Company (res.partner)/Name" + check_label) with self.assertRaises(ValidationError): m_ir_exports_line.create({'name': '', 'export_id': self.export.id}) From 4340c0572f02872b6d40c610c3ded42edbee96cb Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 16 Jun 2017 13:57:42 +0200 Subject: [PATCH 16/18] [MIG][base_export_manager] Migrate features from 8.0 --- base_export_manager/__manifest__.py | 3 +-- base_export_manager/migrations/8.0.2.1.0/post-migrate.py | 9 --------- base_export_manager/static/src/js/base_export_manager.js | 7 +++++-- 3 files changed, 6 insertions(+), 13 deletions(-) delete mode 100644 base_export_manager/migrations/8.0.2.1.0/post-migrate.py diff --git a/base_export_manager/__manifest__.py b/base_export_manager/__manifest__.py index a99f74e52..7f5277b58 100644 --- a/base_export_manager/__manifest__.py +++ b/base_export_manager/__manifest__.py @@ -10,7 +10,6 @@ 'web', ], 'data': [ - 'data/ir_exports_data.xml', 'views/assets.xml', 'views/ir_exports.xml', 'views/ir_model.xml', @@ -25,7 +24,7 @@ 'LasLabs, ' 'Ursa Information Systems, ' 'Odoo Community Association (OCA)', - 'website': 'http://www.antiun.com', + 'website': 'https://www.tecnativa.com', 'license': 'AGPL-3', 'installable': True, 'application': False, diff --git a/base_export_manager/migrations/8.0.2.1.0/post-migrate.py b/base_export_manager/migrations/8.0.2.1.0/post-migrate.py deleted file mode 100644 index 146b535b8..000000000 --- a/base_export_manager/migrations/8.0.2.1.0/post-migrate.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2016 Jairo Llopis -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.addons.base_export_manager import post_init_hook - - -def migrate(cr, version): - """When updating, now you need the post_init_hook.""" - post_init_hook(cr, None) diff --git a/base_export_manager/static/src/js/base_export_manager.js b/base_export_manager/static/src/js/base_export_manager.js index e24d15ed9..b31e5df74 100644 --- a/base_export_manager/static/src/js/base_export_manager.js +++ b/base_export_manager/static/src/js/base_export_manager.js @@ -35,8 +35,11 @@ odoo.define('base_export_manager.base_export_manager', function(require) { }); self.sidebar.items.other = items_data; self.sidebar.add_items('other', _.compact([ - self.render_export_enable >= 0 && {label: _t("Export"), callback: self.on_sidebar_export}, - ])); + self.render_export_enable >= 0 && { + label: _t("Export"), + callback: self.on_sidebar_export + }, + ])); } }); }, From 10a070eeabde4d6ab0190b4e543130f274adcc7e Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Thu, 22 Jun 2017 12:22:52 +0200 Subject: [PATCH 17/18] [FIX][base_export_manager] Make tests pass --- base_export_manager/tests/test_ir_exports_line.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/base_export_manager/tests/test_ir_exports_line.py b/base_export_manager/tests/test_ir_exports_line.py index b9639e0a4..00a2afb61 100644 --- a/base_export_manager/tests/test_ir_exports_line.py +++ b/base_export_manager/tests/test_ir_exports_line.py @@ -37,9 +37,8 @@ class TestIrExportsLineCase(TransactionCase): m_ir_exports_line = self.env['ir.exports.line'] export_line = m_ir_exports_line.create({'name': 'parent_id/name', 'export_id': self.export.id}) - check_label = " (res.partner) (parent_id/name)" self.assertEqual(export_line.with_context(lang="en_US").label, - "Related Company (res.partner)/Name" + check_label) + "Related Company/Name (parent_id/name)") with self.assertRaises(ValidationError): m_ir_exports_line.create({'name': '', 'export_id': self.export.id}) From bcf8cc250d5dbee45345c447307be2095471cafc Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Mon, 3 Jul 2017 14:05:00 +0200 Subject: [PATCH 18/18] Cleanup as requested in PR. --- base_export_manager/__manifest__.py | 3 +-- base_export_manager/models/ir_exports_line.py | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/base_export_manager/__manifest__.py b/base_export_manager/__manifest__.py index 7f5277b58..160704896 100644 --- a/base_export_manager/__manifest__.py +++ b/base_export_manager/__manifest__.py @@ -19,8 +19,7 @@ 'qweb': [ "static/src/xml/base.xml", ], - 'author': 'Antiun Ingeniería S.L., ' - 'Tecnativa, ' + 'author': 'Tecnativa, ' 'LasLabs, ' 'Ursa Information Systems, ' 'Odoo Community Association (OCA)', diff --git a/base_export_manager/models/ir_exports_line.py b/base_export_manager/models/ir_exports_line.py index 9d901c2e8..d9292f75e 100644 --- a/base_export_manager/models/ir_exports_line.py +++ b/base_export_manager/models/ir_exports_line.py @@ -3,8 +3,7 @@ # Copyright 2015-2016 Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields, api, exceptions -from odoo.tools.translate import _ +from odoo import _, models, fields, api, exceptions class IrExportsLine(models.Model):