From c33db334d7a8321c395ca57f187d2898972786b7 Mon Sep 17 00:00:00 2001 From: Luc De Meyer Date: Wed, 17 Apr 2019 20:48:49 +0200 Subject: [PATCH] [MIG] intrastat_product: Migration to 11.0 * Small fixes in intrastat_base * account_tax_template --- intrastat_product/__init__.py | 3 +- intrastat_product/__manifest__.py | 12 +- .../data/intrastat_transport_mode.xml | 1 - intrastat_product/i18n/intrastat_product.pot | 1171 +++++++++++++++-- intrastat_product/models/__init__.py | 1 - intrastat_product/models/account_invoice.py | 51 +- intrastat_product/models/hs_code.py | 10 +- .../models/intrastat_product_declaration.py | 451 ++++--- intrastat_product/models/intrastat_region.py | 26 +- .../models/intrastat_transaction.py | 21 +- .../models/intrastat_transport_mode.py | 20 +- intrastat_product/models/intrastat_unit.py | 11 +- intrastat_product/models/res_company.py | 25 +- .../models/res_config_settings.py | 10 +- intrastat_product/models/sale_order.py | 7 +- intrastat_product/models/stock_warehouse.py | 8 +- intrastat_product/report/__init__.py | 1 + .../report/intrastat_product_report_xls.py | 276 ++++ intrastat_product/static/description/icon.png | Bin 0 -> 9455 bytes .../views/intrastat_product_declaration.xml | 37 +- .../views/res_config_settings.xml | 116 +- 21 files changed, 1787 insertions(+), 471 deletions(-) create mode 100644 intrastat_product/report/__init__.py create mode 100644 intrastat_product/report/intrastat_product_report_xls.py create mode 100644 intrastat_product/static/description/icon.png diff --git a/intrastat_product/__init__.py b/intrastat_product/__init__.py index cde864b..bf588bc 100644 --- a/intrastat_product/__init__.py +++ b/intrastat_product/__init__.py @@ -1,3 +1,2 @@ -# -*- coding: utf-8 -*- - from . import models +from . import report diff --git a/intrastat_product/__manifest__.py b/intrastat_product/__manifest__.py index 1025e7c..b5a61a4 100644 --- a/intrastat_product/__manifest__.py +++ b/intrastat_product/__manifest__.py @@ -1,14 +1,13 @@ -# -*- coding: utf-8 -*- -# © 2011-2017 Akretion (http://www.akretion.com) -# © 2009-2017 Noviat (http://www.noviat.com) -# © 2018 brain-tec AG (http://www.braintec-group.com) +# Copyright 2011-2017 Akretion (http://www.akretion.com) +# Copyright 2009-2019 Noviat (http://www.noviat.com) +# Copyright 2018 brain-tec AG (http://www.braintec-group.com) # @author Alexis de Lattre # @author Luc de Meyer # @author Kumar Aberer { 'name': 'Intrastat Product', - 'version': '11.0.1.1.0', + 'version': '11.0.1.2.0', 'category': 'Intrastat', 'license': 'AGPL-3', 'summary': 'Base module for Intrastat Product', @@ -19,8 +18,9 @@ 'product_harmonized_system', 'sale_stock', 'purchase', + 'report_xlsx_helper', ], - 'conflicts': ['report_intrastat'], + 'excludes': ['report_intrastat'], 'data': [ 'views/hs_code.xml', 'views/intrastat_region.xml', diff --git a/intrastat_product/data/intrastat_transport_mode.xml b/intrastat_product/data/intrastat_transport_mode.xml index aa59466..bfab36e 100644 --- a/intrastat_product/data/intrastat_transport_mode.xml +++ b/intrastat_product/data/intrastat_transport_mode.xml @@ -30,7 +30,6 @@ 7 Fixed installations Fixed transport installations (e.g. pipelines, high-tension cables) - 8 diff --git a/intrastat_product/i18n/intrastat_product.pot b/intrastat_product/i18n/intrastat_product.pot index 6b1f00f..9172ec7 100644 --- a/intrastat_product/i18n/intrastat_product.pot +++ b/intrastat_product/i18n/intrastat_product.pot @@ -4,10 +4,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 18:43+0000\n" -"PO-Revision-Date: 2015-05-27 18:43+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,171 +14,1168 @@ msgstr "" "Plural-Forms: \n" #. module: intrastat_product -#: field:report.intrastat.code,active:0 +#: selection:intrastat.product.declaration,month:0 +msgid "01" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "02" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "03" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "04" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "05" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "06" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "07" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "08" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "09" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "10" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "11" +msgstr "" + +#. module: intrastat_product +#: selection:intrastat.product.declaration,month:0 +msgid "12" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +msgid "Intrastat Product Declaration " +msgstr "" + +#. module: intrastat_product +#: sql_constraint:intrastat.product.declaration:0 +msgid "A declaration of the same type already exists for this month !\n" +"You should update the existing declaration or change the revision number of this one." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:91 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_amount_accessory_cost_company_currency +#, python-format +msgid "Accessory Costs" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_action +msgid "Action" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit_active msgid "Active" msgstr "" #. module: intrastat_product -#: help:product.category,intrastat_id:0 -msgid "Code from the Harmonised System. If this code is not set on the product itself, it will be read here, on the related product category." +#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_4 +msgid "Air" msgstr "" #. module: intrastat_product -#: help:product.template,intrastat_id:0 -msgid "Code from the Harmonised System. Nomenclature is available from the World Customs Organisation, see http://www.wcoomd.org/. Some countries have made their own extensions to this nomenclature." +#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_4 +msgid "Air Transport" msgstr "" #. module: intrastat_product -#: help:report.intrastat.code,intrastat_code:0 -msgid "Code used for the Intrastat declaration. Must be part of the 'Combined Nomenclature' (CN), cf http://en.wikipedia.org/wiki/Combined_NomenclatureMust have 8 digits with sometimes a 9th digit." +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line_amount_accessory_cost_company_currency +msgid "Amount in company currency of the accessory costs related to this invoice line (by default, these accessory costs are computed at the pro-rata of the amount of each invoice line." msgstr "" #. module: intrastat_product -#: field:product.template,origin_country_id:0 -msgid "Country of Origin" +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line_amount_company_currency +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line_amount_company_currency +msgid "Amount in company currency to write in the declaration. Amount in company currency = amount in invoice currency converted to company currency with the rate of the invoice date." msgstr "" #. module: intrastat_product -#: help:product.template,origin_country_id:0 -msgid "Country of origin of the product i.e. product 'made in ____'. If you have different countries of origin depending on the supplier from which you purchased the product, leave this field empty and use the equivalent field on the 'product supplier info' form." +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat_arrivals +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat_arrivals +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search +msgid "Arrivals" msgstr "" #. module: intrastat_product -#: field:report.intrastat.code,create_uid:0 +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +msgid "Back to Draft" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_code +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction_code +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode_code +msgid "Code" +msgstr "" + +#. module: intrastat_product +#: sql_constraint:intrastat.region:0 +#: sql_constraint:intrastat.transaction:0 +#: sql_constraint:intrastat.transport_mode:0 +msgid "Code must be unique." +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search +msgid "Code or Description" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_res_company +msgid "Companies" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_company_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_company_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_company_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_company_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction_company_id +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search +msgid "Company" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_company_country_code +msgid "Company Country Code" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_company_currency_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_company_currency_id +msgid "Company currency" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:225 +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:236 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_computation_line_ids +#, python-format +msgid "Computation Lines" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:261 +#, python-format +msgid "Conversion from Intrastat Supplementary Unit '%s' to Unit of Measure is not implemented yet." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:276 +#, python-format +msgid "Conversion from unit of measure '%s' to '%s' is not implemented yet." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:310 +#, python-format +msgid "Conversion from unit of measure '%s' to 'Kg' is not implemented yet. It is needed for product '%s'." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_src_dest_country_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_src_dest_country_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_country_id +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_country_id +msgid "Country" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_country_code +msgid "Country Code" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_product_origin_country_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_product_origin_country_id +msgid "Country of Origin of the Product" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:66 +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line_src_dest_country_id +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line_src_dest_country_id +#, python-format +msgid "Country of Origin/Destination" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line_product_origin_country_id +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line_product_origin_country_id +msgid "Country of origin of the product i.e. product 'made in ____'" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_create_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_create_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_create_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_create_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction_create_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode_create_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit_create_uid msgid "Created by" msgstr "" #. module: intrastat_product -#: field:report.intrastat.code,create_date:0 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_create_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_create_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_create_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_create_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction_create_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode_create_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit_create_date msgid "Created on" msgstr "" #. module: intrastat_product -#: field:report.intrastat.code,description:0 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_currency_id +msgid "Currency" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search +msgid "Date" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form +msgid "Declaration" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_declaration_line_id +msgid "Declaration Line" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:227 +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:238 +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +#, python-format +msgid "Declaration Lines" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:137 +#, python-format +msgid "Declaration for Arrivals" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:139 +#, python-format +msgid "Declaration for Dispatches" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat_incoterm_id +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat_incoterm_id +msgid "Default Incoterm for Intrastat" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat_region_id +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat_region_id +msgid "Default Intrastat Region" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat_transaction_out_invoice +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat_transaction_out_invoice +msgid "Default Intrastat Transaction For Customer Invoice" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat_transaction_in_invoice +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat_transaction_in_invoice +msgid "Default Intrastat Transaction For Supplier Invoices" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat_transaction_in_refund +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat_transaction_in_refund +msgid "Default Intrastat Transaction For Supplier Refunds" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat_transaction_out_refund +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat_transaction_out_refund +msgid "Default Intrastat Transaction for Customer Refunds" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat_transport_id +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat_transport_id +msgid "Default Transport Mode" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_description +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction_description +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode_description +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit_description msgid "Description" msgstr "" #. module: intrastat_product -#: field:report.intrastat.code,display_name:0 +#: model:ir.ui.view,arch_db:intrastat_product.invoice_form +msgid "Destination Country" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.invoice_supplier_form +msgid "Destination Region" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_account_invoice_src_dest_country_id +msgid "Destination country for dispatches. Origin country for arrivals." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat_dispatches +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat_dispatches +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search +msgid "Dispatches" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_display_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_display_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_display_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_display_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction_display_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode_display_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit_display_name +#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls_display_name msgid "Display Name" msgstr "" #. module: intrastat_product -#: field:report.intrastat.code,intrastat_code:0 -msgid "European Intrastat Code" +#: selection:intrastat.product.declaration,state:0 +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search +msgid "Done" msgstr "" #. module: intrastat_product -#: help:report.intrastat.code,name:0 -msgid "Full length Harmonized System code (digits only). Full list is available from the World Customs Organisation, see http://www.wcoomd.org" +#: selection:intrastat.product.declaration,state:0 +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search +msgid "Draft" msgstr "" #. module: intrastat_product -#: model:ir.model,name:intrastat_product.model_report_intrastat_code +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +msgid "Excel Export" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:146 +#, python-format +msgid "Extended" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:78 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_amount_company_currency +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_amount_company_currency +#, python-format +msgid "Fiscal Value" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_7 +msgid "Fixed installations" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_7 +msgid "Fixed transport installations (e.g. pipelines, high-tension cables)" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:724 +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +#, python-format +msgid "Generate Declaration Lines" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:612 +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +#, python-format +msgid "Generate Lines from Invoices" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:747 +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +#, python-format +msgid "Generate XML Declaration File" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:644 +#, python-format +msgid "Generate lines from invoices: results" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:210 +#, python-format +msgid "Go to Accounting Configuration Settings screen" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search +msgid "Group By" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_hs_code msgid "H.S. Code" msgstr "" #. module: intrastat_product -#: field:report.intrastat.code,name:0 -msgid "H.S. code" +#: model:ir.ui.menu,name:intrastat_product.intrastat_code_menu +msgid "H.S. Codes" msgstr "" #. module: intrastat_product -#: code:addons/intrastat_product/intrastat.py:73 -#, python-format -msgid "H.S. codes should only contain digits. It is not the case of H.S. code '%s'." -msgstr "" - -#. module: intrastat_product -#: field:report.intrastat.code,id:0 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit_id +#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls_id msgid "ID" msgstr "" #. module: intrastat_product -#: model:ir.actions.act_window,name:intrastat_product.product_intrastat_code_act -#: model:ir.ui.menu,name:intrastat_product.product_intrastat_code_menu -#: field:product.category,intrastat_id:0 -#: field:product.template,intrastat_id:0 -#: view:report.intrastat.code:intrastat_product.product_intrastat_code_form +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat_accessory_costs +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat_accessory_costs +msgid "Include Accessory Costs in Fiscal Value of Product" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:157 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_incoterm_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_incoterm_id +#, python-format +msgid "Incoterm" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_8 +msgid "Inland waterway" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_8 +msgid "Inland waterway transport" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_res_company_intrastat_incoterm_id +#: model:ir.model.fields,help:intrastat_product.field_res_config_settings_intrastat_incoterm_id +msgid "International Commercial Terms are a series of predefined commercial terms used in international transactions." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:54 +#: model:ir.model.fields,field_description:intrastat_product.field_account_invoice_line_hs_code_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_hs_code_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_hs_code_id +#, python-format msgid "Intrastat Code" msgstr "" #. module: intrastat_product -#: view:report.intrastat.code:intrastat_product.product_intrastat_code_tree -msgid "Intrastat Codes" +#: code:addons/intrastat_product/models/hs_code.py:26 +#, python-format +msgid "Intrastat Codes should contain 8 digits. This is not the case for Intrastat Code '%s' which has %d digits." msgstr "" #. module: intrastat_product -#: view:product.category:intrastat_product.product_category_form_view -msgid "Intrastat Properties" +#: code:addons/intrastat_product/models/hs_code.py:21 +#, python-format +msgid "Intrastat Codes should only contain digits. This is not the case for code '%s'." msgstr "" #. module: intrastat_product -#: field:report.intrastat.code,write_uid:0 +#: model:ir.model.fields,field_description:intrastat_product.field_account_invoice_intrastat_country +msgid "Intrastat Country" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_invoice_intrastat +#: model:ir.model.fields,field_description:intrastat_product.field_res_company_intrastat +#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings_intrastat +#: model:ir.model.fields,field_description:intrastat_product.field_sale_order_intrastat +msgid "Intrastat Declaration" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form +msgid "Intrastat Declaration Line" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_tree +msgid "Intrastat Declaration Lines" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_graph +msgid "Intrastat Product" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_intrastat_product_computation_line +msgid "Intrastat Product Computataion Lines" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_computation_line_ids +msgid "Intrastat Product Computation Lines" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_parent_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_parent_id +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +msgid "Intrastat Product Declaration" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_intrastat_product_declaration_line +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_declaration_line_ids +msgid "Intrastat Product Declaration Lines" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_tree +msgid "Intrastat Product Declarations" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_intrastat_product_declaration +msgid "Intrastat Product Report Base Object" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:177 +#: model:ir.model,name:intrastat_product.model_intrastat_region +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_region_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_region_id +#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse_region_id +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_region_view_form +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_region_view_tree +#, python-format +msgid "Intrastat Region" +msgstr "" + +#. module: intrastat_product +#: model:ir.actions.act_window,name:intrastat_product.intrastat_region_action +#: model:ir.ui.menu,name:intrastat_product.intrastat_region_menu +msgid "Intrastat Regions" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_hs_code_intrastat_unit_id +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line_intrastat_unit_id +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line_intrastat_unit_id +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_unit_form +msgid "Intrastat Supplementary Unit" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_intrastat_unit +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_unit_tree +msgid "Intrastat Supplementary Units" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:105 +#: model:ir.model,name:intrastat_product.model_intrastat_transaction +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_transaction_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_transaction_id +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form +#, python-format +msgid "Intrastat Transaction" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_invoice_intrastat_transaction_id +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_form +msgid "Intrastat Transaction Type" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_tree +msgid "Intrastat Transaction Types" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_intrastat_transport_mode +#: model:ir.model.fields,field_description:intrastat_product.field_account_invoice_intrastat_transport_id +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_form +msgid "Intrastat Transport Mode" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_tree +msgid "Intrastat Transportat Modes" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_account_invoice_intrastat_transaction_id +msgid "Intrastat nature of transaction" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:186 +#, python-format +msgid "Invalid Year !" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:187 +#: model:ir.model,name:intrastat_product.model_account_invoice +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_invoice_id +#, python-format +msgid "Invoice" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_account_invoice_line +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_invoice_line_id +msgid "Invoice Line" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form +msgid "Kg" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line___last_update +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration___last_update +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line___last_update +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region___last_update +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction___last_update +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode___last_update +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit___last_update +#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls___last_update +msgid "Last Modified on" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_write_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_write_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_write_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_write_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction_write_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode_write_uid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit_write_uid msgid "Last Updated by" msgstr "" #. module: intrastat_product -#: field:report.intrastat.code,write_date:0 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_write_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_write_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_write_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_write_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction_write_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode_write_date +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit_write_date msgid "Last Updated on" msgstr "" #. module: intrastat_product -#: view:report.intrastat.code:intrastat_product.product_intrastat_code_form -#: field:report.intrastat.code,product_categ_ids:0 -msgid "Product Categories" -msgstr "" - -#. module: intrastat_product -#: model:ir.model,name:intrastat_product.model_product_category -msgid "Product Category" -msgstr "" - -#. module: intrastat_product -#: model:ir.model,name:intrastat_product.model_product_template -msgid "Product Template" -msgstr "" - -#. module: intrastat_product -#: view:report.intrastat.code:intrastat_product.product_intrastat_code_form -#: field:report.intrastat.code,product_tmpl_ids:0 -msgid "Products" -msgstr "" - -#. module: intrastat_product -#: view:report.intrastat.code:intrastat_product.product_intrastat_code_search -msgid "Search Intrastat Codes" -msgstr "" - -#. module: intrastat_product -#: help:report.intrastat.code,intrastat_uom_id:0 -msgid "Select the unit of measure if one is required for this particular Intrastat Code (other than the weight in Kg). If no particular unit of measure is required, leave empty." -msgstr "" - -#. module: intrastat_product -#: help:report.intrastat.code,description:0 -msgid "Short text description of the H.S. category" -msgstr "" - -#. module: intrastat_product -#: code:addons/intrastat_product/intrastat.py:82 +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:520 #, python-format -msgid "The field Intrastat Code should contain 8 or 9 digits. It is not the case of Intrastat Code '%s'." +msgid "Missing H.S. code on product %s. This product is present in invoice %s." msgstr "" #. module: intrastat_product -#: code:addons/intrastat_product/intrastat.py:77 +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:249 #, python-format -msgid "The field Intrastat Code should only contain digits. It is not the case of Intrastat Code '%s'." +msgid "Missing unit of measure on the line with %d product(s) '%s' on invoice '%s'." msgstr "" #. module: intrastat_product -#: sql_constraint:report.intrastat.code:0 -msgid "This H.S. code already exists in Odoo !" +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:293 +#, python-format +msgid "Missing weight on product %s." msgstr "" #. module: intrastat_product -#: field:report.intrastat.code,intrastat_uom_id:0 -msgid "UoM for Intrastat Report" +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_month +msgid "Month" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit_name +msgid "Name" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_search +msgid "Name, Code or Description" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line_weight +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line_weight +msgid "Net weight in Kg" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:239 +#, python-format +msgid "No" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:757 +#, python-format +msgid "No XML File has been generated." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:631 +#, python-format +msgid "No records found for the selected period !" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_note +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +msgid "Notes" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_num_decl_lines +msgid "Number of Declaration Lines" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.invoice_supplier_form +msgid "Origin Country" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.invoice_form +msgid "Origin Region" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_account_invoice_src_dest_region_id +msgid "Origin region for dispatches, destination region for arrivals. This field is used for the Intrastat Declaration." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_invoice_src_dest_country_id +msgid "Origin/Destination Country" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_invoice_src_dest_region_id +msgid "Origin/Destination Region" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_9 +msgid "Own propulsion" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_9 +msgid "Own propulsion (imported or exported means of transport crossing the border under their own power, e.g. aircraft, lorries, boats, etc.)" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_year_month +msgid "Period" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:253 +#, python-format +msgid "Please adjust this line manually." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:265 +#, python-format +msgid "Please correct the Intrastat Supplementary Unit settings and regenerate the lines or adjust the lines with Intrastat Code '%s' manually" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:296 +#, python-format +msgid "Please correct the product record and regenerate the lines or adjust the impacted lines manually" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:280 +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:314 +#, python-format +msgid "Please correct the unit of measure settings and regenerate the lines or adjust the impacted lines manually" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_5 +msgid "Post" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_5 +msgid "Postal consignments" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:31 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_product_id +#, python-format +msgid "Product" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:42 +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_tree +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_tree +#, python-format +msgid "Product C/O" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_sale_order +msgid "Quotation" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_2 +msgid "Rail" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_2 +msgid "Railway transport (including lorries on railway wagons)" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit_uom_id +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search +msgid "Regular UoM" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form +msgid "Related Transactions" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_reporting_level +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_reporting_level +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_reporting_level +msgid "Reporting Level" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_revision +msgid "Revision" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_3 +msgid "Road" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_3 +msgid "Road Transport" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_1 +msgid "Sea" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_1 +msgid "Sea Transport (including wagons, motor vehicles, trailers, semi-trailers and lighters on board of a ship)" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search +msgid "Search Intrastat Product Declarations" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search +msgid "Search Intrastat Supplementary Units" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search +msgid "Search Intrastat Transaction Types" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_search +msgid "Search Intrastat Transport Modes" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line_type +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line_type +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_type +msgid "Select the declaration type." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_unit_uom_id +msgid "Select the regular Unit of Measure of Odoo that corresponds to this Intrastat Supplementary Unit." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:145 +#, python-format +msgid "Standard" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_state +msgid "State" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_state +msgid "State of the declaration. When the state is set to 'Done', the parameters become read-only." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:146 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_intrastat_unit_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_intrastat_unit_id +#, python-format +msgid "Suppl. Unit" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:130 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_suppl_unit_qty +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_suppl_unit_qty +#, python-format +msgid "Suppl. Unit Qty" +msgstr "" + +#. module: intrastat_product +#: model:ir.actions.act_window,name:intrastat_product.intrastat_unit_action +#: model:ir.ui.menu,name:intrastat_product.intrastat_unit_menu +msgid "Supplementary Units" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line_suppl_unit_qty +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line_suppl_unit_qty +msgid "Supplementary Units Quantity" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:632 +#, python-format +msgid "The Declaration Action has been set to 'nihil'." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_res_config_settings_country_code +msgid "The ISO country code in two chars. \n" +"You can use this field for quick search." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:385 +#, python-format +msgid "The default Incoterm of the Company is not set, please configure it first." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:374 +#, python-format +msgid "The default Intrastat Transport Mode of the Company is not set, please configure it first." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_sale_order_intrastat_transport_id +msgid "This information is used in Intrastat reports" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_total_amount +msgid "Total Fiscal Amount" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_tree +msgid "Total amount" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_total_amount +msgid "Total fiscal amount in company currency of the declaration." +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form +msgid "Transaction" +msgstr "" + +#. module: intrastat_product +#: model:ir.actions.act_window,name:intrastat_product.intrastat_transaction_action +#: model:ir.ui.menu,name:intrastat_product.intrastat_transaction_menu +msgid "Transaction Types" +msgstr "" + +#. module: intrastat_product +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_tree +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +msgid "Transactions" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:167 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_transport_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_transport_id +#: model:ir.model.fields,field_description:intrastat_product.field_sale_order_intrastat_transport_id +#, python-format +msgid "Transport Mode" +msgstr "" + +#. module: intrastat_product +#: model:ir.actions.act_window,name:intrastat_product.intrastat_transport_action +#: model:ir.ui.menu,name:intrastat_product.intrastat_transport_menu +msgid "Transport Modes" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_type +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_type +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_type +#: model:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search +msgid "Type" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_company_country_code +msgid "Used in views and methods of localization modules." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_revision +msgid "Used to keep track of changes" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_valid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_valid +msgid "Valid" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:116 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line_weight +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line_weight +#, python-format +msgid "Weight" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_year +msgid "Year" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_year_month +msgid "Year and month of the declaration." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_note +msgid "You can add some comments here if you want." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:162 +#, python-format +msgid "You must set company's country !" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:239 +#, python-format +msgid "for period %s" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_report_intrastat_product_product_declaration_xls +msgid "report.intrastat_product.product_declaration_xls" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_res_config_settings +msgid "res.config.settings" msgstr "" diff --git a/intrastat_product/models/__init__.py b/intrastat_product/models/__init__.py index fff5f09..d2a0fdc 100644 --- a/intrastat_product/models/__init__.py +++ b/intrastat_product/models/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- from . import res_company from . import res_config_settings from . import account_invoice diff --git a/intrastat_product/models/account_invoice.py b/intrastat_product/models/account_invoice.py index fcd38fe..ac3b4ff 100644 --- a/intrastat_product/models/account_invoice.py +++ b/intrastat_product/models/account_invoice.py @@ -1,10 +1,9 @@ -# -*- coding: utf-8 -*- -# © 2011-2017 Akretion (http://www.akretion.com) -# © 2009-2017 Noviat (http://www.noviat.com) +# Copyright 2011-2017 Akretion (http://www.akretion.com) +# Copyright 2009-2018 Noviat (http://www.noviat.com) # @author Alexis de Lattre # @author Luc de Meyer -from odoo import models, fields, api +from odoo import api, fields, models class AccountInvoice(models.Model): @@ -13,31 +12,34 @@ class AccountInvoice(models.Model): # in v10, the sale_stock module defines an incoterms_id # Odoo v8 name: incoterm_id intrastat_transaction_id = fields.Many2one( - 'intrastat.transaction', string='Intrastat Transaction Type', - default=lambda self: self._default_intrastat_transaction_id(), - ondelete='restrict', + comodel_name='intrastat.transaction', + string='Intrastat Transaction Type', + ondelete='restrict', track_visibility='onchange', help="Intrastat nature of transaction") intrastat_transport_id = fields.Many2one( - 'intrastat.transport_mode', string='Intrastat Transport Mode', + comodel_name='intrastat.transport_mode', + string='Intrastat Transport Mode', ondelete='restrict') src_dest_country_id = fields.Many2one( - 'res.country', string='Origin/Destination Country', + comodel_name='res.country', + string='Origin/Destination Country', compute='_compute_intrastat_country', - store=True, + store=True, compute_sudo=True, help="Destination country for dispatches. Origin country for " "arrivals.") intrastat_country = fields.Boolean( - compute='_compute_intrastat_country', - store=True, string='Intrastat Country', readonly=True) + compute='_compute_intrastat_country', string='Intrastat Country', + store=True, readonly=True, compute_sudo=True) src_dest_region_id = fields.Many2one( - 'intrastat.region', string='Origin/Destination Region', + comodel_name='intrastat.region', + string='Origin/Destination Region', default=lambda self: self._default_src_dest_region_id(), help="Origin region for dispatches, destination region for " "arrivals. This field is used for the Intrastat Declaration.", ondelete='restrict') intrastat = fields.Char( string='Intrastat Declaration', - related='company_id.intrastat', readonly=True) + related='company_id.intrastat', readonly=True, compute_sudo=True) @api.multi @api.depends('partner_shipping_id.country_id', 'partner_id.country_id') @@ -50,26 +52,10 @@ class AccountInvoice(models.Model): inv.src_dest_country_id = country.id inv.intrastat_country = country.intrastat - @api.model - def _default_intrastat_transaction_id(self): - rco = self.env['res.company'] - company = rco._company_default_get() - inv_type = self._context.get('type') - if inv_type == 'out_invoice': - return company.intrastat_transaction_out_invoice - elif inv_type == 'out_refund': - return company.intrastat_transaction_out_refund - elif inv_type == 'in_invoice': - return company.intrastat_transaction_in_invoice - elif inv_type == 'in_refund': - return company.intrastat_transaction_in_refund - else: - return self.env['intrastat.transaction'] - @api.model def _default_src_dest_region_id(self): rco = self.env['res.company'] - company = rco._company_default_get() + company = rco._company_default_get('account.invoice') return company.intrastat_region_id @@ -77,7 +63,8 @@ class AccountInvoiceLine(models.Model): _inherit = 'account.invoice.line' hs_code_id = fields.Many2one( - 'hs.code', string='Intrastat Code', ondelete='restrict') + comodel_name='hs.code', + string='Intrastat Code', ondelete='restrict') @api.onchange('product_id') def intrastat_product_id_change(self): diff --git a/intrastat_product/models/hs_code.py b/intrastat_product/models/hs_code.py index f97652c..e8aaeb4 100644 --- a/intrastat_product/models/hs_code.py +++ b/intrastat_product/models/hs_code.py @@ -1,10 +1,9 @@ -# -*- coding: utf-8 -*- -# © 2011-2017 Akretion (http://www.akretion.com) -# © 2009-2017 Noviat (http://www.noviat.com) +# Copyright 2011-2017 Akretion (http://www.akretion.com) +# Copyright 2009-2018 Noviat (http://www.noviat.com) # @author Alexis de Lattre # @author Luc de Meyer -from odoo import models, fields, api, _ +from odoo import api, fields, models, _ from odoo.exceptions import ValidationError @@ -12,7 +11,8 @@ class HSCode(models.Model): _inherit = "hs.code" intrastat_unit_id = fields.Many2one( - 'intrastat.unit', string='Intrastat Supplementary Unit') + comodel_name='intrastat.unit', + string='Intrastat Supplementary Unit') @api.constrains('local_code') def _hs_code(self): diff --git a/intrastat_product/models/intrastat_product_declaration.py b/intrastat_product/models/intrastat_product_declaration.py index 5332a23..2aa296f 100644 --- a/intrastat_product/models/intrastat_product_declaration.py +++ b/intrastat_product/models/intrastat_product_declaration.py @@ -1,10 +1,9 @@ -# -*- coding: utf-8 -*- -# © 2011-2017 Akretion (http://www.akretion.com) -# © 2009-2017 Noviat (http://www.noviat.com) +# Copyright 2011-2017 Akretion (http://www.akretion.com) +# Copyright 2009-2018 Noviat (http://www.noviat.com) # @author Alexis de Lattre # @author Luc de Meyer -from odoo import models, fields, api, _ +from odoo import api, fields, models, _ from odoo.exceptions import RedirectWarning, ValidationError, UserError import odoo.addons.decimal_precision as dp from datetime import datetime, date @@ -19,6 +18,114 @@ class IntrastatProductDeclaration(models.Model): _rec_name = 'year_month' _inherit = ['mail.thread', 'intrastat.common'] _order = 'year_month desc, type, revision' + _sql_constraints = [ + ('date_uniq', + 'unique(year_month, company_id, type, revision)', + "A declaration of the same type already exists for this month !" + "\nYou should update the existing declaration " + "or change the revision number of this one."), + ] + + @api.model + def _default_year(self): + if datetime.now().month == 1: + year = datetime.now().year - 1 + else: + year = datetime.now().year + return str(year) + + @api.model + def _default_month(self): + if datetime.now().month == 1: + return 12 + else: + return datetime.now().month - 1 + + @api.model + def _default_action(self): + return 'replace' + + company_id = fields.Many2one( + comodel_name='res.company', string='Company', readonly=True, + default=lambda self: self.env['res.company']._company_default_get( + 'intrastat.product.declaration')) + company_country_code = fields.Char( + compute='_compute_company_country_code', + string='Company Country Code', readonly=True, store=True, + help="Used in views and methods of localization modules.") + year = fields.Char( + string='Year', required=True, + default=lambda self: self._default_year(), + states={'done': [('readonly', True)]}) + month = fields.Selection([ + (1, '01'), + (2, '02'), + (3, '03'), + (4, '04'), + (5, '05'), + (6, '06'), + (7, '07'), + (8, '08'), + (9, '09'), + (10, '10'), + (11, '11'), + (12, '12') + ], string='Month', required=True, + default=lambda self: self._default_month(), + states={'done': [('readonly', True)]}) + year_month = fields.Char( + compute='_compute_year_month', string='Period', readonly=True, + track_visibility='onchange', store=True, + help="Year and month of the declaration.") + type = fields.Selection( + selection='_get_type', string='Type', required=True, + states={'done': [('readonly', True)]}, + track_visibility='onchange', help="Select the declaration type.") + action = fields.Selection( + selection='_get_action', + string='Action', required=True, + default=lambda self: self._default_action(), + states={'done': [('readonly', True)]}, + track_visibility='onchange') + revision = fields.Integer( + string='Revision', default=1, + states={'done': [('readonly', True)]}, + help="Used to keep track of changes") + computation_line_ids = fields.One2many( + comodel_name='intrastat.product.computation.line', + inverse_name='parent_id', + string='Intrastat Product Computation Lines', + states={'done': [('readonly', True)]}) + declaration_line_ids = fields.One2many( + comodel_name='intrastat.product.declaration.line', + inverse_name='parent_id', string='Intrastat Product Declaration Lines', + states={'done': [('readonly', True)]}) + num_decl_lines = fields.Integer( + compute='_compute_numbers', string='Number of Declaration Lines', + store=True, track_visibility='onchange') + total_amount = fields.Integer( + compute='_compute_numbers', string='Total Fiscal Amount', store=True, + help="Total fiscal amount in company currency of the declaration.") + currency_id = fields.Many2one( + 'res.currency', related='company_id.currency_id', readonly=True, + string='Currency') + state = fields.Selection( + selection=[('draft', 'Draft'), + ('done', 'Done')], + string='State', readonly=True, track_visibility='onchange', + copy=False, default='draft', + help="State of the declaration. When the state is set to 'Done', " + "the parameters become read-only.") + note = fields.Text( + string='Notes', + help="You can add some comments here if you want.") + reporting_level = fields.Selection( + selection='_get_reporting_level', + string='Reporting Level', + states={'done': [('readonly', True)]}) + valid = fields.Boolean( + compute='_compute_check_validity', + string='Valid') @api.model def _get_type(self): @@ -38,6 +145,46 @@ class IntrastatProductDeclaration(models.Model): ('standard', _('Standard')), ('extended', _('Extended'))] + @api.model + def _get_action(self): + return [ + ('replace', 'Replace'), + ('append', 'Append'), + ('nihil', 'Nihil')] + + @api.multi + @api.depends('company_id') + def _compute_company_country_code(self): + for this in self: + if this.company_id: + if not this.company_id.country_id: + raise ValidationError( + _("You must set company's country !")) + this.company_country_code = \ + this.company_id.country_id.code.lower() + + @api.multi + @api.depends('year', 'month') + def _compute_year_month(self): + for this in self: + if this.year and this.month: + this.year_month = '-'.join( + [this.year, format(this.month, '02')]) + + @api.multi + @api.depends('month') + def _compute_check_validity(self): + """ TO DO: logic based upon computation lines """ + for this in self: + this.valid = True + + @api.model + @api.constrains('year') + def _check_year(self): + for this in self: + if len(this.year) != 4 or this.year[0] != '2': + raise ValidationError(_("Invalid Year !")) + @api.onchange('type') def _onchange_type(self): if self.type == 'arrivals': @@ -49,152 +196,6 @@ class IntrastatProductDeclaration(models.Model): self.company_id.intrastat_dispatches == 'extended' \ and 'extended' or 'standard' - @api.model - def _get_company(self): - return self.env.user.company_id - - @api.model - def _get_year(self): - if datetime.now().month == 1: - return datetime.now().year - 1 - else: - return datetime.now().year - - @api.model - def _get_month(self): - if datetime.now().month == 1: - return 12 - else: - return datetime.now().month - 1 - - @api.model - def _get_action(self): - return [ - ('replace', 'Replace'), - ('append', 'Append'), - ('nihil', 'Nihil')] - - @api.model - def _get_default_action(self): - return 'replace' - - company_id = fields.Many2one( - 'res.company', string='Company', readonly=True, required=True, - default=lambda self: self.env['res.company']._company_default_get()) - company_country_code = fields.Char( - compute='_compute_company_country_code', - string='Company Country Code', readonly=True, store=True, - help="Used in views and methods of localization modules.") - year = fields.Integer( - string='Year', required=True, default=_get_year, - states={'done': [('readonly', True)]}) - month = fields.Selection([ - (1, '01'), - (2, '02'), - (3, '03'), - (4, '04'), - (5, '05'), - (6, '06'), - (7, '07'), - (8, '08'), - (9, '09'), - (10, '10'), - (11, '11'), - (12, '12') - ], string='Month', required=True, default=_get_month, - states={'done': [('readonly', True)]}) - year_month = fields.Char( - compute='_compute_year_month', string='Period', readonly=True, - track_visibility='onchange', store=True, - help="Year and month of the declaration.") - type = fields.Selection( - '_get_type', string='Type', required=True, - states={'done': [('readonly', True)]}, - track_visibility='onchange', help="Select the declaration type.") - action = fields.Selection( - '_get_action', - string='Action', required=True, - default=_get_default_action, - states={'done': [('readonly', True)]}, - track_visibility='onchange') - revision = fields.Integer( - string='Revision', default=1, - states={'done': [('readonly', True)]}, - help="Used to keep track of changes") - computation_line_ids = fields.One2many( - 'intrastat.product.computation.line', - 'parent_id', string='Intrastat Product Computation Lines', - states={'done': [('readonly', True)]}) - declaration_line_ids = fields.One2many( - 'intrastat.product.declaration.line', - 'parent_id', string='Intrastat Product Declaration Lines', - states={'done': [('readonly', True)]}) - num_decl_lines = fields.Integer( - compute='_compute_numbers', string='Number of Declaration Lines', - store=True, track_visibility='onchange') - total_amount = fields.Integer( - compute='_compute_numbers', string='Total Fiscal Amount', store=True, - help="Total fiscal amount in company currency of the declaration.") - currency_id = fields.Many2one( - related='company_id.currency_id', readonly=True, string='Company Currency') - state = fields.Selection([ - ('draft', 'Draft'), - ('done', 'Done'), - ], string='State', readonly=True, track_visibility='onchange', - copy=False, default='draft', - help="State of the declaration. When the state is set to 'Done', " - "the parameters become read-only.") - note = fields.Text( - string='Notes', - help="You can add some comments here if you want.") - reporting_level = fields.Selection( - '_get_reporting_level', string='Reporting Level', - states={'done': [('readonly', True)]}) - valid = fields.Boolean( - compute='_check_validity', - string='Valid') - - @api.constrains('year') - def _check_year(self): - for this in self: - s = str(this.year) - if len(s) != 4 or s[0] != '2': - raise ValidationError(_("Invalid Year !")) - - _sql_constraints = [ - ('date_uniq', - 'unique(year_month, company_id, type, revision)', - "A declaration of the same type already exists for this month !" - "\nYou should update the existing declaration " - "or change the revision number of this one."), - ] - - @api.multi - @api.depends('company_id') - def _compute_company_country_code(self): - for this in self: - if this.company_id: - if not this.company_id.country_id: - raise ValidationError( - _("You must set the country of the company!")) - this.company_country_code = \ - this.company_id.country_id.code.lower() - - @api.multi - @api.depends('year', 'month') - def _compute_year_month(self): - for this in self: - if this.year and this.month: - this.year_month = '-'.join( - [str(this.year), format(this.month, '02')]) - - @api.multi - @api.depends('month') - def _check_validity(self): - """ TO DO: logic based upon computation lines """ - for this in self: - this.valid = True - @api.multi def copy(self, default=None): self.ensure_one() @@ -202,11 +203,11 @@ class IntrastatProductDeclaration(models.Model): default['revision'] = self.revision + 1 return super(IntrastatProductDeclaration, self).copy(default) - def _company_warning(self, msg): - action = self.env.ref('base.action_res_company_form') + def _account_config_warning(self, msg): + action = self.env.ref('account.action_account_config') raise RedirectWarning( msg, action.id, - _('Go to company configuration screen')) + _('Go to Accounting Configuration Settings screen')) def _get_partner_country(self, inv_line): country = inv_line.invoice_id.src_dest_country_id \ @@ -353,7 +354,7 @@ class IntrastatProductDeclaration(models.Model): [('invoice_lines', 'in', inv_line.id)]) if po_lines: if po_lines[0].move_ids: - region = po_lines[0].move_ids[0].location_id\ + region = po_lines[0].move_ids[0].location_dest_id\ .get_intrastat_region() elif inv_type in ('out_invoice', 'out_refund'): so_lines = self.env['sale.order.line'].search( @@ -374,7 +375,7 @@ class IntrastatProductDeclaration(models.Model): "The default Intrastat Transport Mode " "of the Company is not set, " "please configure it first.") - self._company_warning(msg) + self._account_config_warning(msg) return transport def _get_incoterm(self, inv_line): @@ -385,7 +386,7 @@ class IntrastatProductDeclaration(models.Model): "The default Incoterm " "of the Company is not set, " "please configure it first.") - self._company_warning(msg) + self._account_config_warning(msg) return incoterm def _get_product_origin_country(self, inv_line): @@ -435,7 +436,7 @@ class IntrastatProductDeclaration(models.Model): with the country-specific logic for arrivals and dispatches. Cf. l10n_be_intrastat_product_declaration for an example """ - start_date = date(self.year, self.month, 1) + start_date = date(int(self.year), self.month, 1) end_date = start_date + relativedelta(day=1, months=+1, days=-1) domain = [ ('date_invoice', '>=', start_date), @@ -525,7 +526,7 @@ class IntrastatProductDeclaration(models.Model): continue else: _logger.info( - 'Skipping invoice line %s qty %s' + 'Skipping invoice line %s qty %s ' 'of invoice %s. Reason: no product nor hs_code' % (inv_line.name, inv_line.quantity, invoice.number)) continue @@ -608,7 +609,7 @@ class IntrastatProductDeclaration(models.Model): @api.multi def action_gather(self): self.ensure_one() - self.message_post(_("Generate Lines from Invoices")) + self.message_post(body=_("Generate Lines from Invoices")) self._check_generate_lines() self._note = '' if ( @@ -720,7 +721,7 @@ class IntrastatProductDeclaration(models.Model): """ generate declaration lines """ self.ensure_one() assert self.valid, 'Computation lines are not valid' - self.message_post(_("Generate Declaration Lines")) + self.message_post(body=_("Generate Declaration Lines")) # Delete existing declaration lines self.declaration_line_ids.unlink() # Regenerate declaration lines from computation lines @@ -743,7 +744,7 @@ class IntrastatProductDeclaration(models.Model): def generate_xml(self): """ generate the INTRASTAT Declaration XML file """ self.ensure_one() - self.message_post(_("Generate XML Declaration File")) + self.message_post(body=_("Generate XML Declaration File")) self._check_generate_xml() self._unlink_attachments() xml_string = self._generate_xml() @@ -755,6 +756,52 @@ class IntrastatProductDeclaration(models.Model): raise UserError( _("No XML File has been generated.")) + @api.multi + def create_xls(self): + if self.env.context.get('computation_lines'): + report_file = 'instrastat_transactions' + else: + report_file = 'instrastat_declaration_lines' + return { + 'type': 'ir.actions.report', + 'report_type': 'xlsx', + 'report_name': 'intrastat_product.product_declaration_xls', + 'context': dict(self.env.context, report_file=report_file), + 'data': {'dynamic_report': True}, + } + + @api.model + def _xls_computation_line_fields(self): + """ + Update list in custom module to add/drop columns or change order + """ + return [ + 'product', 'product_origin_country', + 'hs_code', 'src_dest_country', + 'amount_company_currency', 'accessory_cost', + 'transaction', 'weight', 'suppl_unit_qty', 'suppl_unit', + 'transport', 'invoice', + ] + + @api.model + def _xls_declaration_line_fields(self): + """ + Update list in custom module to add/drop columns or change order + """ + return [ + 'hs_code', 'src_dest_country', 'amount_company_currency', + 'transaction', 'weight', 'suppl_unit_qty', 'suppl_unit', + 'transport', + ] + + @api.model + def _xls_template(self): + """ + Placeholder for excel report template updates + + """ + return {} + @api.multi def done(self): self.write({'state': 'done'}) @@ -766,27 +813,34 @@ class IntrastatProductDeclaration(models.Model): class IntrastatProductComputationLine(models.Model): _name = 'intrastat.product.computation.line' - _description = "Intrastat Product Computation Lines" + _description = "Intrastat Product Computataion Lines" parent_id = fields.Many2one( 'intrastat.product.declaration', string='Intrastat Product Declaration', ondelete='cascade', readonly=True) company_id = fields.Many2one( - related='parent_id.company_id', readonly=True) + 'res.company', related='parent_id.company_id', + string="Company", readonly=True) company_currency_id = fields.Many2one( - related='company_id.currency_id', readonly=True) + 'res.currency', related='company_id.currency_id', + string="Company currency", readonly=True) type = fields.Selection( - related='parent_id.type', readonly=True) + related='parent_id.type', + string='Type', + readonly=True) reporting_level = fields.Selection( - related='parent_id.reporting_level', readonly=True) + related='parent_id.reporting_level', + string='Reporting Level', + readonly=True) valid = fields.Boolean( - compute='_check_validity', + compute='_compute_check_validity', string='Valid') invoice_line_id = fields.Many2one( 'account.invoice.line', string='Invoice Line', readonly=True) invoice_id = fields.Many2one( - related='invoice_line_id.invoice_id', string='Invoice', readonly=True) + 'account.invoice', related='invoice_line_id.invoice_id', + string='Invoice', readonly=True) declaration_line_id = fields.Many2one( 'intrastat.product.declaration.line', string='Declaration Line', readonly=True) @@ -795,11 +849,12 @@ class IntrastatProductComputationLine(models.Model): help="Country of Origin/Destination", domain=[('intrastat', '=', True)]) product_id = fields.Many2one( - related='invoice_line_id.product_id', readonly=True) + 'product.product', related='invoice_line_id.product_id', + string='Product', readonly=True) hs_code_id = fields.Many2one( 'hs.code', string='Intrastat Code') intrastat_unit_id = fields.Many2one( - related='hs_code_id.intrastat_unit_id', + 'intrastat.unit', related='hs_code_id.intrastat_unit_id', string='Suppl. Unit', readonly=True, help="Intrastat Supplementary Unit") weight = fields.Float( @@ -838,7 +893,7 @@ class IntrastatProductComputationLine(models.Model): @api.multi @api.depends('transport_id') - def _check_validity(self): + def _compute_check_validity(self): """ TO DO: logic based upon fields """ for this in self: this.valid = True @@ -854,7 +909,7 @@ class IntrastatProductComputationLine(models.Model): self.intrastat_unit_id =\ self.product_id.intrastat_id.intrastat_unit_id if not self.intrastat_unit_id: - self.weight = self.product_id.weight_net + self.weight = self.product_id.weight class IntrastatProductDeclarationLine(models.Model): @@ -866,12 +921,19 @@ class IntrastatProductDeclarationLine(models.Model): string='Intrastat Product Declaration', ondelete='cascade', readonly=True) company_id = fields.Many2one( - related='parent_id.company_id', readonly=True) + 'res.company', related='parent_id.company_id', + string="Company", readonly=True) company_currency_id = fields.Many2one( - related='company_id.currency_id', readonly=True) - type = fields.Selection(related='parent_id.type', readonly=True) + 'res.currency', related='company_id.currency_id', + string="Company currency", readonly=True) + type = fields.Selection( + related='parent_id.type', + string='Type', + readonly=True) reporting_level = fields.Selection( - related='parent_id.reporting_level', readonly=True) + related='parent_id.reporting_level', + string='Reporting Level', + readonly=True) computation_line_ids = fields.One2many( 'intrastat.product.computation.line', 'declaration_line_id', string='Computation Lines', readonly=True) @@ -910,40 +972,3 @@ class IntrastatProductDeclarationLine(models.Model): product_origin_country_id = fields.Many2one( 'res.country', string='Country of Origin of the Product', help="Country of origin of the product i.e. product 'made in ____'") - - def _fields_to_sum(self): - """ - This method is DEPRECATED. - You should use the _fields_to_sum method on the - IntrastatProductDeclaration class. - """ - fields_to_sum = [ - 'weight', - 'suppl_unit_qty', - ] - return fields_to_sum - - @api.model - def _prepare_declaration_line(self, computation_lines): - """ - This method is DEPRECATED. - You should use the _fields_to_sum method on the - IntrastatProductDeclaration class. - """ - fields_to_sum = self._fields_to_sum() - vals = self._prepare_grouped_fields( - computation_lines[0], fields_to_sum) - for computation_line in computation_lines: - for field in fields_to_sum: - vals[field] += computation_line[field] - vals['amount_company_currency'] += ( - computation_line['amount_company_currency'] + - computation_line['amount_accessory_cost_company_currency']) - # round, otherwise odoo with truncate (6.7 -> 6... instead of 7 !) - for field in fields_to_sum: - vals[field] = int(round(vals[field])) - if not vals['weight']: - vals['weight'] = 1 - vals['amount_company_currency'] = int(round( - vals['amount_company_currency'])) - return vals diff --git a/intrastat_product/models/intrastat_region.py b/intrastat_product/models/intrastat_region.py index 84f9537..1b05544 100644 --- a/intrastat_product/models/intrastat_region.py +++ b/intrastat_product/models/intrastat_region.py @@ -1,24 +1,24 @@ -# -*- coding: utf-8 -*- -# © 2009-2017 Noviat nv/sa (www.noviat.com). +# Copyright 2009-2018 Noviat nv/sa (www.noviat.com). # @author Luc de Meyer -from odoo import models, fields +from odoo import fields, models class IntrastatRegion(models.Model): _name = 'intrastat.region' _description = "Intrastat Region" - - code = fields.Char(string='Code', required=True) - country_id = fields.Many2one( - 'res.country', string='Country', required=True) - name = fields.Char(string='Name', translate=True) - description = fields.Char(string='Description') - company_id = fields.Many2one( - 'res.company', string='Company', - default=lambda self: self.env['res.company']._company_default_get()) - _sql_constraints = [ ('intrastat_region_code_unique', 'UNIQUE(code, country_id)', # TODO add company_id ? 'Code must be unique.')] + + code = fields.Char(string='Code', required=True) + country_id = fields.Many2one( + comodel_name='res.country', + string='Country', required=True) + name = fields.Char(string='Name', translate=True) + description = fields.Char(string='Description') + company_id = fields.Many2one( + comodel_name='res.company', string='Company', + default=lambda self: self.env['res.company']._company_default_get( + 'intrastat.region')) diff --git a/intrastat_product/models/intrastat_transaction.py b/intrastat_product/models/intrastat_transaction.py index 8d66fe1..e420663 100644 --- a/intrastat_product/models/intrastat_transaction.py +++ b/intrastat_product/models/intrastat_transaction.py @@ -1,10 +1,9 @@ -# -*- coding: utf-8 -*- -# © 2011-2017 Akretion (http://www.akretion.com) -# © 2009-2017 Noviat (http://www.noviat.com) +# Copyright 2011-2017 Akretion (http://www.akretion.com) +# Copyright 2009-2018 Noviat (http://www.noviat.com) # @author Alexis de Lattre # @author Luc de Meyer -from odoo import models, fields, api +from odoo import api, fields, models class IntrastatTransaction(models.Model): @@ -12,6 +11,10 @@ class IntrastatTransaction(models.Model): _description = "Intrastat Transaction" _order = 'code' _rec_name = 'display_name' + _sql_constraints = [( + 'intrastat_transaction_code_unique', + 'UNIQUE(code, company_id)', + 'Code must be unique.')] code = fields.Char(string='Code', required=True) description = fields.Text(string='Description') @@ -19,8 +22,9 @@ class IntrastatTransaction(models.Model): compute='_compute_display_name_field', string="Display Name", readonly=True, store=True) company_id = fields.Many2one( - 'res.company', string='Company', - default=lambda self: self.env['res.company']._company_default_get()) + comodel_name='res.company', string='Company', + default=lambda self: self.env['res.company']._company_default_get( + 'intrastat.transaction')) @api.multi @api.depends('code', 'description') @@ -32,8 +36,3 @@ class IntrastatTransaction(models.Model): this.display_name = len(display_name) > 55 \ and display_name[:55] + '...' \ or display_name - - _sql_constraints = [( - 'intrastat_transaction_code_unique', - 'UNIQUE(code, company_id)', - 'Code must be unique.')] diff --git a/intrastat_product/models/intrastat_transport_mode.py b/intrastat_product/models/intrastat_transport_mode.py index 6d7fb09..2d34655 100644 --- a/intrastat_product/models/intrastat_transport_mode.py +++ b/intrastat_product/models/intrastat_transport_mode.py @@ -1,10 +1,9 @@ -# -*- coding: utf-8 -*- -# © 2011-2017 Akretion (http://www.akretion.com) -# © 2009-2017 Noviat (http://www.noviat.com) +# Copyright 2011-2017 Akretion (http://www.akretion.com) +# Copyright 2009-2019 Noviat (http://www.noviat.com) # @author Alexis de Lattre # @author Luc de Meyer -from odoo import models, fields, api +from odoo import api, fields, models class IntrastatTransportMode(models.Model): @@ -12,9 +11,13 @@ class IntrastatTransportMode(models.Model): _description = "Intrastat Transport Mode" _rec_name = 'display_name' _order = 'code' + _sql_constraints = [( + 'intrastat_transport_code_unique', + 'UNIQUE(code)', + 'Code must be unique.')] display_name = fields.Char( - string='Display Name', compute='_display_name', store=True, + string='Display Name', compute='_compute_display_name', store=True, readonly=True) code = fields.Char(string='Code', required=True) name = fields.Char(string='Name', required=True, translate=True) @@ -22,11 +25,6 @@ class IntrastatTransportMode(models.Model): @api.multi @api.depends('name', 'code') - def _display_name(self): + def _compute_display_name(self): for this in self: this.display_name = '%s. %s' % (this.code, this.name) - - _sql_constraints = [( - 'intrastat_transport_code_unique', - 'UNIQUE(code)', - 'Code must be unique.')] diff --git a/intrastat_product/models/intrastat_unit.py b/intrastat_product/models/intrastat_unit.py index d02d538..1b74614 100644 --- a/intrastat_product/models/intrastat_unit.py +++ b/intrastat_product/models/intrastat_unit.py @@ -1,10 +1,9 @@ -# -*- coding: utf-8 -*- -# © 2011-2017 Akretion (http://www.akretion.com) -# © 2009-2017 Noviat (http://www.noviat.com) +# Copyright 2011-2017 Akretion (http://www.akretion.com) +# Copyright 2009-2018 Noviat (http://www.noviat.com) # @author Alexis de Lattre # @author Luc de Meyer -from odoo import models, fields +from odoo import fields, models class IntrastatUnit(models.Model): @@ -14,7 +13,7 @@ class IntrastatUnit(models.Model): name = fields.Char(string='Name', required=True) description = fields.Char(string='Description', required=True) uom_id = fields.Many2one( - 'product.uom', string='Regular UoM', + comodel_name='product.uom', string='Regular UoM', help="Select the regular Unit of Measure of Odoo that corresponds " "to this Intrastat Supplementary Unit.") - active = fields.Boolean(string='Active', default=True) + active = fields.Boolean(default=True) diff --git a/intrastat_product/models/res_company.py b/intrastat_product/models/res_company.py index 08d8b9a..7b53221 100644 --- a/intrastat_product/models/res_company.py +++ b/intrastat_product/models/res_company.py @@ -1,47 +1,46 @@ -# -*- coding: utf-8 -*- -# © 2011-2017 Akretion (http://www.akretion.com) -# © 2009-2017 Noviat (http://www.noviat.com) +# Copyright 2011-2017 Akretion (http://www.akretion.com) +# Copyright 2009-2018 Noviat (http://www.noviat.com) # @author Alexis de Lattre # @author Luc de Meyer -from odoo import models, fields, api +from odoo import api, fields, models class ResCompany(models.Model): _inherit = 'res.company' intrastat_incoterm_id = fields.Many2one( - 'stock.incoterms', + comodel_name='stock.incoterms', string='Default Incoterm for Intrastat', help="International Commercial Terms are a series of " "predefined commercial terms used in international " "transactions.") intrastat_arrivals = fields.Selection( - '_intrastat_arrivals', string='Arrivals', + selection='_intrastat_arrivals', string='Arrivals', default='extended', required=True) intrastat_dispatches = fields.Selection( - '_intrastat_dispatches', string='Dispatches', + selection='_intrastat_dispatches', string='Dispatches', default='extended', required=True) intrastat_transport_id = fields.Many2one( - 'intrastat.transport_mode', + comodel_name='intrastat.transport_mode', string='Default Transport Mode', ondelete='restrict') intrastat = fields.Char( string='Intrastat Declaration', store=True, readonly=True, compute='_compute_intrastat') intrastat_region_id = fields.Many2one( - 'intrastat.region', + comodel_name='intrastat.region', string='Default Intrastat Region') intrastat_transaction_out_invoice = fields.Many2one( - 'intrastat.transaction', + comodel_name='intrastat.transaction', string='Default Intrastat Transaction For Customer Invoice') intrastat_transaction_out_refund = fields.Many2one( - 'intrastat.transaction', + comodel_name='intrastat.transaction', string='Default Intrastat Transaction for Customer Refunds') intrastat_transaction_in_invoice = fields.Many2one( - 'intrastat.transaction', + comodel_name='intrastat.transaction', string='Default Intrastat Transaction For Supplier Invoices') intrastat_transaction_in_refund = fields.Many2one( - 'intrastat.transaction', + comodel_name='intrastat.transaction', string='Default Intrastat Transaction For Supplier Refunds') intrastat_accessory_costs = fields.Boolean( string='Include Accessory Costs in Fiscal Value of Product') diff --git a/intrastat_product/models/res_config_settings.py b/intrastat_product/models/res_config_settings.py index aada9b9..37931e6 100644 --- a/intrastat_product/models/res_config_settings.py +++ b/intrastat_product/models/res_config_settings.py @@ -1,8 +1,8 @@ -# -*- coding: utf-8 -*- -# © 2017 Akretion (Alexis de Lattre ) +# Copyright 2017 Akretion (Alexis de Lattre ) +# Copyright 2009-2018 Noviat (http://www.noviat.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields +from odoo import fields, models class ResConfigSettings(models.TransientModel): @@ -29,3 +29,7 @@ class ResConfigSettings(models.TransientModel): related='company_id.intrastat_transaction_in_refund') intrastat_accessory_costs = fields.Boolean( related='company_id.intrastat_accessory_costs') + country_id = fields.Many2one( + related='company_id.country_id', readonly=True) + country_code = fields.Char( + related='company_id.country_id.code', readonly=True) diff --git a/intrastat_product/models/sale_order.py b/intrastat_product/models/sale_order.py index ee360da..c0a5ea4 100644 --- a/intrastat_product/models/sale_order.py +++ b/intrastat_product/models/sale_order.py @@ -1,15 +1,14 @@ -# -*- coding: utf-8 -*- -# © 2010-2017 Akretion (http://www.akretion.com) +# Copyright 2010-2017 Akretion (http://www.akretion.com) # @author Alexis de Lattre -from odoo import models, fields, api +from odoo import api, fields, models class SaleOrder(models.Model): _inherit = "sale.order" intrastat_transport_id = fields.Many2one( - 'intrastat.transport_mode', string='Transport Mode', + comodel_name='intrastat.transport_mode', string='Transport Mode', help="This information is used in Intrastat reports") intrastat = fields.Selection( string='Intrastat Declaration', diff --git a/intrastat_product/models/stock_warehouse.py b/intrastat_product/models/stock_warehouse.py index 23bbb93..d39cba9 100644 --- a/intrastat_product/models/stock_warehouse.py +++ b/intrastat_product/models/stock_warehouse.py @@ -1,15 +1,15 @@ -# -*- coding: utf-8 -*- -# © 2009-2017 Noviat nv/sa (www.noviat.com). +# Copyright 2009-2018 Noviat nv/sa (www.noviat.com). # @author Alexis de Lattre # @author Luc de Meyer -from odoo import models, fields, api +from odoo import api, fields, models class StockWarehouse(models.Model): _inherit = 'stock.warehouse' - region_id = fields.Many2one('intrastat.region', string='Intrastat Region') + region_id = fields.Many2one( + comodel_name='intrastat.region', string='Intrastat Region') class StockLocation(models.Model): diff --git a/intrastat_product/report/__init__.py b/intrastat_product/report/__init__.py new file mode 100644 index 0000000..94b3dbb --- /dev/null +++ b/intrastat_product/report/__init__.py @@ -0,0 +1 @@ +from . import intrastat_product_report_xls diff --git a/intrastat_product/report/intrastat_product_report_xls.py b/intrastat_product/report/intrastat_product_report_xls.py new file mode 100644 index 0000000..e2e5802 --- /dev/null +++ b/intrastat_product/report/intrastat_product_report_xls.py @@ -0,0 +1,276 @@ +# Copyright 2009-2018 Noviat +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import logging + +from odoo import models +from odoo.tools.translate import translate, _ + +_logger = logging.getLogger(__name__) + + +IR_TRANSLATION_NAME = 'intrastat.product.report' + + +class IntrastatProductDeclarationXlsx(models.AbstractModel): + _name = 'report.intrastat_product.product_declaration_xls' + _inherit = 'report.report_xlsx.abstract' + + def _(self, src): + lang = self.env.context.get('lang', 'en_US') + val = translate( + self.env.cr, IR_TRANSLATION_NAME, 'report', lang, src) or src + return val + + def _get_template(self, declaration): + + template = { + 'product': { + 'header': { + 'type': 'string', + 'value': self._('Product'), + }, + 'line': { + 'value': self._render( + "line.product_id and line.product_id.name"), + }, + 'width': 36, + }, + 'product_origin_country': { + 'header': { + 'type': 'string', + 'value': self._('Product C/O'), + }, + 'line': { + 'type': 'string', + 'value': self._render( + "line.product_origin_country_id.name or ''"), + }, + 'width': 28, + }, + 'hs_code': { + 'header': { + 'type': 'string', + 'value': self._('Intrastat Code'), + }, + 'line': { + 'type': 'string', + 'value': self._render( + "line.hs_code_id.local_code"), + }, + 'width': 14, + }, + 'src_dest_country': { + 'header': { + 'type': 'string', + 'value': self._('Country of Origin/Destination'), + }, + 'line': { + 'type': 'string', + 'value': self._render( + "line.src_dest_country_id.name"), + }, + 'width': 28, + }, + 'amount_company_currency': { + 'header': { + 'type': 'string', + 'value': self._('Fiscal Value'), + 'format': self.format_theader_yellow_right, + }, + 'line': { + 'type': 'number', + 'value': self._render("line.amount_company_currency"), + 'format': self.format_tcell_amount_right, + }, + 'width': 18, + }, + 'accessory_cost': { + 'header': { + 'type': 'string', + 'value': self._('Accessory Costs'), + 'format': self.format_theader_yellow_right, + }, + 'line': { + 'type': 'number', + 'value': self._render( + "line.amount_accessory_cost_company_currency"), + 'format': self.format_tcell_amount_right, + }, + 'width': 18, + }, + 'transaction': { + 'header': { + 'type': 'string', + 'value': self._('Intrastat Transaction'), + }, + 'line': { + 'value': self._render( + "line.transaction_id.display_name"), + }, + 'width': 36, + }, + 'weight': { + 'header': { + 'type': 'string', + 'value': self._('Weight'), + 'format': self.format_theader_yellow_right, + }, + 'line': { + 'type': 'number', + 'value': self._render( + "line.weight"), + 'format': self.format_tcell_amount_right, + }, + 'width': 18, + }, + 'suppl_unit_qty': { + 'header': { + 'type': 'string', + 'value': self._('Suppl. Unit Qty'), + 'format': self.format_theader_yellow_right, + }, + 'line': { + # we don't specify a type here and rely on the + # report_xlsx_helper type detection to use + # write_string when suppl_unit_qty is zero + 'value': self._render( + "line.suppl_unit_qty or ''"), + 'format': self.format_tcell_amount_right, + }, + 'width': 18, + }, + 'suppl_unit': { + 'header': { + 'type': 'string', + 'value': self._('Suppl. Unit'), + }, + 'line': { + 'value': self._render( + "line.intrastat_unit_id.name or ''"), + }, + 'width': 14, + }, + 'incoterm': { + 'header': { + 'type': 'string', + 'value': self._('Incoterm'), + }, + 'line': { + 'value': self._render("line.incoterm_id.name or ''"), + }, + 'width': 14, + }, + 'transport': { + 'header': { + 'type': 'string', + 'value': self._('Transport Mode'), + }, + 'line': { + 'value': self._render("line.transport_id.name or ''"), + }, + 'width': 14, + }, + 'region': { + 'header': { + 'type': 'string', + 'value': self._('Intrastat Region'), + }, + 'line': { + 'value': self._render("line.region_id.name or ''"), + }, + 'width': 28, + }, + 'invoice': { + 'header': { + 'type': 'string', + 'value': self._('Invoice'), + }, + 'line': { + 'value': self._render("line.invoice_id.number"), + }, + 'width': 18, + }, + } + template.update(declaration._xls_template()) + + return template + + def _get_ws_params(self, wb, data, declaration): + template = self._get_template(declaration) + if self.env.context.get('computation_lines'): + wl = declaration._xls_computation_line_fields() + report = 'computation' + else: + wl = declaration._xls_declaration_line_fields() + report = 'declaration' + + title = self._get_title(declaration, report, format='normal') + title_short = self._get_title(declaration, report, format='short') + sheet_name = title_short[:31].replace('/', '-') + + params = { + 'ws_name': sheet_name, + 'generate_ws_method': '_intrastat_report', + 'title': title, + 'wanted_list': wl, + 'col_specs': template, + } + return [params] + + def _get_title(self, declaration, report, format='normal'): + title = declaration.year_month + if format == 'normal': + if report == 'computation': + title += ' : ' + _('Computation Lines') + else: + title += ' : ' + _('Declaration Lines') + return title + + def _report_title(self, ws, row_pos, ws_params, data, declaration): + return self._write_ws_title(ws, row_pos, ws_params) + + def _empty_report(self, ws, row_pos, ws_params, data, declaration, + report): + if report == 'computation': + lines = _('Computation Lines') + else: + lines = _('Declaration Lines') + no_entries = _("No") + " " + lines + " " + _("for period %s") \ + % declaration.year_month + ws.write_string(row_pos, 0, no_entries, self.format_left_bold) + + def _intrastat_report(self, workbook, ws, ws_params, data, declaration): + + ws.set_landscape() + ws.fit_to_pages(1, 0) + ws.set_header(self.xls_headers['standard']) + ws.set_footer(self.xls_footers['standard']) + + self._set_column_width(ws, ws_params) + + row_pos = 0 + row_pos = self._report_title(ws, row_pos, ws_params, data, declaration) + + if self.env.context.get('computation_lines'): + report = 'computation' + lines = declaration.computation_line_ids + else: + report = 'declaration' + lines = declaration.declaration_line_ids + + if not lines: + return self._empty_report( + ws, row_pos, ws_params, data, declaration, report) + + row_pos = self._write_line( + ws, row_pos, ws_params, col_specs_section='header', + default_format=self.format_theader_yellow_left) + + ws.freeze_panes(row_pos, 0) + + for line in lines: + row_pos = self._write_line( + ws, row_pos, ws_params, col_specs_section='line', + render_space={'line': line}, + default_format=self.format_tcell_left) diff --git a/intrastat_product/static/description/icon.png b/intrastat_product/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/intrastat_product/views/intrastat_product_declaration.xml b/intrastat_product/views/intrastat_product_declaration.xml index 25b89a6..76a5083 100644 --- a/intrastat_product/views/intrastat_product_declaration.xml +++ b/intrastat_product/views/intrastat_product_declaration.xml @@ -17,7 +17,8 @@