Repository: OCA/intrastat-extrastat (language: python)

Issue:
[14.0][IMP] intrastat_*: Improve tests and code
- [x] No breaking changes
- [x] Rewrite tests to help test extensions
- [x] Move common code. Some code was called in intrastat_base making reference to inexistent fields in Abstract (company_id, company_country_code, state, year, month).
Migration to version 16.0
# Todo

https://github.com/OCA/maintainer-tools/wiki/Migration-to-version-16.0

# Modules to migrate

- [ ] intrastat_base
- [ ] intrastat_product
- [ ] product_harmonized_system

Missing module? Check https://github.com/OCA/maintainer-tools/wiki/%5BFAQ%5D-Missing-modules-in-migration-issue-list
14.0 mig : invoice domain should be based on fiscal position in stead of country
Up till now the default domain to select intrastat transactions is based upon invoices to/from EU countries.
I propose that we change in 14.0 the logic to be based upon the "Intra EU" fiscal position.

On the Belgian market transactions subject to the 'intrastat' declaration are also subject to the 'intracommunity' tax declaration.
In the 13.0 version of the Belgium localisation module I already replaced the domain query, cf. 
https://github.com/Noviat/noviat-apps/blob/012c9a254b101c405126b1c0ce5276a0a9c16d9e/l10n_be_intrastat_product/models/l10n_be_intrastat_product_declaration.py#L219

But since these rules are decided on an european level, this should be applicable for all EU countries.
As a consequence I propose that for the 14.0 migration we add an 'intrastat' boolean to the fiscal position and base the domain on invoices with fiscal positions marked as 'intrastat'. In the localisation modules we can add the logic to set this flag automatically on the standard Intra EU fiscal position.

To give a concrete example why the country tabel is wrong:
If you ship goods to a customer without VAT number in an EU country that this shipment must not be included in the intrastat declaration.



Discussion / hints:

Fix patch:
diff --git a/intrastat_product/README.rst b/intrastat_product/README.rst
new file mode 100644
index 000000000..f55208da4
--- /dev/null
+++ b/intrastat_product/README.rst
@@ -0,0 +1,165 @@
+=================
+Intrastat Product
+=================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! This file is generated by oca-gen-addon-readme !!
+   !! changes will be overwritten.                   !!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+    :target: https://odoo-community.org/page/development-status
+    :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+    :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+    :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fintrastat--extrastat-lightgray.png?logo=github
+    :target: https://github.com/OCA/intrastat-extrastat/tree/14.0/intrastat_product
+    :alt: OCA/intrastat-extrastat
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+    :target: https://translation.odoo-community.org/projects/intrastat-extrastat-14-0/intrastat-extrastat-14-0-intrastat_product
+    :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+    :target: https://runbot.odoo-community.org/runbot/227/14.0
+    :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5| 
+
+This module contains common objects and fields for the Intrastat Product reporting.
+
+It should be used in combination with country-specific Intrastat Product reporting modules
+such as:
+
+- *l10n_fr_intrastat_product*:
+  the module for the *Déclaration d'Echange de Biens* (DEB) for France
+- *l10n_be_intrastat_product*:
+  the module for the Intrastat Product Declaration for Belgium
+
+These country-specific modules can be found in the OCA localization for those countries.
+
+**Table of contents**
+
+.. contents::
+   :local:
+
+Installation
+============
+
+This module is NOT compatible with the *account_intrastat* module from Odoo Enterprise.
+
+Configuration
+=============
+
+By default the intrastat declaration is generated based upon the product record master data.
+Hence unexpected results may occur in case this master data is not accurate,
+e.g. wrong or missing weight, country of origin, ...
+
+|
+
+This can be corrected by changing the appropriate fields when analysing the intrastat declaration
+but this can be challenging in case of large transaction volumes and especially in the specific use
+case where the product weight cannot be encoded correctly on the product records (e.g. products with variable weight).
+
+|
+
+It is possible to allow encoding the intrastat transaction details on the purchase/sale invoice
+via the "intrastat_product.group_invoice_intrastat_transaction_detail" usability group.
+
+Usage
+=====
+
+This module is used in combination with the country-specific
+localization module(s).
+
+**Coding guidelines for localization module:**
+
+We recommend to start by copying an existing module, e.g. l10n_be_intrastat_product
+and adapt the code for the specific needs of your country.
+
+* Declaration Object
+
+  Create a new class as follows:
+
+  .. code-block:: python
+
+     class L10nCcIntrastatProductDeclaration(models.Model):
+         _name = 'l10n.cc.intrastat.product.declaration'
+         _description = "Intrastat Product Declaration for YourCountry"
+         _inherit = ['intrastat.product.declaration', 'mail.thread']
+
+  whereby cc = your country code
+
+* Computation & Declaration Lines
+
+  Create also new objects inheriting from the Computation and Declaration Line Objects
+  so that you can add methods or customise the methods from the base modules (make a PR when
+  the customization or new method is required for multiple countries).
+
+  Adapt also the parent_id fields of the newly created objects
+  (cf. l10n_be_intrastat_product as example).
+
+* XML Files: Menu, Action, Views
+
+  Cf. l10n_be_istrastat_product as example, replace "be" by your Country Code.
+
+**Other functionality added by this module:**
+
+* Compute the Intrastat Lines in an invoice.
+  For this, your user needs to be in the "Technical / Invoice Intrastat Transaction Details" group.
+  Go to the "Intrastat transaction details" tab and press **Compute**
+
+Known issues / Roadmap
+======================
+
+The declaration is based upon the invoices of the corresponding tax declaration period.
+
+An option to generate the intrastat declaration based upon the dates of the physical movements of goods is currently not available.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues <https://github.com/OCA/intrastat-extrastat/issues>`_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback <https://github.com/OCA/intrastat-extrastat/issues/new?body=module:%20intrastat_product%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* ACSONE SA/NV
+* brain-tec AG
+* Akretion
+* Noviat
+
+Contributors
+~~~~~~~~~~~~
+
+* Alexis de Lattre, Akretion <alexis.delattre@akretion.com>
+* Luc De Meyer, Noviat <info@noviat.com>
+* Denis Roussel <denis.roussel@acsone.eu>
+* Tecnativa <www.tecnativa.com>:
+
+    * João Marques
+    * Víctor Martínez
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+   :alt: Odoo Community Association
+   :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/intrastat-extrastat <https://github.com/OCA/intrastat-extrastat/tree/14.0/intrastat_product>`_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/intrastat_product/__init__.py b/intrastat_product/__init__.py
new file mode 100644
index 000000000..c12041911
--- /dev/null
+++ b/intrastat_product/__init__.py
@@ -0,0 +1,4 @@
+from . import models
+from . import report
+from . import wizards
+from .hooks import pre_init_hook
diff --git a/intrastat_product/__manifest__.py b/intrastat_product/__manifest__.py
new file mode 100644
index 000000000..5e9a09cfa
--- /dev/null
+++ b/intrastat_product/__manifest__.py
@@ -0,0 +1,49 @@
+# Copyright 2011-2020 Akretion (http://www.akretion.com)
+# Copyright 2009-2020 Noviat (http://www.noviat.com)
+# Copyright 2018-2020 brain-tec AG (http://www.braintec-group.com)
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+# @author Luc de Meyer <info@noviat.com>
+# @author Kumar Aberer <kumar.aberer@braintec-group.com>
+
+{
+    "name": "Intrastat Product",
+    "version": "16.0.1.0.0",
+    "category": "Intrastat",
+    "license": "AGPL-3",
+    "summary": "Base module for Intrastat Product",
+    "author": "ACSONE SA/NV, brain-tec AG, Akretion, Noviat, Odoo Community Association (OCA)",
+    "website": "https://github.com/OCA/intrastat-extrastat",
+    "depends": [
+        "intrastat_base",
+        "product_harmonized_system",
+        "sale_stock",
+        "purchase_stock",
+        "report_xlsx_helper",
+    ],
+    "excludes": ["account_intrastat"],
+    "external_dependencies": {"python": ["python-stdnum>=1.16"]},
+    "data": [
+        "security/intrastat_security.xml",
+        "security/ir.model.access.csv",
+        "report/report.xml",
+        "views/hs_code.xml",
+        "views/intrastat_region.xml",
+        "views/intrastat_unit.xml",
+        "views/intrastat_transaction.xml",
+        "views/intrastat_transport_mode.xml",
+        "views/intrastat_product_declaration.xml",
+        "views/res_config_settings.xml",
+        "views/res_partner_view.xml",
+        "views/account_move.xml",
+        "views/sale_order.xml",
+        "views/stock_warehouse.xml",
+        "views/report_invoice.xml",
+        "wizards/intrastat_result_view.xml",
+        "data/intrastat_transport_mode.xml",
+        "data/intrastat_unit.xml",
+        "data/intrastat_transaction.xml",
+    ],
+    "demo": ["demo/intrastat_demo.xml"],
+    "installable": True,
+    "pre_init_hook": "pre_init_hook",
+}
diff --git a/intrastat_product/data/intrastat_transaction.xml b/intrastat_product/data/intrastat_transaction.xml
new file mode 100644
index 000000000..98b454562
--- /dev/null
+++ b/intrastat_product/data/intrastat_transaction.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo noupdate="1">
+    <!-- Source: https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32020R1197&from=EN#d1e32-7-1
+         ANNEX I
+         Part C. Classifications
+         Table 1. Nature of transaction breakdown
+    -->
+    <record id="intrastat_transaction_11" model="intrastat.transaction">
+        <field name="code">11</field>
+        <field name="description">B2B sale/purchase</field>
+    </record>
+    <record id="intrastat_transaction_12" model="intrastat.transaction">
+        <field name="code">12</field>
+        <field name="description">B2C sale/purchase (incl. distance sale)</field>
+    </record>
+    <record id="intrastat_transaction_21" model="intrastat.transaction">
+        <field name="code">21</field>
+        <field name="description">Return of goods (free of charge)</field>
+    </record>
+    <record id="intrastat_transaction_22" model="intrastat.transaction">
+        <field name="code">22</field>
+        <field
+            name="description"
+        >Replacement for returned goods (free of charge)</field>
+    </record>
+    <record id="intrastat_transaction_23" model="intrastat.transaction">
+        <field name="code">23</field>
+        <field
+            name="description"
+        >Replacement (e.g. under warranty) for goods not being returned</field>
+    </record>
+    <record id="intrastat_transaction_31" model="intrastat.transaction">
+        <field name="code">31</field>
+        <field
+            name="description"
+        >Movements to/from a warehouse (excluding call-off and consignment stock)</field>
+    </record>
+    <record id="intrastat_transaction_32" model="intrastat.transaction">
+        <field name="code">32</field>
+        <field
+            name="description"
+        >Supply for sale on approval or after trial (including call-off and consignment stock)</field>
+    </record>
+    <record id="intrastat_transaction_33" model="intrastat.transaction">
+        <field name="code">33</field>
+        <field name="description">Financial leasing</field>
+    </record>
+    <record id="intrastat_transaction_34" model="intrastat.transaction">
+        <field name="code">34</field>
+        <field
+            name="description"
+        >Transactions involving transfer of ownership without financial compensation</field>
+    </record>
+    <record id="intrastat_transaction_41" model="intrastat.transaction">
+        <field name="code">41</field>
+        <field
+            name="description"
+        >Transactions with a view to processing under contract (no change of ownership). Goods expected to return to the initial Member State/country of export</field>
+    </record>
+    <record id="intrastat_transaction_42" model="intrastat.transaction">
+        <field name="code">42</field>
+        <field
+            name="description"
+        >Transactions with a view to processing under contract (no change of ownership). Goods not expected to return to the initial Member State/country of export</field>
+    </record>
+    <record id="intrastat_transaction_51" model="intrastat.transaction">
+        <field name="code">51</field>
+        <field
+            name="description"
+        >Transactions following processing under contract (not involving change of ownership). Goods returning to the initial Member State/country of export.</field>
+    </record>
+    <record id="intrastat_transaction_52" model="intrastat.transaction">
+        <field name="code">52</field>
+        <field
+            name="description"
+        >Transactions following processing under contract (not involving change of ownership). Goods not returning to the initial Member State/country of export.</field>
+    </record>
+    <!-- intrastat.transaction that start with "6" are
+         "Particular transactions recorded for national purposes"
+        so they should be supplied by coutry-specific modules -->
+    <record id="intrastat_transaction_71" model="intrastat.transaction">
+        <field name="code">71</field>
+        <field
+            name="description"
+        >Release of goods for free circulation in a Member State with a subsequent export to another Member State</field>
+    </record>
+    <record id="intrastat_transaction_72" model="intrastat.transaction">
+        <field name="code">72</field>
+        <field
+            name="description"
+        >Transportation of goods from one Member State to another Member State to place the goods under the export procedure</field>
+    </record>
+    <record id="intrastat_transaction_80" model="intrastat.transaction">
+        <field name="code">80</field>
+        <field
+            name="description"
+        >Transactions involving the supply of building materials and technical equipment under a general construction or civil engineering contract for which no separate invoicing of the goods is required and an invoice for the total contract is issued</field>
+    </record>
+    <record id="intrastat_transaction_91" model="intrastat.transaction">
+        <field name="code">91</field>
+        <field
+            name="description"
+        >Hire, loan, and operational leasing longer than 24 months</field>
+    </record>
+    <record id="intrastat_transaction_99" model="intrastat.transaction">
+        <field name="code">99</field>
+        <field name="description">Other</field>
+    </record>
+
+</odoo>
diff --git a/intrastat_product/data/intrastat_transport_mode.xml b/intrastat_product/data/intrastat_transport_mode.xml
new file mode 100644
index 000000000..002a1f1f4
--- /dev/null
+++ b/intrastat_product/data/intrastat_transport_mode.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo noupdate="1">
+    <record id="intrastat_transport_1" model="intrastat.transport_mode">
+        <field name="code">1</field>
+        <field name="name">Sea</field>
+        <field
+            name="description"
+        >Sea Transport (including wagons, motor vehicles, trailers, semi-trailers and lighters on board of a ship)</field>
+    </record>
+    <record id="intrastat_transport_2" model="intrastat.transport_mode">
+        <field name="code">2</field>
+        <field name="name">Rail</field>
+        <field
+            name="description"
+        >Railway transport (including lorries on railway wagons)</field>
+    </record>
+    <record id="intrastat_transport_3" model="intrastat.transport_mode">
+        <field name="code">3</field>
+        <field name="name">Road</field>
+        <field name="description">Road Transport</field>
+    </record>
+    <record id="intrastat_transport_4" model="intrastat.transport_mode">
+        <field name="code">4</field>
+        <field name="name">Air</field>
+        <field name="description">Air Transport</field>
+    </record>
+    <record id="intrastat_transport_5" model="intrastat.transport_mode">
+        <field name="code">5</field>
+        <field name="name">Post</field>
+        <field name="description">Postal consignments</field>
+    </record>
+    <record id="intrastat_transport_7" model="intrastat.transport_mode">
+        <field name="code">7</field>
+        <field name="name">Fixed installations</field>
+        <field
+            name="description"
+        >Fixed transport installations (e.g. pipelines, high-tension cables)</field>
+    </record>
+    <record id="intrastat_transport_8" model="intrastat.transport_mode">
+        <field name="code">8</field>
+        <field name="name">Inland waterway</field>
+        <field name="description">Inland waterway transport</field>
+    </record>
+    <record id="intrastat_transport_9" model="intrastat.transport_mode">
+        <field name="code">9</field>
+        <field name="name">Own propulsion</field>
+        <field
+            name="description"
+        >Own propulsion (imported or exported means of transport crossing the border under their own power, e.g. aircraft, lorries, boats, etc.)</field>
+    </record>
+    <!-- Set default value to Road trp on main company -->
+    <record id="base.main_company" model="res.company">
+        <field name="intrastat_transport_id" ref="intrastat_transport_3" />
+    </record>
+</odoo>
diff --git a/intrastat_product/data/intrastat_unit.xml b/intrastat_product/data/intrastat_unit.xml
new file mode 100644
index 000000000..bf67d397b
--- /dev/null
+++ b/intrastat_product/data/intrastat_unit.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo noupdate="1">
+    <!-- Extracted from the Official Journal of the European Union -->
+    <record id="intrastat_unit_c_k" model="intrastat.unit">
+        <field name="name">c/k</field>
+        <field name="description">Carats - 1 metric carat = 2 × 10exp(–4) kg</field>
+    </record>
+    <record id="intrastat_unit_ce_el" model="intrastat.unit">
+        <field name="name">ce/el</field>
+        <field name="description">Number of cells</field>
+    </record>
+    <record id="intrastat_unit_ct_l" model="intrastat.unit">
+        <field name="name">ct/l</field>
+        <field name="description">Carrying capacity in tonnes</field>
+    </record>
+    <record id="intrastat_unit_g" model="intrastat.unit">
+        <field name="name">g</field>
+        <field name="description">Gram</field>
+        <field name="uom_id" ref="uom.product_uom_gram" />
+    </record>
+    <record id="intrastat_unit_gi_FS" model="intrastat.unit">
+        <field name="name">gi F/S</field>
+        <field name="description">Gram of fissile isotopes</field>
+    </record>
+    <record id="intrastat_unit_kg_H2O2" model="intrastat.unit">
+        <field name="name">kg H2O2</field>
+        <field name="description">Kilogram of hydrogen peroxide</field>
+    </record>
+    <record id="intrastat_unit_kg_K2O" model="intrastat.unit">
+        <field name="name">kg K2O</field>
+        <field name="description">Kilogram of potassium oxide</field>
+    </record>
+    <record id="intrastat_unit_kg_KOH" model="intrastat.unit">
+        <field name="name">kg KOH</field>
+        <field
+            name="description"
+        >Kilogram of potassium hydroxide (caustic potash)</field>
+    </record>
+    <record id="intrastat_unit_kg_ma" model="intrastat.unit">
+        <field name="name">kg met.am.</field>
+        <field name="description">Kilogram of methylamines</field>
+    </record>
+    <record id="intrastat_unit_kg_N" model="intrastat.unit">
+        <field name="name">kg N</field>
+        <field name="description">Kilogram of nitrogen</field>
+    </record>
+    <record id="intrastat_unit_kg_NaOH" model="intrastat.unit">
+        <field name="name">kg NaOH</field>
+        <field name="description">Kilogram of sodium hydroxide (caustic soda)</field>
+    </record>
+    <record id="intrastat_unit_kg_net_eda" model="intrastat.unit">
+        <field name="name">kg/net eda</field>
+        <field name="description">Kilogram drained net weight</field>
+    </record>
+    <record id="intrastat_unit_kg_P2O5" model="intrastat.unit">
+        <field name="name">kg P2O5</field>
+        <field name="description">Kilogram of diphosphorus pentaoxide</field>
+    </record>
+    <record id="intrastat_unit_kg_90_pct_sdt" model="intrastat.unit">
+        <field name="name">kg 90 pct sdt</field>
+        <field name="description">Kilogram of substance 90 % dry</field>
+    </record>
+    <record id="intrastat_unit_kg_U" model="intrastat.unit">
+        <field name="name">kg U</field>
+        <field name="description">Kilogram of uranium</field>
+    </record>
+    <record id="intrastat_unit_1000_kWh" model="intrastat.unit">
+        <field name="name">1000 kWh</field>
+        <field name="description">Thousand kilowatt hours</field>
+    </record>
+    <record id="intrastat_unit_l" model="intrastat.unit">
+        <field name="name">l</field>
+        <field name="description">Litre</field>
+        <field name="uom_id" ref="uom.product_uom_litre" />
+    </record>
+    <record id="intrastat_unit_1000l" model="intrastat.unit">
+        <field name="name">1000 l</field>
+        <field name="description">Thousand litres</field>
+    </record>
+    <record id="intrastat_unit_l_alc_100_pct" model="intrastat.unit">
+        <field name="name">l alc. 100 pct</field>
+        <field name="description">Litre pure (100 %) alcohol</field>
+    </record>
+    <record id="intrastat_unit_m" model="intrastat.unit">
+        <field name="name">m</field>
+        <field name="description">Metre</field>
+        <field name="uom_id" ref="uom.product_uom_meter" />
+    </record>
+    <record id="intrastat_unit_m2" model="intrastat.unit">
+        <field name="name">m2</field>
+        <field name="description">Square metre</field>
+    </record>
+    <record id="intrastat_unit_m3" model="intrastat.unit">
+        <field name="name">m3</field>
+        <field name="description">Cubic metre</field>
+    </record>
+    <record id="intrastat_unit_1000m3" model="intrastat.unit">
+        <field name="name">1000 m3</field>
+        <field name="description">Thousand cubic metres</field>
+    </record>
+    <record id="intrastat_unit_pa" model="intrastat.unit">
+        <field name="name">pa</field>
+        <field name="description">Number of pairs</field>
+    </record>
+    <record id="intrastat_unit_pce" model="intrastat.unit">
+        <field name="name">items</field>
+        <field name="description">Number of items</field>
+        <field name="uom_id" ref="uom.product_uom_unit" />
+    </record>
+    <record id="intrastat_unit_100pce" model="intrastat.unit">
+        <field name="name">100 items</field>
+        <field name="description">Hundred items</field>
+    </record>
+    <record id="intrastat_unit_1000pce" model="intrastat.unit">
+        <field name="name">1000 items</field>
+        <field name="description">Thousand items</field>
+    </record>
+    <record id="intrastat_unit_TJ" model="intrastat.unit">
+        <field name="name">TJ</field>
+        <field name="description">Terajoule (gross calorific value)</field>
+    </record>
+</odoo>
diff --git a/intrastat_product/demo/intrastat_demo.xml b/intrastat_product/demo/intrastat_demo.xml
new file mode 100644
index 000000000..f37df192d
--- /dev/null
+++ b/intrastat_product/demo/intrastat_demo.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  © 2011-2017 Akretion (http://www.akretion.com/)
+  @author Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo noupdate="1">
+    <record id="product_harmonized_system.84715000" model="hs.code">
+        <field name="intrastat_unit_id" ref="intrastat_unit_pce" />
+    </record>
+    <record id="product_harmonized_system.84717050" model="hs.code">
+        <field name="intrastat_unit_id" ref="intrastat_unit_pce" />
+    </record>
+    <record id="base.main_company" model="res.company">
+        <field name="intrastat_arrivals">extended</field>
+        <field name="intrastat_dispatches">extended</field>
+        <field name="incoterm_id" ref="account.incoterm_DAP" />
+        <field name="intrastat_transport_id" ref="intrastat_transport_3" />
+    </record>
+</odoo>
diff --git a/intrastat_product/hooks.py b/intrastat_product/hooks.py
new file mode 100644
index 000000000..6877121bb
--- /dev/null
+++ b/intrastat_product/hooks.py
@@ -0,0 +1,35 @@
+# Copyright 2022 Stefan Rijnhart <stefan@opener.amsterdam>
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+import logging
+
+
+def pre_init_hook(cr):
+    """Prepopulate stored computed fields for faster installation"""
+    logger = logging.getLogger(__name__)
+    logger.info("Prepopulating stored computed fields")
+    cr.execute(
+        """
+        alter table account_move
+        add column if not exists src_dest_country_id integer;
+        """
+    )
+    cr.execute(
+        """
+        with countries as (
+            select am.id as move_id,
+            coalesce(
+                rps.country_id,
+                rp.country_id,
+                rpc.country_id
+            ) as country_id
+            from account_move am
+            left join res_partner rps on rps.id = am.partner_shipping_id
+            join res_partner rp on rp.id = am.partner_id
+            join res_company rc on rc.id = am.company_id
+            join res_partner rpc on rpc.id = rc.partner_id
+        )
+        update account_move am
+        set src_dest_country_id = countries.country_id
+        from countries where am.id = countries.move_id;
+        """
+    )
diff --git a/intrastat_product/i18n/es.po b/intrastat_product/i18n/es.po
new file mode 100644
index 000000000..b64eadf7d
--- /dev/null
+++ b/intrastat_product/i18n/es.po
@@ -0,0 +1,1793 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* intrastat_product
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-08-16 06:43+0000\n"
+"PO-Revision-Date: 2022-08-16 08:56+0200\n"
+"Last-Translator: Víctor Martínez <victor.martinez@tecnativa.com>\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Poedit 2.3\n"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid ""
+"(Re)compute the intrastat transaction details from the product master data."
+msgstr ""
+"(Re)calcular los detalles de la transacción intrastat a partir de los datos "
+"maestros del producto."
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__01
+msgid "01"
+msgstr "01"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__02
+msgid "02"
+msgstr "02"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__03
+msgid "03"
+msgstr "03"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__04
+msgid "04"
+msgstr "04"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__05
+msgid "05"
+msgstr "05"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__06
+msgid "06"
+msgstr "06"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__07
+msgid "07"
+msgstr "07"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__08
+msgid "08"
+msgstr "08"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__09
+msgid "09"
+msgstr "09"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__10
+msgid "10"
+msgstr "10"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__11
+msgid "11"
+msgstr "11"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__12
+msgid "12"
+msgstr "12"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__product_origin_country_code
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line__product_origin_country_code
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line__product_origin_country_code
+msgid ""
+"2 digit code of country of origin of the product except for the UK.\n"
+"Specify 'XI' for UK Northern Ireland and 'XU' for rest of the UK.\n"
+"Specify 'QU' when the country is unknown.\n"
+msgstr ""
+"Código de 2 dígitos del país de origen del producto, excepto para el Reino "
+"Unido.\n"
+"Especifique \"XI\" para el Reino Unido e Irlanda del Norte y \"XU\" para el "
+"resto del Reino Unido.\n"
+"Especifique \"QU\" cuando el país sea desconocido.\n"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line__src_dest_country_code
+msgid ""
+"2 digit code of country of origin/destination.\n"
+"Specify 'XI' for UK Northern Ireland and 'XU' for rest of the UK."
+msgstr ""
+"Código de 2 dígitos del país de origen/destino.\n"
+"Especifique \"XI\" para Irlanda del Norte y \"XU\" para el resto del Reino "
+"Unido."
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line__src_dest_country_code
+msgid ""
+"2 digit code of country of origin/destination.\n"
+"Specify 'XI' for UK Northern Ireland."
+msgstr ""
+"Código de 2 dígitos del país de origen/destino.\n"
+"Especifique \"XI\" para el Reino Unido e Irlanda del Norte."
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "<span>Intrastat Product Declaration </span>"
+msgstr "<span>Declaración de producto IntrastaT </span>"
+
+#. module: intrastat_product
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_product_declaration_date_uniq
+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 ""
+"¡Ya existe una declaración del mismo tipo para este mes!.\n"
+"Debe actualizar la declaración existente o cambiar el número de revisión de "
+"ésta."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__amount_accessory_cost_company_currency
+#, python-format
+msgid "Accessory Costs"
+msgstr "Costes accesorios"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__action
+msgid "Action"
+msgstr "Acción"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_needaction
+msgid "Action Needed"
+msgstr "Acción necesaria"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction__active
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__active
+msgid "Active"
+msgstr "Activo"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_ids
+msgid "Activities"
+msgstr "Actividades"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr "Actividad Excepción Decoración"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_state
+msgid "Activity State"
+msgstr "Estado de actividad"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_type_icon
+msgid "Activity Type Icon"
+msgstr "Icono de tipo de actividad"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_4
+msgid "Air"
+msgstr "Aire"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_4
+msgid "Air Transport"
+msgstr "Transporte Aéreo"
+
+#. module: intrastat_product
+#: model:res.groups,comment:intrastat_product.group_invoice_intrastat_transaction_details
+msgid "Allow to encode Intrastat Transaction Details on Invoices"
+msgstr ""
+"Permitir codificar los detalles de las transacciones de Intrastat en las "
+"facturas"
+
+#. module: intrastat_product
+#: 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 ""
+"Importe en la moneda de la compañía de los costes accesorios relacionados "
+"con esta línea de factura (por defecto, estos costes accesorios se calculan "
+"prorrateados del importe de cada línea de factura)."
+
+#. module: intrastat_product
+#: 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 ""
+"Importe en la moneda la compañía a escribir en la declaración. Si la moneda "
+"no es la misma, se calcula con la tasa de cambio de la fecha de factura."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"An XML Export already exists for %s. To re-generate it, you must first "
+"delete it."
+msgstr ""
+"Ya existe una exportación XML para %s. Para volver a generarla, primero debe "
+"eliminarla."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Append"
+msgstr "Añadir"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_form
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Archived"
+msgstr "Archivado"
+
+#. module: intrastat_product
+#: 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Arrivals"
+msgstr "Llegadas"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_attachment_count
+msgid "Attachment Count"
+msgstr "Total de adjuntos"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Back to Draft"
+msgstr "Volver a Borrador"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Before going back to draft, you must delete the XML export."
+msgstr "Antes de volver a borrador, debe eliminar la exportación XML."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Cannot delete the declaration %s because it is in Done state."
+msgstr "No se puede eliminar la declaración %s porque está en estado Hecho."
+
+#. 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 "Código"
+
+#. module: intrastat_product
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_region_intrastat_region_code_unique
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_transaction_intrastat_transaction_code_unique
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_transport_mode_intrastat_transport_code_unique
+msgid "Code must be unique."
+msgstr "El código debe ser único."
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search
+msgid "Code or Description"
+msgstr "Código o Descripción"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_res_company
+msgid "Companies"
+msgstr "Compañías"
+
+#. 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search
+msgid "Company"
+msgstr "Compañía"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__company_country_code
+msgid "Company Country Code"
+msgstr "Código de país de la compañía"
+
+#. 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 "Moneda de la compañía"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__computation_line_ids
+#, python-format
+msgid "Computation Lines"
+msgstr "Líneas de cálculo"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Compute"
+msgstr "Calcular"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_res_config_settings
+msgid "Config Settings"
+msgstr "Ajustes de configuración"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_res_partner
+msgid "Contact"
+msgstr "Contacto"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"Conversion from Intrastat Supplementary Unit '%s' to Unit of Measure is not "
+"implemented yet."
+msgstr ""
+"La conversión de la Unidad Suplementaria Intrastat '%s' a la Unidad de "
+"Medida aún no está implementada."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Conversion from unit of measure '%s' to '%s' is not implemented yet."
+msgstr ""
+"La conversión de la unidad de medida '%s' a '%s' aún no está implementada."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"Conversion from unit of measure '%s' to 'Kg' is not implemented yet. It is "
+"needed for product '%s'."
+msgstr ""
+"La conversión de la unidad de medida '%s' a 'Kg' aún no está implementada. "
+"Se necesita para el producto '%s'."
+
+#. 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 "País"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__src_dest_country_code
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__src_dest_country_code
+msgid "Country Code"
+msgstr "Código de país"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__product_origin_country_id
+msgid "Country of Origin"
+msgstr "País de Origen"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__product_origin_country_code
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__product_origin_country_code
+#: 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_code
+#: 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 "País de origen del producto"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "País de origen/destino"
+
+#. 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 "País de origen del producto, como por ejemplo 'Hecho en ____'"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__product_origin_country_id
+msgid "Country of origin of the product i.e. product 'made in ____'."
+msgstr "País de origen del producto, como por ejemplo 'Hecho en ____'."
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__create_uid
+#: 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_result_view__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 "Creado por"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__create_date
+#: 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_result_view__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 "Creado el"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__currency_id
+msgid "Currency"
+msgstr "Moneda"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Date"
+msgstr "Fecha"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form
+msgid "Declaration"
+msgstr "Declaración"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__declaration_line_id
+msgid "Declaration Line"
+msgstr "Línea de declaración"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#, python-format
+msgid "Declaration Lines"
+msgstr "Líneas de declaración"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Declaration for Arrivals"
+msgstr "Declaración de Llegadas"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Declaration for Dispatches"
+msgstr "Declaración de Despachos"
+
+#. 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 "Región Intrastat por defecto"
+
+#. 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 "Transacción Intrastat por defecto para la factura del cliente"
+
+#. 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 "Transacción Intrastat por defecto para Facturas de Proveedores"
+
+#. 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 "Transacción Intrastat por defecto para Abonos de Proveedor"
+
+#. 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 "Transacción Intrastat por defecto para Abonos a Clientes"
+
+#. 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 "Modo Transporte por defecto"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Delete XML Export"
+msgstr "Borrar la exportación XML"
+
+#. 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 "Descripción"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Destination Country"
+msgstr "País de Destino"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__src_dest_country_id
+#: model:ir.model.fields,help:intrastat_product.field_account_move__src_dest_country_id
+#: model:ir.model.fields,help:intrastat_product.field_account_payment__src_dest_country_id
+msgid "Destination country for dispatches. Origin country for arrivals."
+msgstr "País de destino para despachos. País de orígen para llegadas."
+
+#. 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Dispatches"
+msgstr "Despachos"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_hs_code__display_name
+#: 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_result_view__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
+#: model:ir.model.fields,field_description:intrastat_product.field_res_company__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_sale_order__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_location__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse__display_name
+msgid "Display Name"
+msgstr "Nombre a mostrar"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__state__done
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Done"
+msgstr "Hecho"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__state__draft
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Draft"
+msgstr "Borrador"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Excel Export"
+msgstr "Exportar a excel"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Extended"
+msgstr "Extendido"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Valor fiscal"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_7
+msgid "Fixed installations"
+msgstr "Instalaciones fijas"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_7
+msgid "Fixed transport installations (e.g. pipelines, high-tension cables)"
+msgstr ""
+"Instalaciones de transporte fijas (p.e. tuberías, cables de alta tensión)"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_follower_ids
+msgid "Followers"
+msgstr "Seguidores"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_channel_ids
+msgid "Followers (Channels)"
+msgstr "Seguidores (Canales)"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_partner_ids
+msgid "Followers (Partners)"
+msgstr "Seguidores (Contactos)"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr "Icono de Font Awesome ej. fa-tasks"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#, python-format
+msgid "Generate Declaration Lines"
+msgstr "Generar Líneas de Declaración"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#, python-format
+msgid "Generate Lines from Invoices"
+msgstr "Generar Líneas desde Facturas"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#, python-format
+msgid "Generate XML Declaration File"
+msgstr "Generar Archivo XML de Declaración"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Generate lines from invoices: results"
+msgstr "Generar líneas desde facturas: resultados"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Go to Accounting Configuration Settings screen"
+msgstr "Ir a pantalla de Configuración de Contabilidad"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Group By"
+msgstr "Agrupar por"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_hs_code
+msgid "H.S. Code"
+msgstr "Código HS"
+
+#. module: intrastat_product
+#: model:ir.ui.menu,name:intrastat_product.intrastat_code_menu
+msgid "H.S. Codes"
+msgstr "Códigos HS"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "HS Code"
+msgstr "Código HS"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line__id
+#: model:ir.model.fields,field_description:intrastat_product.field_hs_code__id
+#: 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_result_view__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
+#: model:ir.model.fields,field_description:intrastat_product.field_res_company__id
+#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings__id
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner__id
+#: model:ir.model.fields,field_description:intrastat_product.field_sale_order__id
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_location__id
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse__id
+msgid "ID"
+msgstr "ID"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_exception_icon
+msgid "Icon"
+msgstr "Icono"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr "Icono para indicar una actividad de excepción."
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_needaction
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_unread
+msgid "If checked, new messages require your attention."
+msgstr "Si está marcado, hay nuevos mensajes que requieren de su atención."
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_has_error
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr "Si está marcado, hay mensajes que tienen error de entrega."
+
+#. module: intrastat_product
+#: 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 "Incluir Costes Accesorio en Valor Fiscal del Producto"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Incoterm"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_8
+msgid "Inland waterway"
+msgstr "Vía navegable"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_8
+msgid "Inland waterway transport"
+msgstr "Transporte fluvial"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__hs_code_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_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 "Código Intrastat"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Intrastat Code %s:"
+msgstr "Código Intrastat %s:"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__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 "Declaración de producto Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form
+msgid "Intrastat Declaration Line"
+msgstr "Línea de declaración Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_tree
+msgid "Intrastat Declaration Lines"
+msgstr "Líneas de declaración Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_graph
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_pivot
+msgid "Intrastat Product"
+msgstr "Buscar declaraciones de producto Intrastat españolas"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_product_computation_line
+msgid "Intrastat Product Computataion Lines"
+msgstr "Líneas de cálculo de productos Intrastat"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__computation_line_ids
+msgid "Intrastat Product Computation Lines"
+msgstr "Líneas de cálculo de Intrastat"
+
+#. 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Intrastat Product Declaration"
+msgstr "Declaración de producto Intrastat"
+
+#. 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 "Líneas de declaración Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_tree
+msgid "Intrastat Product Declarations"
+msgstr "Declaraciones de producto Intrastat"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_product_declaration
+msgid "Intrastat Product Report Base Object"
+msgstr "Objeto base del informe de productos Intrastat"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_region_view_form
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_region_view_tree
+#, python-format
+msgid "Intrastat Region"
+msgstr "Región Intrastat"
+
+#. 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 "Regiones Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_result_view_form
+msgid "Intrastat Result View"
+msgstr "Vista de los resultados de Intrastat"
+
+#. 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_form
+msgid "Intrastat Supplementary Unit"
+msgstr "Unidad Suplementaria Intrastat"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_unit
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_tree
+msgid "Intrastat Supplementary Units"
+msgstr "Unidades suplementarias de Intrastat"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form
+#, python-format
+msgid "Intrastat Transaction"
+msgstr "Transacción Intrastat"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_transaction_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_transaction_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_transaction_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_form
+msgid "Intrastat Transaction Type"
+msgstr "Tipo de transacción Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_tree
+msgid "Intrastat Transaction Types"
+msgstr "Tipos de transacciones de Intrastat"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "Intrastat Transaction code"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_transport_mode
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_transport_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_transport_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_transport_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_form
+msgid "Intrastat Transport Mode"
+msgstr "Modo de transporte Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_tree
+msgid "Intrastat Transportat Modes"
+msgstr "Modos de transporte Intrastat"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_report_intrastat_product_product_declaration_xls
+msgid "Intrastat declaration"
+msgstr "Declaración de producto Intrastat"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_account_move_intrastat_line
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_line_ids
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_line_ids
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_line_ids
+msgid "Intrastat declaration details"
+msgstr "Detalles declaración Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Intrastat information"
+msgstr "Información Intrastat"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__intrastat_transaction_id
+#: model:ir.model.fields,help:intrastat_product.field_account_move__intrastat_transaction_id
+#: model:ir.model.fields,help:intrastat_product.field_account_payment__intrastat_transaction_id
+msgid "Intrastat nature of transaction"
+msgstr "Naturaleza intrastat de la transacción"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Intrastat transaction details"
+msgstr "Detalles de transacción Intrastat"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Invalid Year!"
+msgstr "¡Año inválido!"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_stock_location
+msgid "Inventory Locations"
+msgstr "Ubicaciones de inventario"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__move_id
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__invoice_id
+#, python-format
+msgid "Invoice"
+msgstr "Factura"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Invoice %s, line %s"
+msgstr "Factura %s, línea %s"
+
+#. module: intrastat_product
+#: model:res.groups,name:intrastat_product.group_invoice_intrastat_transaction_details
+msgid "Invoice Intrastat Transaction Details"
+msgstr "Detalles de la transacción de Intrastat de la factura"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__invoice_line_id
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__invoice_line_id
+msgid "Invoice Line"
+msgstr "Línea de factura"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_is_follower
+msgid "Is Follower"
+msgstr "Es seguidor"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_account_move
+msgid "Journal Entry"
+msgstr "Asiento contable"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_account_move_line
+msgid "Journal Item"
+msgstr "Apunte contable"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form
+msgid "Kg"
+msgstr "Kg"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_hs_code____last_update
+#: 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_result_view____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
+#: model:ir.model.fields,field_description:intrastat_product.field_res_company____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_sale_order____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_location____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse____last_update
+msgid "Last Modified on"
+msgstr "Última modificación el"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__write_uid
+#: 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__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_region__write_uid
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_result_view__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 "Últ. actualización por"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__write_date
+#: 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__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_region__write_date
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_result_view__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 "Última Actualización en"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_main_attachment_id
+msgid "Main Attachment"
+msgstr "Adjunto principal"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_has_error
+msgid "Message Delivery error"
+msgstr "Mensaje de error de entrega"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_ids
+msgid "Messages"
+msgstr "Mensajes"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing Intrastat Code on product %s. "
+msgstr "Falta el código Intrastat en el producto %s. "
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing VAT Number on partner '%s'"
+msgstr "Falta el NIF del contacto '%s'"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"Missing country on invoice partner '%s' or on the delivery address (partner "
+"'%s'). "
+msgstr ""
+"Falta el país en el contacto de la factura '%s' o en la dirección de entrega "
+"(socio '%s'). "
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing unit of measure."
+msgstr "Falta la unidad de medida."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing weight on product %s."
+msgstr "Falta el peso del producto %s."
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__month
+msgid "Month"
+msgstr "Mes"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr "Mi fecha de límite de actividad"
+
+#. 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 "Nombre"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_search
+msgid "Name, Code or Description"
+msgstr "Nombre, Código o Descripción"
+
+#. 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 "Peso neto en Kg"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr "Fecha límite de la siguiente actividad"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_summary
+msgid "Next Activity Summary"
+msgstr "Resumen de la siguiente actividad"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_type_id
+msgid "Next Activity Type"
+msgstr "Tipo de la siguiente actividad"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Nihil"
+msgstr "Nada"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "No"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "No XML File has been generated."
+msgstr "No se ha generado un fichero XML."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "No records found for the selected period !"
+msgstr "¡No se encontraron registros en el periodo seleccionado!"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__note
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_result_view__note
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Notes"
+msgstr "Notas"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_needaction_counter
+msgid "Number of Actions"
+msgstr "Número de acciones"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__num_decl_lines
+msgid "Number of Declaration Lines"
+msgstr "Nº de líneas de declaración"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_has_error_counter
+msgid "Number of errors"
+msgstr "Número de errores"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "Nº de mensajes que requieren acción"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr "Nº de mensajes con error de entrega"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_unread_counter
+msgid "Number of unread messages"
+msgstr "Número de mensajes no leídos"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_result_view_form
+msgid "Ok"
+msgstr "OK"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"On invoice '%s', the source/destination country is '%s' which is not part of "
+"the European Union."
+msgstr ""
+"En la factura \"%s\", el país de origen/destino es \"%s\", que no forma "
+"parte de la Unión Europea."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"On invoice '%s', the source/destination country is United-Kingdom and the "
+"fiscal position is '%s'. Make sure that the fiscal position is right. If the "
+"origin/destination is Northern Ireland, please set the VAT number of the "
+"partner '%s' in Odoo with its new VAT number starting with 'XI' following "
+"Brexit."
+msgstr ""
+"En la factura \"%s\", el país de origen/destino es Reino Unido y la posición "
+"fiscal es \"%s\". Asegúrese de que la posición fiscal es correcta. Si el "
+"origen/destino es Irlanda del Norte, establezca el NIF del contacto '%s' en "
+"Odoo con su nuevo NIF que empieza por 'XI' tras el Brexit."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"On invoice '%s', the source/destination country is United-Kingdom, the "
+"fiscal position is '%s' and the partner's VAT number is '%s'. Make sure that "
+"the fiscal position is right. If the origin/destination is Northern Ireland, "
+"please update the VAT number of the partner '%s' in Odoo with its new VAT "
+"number starting with 'XI' following Brexit."
+msgstr ""
+"En la factura \"%s\", el país de origen/destino es Reino Unido, la posición "
+"fiscal es \"%s\" y el NIF del contacto es \"%s\". Asegúrese de que la "
+"posición fiscal es correcta. Si el origen/destino es Irlanda del Norte, "
+"actualice el NIF del contacto '%s' en Odoo con su nuevo NIF que empieza por "
+"'XI' tras el Brexit."
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Origin Region"
+msgstr "Region de origen"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Origin country"
+msgstr "País de origen"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__src_dest_region_id
+#: model:ir.model.fields,help:intrastat_product.field_account_move__src_dest_region_id
+#: model:ir.model.fields,help:intrastat_product.field_account_payment__src_dest_region_id
+msgid ""
+"Origin region for dispatches, destination region for arrivals. This field is "
+"used for the Intrastat Declaration."
+msgstr ""
+"Región de orígen para despachos, región de destino para llegadas. Este campo "
+"se usa en la Declaración Intrastat."
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__src_dest_country_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__src_dest_country_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__src_dest_country_id
+msgid "Origin/Destination Country"
+msgstr "País Orígen/Despacho"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__src_dest_region_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__src_dest_region_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__src_dest_region_id
+msgid "Origin/Destination Region"
+msgstr "Región Orígen/Destino"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_9
+msgid "Own propulsion"
+msgstr "Propulsión propia"
+
+#. 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 ""
+"Propulsión propia (medios de transporte importados o exportados que cruzan "
+"la frontera bajo su propia propulsión, por ejemplo, aviones, camiones, "
+"barcos, etc.)"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__partner_id
+#, python-format
+msgid "Partner"
+msgstr "Empresa"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__year_month
+msgid "Period"
+msgstr "Periodo"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_result_view
+msgid "Pop-up to show errors on intrastat report generation"
+msgstr "Pop-up para mostrar errores en la generación del reporte intrastat"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_5
+msgid "Post"
+msgstr "Publicar"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_5
+msgid "Postal consignments"
+msgstr "Envíos postales"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__product_id
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__product_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+#, python-format
+msgid "Product"
+msgstr "Producto"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_tree
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_tree
+#, python-format
+msgid "Product C/O"
+msgstr "Product C/O"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "Product C/O Code"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__quantity
+msgid "Quantity"
+msgstr "Cantidad"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_2
+msgid "Rail"
+msgstr "Ferroviario"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_2
+msgid "Railway transport (including lorries on railway wagons)"
+msgstr "Transporte ferroviario (incluidos camiones en vagones ferroviarios)"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Reference"
+msgstr "Referencia"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__uom_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Regular UoM"
+msgstr "UdM regular"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form
+msgid "Related Transactions"
+msgstr "Transacciones Relacionadas"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Replace"
+msgstr "Reemplazar"
+
+#. 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__reporting_level
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__reporting_level
+msgid "Reporting Level"
+msgstr "Nivel de informe"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_user_id
+msgid "Responsible User"
+msgstr "Usuario responsable"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__revision
+msgid "Revision"
+msgstr "Revisión"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_3
+msgid "Road"
+msgstr "Carretera"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_3
+msgid "Road Transport"
+msgstr "Transporte por carretera"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr "Error de entrega de SMS"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_sale_order
+msgid "Sales Order"
+msgstr "Pedido de venta"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_1
+msgid "Sea"
+msgstr "Mar"
+
+#. 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 ""
+"Transporte marítimo (incluidos vagones, vehículos de motor, remolques, "
+"semirremolques y encendedores a bordo de un barco)"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Search Intrastat Product Declarations"
+msgstr "Buscar declaraciones de productos Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Search Intrastat Supplementary Units"
+msgstr "Buscar unidades suplementarias en Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search
+msgid "Search Intrastat Transaction Types"
+msgstr "Buscar tipos de transacciones de Intrastat"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_search
+msgid "Search Intrastat Transport Modes"
+msgstr "Search Intrastat Transport Modes"
+
+#. 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 ""
+"Seleccione la Unidad de medida regular de Odoo que corresponda a esta Unidad "
+"suplementaria Intrastat."
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__sequence
+msgid "Sequence"
+msgstr "Secuencia"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner__invoice_intrastat_detail
+#: model:ir.model.fields,field_description:intrastat_product.field_res_users__invoice_intrastat_detail
+msgid "Show intrastat details in invoice report"
+msgstr "Mostrar detalles de intrastat en el informe de factura"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Standard"
+msgstr "Estándar"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__state
+msgid "State"
+msgstr "Estado"
+
+#. 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 ""
+"Estado de la declaración. Cuando el estado está como 'Realizado', los "
+"parámetros se convierten a solo lectura."
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+"Estado basado en las actividades\n"
+"Atrasado: La fecha de vencimiento ya está vencida\n"
+"Hoy: La fecha de la actividad es hoy\n"
+"Planificado: Actividades futuras."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Unid. supl"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Ctd. unid. supl"
+
+#. 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 "Cantidad de unidades suplementarias"
+
+#. 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 "Cantidad de unidades suplementarias"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "The Declaration Action has been set to 'nihil'."
+msgstr "La acción de declaración se ha establecido en 'nada'."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "The VAT number '%s' is invalid."
+msgstr "El NIF '%s' no es válido."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "The VAT number is not set for the partner '%s'."
+msgstr "El NIF no está establecido para '%s'."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"The default Incoterm of the Company is not set, please configure it first."
+msgstr ""
+"El Incoterm predeterminado de la Compañía no está configurado, configúrelo "
+"primero."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"The default Intrastat Transport Mode of the Company is not set, please "
+"configure it first."
+msgstr ""
+"El Modo de Transporte Intrastat predeterminado de la empresa no está "
+"configurado, configúrelo primero."
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line__invoice_id
+msgid "The move of this entry line."
+msgstr "El movimiento de esta línea de entrada."
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__quantity
+msgid ""
+"The optional quantity expressed by this line, eg: number of product sold. "
+"The quantity is not a legal requirement but is very useful for some reports."
+msgstr ""
+"La cantidad opcional expresada en el apunte, por ejemplo: número de "
+"productos vendidos. Esta cantidad no supone un requisito legal pero es útil "
+"para algunos informes."
+
+#. 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 "Esta información se utiliza en los reportes Intrastat"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__total_amount
+msgid "Total Fiscal Amount"
+msgstr "Importe fiscal total"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_tree
+msgid "Total amount"
+msgstr "Importe Total"
+
+#. 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 "Importe fiscal total de la declaración en la moneda de la compañía."
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form
+msgid "Transaction"
+msgstr "Transacción"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__transaction_suppl_unit_qty
+msgid "Transaction Suppl Unit Qty"
+msgstr "Cantidad de unidades suplementarias de la transacción"
+
+#. 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 "Tipos de transacción"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__transaction_weight
+msgid "Transaction Weight"
+msgstr "Peso de transacción"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__transaction_suppl_unit_qty
+msgid "Transaction quantity in Intrastat Supplementary Unit"
+msgstr "Cantidad de transacciones en la unidad suplementaria Intrastat"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__transaction_weight
+msgid "Transaction weight in Kg: Quantity x Product Weight"
+msgstr "Peso de la transacción en Kg: Cantidad x Peso del producto"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_tree
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Transactions"
+msgstr "Transacciones"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Modo de transporte"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "Transport Mode Code"
+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 "Modos de transporte"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__declaration_type
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__declaration_type
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__declaration_type
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Type"
+msgstr "Tipo"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Unit Weight"
+msgstr "Peso unitario"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_unread
+msgid "Unread Messages"
+msgstr "Mensajes no leídos"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr "Contador de mensajes sin leer"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__revision
+msgid "Used to keep track of changes"
+msgstr "Usado para rastrear los cambios"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "VAT"
+msgstr "NIF"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__vat
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__vat
+msgid "VAT Number"
+msgstr "Número NIF"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"VAT number of partner '%s' is '%s'. If this partner is from Northern "
+"Ireland, his VAT number should be updated to his new VAT number starting "
+"with 'XI' following Brexit. If this partner is from Great Britain, maybe the "
+"fiscal position was wrong on invoice '%s' (the fiscal position was '%s')."
+msgstr ""
+"El NIF del contacto \"%s\" es \"%s\". Si este contacto es de Irlanda del "
+"Norte, su NIF debe actualizarse a su nuevo NIF que empieza por \"XI\" tras "
+"el Brexit. Si este contacto es de Gran Bretaña, tal vez la posición fiscal "
+"era errónea en la factura '%s' (la posición fiscal era '%s')."
+
+#. 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 "Válido"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_stock_warehouse
+msgid "Warehouse"
+msgstr "Almacén"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__website_message_ids
+msgid "Website Messages"
+msgstr "Mensajes del sitio web"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__website_message_ids
+msgid "Website communication history"
+msgstr "Historial de comunicación del sitio web"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+#, python-format
+msgid "Weight"
+msgstr "Peso"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_id
+msgid "XML Attachment"
+msgstr "Adjunto XML"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_datas
+msgid "XML Export"
+msgstr "Exportar a XML"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_name
+msgid "XML Filename"
+msgstr "Nombre de archivo XML"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__year
+msgid "Year"
+msgstr "Año"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__year_month
+msgid "Year and month of the declaration."
+msgstr "Año y mes de la declaración."
+
+#. 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 "Puede añadir algunos comentarios aquí si lo prefiere."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "You must set company's country !"
+msgstr "¡Debe establecer el país de la compañía!"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "for period %s"
+msgstr "para periodo %s"
diff --git a/intrastat_product/i18n/fr.po b/intrastat_product/i18n/fr.po
new file mode 100644
index 000000000..b008c9934
--- /dev/null
+++ b/intrastat_product/i18n/fr.po
@@ -0,0 +1,1849 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* intrastat_product
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-12-29 10:27+0000\n"
+"PO-Revision-Date: 2021-07-05 00:48+0000\n"
+"Last-Translator: Alexis de Lattre <alexis@via.ecp.fr>\n"
+"Language-Team: \n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid ""
+"(Re)compute the intrastat transaction details from the product master data."
+msgstr "(Re)-générer les transactions intrastat depuis les données source."
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__01
+msgid "01"
+msgstr "01"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__02
+msgid "02"
+msgstr "02"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__03
+msgid "03"
+msgstr "03"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__04
+msgid "04"
+msgstr "04"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__05
+msgid "05"
+msgstr "05"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__06
+msgid "06"
+msgstr "06"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__07
+msgid "07"
+msgstr "07"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__08
+msgid "08"
+msgstr "08"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__09
+msgid "09"
+msgstr "09"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__10
+msgid "10"
+msgstr "10"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__11
+msgid "11"
+msgstr "11"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__12
+msgid "12"
+msgstr "12"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__product_origin_country_code
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line__product_origin_country_code
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line__product_origin_country_code
+msgid ""
+"2 digit code of country of origin of the product except for the UK.\n"
+"Specify 'XI' for UK Northern Ireland and 'XU' for rest of the UK.\n"
+"Specify 'QU' when the country is unknown.\n"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line__src_dest_country_code
+msgid ""
+"2 digit code of country of origin/destination.\n"
+"Specify 'XI' for UK Northern Ireland and 'XU' for rest of the UK."
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line__src_dest_country_code
+msgid ""
+"2 digit code of country of origin/destination.\n"
+"Specify 'XI' for UK Northern Ireland."
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "<span>Intrastat Product Declaration </span>"
+msgstr "<span>DEB</span>"
+
+#. module: intrastat_product
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_product_declaration_date_uniq
+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 ""
+"Une déclaration du même type existe déjà pour ce mois !\n"
+"Vous devriez mettre à jour cette DEB ou modifier son numéro de révision."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__amount_accessory_cost_company_currency
+#, python-format
+msgid "Accessory Costs"
+msgstr "Frais accessoires"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__action
+msgid "Action"
+msgstr "Action"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_needaction
+msgid "Action Needed"
+msgstr "Action requise"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction__active
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__active
+msgid "Active"
+msgstr "Actif"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_ids
+msgid "Activities"
+msgstr "Activités"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_state
+msgid "Activity State"
+msgstr "État de l'activité"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_4
+msgid "Air"
+msgstr "Air"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_4
+msgid "Air Transport"
+msgstr "Transport par air"
+
+#. module: intrastat_product
+#: model:res.groups,comment:intrastat_product.group_invoice_intrastat_transaction_details
+msgid "Allow to encode Intrastat Transaction Details on Invoices"
+msgstr "Possibilité de saisie des paramètres intrastat sur les factures"
+
+#. module: intrastat_product
+#: 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 ""
+"Montant dans la monnaie société des frais accessoires associés à cette ligne "
+"de facture (par défaut, les frais accessoires sont calculés au pro-rata du "
+"montant de chaque ligne de facture."
+
+#. module: intrastat_product
+#: 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 ""
+"Montant en monnaie société à inscrire dans la DEB. Montant en monnaie "
+"société = montant dans la devise de la facture converti à la date de la "
+"facture."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"An XML Export already exists for %s. To re-generate it, you must first "
+"delete it."
+msgstr ""
+"Un export XML existe déjà pour %s. Pour le re-générer, vous devez d'abord le "
+"supprimer."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Append"
+msgstr "Ajout"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_form
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Archived"
+msgstr "Archivés"
+
+#. module: intrastat_product
+#: 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Arrivals"
+msgstr "Introductions"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_attachment_count
+msgid "Attachment Count"
+msgstr "Nombre de pièces jointes"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Back to Draft"
+msgstr "Remettre en brouillon"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Before going back to draft, you must delete the XML export."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Cannot delete the declaration %s because it is in Done state."
+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 "Code"
+
+#. module: intrastat_product
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_region_intrastat_region_code_unique
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_transaction_intrastat_transaction_code_unique
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_transport_mode_intrastat_transport_code_unique
+msgid "Code must be unique."
+msgstr "Le code doit être unique."
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search
+msgid "Code or Description"
+msgstr "Code ou description"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_res_company
+msgid "Companies"
+msgstr "Sociétés"
+
+#. 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search
+msgid "Company"
+msgstr "Société"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__company_country_code
+msgid "Company Country Code"
+msgstr "Code pays de la société"
+
+#. 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 "Monnaie de la société"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__computation_line_ids
+#, python-format
+msgid "Computation Lines"
+msgstr "Lignes de transaction"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Compute"
+msgstr "Calculer"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_res_config_settings
+msgid "Config Settings"
+msgstr "Configuration"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"Conversion from Intrastat Supplementary Unit '%s' to Unit of Measure is not "
+"implemented yet."
+msgstr ""
+"La conversion de l'unité supplémentaire de la DEB '%s' vers une unité de "
+"mesure Odoo n'est pas encore implémenté."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Conversion from unit of measure '%s' to '%s' is not implemented yet."
+msgstr ""
+"La conversion de l'unité de mesure '%s' vers '%s' n'est pas implémenté."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"Conversion from unit of measure '%s' to 'Kg' is not implemented yet. It is "
+"needed for product '%s'."
+msgstr ""
+"La conversion de l'unité de mesure '%s' vers 'Kg' n'est pas encore "
+"implémenté. Elle est requise pour l'article '%s'."
+
+#. 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 "Pays"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__src_dest_country_code
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__src_dest_country_code
+#, fuzzy
+msgid "Country Code"
+msgstr "Code pays de la société"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__product_origin_country_id
+msgid "Country of Origin"
+msgstr "Pays d'origine"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__product_origin_country_code
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__product_origin_country_code
+#: 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_code
+#: 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 "Pays d'origine de l'article"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Pays d'origine/destination"
+
+#. 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 "Pays d'origine de l'article i.e. article 'made in ____'"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__product_origin_country_id
+msgid "Country of origin of the product i.e. product 'made in ____'."
+msgstr "Pays d'origine de l'article i.e. article 'made in ____'."
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__create_uid
+#: 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_result_view__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 "Créé par"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__create_date
+#: 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_result_view__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 "Créé le"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__currency_id
+msgid "Currency"
+msgstr "Devise"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Date"
+msgstr "Date"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form
+msgid "Declaration"
+msgstr "DEB"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__declaration_line_id
+msgid "Declaration Line"
+msgstr "Ligne de DEB"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#, python-format
+msgid "Declaration Lines"
+msgstr "Lignes de DEB"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Declaration for Arrivals"
+msgstr "DEB introduction"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Declaration for Dispatches"
+msgstr "DEB expédition"
+
+#. 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 "Région intrastat par défaut"
+
+#. 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 "Transaction DEB par défaut pour les factures client"
+
+#. 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 "Transaction DEB par défaut pour les factures fournisseur"
+
+#. 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 "Transaction DEB par défaut pour les avoirs client"
+
+#. 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 "Transaction DEB par défaut pour les avoirs fournisseur"
+
+#. 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 "Mode de transport par défaut"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Delete XML Export"
+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 "Description"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Destination Country"
+msgstr "Pays destination"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__src_dest_country_id
+#: model:ir.model.fields,help:intrastat_product.field_account_move__src_dest_country_id
+#: model:ir.model.fields,help:intrastat_product.field_account_payment__src_dest_country_id
+msgid "Destination country for dispatches. Origin country for arrivals."
+msgstr ""
+"Pays destination pour les expéditions. Pays de provenance pour les "
+"introductions."
+
+#. 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Dispatches"
+msgstr "Expéditions"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_hs_code__display_name
+#: 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_result_view__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
+#: model:ir.model.fields,field_description:intrastat_product.field_res_company__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_sale_order__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_location__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse__display_name
+msgid "Display Name"
+msgstr "Afficher le nom"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__state__done
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Done"
+msgstr "Terminé"
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__state__draft
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Draft"
+msgstr "Brouillon"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Excel Export"
+msgstr "Export Excel"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Extended"
+msgstr "Détaillée"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Valeur fiscale"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_7
+msgid "Fixed installations"
+msgstr "Installations de transport fixe"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_7
+msgid "Fixed transport installations (e.g. pipelines, high-tension cables)"
+msgstr "Installations de transport fixe (pipelines, câbles haute-tension)"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_follower_ids
+msgid "Followers"
+msgstr "Suiveurs"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#, python-format
+msgid "Generate Declaration Lines"
+msgstr "Générer les lignes de DEB"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#, python-format
+msgid "Generate Lines from Invoices"
+msgstr "Générer les lignes à partir des factures"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#, python-format
+msgid "Generate XML Declaration File"
+msgstr "Générer le fichier XML de la DEB"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Generate lines from invoices: results"
+msgstr "Génération des lignes à partir des factures: résultats"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Go to Accounting Configuration Settings screen"
+msgstr "Aller à la page de configuration de la comptabilité"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Group By"
+msgstr "Grouper par"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_hs_code
+msgid "H.S. Code"
+msgstr "Code S.H."
+
+#. module: intrastat_product
+#: model:ir.ui.menu,name:intrastat_product.intrastat_code_menu
+msgid "H.S. Codes"
+msgstr "Codes S.H."
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "HS Code"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line__id
+#: model:ir.model.fields,field_description:intrastat_product.field_hs_code__id
+#: 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_result_view__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
+#: model:ir.model.fields,field_description:intrastat_product.field_res_company__id
+#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings__id
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner__id
+#: model:ir.model.fields,field_description:intrastat_product.field_sale_order__id
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_location__id
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse__id
+msgid "ID"
+msgstr "ID"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_exception_icon
+msgid "Icon"
+msgstr "Icône"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_needaction
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_has_error
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: intrastat_product
+#: 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 "Inclure les frais accessoires dans la valeur fiscale des produits"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Incoterm"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_8
+msgid "Inland waterway"
+msgstr "Navigation intérieure"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_8
+msgid "Inland waterway transport"
+msgstr "Transport par navigation intérieure"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__hs_code_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_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 "Code pour la DEB"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Intrastat Code %s:"
+msgstr "Code intrastat %s :"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__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 "DEB"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form
+msgid "Intrastat Declaration Line"
+msgstr "Ligne de DEB"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_tree
+msgid "Intrastat Declaration Lines"
+msgstr "Lignes de DEB"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_graph
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_pivot
+msgid "Intrastat Product"
+msgstr "DEB"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_product_computation_line
+msgid "Intrastat Product Computataion Lines"
+msgstr "Lignes de transaction de la DEB"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__computation_line_ids
+msgid "Intrastat Product Computation Lines"
+msgstr "Lignes de calcul de la DEB"
+
+#. 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Intrastat Product Declaration"
+msgstr "DEB"
+
+#. 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 "Lignes de DEB"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_tree
+msgid "Intrastat Product Declarations"
+msgstr "DEBs"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_product_declaration
+msgid "Intrastat Product Report Base Object"
+msgstr "Intrastat Product Report Base Object"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_region_view_form
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_region_view_tree
+#, python-format
+msgid "Intrastat Region"
+msgstr "Région pour la DEB"
+
+#. 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 "Régions pour la DEB"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_result_view_form
+msgid "Intrastat Result View"
+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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_form
+msgid "Intrastat Supplementary Unit"
+msgstr "Unité de mesure supplémentaire pour la DEB"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_unit
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_tree
+msgid "Intrastat Supplementary Units"
+msgstr "Unités de mesure supplémentaire pour la DEB"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form
+#, python-format
+msgid "Intrastat Transaction"
+msgstr "Transaction DEB"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_transaction_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_transaction_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_transaction_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_form
+msgid "Intrastat Transaction Type"
+msgstr "Type de transaction DEB"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_tree
+msgid "Intrastat Transaction Types"
+msgstr "Types de transaction DEB"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "Intrastat Transaction code"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_transport_mode
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_transport_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_transport_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_transport_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_form
+msgid "Intrastat Transport Mode"
+msgstr "Mode de transport pour la DEB"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_tree
+msgid "Intrastat Transportat Modes"
+msgstr "Modes de transport pour la DEB"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_report_intrastat_product_product_declaration_xls
+#, fuzzy
+msgid "Intrastat declaration"
+msgstr "DEB"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_account_move_intrastat_line
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_line_ids
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_line_ids
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_line_ids
+msgid "Intrastat declaration details"
+msgstr "Lignes pour la DEB"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Intrastat information"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__intrastat_transaction_id
+#: model:ir.model.fields,help:intrastat_product.field_account_move__intrastat_transaction_id
+#: model:ir.model.fields,help:intrastat_product.field_account_payment__intrastat_transaction_id
+msgid "Intrastat nature of transaction"
+msgstr "Nature de la transaction pour la DEB"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Intrastat transaction details"
+msgstr "Transactions pour la DEB"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Invalid Year!"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_stock_location
+msgid "Inventory Locations"
+msgstr "Emplacements de stock"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__move_id
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__invoice_id
+#, python-format
+msgid "Invoice"
+msgstr "Facture"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Invoice %s, line %s"
+msgstr "Facture %s, ligne %s"
+
+#. module: intrastat_product
+#: model:res.groups,name:intrastat_product.group_invoice_intrastat_transaction_details
+msgid "Invoice Intrastat Transaction Details"
+msgstr "Saisie des informations de transaction DEB sur la facture"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__invoice_line_id
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__invoice_line_id
+msgid "Invoice Line"
+msgstr "Ligne de facture"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_account_move
+msgid "Journal Entry"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_account_move_line
+msgid "Journal Item"
+msgstr "Ligne comptable"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form
+msgid "Kg"
+msgstr "Kg"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_hs_code____last_update
+#: 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_result_view____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
+#: model:ir.model.fields,field_description:intrastat_product.field_res_company____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_sale_order____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_location____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse____last_update
+msgid "Last Modified on"
+msgstr "Dernière Modification le"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__write_uid
+#: 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__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_region__write_uid
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_result_view__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 "Dernière modification par"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__write_date
+#: 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__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_region__write_date
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_result_view__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 "Dernière modification le"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_main_attachment_id
+msgid "Main Attachment"
+msgstr "Pièce jointe principale"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_ids
+msgid "Messages"
+msgstr "Messages"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing Intrastat Code on product %s. "
+msgstr "Code intrastat manquant sur l'article %s. "
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing VAT Number on partner '%s'"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"Missing country on invoice partner '%s' or on the delivery address (partner "
+"'%s'). "
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing unit of measure."
+msgstr "Unité de mesure manquante."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing weight on product %s."
+msgstr "Poids manquant sur l'article %s."
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__month
+msgid "Month"
+msgstr "Mois"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__my_activity_date_deadline
+msgid "My Activity Deadline"
+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 "Nom"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_search
+msgid "Name, Code or Description"
+msgstr "Nom, code ou description"
+
+#. 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 "Poids net en Kg"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr "Date limite de la prochaine activité"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_summary
+msgid "Next Activity Summary"
+msgstr "Résumé de la prochaine activité"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_type_id
+msgid "Next Activity Type"
+msgstr "Type de la prochaine activité"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Nihil"
+msgstr "Néant"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "No"
+msgstr "Non"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "No XML File has been generated."
+msgstr "Fichier XML non généré."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "No records found for the selected period !"
+msgstr "Aucun enregistrement trouvé pour la période sélectionnée !"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__note
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_result_view__note
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Notes"
+msgstr "Notes"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_needaction_counter
+msgid "Number of Actions"
+msgstr "Nombre d'actions"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__num_decl_lines
+msgid "Number of Declaration Lines"
+msgstr "Nombre de lignes de déclaration"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_has_error_counter
+msgid "Number of errors"
+msgstr "Nombre d'erreurs"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_unread_counter
+msgid "Number of unread messages"
+msgstr "Nombre de messages non plus"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_result_view_form
+msgid "Ok"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"On invoice '%s', the source/destination country is '%s' which is not part of "
+"the European Union."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"On invoice '%s', the source/destination country is United-Kingdom and the "
+"fiscal position is '%s'. Make sure that the fiscal position is right. If the "
+"origin/destination is Northern Ireland, please set the VAT number of the "
+"partner '%s' in Odoo with its new VAT number starting with 'XI' following "
+"Brexit."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"On invoice '%s', the source/destination country is United-Kingdom, the "
+"fiscal position is '%s' and the partner's VAT number is '%s'. Make sure that "
+"the fiscal position is right. If the origin/destination is Northern Ireland, "
+"please update the VAT number of the partner '%s' in Odoo with its new VAT "
+"number starting with 'XI' following Brexit."
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Origin Region"
+msgstr "Région d'origine"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Origin country"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__src_dest_region_id
+#: model:ir.model.fields,help:intrastat_product.field_account_move__src_dest_region_id
+#: model:ir.model.fields,help:intrastat_product.field_account_payment__src_dest_region_id
+msgid ""
+"Origin region for dispatches, destination region for arrivals. This field is "
+"used for the Intrastat Declaration."
+msgstr ""
+"Région d'origine pour les expéditions, région de destination pour les "
+"introductions. Ce champ est utilisé pour la DEB."
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__src_dest_country_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__src_dest_country_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__src_dest_country_id
+msgid "Origin/Destination Country"
+msgstr "Pays d'origine/destination"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__src_dest_region_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__src_dest_region_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__src_dest_region_id
+msgid "Origin/Destination Region"
+msgstr "Région d'origine/destination"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_9
+msgid "Own propulsion"
+msgstr "Propulsion propre"
+
+#. 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 ""
+"Propulsion propre (sert à désigner le mode de transport d'un bien acheminé "
+"par ses propres moyens : vente d'un avion ou d'un camion, l'avion et le "
+"camion se déplaçant de manière autonome)"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__partner_id
+#, python-format
+msgid "Partner"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__year_month
+msgid "Period"
+msgstr "Période"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_result_view
+msgid "Pop-up to show errors on intrastat report generation"
+msgstr ""
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_5
+msgid "Post"
+msgstr "La Poste"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_5
+msgid "Postal consignments"
+msgstr "Envois postaux"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__product_id
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__product_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+#, python-format
+msgid "Product"
+msgstr "Article"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_tree
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_tree
+#, python-format
+msgid "Product C/O"
+msgstr "Pays ori. article"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "Product C/O Code"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__quantity
+msgid "Quantity"
+msgstr "Quantité"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_2
+msgid "Rail"
+msgstr "Rail"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_2
+msgid "Railway transport (including lorries on railway wagons)"
+msgstr "Transport par chemin de fer (y compris camions sur wagon)"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Reference"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__uom_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Regular UoM"
+msgstr "UdM normale"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form
+msgid "Related Transactions"
+msgstr "Transactions associées"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Replace"
+msgstr "Remplace"
+
+#. 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__reporting_level
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__reporting_level
+msgid "Reporting Level"
+msgstr "Niveau d'obligation"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_user_id
+msgid "Responsible User"
+msgstr "Utilisateur responsable"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__revision
+msgid "Revision"
+msgstr "Révision"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_3
+msgid "Road"
+msgstr "Route"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_3
+msgid "Road Transport"
+msgstr "Transport routier"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_sale_order
+msgid "Sales Order"
+msgstr "Commandes client"
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_1
+msgid "Sea"
+msgstr "Mer"
+
+#. 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 "Transport maritime (y compris camions ou wagons sur bateau)"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Search Intrastat Product Declarations"
+msgstr "Search Intrastat Product Declarations"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Search Intrastat Supplementary Units"
+msgstr "Search Intrastat Supplementary Units"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search
+msgid "Search Intrastat Transaction Types"
+msgstr "Search Intrastat Transaction Types"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_search
+msgid "Search Intrastat Transport Modes"
+msgstr "Search Intrastat Transport Modes"
+
+#. 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 ""
+"Sélectionnez l'unité de mesure normale d'Odoo qui correspond à cette unité "
+"de mesure supplémentaire pour la DEB"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__sequence
+msgid "Sequence"
+msgstr "Séquence"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner__invoice_intrastat_detail
+#: model:ir.model.fields,field_description:intrastat_product.field_res_users__invoice_intrastat_detail
+msgid "Show intrastat details in invoice report"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Standard"
+msgstr "Simplifié"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__state
+msgid "State"
+msgstr "État"
+
+#. 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 ""
+"État de la déclaration. Quand l'état est à 'Terminé', les paramètres passent "
+"en lecture seule."
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Unité suppl."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Qté unité suppl."
+
+#. 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 "Unités supplémentaires"
+
+#. 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 "Quantité exprimée en unité supplémentaire"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "The Declaration Action has been set to 'nihil'."
+msgstr "L'action de la déclaration a été mise à 'néant'."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "The VAT number '%s' is invalid."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "The VAT number is not set for the partner '%s'."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"The default Incoterm of the Company is not set, please configure it first."
+msgstr ""
+"L'incoterm par défaut de la société n'est pas configuré ; faites-le au "
+"préalable."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"The default Intrastat Transport Mode of the Company is not set, please "
+"configure it first."
+msgstr ""
+"Le mode de transport par défault de la société n'est pas configuré ; faites-"
+"le au préalable."
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line__invoice_id
+msgid "The move of this entry line."
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__quantity
+msgid ""
+"The optional quantity expressed by this line, eg: number of product sold. "
+"The quantity is not a legal requirement but is very useful for some reports."
+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 "Cette donnée est utilisée pour la DEB"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__total_amount
+#, fuzzy
+msgid "Total Fiscal Amount"
+msgstr "Montant total"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_tree
+msgid "Total amount"
+msgstr "Montant total"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__total_amount
+#, fuzzy
+msgid "Total fiscal amount in company currency of the declaration."
+msgstr "Année et mois de la DEB."
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form
+msgid "Transaction"
+msgstr "Transaction"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__transaction_suppl_unit_qty
+msgid "Transaction Suppl Unit Qty"
+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 "Types de transaction"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__transaction_weight
+msgid "Transaction Weight"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__transaction_suppl_unit_qty
+msgid "Transaction quantity in Intrastat Supplementary Unit"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__transaction_weight
+msgid "Transaction weight in Kg: Quantity x Product Weight"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_tree
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Transactions"
+msgstr "Opérations"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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 "Mode de transport"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "Transport Mode Code"
+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 "Modes de transport"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__declaration_type
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__declaration_type
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__declaration_type
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Type"
+msgstr "Type"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Unit Weight"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_unread_counter
+#, fuzzy
+msgid "Unread Messages Counter"
+msgstr "Pays pour la DEB"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__revision
+msgid "Used to keep track of changes"
+msgstr "Used to keep track of changes"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "VAT"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__vat
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__vat
+msgid "VAT Number"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"VAT number of partner '%s' is '%s'. If this partner is from Northern "
+"Ireland, his VAT number should be updated to his new VAT number starting "
+"with 'XI' following Brexit. If this partner is from Great Britain, maybe the "
+"fiscal position was wrong on invoice '%s' (the fiscal position was '%s')."
+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 "Valide"
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_stock_warehouse
+msgid "Warehouse"
+msgstr "Entrepôt"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+#, python-format
+msgid "Weight"
+msgstr "Poids"
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_id
+msgid "XML Attachment"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_datas
+msgid "XML Export"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_name
+msgid "XML Filename"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__year
+msgid "Year"
+msgstr "Année"
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__year_month
+msgid "Year and month of the declaration."
+msgstr "Année et mois de la DEB."
+
+#. 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 "Vous pouvez ajouter des commentaires ici si vous le voulez."
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, fuzzy, python-format
+msgid "You must set company's country !"
+msgstr "Vous devez configurer le pays de la société !"
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "for period %s"
+msgstr ""
+
+#~ msgid "Invalid Year !"
+#~ msgstr "Année invalide !"
+
+#~ msgid "Used in views and methods of localization modules."
+#~ msgstr "Used in views and methods of localization modules."
+
+#, fuzzy
+#~ msgid "Company Country code"
+#~ msgstr "Code pays de la société"
+
+#~ msgid ""
+#~ "Intrastat Codes should contain 8 digits. This is not the case for "
+#~ "Intrastat Code '%s' which has %d digits."
+#~ msgstr ""
+#~ "Les codes pour la DEB doivent être composés de 8 chiffres. Ce n'est pas "
+#~ "le cas du code pour la DEB '%s' qui compte %d chiffres."
+
+#~ msgid ""
+#~ "Intrastat Codes should only contain digits. This is not the case for code "
+#~ "'%s'."
+#~ msgstr ""
+#~ "Les codes pour la DEB ne doivent contenir que des chiffres. Ce n'est pas "
+#~ "le cas du code '%s'."
+
+#~ msgid "Intrastat Country"
+#~ msgstr "Pays pour la DEB"
+
+#~ msgid "Journal Entries"
+#~ msgstr "Écritures comptables"
+
+#~ msgid "Select the declaration type."
+#~ msgstr "Sélectionnez le type de déclaration."
+
+#~ msgid ""
+#~ "Missing H.S. code on product %s. This product is present in invoice %s."
+#~ msgstr ""
+#~ "Code S.H. manquant sur l'article %s. Cet article est présent sur la "
+#~ "facture %s."
+
+#~ msgid ""
+#~ "Missing unit of measure on the line with %d product(s) '%s' on invoice "
+#~ "'%s'."
+#~ msgstr ""
+#~ "Unité de mesure manquante sur la ligne où figurent %d article(s) '%s' sur "
+#~ "la facture '%s'."
+
+#~ msgid "Please adjust this line manually."
+#~ msgstr "Ligne à finaliser manuellement."
+
+#~ msgid ""
+#~ "Please correct the Intrastat Supplementary Unit settings and regenerate "
+#~ "the lines or adjust the lines with Intrastat Code '%s' manually"
+#~ msgstr ""
+#~ "Corrigez le paramétrage de l'unité de mesure supplémentaire pour la DEB "
+#~ "et regénérez les lignes ou ajustez manuellement les lignes avec le code "
+#~ "pour la DEB '%s'"
+
+#~ msgid ""
+#~ "Please correct the product record and regenerate the lines or adjust the "
+#~ "impacted lines manually"
+#~ msgstr ""
+#~ "Corrigez le paramétrage de l'article et regénérez les lignes ou ajustez "
+#~ "manuellement les lignes concernées."
+
+#~ msgid ""
+#~ "Please correct the unit of measure settings and regenerate the lines or "
+#~ "adjust the impacted lines manually"
+#~ msgstr ""
+#~ "Corrigez le paramétrage de l'unité de mesure et regénérez les lignes ou "
+#~ "ajustez manuellement les lignes concernées"
+
+#~ msgid "Default Incoterm for Intrastat"
+#~ msgstr "Incoterm par défaut pour la DEB"
+
+#~ msgid "Destination Region"
+#~ msgstr "Région destination"
+
+#~ msgid ""
+#~ "International Commercial Terms are a series of predefined commercial "
+#~ "terms used in international transactions."
+#~ msgstr ""
+#~ "Les Incoterms sont une série de termes commerciaux prédéfinie utilisés "
+#~ "dans les transactions internationales."
+
+#~ msgid "Origin Country"
+#~ msgstr "Pays d'origine"
+
+#~ msgid "Quotation"
+#~ msgstr "Devis"
diff --git a/intrastat_product/i18n/intrastat_product.pot b/intrastat_product/i18n/intrastat_product.pot
new file mode 100644
index 000000000..7249fa974
--- /dev/null
+++ b/intrastat_product/i18n/intrastat_product.pot
@@ -0,0 +1,1723 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* intrastat_product
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid ""
+"(Re)compute the intrastat transaction details from the product master data."
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__01
+msgid "01"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__02
+msgid "02"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__03
+msgid "03"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__04
+msgid "04"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__05
+msgid "05"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__06
+msgid "06"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__07
+msgid "07"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__08
+msgid "08"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__09
+msgid "09"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__10
+msgid "10"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__11
+msgid "11"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__month__12
+msgid "12"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__product_origin_country_code
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line__product_origin_country_code
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line__product_origin_country_code
+msgid ""
+"2 digit code of country of origin of the product except for the UK.\n"
+"Specify 'XI' for UK Northern Ireland and 'XU' for rest of the UK.\n"
+"Specify 'QU' when the country is unknown.\n"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line__src_dest_country_code
+msgid ""
+"2 digit code of country of origin/destination.\n"
+"Specify 'XI' for UK Northern Ireland and 'XU' for rest of the UK."
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_computation_line__src_dest_country_code
+msgid ""
+"2 digit code of country of origin/destination.\n"
+"Specify 'XI' for UK Northern Ireland."
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "<span>Intrastat Product Declaration </span>"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_product_declaration_date_uniq
+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:0
+#: 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_product_declaration__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction__active
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__active
+msgid "Active"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_4
+msgid "Air"
+msgstr ""
+
+#. module: intrastat_product
+#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_4
+msgid "Air Transport"
+msgstr ""
+
+#. module: intrastat_product
+#: model:res.groups,comment:intrastat_product.group_invoice_intrastat_transaction_details
+msgid "Allow to encode Intrastat Transaction Details on Invoices"
+msgstr ""
+
+#. module: intrastat_product
+#: 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
+#: 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
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"An XML Export already exists for %s. To re-generate it, you must first "
+"delete it."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Append"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_form
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Archived"
+msgstr ""
+
+#. module: intrastat_product
+#: 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Arrivals"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Back to Draft"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Before going back to draft, you must delete the XML export."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Cannot delete the declaration %s because it is in Done state."
+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
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_region_intrastat_region_code_unique
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_transaction_intrastat_transaction_code_unique
+#: model:ir.model.constraint,message:intrastat_product.constraint_intrastat_transport_mode_intrastat_transport_code_unique
+msgid "Code must be unique."
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms: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_terms: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:0
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Compute"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_res_config_settings
+msgid "Config Settings"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, 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:0
+#, 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:0
+#, 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_intrastat_product_computation_line__src_dest_country_code
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__src_dest_country_code
+msgid "Country Code"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__product_origin_country_id
+msgid "Country of Origin"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__product_origin_country_code
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__product_origin_country_code
+#: 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_code
+#: 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:0
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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,help:intrastat_product.field_account_move_intrastat_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_account_move_intrastat_line__create_uid
+#: 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_result_view__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
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__create_date
+#: 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_result_view__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
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__currency_id
+msgid "Currency"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Date"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms: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:0
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model_terms: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:0
+#, python-format
+msgid "Declaration for Arrivals"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Declaration for Dispatches"
+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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+msgid "Delete XML Export"
+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
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Destination Country"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__src_dest_country_id
+#: model:ir.model.fields,help:intrastat_product.field_account_move__src_dest_country_id
+#: model:ir.model.fields,help:intrastat_product.field_account_payment__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_terms: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_account_move__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_hs_code__display_name
+#: 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_result_view__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
+#: model:ir.model.fields,field_description:intrastat_product.field_res_company__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_sale_order__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_location__display_name
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__state__done
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Done"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields.selection,name:intrastat_product.selection__intrastat_product_declaration__state__draft
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Draft"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms: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:0
+#, python-format
+msgid "Extended"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#: model_terms: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:0
+#: model_terms: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:0
+#: model_terms: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:0
+#, python-format
+msgid "Generate lines from invoices: results"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Go to Accounting Configuration Settings screen"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search
+#: model_terms: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
+#: model:ir.ui.menu,name:intrastat_product.intrastat_code_menu
+msgid "H.S. Codes"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "HS Code"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line__id
+#: model:ir.model.fields,field_description:intrastat_product.field_hs_code__id
+#: 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_result_view__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
+#: model:ir.model.fields,field_description:intrastat_product.field_res_company__id
+#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings__id
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner__id
+#: model:ir.model.fields,field_description:intrastat_product.field_sale_order__id
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_location__id
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse__id
+msgid "ID"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_needaction
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_has_error
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: intrastat_product
+#: 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:0
+#: 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
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__hs_code_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_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
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Intrastat Code %s:"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form
+msgid "Intrastat Declaration Line"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_tree
+msgid "Intrastat Declaration Lines"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_graph
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_pivot
+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_terms: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_terms: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:0
+#: 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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_region_view_form
+#: model_terms: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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_result_view_form
+msgid "Intrastat Result View"
+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_terms: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_terms: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:0
+#: 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_terms: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_bank_statement_line__intrastat_transaction_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_transaction_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_transaction_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_form
+msgid "Intrastat Transaction Type"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_tree
+msgid "Intrastat Transaction Types"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "Intrastat Transaction code"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_transport_mode
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_transport_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_transport_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_transport_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_form
+msgid "Intrastat Transport Mode"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_tree
+msgid "Intrastat Transportat Modes"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_report_intrastat_product_product_declaration_xls
+msgid "Intrastat declaration"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_account_move_intrastat_line
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_line_ids
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_line_ids
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_line_ids
+msgid "Intrastat declaration details"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Intrastat information"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__intrastat_transaction_id
+#: model:ir.model.fields,help:intrastat_product.field_account_move__intrastat_transaction_id
+#: model:ir.model.fields,help:intrastat_product.field_account_payment__intrastat_transaction_id
+msgid "Intrastat nature of transaction"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Intrastat transaction details"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, 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:0
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__move_id
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__invoice_id
+#, python-format
+msgid "Invoice"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Invoice %s, line %s"
+msgstr ""
+
+#. module: intrastat_product
+#: model:res.groups,name:intrastat_product.group_invoice_intrastat_transaction_details
+msgid "Invoice Intrastat Transaction Details"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__invoice_line_id
+#: 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.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_account_move
+msgid "Journal Entry"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_account_move_line
+msgid "Journal Item"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form
+#: model_terms: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_account_move____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_hs_code____last_update
+#: 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_result_view____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
+#: model:ir.model.fields,field_description:intrastat_product.field_res_company____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_sale_order____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_location____last_update
+#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__write_uid
+#: 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__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_region__write_uid
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_result_view__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
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__write_date
+#: 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__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_region__write_date
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_result_view__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
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing Intrastat Code on product %s. "
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing VAT Number on partner '%s'"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"Missing country on invoice partner '%s' or on the delivery address (partner "
+"'%s'). "
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing unit of measure."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Missing weight on product %s."
+msgstr ""
+
+#. module: intrastat_product
+#: 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_product_declaration__my_activity_date_deadline
+msgid "My Activity Deadline"
+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_terms: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
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Nihil"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "No"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "No XML File has been generated."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, 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.model.fields,field_description:intrastat_product.field_intrastat_result_view__note
+#: model_terms: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__message_needaction_counter
+msgid "Number of Actions"
+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.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_result_view_form
+msgid "Ok"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"On invoice '%s', the source/destination country is '%s' which is not part of"
+" the European Union."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"On invoice '%s', the source/destination country is United-Kingdom and the "
+"fiscal position is '%s'. Make sure that the fiscal position is right. If the"
+" origin/destination is Northern Ireland, please set the VAT number of the "
+"partner '%s' in Odoo with its new VAT number starting with 'XI' following "
+"Brexit."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"On invoice '%s', the source/destination country is United-Kingdom, the "
+"fiscal position is '%s' and the partner's VAT number is '%s'. Make sure that"
+" the fiscal position is right. If the origin/destination is Northern "
+"Ireland, please update the VAT number of the partner '%s' in Odoo with its "
+"new VAT number starting with 'XI' following Brexit."
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
+msgid "Origin Region"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Origin country"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__src_dest_region_id
+#: model:ir.model.fields,help:intrastat_product.field_account_move__src_dest_region_id
+#: model:ir.model.fields,help:intrastat_product.field_account_payment__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_bank_statement_line__src_dest_country_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__src_dest_country_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__src_dest_country_id
+msgid "Origin/Destination Country"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__src_dest_region_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move__src_dest_region_id
+#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__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
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__partner_id
+#, python-format
+msgid "Partner"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__year_month
+msgid "Period"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_intrastat_result_view
+msgid "Pop-up to show errors on intrastat report generation"
+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:0
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__product_id
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__product_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+#, python-format
+msgid "Product"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_tree
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_tree
+#, python-format
+msgid "Product C/O"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "Product C/O Code"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__quantity
+msgid "Quantity"
+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_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Reference"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__uom_id
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Regular UoM"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_line_view_form
+msgid "Related Transactions"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "Replace"
+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__reporting_level
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__reporting_level
+msgid "Reporting Level"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_user_id
+msgid "Responsible User"
+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:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model,name:intrastat_product.model_sale_order
+msgid "Sales Order"
+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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
+msgid "Search Intrastat Product Declarations"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_unit_search
+msgid "Search Intrastat Supplementary Units"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_mode_search
+msgid "Search Intrastat Transaction Types"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms: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_unit__uom_id
+msgid ""
+"Select the regular Unit of Measure of Odoo that corresponds to this "
+"Intrastat Supplementary Unit."
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_res_partner__invoice_intrastat_detail
+#: model:ir.model.fields,field_description:intrastat_product.field_res_users__invoice_intrastat_detail
+msgid "Show intrastat details in invoice report"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, 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
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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:0
+#: 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:0
+#, python-format
+msgid "The Declaration Action has been set to 'nihil'."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "The VAT number '%s' is invalid."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid "The VAT number is not set for the partner '%s'."
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, 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:0
+#, 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_intrastat_product_computation_line__invoice_id
+msgid "The move of this entry line."
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__quantity
+msgid ""
+"The optional quantity expressed by this line, eg: number of product sold. "
+"The quantity is not a legal requirement but is very useful for some reports."
+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_terms: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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_form
+msgid "Transaction"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__transaction_suppl_unit_qty
+msgid "Transaction Suppl Unit Qty"
+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.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__transaction_weight
+msgid "Transaction Weight"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__transaction_suppl_unit_qty
+msgid "Transaction quantity in Intrastat Supplementary Unit"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_account_move_intrastat_line__transaction_weight
+msgid "Transaction weight in Kg: Quantity x Product Weight"
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_computation_line_view_tree
+#: model_terms: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:0
+#: 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
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "Transport Mode Code"
+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__declaration_type
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__declaration_type
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__declaration_type
+#: model_terms: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__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: intrastat_product
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+msgid "Unit Weight"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_unread_counter
+msgid "Unread Messages Counter"
+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
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "VAT"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__vat
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__vat
+msgid "VAT Number"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
+#, python-format
+msgid ""
+"VAT number of partner '%s' is '%s'. If this partner is from Northern "
+"Ireland, his VAT number should be updated to his new VAT number starting "
+"with 'XI' following Brexit. If this partner is from Great Britain, maybe the"
+" fiscal position was wrong on invoice '%s' (the fiscal position was '%s')."
+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
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#: 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
+#: model_terms:ir.ui.view,arch_db:intrastat_product.report_invoice_document_intrastat_product
+#, python-format
+msgid "Weight"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_id
+msgid "XML Attachment"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_datas
+msgid "XML Export"
+msgstr ""
+
+#. module: intrastat_product
+#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_name
+msgid "XML Filename"
+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:0
+#, python-format
+msgid "You must set company's country !"
+msgstr ""
+
+#. module: intrastat_product
+#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
+#, python-format
+msgid "for period %s"
+msgstr ""
diff --git a/intrastat_product/models/__init__.py b/intrastat_product/models/__init__.py
new file mode 100644
index 000000000..976331c13
--- /dev/null
+++ b/intrastat_product/models/__init__.py
@@ -0,0 +1,11 @@
+from . import res_company
+from . import res_partner
+from . import account_move
+from . import hs_code
+from . import intrastat_product_declaration
+from . import intrastat_region
+from . import intrastat_transaction
+from . import intrastat_transport_mode
+from . import intrastat_unit
+from . import sale_order
+from . import stock_warehouse
diff --git a/intrastat_product/models/account_move.py b/intrastat_product/models/account_move.py
new file mode 100644
index 000000000..c23252060
--- /dev/null
+++ b/intrastat_product/models/account_move.py
@@ -0,0 +1,213 @@
+# Copyright 2011-2020 Akretion France (http://www.akretion.com)
+# Copyright 2009-2022 Noviat (http://www.noviat.com)
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+# @author Luc de Meyer <info@noviat.com>
+
+from odoo import api, fields, models
+
+
+class AccountMove(models.Model):
+    _inherit = "account.move"
+
+    intrastat_transaction_id = fields.Many2one(
+        comodel_name="intrastat.transaction",
+        string="Intrastat Transaction Type",
+        ondelete="restrict",
+        tracking=True,
+        check_company=True,
+        help="Intrastat Nature of Transaction",
+        domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",
+    )
+    intrastat_transport_id = fields.Many2one(
+        comodel_name="intrastat.transport_mode",
+        string="Intrastat Transport Mode",
+        ondelete="restrict",
+    )
+    src_dest_country_id = fields.Many2one(
+        comodel_name="res.country",
+        string="Origin/Destination Country",
+        compute="_compute_src_dest_country_id",
+        store=True,
+        help="Destination country for dispatches. Origin country for arrivals.",
+    )
+    src_dest_region_id = fields.Many2one(
+        comodel_name="intrastat.region",
+        string="Origin/Destination Region",
+        default=lambda self: self.env.company.intrastat_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"
+    )
+    intrastat_line_ids = fields.One2many(
+        comodel_name="account.move.intrastat.line",
+        inverse_name="move_id",
+        string="Intrastat Declaration Details",
+    )
+
+    @api.depends("partner_shipping_id.country_id", "partner_id.country_id")
+    def _compute_src_dest_country_id(self):
+        for inv in self:
+            country = inv.partner_shipping_id.country_id or inv.partner_id.country_id
+            if not country:
+                country = inv.company_id.country_id
+            inv.src_dest_country_id = country.id
+
+    def compute_intrastat_lines(self):
+        """
+        Compute the Intrastat Lines so that they can be modified
+        when encoding the Customer/Supplier Invoice.
+        """
+        self.mapped("intrastat_line_ids").unlink()
+        for inv in self:
+            if inv.move_type not in (
+                "out_invoice",
+                "out_refund",
+                "in_invoice",
+                "in_refund",
+            ):
+                continue
+            line_vals = []
+            for line in inv.invoice_line_ids:
+                vals = self._get_intrastat_line_vals(line)
+                if vals:
+                    line_vals.append(vals)
+            if line_vals:
+                inv.intrastat_line_ids = [(0, 0, x) for x in line_vals]
+
+    def _get_intrastat_line_vals(self, line):
+        vals = {}
+        notedict = {
+            "note": "",
+            "line_nbr": 0,
+        }
+        decl_model = self.env["intrastat.product.declaration"]
+        if decl_model._is_product(line):
+            hs_code = line.product_id.get_hs_code_recursively()
+            if not hs_code:
+                return vals
+            weight, qty = decl_model._get_weight_and_supplunits(line, hs_code, notedict)
+            vals.update(
+                {
+                    "invoice_line_id": line.id,
+                    "hs_code_id": hs_code.id,
+                    "transaction_weight": weight,
+                    "transaction_suppl_unit_qty": qty,
+                    "product_origin_country_id": line.product_id.origin_country_id.id,
+                }
+            )
+        return vals
+
+    def _prepare_intrastat_line_info(self, line):
+        is_intrastat_line = bool(line._name == "account.move.intrastat.line")
+        product = line.product_id
+        return {
+            "product_id": product,
+            "hs_code_id": (
+                line.hs_code_id if is_intrastat_line else product.hs_code_id
+            ),
+            "weight": (
+                line.transaction_weight
+                if is_intrastat_line
+                else self._get_intrastat_line_vals(line)["transaction_weight"]
+            ),
+            "origin_country_id": (
+                line.product_origin_country_id
+                if is_intrastat_line
+                else product.origin_country_id
+            ),
+        }
+
+    def _get_intrastat_lines_info(self):
+        """We obtain a list of information that we will need to group at the end by
+        product and sum weight.
+        """
+        res = {}
+        for line in (
+            self.invoice_line_ids.filtered(
+                lambda x: x.product_id.hs_code_id and x.product_id.origin_country_id
+            )
+            if not self.intrastat_line_ids
+            else self.intrastat_line_ids
+        ):
+            res.setdefault(line.product_id.id, {"weight": 0})
+            vals = self._prepare_intrastat_line_info(line)
+            weight = vals.pop("weight")
+            res[line.product_id.id].update(vals)
+            res[line.product_id.id]["weight"] += weight
+        return res.values()
+
+
+class AccountMoveLine(models.Model):
+    _inherit = "account.move.line"
+
+    hs_code_id = fields.Many2one(
+        comodel_name="hs.code",
+        compute="_compute_hs_code_id",
+        string="Intrastat Code",
+    )
+
+    def _compute_hs_code_id(self):
+        for rec in self:
+            intrastat_line = self.move_id.intrastat_line_ids.filtered(
+                lambda r: r.invoice_line_id == rec
+            )
+            rec.hs_code_id = (
+                intrastat_line.hs_code_id or rec.product_id.get_hs_code_recursively()
+            )
+
+
+class AccountMoveIntrastatLine(models.Model):
+    _name = "account.move.intrastat.line"
+    _description = "Intrastat declaration details"
+    _order = "sequence"
+
+    move_id = fields.Many2one(
+        comodel_name="account.move",
+        string="Invoice",
+        ondelete="cascade",
+        required=True,
+    )
+    invoice_line_id = fields.Many2one(
+        comodel_name="account.move.line",
+        string="Invoice Line",
+        ondelete="cascade",
+        required=True,
+    )
+    sequence = fields.Integer(related="invoice_line_id.sequence", store=True)
+    product_id = fields.Many2one(
+        comodel_name="product.product",
+        string="Product",
+        related="invoice_line_id.product_id",
+    )
+    quantity = fields.Float(related="invoice_line_id.quantity")
+    transaction_suppl_unit_qty = fields.Float(
+        help="Transaction quantity in Intrastat Supplementary Unit"
+    )
+    hs_code_id = fields.Many2one(
+        comodel_name="hs.code",
+        string="Intrastat Code",
+        ondelete="restrict",
+        required=True,
+    )
+    transaction_weight = fields.Integer(
+        help="Transaction weight in Kg: Quantity x Product Weight"
+    )
+    product_origin_country_id = fields.Many2one(
+        comodel_name="res.country",
+        string="Country of Origin of the Product",
+        help="Country of origin of the product i.e. product " "'made in ____'.",
+    )
+
+    @api.onchange("invoice_line_id")
+    def _onchange_move_id(self):
+        moves = self.mapped("move_id")
+        dom = [
+            ("exclude_from_invoice_tab", "=", False),
+            ("display_type", "=", False),
+            ("id", "in", moves.mapped("invoice_line_ids").ids),
+            ("id", "not in", moves.mapped("intrastat_line_ids.invoice_line_id").ids),
+        ]
+        return {"domain": {"invoice_line_id": dom}}
diff --git a/intrastat_product/models/hs_code.py b/intrastat_product/models/hs_code.py
new file mode 100644
index 000000000..a54ae43d4
--- /dev/null
+++ b/intrastat_product/models/hs_code.py
@@ -0,0 +1,14 @@
+# Copyright 2011-2020 Akretion (http://www.akretion.com)
+# Copyright 2009-2020 Noviat (http://www.noviat.com)
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+# @author Luc de Meyer <info@noviat.com>
+
+from odoo import fields, models
+
+
+class HSCode(models.Model):
+    _inherit = "hs.code"
+
+    intrastat_unit_id = fields.Many2one(
+        comodel_name="intrastat.unit", string="Intrastat Supplementary Unit"
+    )
diff --git a/intrastat_product/models/intrastat_product_declaration.py b/intrastat_product/models/intrastat_product_declaration.py
new file mode 100644
index 000000000..30b47043b
--- /dev/null
+++ b/intrastat_product/models/intrastat_product_declaration.py
@@ -0,0 +1,1229 @@
+# Copyright 2011-2020 Akretion France (http://www.akretion.com)
+# Copyright 2009-2022 Noviat (http://www.noviat.com)
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+# @author Luc de Meyer <info@noviat.com>
+
+import logging
+from collections import defaultdict
+from datetime import date
+
+from dateutil.relativedelta import relativedelta
+from stdnum.vatin import is_valid
+
+from odoo import _, api, fields, models
+from odoo.exceptions import RedirectWarning, UserError, ValidationError
+from odoo.tools import float_is_zero
+
+_logger = logging.getLogger(__name__)
+
+
+class IntrastatProductDeclaration(models.Model):
+    _name = "intrastat.product.declaration"
+    _description = "Intrastat Product Report Base Object"
+    _rec_name = "year_month"
+    _inherit = ["mail.thread", "mail.activity.mixin"]
+    _order = "year_month desc, declaration_type, revision"
+    _sql_constraints = [
+        (
+            "date_uniq",
+            "unique(year_month, company_id, declaration_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_get(self, fields_list):
+        res = super().default_get(fields_list)
+        decl_date = fields.Date.context_today(self) - relativedelta(months=1)
+        res.update(
+            {"year": str(decl_date.year), "month": str(decl_date.month).zfill(2)}
+        )
+        return res
+
+    company_id = fields.Many2one(
+        comodel_name="res.company",
+        string="Company",
+        required=True,
+        states={"done": [("readonly", True)]},
+        default=lambda self: self.env.company,
+    )
+    company_country_code = fields.Char(
+        related="company_id.partner_id.country_id.code",
+        string="Company Country Code",
+        store=True,
+    )
+    state = fields.Selection(
+        selection=[("draft", "Draft"), ("done", "Done")],
+        readonly=True,
+        tracking=True,
+        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."
+    )
+    year = fields.Char(required=True, states={"done": [("readonly", True)]})
+    month = fields.Selection(
+        selection=[
+            ("01", "01"),
+            ("02", "02"),
+            ("03", "03"),
+            ("04", "04"),
+            ("05", "05"),
+            ("06", "06"),
+            ("07", "07"),
+            ("08", "08"),
+            ("09", "09"),
+            ("10", "10"),
+            ("11", "11"),
+            ("12", "12"),
+        ],
+        required=True,
+        states={"done": [("readonly", True)]},
+    )
+    year_month = fields.Char(
+        compute="_compute_year_month",
+        string="Period",
+        tracking=True,
+        store=True,
+        help="Year and month of the declaration.",
+    )
+    declaration_type = fields.Selection(
+        selection="_get_declaration_type",
+        string="Type",
+        required=True,
+        states={"done": [("readonly", True)]},
+        tracking=True,
+    )
+    action = fields.Selection(
+        selection="_get_action",
+        required=True,
+        default="replace",
+        states={"done": [("readonly", True)]},
+        tracking=True,
+    )
+    revision = fields.Integer(
+        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",
+        readonly=True,
+    )
+    num_decl_lines = fields.Integer(
+        compute="_compute_numbers",
+        string="Number of Declaration Lines",
+        store=True,
+        tracking=True,
+    )
+    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", string="Currency"
+    )
+    reporting_level = fields.Selection(
+        selection="_get_reporting_level",
+        compute="_compute_reporting_level",
+        readonly=False,
+        states={"done": [("readonly", True)]},
+    )
+    xml_attachment_id = fields.Many2one("ir.attachment", string="XML Attachment")
+    xml_attachment_datas = fields.Binary(
+        related="xml_attachment_id.datas", string="XML Export"
+    )
+    xml_attachment_name = fields.Char(
+        related="xml_attachment_id.name", string="XML Filename"
+    )
+
+    @api.model
+    def _get_declaration_type(self):
+        res = []
+        company = self.env.company
+        arrivals = company.intrastat_arrivals
+        dispatches = company.intrastat_dispatches
+        if arrivals != "exempt":
+            res.append(("arrivals", _("Arrivals")))
+        if dispatches != "exempt":
+            res.append(("dispatches", _("Dispatches")))
+        return res
+
+    @api.model
+    def _get_reporting_level(self):
+        return [("standard", _("Standard")), ("extended", _("Extended"))]
+
+    @api.model
+    def _get_action(self):
+        return [
+            ("replace", _("Replace")),
+            ("append", _("Append")),
+            ("nihil", _("Nihil")),
+        ]
+
+    @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, this.month])
+
+    @api.constrains("company_id")
+    def _check_company_country(self):
+        for this in self:
+            if not this.company_id.country_id:
+                raise ValidationError(
+                    _("You must set the country on company '%s'.")
+                    % this.company_id.display_name
+                )
+
+    @api.depends("declaration_line_ids.amount_company_currency")
+    def _compute_numbers(self):
+        rg_res = self.env["intrastat.product.declaration.line"].read_group(
+            [("parent_id", "in", self.ids)],
+            ["parent_id", "amount_company_currency:sum"],
+            ["parent_id"],
+        )
+        mapped_data = {
+            x["parent_id"][0]: {
+                "num_decl_lines": x["parent_id_count"],
+                "total_amount": x["amount_company_currency"],
+            }
+            for x in rg_res
+        }
+        for this in self:
+            this.num_decl_lines = mapped_data.get(this.id, {}).get("num_decl_lines", 0)
+            this.total_amount = mapped_data.get(this.id, {}).get("total_amount", 0)
+
+    @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.depends("declaration_type", "company_id")
+    def _compute_reporting_level(self):
+        for this in self:
+            reporting_level = False
+            if this.declaration_type == "arrivals":
+                reporting_level = (
+                    this.company_id.intrastat_arrivals == "extended"
+                    and "extended"
+                    or "standard"
+                )
+            elif this.declaration_type == "dispatches":
+                reporting_level = (
+                    this.company_id.intrastat_dispatches == "extended"
+                    and "extended"
+                    or "standard"
+                )
+            this.reporting_level = reporting_level
+
+    def name_get(self):
+        res = []
+        type2label = dict(
+            self.fields_get("declaration_type", "selection")["declaration_type"][
+                "selection"
+            ]
+        )
+        for rec in self:
+            name = "%s %s" % (rec.year_month, type2label.get(rec.declaration_type))
+            res.append((rec.id, name))
+        return res
+
+    def copy(self, default=None):
+        self.ensure_one()
+        default = default or {}
+        default["revision"] = self.revision + 1
+        return super().copy(default)
+
+    def _account_config_warning(self, msg):
+        action = self.env.ref("account.action_account_config")
+        raise RedirectWarning(
+            msg, action.id, _("Go to Accounting Configuration Settings screen")
+        )
+
+    def _attach_xml_file(self, xml_bytes, declaration_name):
+        """Attach the XML file to the report_intrastat_product/service
+        object"""
+        self.ensure_one()
+        filename = "{}_{}.xml".format(self.year_month, declaration_name)
+        attach = self.env["ir.attachment"].create(
+            {
+                "name": filename,
+                "res_id": self.id,
+                "res_model": self._name,
+                "raw": xml_bytes,
+            }
+        )
+        return attach.id
+
+    def unlink(self):
+        for this in self:
+            if this.state == "done":
+                raise UserError(
+                    _("Cannot delete the declaration %s because it is in Done state.")
+                    % this.display_name
+                )
+        return super().unlink()
+
+    def _get_partner_country(self, inv_line, notedict, eu_countries):
+        inv = inv_line.move_id
+        country = inv.src_dest_country_id
+        if not country:
+            if not inv.partner_shipping_id.country_id:
+                error_partner = inv.partner_shipping_id
+            elif not inv.partner_id.country_id:
+                error_partner = inv.partner_id
+            else:
+                error_partner = inv.company_id.partner_id
+            msg = _("Missing <em>Country</em>")
+            notedict["partner"][error_partner.display_name][msg].add(
+                notedict["inv_origin"]
+            )
+        else:
+            if country not in eu_countries and country.code != "GB":
+                msg = (
+                    _(
+                        "The source/destination country "
+                        "is <em>%s</em> which is not part of the European Union"
+                    )
+                    % country.name
+                )
+                notedict["invoice"][notedict["inv_origin"]].add(msg)
+        return country
+
+    def _get_intrastat_transaction(self, inv_line, notedict):
+        invoice = inv_line.move_id
+        transaction = invoice.intrastat_transaction_id
+        fp2transaction = {
+            "b2b": self.env.ref("intrastat_product.intrastat_transaction_11"),
+            "b2c": self.env.ref("intrastat_product.intrastat_transaction_12"),
+        }
+        if not transaction:
+            # as we have searched with intrastat_fiscal_position in ('b2b', 'b2c')
+            # we should always have intrastat_fiscal_position in fp2transaction
+            transaction = fp2transaction[invoice.intrastat_fiscal_position]
+        return transaction
+
+    def _get_weight_and_supplunits(self, inv_line, hs_code, notedict):
+        line_qty = inv_line.quantity
+        product = inv_line.product_id
+        intrastat_unit_id = hs_code.intrastat_unit_id
+        source_uom = inv_line.product_uom_id
+        weight_uom_categ = self.env.ref("uom.product_uom_categ_kgm")
+        kg_uom = self.env.ref("uom.product_uom_kgm")
+        self.env["decimal.precision"].precision_get("Stock Weight")
+        weight = suppl_unit_qty = 0.0
+
+        if not source_uom:
+            msg = _("Missing unit of measure")
+            notedict["invoice"][notedict["invline_origin"]].add(msg)
+            return weight, suppl_unit_qty
+
+        if intrastat_unit_id:
+            target_uom = intrastat_unit_id.uom_id
+            if not target_uom:
+                msg = _("Missing link to a <em>regular unit of measure</em>")
+                notedict["intrastat_unit"][intrastat_unit_id.display_name][msg].add(
+                    notedict["invline_origin"]
+                )
+                return weight, suppl_unit_qty
+            if target_uom.category_id == source_uom.category_id:
+                suppl_unit_qty = source_uom._compute_quantity(line_qty, target_uom)
+            else:
+                msg = _(
+                    "Conversion from unit of measure <em>%(source_uom)s</em> to "
+                    "<em>%(target_uom)s</em>, which is configured on the intrastat "
+                    "supplementary unit <i>%(intrastat_unit)s</i> "
+                    "of H.S. code <i>%(hs_code)s</i>, "
+                    "is not implemented yet"
+                ) % {
+                    "source_uom": source_uom.name,
+                    "target_uom": target_uom.name,
+                    "intrastat_unit": intrastat_unit_id.display_name,
+                    "hs_code": hs_code.display_name,
+                }
+                notedict["invoice"][notedict["invline_origin"]].add(msg)
+                return weight, suppl_unit_qty
+
+        if source_uom == kg_uom:
+            weight = line_qty
+        elif source_uom.category_id == weight_uom_categ:
+            weight = source_uom._compute_quantity(line_qty, kg_uom)
+        elif source_uom.category_id == product.uom_id.category_id:
+            # We suppose that, on product.template,
+            # the 'weight' field is per uom_id
+            weight = product.weight * source_uom._compute_quantity(
+                line_qty, product.uom_id
+            )
+        else:
+            msg = _(
+                "Conversion from unit of measure <em>%(source_uom)s</em> to "
+                "<em>Kg</em> cannot be done automatically. It is needed for product "
+                "<i>%(product)s</i> whose unit of measure is "
+                "<i>%(product_uom)s</i>"
+            ) % {
+                "source_uom": source_uom.name,
+                "product": product.display_name,
+                "product_uom": product.uom_id.display_name,
+            }
+            notedict["invoice"][notedict["inv_origin"]].add(msg)
+        return weight, suppl_unit_qty
+
+    def _get_region_code(self, inv_line, notedict):
+        """May be inherited by localisation modules
+        If set, Odoo will use the region code returned by this method
+        and will not call _get_region() and leave region_id empty
+        """
+        return False
+
+    def _get_region(self, inv_line, notedict):
+        """
+        For supplier invoices/refunds: if the invoice line is linked
+        to a stock move, use the destination stock location ;
+        otherwise, get the PO (which is linked to a stock location)
+        and then get the warehouse.
+        It is important to take into account the following scenario:
+        I order a qty of 50 kg and my suppliers delivers and invoices 52 kg
+        (quite common in some industries where the order qty cannot be exact
+        due to some operational constraints) ; in this case, I have a qty of
+        2 kg which is not linked to a PO, but it is linked to a stock move.
+
+        For customer invoices/refunds: if the invoice line is linked to a
+        stock move, use the source stock location ;
+        otherwise, get the sale order, which is linked to the warehouse.
+
+        If none found, get the company's default intrastat region.
+
+        """
+        region = False
+        move_type = inv_line.move_id.move_type
+        if move_type in ("in_invoice", "in_refund"):
+            po_line = self.env["purchase.order.line"].search(
+                [("invoice_lines", "in", inv_line.id)], limit=1
+            )
+            if po_line:
+                if po_line.move_ids:
+                    region = po_line.move_ids[0].location_dest_id.get_intrastat_region()
+        elif move_type in ("out_invoice", "out_refund"):
+            so_line = self.env["sale.order.line"].search(
+                [("invoice_lines", "in", inv_line.id)], limit=1
+            )
+            if so_line:
+                so = so_line.order_id
+                region = so.warehouse_id.region_id
+        if not region:
+            if self.company_id.intrastat_region_id:
+                region = self.company_id.intrastat_region_id
+        return region
+
+    def _get_transport(self, inv_line, notedict):
+        transport = (
+            inv_line.move_id.intrastat_transport_id
+            or self.company_id.intrastat_transport_id
+        )
+        if not transport:
+            msg = _(
+                "The default Intrastat Transport Mode of the Company is not set, "
+                "please configure it first."
+            )
+            self._account_config_warning(msg)
+        return transport
+
+    def _get_incoterm(self, inv_line, notedict):
+        incoterm = inv_line.move_id.invoice_incoterm_id or self.company_id.incoterm_id
+        if not incoterm:
+            msg = _(
+                "The default Incoterm of the Company is not set, "
+                "please configure it first."
+            )
+            self._account_config_warning(msg)
+        return incoterm
+
+    def _get_product_origin_country(self, inv_line, notedict):
+        product = inv_line.product_id
+        origin_country = product.origin_country_id
+        if not origin_country:
+            msg = _("Missing <em>Country of Origin</em>")
+            notedict["product"][product.display_name][msg].add(
+                notedict["invline_origin"]
+            )
+        return origin_country
+
+    def _get_vat(self, inv_line, notedict):
+        vat = False
+        inv = inv_line.move_id
+        if (
+            self.declaration_type == "dispatches"
+            and inv_line.move_id.fiscal_position_id.vat_required
+        ):
+            partner = inv.commercial_partner_id
+            vat = partner.vat
+            if vat:
+                if vat.startswith("GB"):
+                    msg = _(
+                        "VAT number is <em>%(vat)s</em>. If this partner "
+                        "is from Northern Ireland, his VAT number should be "
+                        "updated to his new VAT number starting with <em>XI</em> "
+                        "following Brexit. If this partner is from Great Britain, "
+                        "maybe the fiscal position was wrong on the invoice "
+                        "(the fiscal position was <i>%(fiscal_position)s</i>)."
+                    ) % {
+                        "vat": vat,
+                        "fiscal_position": inv.fiscal_position_id.display_name,
+                    }
+                    notedict["partner"][partner.display_name][msg].add(
+                        notedict["inv_origin"]
+                    )
+            else:
+                msg = _("Missing <em>VAT Number</em>")
+                notedict["partner"][partner.display_name][msg].add(
+                    notedict["inv_origin"]
+                )
+        return vat
+
+    def _update_computation_line_vals(self, inv_line, line_vals, notedict):
+        """placeholder for localization modules"""
+
+    def _handle_invoice_accessory_cost(
+        self,
+        invoice,
+        lines_current_invoice,
+        total_inv_accessory_costs_cc,
+        total_inv_product_cc,
+        total_inv_weight,
+    ):
+        """
+        Affect accessory costs pro-rata of the value
+        (or pro-rata of the weight if the goods of the invoice
+        have no value)
+
+        This method allows to implement a different logic
+        in the localization modules.
+        E.g. in Belgium accessory cost should not be added.
+        """
+        if total_inv_accessory_costs_cc:
+            if total_inv_product_cc:
+                # pro-rata of the value
+                for ac_line_vals in lines_current_invoice:
+                    ac_line_vals["amount_accessory_cost_company_currency"] = (
+                        total_inv_accessory_costs_cc
+                        * ac_line_vals["amount_company_currency"]
+                        / total_inv_product_cc
+                    )
+            elif total_inv_weight:
+                # pro-rata of the weight
+                for ac_line_vals in lines_current_invoice:
+                    ac_line_vals["amount_accessory_cost_company_currency"] = (
+                        total_inv_accessory_costs_cc
+                        * ac_line_vals["weight"]
+                        / total_inv_weight
+                    )
+            else:
+                for ac_line_vals in lines_current_invoice:
+                    ac_line_vals[
+                        "amount_accessory_cost_company_currency"
+                    ] = total_inv_accessory_costs_cc / len(lines_current_invoice)
+
+    def _prepare_invoice_domain(self):
+        """
+        Complete this method in the localization module
+        with the country-specific logic for arrivals and dispatches.
+        Cf. l10n_be_intrastat_product_declaration for an example
+        The dates are based on account.move,date in stead of invoice_date
+        to ensure consistency between intrastat and intracomm tax declaration.
+        """
+        start_date = date(int(self.year), int(self.month), 1)
+        end_date = start_date + relativedelta(day=1, months=+1, days=-1)
+        domain = [
+            ("date", ">=", start_date),
+            ("date", "<=", end_date),
+            ("state", "=", "posted"),
+            ("intrastat_fiscal_position", "in", ("b2b", "b2c")),
+            ("company_id", "=", self.company_id.id),
+        ]
+        if self.declaration_type == "arrivals":
+            domain.append(("move_type", "in", ("in_invoice", "in_refund")))
+        elif self.declaration_type == "dispatches":
+            domain.append(("move_type", "in", ("out_invoice", "out_refund")))
+        return domain
+
+    def _is_product(self, invoice_line):
+        if invoice_line.product_id and invoice_line.product_id.type in (
+            "product",
+            "consu",
+        ):
+            return True
+        else:
+            return False
+
+    def _gather_invoices_init(self, notedict):
+        """placeholder for localization modules"""
+
+    def _gather_invoices(self, notedict):
+        lines = []
+        qty_prec = self.env["decimal.precision"].precision_get(
+            "Product Unit of Measure"
+        )
+        accessory_costs = self.company_id.intrastat_accessory_costs
+        eu_countries = self.env.ref("base.europe").country_ids
+
+        self._gather_invoices_init(notedict)
+        domain = self._prepare_invoice_domain()
+        order = "journal_id, name"
+        invoices = self.env["account.move"].search(domain, order=order)
+
+        for invoice in invoices:
+
+            lines_current_invoice = []
+            total_inv_accessory_costs_cc = 0.0  # in company currency
+            total_inv_product_cc = 0.0  # in company currency
+            total_inv_weight = 0.0
+            notedict["inv_origin"] = invoice.name
+            for line_nbr, inv_line in enumerate(
+                invoice.invoice_line_ids.filtered(
+                    lambda x: x.display_type == "product"
+                ),
+                start=1,
+            ):
+                notedict["invline_origin"] = _("%(invoice)s line %(line_nbr)s") % {
+                    "invoice": invoice.name,
+                    "line_nbr": line_nbr,
+                }
+                inv_intrastat_line = invoice.intrastat_line_ids.filtered(
+                    lambda r: r.invoice_line_id == inv_line
+                )
+
+                if (
+                    accessory_costs
+                    and inv_line.product_id
+                    and inv_line.product_id.is_accessory_cost
+                ):
+                    acost = invoice.currency_id._convert(
+                        inv_line.price_subtotal,
+                        self.company_id.currency_id,
+                        self.company_id,
+                        invoice.date,
+                    )
+                    total_inv_accessory_costs_cc += acost
+
+                    continue
+
+                if float_is_zero(inv_line.quantity, precision_digits=qty_prec):
+                    _logger.info(
+                        "Skipping invoice line %s qty %s "
+                        "of invoice %s. Reason: qty = 0"
+                        % (inv_line.name, inv_line.quantity, invoice.name)
+                    )
+                    continue
+
+                partner_country = self._get_partner_country(
+                    inv_line, notedict, eu_countries
+                )
+                # When the country is the same as the company's country must be skipped.
+                if partner_country == self.company_id.country_id:
+                    _logger.info(
+                        "Skipping invoice line %s qty %s "
+                        "of invoice %s. Reason: partner_country = "
+                        "company country"
+                        % (inv_line.name, inv_line.quantity, invoice.name)
+                    )
+                    continue
+
+                if inv_intrastat_line:
+                    hs_code = inv_intrastat_line.hs_code_id
+                elif inv_line.product_id and self._is_product(inv_line):
+                    hs_code = inv_line.product_id.get_hs_code_recursively()
+                    if not hs_code:
+                        msg = _("Missing <em>H.S. Code</em>")
+                        notedict["product"][inv_line.product_id.display_name][msg].add(
+                            notedict["invline_origin"]
+                        )
+                        continue
+                else:
+                    _logger.info(
+                        "Skipping invoice line %s qty %s "
+                        "of invoice %s. Reason: no product nor Intrastat Code"
+                        % (inv_line.name, inv_line.quantity, invoice.name)
+                    )
+                    continue
+
+                intrastat_transaction = self._get_intrastat_transaction(
+                    inv_line, notedict
+                )
+
+                if inv_intrastat_line:
+                    weight = inv_intrastat_line.transaction_weight
+                    suppl_unit_qty = inv_intrastat_line.transaction_suppl_unit_qty
+                else:
+                    weight, suppl_unit_qty = self._get_weight_and_supplunits(
+                        inv_line, hs_code, notedict
+                    )
+                total_inv_weight += weight
+
+                sign = invoice.move_type in ("in_invoice", "out_refund") and 1 or -1
+                amount_company_currency = sign * inv_line.balance
+                total_inv_product_cc += amount_company_currency
+
+                if inv_intrastat_line:
+                    product_origin_country = (
+                        inv_intrastat_line.product_origin_country_id
+                    )
+                else:
+                    product_origin_country = self._get_product_origin_country(
+                        inv_line, notedict
+                    )
+
+                region_code = self._get_region_code(inv_line, notedict)
+                region = False
+                if not region_code:
+                    region = self._get_region(inv_line, notedict)
+
+                vat = self._get_vat(inv_line, notedict)
+
+                line_vals = {
+                    "parent_id": self.id,
+                    "invoice_line_id": inv_line.id,
+                    "src_dest_country_id": partner_country.id,
+                    "product_id": inv_line.product_id.id,
+                    "hs_code_id": hs_code.id,
+                    "weight": weight,
+                    "suppl_unit_qty": suppl_unit_qty,
+                    "amount_company_currency": amount_company_currency,
+                    "amount_accessory_cost_company_currency": 0.0,
+                    "transaction_id": intrastat_transaction.id,
+                    "product_origin_country_id": product_origin_country.id or False,
+                    "region_code": region_code,
+                    "region_id": region and region.id or False,
+                    "vat": vat,
+                    "partner_id": invoice.commercial_partner_id.id,
+                }
+
+                # extended declaration
+                if self.reporting_level == "extended":
+                    transport = self._get_transport(inv_line, notedict)
+                    line_vals.update({"transport_id": transport.id})
+
+                self._update_computation_line_vals(inv_line, line_vals, notedict)
+
+                if line_vals:
+                    lines_current_invoice.append(line_vals)
+
+            self._handle_invoice_accessory_cost(
+                invoice,
+                lines_current_invoice,
+                total_inv_accessory_costs_cc,
+                total_inv_product_cc,
+                total_inv_weight,
+            )
+
+            for line_vals in lines_current_invoice:
+                if (
+                    not line_vals["amount_company_currency"]
+                    and not line_vals["amount_accessory_cost_company_currency"]
+                ):
+                    inv_line = self.env["account.move.line"].browse(
+                        line_vals["invoice_line_id"]
+                    )
+                    _logger.info(
+                        "Skipping invoice line %s qty %s "
+                        "of invoice %s. Reason: price_subtotal = 0 "
+                        "and accessory costs = 0",
+                        inv_line.name,
+                        inv_line.quantity,
+                        inv_line.move_id.name,
+                    )
+                    continue
+                lines.append(line_vals)
+
+        return lines
+
+    def _prepare_html_note(self, notedict, key2label):
+        note = ""
+        for key, entries in notedict.items():
+            if not key.endswith("_origin") and entries:
+                note += "<h3>%s</h3><ul>" % key2label[key]
+                for obj_name, messages in entries.items():
+                    note += "<li>%s<ul>" % obj_name
+                    if isinstance(
+                        messages, dict
+                    ):  # 2 layers of dict (partner, product)
+                        for message, origins in messages.items():
+                            note += "<li>%s <small>(%s)</small></li>" % (
+                                message,
+                                ", ".join(origins),
+                            )
+                    else:  # 1st layer=dict, 2nd layer=set (invoice)
+                        for message in messages:
+                            note += "<li>%s</li>" % message
+                    note += "</ul>"
+                note += "</ul>"
+        return note
+
+    def _prepare_notedict(self):
+        notedict = {
+            "partner": defaultdict(lambda: defaultdict(set)),
+            # key = partner.display_name
+            # value = {message1: {origin1, origin2}, message2: {origin3, origin4}}
+            "product": defaultdict(lambda: defaultdict(set)),
+            "intrastat_unit": defaultdict(lambda: defaultdict(set)),
+            "invoice": defaultdict(set),  # for invoice and invoice line
+            # key = invoice.name
+            # value (set) = {message1, message2}
+            "inv_origin": "",
+            "invline_origin": "",
+        }
+        key2label = {
+            "partner": _("Partners"),
+            "product": _("Products"),
+            "intrastat_unit": _("Intrastat Supplementary Units"),
+            "invoice": _("Invoices/Refunds"),
+        }
+        return notedict, key2label
+
+    def action_gather(self):
+        self.ensure_one()
+        self.message_post(body=_("Generate Lines from Invoices"))
+        notedict, key2label = self._prepare_notedict()
+        self.computation_line_ids.unlink()
+        self.declaration_line_ids.unlink()
+        lines = self._gather_invoices(notedict)
+
+        vals = {"note": self._prepare_html_note(notedict, key2label)}
+        if not lines:
+            vals["action"] = "nihil"
+            vals["note"] += "<h3>%s</h3><p>%s</p>" % (
+                _("No records found for the selected period !"),
+                _("The declaration Action has been set to <em>nihil</em>."),
+            )
+        else:
+            vals["computation_line_ids"] = [(0, 0, x) for x in lines]
+
+        self.write(vals)
+        if vals["note"]:
+            result_view = self.env.ref("intrastat_product.intrastat_result_view_form")
+            return {
+                "name": _("Generate lines from invoices: results"),
+                "view_mode": "form",
+                "res_model": "intrastat.result.view",
+                "view_id": result_view.id,
+                "target": "new",
+                "context": dict(self._context, note=vals["note"]),
+                "type": "ir.actions.act_window",
+            }
+
+    def generate_declaration(self):
+        """generate declaration lines from computation lines"""
+        self.ensure_one()
+        assert not self.declaration_line_ids
+        dl_group = {}
+        for cl in self.computation_line_ids:
+            hashcode = cl.group_line_hashcode()
+            if hashcode not in dl_group:
+                dl_group[hashcode] = cl
+            else:
+                dl_group[hashcode] |= cl
+        ipdl = self.declaration_line_ids
+        for cl_lines in dl_group.values():
+            vals = cl_lines._prepare_declaration_line()
+            declaration_line = ipdl.create(vals)
+            cl_lines.write({"declaration_line_id": declaration_line.id})
+
+    def _check_generate_xml(self):
+        self.ensure_one()
+        if not self.company_id.partner_id.vat:
+            raise UserError(
+                _("The VAT number is not set for the partner '%s'.")
+                % self.company_id.partner_id.display_name
+            )
+
+    def _generate_xml(self):
+        """Designed to be inherited in localization modules"""
+        return False
+
+    def generate_xml(self):
+        """generate the INTRASTAT Declaration XML file"""
+        self.ensure_one()
+        if self.xml_attachment_id:
+            raise UserError(
+                _(
+                    "An XML Export already exists for %s. "
+                    "To re-generate it, you must first delete it."
+                )
+                % self.display_name
+            )
+        self.message_post(body=_("Generate XML Declaration File"))
+        self._check_generate_xml()
+        xml_bytes = self._generate_xml()
+        if xml_bytes:
+            attach_id = self._attach_xml_file(
+                xml_bytes, "{}_{}".format(self.declaration_type, self.revision)
+            )
+            self.write({"xml_attachment_id": attach_id})
+
+    def delete_xml(self):
+        self.ensure_one()
+        self.xml_attachment_id and self.xml_attachment_id.unlink()
+
+    @api.model
+    def _xls_computation_line_fields(self):
+        """
+        Update list in custom module to add/drop columns or change order
+        """
+        return [
+            "product",
+            "hs_code",
+            "src_dest_country",
+            "src_dest_country_code",
+            "amount_company_currency",
+            "accessory_cost",
+            "transaction",
+            "weight",
+            "suppl_unit_qty",
+            "suppl_unit",
+            "transport",
+            "region",
+            "region_code",
+            "product_origin_country",
+            "product_origin_country_code",
+            "vat",
+            "partner_id",
+            "invoice",
+        ]
+
+    @api.model
+    def _xls_declaration_line_fields(self):
+        """
+        Update list in custom module to add/drop columns or change order
+        Use same order as tree view by default
+        """
+        return [
+            "hs_code",
+            "src_dest_country_code",
+            "amount_company_currency",
+            "transaction_code",
+            "transaction",
+            "weight",
+            "suppl_unit_qty",
+            "suppl_unit",
+            "transport_code",
+            "transport",
+            "region_code",
+            "product_origin_country_code",
+            "vat",
+        ]
+
+    @api.model
+    def _xls_template(self):
+        """
+        Placeholder for excel report template updates
+
+        """
+        return {}
+
+    def done(self):
+        for decl in self:
+            decl.generate_declaration()
+            decl.generate_xml()
+        self.write({"state": "done"})
+
+    def back2draft(self):
+        for decl in self:
+            decl.delete_xml()
+            decl.declaration_line_ids.unlink()
+        self.write({"state": "draft"})
+
+
+class IntrastatProductComputationLine(models.Model):
+    _name = "intrastat.product.computation.line"
+    _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")
+    company_currency_id = fields.Many2one(
+        related="company_id.currency_id", string="Company currency"
+    )
+    company_country_code = fields.Char(
+        related="parent_id.company_id.partner_id.country_id.code",
+        string="Company Country Code",
+    )
+    declaration_type = fields.Selection(related="parent_id.declaration_type")
+    reporting_level = fields.Selection(related="parent_id.reporting_level")
+    invoice_line_id = fields.Many2one(
+        "account.move.line", string="Invoice Line", readonly=True
+    )
+    invoice_id = fields.Many2one(
+        "account.move", related="invoice_line_id.move_id", string="Invoice"
+    )
+    # partner_id is not a related field any more, to auto-fill the VAT
+    # number (via onchange) when you create a computation line manually
+    partner_id = fields.Many2one(
+        "res.partner",
+        string="Partner",
+        domain=[("parent_id", "=", False)],
+    )
+    declaration_line_id = fields.Many2one(
+        "intrastat.product.declaration.line", string="Declaration Line", readonly=True
+    )
+    src_dest_country_id = fields.Many2one(
+        "res.country",
+        string="Country",
+        help="Country of Origin/Destination",
+    )
+    src_dest_country_code = fields.Char(
+        compute="_compute_src_dest_country_code",
+        string="Country Code",
+        required=True,
+        readonly=False,
+        help="2 digit code of country of origin/destination.\n"
+        "Specify 'XI' for UK Northern Ireland.",
+    )
+    product_id = fields.Many2one(
+        "product.product", related="invoice_line_id.product_id"
+    )
+    hs_code_id = fields.Many2one("hs.code", string="Intrastat Code")
+    intrastat_unit_id = fields.Many2one(
+        "intrastat.unit",
+        related="hs_code_id.intrastat_unit_id",
+        string="Suppl. Unit",
+        help="Intrastat Supplementary Unit",
+    )
+    weight = fields.Float(digits="Stock Weight", help="Net weight in Kg")
+    suppl_unit_qty = fields.Float(
+        string="Suppl. Unit Qty",
+        digits="Product Unit of Measure",
+        help="Supplementary Units Quantity",
+    )
+    amount_company_currency = fields.Float(
+        string="Fiscal Value",
+        digits="Account",
+        required=True,
+        help="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.",
+    )
+    amount_accessory_cost_company_currency = fields.Float(
+        string="Accessory Costs",
+        digits="Account",
+        help="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.",
+    )
+    transaction_id = fields.Many2one(
+        "intrastat.transaction",
+        string="Intrastat Transaction",
+    )
+    transaction_code = fields.Char(
+        related="transaction_id.code", store=True, string="Transaction Code"
+    )
+    region_id = fields.Many2one("intrastat.region", string="Intrastat Region")
+    # Note that, in l10n_fr_intrastat_product and maybe in other localization modules
+    # region_id is left empty and Odoo writes directly in region_code
+    region_code = fields.Char()
+    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 ____'",
+    )
+    product_origin_country_code = fields.Char(
+        compute="_compute_product_origin_country_code",
+        string="Country Code of Origin of the Product",
+        size=2,
+        required=True,
+        readonly=False,
+        help="2 digit ISO code of the country of origin of the product.\n"
+        "Specify 'QU' when the country of origin is unknown.\n",
+    )
+    vat = fields.Char(string="VAT Number")
+
+    # extended declaration
+    incoterm_id = fields.Many2one("account.incoterms", string="Incoterm")
+    transport_id = fields.Many2one("intrastat.transport_mode", string="Transport Mode")
+
+    @api.onchange("region_id")
+    def _region_id_change(self):
+        if self.region_id:
+            self.region_code = self.region_id.code
+
+    @api.depends("src_dest_country_id")
+    def _compute_src_dest_country_code(self):
+        for this in self:
+            code = this.src_dest_country_id and this.src_dest_country_id.code or False
+            if code == "GB":
+                code = "XI"  # Northern Ireland
+            this.src_dest_country_code = code
+
+    @api.depends("product_origin_country_id")
+    def _compute_product_origin_country_code(self):
+        for this in self:
+            code = (
+                this.product_origin_country_id
+                and this.product_origin_country_id.code
+                or False
+            )
+            if code == "GB":
+                code = "XU"
+                # XU can be used when you don't know if the product
+                # originate from Great-Britain or from Northern Ireland
+            this.product_origin_country_code = code
+
+    @api.constrains("vat")
+    def _check_vat(self):
+        for this in self:
+            if this.vat and not is_valid(this.vat):
+                raise ValidationError(_("The VAT number '%s' is invalid.") % this.vat)
+
+    @api.onchange("partner_id")
+    def partner_id_change(self):
+        if self.partner_id and self.partner_id.vat:
+            self.vat = self.partner_id.vat
+
+    def _group_line_hashcode_fields(self):
+        self.ensure_one()
+        return {
+            "country": self.src_dest_country_code,
+            "hs_code_id": self.hs_code_id.id or False,
+            "intrastat_unit": self.intrastat_unit_id.id or False,
+            "transaction": self.transaction_id.id or False,
+            "transport": self.transport_id.id or False,
+            "region": self.region_code or False,
+            "product_origin_country": self.product_origin_country_code,
+            "vat": self.vat or False,
+        }
+
+    def group_line_hashcode(self):
+        self.ensure_one()
+        hc_fields = self._group_line_hashcode_fields()
+        hashcode = "-".join([str(f) for f in hc_fields.values()])
+        return hashcode
+
+    def _prepare_grouped_fields(self, fields_to_sum):
+        self.ensure_one()
+        vals = {
+            "src_dest_country_code": self.src_dest_country_code,
+            "intrastat_unit_id": self.intrastat_unit_id.id,
+            "hs_code_id": self.hs_code_id.id,
+            "transaction_id": self.transaction_id.id,
+            "transport_id": self.transport_id.id,
+            "region_code": self.region_code,
+            "parent_id": self.parent_id.id,
+            "product_origin_country_code": self.product_origin_country_code,
+            "amount_company_currency": 0.0,
+            "vat": self.vat,
+        }
+        for field in fields_to_sum:
+            vals[field] = 0.0
+        return vals
+
+    def _fields_to_sum(self):
+        fields_to_sum = ["weight", "suppl_unit_qty"]
+        return fields_to_sum
+
+    def _prepare_declaration_line(self):
+        fields_to_sum = self._fields_to_sum()
+        vals = self[0]._prepare_grouped_fields(fields_to_sum)
+        for computation_line in self:
+            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
+
+
+class IntrastatProductDeclarationLine(models.Model):
+    _name = "intrastat.product.declaration.line"
+    _description = "Intrastat Product Declaration 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")
+    company_currency_id = fields.Many2one(
+        related="company_id.currency_id", string="Company currency"
+    )
+    company_country_code = fields.Char(
+        related="parent_id.company_id.partner_id.country_id.code",
+        string="Company Country Code",
+    )
+    declaration_type = fields.Selection(related="parent_id.declaration_type")
+    reporting_level = fields.Selection(related="parent_id.reporting_level")
+    computation_line_ids = fields.One2many(
+        "intrastat.product.computation.line",
+        "declaration_line_id",
+        string="Computation Lines",
+        readonly=True,
+    )
+    src_dest_country_code = fields.Char(
+        string="Country Code",
+        required=True,
+        help="2 digit code of country of origin/destination.\n"
+        "Specify 'XI' for UK Northern Ireland and 'XU' for rest of the UK.",
+    )
+    hs_code_id = fields.Many2one("hs.code", string="Intrastat Code")
+    intrastat_unit_id = fields.Many2one(
+        "intrastat.unit",
+        related="hs_code_id.intrastat_unit_id",
+        string="Suppl. Unit",
+        help="Intrastat Supplementary Unit",
+    )
+    weight = fields.Integer(help="Net weight in Kg")
+    suppl_unit_qty = fields.Integer(
+        string="Suppl. Unit Qty", help="Supplementary Units Quantity"
+    )
+    amount_company_currency = fields.Integer(
+        string="Fiscal Value",
+        help="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.",
+    )
+    transaction_id = fields.Many2one(
+        "intrastat.transaction", string="Intrastat Transaction"
+    )
+    transaction_code = fields.Char(
+        related="transaction_id.code", store=True, string="Transaction Code"
+    )
+    region_code = fields.Char()
+    product_origin_country_code = fields.Char(
+        string="Country of Origin of the Product",
+        size=2,
+        required=True,
+        default="QU",
+        help="2 digit code of country of origin of the product except for the UK.\n"
+        "Specify 'XI' for UK Northern Ireland and 'XU' for rest of the UK.\n"
+        "Specify 'QU' when the country is unknown.\n",
+    )
+    vat = fields.Char(string="VAT Number")
+    # extended declaration
+    incoterm_id = fields.Many2one("account.incoterms", string="Incoterm")
+    transport_id = fields.Many2one("intrastat.transport_mode", string="Transport Mode")
diff --git a/intrastat_product/models/intrastat_region.py b/intrastat_product/models/intrastat_region.py
new file mode 100644
index 000000000..14b51057e
--- /dev/null
+++ b/intrastat_product/models/intrastat_region.py
@@ -0,0 +1,22 @@
+# Copyright 2009-2020 Noviat nv/sa (www.noviat.com).
+# @author Luc de Meyer <info@noviat.com>
+
+from odoo import fields, models
+
+
+class IntrastatRegion(models.Model):
+    _name = "intrastat.region"
+    _description = "Intrastat Region"
+    _sql_constraints = [
+        (
+            "intrastat_region_code_unique",
+            "UNIQUE(code, country_id)",  # TODO add company_id ?
+            "Code must be unique.",
+        )
+    ]
+
+    code = fields.Char(required=True)
+    country_id = fields.Many2one(comodel_name="res.country", required=True)
+    name = fields.Char(translate=True)
+    description = fields.Char()
+    company_id = fields.Many2one("res.company", default=lambda self: self.env.company)
diff --git a/intrastat_product/models/intrastat_transaction.py b/intrastat_product/models/intrastat_transaction.py
new file mode 100644
index 000000000..798d8ffc3
--- /dev/null
+++ b/intrastat_product/models/intrastat_transaction.py
@@ -0,0 +1,39 @@
+# Copyright 2011-2020 Akretion France (http://www.akretion.com)
+# Copyright 2009-2020 Noviat (http://www.noviat.com)
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+# @author Luc de Meyer <info@noviat.com>
+
+from textwrap import shorten
+
+from odoo import api, fields, models
+
+
+class IntrastatTransaction(models.Model):
+    _name = "intrastat.transaction"
+    _description = "Intrastat Transaction"
+    _rec_name = "code"
+    _order = "code"
+    _sql_constraints = [
+        (
+            "intrastat_transaction_code_unique",
+            "UNIQUE(code, company_id)",
+            "Code must be unique.",
+        )
+    ]
+
+    code = fields.Char(required=True)
+    description = fields.Text()
+    # intrastat.transaction are shared among companies by default
+    company_id = fields.Many2one("res.company")
+    active = fields.Boolean(default=True)
+
+    @api.depends("code", "description")
+    def name_get(self):
+        res = []
+        for this in self:
+            name = this.code
+            if this.description:
+                name += " " + this.description
+            name = shorten(name, 55)
+            res.append((this.id, name))
+        return res
diff --git a/intrastat_product/models/intrastat_transport_mode.py b/intrastat_product/models/intrastat_transport_mode.py
new file mode 100644
index 000000000..7f688b1be
--- /dev/null
+++ b/intrastat_product/models/intrastat_transport_mode.py
@@ -0,0 +1,27 @@
+# Copyright 2011-2017 Akretion (http://www.akretion.com)
+# Copyright 2009-2019 Noviat (http://www.noviat.com)
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+# @author Luc de Meyer <info@noviat.com>
+
+from odoo import api, fields, models
+
+
+class IntrastatTransportMode(models.Model):
+    _name = "intrastat.transport_mode"
+    _description = "Intrastat Transport Mode"
+    _order = "code"
+    _sql_constraints = [
+        ("intrastat_transport_code_unique", "UNIQUE(code)", "Code must be unique.")
+    ]
+
+    code = fields.Char(required=True)
+    name = fields.Char(required=True, translate=True)
+    description = fields.Char(translate=True)
+
+    @api.depends("name", "code")
+    def name_get(self):
+        res = []
+        for mode in self:
+            name = "{}. {}".format(mode.code, mode.name)
+            res.append((mode.id, name))
+        return res
diff --git a/intrastat_product/models/intrastat_unit.py b/intrastat_product/models/intrastat_unit.py
new file mode 100644
index 000000000..eb5706c41
--- /dev/null
+++ b/intrastat_product/models/intrastat_unit.py
@@ -0,0 +1,21 @@
+# Copyright 2011-2020 Akretion (http://www.akretion.com)
+# Copyright 2009-2020 Noviat (http://www.noviat.com)
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+# @author Luc de Meyer <info@noviat.com>
+
+from odoo import fields, models
+
+
+class IntrastatUnit(models.Model):
+    _name = "intrastat.unit"
+    _description = "Intrastat Supplementary Units"
+
+    name = fields.Char(required=True)
+    description = fields.Char(required=True)
+    uom_id = fields.Many2one(
+        comodel_name="uom.uom",
+        string="Regular UoM",
+        help="Select the regular Unit of Measure of Odoo that corresponds "
+        "to this Intrastat Supplementary Unit.",
+    )
+    active = fields.Boolean(default=True)
diff --git a/intrastat_product/models/res_company.py b/intrastat_product/models/res_company.py
new file mode 100644
index 000000000..78e7f8a42
--- /dev/null
+++ b/intrastat_product/models/res_company.py
@@ -0,0 +1,72 @@
+# Copyright 2011-2017 Akretion (http://www.akretion.com)
+# Copyright 2009-2020 Noviat (http://www.noviat.com)
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+# @author Luc de Meyer <info@noviat.com>
+
+from odoo import api, fields, models
+
+
+class ResCompany(models.Model):
+    _inherit = "res.company"
+
+    intrastat_arrivals = fields.Selection(
+        selection="_intrastat_arrivals",
+        string="Arrivals",
+        default="extended",
+        required=True,
+    )
+    intrastat_dispatches = fields.Selection(
+        selection="_intrastat_dispatches",
+        string="Dispatches",
+        default="extended",
+        required=True,
+    )
+    intrastat_transport_id = fields.Many2one(
+        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(
+        comodel_name="intrastat.region", string="Default Intrastat Region"
+    )
+    intrastat_accessory_costs = fields.Boolean(
+        string="Include Accessory Costs in Fiscal Value of Product"
+    )
+
+    @api.model
+    def _intrastat_arrivals(self):
+        return [
+            ("exempt", "Exempt"),
+            ("standard", "Standard"),
+            ("extended", "Extended"),
+        ]
+
+    @api.model
+    def _intrastat_dispatches(self):
+        return [
+            ("exempt", "Exempt"),
+            ("standard", "Standard"),
+            ("extended", "Extended"),
+        ]
+
+    @api.depends("intrastat_arrivals", "intrastat_dispatches")
+    def _compute_intrastat(self):
+        for this in self:
+            if (
+                this.intrastat_arrivals == "exempt"
+                and this.intrastat_dispatches == "exempt"
+            ):
+                this.intrastat = "exempt"
+            elif (
+                this.intrastat_arrivals == "extended"
+                or this.intrastat_dispatches == "extended"
+            ):
+                this.intrastat = "extended"
+            else:
+                this.intrastat = "standard"
diff --git a/intrastat_product/models/res_partner.py b/intrastat_product/models/res_partner.py
new file mode 100644
index 000000000..72ecaf551
--- /dev/null
+++ b/intrastat_product/models/res_partner.py
@@ -0,0 +1,16 @@
+# Copyright 2022 Tecnativa - Víctor Martínez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, fields, models
+
+
+class ResParter(models.Model):
+    _inherit = "res.partner"
+
+    invoice_intrastat_detail = fields.Boolean(
+        string="Show intrastat details in invoice report"
+    )
+
+    @api.model
+    def _commercial_fields(self):
+        return super()._commercial_fields() + ["invoice_intrastat_detail"]
diff --git a/intrastat_product/models/sale_order.py b/intrastat_product/models/sale_order.py
new file mode 100644
index 000000000..82f54b88c
--- /dev/null
+++ b/intrastat_product/models/sale_order.py
@@ -0,0 +1,27 @@
+# Copyright 2010-2020 Akretion France (http://www.akretion.com)
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class SaleOrder(models.Model):
+    _inherit = "sale.order"
+
+    intrastat_transport_id = fields.Many2one(
+        comodel_name="intrastat.transport_mode",
+        string="Transport Mode",
+        help="This information is used in Intrastat reports",
+    )
+    intrastat = fields.Selection(
+        string="Intrastat Declaration", related="company_id.intrastat_dispatches"
+    )
+
+    def _prepare_invoice(self):
+        """Copy destination country to invoice"""
+        vals = super()._prepare_invoice()
+        if self.intrastat_transport_id:
+            vals["intrastat_transport_id"] = self.intrastat_transport_id.id
+        if self.warehouse_id.region_id:
+            vals["src_dest_region_id"] = self.warehouse_id.region_id.id
+        return vals
diff --git a/intrastat_product/models/stock_warehouse.py b/intrastat_product/models/stock_warehouse.py
new file mode 100644
index 000000000..9fd9f1088
--- /dev/null
+++ b/intrastat_product/models/stock_warehouse.py
@@ -0,0 +1,27 @@
+# Copyright 2009-2020 Noviat nv/sa (www.noviat.com).
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+# @author Luc de Meyer <info@noviat.com>
+
+from odoo import fields, models
+
+
+class StockWarehouse(models.Model):
+    _inherit = "stock.warehouse"
+
+    region_id = fields.Many2one(
+        comodel_name="intrastat.region", string="Intrastat Region"
+    )
+
+
+class StockLocation(models.Model):
+    _inherit = "stock.location"
+
+    def get_intrastat_region(self):
+        self.ensure_one()
+        warehouse = self.env["stock.warehouse"].search(
+            [("lot_stock_id", "parent_of", self.ids), ("region_id", "!=", False)],
+            limit=1,
+        )
+        if warehouse:
+            return warehouse.region_id
+        return None
diff --git a/intrastat_product/readme/CONFIGURE.rst b/intrastat_product/readme/CONFIGURE.rst
new file mode 100644
index 000000000..5ca9a9fcb
--- /dev/null
+++ b/intrastat_product/readme/CONFIGURE.rst
@@ -0,0 +1,14 @@
+By default the intrastat declaration is generated based upon the product record master data.
+Hence unexpected results may occur in case this master data is not accurate,
+e.g. wrong or missing weight, country of origin, ...
+
+|
+
+This can be corrected by changing the appropriate fields when analysing the intrastat declaration
+but this can be challenging in case of large transaction volumes and especially in the specific use
+case where the product weight cannot be encoded correctly on the product records (e.g. products with variable weight).
+
+|
+
+It is possible to allow encoding the intrastat transaction details on the purchase/sale invoice
+via the "intrastat_product.group_invoice_intrastat_transaction_detail" usability group.
diff --git a/intrastat_product/readme/CONTRIBUTORS.rst b/intrastat_product/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..ab2510359
--- /dev/null
+++ b/intrastat_product/readme/CONTRIBUTORS.rst
@@ -0,0 +1,7 @@
+* Alexis de Lattre, Akretion <alexis.delattre@akretion.com>
+* Luc De Meyer, Noviat <info@noviat.com>
+* Denis Roussel <denis.roussel@acsone.eu>
+* Tecnativa <www.tecnativa.com>:
+
+    * João Marques
+    * Víctor Martínez
diff --git a/intrastat_product/readme/DESCRIPTION.rst b/intrastat_product/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..1e413dc87
--- /dev/null
+++ b/intrastat_product/readme/DESCRIPTION.rst
@@ -0,0 +1,11 @@
+This module contains common objects and fields for the Intrastat Product reporting.
+
+It should be used in combination with country-specific Intrastat Product reporting modules
+such as:
+
+- *l10n_fr_intrastat_product*:
+  the module for the *Déclaration d'Echange de Biens* (DEB) for France
+- *l10n_be_intrastat_product*:
+  the module for the Intrastat Product Declaration for Belgium
+
+These country-specific modules can be found in the OCA localization for those countries.
diff --git a/intrastat_product/readme/INSTALL.rst b/intrastat_product/readme/INSTALL.rst
new file mode 100644
index 000000000..5b11a6ab9
--- /dev/null
+++ b/intrastat_product/readme/INSTALL.rst
@@ -0,0 +1,1 @@
+This module is NOT compatible with the *account_intrastat* module from Odoo Enterprise.
diff --git a/intrastat_product/readme/ROADMAP.rst b/intrastat_product/readme/ROADMAP.rst
new file mode 100644
index 000000000..6f75021f3
--- /dev/null
+++ b/intrastat_product/readme/ROADMAP.rst
@@ -0,0 +1,3 @@
+The declaration is based upon the invoices of the corresponding tax declaration period.
+
+An option to generate the intrastat declaration based upon the dates of the physical movements of goods is currently not available.
diff --git a/intrastat_product/readme/USAGE.rst b/intrastat_product/readme/USAGE.rst
new file mode 100644
index 000000000..f761637c8
--- /dev/null
+++ b/intrastat_product/readme/USAGE.rst
@@ -0,0 +1,39 @@
+This module is used in combination with the country-specific
+localization module(s).
+
+**Coding guidelines for localization module:**
+
+We recommend to start by copying an existing module, e.g. l10n_be_intrastat_product
+and adapt the code for the specific needs of your country.
+
+* Declaration Object
+
+  Create a new class as follows:
+
+  .. code-block:: python
+
+     class L10nCcIntrastatProductDeclaration(models.Model):
+         _name = 'l10n.cc.intrastat.product.declaration'
+         _description = "Intrastat Product Declaration for YourCountry"
+         _inherit = ['intrastat.product.declaration', 'mail.thread']
+
+  whereby cc = your country code
+
+* Computation & Declaration Lines
+
+  Create also new objects inheriting from the Computation and Declaration Line Objects
+  so that you can add methods or customise the methods from the base modules (make a PR when
+  the customization or new method is required for multiple countries).
+
+  Adapt also the parent_id fields of the newly created objects
+  (cf. l10n_be_intrastat_product as example).
+
+* XML Files: Menu, Action, Views
+
+  Cf. l10n_be_istrastat_product as example, replace "be" by your Country Code.
+
+**Other functionality added by this module:**
+
+* Compute the Intrastat Lines in an invoice.
+  For this, your user needs to be in the "Technical / Invoice Intrastat Transaction Details" group.
+  Go to the "Intrastat transaction details" tab and press **Compute**
diff --git a/intrastat_product/report/__init__.py b/intrastat_product/report/__init__.py
new file mode 100644
index 000000000..94b3dbbea
--- /dev/null
+++ b/intrastat_product/report/__init__.py
@@ -0,0 +1,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 000000000..1c55542e0
--- /dev/null
+++ b/intrastat_product/report/intrastat_product_report_xls.py
@@ -0,0 +1,289 @@
+# Copyright 2009-2022 Noviat
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import logging
+
+from odoo import _, models
+
+from odoo.addons.report_xlsx_helper.report.report_xlsx_format import (
+    FORMATS,
+    XLS_HEADERS,
+)
+
+_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"
+    _description = "Intrastat declaration"
+
+    def _get_template(self, declaration):
+        """
+        Return a dictionary that contains columns specifications
+        see: report_xlsx_helper / _write_line() method
+        """
+
+        template = {
+            "product": {
+                "header": {"type": "string", "value": _("Product")},
+                "line": {
+                    "value": self._render("line.product_id and line.product_id.name")
+                },
+                "width": 36,
+            },
+            "product_origin_country_code": {
+                "header": {"type": "string", "value": _("Product C/O Code")},
+                "line": {
+                    "type": "string",
+                    "value": self._render("line.product_origin_country_code or ''"),
+                },
+                "width": 10,
+            },
+            "product_origin_country": {
+                "header": {"type": "string", "value": _("Product C/O")},
+                "line": {
+                    "type": "string",
+                    "value": self._render("line.product_origin_country_id.name or ''"),
+                },
+                "width": 28,
+            },
+            "hs_code": {
+                "header": {"type": "string", "value": _("Intrastat Code")},
+                "line": {
+                    "type": "string",
+                    "value": self._render("line.hs_code_id.local_code"),
+                },
+                "width": 14,
+            },
+            "src_dest_country_code": {
+                "header": {
+                    "type": "string",
+                    "value": _("Country Code of Origin/Destination"),
+                },
+                "line": {
+                    "type": "string",
+                    "value": self._render("line.src_dest_country_code"),
+                },
+                "width": 10,
+            },
+            "src_dest_country": {
+                "header": {
+                    "type": "string",
+                    "value": _("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": _("Fiscal Value"),
+                    "format": FORMATS["format_theader_yellow_right"],
+                },
+                "line": {
+                    "type": "number",
+                    "value": self._render("line.amount_company_currency"),
+                    "format": FORMATS["format_tcell_amount_right"],
+                },
+                "width": 18,
+            },
+            "accessory_cost": {
+                "header": {
+                    "type": "string",
+                    "value": _("Accessory Costs"),
+                    "format": FORMATS["format_theader_yellow_right"],
+                },
+                "line": {
+                    "type": "number",
+                    "value": self._render(
+                        "line.amount_accessory_cost_company_currency"
+                    ),
+                    "format": FORMATS["format_tcell_amount_right"],
+                },
+                "width": 18,
+            },
+            "transaction_code": {
+                "header": {
+                    "type": "string",
+                    "value": _("Intrastat Transaction code"),
+                },
+                "line": {"value": self._render("line.transaction_id.code")},
+                "width": 10,
+            },
+            "transaction": {
+                "header": {"type": "string", "value": _("Intrastat Transaction")},
+                "line": {"value": self._render("line.transaction_id.display_name")},
+                "width": 36,
+            },
+            "weight": {
+                "header": {
+                    "type": "string",
+                    "value": _("Weight"),
+                    "format": FORMATS["format_theader_yellow_right"],
+                },
+                "line": {
+                    "type": "number",
+                    "value": self._render("line.weight"),
+                    "format": FORMATS["format_tcell_amount_right"],
+                },
+                "width": 18,
+            },
+            "suppl_unit_qty": {
+                "header": {
+                    "type": "string",
+                    "value": _("Suppl. Unit Qty"),
+                    "format": FORMATS["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": FORMATS["format_tcell_amount_right"],
+                },
+                "width": 18,
+            },
+            "suppl_unit": {
+                "header": {"type": "string", "value": _("Suppl. Unit")},
+                "line": {"value": self._render("line.intrastat_unit_id.name or ''")},
+                "width": 14,
+            },
+            "incoterm": {
+                "header": {"type": "string", "value": _("Incoterm")},
+                "line": {"value": self._render("line.incoterm_id.name or ''")},
+                "width": 14,
+            },
+            "transport_code": {
+                "header": {"type": "string", "value": _("Transport Mode Code")},
+                "line": {"value": self._render("line.transport_id.code or ''")},
+                "width": 10,
+            },
+            "transport": {
+                "header": {"type": "string", "value": _("Transport Mode")},
+                "line": {"value": self._render("line.transport_id.name or ''")},
+                "width": 14,
+            },
+            "region": {
+                "header": {"type": "string", "value": _("Intrastat Region")},
+                "line": {"value": self._render("line.region_id.name or ''")},
+                "width": 28,
+            },
+            "region_code": {
+                "header": {"type": "string", "value": _("Intrastat Region Code")},
+                "line": {"value": self._render("line.region_code or ''")},
+                "width": 10,
+            },
+            "vat": {
+                "header": {"type": "string", "value": _("VAT")},
+                "line": {"value": self._render("line.vat or ''")},
+                "width": 20,
+            },
+            "partner_id": {
+                "header": {"type": "string", "value": _("Partner")},
+                "line": {"value": self._render("line.partner_id.display_name or ''")},
+                "width": 28,
+            },
+            "invoice": {
+                "header": {"type": "string", "value": _("Invoice")},
+                "line": {"value": self._render("line.invoice_id.name")},
+                "width": 18,
+            },
+        }
+        template.update(declaration._xls_template())
+
+        return template
+
+    def _get_ws_params(self, wb, data, declarations):
+        template = self._get_template(declarations)
+        res = []
+        wanted_list_computation = declarations._xls_computation_line_fields()
+        wanted_list_declaration = declarations._xls_declaration_line_fields()
+        for declaration in declarations:
+            dname = declaration.display_name
+            res += [
+                {
+                    "ws_name": "%s %s" % (dname, _("comput.")),
+                    "generate_ws_method": "_intrastat_report_computation",
+                    "title": "%s : %s" % (dname, _("Computation Lines")),
+                    "wanted_list": wanted_list_computation,
+                    "col_specs": template,
+                },
+                {
+                    "ws_name": "%s %s" % (dname, _("decl.")),
+                    "generate_ws_method": "_intrastat_report_declaration",
+                    "title": "%s : %s" % (dname, _("Declaration Lines")),
+                    "wanted_list": wanted_list_declaration,
+                    "col_specs": template,
+                },
+            ]
+        return res
+
+    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, FORMATS["format_left_bold"])
+
+    def _intrastat_report_computation(self, workbook, ws, ws_params, data, declaration):
+        report = "computation"
+        lines = declaration.computation_line_ids
+        self._intrastat_report(
+            workbook, ws, ws_params, data, declaration, lines, report
+        )
+
+    def _intrastat_report_declaration(self, workbook, ws, ws_params, data, declaration):
+        report = "declaration"
+        lines = declaration.declaration_line_ids
+        self._intrastat_report(
+            workbook, ws, ws_params, data, declaration, lines, report
+        )
+
+    def _intrastat_report(
+        self, workbook, ws, ws_params, data, declaration, lines, report
+    ):
+        ws.set_landscape()
+        ws.fit_to_pages(1, 0)
+        ws.set_header(XLS_HEADERS["xls_headers"]["standard"])
+        ws.set_footer(XLS_HEADERS["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 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=FORMATS["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=FORMATS["format_tcell_left"],
+            )
diff --git a/intrastat_product/report/report.xml b/intrastat_product/report/report.xml
new file mode 100644
index 000000000..c217637fb
--- /dev/null
+++ b/intrastat_product/report/report.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2023 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+
+<record id="intrastat_product_xlsx_report" model="ir.actions.report">
+    <field name="name">Excel Export</field>
+    <field name="model">intrastat.product.declaration</field>
+    <field name="report_type">xlsx</field>
+    <field name="report_name">intrastat_product.product_declaration_xls</field>
+    <field name="report_file">intrastat_product.product_declaration_xls</field>
+    <field
+            name="print_report_name"
+        >'intrastat-%s-%s%s' % (object.year_month, object.declaration_type, object.state == 'draft' and '-draft' or '')</field>
+    <field name="binding_model_id" ref="model_intrastat_product_declaration" />
+</record>
+
+</odoo>
diff --git a/intrastat_product/security/intrastat_security.xml b/intrastat_product/security/intrastat_security.xml
new file mode 100644
index 000000000..82552a55b
--- /dev/null
+++ b/intrastat_product/security/intrastat_security.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+    <data noupdate="0">
+        <record id="group_invoice_intrastat_transaction_details" model="res.groups">
+            <field name="name">Invoice Intrastat Transaction Details</field>
+            <field
+                name="comment"
+            >Allow to encode Intrastat Transaction Details on Invoices</field>
+            <field name="category_id" ref="base.module_category_hidden" />
+        </record>
+    </data>
+    <data noupdate="1">
+        <record id="intrastat_transaction_company_rule" model="ir.rule">
+            <field name="name">Intrastat Transaction Company rule</field>
+            <field name="model_id" ref="model_intrastat_transaction" />
+            <field
+                name="domain_force"
+            >['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
+        </record>
+        <record id="intrastat_region_company_rule" model="ir.rule">
+            <field name="name">Intrastat Region Company rule</field>
+            <field name="model_id" ref="model_intrastat_region" />
+            <field
+                name="domain_force"
+            >['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
+        </record>
+        <record id="intrastat_product_declaration_company_rule" model="ir.rule">
+            <field name="name">Intrastat Product Declaration Company rule</field>
+            <field name="model_id" ref="model_intrastat_product_declaration" />
+            <field
+                name="domain_force"
+            >['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
+        </record>
+    </data>
+</odoo>
diff --git a/intrastat_product/security/ir.model.access.csv b/intrastat_product/security/ir.model.access.csv
new file mode 100644
index 000000000..0fc2a9952
--- /dev/null
+++ b/intrastat_product/security/ir.model.access.csv
@@ -0,0 +1,18 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_intrastat_unit_read,Read access on Intrastat Supplementary Units to everybody,model_intrastat_unit,,1,0,0,0
+access_intrastat_unit_full,Full access on Intrastat Supplementary Units to Finance manager,model_intrastat_unit,account.group_account_manager,1,1,1,1
+access_intrastat_transaction_read,Read access on Intrastat Transaction Types to everybody,model_intrastat_transaction,,1,0,0,0
+access_intrastat_transaction_full,Full access on Intrastat Transaction Types to Finance manager,model_intrastat_transaction,account.group_account_manager,1,1,1,1
+access_intrastat_transport_mode_read,Read access on Intrastat Transport Modes to everybody,model_intrastat_transport_mode,,1,0,0,0
+access_intrastat_transport_mode_full,Full access on Intrastat Transport Modes to Finance manager,model_intrastat_transport_mode,account.group_account_manager,1,1,1,1
+access_intrastat_region_read,Read access on Intrastat Regions,model_intrastat_region,,1,0,0,0
+access_intrastat_region_full,Full access on Intrastat Regions,model_intrastat_region,account.group_account_manager,1,1,1,1
+access_hs_code_financial_mgr_full,Full access on H.S. Code to financial mgr,product_harmonized_system.model_hs_code,account.group_account_manager,1,1,1,1
+access_read_sale_move_intrastat_line,Read access to Sale User on Invoice Intrastat Lines,model_account_move_intrastat_line,sales_team.group_sale_salesman,1,0,0,0
+access_read_purchase_move_intrastat_line,Read access to Purchase User on Invoice Intrastat Lines,model_account_move_intrastat_line,purchase.group_purchase_user,1,0,0,0
+access_read_account_move_intrastat_line,Read access on Invoice Intrastat Lines,model_account_move_intrastat_line,account.group_account_readonly,1,0,0,0
+access_account_move_intrastat_line,Full access on Invoice Intrastat Lines,model_account_move_intrastat_line,account.group_account_invoice,1,1,1,1
+access_intrastat_product_declaration,Full access on Intrastat Product Declarations to Accountant,model_intrastat_product_declaration,account.group_account_user,1,1,1,1
+access_intrastat_product_computation_line,Full access on Intrastat Product Computation Lines to Accountant,model_intrastat_product_computation_line,account.group_account_user,1,1,1,1
+access_intrastat_product_declaration_line,Full access on Intrastat Product Declaration Lines to Accountant,model_intrastat_product_declaration_line,account.group_account_user,1,1,1,1
+access_intrastat_result_view,Access on intrastat.result.view,model_intrastat_result_view,account.group_account_user,1,1,1,0
diff --git a/intrastat_product/static/description/icon.png b/intrastat_product/static/description/icon.png
new file mode 100644
index 000000000..3a0328b51
Binary files /dev/null and b/intrastat_product/static/description/icon.png differ
diff --git a/intrastat_product/static/description/index.html b/intrastat_product/static/description/index.html
new file mode 100644
index 000000000..bdbf10cf4
--- /dev/null
+++ b/intrastat_product/static/description/index.html
@@ -0,0 +1,510 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
+<title>Intrastat Product</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+.subscript {
+  vertical-align: sub;
+  font-size: smaller }
+
+.superscript {
+  vertical-align: super;
+  font-size: smaller }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+  overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left, .figure.align-left, object.align-left, table.align-left {
+  clear: left ;
+  float: left ;
+  margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right, table.align-right {
+  clear: right ;
+  float: right ;
+  margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+table.align-center {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+  text-align: left }
+
+.align-center {
+  clear: both ;
+  text-align: center }
+
+.align-right {
+  text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+  text-align: inherit }
+
+/* div.align-center * { */
+/*   text-align: left } */
+
+.align-top    {
+  vertical-align: top }
+
+.align-middle {
+  vertical-align: middle }
+
+.align-bottom {
+  vertical-align: bottom }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+/* "booktabs" style (no vertical lines) */
+table.docutils.booktabs {
+  border: 0px;
+  border-top: 2px solid;
+  border-bottom: 2px solid;
+  border-collapse: collapse;
+}
+table.docutils.booktabs * {
+  border: 0px;
+}
+table.docutils.booktabs th {
+  border-bottom: thin solid;
+  text-align: left;
+}
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="intrastat-product">
+<h1 class="title">Intrastat Product</h1>
+
+<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! This file is generated by oca-gen-addon-readme !!
+!! changes will be overwritten.                   !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/intrastat-extrastat/tree/14.0/intrastat_product"><img alt="OCA/intrastat-extrastat" src="https://img.shields.io/badge/github-OCA%2Fintrastat--extrastat-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/intrastat-extrastat-14-0/intrastat-extrastat-14-0-intrastat_product"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/227/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p>This module contains common objects and fields for the Intrastat Product reporting.</p>
+<p>It should be used in combination with country-specific Intrastat Product reporting modules
+such as:</p>
+<ul class="simple">
+<li><em>l10n_fr_intrastat_product</em>:
+the module for the <em>Déclaration d’Echange de Biens</em> (DEB) for France</li>
+<li><em>l10n_be_intrastat_product</em>:
+the module for the Intrastat Product Declaration for Belgium</li>
+</ul>
+<p>These country-specific modules can be found in the OCA localization for those countries.</p>
+<p><strong>Table of contents</strong></p>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#installation" id="id1">Installation</a></li>
+<li><a class="reference internal" href="#configuration" id="id2">Configuration</a></li>
+<li><a class="reference internal" href="#usage" id="id3">Usage</a></li>
+<li><a class="reference internal" href="#known-issues-roadmap" id="id4">Known issues / Roadmap</a></li>
+<li><a class="reference internal" href="#bug-tracker" id="id5">Bug Tracker</a></li>
+<li><a class="reference internal" href="#credits" id="id6">Credits</a><ul>
+<li><a class="reference internal" href="#authors" id="id7">Authors</a></li>
+<li><a class="reference internal" href="#contributors" id="id8">Contributors</a></li>
+<li><a class="reference internal" href="#maintainers" id="id9">Maintainers</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="installation">
+<h1><a class="toc-backref" href="#id1">Installation</a></h1>
+<p>This module is NOT compatible with the <em>account_intrastat</em> module from Odoo Enterprise.</p>
+</div>
+<div class="section" id="configuration">
+<h1><a class="toc-backref" href="#id2">Configuration</a></h1>
+<p>By default the intrastat declaration is generated based upon the product record master data.
+Hence unexpected results may occur in case this master data is not accurate,
+e.g. wrong or missing weight, country of origin, …</p>
+<div class="line-block">
+<div class="line"><br /></div>
+</div>
+<p>This can be corrected by changing the appropriate fields when analysing the intrastat declaration
+but this can be challenging in case of large transaction volumes and especially in the specific use
+case where the product weight cannot be encoded correctly on the product records (e.g. products with variable weight).</p>
+<div class="line-block">
+<div class="line"><br /></div>
+</div>
+<p>It is possible to allow encoding the intrastat transaction details on the purchase/sale invoice
+via the “intrastat_product.group_invoice_intrastat_transaction_detail” usability group.</p>
+</div>
+<div class="section" id="usage">
+<h1><a class="toc-backref" href="#id3">Usage</a></h1>
+<p>This module is used in combination with the country-specific
+localization module(s).</p>
+<p><strong>Coding guidelines for localization module:</strong></p>
+<p>We recommend to start by copying an existing module, e.g. l10n_be_intrastat_product
+and adapt the code for the specific needs of your country.</p>
+<ul>
+<li><p class="first">Declaration Object</p>
+<p>Create a new class as follows:</p>
+<pre class="code python literal-block">
+<span class="k">class</span> <span class="nc">L10nCcIntrastatProductDeclaration</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="n">_name</span> <span class="o">=</span> <span class="s1">'l10n.cc.intrastat.product.declaration'</span>
+    <span class="n">_description</span> <span class="o">=</span> <span class="s2">&quot;Intrastat Product Declaration for YourCountry&quot;</span>
+    <span class="n">_inherit</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'intrastat.product.declaration'</span><span class="p">,</span> <span class="s1">'mail.thread'</span><span class="p">]</span>
+</pre>
+<p>whereby cc = your country code</p>
+</li>
+<li><p class="first">Computation &amp; Declaration Lines</p>
+<p>Create also new objects inheriting from the Computation and Declaration Line Objects
+so that you can add methods or customise the methods from the base modules (make a PR when
+the customization or new method is required for multiple countries).</p>
+<p>Adapt also the parent_id fields of the newly created objects
+(cf. l10n_be_intrastat_product as example).</p>
+</li>
+<li><p class="first">XML Files: Menu, Action, Views</p>
+<p>Cf. l10n_be_istrastat_product as example, replace “be” by your Country Code.</p>
+</li>
+</ul>
+<p><strong>Other functionality added by this module:</strong></p>
+<ul class="simple">
+<li>Compute the Intrastat Lines in an invoice.
+For this, your user needs to be in the “Technical / Invoice Intrastat Transaction Details” group.
+Go to the “Intrastat transaction details” tab and press <strong>Compute</strong></li>
+</ul>
+</div>
+<div class="section" id="known-issues-roadmap">
+<h1><a class="toc-backref" href="#id4">Known issues / Roadmap</a></h1>
+<p>The declaration is based upon the invoices of the corresponding tax declaration period.</p>
+<p>An option to generate the intrastat declaration based upon the dates of the physical movements of goods is currently not available.</p>
+</div>
+<div class="section" id="bug-tracker">
+<h1><a class="toc-backref" href="#id5">Bug Tracker</a></h1>
+<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/intrastat-extrastat/issues">GitHub Issues</a>.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+<a class="reference external" href="https://github.com/OCA/intrastat-extrastat/issues/new?body=module:%20intrastat_product%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<p>Do not contact contributors directly about support or help with technical issues.</p>
+</div>
+<div class="section" id="credits">
+<h1><a class="toc-backref" href="#id6">Credits</a></h1>
+<div class="section" id="authors">
+<h2><a class="toc-backref" href="#id7">Authors</a></h2>
+<ul class="simple">
+<li>ACSONE SA/NV</li>
+<li>brain-tec AG</li>
+<li>Akretion</li>
+<li>Noviat</li>
+</ul>
+</div>
+<div class="section" id="contributors">
+<h2><a class="toc-backref" href="#id8">Contributors</a></h2>
+<ul>
+<li><p class="first">Alexis de Lattre, Akretion &lt;<a class="reference external" href="mailto:alexis.delattre&#64;akretion.com">alexis.delattre&#64;akretion.com</a>&gt;</p>
+</li>
+<li><p class="first">Luc De Meyer, Noviat &lt;<a class="reference external" href="mailto:info&#64;noviat.com">info&#64;noviat.com</a>&gt;</p>
+</li>
+<li><p class="first">Denis Roussel &lt;<a class="reference external" href="mailto:denis.roussel&#64;acsone.eu">denis.roussel&#64;acsone.eu</a>&gt;</p>
+</li>
+<li><p class="first">Tecnativa &lt;www.tecnativa.com&gt;:</p>
+<blockquote>
+<ul class="simple">
+<li>João Marques</li>
+<li>Víctor Martínez</li>
+</ul>
+</blockquote>
+</li>
+</ul>
+</div>
+<div class="section" id="maintainers">
+<h2><a class="toc-backref" href="#id9">Maintainers</a></h2>
+<p>This module is maintained by the OCA.</p>
+<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
+<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.</p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/intrastat-extrastat/tree/14.0/intrastat_product">OCA/intrastat-extrastat</a> project on GitHub.</p>
+<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/intrastat_product/views/account_move.xml b/intrastat_product/views/account_move.xml
new file mode 100644
index 000000000..b7a660674
--- /dev/null
+++ b/intrastat_product/views/account_move.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+    <record id="view_move_form" model="ir.ui.view">
+        <field name="name">intrastat.invoice.form</field>
+        <field name="model">account.move</field>
+        <field name="inherit_id" ref="account.view_move_form" />
+        <field name="arch" type="xml">
+            <xpath
+                expr="//page[@name='other_info']//field[@name='invoice_incoterm_id']"
+                position="after"
+            >
+                <field name="intrastat_transaction_id" />
+                <field name="intrastat" invisible="1" />
+                <field
+                    name="intrastat_transport_id"
+                    attrs="{'invisible': [('intrastat', '!=', 'extended')]}"
+                    widget="selection"
+                />
+                <field name="src_dest_country_id" string="Destination Country" />
+                <field name="src_dest_region_id" string="Origin Region" invisible="1" />
+            </xpath>
+            <page id="invoice_tab" position="after">
+                <page
+                    id="intrastat_lines"
+                    string="Intrastat transaction details"
+                    groups="intrastat_product.group_invoice_intrastat_transaction_details"
+                    attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))]}"
+                >
+                    <div>
+                        <button
+                            type="object"
+                            name="compute_intrastat_lines"
+                            string="Compute"
+                            help="(Re)compute the intrastat transaction details from the product master data."
+                            icon="fa-gears"
+                        />
+                    </div>
+                    <field name="intrastat_line_ids">
+                        <tree editable="bottom">
+                            <field
+                                name="invoice_line_id"
+                                domain="[('move_id', '=', parent.id), ('display_type', '=', 'product')]"
+                                options="{'no_create': True, 'no_open': True}"
+                            />
+                            <field name="product_id" />
+                            <field name="quantity" />
+                            <field name="transaction_suppl_unit_qty" />
+                            <field name="hs_code_id" />
+                            <field name="transaction_weight" />
+                            <field name="product_origin_country_id" />
+                        </tree>
+                    </field>
+                </page>
+            </page>
+        </field>
+    </record>
+</odoo>
diff --git a/intrastat_product/views/hs_code.xml b/intrastat_product/views/hs_code.xml
new file mode 100644
index 000000000..9a80dbeb3
--- /dev/null
+++ b/intrastat_product/views/hs_code.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2010-2020 Akretion (http://www.akretion.com/)
+  Copyright 2015-2020 Noviat (http://www.noviat.com/)
+  @author Alexis de Lattre <alexis.delattre@akretion.com>
+  @author Luc De Meyer <luc.demeyer@noviat.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <!-- Add the H.S. code menu under the Intrastat Config menu -->
+    <menuitem
+        id="intrastat_code_menu"
+        action="product_harmonized_system.hs_code_action"
+        parent="intrastat_base.menu_intrastat_config_root"
+        sequence="10"
+    />
+    <!-- Inherit tree view of H.S. code -->
+    <record id="hs_code_tree" model="ir.ui.view">
+        <field name="name">intrastat.hs.code.tree</field>
+        <field name="model">hs.code</field>
+        <field name="inherit_id" ref="product_harmonized_system.hs_code_view_tree" />
+        <field name="arch" type="xml">
+            <field name="local_code" position="after">
+                <field name="intrastat_unit_id" optional="show" />
+            </field>
+        </field>
+    </record>
+    <!-- Inherit form view for H.S. code -->
+    <record id="hs_code_form" model="ir.ui.view">
+        <field name="name">intrastat.hs.code.form</field>
+        <field name="model">hs.code</field>
+        <field name="inherit_id" ref="product_harmonized_system.hs_code_view_form" />
+        <field name="arch" type="xml">
+            <field name="local_code" position="after">
+                <field name="intrastat_unit_id" />
+            </field>
+        </field>
+    </record>
+</odoo>
diff --git a/intrastat_product/views/intrastat_product_declaration.xml b/intrastat_product/views/intrastat_product_declaration.xml
new file mode 100644
index 000000000..da4b22b40
--- /dev/null
+++ b/intrastat_product/views/intrastat_product_declaration.xml
@@ -0,0 +1,488 @@
+<?xml version="1.0" ?>
+<odoo>
+    <record id="intrastat_product_declaration_view_form" model="ir.ui.view">
+        <field name="name">intrastat.product.declaration.form</field>
+        <field name="model">intrastat.product.declaration</field>
+        <field name="arch" type="xml">
+            <form>
+                <header>
+                    <button
+                        name="action_gather"
+                        type="object"
+                        attrs="{'invisible': ['|', ('state', '!=', 'draft'), ('action', '=', 'nihil')]}"
+                        string="Generate Lines from Invoices"
+                        class="btn-primary"
+                    />
+                    <button
+                        name="done"
+                        string="Confirm"
+                        type="object"
+                        class="btn-primary"
+                        states="draft"
+                        help="Generate declaration lines, generate XML export and set declaration to 'Done'"
+                    />
+                    <button
+                        name="back2draft"
+                        string="Back to Draft"
+                        type="object"
+                        states="done"
+                        confirm="Are you sure you want to go back to draft?"
+                    />
+                    <button
+                        name="%(intrastat_product.intrastat_product_xlsx_report)d"
+                        type="action"
+                        string="Excel Export"
+                    />
+                    <field name="state" widget="statusbar" />
+                </header>
+                <sheet>
+                    <div class="oe_title">
+                        <h1>
+                            <span>Intrastat Product Declaration </span>
+                            <field name="year_month" class="oe_inline" />
+                        </h1>
+                    </div>
+                    <group name="top-block">
+                        <group name="properties-1">
+                            <field name="year" />
+                            <field name="month" />
+                            <field name="declaration_type" />
+                            <field name="reporting_level" />
+                            <field
+                                name="xml_attachment_datas"
+                                filename="xml_attachment_name"
+                                invisible="context.get('generic_intrastat_product_declaration')"
+                            />
+                            <field name="xml_attachment_name" invisible="1" />
+                            <field name="xml_attachment_id" invisible="1" />
+                        </group>
+                        <group name="properties-2">
+                            <field name="action" />
+                            <field name="revision" />
+                            <field
+                                name="total_amount"
+                                widget="monetary"
+                                options="{'currency_field': 'currency_id'}"
+                            />
+                            <field name="num_decl_lines" />
+                            <field
+                                name="company_id"
+                                groups="base.group_multi_company"
+                            />
+                            <field name="company_country_code" invisible="1" />
+                            <field name="currency_id" invisible="1" />
+                        </group>
+                    </group>
+                    <notebook>
+                        <page string="Transactions" name="computation_lines">
+                            <field
+                                name="computation_line_ids"
+                                context="{'declaration_type': declaration_type, 'reporting_level': reporting_level}"
+                                nolabel="1"
+                            />
+                        </page>
+                        <page string="Declaration Lines" name="declaration_lines">
+                            <field
+                                name="declaration_line_ids"
+                                context="{'declaration_type': declaration_type, 'reporting_level': reporting_level}"
+                                nolabel="1"
+                            />
+                        </page>
+                        <page string="Notes" name="note">
+                            <field name="note" />
+                        </page>
+                    </notebook>
+                </sheet>
+                <div class="oe_chatter">
+                    <field name="message_follower_ids" widget="mail_followers" />
+                    <field name="activity_ids" widget="mail_activity" />
+                    <field name="message_ids" widget="mail_thread" />
+                </div>
+            </form>
+        </field>
+    </record>
+    <record id="intrastat_product_declaration_view_tree" model="ir.ui.view">
+        <field name="name">intrastat.product.declaration.tree</field>
+        <field name="model">intrastat.product.declaration</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="year_month" decoration-bf="1" />
+                <field
+                    name="declaration_type"
+                    widget="badge"
+                    decoration-danger="declaration_type == 'arrivals'"
+                    decoration-warning="declaration_type == 'dispatches'"
+                />
+                <field name="reporting_level" optional="hide" />
+                <field name="action" optional="hide" />
+                <field name="revision" optional="hide" />
+                <field name="num_decl_lines" optional="show" />
+                <field name="total_amount" sum="1" optional="show" />
+                <field name="currency_id" optional="show" />
+                <field
+                    name="state"
+                    decoration-success="state == 'done'"
+                    decoration-info="state == 'draft'"
+                    widget="badge"
+                />
+            </tree>
+        </field>
+    </record>
+    <record id="intrastat_product_declaration_view_search" model="ir.ui.view">
+        <field name="name">intrastat.product.declaration.search</field>
+        <field name="model">intrastat.product.declaration</field>
+        <field name="arch" type="xml">
+            <search>
+                <field name="year_month" />
+                <filter
+                    name="arrivals"
+                    string="Arrivals"
+                    domain="[('declaration_type', '=', 'arrivals')]"
+                />
+                <filter
+                    name="dispatches"
+                    string="Dispatches"
+                    domain="[('declaration_type', '=', 'dispatches')]"
+                />
+                <separator />
+                <filter
+                    name="draft"
+                    string="Draft"
+                    domain="[('state', '=', 'draft')]"
+                />
+                <filter name="done" string="Done" domain="[('state', '=', 'done')]" />
+                <group string="Group By" name="group_by">
+                    <filter
+                        name="date_group_by"
+                        string="Date"
+                        context="{'group_by': 'year_month'}"
+                    />
+                    <filter
+                        name="declaration_type_group_by"
+                        string="Type"
+                        context="{'group_by': 'declaration_type'}"
+                    />
+                </group>
+            </search>
+        </field>
+    </record>
+    <record id="intrastat_product_declaration_view_graph" model="ir.ui.view">
+        <field name="name">intrastat.product.declaration.graph</field>
+        <field name="model">intrastat.product.declaration</field>
+        <field name="arch" type="xml">
+            <graph type="bar" stacked="False">
+                <field name="year_month" type="row" />
+                <field name="declaration_type" type="row" />
+                <field name="total_amount" type="measure" />
+            </graph>
+        </field>
+    </record>
+    <record id="intrastat_product_declaration_view_pivot" model="ir.ui.view">
+        <field name="name">intrastat.product.declaration.pivot</field>
+        <field name="model">intrastat.product.declaration</field>
+        <field name="arch" type="xml">
+            <pivot>
+                <field name="year_month" type="row" />
+                <field name="declaration_type" type="col" />
+                <field name="total_amount" type="measure" />
+            </pivot>
+        </field>
+    </record>
+    <!-- No menuitem nor action since these are provided by the localization modules -->
+    <record id="intrastat_product_computation_line_view_form" model="ir.ui.view">
+        <field name="name">intrastat.product.computation.line.form</field>
+        <field name="model">intrastat.product.computation.line</field>
+        <field name="arch" type="xml">
+            <form>
+                <group string="Transaction" name="transaction">
+                    <field
+                        name="parent_id"
+                        invisible="not context.get('intrastat_product_computation_line_main_view')"
+                    />
+                    <field name="declaration_type" invisible="1" />
+                    <field name="reporting_level" invisible="1" />
+                    <field name="company_country_code" invisible="1" />
+                    <field name="product_id" />
+                    <field
+                        name="hs_code_id"
+                        attrs="{'required': [('reporting_level', '=', 'extended')], 'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="src_dest_country_id"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="src_dest_country_code"
+                        attrs="{'required': [('reporting_level', '=', 'extended')], 'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="amount_company_currency"
+                        widget="monetary"
+                        options="{'currency_field': 'company_currency_id'}"
+                    />
+                    <field
+                        name="amount_accessory_cost_company_currency"
+                        widget="monetary"
+                        options="{'currency_field': 'company_currency_id'}"
+                    />
+                    <field name="company_currency_id" invisible="1" />
+                    <field name="transaction_id" required="1" />
+                    <label
+                        for="weight"
+                        attrs="{'required': [('reporting_level', '=', 'extended')], 'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <div
+                        name="weight"
+                        attrs="{'required': [('reporting_level', '=', 'extended')], 'invisible': [('reporting_level', '!=', 'extended')]}"
+                    >
+                <field name="weight" class="oe_inline" /> Kg
+            </div>
+                    <field
+                        name="suppl_unit_qty"
+                        attrs="{'required': [('reporting_level', '=', 'extended'), ('intrastat_unit_id', '!=', False)], 'invisible': ['|', ('reporting_level', '!=', 'extended'), ('intrastat_unit_id', '=', False)]}"
+                    />
+                    <field
+                        name="intrastat_unit_id"
+                        attrs="{'invisible': ['|', ('reporting_level', '!=', 'extended'), ('intrastat_unit_id', '=', False)]}"
+                    />
+                    <field
+                        name="transport_id"
+                        attrs="{'required': [('reporting_level', '=', 'extended')], 'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field name="incoterm_id" invisible="1" />
+                    <field
+                        name="region_id"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="region_code"
+                        attrs="{'required': [('reporting_level', '=', 'extended')], 'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="product_origin_country_id"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="product_origin_country_code"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')], 'required': [('reporting_level', '=', 'extended')]}"
+                    />
+                    <field name="partner_id" />
+                    <field name="vat" />
+                    <field name="invoice_id" />
+                </group>
+                <group string="Declaration" name="declaration">
+                    <field name="declaration_line_id" />
+                </group>
+            </form>
+        </field>
+    </record>
+    <record id="intrastat_product_computation_line_view_tree" model="ir.ui.view">
+        <field name="name">intrastat.product.computation.line.tree</field>
+        <field name="model">intrastat.product.computation.line</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field
+                    name="parent_id"
+                    invisible="not context.get('intrastat_product_computation_line_main_view')"
+                />
+                <field name="declaration_type" invisible="1" />
+                <field name="reporting_level" invisible="1" />
+                <field name="company_country_code" invisible="1" />
+                <field name="product_id" optional="show" />
+                <field
+                    name="hs_code_id"
+                    optional="show"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                />
+                <field
+                    name="src_dest_country_id"
+                    optional="hide"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                />
+                <field
+                    name="src_dest_country_code"
+                    optional="show"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                />
+                <field name="amount_company_currency" sum="1" />
+                <field
+                    name="amount_accessory_cost_company_currency"
+                    optional="show"
+                    sum="1"
+                />
+                <field name="transaction_code" />
+                <field
+                    name="weight"
+                    optional="show"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                />
+                <field
+                    name="suppl_unit_qty"
+                    optional="show"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')], 'invisible': [('intrastat_unit_id', '=', False)]}"
+                />
+                <field
+                    name="intrastat_unit_id"
+                    optional="show"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                />
+                <field
+                    name="transport_id"
+                    optional="show"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                />
+                <field
+                    name="region_id"
+                    optional="hide"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                />
+                <field
+                    name="region_code"
+                    optional="show"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                />
+                <field
+                    name="product_origin_country_id"
+                    optional="hide"
+                    string="Product C/O"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                />
+                <field
+                    name="product_origin_country_code"
+                    optional="show"
+                    string="Product C/O"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                />
+                <field name="vat" optional="show" />
+                <field name="invoice_id" optional="show" />
+            </tree>
+        </field>
+    </record>
+    <record id="intrastat_product_declaration_line_view_form" model="ir.ui.view">
+        <field name="name">intrastat.product.declaration.line.form</field>
+        <field name="model">intrastat.product.declaration.line</field>
+        <field name="arch" type="xml">
+            <form>
+                <group name="declaration">
+                    <field
+                        name="parent_id"
+                        invisible="not context.get('intrastat_product_declaration_line_main_view')"
+                    />
+                    <field name="declaration_type" invisible="1" />
+                    <field name="reporting_level" invisible="1" />
+                    <field name="company_country_code" invisible="1" />
+                    <field
+                        name="hs_code_id"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="src_dest_country_code"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="amount_company_currency"
+                        widget="monetary"
+                        options="{'currency_field': 'company_currency_id'}"
+                    />
+                    <field name="company_currency_id" invisible="1" />
+                    <field name="transaction_id" />
+                    <label
+                        for="weight"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <div
+                        name="weight"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    >
+                <field name="weight" class="oe_inline" /> Kg
+            </div>
+                    <field
+                        name="suppl_unit_qty"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="intrastat_unit_id"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="transport_id"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field
+                        name="region_code"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field name="incoterm_id" invisible="1" />
+                    <field
+                        name="product_origin_country_code"
+                        attrs="{'invisible': [('reporting_level', '!=', 'extended')]}"
+                    />
+                    <field name="vat" />
+                </group>
+                <group name="computation" string="Related Transactions">
+                    <field name="computation_line_ids" nolabel="1" colspan="2" />
+                </group>
+            </form>
+        </field>
+    </record>
+    <record id="intrastat_product_declaration_line_view_tree" model="ir.ui.view">
+        <field name="name">intrastat.product.declaration.line.tree</field>
+        <field name="model">intrastat.product.declaration.line</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field
+                    name="parent_id"
+                    invisible="not context.get('intrastat_product_declaration_line_main_view')"
+                />
+                <field name="declaration_type" invisible="1" />
+                <field name="reporting_level" invisible="1" />
+                <field name="company_country_code" invisible="1" />
+                <field
+                    name="hs_code_id"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                    optional="show"
+                />
+                <field
+                    name="src_dest_country_code"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                    optional="show"
+                />
+                <field name="amount_company_currency" sum="1" />
+                <field name="transaction_code" />
+                <field
+                    name="weight"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                    optional="show"
+                />
+                <field
+                    name="suppl_unit_qty"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                    optional="show"
+                />
+                <field
+                    name="intrastat_unit_id"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                    optional="show"
+                />
+                <field
+                    name="transport_id"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                    optional="show"
+                />
+                <field
+                    name="region_code"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                    optional="show"
+                />
+                <field name="incoterm_id" invisible="1" />
+                <field
+                    name="product_origin_country_code"
+                    attrs="{'column_invisible': [('parent.reporting_level', '!=', 'extended')]}"
+                    string="Product C/O"
+                    optional="show"
+                />
+                <field name="vat" />
+            </tree>
+        </field>
+    </record>
+</odoo>
diff --git a/intrastat_product/views/intrastat_region.xml b/intrastat_product/views/intrastat_region.xml
new file mode 100644
index 000000000..2b1d6de70
--- /dev/null
+++ b/intrastat_product/views/intrastat_region.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+    <record id="intrastat_region_view_form" model="ir.ui.view">
+        <field name="name">intrastat.region.form</field>
+        <field name="model">intrastat.region</field>
+        <field name="arch" type="xml">
+            <form>
+                <group name="main">
+                    <field name="code" />
+                    <field name="name" />
+                    <field name="description" />
+                    <field name="country_id" />
+                    <field name="company_id" groups="base.group_multi_company" />
+                </group>
+            </form>
+        </field>
+    </record>
+    <record id="intrastat_region_view_tree" model="ir.ui.view">
+        <field name="name">intrastat.region.tree</field>
+        <field name="model">intrastat.region</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="code" />
+                <field name="name" />
+                <field name="description" optional="show" />
+                <field name="country_id" />
+                <field name="company_id" groups="base.group_multi_company" />
+            </tree>
+        </field>
+    </record>
+    <record id="intrastat_region_view_search" model="ir.ui.view">
+        <field name="name">intrastat.region.search</field>
+        <field name="model">intrastat.region</field>
+        <field name="arch" type="xml">
+            <search>
+                <field
+                    name="name"
+                    string="Name, Code or Description"
+                    filter_domain="['|', '|', ('code', 'ilike', self), ('name', 'ilike', self), ('description', 'ilike', self)]"
+                />
+                <field name="code" />
+                <field name="country_id" />
+                <group name="groupby">
+                    <filter
+                        name="country_groupby"
+                        string="Country"
+                        context="{'group_by': 'country_id'}"
+                    />
+                </group>
+            </search>
+        </field>
+    </record>
+    <record id="intrastat_region_action" model="ir.actions.act_window">
+        <field name="name">Intrastat Regions</field>
+        <field name="res_model">intrastat.region</field>
+        <field name="view_mode">tree,form</field>
+    </record>
+    <menuitem
+        id="intrastat_region_menu"
+        action="intrastat_region_action"
+        parent="intrastat_base.menu_intrastat_config_root"
+        sequence="50"
+    />
+</odoo>
diff --git a/intrastat_product/views/intrastat_transaction.xml b/intrastat_product/views/intrastat_transaction.xml
new file mode 100644
index 000000000..831d82ad8
--- /dev/null
+++ b/intrastat_product/views/intrastat_transaction.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2010-2020 Akretion (http://www.akretion.com/)
+  Copyright 2015-2020 Noviat (http://www.noviat.com/)
+  @author Alexis de Lattre <alexis.delattre@akretion.com>
+  @author Luc De Meyer <luc.demeyer@noviat.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <!-- Intrastat Transaction Type -->
+    <record id="intrastat_transaction_form" model="ir.ui.view">
+        <field name="name">intrastat.transaction_form</field>
+        <field name="model">intrastat.transaction</field>
+        <field name="arch" type="xml">
+            <form>
+                <sheet>
+                    <widget
+                        name="web_ribbon"
+                        title="Archived"
+                        bg_color="bg-danger"
+                        attrs="{'invisible': [('active', '=', True)]}"
+                    />
+                    <field name="active" invisible="1" />
+                    <group name="main">
+                        <field name="code" />
+                        <field name="description" />
+                        <field name="company_id" groups="base.group_multi_company" />
+                    </group>
+                </sheet>
+            </form>
+        </field>
+    </record>
+    <record id="intrastat_transaction_tree" model="ir.ui.view">
+        <field name="name">intrastat.transaction_tree</field>
+        <field name="model">intrastat.transaction</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="code" />
+                <field name="description" />
+                <field name="company_id" groups="base.group_multi_company" />
+            </tree>
+        </field>
+    </record>
+    <record id="intrastat_transaction_mode_search" model="ir.ui.view">
+        <field name="name">intrastat.transaction.mode.search</field>
+        <field name="model">intrastat.transaction</field>
+        <field name="arch" type="xml">
+            <search>
+                <field
+                    name="description"
+                    string="Code or Description"
+                    filter_domain="['|', ('code', 'ilike', self), ('description', 'ilike', self)]"
+                />
+                <filter
+                    string="Archived"
+                    name="inactive"
+                    domain="[('active', '=', False)]"
+                />
+                <group string="Group By" name="groupby">
+                    <filter
+                        name="company_groupby"
+                        string="Company"
+                        context="{'group_by': 'company_id'}"
+                    />
+                </group>
+            </search>
+        </field>
+    </record>
+    <record id="intrastat_transaction_action" model="ir.actions.act_window">
+        <field name="name">Transaction Types</field>
+        <field name="res_model">intrastat.transaction</field>
+        <field name="view_mode">tree,form</field>
+    </record>
+    <menuitem
+        id="intrastat_transaction_menu"
+        action="intrastat_transaction_action"
+        parent="intrastat_base.menu_intrastat_config_root"
+        sequence="20"
+    />
+</odoo>
diff --git a/intrastat_product/views/intrastat_transport_mode.xml b/intrastat_product/views/intrastat_transport_mode.xml
new file mode 100644
index 000000000..2083e10bb
--- /dev/null
+++ b/intrastat_product/views/intrastat_transport_mode.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  © 2010-2017 Akretion (http://www.akretion.com/)
+  © 2015-2017 Noviat (http://www.noviat.com/)
+  @author Alexis de Lattre <alexis.delattre@akretion.com>
+  @author Luc De Meyer <luc.demeyer@noviat.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <!-- Intrastat Transport Mode -->
+    <record id="intrastat_transport_mode_form" model="ir.ui.view">
+        <field name="name">intrastat.transport.mode.form</field>
+        <field name="model">intrastat.transport_mode</field>
+        <field name="arch" type="xml">
+            <form>
+                <group>
+                    <field name="name" />
+                    <field name="code" />
+                    <field name="description" />
+                </group>
+            </form>
+        </field>
+    </record>
+    <record id="intrastat_transport_mode_tree" model="ir.ui.view">
+        <field name="name">intrastat.transport.mode.tree</field>
+        <field name="model">intrastat.transport_mode</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="code" />
+                <field name="name" />
+                <field name="description" optional="show" />
+            </tree>
+        </field>
+    </record>
+    <record id="intrastat_transport_mode_search" model="ir.ui.view">
+        <field name="name">intrastat.transport.mode.search</field>
+        <field name="model">intrastat.transport_mode</field>
+        <field name="arch" type="xml">
+            <search>
+                <field
+                    name="name"
+                    string="Name, Code or Description"
+                    filter_domain="['|', '|', ('name', 'ilike', self), ('description', 'ilike', self), ('code', 'ilike', self)]"
+                />
+            </search>
+        </field>
+    </record>
+    <record id="intrastat_transport_action" model="ir.actions.act_window">
+        <field name="name">Transport Modes</field>
+        <field name="res_model">intrastat.transport_mode</field>
+        <field name="view_mode">tree,form</field>
+    </record>
+    <menuitem
+        id="intrastat_transport_menu"
+        action="intrastat_transport_action"
+        parent="intrastat_base.menu_intrastat_config_root"
+        sequence="30"
+    />
+</odoo>
diff --git a/intrastat_product/views/intrastat_unit.xml b/intrastat_product/views/intrastat_unit.xml
new file mode 100644
index 000000000..a6e995628
--- /dev/null
+++ b/intrastat_product/views/intrastat_unit.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  © 2010-2017 Akretion (http://www.akretion.com/)
+  © 2015-2017 Noviat (http://www.noviat.com/)
+  @author Alexis de Lattre <alexis.delattre@akretion.com>
+  @author Luc De Meyer <luc.demeyer@noviat.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <!-- Intrastat Supplementary Unit -->
+    <record id="intrastat_unit_form" model="ir.ui.view">
+        <field name="name">intrastat.unit.form</field>
+        <field name="model">intrastat.unit</field>
+        <field name="arch" type="xml">
+            <form>
+                <field name="active" invisible="1" />
+                <widget
+                    name="web_ribbon"
+                    text="Archived"
+                    bg_color="bg-danger"
+                    attrs="{'invisible': [('active', '=', True)]}"
+                />
+                <group name="main">
+                    <field name="name" />
+                    <field name="uom_id" required="1" />
+                    <field name="description" />
+                </group>
+            </form>
+        </field>
+    </record>
+    <record id="intrastat_unit_tree" model="ir.ui.view">
+        <field name="name">intrastat.unit.tree</field>
+        <field name="model">intrastat.unit</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="name" />
+                <field name="uom_id" />
+                <field name="description" optional="show" />
+            </tree>
+        </field>
+    </record>
+    <record id="intrastat_unit_search" model="ir.ui.view">
+        <field name="name">intrastat.unit.search</field>
+        <field name="model">intrastat.unit</field>
+        <field name="arch" type="xml">
+            <search>
+                <field
+                    name="name"
+                    filter_domain="['|', ('name', 'ilike', self), ('description', 'ilike', self)]"
+                />
+                <filter
+                    string="Archived"
+                    name="inactive"
+                    domain="[('active', '=', False)]"
+                />
+                <group string="Group By" name="groupby">
+                    <filter
+                        name="uom_groupby"
+                        string="Regular UoM"
+                        context="{'group_by': 'uom_id'}"
+                    />
+                </group>
+            </search>
+        </field>
+    </record>
+    <record id="intrastat_unit_action" model="ir.actions.act_window">
+        <field name="name">Supplementary Units</field>
+        <field name="res_model">intrastat.unit</field>
+        <field name="view_mode">tree,form</field>
+    </record>
+    <menuitem
+        id="intrastat_unit_menu"
+        action="intrastat_unit_action"
+        parent="intrastat_base.menu_intrastat_config_root"
+        sequence="40"
+    />
+</odoo>
diff --git a/intrastat_product/views/report_invoice.xml b/intrastat_product/views/report_invoice.xml
new file mode 100644
index 000000000..181a4ca74
--- /dev/null
+++ b/intrastat_product/views/report_invoice.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+    <template
+        id="report_invoice_document_intrastat_product"
+        inherit_id="account.report_invoice_document"
+    >
+        <xpath expr="//div[hasclass('page')]" position="inside">
+            <t t-if="o.partner_id.invoice_intrastat_detail">
+                <t
+                    t-set="intrastat_lines_info"
+                    t-value="o._get_intrastat_lines_info()"
+                />
+                <t t-if="intrastat_lines_info">
+                    <p style="page-break-before: always;" />
+                    <h5>Intrastat information</h5>
+                    <table name="intrastat_transaction_detail" class="table">
+                        <thead>
+                            <tr>
+                                <th>Reference</th>
+                                <th>Product</th>
+                                <th>HS Code</th>
+                                <th>Unit Weight</th>
+                                <th>Weight</th>
+                                <th>Origin country</th>
+                            </tr>
+                        </thead>
+                        <tbody>
+                            <tr t-foreach="intrastat_lines_info" t-as="line">
+                                <td>
+                                    <span t-esc="line['product_id'].default_code" />
+                                </td>
+                                <td>
+                                    <span t-esc="line['product_id'].display_name" />
+                                </td>
+                                <td>
+                                    <span t-esc="line['hs_code_id'].local_code" />
+                                </td>
+                                <td>
+                                    <span t-esc="line['product_id'].weight" />
+                                </td>
+                                <td>
+                                    <span t-esc="round(line['weight'], 2)" />
+                                </td>
+                                <td>
+                                    <span t-esc="line['origin_country_id'].name" />
+                                </td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </t>
+            </t>
+        </xpath>
+    </template>
+</odoo>
diff --git a/intrastat_product/views/res_config_settings.xml b/intrastat_product/views/res_config_settings.xml
new file mode 100644
index 000000000..3717a4fcc
--- /dev/null
+++ b/intrastat_product/views/res_config_settings.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" ?>
+<!--
+  Copyright 2018-2020 brain-tec AG (Kumar Aberer <kumar.aberer@braintec-group.com>)
+  Copyright 2019-2020 Noviat (www.noviat.com)
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="view_res_config_settings" model="ir.ui.view">
+        <field name="name">intrastat.account.config.settings.form</field>
+        <field name="model">res.config.settings</field>
+        <field
+            name="inherit_id"
+            ref="intrastat_base.view_intrastat_res_config_settings"
+        />
+        <field name="arch" type="xml">
+            <div id="intrastat-settings" position="inside">
+                        <div class="o_setting_left_pane" />
+                        <div
+                    class="o_setting_right_pane"
+                    id="intrastat-product-main-params"
+                >
+                            <div class="row">
+                                <label for="intrastat_arrivals" class="col-md-5" />
+                                <field name="intrastat_arrivals" />
+                                <field name="country_id" invisible="1" />
+                            </div>
+                            <div class="row">
+                                <label for="intrastat_dispatches" class="col-md-5" />
+                                <field name="intrastat_dispatches" />
+                            </div>
+                            <div class="row">
+                                <label for="intrastat_transport_id" class="col-md-5" />
+                                <field name="intrastat_transport_id" />
+                            </div>
+                            <div
+                        class="row"
+                        attrs="{'invisible': [('country_code', 'not in', ['BE'])]}"
+                    >
+                                <label for="intrastat_region_id" class="col-md-5" />
+                                <field
+                            name="intrastat_region_id"
+                            domain="[('country_id','=', country_id)]"
+                        />
+                            </div>
+                        </div>
+                        <div class="o_setting_left_pane">
+                            <field
+                        name="intrastat_accessory_costs"
+                        attrs="{'invisible': [('country_code', 'in', ['BE'])]}"
+                    />
+                        </div>
+                        <div class="o_setting_right_pane">
+                            <div class="row">
+                                <label
+                            for="intrastat_accessory_costs"
+                            class="col-12"
+                            attrs="{'invisible': [('country_code', 'in', ['BE'])]}"
+                        />
+                            </div>
+                        </div>
+            </div>
+        </field>
+    </record>
+</odoo>
diff --git a/intrastat_product/views/res_partner_view.xml b/intrastat_product/views/res_partner_view.xml
new file mode 100644
index 000000000..61d19a60a
--- /dev/null
+++ b/intrastat_product/views/res_partner_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<odoo>
+    <record id="view_partner_property_form" model="ir.ui.view">
+        <field name="name">res.partner.form</field>
+        <field name="model">res.partner</field>
+        <field name="inherit_id" ref="account.view_partner_property_form" />
+        <field name="arch" type="xml">
+            <field name="property_account_position_id" position="after">
+                <field name="invoice_intrastat_detail" />
+            </field>
+        </field>
+    </record>
+</odoo>
diff --git a/intrastat_product/views/sale_order.xml b/intrastat_product/views/sale_order.xml
new file mode 100644
index 000000000..74fb4eeb2
--- /dev/null
+++ b/intrastat_product/views/sale_order.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<odoo>
+    <record id="sale_order_form" model="ir.ui.view">
+        <field name="name">intrastat.sale.order.form</field>
+        <field name="model">sale.order</field>
+        <field name="inherit_id" ref="sale_stock.view_order_form_inherit_sale_stock" />
+        <field name="arch" type="xml">
+            <field name="incoterm" position="after">
+                <field
+                    name="intrastat_transport_id"
+                    attrs="{'invisible': [('intrastat', '!=', 'extended')]}"
+                    widget="selection"
+                />
+                <field name="intrastat" invisible="1" />
+            </field>
+        </field>
+    </record>
+</odoo>
diff --git a/intrastat_product/views/stock_warehouse.xml b/intrastat_product/views/stock_warehouse.xml
new file mode 100644
index 000000000..7de062693
--- /dev/null
+++ b/intrastat_product/views/stock_warehouse.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<odoo>
+    <record id="view_warehouse" model="ir.ui.view">
+        <field name="name">intrastat.stock.warehouse.form</field>
+        <field name="model">stock.warehouse</field>
+        <field name="inherit_id" ref="stock.view_warehouse" />
+        <field name="arch" type="xml">
+            <field name="partner_id" position="after">
+                <field name="region_id" />
+            </field>
+        </field>
+    </record>
+</odoo>
diff --git a/intrastat_product/wizards/__init__.py b/intrastat_product/wizards/__init__.py
new file mode 100644
index 000000000..552479c72
--- /dev/null
+++ b/intrastat_product/wizards/__init__.py
@@ -0,0 +1,2 @@
+from . import res_config_settings
+from . import intrastat_result_view
diff --git a/intrastat_product/wizards/intrastat_result_view.py b/intrastat_product/wizards/intrastat_result_view.py
new file mode 100644
index 000000000..42bc3bb34
--- /dev/null
+++ b/intrastat_product/wizards/intrastat_result_view.py
@@ -0,0 +1,14 @@
+# Copyright 2010-2021 Akretion (<alexis.delattre@akretion.com>)
+# Copyright 2009-2021 Noviat (http://www.noviat.com)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class IntrastatResultView(models.TransientModel):
+    _name = "intrastat.result.view"
+    _description = "Pop-up to show errors on intrastat report generation"
+
+    note = fields.Html(
+        string="Notes", readonly=True, default=lambda self: self._context.get("note")
+    )
diff --git a/intrastat_product/wizards/intrastat_result_view.xml b/intrastat_product/wizards/intrastat_result_view.xml
new file mode 100644
index 000000000..7953f3e06
--- /dev/null
+++ b/intrastat_product/wizards/intrastat_result_view.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2011-2021 Akretion France (http://www.akretion.com/)
+  Copyright 2015-2021 Noviat (http://www.noviat.com/)
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="intrastat_result_view_form" model="ir.ui.view">
+        <field name="name">intrastat.result_view_form</field>
+        <field name="model">intrastat.result.view</field>
+        <field name="arch" type="xml">
+            <form string="Intrastat Result View">
+                <group name="main">
+                    <field name="note" nolabel="1" colspan="2" />
+                </group>
+                <footer>
+                    <button string="Ok" class="btn-primary" special="cancel" />
+                </footer>
+            </form>
+        </field>
+    </record>
+</odoo>
diff --git a/intrastat_product/wizards/res_config_settings.py b/intrastat_product/wizards/res_config_settings.py
new file mode 100644
index 000000000..f48d6a7aa
--- /dev/null
+++ b/intrastat_product/wizards/res_config_settings.py
@@ -0,0 +1,28 @@
+# Copyright 2017-2020 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
+# Copyright 2009-2020 Noviat (http://www.noviat.com)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class ResConfigSettings(models.TransientModel):
+    _inherit = "res.config.settings"
+
+    intrastat_arrivals = fields.Selection(
+        related="company_id.intrastat_arrivals", readonly=False
+    )
+    intrastat_dispatches = fields.Selection(
+        related="company_id.intrastat_dispatches", readonly=False
+    )
+    intrastat = fields.Char(related="company_id.intrastat")
+    intrastat_transport_id = fields.Many2one(
+        related="company_id.intrastat_transport_id", readonly=False
+    )
+    intrastat_region_id = fields.Many2one(
+        related="company_id.intrastat_region_id", readonly=False
+    )
+    intrastat_accessory_costs = fields.Boolean(
+        related="company_id.intrastat_accessory_costs", readonly=False
+    )
+    country_id = fields.Many2one(related="company_id.country_id")
+    # country_code is defined in the 'account' module
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 000000000..37b785ea4
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,2 @@
+# generated from manifests external_dependencies
+python-stdnum>=1.16
diff --git a/setup/intrastat_product/odoo/addons/intrastat_product b/setup/intrastat_product/odoo/addons/intrastat_product
new file mode 120000
index 000000000..fd3e62a9f
--- /dev/null
+++ b/setup/intrastat_product/odoo/addons/intrastat_product
@@ -0,0 +1,1 @@
+../../../../intrastat_product
\ No newline at end of file
diff --git a/setup/intrastat_product/setup.py b/setup/intrastat_product/setup.py
new file mode 100644
index 000000000..28c57bb64
--- /dev/null
+++ b/setup/intrastat_product/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+    setup_requires=['setuptools-odoo'],
+    odoo_addon=True,
+)


Test patch:
diff --git a/intrastat_product/tests/__init__.py b/intrastat_product/tests/__init__.py
new file mode 100644
index 000000000..a7ccefcbc
--- /dev/null
+++ b/intrastat_product/tests/__init__.py
@@ -0,0 +1,8 @@
+from . import common
+from . import common_purchase
+from . import common_sale
+from . import test_intrastat_product
+from . import test_brexit
+from . import test_company
+from . import test_purchase_order
+from . import test_sale_order
diff --git a/intrastat_product/tests/common.py b/intrastat_product/tests/common.py
new file mode 100644
index 000000000..ea2aacaa6
--- /dev/null
+++ b/intrastat_product/tests/common.py
@@ -0,0 +1,209 @@
+# Copyright 2021 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+import xlrd
+from werkzeug.urls import url_encode
+
+from odoo.addons.intrastat_base.tests.common import IntrastatCommon
+
+
+class IntrastatProductCommon(IntrastatCommon):
+    @classmethod
+    def _init_products(cls):
+        # Create category - don't init intrastat values, do it in tests
+        vals = {
+            "name": "Robots",
+            "parent_id": cls.category_saleable.id,
+        }
+        cls.categ_robots = cls.category_obj.create(vals)
+
+        vals = {
+            "name": "C3PO",
+            "type": "consu",
+            "categ_id": cls.categ_robots.id,
+            "origin_country_id": cls.env.ref("base.us").id,
+            "weight": 300,
+            # Computer - C3PO is one of them
+            "hs_code_id": cls.hs_code_computer.id,
+            "list_price": 42,
+        }
+        cls.product_c3po = cls.product_template_obj.create(vals)
+
+    @classmethod
+    def _init_company(cls):
+        # Default transport for company is Road
+        cls.demo_company.intrastat_transport_id = cls.transport_road
+
+    @classmethod
+    def _init_fiscal_position(cls):
+        vals = {
+            "name": "Intrastat Fiscal Position",
+            "intrastat": "b2b",
+            "vat_required": True,
+        }
+        cls.position = cls.position_obj.create(vals)
+
+    @classmethod
+    def _init_regions(cls):
+        # Create Region
+        cls._create_region()
+
+        vals = {
+            "code": "DE",
+            "name": "Germany",
+            "country_id": cls.env.ref("base.de").id,
+            "description": "Germany",
+        }
+        cls._create_region(vals)
+
+    @classmethod
+    def _init_transaction(cls):
+        vals = {
+            "code": "9X",
+            "company_id": cls.env.company.id,
+            "description": "Test 9X",
+        }
+        cls._create_transaction(vals)
+
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.region_obj = cls.env["intrastat.region"]
+        cls.transaction_obj = cls.env["intrastat.transaction"]
+        cls.transport_mode_obj = cls.env["intrastat.transport_mode"]
+        cls.partner_obj = cls.env["res.partner"]
+        cls.category_saleable = cls.env.ref("product.product_category_1")
+        cls.category_obj = cls.env["product.category"]
+        cls.product_template_obj = cls.env["product.template"]
+        cls.declaration_obj = cls.env["intrastat.product.declaration"]
+        cls.position_obj = cls.env["account.fiscal.position"]
+        cls.hs_code_computer = cls.env.ref("product_harmonized_system.84715000")
+        cls.report_obj = cls.env["ir.actions.report"]
+        cls.xls_declaration = cls.env[
+            "report.intrastat_product.product_declaration_xls"
+        ]
+
+        cls.transport_rail = cls.env.ref("intrastat_product.intrastat_transport_2")
+        cls.transport_road = cls.env.ref("intrastat_product.intrastat_transport_3")
+
+        cls._init_regions()
+        cls._init_company()
+        cls._init_fiscal_position()
+        cls._init_products()
+        cls._init_transaction()
+
+    @classmethod
+    def _create_xls(cls, declaration=False):
+        """
+            Prepare the Excel report to be tested
+
+        :return: The Excel file
+        :rtype: bytes
+        """
+        report = cls.env.ref(
+            "intrastat_product.intrastat_product_xlsx_report"
+        ).with_context(active_ids=cls.declaration.ids)
+        report_name = report.report_name
+        cls.report = cls.report_obj._get_report_from_name(report_name)
+        datas = {
+            "context": {
+                "active_ids": [cls.declaration.id],
+            }
+        }
+        data = {}
+        encoded_data = "report/report_xlsx/" + report_name + "?" + url_encode(data)
+        datas["data"] = encoded_data
+        active_model = cls.declaration._name
+        if not declaration:
+            computation_lines = True
+        else:
+            computation_lines = False
+        file_data = cls.xls_declaration.with_context(
+            computation_lines=computation_lines, active_model=active_model
+        ).create_xlsx_report(None, datas)
+        return file_data
+
+    def check_xls(self, xls):
+        """
+            Check that the xls content correspond to computation/declaration
+            lines values
+
+        :param xls: the Excel file content
+        :type xls: bytes
+        :param declaration: By default, check computation lines, either declaration ones
+        :type declaration: bool, optional
+        """
+        book = xlrd.open_workbook(file_contents=xls)
+        # Get the template used to build the Excel file lines
+        template = self.xls_declaration._get_template(self.declaration)
+        # Get the declaration lines or the computation ones
+        to_test = [
+            (
+                book.sheet_by_index(0),
+                self.declaration.computation_line_ids,
+                self.declaration._xls_computation_line_fields(),
+            ),
+            (
+                book.sheet_by_index(1),
+                self.declaration.declaration_line_ids,
+                self.declaration._xls_declaration_line_fields(),
+            ),
+        ]
+        # Iterate on each row beginning on third one (two headers)
+        for (sheet, lines, line_fields) in to_test:
+            i = 0
+            for rx in range(3, sheet.nrows):
+                line = lines[i]
+                row = sheet.row(rx)
+                j = 0
+                dict_compare = dict()
+                for line_field in line_fields:
+                    column_spec = template.get(line_field)
+                    dict_compare.update(
+                        {row[j].value: column_spec.get("line").get("value")}
+                    )
+                    j += 1
+                for key, value in dict_compare.items():
+                    value_eval = self.xls_declaration._eval(value, {"line": line})
+                    self.assertEqual(key, value_eval)
+                i += 1
+
+    @classmethod
+    def _create_region(cls, vals=None):
+        values = {
+            "code": "2",
+            "country_id": cls.env.ref("base.be").id,
+            "company_id": cls.env.company.id,
+            "description": "Belgium Walloon Region",
+            "name": "Walloon Region",
+        }
+        if vals is not None:
+            values.update(vals)
+        cls.region = cls.region_obj.create(values)
+
+    @classmethod
+    def _create_transaction(cls, vals=None):
+        values = {
+            "code": "11",
+            "company_id": cls.env.company.id,
+            "description": "Sale / Purchase",
+        }
+        if vals is not None:
+            values.update(vals)
+        cls.transaction = cls.transaction_obj.create(values)
+
+    @classmethod
+    def _create_transport_mode(cls, vals=None):
+        values = {}
+        if vals is not None:
+            values.update(vals)
+        cls.transport_mode = cls.transport_mode_obj.create(values)
+
+    @classmethod
+    def _create_declaration(cls, vals=None):
+        values = {
+            "company_id": cls.env.company.id,
+            "declaration_type": "dispatches",
+        }
+        if vals is not None:
+            values.update(vals)
+        cls.declaration = cls.declaration_obj.create(values)
diff --git a/intrastat_product/tests/common_purchase.py b/intrastat_product/tests/common_purchase.py
new file mode 100644
index 000000000..2133e949b
--- /dev/null
+++ b/intrastat_product/tests/common_purchase.py
@@ -0,0 +1,81 @@
+# Copyright 2021 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.tests import Form
+
+from .common import IntrastatProductCommon
+
+
+class IntrastatPurchaseCommon(IntrastatProductCommon):
+    """
+    We define common flow:
+        - Supplier in Germany
+    """
+
+    def _get_expected_vals(self, line):
+        return {
+            "declaration_type": "arrivals",
+            "suppl_unit_qty": line.qty_received,
+            "hs_code_id": line.product_id.hs_code_id,
+            "product_origin_country_code": line.product_id.origin_country_id.code,
+            "amount_company_currency": line.price_subtotal,
+            "src_dest_country_code": line.partner_id.country_id.code,
+        }
+
+    def _check_line_values(self, final=False, declaration=None, purchase=None):
+        """
+        This method allows to test computation lines and declaration
+        lines values from original sale order line
+        """
+        if declaration is None:
+            declaration = self.declaration
+        if purchase is None:
+            purchase = self.purchase
+        for line in purchase.order_line:
+            expected_vals = self._get_expected_vals(line)
+            comp_line = declaration.computation_line_ids.filtered(
+                lambda cline: cline.product_id == line.product_id
+            )
+            self.assertTrue(
+                all(comp_line[key] == val for key, val in expected_vals.items())
+            )
+            if final:
+                decl_line = declaration.declaration_line_ids.filtered(
+                    lambda dline: comp_line in dline.computation_line_ids
+                )
+                self.assertTrue(
+                    all(decl_line[key] == val for key, val in expected_vals.items())
+                )
+
+    @classmethod
+    def _init_supplier(cls, vals=None):
+        values = {
+            "name": "DE Supplier",
+            "country_id": cls.env.ref("base.de").id,
+            "property_account_position_id": cls.position.id,
+        }
+        if vals is not None:
+            values.update(vals)
+        cls.supplier = cls.partner_obj.create(values)
+
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.purchase_obj = cls.env["purchase.order"]
+        cls.move_obj = cls.env["account.move"]
+        cls._init_supplier()
+
+    @classmethod
+    def _create_purchase_order(cls, vals=None):
+        vals = {
+            "partner_id": cls.supplier.id,
+        }
+        purchase_new = cls.purchase_obj.new(vals)
+        purchase_new.onchange_partner_id()
+        purchase_vals = purchase_new._convert_to_write(purchase_new._cache)
+        cls.purchase = cls.purchase_obj.create(purchase_vals)
+        with Form(cls.purchase) as purchase_form:
+            with purchase_form.order_line.new() as line:
+                line.product_id = cls.product_c3po.product_variant_ids[0]
+                line.product_qty = 3.0
+                # Price should not be void - if no purchase pricelist
+                line.price_unit = 150.0
diff --git a/intrastat_product/tests/common_sale.py b/intrastat_product/tests/common_sale.py
new file mode 100644
index 000000000..a12c36829
--- /dev/null
+++ b/intrastat_product/tests/common_sale.py
@@ -0,0 +1,76 @@
+# Copyright 2021 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.tests import Form
+
+from .common import IntrastatProductCommon
+
+
+class IntrastatSaleCommon(IntrastatProductCommon):
+    """
+    We define common flow:
+        - Customer in Netherlands
+    """
+
+    def _get_expected_vals(self, line):
+        return {
+            "declaration_type": "dispatches",
+            "suppl_unit_qty": line.qty_delivered,
+            "hs_code_id": line.product_id.hs_code_id,
+            "product_origin_country_code": line.product_id.origin_country_id.code,
+        }
+
+    def _check_line_values(self, final=False, declaration=None, sale=None):
+        """
+        This method allows to test computation lines and declaration
+        lines values from original sale order line
+        """
+        if declaration is None:
+            declaration = self.declaration
+        if sale is None:
+            sale = self.sale
+        for line in sale.order_line:
+            expected_vals = self._get_expected_vals(line)
+            comp_line = declaration.computation_line_ids.filtered(
+                lambda cline: cline.product_id == line.product_id
+            )
+            self.assertTrue(
+                all(comp_line[key] == val for key, val in expected_vals.items())
+            )
+            if final:
+                decl_line = declaration.declaration_line_ids.filtered(
+                    lambda dline: comp_line in dline.computation_line_ids
+                )
+                self.assertTrue(
+                    all(decl_line[key] == val for key, val in expected_vals.items())
+                )
+
+    @classmethod
+    def _init_customer(cls, vals=None):
+        values = {
+            "name": "Akretion France",
+            "country_id": cls.env.ref("base.fr").id,
+            "property_account_position_id": cls.position.id,
+            "vat": "FR86792377731",
+        }
+        if vals is not None:
+            values.update(vals)
+        cls.customer = cls.partner_obj.create(values)
+
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.sale_obj = cls.env["sale.order"]
+        cls._init_customer()
+
+    @classmethod
+    def _create_sale_order(cls, vals=None):
+        vals = {
+            "partner_id": cls.customer.id,
+        }
+        sale_new = cls.sale_obj.new(vals)
+        sale_vals = sale_new._convert_to_write(sale_new._cache)
+        cls.sale = cls.sale_obj.create(sale_vals)
+        with Form(cls.sale) as sale_form:
+            with sale_form.order_line.new() as line:
+                line.product_id = cls.product_c3po.product_variant_ids[0]
+                line.product_uom_qty = 3.0
diff --git a/intrastat_product/tests/test_brexit.py b/intrastat_product/tests/test_brexit.py
new file mode 100644
index 000000000..e38220365
--- /dev/null
+++ b/intrastat_product/tests/test_brexit.py
@@ -0,0 +1,108 @@
+# Copyright 2022 Noviat.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.tests import Form, TransactionCase
+
+from .common import IntrastatProductCommon
+
+
+class TestIntrastatBrexit(IntrastatProductCommon, TransactionCase):
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.inv_obj = cls.env["account.move"]
+        cls.hs_code_whiskey = cls.env["hs.code"].create(
+            {
+                "description": "Whiskey",
+                "local_code": "22083000",
+            }
+        )
+        cls.product_uk = cls.env["product.product"].create(
+            {
+                "name": "Bushmills Original",
+                "weight": 1.4,
+                "list_price": 30.0,
+                "standard_price": 15.0,
+                "origin_country_id": cls.env.ref("base.uk").id,
+                "hs_code_id": cls.hs_code_whiskey.id,
+            }
+        )
+        cls.partner_xi = cls.env["res.partner"].create(
+            {
+                "name": "Bushmills Distillery",
+                "country_id": cls.env.ref("base.uk").id,
+                "state_id": cls.env.ref("base.state_uk18").id,
+                "vat": "XI123456782",
+                "property_account_position_id": cls.position.id,
+            }
+        )
+
+    def test_brexit_sale(self):
+        inv_out_xi = self.inv_obj.with_context(default_move_type="out_invoice").create(
+            {
+                "partner_id": self.partner_xi.id,
+                "fiscal_position_id": self.position.id,
+            }
+        )
+        with Form(inv_out_xi) as inv_form:
+            with inv_form.invoice_line_ids.new() as ail:
+                ail.product_id = self.product_c3po.product_variant_ids[0]
+        inv_out_xi.action_post()
+
+        self._create_declaration(
+            {
+                "declaration_type": "dispatches",
+                "year": str(inv_out_xi.date.year),
+                "month": str(inv_out_xi.date.month).zfill(2),
+            }
+        )
+        self.declaration.action_gather()
+        self.declaration.done()
+        cline = self.declaration.computation_line_ids
+        dline = self.declaration.declaration_line_ids
+        self.assertEqual(cline.src_dest_country_code, "XI")
+        self.assertEqual(dline.src_dest_country_code, "XI")
+
+    def test_brexit_purchase(self):
+        inv_in_xi = self.inv_obj.with_context(default_move_type="in_invoice").create(
+            {
+                "partner_id": self.partner_xi.id,
+                "fiscal_position_id": self.position.id,
+            }
+        )
+        with Form(inv_in_xi) as inv_form:
+            with inv_form.invoice_line_ids.new() as ail:
+                ail.product_id = self.product_uk
+        inv_in_xi.invoice_date = inv_in_xi.date
+        inv_in_xi.action_post()
+
+        self._create_declaration(
+            {
+                "declaration_type": "arrivals",
+                "year": str(inv_in_xi.date.year),
+                "month": str(inv_in_xi.date.month).zfill(2),
+            }
+        )
+        self.declaration.action_gather()
+        self.declaration.done()
+        clines = self.declaration.computation_line_ids
+        cl_uk = clines.filtered(lambda r: r.product_id == self.product_uk)
+        dlines = self.declaration.declaration_line_ids
+        dl_uk = dlines.filtered(lambda r: r.computation_line_ids == cl_uk)
+        self.assertEqual(cl_uk.product_origin_country_code, "XU")
+        self.assertEqual(dl_uk.product_origin_country_code, "XU")
+
+    def test_brexit_invoice_intrastat_details(self):
+        inv_in_xi = self.inv_obj.with_context(default_move_type="in_invoice").create(
+            {
+                "partner_id": self.partner_xi.id,
+                "fiscal_position_id": self.position.id,
+            }
+        )
+        with Form(inv_in_xi) as inv_form:
+            with inv_form.invoice_line_ids.new() as ail:
+                ail.product_id = self.product_uk
+        inv_in_xi.invoice_date = inv_in_xi.date
+        inv_in_xi.compute_intrastat_lines()
+        ilines = inv_in_xi.intrastat_line_ids
+        self.assertEqual(ilines.product_origin_country_id, self.env.ref("base.uk"))
diff --git a/intrastat_product/tests/test_company.py b/intrastat_product/tests/test_company.py
new file mode 100644
index 000000000..0b7a4ef7d
--- /dev/null
+++ b/intrastat_product/tests/test_company.py
@@ -0,0 +1,40 @@
+# Copyright 2021 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.tests.common import TransactionCase
+
+from .common import IntrastatProductCommon
+
+
+class TestIntrastatCompany(IntrastatProductCommon):
+    """Tests for this module"""
+
+    def test_company_values(self):
+        # Exempt for arrivals and dispatches => exempt
+        self.demo_company.update(
+            {
+                "intrastat_arrivals": "exempt",
+                "intrastat_dispatches": "exempt",
+            }
+        )
+        self.assertEqual("exempt", self.demo_company.intrastat)
+
+        # Extended for arrivals or dispatches => extended
+        self.demo_company.update(
+            {
+                "intrastat_arrivals": "extended",
+            }
+        )
+        self.assertEqual("extended", self.demo_company.intrastat)
+
+        # standard for arrivals or dispatches => standard
+        self.demo_company.update(
+            {
+                "intrastat_arrivals": "exempt",
+                "intrastat_dispatches": "standard",
+            }
+        )
+        self.assertEqual("standard", self.demo_company.intrastat)
+
+
+class TestIntrastatProductCase(TestIntrastatCompany, TransactionCase):
+    """Test Intrastat Product"""
diff --git a/intrastat_product/tests/test_intrastat_product.py b/intrastat_product/tests/test_intrastat_product.py
new file mode 100644
index 000000000..0d47cccbe
--- /dev/null
+++ b/intrastat_product/tests/test_intrastat_product.py
@@ -0,0 +1,153 @@
+# Copyright 2021 ACSONE SA/NV
+# Copyright 2022 Tecnativa - Víctor Martínez
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from psycopg2 import IntegrityError
+
+from odoo.exceptions import UserError, ValidationError
+from odoo.tests import Form
+from odoo.tests.common import TransactionCase
+from odoo.tools import mute_logger
+
+from .common import IntrastatProductCommon
+
+
+class TestIntrastatProduct(IntrastatProductCommon):
+    """Tests for this module"""
+
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.product = cls.env["product.product"].create(
+            {
+                "name": "Test product",
+                "hs_code_id": cls.env.ref("product_harmonized_system.84715000").id,
+                "origin_country_id": cls.env.ref("base.de").id,
+                "weight": 1.25,
+            }
+        )
+        cls.partner = cls.partner_obj.create(
+            {
+                "name": "Test partner",
+                "country_id": cls.env.ref("base.fr").id,
+                "invoice_intrastat_detail": True,
+            }
+        )
+        cls.env["account.journal"].create(
+            {"name": "Test sale journal", "type": "sale", "code": "TEST-sale"}
+        )
+        cls.report_obj = cls.env["ir.actions.report"]
+        cls.sale_order = cls._create_sale_order(cls)
+        cls.sale_order.action_confirm()
+        cls.sale_order.order_line.qty_delivered = 1
+        cls.invoice = cls.sale_order._create_invoices()
+
+    # Test duplicates
+    @mute_logger("odoo.sql_db")
+    def test_region(self):
+        with self.assertRaises(IntegrityError):
+            self._create_region()
+
+    @mute_logger("odoo.sql_db")
+    def test_transaction(self):
+        self._create_transaction()
+        with self.assertRaises(IntegrityError):
+            self._create_transaction()
+
+    @mute_logger("odoo.sql_db")
+    def test_transport_mode(self):
+        vals = {"code": 1, "name": "Sea"}
+        with self.assertRaises(IntegrityError):
+            self._create_transport_mode(vals)
+
+    def test_copy(self):
+        """
+        When copying declaration, the new one has an incremented revision
+        value.
+        """
+        vals = {"declaration_type": "dispatches"}
+        self._create_declaration(vals)
+        decl_copy = self.declaration.copy()
+        self.assertEqual(self.declaration.revision + 1, decl_copy.revision)
+
+    def test_declaration_manual_lines(self):
+        vals = {"declaration_type": "dispatches", "reporting_level": "extended"}
+        self._create_declaration(vals)
+        computation_line_form = Form(
+            self.env["intrastat.product.computation.line"].with_context(
+                default_parent_id=self.declaration.id
+            )
+        )
+        computation_line_form.src_dest_country_id = self.env.ref("base.fr")
+        computation_line_form.transaction_id = self.transaction
+        computation_line_form.hs_code_id = self.hs_code_computer
+        computation_line_form.region_code = "ZZ"
+        computation_line_form.product_origin_country_code = "BE"
+        computation_line_form.transport_id = self.env.ref(
+            "intrastat_product.intrastat_transport_3"
+        )
+        computation_line = computation_line_form.save()
+        self.assertEqual(computation_line.src_dest_country_code, "FR")
+        declaration_line_form = Form(
+            self.env["intrastat.product.declaration.line"].with_context(
+                default_parent_id=self.declaration.id
+            )
+        )
+        declaration_line_form.src_dest_country_code = "FR"
+        declaration_line = declaration_line_form.save()
+        self.assertEqual(declaration_line.src_dest_country_code, "FR")
+
+    def test_declaration_no_country(self):
+        self.demo_company.country_id = False
+        with self.assertRaises(ValidationError):
+            self._create_declaration()
+            self.declaration.flush()
+
+    def test_declaration_no_vat(self):
+        self.demo_company.partner_id.vat = False
+        with self.assertRaises(UserError):
+            self._create_declaration()
+            self.declaration._check_generate_xml()
+
+    def test_declaration_state(self):
+        self._create_declaration()
+        self.declaration.unlink()
+
+        self._create_declaration()
+        self.declaration.state = "done"
+        with self.assertRaises(UserError):
+            self.declaration.unlink()
+
+    def _create_sale_order(self):
+        order_form = Form(self.env["sale.order"])
+        order_form.partner_id = self.partner
+        with order_form.order_line.new() as line_form:
+            line_form.product_id = self.product
+        with order_form.order_line.new() as line_form:
+            line_form.product_id = self.product
+        return order_form.save()
+
+    def _test_invoice_report(self, weight):
+        """We need to check weight because if intrastat_line_ids already exist
+        the weight will be different because weight field in model is integer."""
+        res = self.report_obj._render(
+            "account.report_invoice_with_payments", self.invoice.ids
+        )
+        self.assertRegex(str(res[0]), self.product.hs_code_id.hs_code)
+        self.assertRegex(str(res[0]), self.product.origin_country_id.name)
+        res = list(self.invoice._get_intrastat_lines_info())
+        self.assertEqual(len(res), 1)
+        self.assertEqual(res[0]["product_id"], self.product)
+        self.assertEqual(res[0]["hs_code_id"], self.product.hs_code_id)
+        self.assertEqual(res[0]["origin_country_id"], self.product.origin_country_id)
+        self.assertEqual(res[0]["weight"], weight)
+
+    def test_invoice_report_without_intrastat_lines(self):
+        self._test_invoice_report(2.5)
+
+    def test_invoice_report_with_intrastat_lines(self):
+        self.invoice.compute_intrastat_lines()
+        self._test_invoice_report(2)
+
+
+class TestIntrastatProductCase(TestIntrastatProduct, TransactionCase):
+    """Test Intrastat Product"""
diff --git a/intrastat_product/tests/test_purchase_order.py b/intrastat_product/tests/test_purchase_order.py
new file mode 100644
index 000000000..3d0dc9a50
--- /dev/null
+++ b/intrastat_product/tests/test_purchase_order.py
@@ -0,0 +1,57 @@
+# Copyright 2021 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from freezegun import freeze_time
+
+from odoo import fields
+from odoo.tests.common import TransactionCase
+
+from .common_purchase import IntrastatPurchaseCommon
+
+
+class TestIntrastatProductPurchase(IntrastatPurchaseCommon):
+    """Tests for this module"""
+
+    def test_purchase_to_invoice_default(self):
+        date_order = "2021-09-01"
+        declaration_date = "2021-10-01"
+        with freeze_time(date_order):
+            self._create_purchase_order()
+        self.purchase.button_confirm()
+        self.purchase.picking_ids.action_assign()
+        for line in self.purchase.picking_ids.move_line_ids:
+            line.qty_done = line.reserved_uom_qty
+        self.purchase.picking_ids._action_done()
+        self.assertEqual("done", self.purchase.picking_ids.state)
+
+        with freeze_time(date_order):
+            action = self.purchase.action_create_invoice()
+        invoice_id = action["res_id"]
+        invoice = self.move_obj.browse(invoice_id)
+
+        invoice.invoice_date = fields.Date.from_string(date_order)
+        invoice.action_post()
+
+        # Check if transport mode has been transmitted to invoice
+        # It should be None as not defined on sale order
+        self.assertFalse(
+            invoice.intrastat_transport_id,
+        )
+
+        vals = {
+            "declaration_type": "arrivals",
+        }
+        with freeze_time(declaration_date):
+            self._create_declaration(vals)
+        self.declaration.action_gather()
+
+        self._check_line_values()
+        self.declaration.done()
+        self._check_line_values(final=True)
+
+        # Check the Excel file
+        file_data = self._create_xls()
+        self.check_xls(file_data[0])
+
+
+class TestIntrastatProductPurchaseCase(TestIntrastatProductPurchase, TransactionCase):
+    """Test Intrastat Purchase"""
diff --git a/intrastat_product/tests/test_sale_order.py b/intrastat_product/tests/test_sale_order.py
new file mode 100644
index 000000000..d51e7c5de
--- /dev/null
+++ b/intrastat_product/tests/test_sale_order.py
@@ -0,0 +1,92 @@
+# Copyright 2021 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from freezegun import freeze_time
+
+from odoo.tests.common import TransactionCase
+
+from .common_sale import IntrastatSaleCommon
+
+
+class TestIntrastatProductSale(IntrastatSaleCommon):
+    """Tests for this module"""
+
+    def test_sale_to_invoice_default(self):
+        self._create_sale_order()
+        self.sale.action_confirm()
+        self.sale.picking_ids.action_assign()
+        for line in self.sale.picking_ids.move_line_ids:
+            line.qty_done = line.reserved_uom_qty
+        self.sale.picking_ids._action_done()
+        self.assertEqual("done", self.sale.picking_ids.state)
+
+        invoice = self.sale._create_invoices()
+        invoice.action_post()
+
+        # Check if transport mode has been transmitted to invoice
+        # It should be None as not defined on sale order
+        self.assertFalse(
+            invoice.intrastat_transport_id,
+        )
+
+    # Test specific transport set on sale to invoice
+    def test_sale_to_invoice(self):
+        self._create_sale_order()
+        # Set intrastat transport mode to rail
+        self.sale.intrastat_transport_id = self.transport_rail
+        self.sale.action_confirm()
+        self.sale.picking_ids.action_assign()
+        for line in self.sale.picking_ids.move_line_ids:
+            line.qty_done = line.reserved_uom_qty
+        self.sale.picking_ids._action_done()
+        self.assertEqual("done", self.sale.picking_ids.state)
+
+        invoice = self.sale._create_invoices()
+        invoice.action_post()
+
+        # Check if transport mode has been transmitted to invoice
+        self.assertEqual(
+            self.transport_rail,
+            invoice.intrastat_transport_id,
+        )
+
+    def test_sale_declaration(self):
+        date_order = "2021-09-01"
+        declaration_date = "2021-10-01"
+        with freeze_time(date_order):
+            self._create_sale_order()
+        # Set intrastat transport mode to rail
+        self.sale.intrastat_transport_id = self.transport_rail
+        self.sale.action_confirm()
+        self.sale.picking_ids.action_assign()
+        for line in self.sale.picking_ids.move_line_ids:
+            line.qty_done = line.reserved_uom_qty
+        self.sale.picking_ids._action_done()
+        self.assertEqual("done", self.sale.picking_ids.state)
+
+        with freeze_time(date_order):
+            invoice = self.sale._create_invoices()
+            invoice.action_post()
+
+        # Check if transport mode has been transmitted to invoice
+        self.assertEqual(
+            self.transport_rail,
+            invoice.intrastat_transport_id,
+        )
+        vals = {
+            "declaration_type": "dispatches",
+        }
+        with freeze_time(declaration_date):
+            self._create_declaration(vals)
+        self.declaration.action_gather()
+
+        self._check_line_values()
+        self.declaration.done()
+        self._check_line_values(final=True)
+
+        # Check the Excel file
+        file_data = self._create_xls()
+        self.check_xls(file_data[0])
+
+
+class TestIntrastatProductSaleCase(TestIntrastatProductSale, TransactionCase):
+    """Test Intrastat Sale"""