diff --git a/intrastat_product/README.rst b/intrastat_product/README.rst new file mode 100644 index 0000000..28a2020 --- /dev/null +++ b/intrastat_product/README.rst @@ -0,0 +1,156 @@ +================= +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. + +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 `_. +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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* brain-tec AG +* Akretion +* Noviat + +Contributors +~~~~~~~~~~~~ + +* Alexis de Lattre, Akretion +* Luc De Meyer, Noviat +* Tecnativa : + + * João Marques + +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 `_ 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 0000000..bf588bc --- /dev/null +++ b/intrastat_product/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import report diff --git a/intrastat_product/__manifest__.py b/intrastat_product/__manifest__.py new file mode 100644 index 0000000..4c7c415 --- /dev/null +++ b/intrastat_product/__manifest__.py @@ -0,0 +1,43 @@ +# 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 +# @author Luc de Meyer +# @author Kumar Aberer + +{ + "name": "Intrastat Product", + "version": "14.0.1.0.0", + "category": "Intrastat", + "license": "AGPL-3", + "summary": "Base module for Intrastat Product", + "author": "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", + "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/account_move.xml", + "views/sale_order.xml", + "views/stock_warehouse.xml", + "data/intrastat_transport_mode.xml", + "data/intrastat_unit.xml", + ], + "demo": ["demo/intrastat_demo.xml"], + "installable": True, +} diff --git a/intrastat_product/data/intrastat_transport_mode.xml b/intrastat_product/data/intrastat_transport_mode.xml new file mode 100644 index 0000000..002a1f1 --- /dev/null +++ b/intrastat_product/data/intrastat_transport_mode.xml @@ -0,0 +1,55 @@ + + + + 1 + Sea + Sea Transport (including wagons, motor vehicles, trailers, semi-trailers and lighters on board of a ship) + + + 2 + Rail + Railway transport (including lorries on railway wagons) + + + 3 + Road + Road Transport + + + 4 + Air + Air Transport + + + 5 + Post + Postal consignments + + + 7 + Fixed installations + Fixed transport installations (e.g. pipelines, high-tension cables) + + + 8 + Inland waterway + Inland waterway transport + + + 9 + Own propulsion + Own propulsion (imported or exported means of transport crossing the border under their own power, e.g. aircraft, lorries, boats, etc.) + + + + + + diff --git a/intrastat_product/data/intrastat_unit.xml b/intrastat_product/data/intrastat_unit.xml new file mode 100644 index 0000000..bf67d39 --- /dev/null +++ b/intrastat_product/data/intrastat_unit.xml @@ -0,0 +1,122 @@ + + + + + c/k + Carats - 1 metric carat = 2 × 10exp(–4) kg + + + ce/el + Number of cells + + + ct/l + Carrying capacity in tonnes + + + g + Gram + + + + gi F/S + Gram of fissile isotopes + + + kg H2O2 + Kilogram of hydrogen peroxide + + + kg K2O + Kilogram of potassium oxide + + + kg KOH + Kilogram of potassium hydroxide (caustic potash) + + + kg met.am. + Kilogram of methylamines + + + kg N + Kilogram of nitrogen + + + kg NaOH + Kilogram of sodium hydroxide (caustic soda) + + + kg/net eda + Kilogram drained net weight + + + kg P2O5 + Kilogram of diphosphorus pentaoxide + + + kg 90 pct sdt + Kilogram of substance 90 % dry + + + kg U + Kilogram of uranium + + + 1000 kWh + Thousand kilowatt hours + + + l + Litre + + + + 1000 l + Thousand litres + + + l alc. 100 pct + Litre pure (100 %) alcohol + + + m + Metre + + + + m2 + Square metre + + + m3 + Cubic metre + + + 1000 m3 + Thousand cubic metres + + + pa + Number of pairs + + + items + Number of items + + + + 100 items + Hundred items + + + 1000 items + Thousand items + + + TJ + Terajoule (gross calorific value) + + diff --git a/intrastat_product/demo/intrastat_demo.xml b/intrastat_product/demo/intrastat_demo.xml new file mode 100644 index 0000000..f37df19 --- /dev/null +++ b/intrastat_product/demo/intrastat_demo.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + extended + extended + + + + diff --git a/intrastat_product/i18n/fr.po b/intrastat_product/i18n/fr.po new file mode 100644 index 0000000..6ffae12 --- /dev/null +++ b/intrastat_product/i18n/fr.po @@ -0,0 +1,1590 @@ +# 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: 2018-12-29 10:27+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: \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 "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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +#, fuzzy +msgid "Intrastat Product Declaration " +msgstr "DEBs" + +#. 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 +#, fuzzy +msgid "Action Needed" +msgstr "Action" + +#. module: intrastat_product +#: 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 +#, fuzzy +msgid "Activities" +msgstr "Actif" + +#. 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 +#, fuzzy +msgid "Activity State" +msgstr "Actif" + +#. 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 "" + +#. 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 "" + +#. 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_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 "Introductions" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__message_attachment_count +#, fuzzy +msgid "Attachment Count" +msgstr "Pays pour la DEB" + +#. 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 +#: 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_res_config_settings__country_code +#, fuzzy +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 "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "res.config.settings" + +#. 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_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_intrastat_product_computation_line__product_origin_country_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__product_origin_country_id +msgid "Country of Origin of the Product" +msgstr "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 "" + +#. 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_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_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: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_move__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_intrastat_line__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_transaction__display_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode__display_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__display_name +#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls__display_name +msgid "Display Name" +msgstr "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 "" + +#. 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 "" + +#. 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 +#: 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 +#, fuzzy, python-format +msgid "Go to Accounting Configuration Settings screen" +msgstr "Aller à la page de configuration" + +#. 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:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__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_transaction__id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode__id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__id +#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls__id +msgid "ID" +msgstr "ID" + +#. 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 "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 "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/hs_code.py:0 +#, python-format +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." + +#. module: intrastat_product +#: code:addons/intrastat_product/models/hs_code.py:0 +#, python-format +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'." + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_country +msgid "Intrastat Country" +msgstr "Pays pour la DEB" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_move__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 +#, fuzzy +msgid "Intrastat Product Computataion Lines" +msgstr "Lignes de calcul 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: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_move__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 +#: model:ir.model,name:intrastat_product.model_intrastat_transport_mode +#: model:ir.model.fields,field_description:intrastat_product.field_account_move__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_move__intrastat_line_ids +msgid "Intrastat declaration details" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_account_move__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 "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0 +#, python-format +msgid "Invalid Year !" +msgstr "Année invalide !" + +#. 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 "" + +#. 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 "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 Entries" +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 "Kg" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line____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_transaction____last_update +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode____last_update +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit____last_update +#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls____last_update +msgid "Last Modified on" +msgstr "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_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_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 "" + +#. 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 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 "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_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 "" + +#. 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 "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_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 +#, fuzzy +msgid "Number of Actions" +msgstr "Nombre de lignes de déclaration" + +#. 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 +#, fuzzy +msgid "Number of errors" +msgstr "Nombre de lignes de déclaration" + +#. 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.view_move_form +msgid "Origin Region" +msgstr "Région d'origine" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_account_move__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_move__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_move__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 +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__year_month +msgid "Period" +msgstr "Période" + +#. 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 +#, 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 +#: 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 "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: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 "" + +#. 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 "" + +#. 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 "" + +#. 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_product_computation_line__type +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__type +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line__type +msgid "Select the declaration type." +msgstr "Sélectionnez le type de déclaration." + +#. 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 "" + +#. 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 +#: model:ir.model.fields,help:intrastat_product.field_res_config_settings__country_code +msgid "" +"The ISO country code in two chars. \n" +"You can use this field for quick search." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py: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 +#: 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__type +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__type +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__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: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__company_country_code +msgid "Used in views and methods of localization modules." +msgstr "Used in views and methods of localization modules." + +#. 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 +#: 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 +#, 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 Export" +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 "" +#~ "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" + +#, fuzzy +#~| msgid "Company Country Code" +#~ msgid "Country Code" +#~ msgstr "Code pays de la société" + +#~ 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 0000000..3827354 --- /dev/null +++ b/intrastat_product/i18n/intrastat_product.pot @@ -0,0 +1,1480 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * intrastat_product +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.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_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form +msgid "Intrastat Product Declaration " +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_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: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_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 +#: 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_res_config_settings__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 +#: 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_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_intrastat_product_computation_line__product_origin_country_id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__product_origin_country_id +msgid "Country of Origin of the Product" +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/report/intrastat_product_report_xls.py: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_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_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: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_move__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_intrastat_line__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_transaction__display_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode__display_name +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__display_name +#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls__display_name +msgid "Display Name" +msgstr "" + +#. module: intrastat_product +#: 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 +#: 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:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__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_transaction__id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode__id +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__id +#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls__id +msgid "ID" +msgstr "" + +#. module: intrastat_product +#: model:ir.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 +#: code:addons/intrastat_product/models/hs_code.py:0 +#, python-format +msgid "" +"Intrastat Codes should contain 8 digits. This is not the case for Intrastat " +"Code '%s' which has %d digits." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/hs_code.py:0 +#, python-format +msgid "" +"Intrastat Codes should only contain digits. This is not the case for code " +"'%s'." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_country +msgid "Intrastat Country" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_move__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: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_move__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 +#: model:ir.model,name:intrastat_product.model_intrastat_transport_mode +#: model:ir.model.fields,field_description:intrastat_product.field_account_move__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_move__intrastat_line_ids +msgid "Intrastat declaration details" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_account_move__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 Entries" +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_intrastat_line____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_transaction____last_update +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode____last_update +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit____last_update +#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls____last_update +msgid "Last Modified on" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_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_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_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 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_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_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.view_move_form +msgid "Origin Region" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_account_move__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_move__src_dest_country_id +msgid "Origin/Destination Country" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_move__src_dest_region_id +msgid "Origin/Destination Region" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_9 +msgid "Own propulsion" +msgstr "" + +#. module: intrastat_product +#: model:intrastat.transport_mode,description:intrastat_product.intrastat_transport_9 +msgid "" +"Own propulsion (imported or exported means of transport crossing the border " +"under their own power, e.g. aircraft, lorries, boats, etc.)" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__year_month +msgid "Period" +msgstr "" + +#. module: intrastat_product +#: 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 +#, 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 +#: 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: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_product_computation_line__type +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__type +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration_line__type +msgid "Select the declaration type." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_unit__uom_id +msgid "" +"Select the regular Unit of Measure of Odoo that corresponds to this " +"Intrastat Supplementary Unit." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__sequence +msgid "Sequence" +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 +#: model:ir.model.fields,help:intrastat_product.field_res_config_settings__country_code +msgid "" +"The ISO country code in two chars. \n" +"You can use this field for quick search." +msgstr "" + +#. module: intrastat_product +#: code:addons/intrastat_product/models/intrastat_product_declaration.py: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 +#: model:ir.actions.act_window,name:intrastat_product.intrastat_transport_action +#: model:ir.ui.menu,name:intrastat_product.intrastat_transport_menu +msgid "Transport Modes" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__type +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__type +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__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: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__company_country_code +msgid "Used in views and methods of localization modules." +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__revision +msgid "Used to keep track of changes" +msgstr "" + +#. module: intrastat_product +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__valid +#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__valid +msgid "Valid" +msgstr "" + +#. module: intrastat_product +#: model:ir.model,name:intrastat_product.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: intrastat_product +#: 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 +#, 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 Export" +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/migrations/14.0.1.0.0/pre-migration.py b/intrastat_product/migrations/14.0.1.0.0/pre-migration.py new file mode 100644 index 0000000..1f6f9a8 --- /dev/null +++ b/intrastat_product/migrations/14.0.1.0.0/pre-migration.py @@ -0,0 +1,13 @@ +# Copyright 2020 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +def migrate(cr, version): + if not version: + return + + cr.execute( + 'ALTER TABLE "intrastat_product_declaration" RENAME "type" ' + 'TO "declaration_type"' + ) diff --git a/intrastat_product/models/__init__.py b/intrastat_product/models/__init__.py new file mode 100644 index 0000000..f2e2317 --- /dev/null +++ b/intrastat_product/models/__init__.py @@ -0,0 +1,11 @@ +from . import res_company +from . import res_config_settings +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 0000000..256cffb --- /dev/null +++ b/intrastat_product/models/account_move.py @@ -0,0 +1,166 @@ +# Copyright 2011-2020 Akretion France (http://www.akretion.com) +# Copyright 2009-2020 Noviat (http://www.noviat.com) +# @author Alexis de Lattre +# @author Luc de Meyer + +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", + ) + 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._default_src_dest_region_id(), + help="Origin region for dispatches, destination region for " + "arrivals. This field is used for the Intrastat Declaration.", + ondelete="restrict", + ) + intrastat = fields.Char( + string="Intrastat Declaration", related="company_id.intrastat" + ) + 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 + + @api.model + def _default_src_dest_region_id(self): + return self.env.company.intrastat_region_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.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 = {} + 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) + vals.update( + { + "invoice_line_id": line.id, + "hs_code_id": hs_code.id, + "transaction_weight": int(weight), + "transaction_suppl_unit_qty": qty, + "product_origin_country_id": line.product_id.origin_country_id.id, + } + ) + return vals + + +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.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", + 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 0000000..a54ae43 --- /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 +# @author Luc de Meyer + +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 0000000..a13a5c8 --- /dev/null +++ b/intrastat_product/models/intrastat_product_declaration.py @@ -0,0 +1,1166 @@ +# Copyright 2011-2020 Akretion France (http://www.akretion.com) +# Copyright 2009-2020 Noviat (http://www.noviat.com) +# @author Alexis de Lattre +# @author Luc de Meyer + +import logging +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", "intrastat.common"] + _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._default_company_id(), + ) + company_country_code = fields.Char( + compute="_compute_company_country_code", + string="Company Country Code", + readonly=True, + store=True, + help="Used in views and methods of localization modules.", + ) + year = fields.Char( + string="Year", required=True, 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"), + ], + string="Month", + required=True, + states={"done": [("readonly", True)]}, + ) + year_month = fields.Char( + compute="_compute_year_month", + string="Period", + readonly=True, + 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", + string="Action", + required=True, + default="replace", + states={"done": [("readonly", True)]}, + tracking=True, + ) + revision = fields.Integer( + string="Revision", + default=1, + states={"done": [("readonly", True)]}, + help="Used to keep track of changes", + ) + computation_line_ids = fields.One2many( + comodel_name="intrastat.product.computation.line", + inverse_name="parent_id", + string="Intrastat Product Computation Lines", + states={"done": [("readonly", True)]}, + ) + declaration_line_ids = fields.One2many( + comodel_name="intrastat.product.declaration.line", + inverse_name="parent_id", + string="Intrastat Product Declaration Lines", + states={"done": [("readonly", True)]}, + ) + num_decl_lines = fields.Integer( + compute="_compute_numbers", + string="Number of Declaration Lines", + store=True, + 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" + ) + state = fields.Selection( + selection=[("draft", "Draft"), ("done", "Done")], + string="State", + 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." + ) + reporting_level = fields.Selection( + selection="_get_reporting_level", + string="Reporting Level", + states={"done": [("readonly", True)]}, + ) + valid = fields.Boolean(compute="_compute_check_validity", string="Valid") + 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 _default_company_id(self): + return self.env.company + + @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", _("Declaration for Arrivals"))) + if dispatches != "exempt": + res.append(("dispatches", _("Declaration for 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("company_id") + def _compute_company_country_code(self): + for this in self: + if this.company_id: + if not this.company_id.country_id: + raise ValidationError(_("You must set company's country !")) + this.company_country_code = this.company_id.country_id.code.lower() + + @api.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.depends("month") + def _compute_check_validity(self): + """ TO DO: logic based upon computation lines """ + for this in self: + this.valid = True + + @api.model + @api.constrains("year") + def _check_year(self): + for this in self: + if len(this.year) != 4 or this.year[0] != "2": + raise ValidationError(_("Invalid Year !")) + + @api.onchange("declaration_type") + def _onchange_declaration_type(self): + if self.declaration_type == "arrivals": + self.reporting_level = ( + self.company_id.intrastat_arrivals == "extended" + and "extended" + or "standard" + ) + if self.declaration_type == "dispatches": + self.reporting_level = ( + self.company_id.intrastat_dispatches == "extended" + and "extended" + or "standard" + ) + + 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 _get_partner_country(self, inv_line, notedict, eu_countries): + inv = inv_line.move_id + country = inv.src_dest_country_id or inv.partner_id.country_id + if not country: + line_notes = [ + _( + "Missing country on invoice partner '%s' " + "or on the delivery address (partner '%s'). " + ) + % ( + inv.partner_id.display_name, + inv.partner_shipping_id + and inv.partner_shipping_id.display_name + or "-", + ) + ] + self._format_line_note(inv_line, notedict, line_notes) + else: + if country not in eu_countries and country.code != "GB": + line_notes = [ + _( + "On invoice '%s', the source/destination country " + "is '%s' which is not part of the European Union." + ) + % (inv.name, country.name) + ] + self._format_line_note(inv_line, notedict, line_notes) + if country and country.code == "GB" and self.year >= "2021": + vat = inv.commercial_partner_id.vat + if not vat: + line_notes = [ + _( + "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." + ) + % ( + inv.name, + inv.fiscal_position_id.display_name, + inv.commercial_partner_id.display_name, + ) + ] + self._format_line_note(inv_line, notedict, line_notes) + elif not vat.startswith("XI"): + line_notes = [ + _( + "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." + ) + % ( + inv.name, + inv.fiscal_position_id.display_name, + vat, + inv.commercial_partner_id.display_name, + ) + ] + self._format_line_note(inv_line, notedict, line_notes) + return country + + def _get_intrastat_transaction(self, inv_line, notedict): + invoice = inv_line.move_id + if invoice.intrastat_transaction_id: + return invoice.intrastat_transaction_id + else: + company = invoice.company_id + if invoice.move_type == "out_invoice": + return company.intrastat_transaction_out_invoice + elif invoice.move_type == "out_refund": + return company.intrastat_transaction_out_refund + elif invoice.move_type == "in_invoice": + return company.intrastat_transaction_in_invoice + elif invoice.move_type == "in_refund": + return company.intrastat_transaction_in_refund + + 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._get_uom_refs("weight_uom_categ") + kg_uom = self._get_uom_refs("kg_uom") + pce_uom_categ = self._get_uom_refs("pce_uom_categ") + pce_uom = self._get_uom_refs("pce_uom") + weight = suppl_unit_qty = 0.0 + + if not source_uom: + line_notes = [_("Missing unit of measure.")] + self._format_line_note(inv_line, notedict, line_notes) + return weight, suppl_unit_qty + + if intrastat_unit_id: + target_uom = intrastat_unit_id.uom_id + if not target_uom: + line_notes = [ + _("Intrastat Code %s:") % hs_code.display_name, + _( + "Conversion from Intrastat Supplementary Unit '%s' to " + "Unit of Measure is not implemented yet." + ) + % intrastat_unit_id.name, + ] + self._format_line_note(inv_line, notedict, line_notes) + 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: + line_notes = [ + _( + "Conversion from unit of measure '%s' to '%s' " + "is not implemented yet." + ) + % (source_uom.name, target_uom.name) + ] + self._format_line_note(inv_line, notedict, line_notes) + return weight, suppl_unit_qty + + if weight: + 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 == pce_uom_categ: + if not product.weight: # re-create weight_net ? + line_notes = [_("Missing weight on product %s.") % product.display_name] + self._format_line_note(inv_line, notedict, line_notes) + return weight, suppl_unit_qty + if source_uom == pce_uom: + weight = product.weight * line_qty # product.weight_net + else: + # Here, I suppose that, on the product, the + # weight is per PCE and not per uom_id + # product.weight_net + weight = product.weight * source_uom._compute_quantity( + line_qty, pce_uom + ) + else: + line_notes = [ + _( + "Conversion from unit of measure '%s' to 'Kg' " + "is not implemented yet. It is needed for product '%s'." + ) + % (source_uom.name, product.display_name) + ] + self._format_line_note(inv_line, notedict, line_notes) + return weight, suppl_unit_qty + + return weight, suppl_unit_qty + + def _get_amount(self, inv_line, notedict): + invoice = inv_line.move_id + amount = invoice.currency_id._convert( + inv_line.price_subtotal, + self.company_id.currency_id, + self.company_id, + invoice.date, + ) + return amount + + 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): + return inv_line.product_id.origin_country_id + + def _get_vat(self, inv_line, notedict): + vat = False + inv = inv_line.move_id + if self.declaration_type == "dispatches": + vat = inv.commercial_partner_id.vat + if vat: + if vat.startswith("GB"): + line_notes = [ + _( + "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')." + ) + % ( + inv.commercial_partner_id.display_name, + vat, + inv.name, + inv.fiscal_position_id.display_name, + ) + ] + self._format_line_note(inv_line, notedict, line_notes) + + else: + line_notes = [ + _("Missing VAT Number on partner '%s'") + % inv.commercial_partner_id.display_name + ] + self._format_line_note(inv_line, notedict, line_notes) + 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", "=", True), + ("company_id", "=", self.company_id.id), + ( + "move_type", + "in", + ("out_invoice", "out_refund", "in_invoice", "in_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 _format_line_note(self, line, notedict, line_notes): + indent = 8 * " " + note = _("Invoice %s, line %s") % (line.move_id.name, notedict["line_nbr"]) + note += ":\n" + for line_note in line_notes: + note += indent + line_note + note += "\n" + notedict["note"] += note + + 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 + for line_nbr, inv_line in enumerate( + invoice.invoice_line_ids.filtered(lambda x: not x.display_type), start=1 + ): + notedict["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 + ) + + 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: + line_notes = [ + _("Missing Intrastat Code on product %s. ") + % (inv_line.product_id.display_name) + ] + self._format_line_note(inv_line, notedict, line_notes) + 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 + + amount_company_currency = self._get_amount(inv_line, notedict) + 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 = 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_id": region and region.id or False, + "vat": vat, + } + + # 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 _get_uom_refs(self, ref): + uom_refs = { + "weight_uom_categ": self.env.ref("uom.product_uom_categ_kgm"), + "kg_uom": self.env.ref("uom.product_uom_kgm"), + "pce_uom_categ": self.env.ref("uom.product_uom_categ_unit"), + "pce_uom": self.env.ref("uom.product_uom_unit"), + } + return uom_refs[ref] + + def action_gather(self): + self.ensure_one() + self.message_post(body=_("Generate Lines from Invoices")) + notedict = { + "note": "", + "line_nbr": 0, + } + # TODO: implement a solution to avoid double warnings + # e.g. warning on invoice that is repeated for every line + # or warning on a product that is repeated for every invoice line + # with that product + + self.computation_line_ids.unlink() + self.declaration_line_ids.unlink() + lines = self._gather_invoices(notedict) + + vals = {"note": notedict["note"]} + if not lines: + vals["action"] = "nihil" + vals["note"] += ( + "\n" + + _("No records found for the selected period !") + + "\n" + + _("The Declaration Action has been set to 'nihil'.") + ) + else: + vals["computation_line_ids"] = [(0, 0, x) for x in lines] + + self.write(vals) + if vals["note"]: + result_view = self.env.ref("intrastat_base.intrastat_result_view_form") + return { + "name": _("Generate lines from invoices: results"), + "view_type": "form", + "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", + } + + return True + + @api.model + def _group_line_hashcode_fields(self, computation_line): + return { + "country": computation_line.src_dest_country_id.id or False, + "hs_code_id": computation_line.hs_code_id.id or False, + "intrastat_unit": computation_line.intrastat_unit_id.id or False, + "transaction": computation_line.transaction_id.id or False, + "transport": computation_line.transport_id.id or False, + "region": computation_line.region_id.id or False, + "product_origin_country": computation_line.product_origin_country_id.id + or False, + "vat": computation_line.vat or False, + } + + def group_line_hashcode(self, computation_line): + hc_fields = self._group_line_hashcode_fields(computation_line) + hashcode = "-".join([str(f) for f in hc_fields.values()]) + return hashcode + + @api.model + def _prepare_grouped_fields(self, computation_line, fields_to_sum): + vals = { + "src_dest_country_id": computation_line.src_dest_country_id.id, + "intrastat_unit_id": computation_line.intrastat_unit_id.id, + "hs_code_id": computation_line.hs_code_id.id, + "transaction_id": computation_line.transaction_id.id, + "transport_id": computation_line.transport_id.id, + "region_id": computation_line.region_id.id, + "parent_id": computation_line.parent_id.id, + "product_origin_country_id": computation_line.product_origin_country_id.id, + "amount_company_currency": 0.0, + "vat": computation_line.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 + + @api.model + def _prepare_declaration_line(self, computation_lines): + fields_to_sum = self._fields_to_sum() + vals = self._prepare_grouped_fields(computation_lines[0], fields_to_sum) + for computation_line in computation_lines: + for field in fields_to_sum: + vals[field] += computation_line[field] + vals["amount_company_currency"] += ( + computation_line["amount_company_currency"] + + computation_line["amount_accessory_cost_company_currency"] + ) + # round, otherwise odoo with truncate (6.7 -> 6... instead of 7 !) + for field in fields_to_sum: + vals[field] = int(round(vals[field])) + if not vals["weight"]: + vals["weight"] = 1 + vals["amount_company_currency"] = int(round(vals["amount_company_currency"])) + return vals + + def generate_declaration(self): + """ generate declaration lines """ + self.ensure_one() + assert self.valid, "Computation lines are not valid" + self.message_post(body=_("Generate Declaration Lines")) + # Delete existing declaration lines + self.declaration_line_ids.unlink() + # Regenerate declaration lines from computation lines + dl_group = {} + for cl in self.computation_line_ids: + hashcode = self.group_line_hashcode(cl) + if hashcode in dl_group: + dl_group[hashcode].append(cl) + else: + dl_group[hashcode] = [cl] + ipdl = self.declaration_line_ids + for cl_lines in list(dl_group.values()): + vals = self._prepare_declaration_line(cl_lines) + declaration_line = ipdl.create(vals) + for cl in cl_lines: + cl.write({"declaration_line_id": declaration_line.id}) + return True + + 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() + self._unlink_attachments() + 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}) + return + else: + raise UserError(_("No XML File has been generated.")) + + def delete_xml(self): + self.ensure_one() + self.xml_attachment_id and self.xml_attachment_id.unlink() + + def create_xls(self): + if self.env.context.get("computation_lines"): + report_file = "instrastat_transactions" + else: + report_file = "instrastat_declaration_lines" + return { + "type": "ir.actions.report", + "report_type": "xlsx", + "report_name": "intrastat_product.product_declaration_xls", + "context": dict(self.env.context, report_file=report_file), + "data": {"dynamic_report": True}, + } + + @api.model + def _xls_computation_line_fields(self): + """ + Update list in custom module to add/drop columns or change order + """ + return [ + "product", + "product_origin_country", + "hs_code", + "src_dest_country", + "amount_company_currency", + "accessory_cost", + "transaction", + "weight", + "suppl_unit_qty", + "suppl_unit", + "transport", + "vat", + "partner_id", + "invoice", + ] + + @api.model + def _xls_declaration_line_fields(self): + """ + Update list in custom module to add/drop columns or change order + """ + return [ + "hs_code", + "src_dest_country", + "amount_company_currency", + "transaction", + "weight", + "suppl_unit_qty", + "suppl_unit", + "transport", + "vat", + ] + + @api.model + def _xls_template(self): + """ + Placeholder for excel report template updates + + """ + return {} + + def done(self): + self.write({"state": "done"}) + + def back2draft(self): + for decl in self: + if decl.xml_attachment_id: + raise UserError( + _("Before going back to draft, you must delete the XML export.") + ) + 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" + ) + declaration_type = fields.Selection(related="parent_id.declaration_type") + reporting_level = fields.Selection(related="parent_id.reporting_level") + valid = fields.Boolean(compute="_compute_check_validity", string="Valid") + 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 = fields.Many2one( + related="invoice_line_id.move_id.commercial_partner_id", string="Partner" + ) + 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", + domain=[("intrastat", "=", True)], + ) + 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( + string="Weight", 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" + ) + region_id = fields.Many2one("intrastat.region", string="Intrastat Region") + # extended declaration + incoterm_id = fields.Many2one("account.incoterms", string="Incoterm") + transport_id = fields.Many2one("intrastat.transport_mode", string="Transport Mode") + 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 ____'", + ) + vat = fields.Char(string="VAT Number") + + @api.depends("transport_id") + def _compute_check_validity(self): + """ TO DO: logic based upon fields """ + for this in self: + this.valid = True + + @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) + + # TODO: product_id is a readonly related field 'invoice_line_id.product_id' + # so the onchange is non-sense. Either we convert product_id to a regular + # field or we keep it a related field and we remove this onchange + @api.onchange("product_id") + def _onchange_product(self): + self.weight = 0.0 + self.suppl_unit_qty = 0.0 + self.intrastat_code_id = False + self.intrastat_unit_id = False + if self.product_id: + self.intrastat_code_id = self.product_id.intrastat_id + self.intrastat_unit_id = self.product_id.intrastat_id.intrastat_unit_id + if not self.intrastat_unit_id: + self.weight = self.product_id.weight + + +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" + ) + 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_id = fields.Many2one( + "res.country", + string="Country", + help="Country of Origin/Destination", + ) + 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(string="Weight", 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" + ) + region_id = fields.Many2one("intrastat.region", string="Intrastat Region") + # extended declaration + incoterm_id = fields.Many2one("account.incoterms", string="Incoterm") + transport_id = fields.Many2one("intrastat.transport_mode", string="Transport Mode") + 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 ____'", + ) + vat = fields.Char(string="VAT Number") + + @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) diff --git a/intrastat_product/models/intrastat_region.py b/intrastat_product/models/intrastat_region.py new file mode 100644 index 0000000..648db55 --- /dev/null +++ b/intrastat_product/models/intrastat_region.py @@ -0,0 +1,32 @@ +# Copyright 2009-2020 Noviat nv/sa (www.noviat.com). +# @author Luc de Meyer + +from odoo import api, 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(string="Code", required=True) + country_id = fields.Many2one( + comodel_name="res.country", string="Country", required=True + ) + name = fields.Char(string="Name", translate=True) + description = fields.Char(string="Description") + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + default=lambda self: self._default_company_id(), + ) + + @api.model + def _default_company_id(self): + return self.env.company diff --git a/intrastat_product/models/intrastat_transaction.py b/intrastat_product/models/intrastat_transaction.py new file mode 100644 index 0000000..d9987d8 --- /dev/null +++ b/intrastat_product/models/intrastat_transaction.py @@ -0,0 +1,42 @@ +# Copyright 2011-2020 Akretion France (http://www.akretion.com) +# Copyright 2009-2020 Noviat (http://www.noviat.com) +# @author Alexis de Lattre +# @author Luc de Meyer + +from odoo import api, fields, models + + +class IntrastatTransaction(models.Model): + _name = "intrastat.transaction" + _description = "Intrastat Transaction" + _order = "code" + _sql_constraints = [ + ( + "intrastat_transaction_code_unique", + "UNIQUE(code, company_id)", + "Code must be unique.", + ) + ] + + code = fields.Char(string="Code", required=True) + description = fields.Text(string="Description") + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + default=lambda self: self._default_company_id(), + ) + + @api.model + def _default_company_id(self): + return self.env.company + + @api.depends("code", "description") + def name_get(self): + res = [] + for this in self: + name = this.code + if this.description: + name += " " + this.description + name = len(name) > 55 and name[:55] + "..." or name + 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 0000000..1d816b9 --- /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 +# @author Luc de Meyer + +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(string="Code", required=True) + name = fields.Char(string="Name", required=True, translate=True) + description = fields.Char(string="Description", 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 0000000..c83fa5e --- /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 +# @author Luc de Meyer + +from odoo import fields, models + + +class IntrastatUnit(models.Model): + _name = "intrastat.unit" + _description = "Intrastat Supplementary Units" + + name = fields.Char(string="Name", required=True) + description = fields.Char(string="Description", 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 0000000..14e3fa7 --- /dev/null +++ b/intrastat_product/models/res_company.py @@ -0,0 +1,88 @@ +# Copyright 2011-2017 Akretion (http://www.akretion.com) +# Copyright 2009-2020 Noviat (http://www.noviat.com) +# @author Alexis de Lattre +# @author Luc de Meyer + +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_transaction_out_invoice = fields.Many2one( + comodel_name="intrastat.transaction", + string="Default Intrastat Transaction For Customer Invoice", + ) + intrastat_transaction_out_refund = fields.Many2one( + comodel_name="intrastat.transaction", + string="Default Intrastat Transaction for Customer Refunds", + ) + intrastat_transaction_in_invoice = fields.Many2one( + comodel_name="intrastat.transaction", + string="Default Intrastat Transaction For Supplier Invoices", + ) + intrastat_transaction_in_refund = fields.Many2one( + comodel_name="intrastat.transaction", + string="Default Intrastat Transaction For Supplier Refunds", + ) + intrastat_accessory_costs = fields.Boolean( + string="Include Accessory Costs in Fiscal Value of Product" + ) + + @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_config_settings.py b/intrastat_product/models/res_config_settings.py new file mode 100644 index 0000000..6b16229 --- /dev/null +++ b/intrastat_product/models/res_config_settings.py @@ -0,0 +1,40 @@ +# Copyright 2017-2020 Akretion (Alexis de Lattre ) +# 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_transaction_out_invoice = fields.Many2one( + related="company_id.intrastat_transaction_out_invoice", readonly=False + ) + intrastat_transaction_out_refund = fields.Many2one( + related="company_id.intrastat_transaction_out_refund", readonly=False + ) + intrastat_transaction_in_invoice = fields.Many2one( + related="company_id.intrastat_transaction_in_invoice", readonly=False + ) + intrastat_transaction_in_refund = fields.Many2one( + related="company_id.intrastat_transaction_in_refund", 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/intrastat_product/models/sale_order.py b/intrastat_product/models/sale_order.py new file mode 100644 index 0000000..82f54b8 --- /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 +# 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 0000000..9fd9f10 --- /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 +# @author Luc de Meyer + +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 0000000..5ca9a9f --- /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 0000000..08d6018 --- /dev/null +++ b/intrastat_product/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Alexis de Lattre, Akretion +* Luc De Meyer, Noviat +* Tecnativa : + + * João Marques diff --git a/intrastat_product/readme/DESCRIPTION.rst b/intrastat_product/readme/DESCRIPTION.rst new file mode 100644 index 0000000..1e413dc --- /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 0000000..5b11a6a --- /dev/null +++ b/intrastat_product/readme/INSTALL.rst @@ -0,0 +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 0000000..6f75021 --- /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 0000000..66ec809 --- /dev/null +++ b/intrastat_product/readme/USAGE.rst @@ -0,0 +1,33 @@ +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. diff --git a/intrastat_product/report/__init__.py b/intrastat_product/report/__init__.py new file mode 100644 index 0000000..94b3dbb --- /dev/null +++ b/intrastat_product/report/__init__.py @@ -0,0 +1 @@ +from . import intrastat_product_report_xls diff --git a/intrastat_product/report/intrastat_product_report_xls.py b/intrastat_product/report/intrastat_product_report_xls.py new file mode 100644 index 0000000..48ccb26 --- /dev/null +++ b/intrastat_product/report/intrastat_product_report_xls.py @@ -0,0 +1,252 @@ +# Copyright 2009-2020 Noviat +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import logging + +from odoo import _, models +from odoo.tools.translate import translate + +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 _(self, src): + lang = self.env.context.get("lang", "en_US") + val = translate(self.env.cr, IR_TRANSLATION_NAME, "report", lang, src) or src + return val + + def _get_template(self, declaration): + + template = { + "product": { + "header": {"type": "string", "value": self._("Product")}, + "line": { + "value": self._render("line.product_id and line.product_id.name") + }, + "width": 36, + }, + "product_origin_country": { + "header": {"type": "string", "value": self._("Product C/O")}, + "line": { + "type": "string", + "value": self._render("line.product_origin_country_id.name or ''"), + }, + "width": 28, + }, + "hs_code": { + "header": {"type": "string", "value": self._("Intrastat Code")}, + "line": { + "type": "string", + "value": self._render("line.hs_code_id.local_code"), + }, + "width": 14, + }, + "src_dest_country": { + "header": { + "type": "string", + "value": self._("Country of Origin/Destination"), + }, + "line": { + "type": "string", + "value": self._render("line.src_dest_country_id.name"), + }, + "width": 28, + }, + "amount_company_currency": { + "header": { + "type": "string", + "value": self._("Fiscal Value"), + "format": 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": self._("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": { + "header": {"type": "string", "value": self._("Intrastat Transaction")}, + "line": {"value": self._render("line.transaction_id.display_name")}, + "width": 36, + }, + "weight": { + "header": { + "type": "string", + "value": self._("Weight"), + "format": 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": self._("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": self._("Suppl. Unit")}, + "line": {"value": self._render("line.intrastat_unit_id.name or ''")}, + "width": 14, + }, + "incoterm": { + "header": {"type": "string", "value": self._("Incoterm")}, + "line": {"value": self._render("line.incoterm_id.name or ''")}, + "width": 14, + }, + "transport": { + "header": {"type": "string", "value": self._("Transport Mode")}, + "line": {"value": self._render("line.transport_id.name or ''")}, + "width": 14, + }, + "region": { + "header": {"type": "string", "value": self._("Intrastat Region")}, + "line": {"value": self._render("line.region_id.name or ''")}, + "width": 28, + }, + "vat": { + "header": {"type": "string", "value": self._("VAT")}, + "line": {"value": self._render("line.vat or ''")}, + "width": 20, + }, + "partner_id": { + "header": {"type": "string", "value": self._("Partner")}, + "line": {"value": self._render("line.partner_id.display_name or ''")}, + "width": 28, + }, + "invoice": { + "header": {"type": "string", "value": self._("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, declaration): + template = self._get_template(declaration) + if self.env.context.get("computation_lines"): + wl = declaration._xls_computation_line_fields() + report = "computation" + else: + wl = declaration._xls_declaration_line_fields() + report = "declaration" + + title = self._get_title(declaration, report, title_format="normal") + title_short = self._get_title(declaration, report, title_format="short") + sheet_name = title_short[:31].replace("/", "-") + + params = { + "ws_name": sheet_name, + "generate_ws_method": "_intrastat_report", + "title": title, + "wanted_list": wl, + "col_specs": template, + } + return [params] + + def _get_title(self, declaration, report, title_format="normal"): + title = declaration.year_month + if title_format == "normal": + if report == "computation": + title += " : " + _("Computation Lines") + else: + title += " : " + _("Declaration Lines") + return title + + def _report_title(self, ws, row_pos, ws_params, data, declaration): + return self._write_ws_title(ws, row_pos, ws_params) + + def _empty_report(self, ws, row_pos, ws_params, data, declaration, report): + if report == "computation": + lines = _("Computation Lines") + else: + lines = _("Declaration Lines") + no_entries = ( + _("No") + " " + lines + " " + _("for period %s") % declaration.year_month + ) + ws.write_string(row_pos, 0, no_entries, FORMATS["format_left_bold"]) + + def _intrastat_report(self, workbook, ws, ws_params, data, declaration): + + ws.set_landscape() + ws.fit_to_pages(1, 0) + ws.set_header(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 self.env.context.get("computation_lines"): + report = "computation" + lines = declaration.computation_line_ids + else: + report = "declaration" + lines = declaration.declaration_line_ids + + if not lines: + return self._empty_report(ws, row_pos, ws_params, data, declaration, report) + + row_pos = self._write_line( + ws, + row_pos, + ws_params, + col_specs_section="header", + default_format=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/security/intrastat_security.xml b/intrastat_product/security/intrastat_security.xml new file mode 100644 index 0000000..82552a5 --- /dev/null +++ b/intrastat_product/security/intrastat_security.xml @@ -0,0 +1,35 @@ + + + + + Invoice Intrastat Transaction Details + Allow to encode Intrastat Transaction Details on Invoices + + + + + + Intrastat Transaction Company rule + + ['|', ('company_id', '=', False), ('company_id', 'in', company_ids)] + + + Intrastat Region Company rule + + ['|', ('company_id', '=', False), ('company_id', 'in', company_ids)] + + + Intrastat Product Declaration Company rule + + ['|', ('company_id', '=', False), ('company_id', 'in', company_ids)] + + + diff --git a/intrastat_product/security/ir.model.access.csv b/intrastat_product/security/ir.model.access.csv new file mode 100644 index 0000000..ac93450 --- /dev/null +++ b/intrastat_product/security/ir.model.access.csv @@ -0,0 +1,14 @@ +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_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 diff --git a/intrastat_product/static/description/icon.png b/intrastat_product/static/description/icon.png new file mode 100644 index 0000000..3a0328b 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 0000000..809f693 --- /dev/null +++ b/intrastat_product/static/description/index.html @@ -0,0 +1,500 @@ + + + + + + +Intrastat Product + + + +
+

Intrastat Product

+ + +

Beta License: AGPL-3 OCA/intrastat-extrastat Translate me on Weblate Try me on Runbot

+

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

+ +
+

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:

    +
    +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.

    +
  • +
+
+
+

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. +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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • brain-tec AG
  • +
  • Akretion
  • +
  • Noviat
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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 project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/intrastat_product/views/account_move.xml b/intrastat_product/views/account_move.xml new file mode 100644 index 0000000..3747728 --- /dev/null +++ b/intrastat_product/views/account_move.xml @@ -0,0 +1,63 @@ + + + + intrastat.invoice.form + account.move + + + + + + + + + + + +
+
+ + + + + + + + + + + +
+
+
+
+
diff --git a/intrastat_product/views/hs_code.xml b/intrastat_product/views/hs_code.xml new file mode 100644 index 0000000..c72c324 --- /dev/null +++ b/intrastat_product/views/hs_code.xml @@ -0,0 +1,39 @@ + + + + + + + + intrastat.hs.code.tree + hs.code + + + + + + + + + + intrastat.hs.code.form + hs.code + + + + + + + + diff --git a/intrastat_product/views/intrastat_product_declaration.xml b/intrastat_product/views/intrastat_product_declaration.xml new file mode 100644 index 0000000..381ab41 --- /dev/null +++ b/intrastat_product/views/intrastat_product_declaration.xml @@ -0,0 +1,378 @@ + + + + intrastat.product.declaration.form + intrastat.product.declaration + +
+
+
+ +
+

+ Intrastat Product Declaration + +

+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+
+ + + +
+ + + +
+
+
+ + + +
+
+
+
+ + intrastat.product.declaration.tree + intrastat.product.declaration + + + + + + + + + + + + + + intrastat.product.declaration.search + intrastat.product.declaration + + + + + + + + + + + + + + + + + intrastat.product.declaration.graph + intrastat.product.declaration + + + + + + + + + + intrastat.product.declaration.pivot + intrastat.product.declaration + + + + + + + + + + + intrastat.product.computation.line.form + intrastat.product.computation.line + +
+ + + + + + + + + + + + + +
+
+
+ + intrastat.product.computation.line.tree + intrastat.product.computation.line + + + + + + + + + + + + + + + + + + + + + + + + intrastat.product.declaration.line.form + intrastat.product.declaration.line + +
+ + + + + + + + + + + +
+
+
+ + intrastat.product.declaration.line.tree + intrastat.product.declaration.line + + + + + + + + + + + + + + + + + + + + +
diff --git a/intrastat_product/views/intrastat_region.xml b/intrastat_product/views/intrastat_region.xml new file mode 100644 index 0000000..6f77b18 --- /dev/null +++ b/intrastat_product/views/intrastat_region.xml @@ -0,0 +1,42 @@ + + + + intrastat.region.form + intrastat.region + +
+ + + + + + + +
+
+
+ + intrastat.region.tree + intrastat.region + + + + + + + + + + + + Intrastat Regions + intrastat.region + tree,form + + +
diff --git a/intrastat_product/views/intrastat_transaction.xml b/intrastat_product/views/intrastat_transaction.xml new file mode 100644 index 0000000..c519328 --- /dev/null +++ b/intrastat_product/views/intrastat_transaction.xml @@ -0,0 +1,66 @@ + + + + + + intrastat.transaction_form + intrastat.transaction + +
+ + + + + +
+
+
+ + intrastat.transaction_tree + intrastat.transaction + + + + + + + + + + intrastat.transaction.mode.search + intrastat.transaction + + + + + + + + + + + Transaction Types + intrastat.transaction + tree,form + + +
diff --git a/intrastat_product/views/intrastat_transport_mode.xml b/intrastat_product/views/intrastat_transport_mode.xml new file mode 100644 index 0000000..7b8cf52 --- /dev/null +++ b/intrastat_product/views/intrastat_transport_mode.xml @@ -0,0 +1,59 @@ + + + + + + intrastat.transport.mode.form + intrastat.transport_mode + +
+ + + + + +
+
+
+ + intrastat.transport.mode.tree + intrastat.transport_mode + + + + + + + + + + intrastat.transport.mode.search + intrastat.transport_mode + + + + + + + + Transport Modes + intrastat.transport_mode + tree,form + + +
diff --git a/intrastat_product/views/intrastat_unit.xml b/intrastat_product/views/intrastat_unit.xml new file mode 100644 index 0000000..167ea75 --- /dev/null +++ b/intrastat_product/views/intrastat_unit.xml @@ -0,0 +1,77 @@ + + + + + + intrastat.unit.form + intrastat.unit + +
+ + + + + + + + +
+
+ + intrastat.unit.tree + intrastat.unit + + + + + + + + + + intrastat.unit.search + intrastat.unit + + + + + + + + + + + + Supplementary Units + intrastat.unit + tree,form + + +
diff --git a/intrastat_product/views/res_config_settings.xml b/intrastat_product/views/res_config_settings.xml new file mode 100644 index 0000000..203528a --- /dev/null +++ b/intrastat_product/views/res_config_settings.xml @@ -0,0 +1,95 @@ + + + + + intrastat.account.config.settings.form + res.config.settings + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ + + diff --git a/intrastat_product/views/sale_order.xml b/intrastat_product/views/sale_order.xml new file mode 100644 index 0000000..74fb4ee --- /dev/null +++ b/intrastat_product/views/sale_order.xml @@ -0,0 +1,18 @@ + + + + intrastat.sale.order.form + sale.order + + + + + + + + + diff --git a/intrastat_product/views/stock_warehouse.xml b/intrastat_product/views/stock_warehouse.xml new file mode 100644 index 0000000..7de0626 --- /dev/null +++ b/intrastat_product/views/stock_warehouse.xml @@ -0,0 +1,13 @@ + + + + intrastat.stock.warehouse.form + stock.warehouse + + + + + + + + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..37b785e --- /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 0000000..fd3e62a --- /dev/null +++ b/setup/intrastat_product/odoo/addons/intrastat_product @@ -0,0 +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 0000000..28c57bb --- /dev/null +++ b/setup/intrastat_product/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)