diff --git a/l10n_be_intrastat_product/__manifest__.py b/l10n_be_intrastat_product/__manifest__.py index d0111b40..28597049 100644 --- a/l10n_be_intrastat_product/__manifest__.py +++ b/l10n_be_intrastat_product/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Intrastat Product Declaration for Belgium', - 'version': '11.0.1.1.0', + 'version': '11.0.1.1.1', 'category': 'Intrastat', 'license': 'AGPL-3', 'summary': 'Intrastat Product Declaration for Belgium', diff --git a/l10n_be_intrastat_product/models/l10n_be_intrastat_product_declaration.py b/l10n_be_intrastat_product/models/l10n_be_intrastat_product_declaration.py index 0769214c..b51afd9e 100644 --- a/l10n_be_intrastat_product/models/l10n_be_intrastat_product_declaration.py +++ b/l10n_be_intrastat_product/models/l10n_be_intrastat_product_declaration.py @@ -3,9 +3,12 @@ from odoo import api, fields, models, _ from odoo.exceptions import UserError, RedirectWarning +from odoo.addons.report_xlsx_helper.report.report_xlsx_abstract \ + import ReportXlsxAbstract from lxml import etree import logging +_render = ReportXlsxAbstract._render _logger = logging.getLogger(__name__) _INTRASTAT_XMLNS = 'http://www.onegate.eu/2010-01-01' @@ -335,6 +338,38 @@ def _generate_xml(self): ) return xml_string + def _xls_computation_line_fields(self): + res = super()._xls_computation_line_fields() + i = res.index('product_origin_country') + if self.type == 'dispatches': + res.insert(i + 1, 'vat_number') + else: + res.pop(i) + return res + + def _xls_declaration_line_fields(self): + res = super()._xls_declaration_line_fields() + if self.type == 'dispatches': + i = res.index('hs_code') + res.insert(i + 1, 'vat_number') + res.insert(i + 1, 'product_origin_country') + return res + + def _xls_template(self): + res = super()._xls_template() + res['vat_number'] = { + 'header': { + 'type': 'string', + 'value': _('VAT Number'), + }, + 'line': { + 'value': _render( + "line.vat_number or ''"), + }, + 'width': 18, + } + return res + class L10nBeIntrastatProductComputationLine(models.Model): _name = 'l10n.be.intrastat.product.computation.line' diff --git a/l10n_be_intrastat_product/views/l10n_be_intrastat_product.xml b/l10n_be_intrastat_product/views/l10n_be_intrastat_product.xml index 79a1f4ec..f13f9c71 100644 --- a/l10n_be_intrastat_product/views/l10n_be_intrastat_product.xml +++ b/l10n_be_intrastat_product/views/l10n_be_intrastat_product.xml @@ -11,7 +11,11 @@ - 1/> + 1 + + + + {'invisible': [('type', '=', 'arrivals')]} @@ -32,8 +36,31 @@ + + + + {'column_invisible': [('parent.type', '=', 'arrivals')]} + + + + - 1/> + 1 @@ -44,6 +71,10 @@ primary + + + {'invisible': [('type', '=', 'arrivals')]} + @@ -63,8 +94,28 @@ primary + + + + {'column_invisible': [('parent.type', '=', 'arrivals')]} + + + diff --git a/web_column_invisible_fix/README.rst b/web_column_invisible_fix/README.rst new file mode 100644 index 00000000..69a7fd7a --- /dev/null +++ b/web_column_invisible_fix/README.rst @@ -0,0 +1,13 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: https://www.gnu.org/licenses/agpl + :alt: License: AGPL-3 + +========================== +Web 'column_invisible' fix +========================== + +The 'column_invisible' modifier doesn't work for O2M fields +where the tree view is not embedded in the form view. + +We have created a PR (cf. https://github.com/odoo/odoo/pull/30982) which fixes this limitation. +Until this PR is merged by Odoo we recommend to install the web_column_invisible_fix module. diff --git a/web_column_invisible_fix/__init__.py b/web_column_invisible_fix/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/web_column_invisible_fix/__manifest__.py b/web_column_invisible_fix/__manifest__.py new file mode 100644 index 00000000..8151cd40 --- /dev/null +++ b/web_column_invisible_fix/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2019 Noviat. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': "Web 'column_invisible' fix", + 'version': '11.0.1.0.0', + 'license': 'AGPL-3', + 'author': 'Noviat', + 'website': 'http://www.noviat.com', + 'category': 'Web', + 'depends': ['web'], + 'data': [ + 'views/assets_backend.xml', + ], + 'installable': True, +} diff --git a/web_column_invisible_fix/static/description/icon.png b/web_column_invisible_fix/static/description/icon.png new file mode 100644 index 00000000..32740c0c Binary files /dev/null and b/web_column_invisible_fix/static/description/icon.png differ diff --git a/web_column_invisible_fix/static/src/js/relational_fields.js b/web_column_invisible_fix/static/src/js/relational_fields.js new file mode 100644 index 00000000..34b619d0 --- /dev/null +++ b/web_column_invisible_fix/static/src/js/relational_fields.js @@ -0,0 +1,36 @@ +/* Copyright 2019 Noviat (www.noviat.com) */ + +odoo.define("web_column_invisible_fix.relational_fields", function (require) { + "use strict"; + + var relational_fields = require('web.relational_fields'); + + relational_fields.FieldOne2Many.include({ + + init: function () { + var self = this; + this._super.apply(this, arguments); + var todo = false; + var arch = this.view && this.view.arch; + if (arch) { + /* + Set columnInvisibleFields which have not been set before. + This is the case for O2M fields where the tree view is not embedded in the form view. + */ + if (typeof this.attrs.columnInvisibleFields === "undefined") { + this.attrs.columnInvisibleFields = {}; + _.each(arch.children, function (child) { + if (child.attrs && child.attrs.modifiers && child.attrs.modifiers.column_invisible) { + self.attrs.columnInvisibleFields[child.attrs.name] = child.attrs.modifiers.column_invisible; + todo = true; + }; + }); + }; + }; + if (todo) { + this._processColumnInvisibleFields(); + }; + }, + }); + +}); diff --git a/web_column_invisible_fix/views/assets_backend.xml b/web_column_invisible_fix/views/assets_backend.xml new file mode 100644 index 00000000..c8e47fb9 --- /dev/null +++ b/web_column_invisible_fix/views/assets_backend.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file