diff --git a/intrastat_base/README.rst b/intrastat_base/README.rst new file mode 100644 index 0000000..1b56569 --- /dev/null +++ b/intrastat_base/README.rst @@ -0,0 +1,105 @@ +======================== +Intrastat Reporting Base +======================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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_base + :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_base + :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 functions for the intrastat reporting and +should be used in combination with the generic reporting module +*intrastat_product* and with the country-specific reporting modules such +as: + +- *l10n_fr_intrastat_service*: + the module for the *Déclaration Européenne des Services* (DES) for France +- *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 Declaration for Belgium. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +WARNING: + +This module conflicts with the module *account_intrastat* from Odoo Enterprise. +If you have already installed the module *account_intrastat*, +you should uninstall it first before installing this module. + +Usage +===== + +This module adds an intrastat property on fiscal positions. + +With this module, the country field on partners becomes a required field. + +It adds an *Intrastat* section on the *Invoicing* configuration page. + +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 +~~~~~~~ + +* Akretion +* Noviat + +Contributors +~~~~~~~~~~~~ + +* Alexis de Lattre, Akretion +* Luc De Meyer, Noviat +* Kumar Aberer, brain-tec AG +* Andrea Stirpe + +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_base/__init__.py b/intrastat_base/__init__.py new file mode 100644 index 0000000..aee8895 --- /dev/null +++ b/intrastat_base/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/intrastat_base/__manifest__.py b/intrastat_base/__manifest__.py new file mode 100644 index 0000000..a9d6fe8 --- /dev/null +++ b/intrastat_base/__manifest__.py @@ -0,0 +1,26 @@ +# Copyright 2011-2021 Akretion (http://www.akretion.com) +# Copyright 2018-2021 brain-tec AG (Kumar Aberer ) +# Copyright 2009-2021 Noviat (http://www.noviat.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Intrastat Reporting Base", + "version": "15.0.1.0.0", + "category": "Intrastat", + "license": "AGPL-3", + "summary": "Base module for Intrastat reporting", + "author": "ACSONE SA/NV, Akretion,Noviat,Odoo Community Association (OCA)", + "maintainers": ["alexis-via", "luc-demeyer"], + "website": "https://github.com/OCA/intrastat-extrastat", + "depends": ["base_vat", "account"], + "excludes": ["account_intrastat"], + "data": [ + "views/product_template.xml", + "views/res_partner.xml", + "views/res_config_settings.xml", + "views/intrastat.xml", + "views/account_fiscal_position.xml", + ], + "demo": ["demo/intrastat_demo.xml"], + "installable": True, +} diff --git a/intrastat_base/demo/intrastat_demo.xml b/intrastat_base/demo/intrastat_demo.xml new file mode 100644 index 0000000..de17e22 --- /dev/null +++ b/intrastat_base/demo/intrastat_demo.xml @@ -0,0 +1,29 @@ + + + + + + + + FR58441019213 + + + + BE0884025633 + + + Shipping costs + SHIP_S + service + + 30 + + + diff --git a/intrastat_base/i18n/fr.po b/intrastat_base/i18n/fr.po new file mode 100644 index 0000000..b6f72ac --- /dev/null +++ b/intrastat_base/i18n/fr.po @@ -0,0 +1,306 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * intrastat_base +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-12-29 09:52+0000\n" +"PO-Revision-Date: 2021-07-04 21:48+0000\n" +"Last-Translator: Alexis de Lattre \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_account_chart_template +msgid "Account Chart Template" +msgstr "Modèle de plan comptable" + +#. module: intrastat_base +#: model:ir.model.fields,help:intrastat_base.field_product_product__is_accessory_cost +#: model:ir.model.fields,help:intrastat_base.field_product_template__is_accessory_cost +msgid "" +"Activate this option for shipping costs, packaging costs and all services " +"related to the sale of products. This option is used for Intrastat reports." +msgstr "" +"Activer cette option pour les frais de port, les frais d'emballage et tous " +"les services associés à la vente de produits. Cette option est utilisée pour " +"la DEB et la DES." + +#. module: intrastat_base +#: code:addons/intrastat_base/models/intrastat_common.py:0 +#, python-format +msgid "Cannot delete the declaration %s because it is in Done state" +msgstr "" +"Impossible de supprimer la déclaration %s parce qu'elle est à l'état " +"'Terminé'." + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_intrastat_common +msgid "Common functions for intrastat reports for products " +msgstr "Fonctions communes pour les rapports intrastat des produits " + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_res_config_settings +msgid "Config Settings" +msgstr "Configuration" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_account_chart_template__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position_template__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_account_move__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_common__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_product_template__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_res_company__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_res_config_settings__display_name +msgid "Display Name" +msgstr "Afficher le nom" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_account_fiscal_position +msgid "Fiscal Position" +msgstr "Position fiscale" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_account_chart_template__id +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position__id +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position_template__id +#: model:ir.model.fields,field_description:intrastat_base.field_account_move__id +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_common__id +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__id +#: model:ir.model.fields,field_description:intrastat_base.field_product_template__id +#: model:ir.model.fields,field_description:intrastat_base.field_res_company__id +#: model:ir.model.fields,field_description:intrastat_base.field_res_config_settings__id +msgid "ID" +msgstr "ID" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position__intrastat +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position_template__intrastat +#: model:ir.ui.menu,name:intrastat_base.menu_intrastat_base_root +#: model:ir.ui.menu,name:intrastat_base.menu_intrastat_config_root +#: model_terms:ir.ui.view,arch_db:intrastat_base.product_template_form_view +#: model_terms:ir.ui.view,arch_db:intrastat_base.view_intrastat_res_config_settings +msgid "Intrastat" +msgstr "DEB/DES" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_account_bank_statement_line__intrastat_fiscal_position +#: model:ir.model.fields,field_description:intrastat_base.field_account_move__intrastat_fiscal_position +#: model:ir.model.fields,field_description:intrastat_base.field_account_payment__intrastat_fiscal_position +msgid "Intrastat Fiscal Position" +msgstr "Position fiscale intrastat" + +#. module: intrastat_base +#: model_terms:ir.ui.view,arch_db:intrastat_base.intrastat_result_view_form +msgid "Intrastat Result View" +msgstr "Résultat DEB" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_product_product__is_accessory_cost +#: model:ir.model.fields,field_description:intrastat_base.field_product_template__is_accessory_cost +msgid "Is accessory cost" +msgstr "Est un frais accessoire" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_account_move +msgid "Journal Entry" +msgstr "Pièce comptable" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_account_chart_template____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position_template____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_account_move____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_common____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_product_template____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_res_company____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_res_config_settings____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__write_uid +msgid "Last Updated by" +msgstr "Dernière modification par" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__write_date +msgid "Last Updated on" +msgstr "Dernière modification le" + +#. module: intrastat_base +#: model:ir.model.fields,help:intrastat_base.field_res_company__intrastat_remind_user_ids +#: model:ir.model.fields,help:intrastat_base.field_res_config_settings__intrastat_remind_user_ids +msgid "" +"List of Odoo users who will receive a notification to remind them about the " +"Intrastat declaration." +msgstr "Liste d'utilisateurs Odoo qui recevront un rappel pour la DEB/DES." + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_res_company__intrastat_email_list +msgid "List of emails of Users Receiving the Intrastat Reminder" +msgstr "Liste des emails des utilisateurs qui reçoivent le rappel DEB/DES" + +#. module: intrastat_base +#: code:addons/intrastat_base/models/res_company.py:0 +#, python-format +msgid "Missing e-mail address on user '%s'." +msgstr "Adresse e-mail manquante pour l'utilisateur '%s'." + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__note +msgid "Notes" +msgstr "Notes" + +#. module: intrastat_base +#: model_terms:ir.ui.view,arch_db:intrastat_base.intrastat_result_view_form +msgid "Ok" +msgstr "Ok" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_intrastat_result_view +msgid "Pop-up to show errors on intrastat report generation" +msgstr "" +"Pop-up qui affiche les erreurs lors de la génération du rapport intrastat" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_product_template +msgid "Product Template" +msgstr "Modèle d'article" + +#. module: intrastat_base +#: model:ir.model.fields,help:intrastat_base.field_account_bank_statement_line__intrastat_fiscal_position +#: model:ir.model.fields,help:intrastat_base.field_account_fiscal_position__intrastat +#: model:ir.model.fields,help:intrastat_base.field_account_move__intrastat_fiscal_position +#: model:ir.model.fields,help:intrastat_base.field_account_payment__intrastat_fiscal_position +msgid "" +"Set to True if the invoices with this fiscal position should be taken into " +"account for the generation of the intrastat reports." +msgstr "" +"Activer si les factures ayant cette position fiscale doivent être " +"sélectionnées pour la génération des rapports intrastat." + +#. module: intrastat_base +#: model:product.product,name:intrastat_base.shipping_costs_exclude +#: model:product.template,name:intrastat_base.shipping_costs_exclude_product_template +msgid "Shipping costs" +msgstr "Frais de port" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_account_fiscal_position_template +msgid "Template for Fiscal Position" +msgstr "Modèle de position fiscale" + +#. module: intrastat_base +#: code:addons/intrastat_base/models/intrastat_common.py:0 +#, python-format +msgid "The VAT number is not set for the partner '%s'." +msgstr "Numéro de TVA non renseigné sur le partenaire '%s'." + +#. module: intrastat_base +#: code:addons/intrastat_base/models/product_template.py:0 +#, python-format +msgid "" +"The option 'Is accessory cost?' should only be activated on 'Service' " +"products. You have activated this option for the product '%s' which is of " +"type '%s'" +msgstr "" +"L'option 'Est un frais accessoire' ne doit être activée que sur des articles " +"de service. Vous avez activé cette option pour l'article '%s' qui est de " +"type '%s'" + +#. module: intrastat_base +#: model:product.product,uom_name:intrastat_base.shipping_costs_exclude +#: model:product.template,uom_name:intrastat_base.shipping_costs_exclude_product_template +msgid "Units" +msgstr "Unités" + +#. module: intrastat_base +#: code:addons/intrastat_base/models/intrastat_common.py:0 +#, python-format +msgid "Unknown Error" +msgstr "Erreur inconnue" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_res_company__intrastat_remind_user_ids +#: model:ir.model.fields,field_description:intrastat_base.field_res_config_settings__intrastat_remind_user_ids +msgid "Users Receiving the Intrastat Reminder" +msgstr "Utilisateurs qui reçoivent le rappel DEB/DES" + +#~ msgid "Company not yet set on intrastat report." +#~ msgstr "Société non configurée sur le rapport DEB/DES." + +#~ msgid "Country" +#~ msgstr "Pays" + +#~ msgid "EU Country" +#~ msgstr "Membre de l'UE" + +#~ msgid "Exclude invoice line from intrastat if this tax is present" +#~ msgstr "" +#~ "Ligne de facture exclue de la DEB et de la DES si cette taxe est présente" + +#~ msgid "" +#~ "If this tax is present on an invoice line, this invoice line will be " +#~ "skipped when generating Intrastat Product or Service lines from invoices." +#~ msgstr "" +#~ "Si cette taxe est présente sur une ligne de facture, cette ligne de " +#~ "facture sera sautée lors de la génération de la DEB et de la DES à partir " +#~ "des factures." + +#~ msgid "Intrastat Properties" +#~ msgstr "Propriétés DEB/DES" + +#~ msgid "Search Countries" +#~ msgstr "Recherche pays" + +#~ msgid "Set to True for all European Union countries." +#~ msgstr "Cocher la case pour tous les pays de l'Union Européenne." + +#~ msgid "Tax" +#~ msgstr "Taxe" + +#~ msgid "Templates for Taxes" +#~ msgstr "Modèles pour les taxes" + +#~ msgid "The country is not set on the company '%s'." +#~ msgstr "Pays non renseigné sur la société '%s'." + +#~ msgid "intrastat.result.view" +#~ msgstr "intrastat.result.view" + +#~ msgid "" +#~ "The generated XML file is not valid against the official XML Schema " +#~ "Definition. The generated XML file and the full error have been written " +#~ "in the server logs. Here is the error, which may give you an idea on the " +#~ "cause of the problem : %s." +#~ msgstr "" +#~ "Le fichier XML n'est pas valide au regard du schéma de définition XML. Le " +#~ "fichier XML généré et l'erreur complète ont été écrits dans les logs du " +#~ "serveur Odoo. Voici l'erreur, qui pourrait vous aiguiller sur la cause du " +#~ "problème : %s." diff --git a/intrastat_base/i18n/intrastat_base.pot b/intrastat_base/i18n/intrastat_base.pot new file mode 100644 index 0000000..6fa9236 --- /dev/null +++ b/intrastat_base/i18n/intrastat_base.pot @@ -0,0 +1,238 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * intrastat_base +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_account_chart_template +msgid "Account Chart Template" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,help:intrastat_base.field_product_product__is_accessory_cost +#: model:ir.model.fields,help:intrastat_base.field_product_template__is_accessory_cost +msgid "" +"Activate this option for shipping costs, packaging costs and all services " +"related to the sale of products. This option is used for Intrastat reports." +msgstr "" + +#. module: intrastat_base +#: code:addons/intrastat_base/models/intrastat_common.py:0 +#, python-format +msgid "Cannot delete the declaration %s because it is in Done state" +msgstr "" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_intrastat_common +msgid "Common functions for intrastat reports for products " +msgstr "" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_res_company +msgid "Companies" +msgstr "" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__create_uid +msgid "Created by" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__create_date +msgid "Created on" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_account_chart_template__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position_template__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_account_move__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_common__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_product_template__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_res_company__display_name +#: model:ir.model.fields,field_description:intrastat_base.field_res_config_settings__display_name +msgid "Display Name" +msgstr "" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_account_fiscal_position +msgid "Fiscal Position" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_account_chart_template__id +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position__id +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position_template__id +#: model:ir.model.fields,field_description:intrastat_base.field_account_move__id +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_common__id +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__id +#: model:ir.model.fields,field_description:intrastat_base.field_product_template__id +#: model:ir.model.fields,field_description:intrastat_base.field_res_company__id +#: model:ir.model.fields,field_description:intrastat_base.field_res_config_settings__id +msgid "ID" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position__intrastat +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position_template__intrastat +#: model:ir.ui.menu,name:intrastat_base.menu_intrastat_base_root +#: model:ir.ui.menu,name:intrastat_base.menu_intrastat_config_root +#: model_terms:ir.ui.view,arch_db:intrastat_base.product_template_form_view +#: model_terms:ir.ui.view,arch_db:intrastat_base.view_intrastat_res_config_settings +msgid "Intrastat" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_account_bank_statement_line__intrastat_fiscal_position +#: model:ir.model.fields,field_description:intrastat_base.field_account_move__intrastat_fiscal_position +#: model:ir.model.fields,field_description:intrastat_base.field_account_payment__intrastat_fiscal_position +msgid "Intrastat Fiscal Position" +msgstr "" + +#. module: intrastat_base +#: model_terms:ir.ui.view,arch_db:intrastat_base.intrastat_result_view_form +msgid "Intrastat Result View" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_product_product__is_accessory_cost +#: model:ir.model.fields,field_description:intrastat_base.field_product_template__is_accessory_cost +msgid "Is accessory cost" +msgstr "" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_account_chart_template____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_account_fiscal_position_template____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_account_move____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_common____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_product_template____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_res_company____last_update +#: model:ir.model.fields,field_description:intrastat_base.field_res_config_settings____last_update +msgid "Last Modified on" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__write_date +msgid "Last Updated on" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,help:intrastat_base.field_res_company__intrastat_remind_user_ids +#: model:ir.model.fields,help:intrastat_base.field_res_config_settings__intrastat_remind_user_ids +msgid "" +"List of Odoo users who will receive a notification to remind them about the " +"Intrastat declaration." +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_res_company__intrastat_email_list +msgid "List of emails of Users Receiving the Intrastat Reminder" +msgstr "" + +#. module: intrastat_base +#: code:addons/intrastat_base/models/res_company.py:0 +#, python-format +msgid "Missing e-mail address on user '%s'." +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_intrastat_result_view__note +msgid "Notes" +msgstr "" + +#. module: intrastat_base +#: model_terms:ir.ui.view,arch_db:intrastat_base.intrastat_result_view_form +msgid "Ok" +msgstr "" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_intrastat_result_view +msgid "Pop-up to show errors on intrastat report generation" +msgstr "" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_product_template +msgid "Product Template" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,help:intrastat_base.field_account_bank_statement_line__intrastat_fiscal_position +#: model:ir.model.fields,help:intrastat_base.field_account_fiscal_position__intrastat +#: model:ir.model.fields,help:intrastat_base.field_account_move__intrastat_fiscal_position +#: model:ir.model.fields,help:intrastat_base.field_account_payment__intrastat_fiscal_position +msgid "" +"Set to True if the invoices with this fiscal position should be taken into " +"account for the generation of the intrastat reports." +msgstr "" + +#. module: intrastat_base +#: model:product.product,name:intrastat_base.shipping_costs_exclude +#: model:product.template,name:intrastat_base.shipping_costs_exclude_product_template +msgid "Shipping costs" +msgstr "" + +#. module: intrastat_base +#: model:ir.model,name:intrastat_base.model_account_fiscal_position_template +msgid "Template for Fiscal Position" +msgstr "" + +#. module: intrastat_base +#: code:addons/intrastat_base/models/intrastat_common.py:0 +#, python-format +msgid "The VAT number is not set for the partner '%s'." +msgstr "" + +#. module: intrastat_base +#: code:addons/intrastat_base/models/product_template.py:0 +#, python-format +msgid "" +"The option 'Is accessory cost?' should only be activated on 'Service' " +"products. You have activated this option for the product '%s' which is of " +"type '%s'" +msgstr "" + +#. module: intrastat_base +#: model:product.product,uom_name:intrastat_base.shipping_costs_exclude +#: model:product.template,uom_name:intrastat_base.shipping_costs_exclude_product_template +msgid "Units" +msgstr "" + +#. module: intrastat_base +#: code:addons/intrastat_base/models/intrastat_common.py:0 +#, python-format +msgid "Unknown Error" +msgstr "" + +#. module: intrastat_base +#: model:ir.model.fields,field_description:intrastat_base.field_res_company__intrastat_remind_user_ids +#: model:ir.model.fields,field_description:intrastat_base.field_res_config_settings__intrastat_remind_user_ids +msgid "Users Receiving the Intrastat Reminder" +msgstr "" diff --git a/intrastat_base/models/__init__.py b/intrastat_base/models/__init__.py new file mode 100644 index 0000000..cea19b9 --- /dev/null +++ b/intrastat_base/models/__init__.py @@ -0,0 +1,5 @@ +from . import product_template +from . import res_company +from . import account_fiscal_position +from . import account_fiscal_position_template +from . import account_move diff --git a/intrastat_base/models/account_chart_template.py b/intrastat_base/models/account_chart_template.py new file mode 100644 index 0000000..e826e11 --- /dev/null +++ b/intrastat_base/models/account_chart_template.py @@ -0,0 +1,18 @@ +# Copyright 2020-2021 Akretion France (http://www.akretion.com/) +# @author: +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class AccountChartTemplate(models.Model): + _inherit = "account.chart.template" + + def _get_fp_vals(self, company, position): + """ + Get fiscal position chart template instrastat value + to create fiscal position + """ + vals = super()._get_fp_vals(company, position) + vals["intrastat"] = position.intrastat + return vals diff --git a/intrastat_base/models/account_fiscal_position.py b/intrastat_base/models/account_fiscal_position.py new file mode 100644 index 0000000..b89c7c5 --- /dev/null +++ b/intrastat_base/models/account_fiscal_position.py @@ -0,0 +1,14 @@ +# Copyright 2020-2021 Akretion France (http://www.akretion.com/) +# @author: +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AccountFiscalPosition(models.Model): + _inherit = "account.fiscal.position" + + intrastat = fields.Boolean( + help="Set to True if the invoices with this fiscal position should " + "be taken into account for the generation of the intrastat reports.", + ) diff --git a/intrastat_base/models/account_fiscal_position_template.py b/intrastat_base/models/account_fiscal_position_template.py new file mode 100644 index 0000000..a6a8a7a --- /dev/null +++ b/intrastat_base/models/account_fiscal_position_template.py @@ -0,0 +1,13 @@ +# Copyright 2020 Akretion France (http://www.akretion.com/) +# @author: +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class AccountFiscalPositionTemplate(models.Model): + _inherit = "account.fiscal.position.template" + + intrastat = fields.Boolean( + help="Check this if you want to generate intrastat declarations with" + "the created fiscal position", + ) diff --git a/intrastat_base/models/account_move.py b/intrastat_base/models/account_move.py new file mode 100644 index 0000000..f510ff1 --- /dev/null +++ b/intrastat_base/models/account_move.py @@ -0,0 +1,15 @@ +# Copyright 2020-2021 Akretion France (http://www.akretion.com/) +# @author: +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AccountMove(models.Model): + _inherit = "account.move" + + intrastat_fiscal_position = fields.Boolean( + related="fiscal_position_id.intrastat", + store=True, + string="Intrastat Fiscal Position", + ) diff --git a/intrastat_base/models/product_template.py b/intrastat_base/models/product_template.py new file mode 100644 index 0000000..d5f5777 --- /dev/null +++ b/intrastat_base/models/product_template.py @@ -0,0 +1,34 @@ +# Copyright 2010-2021 Akretion France (http://www.akretion.com/) +# @author: +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + is_accessory_cost = fields.Boolean( + help="Activate this option for shipping costs, packaging " + "costs and all services related to the sale of products. " + "This option is used for Intrastat reports.", + ) + + @api.constrains("type", "is_accessory_cost") + def _check_accessory_cost(self): + for this in self: + if this.is_accessory_cost and this.type != "service": + raise ValidationError( + _( + "The option 'Is accessory cost?' should only be " + "activated on 'Service' products. You have activated " + "this option for the product '{product_name}' which is " + "configured with type '{product_type}'." + ).format( + product_name=this.display_name, + product_type=this._fields["type"].convert_to_export( + this.type, this + ), + ) + ) diff --git a/intrastat_base/models/res_company.py b/intrastat_base/models/res_company.py new file mode 100644 index 0000000..f7b5213 --- /dev/null +++ b/intrastat_base/models/res_company.py @@ -0,0 +1,72 @@ +# Copyright 2013-2021 Akretion France (http://www.akretion.com/) +# @author: +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import logging +from io import BytesIO +from sys import exc_info +from traceback import format_exception + +from lxml import etree + +from odoo import _, api, fields, models, tools +from odoo.exceptions import UserError, ValidationError + +logger = logging.getLogger(__name__) + + +class ResCompany(models.Model): + _inherit = "res.company" + + intrastat_remind_user_ids = fields.Many2many( + comodel_name="res.users", + relation="company_intrastat_reminder_user_rel", + column1="company_id", + column2="user_id", + string="Users Receiving the Intrastat Reminder", + help="List of Odoo users who will receive a notification to " + "remind them about the Intrastat declaration.", + ) + intrastat_email_list = fields.Char( + compute="_compute_intrastat_email_list", + string="List of emails of Users Receiving the Intrastat Reminder", + ) + + @api.depends("intrastat_remind_user_ids", "intrastat_remind_user_ids.email") + def _compute_intrastat_email_list(self): + for this in self: + emails = [] + for user in this.intrastat_remind_user_ids: + if user.email: + emails.append(user.email) + this.intrastat_email_list = ",".join(emails) + + @api.constrains("intrastat_remind_user_ids") + def _check_intrastat_remind_users(self): + for this in self: + for user in this.intrastat_remind_user_ids: + if not user.email: + raise ValidationError( + _("Missing e-mail address on user '%s'.") % (user.name) + ) + + @api.model + def _intrastat_check_xml_schema(self, xml_bytes, xsd_file): + """Validate the XML file against the XSD""" + xsd_etree_obj = etree.parse(tools.file_open(xsd_file, mode="rb")) + official_schema = etree.XMLSchema(xsd_etree_obj) + try: + t = etree.parse(BytesIO(xml_bytes)) + official_schema.assertValid(t) + except (etree.XMLSchemaParseError, etree.DocumentInvalid) as e: + logger.warning("The XML file is invalid against the XML Schema Definition") + logger.warning(xml_bytes) + logger.warning(e) + usererror = "{}\n\n{}".format(e.__class__.__name__, str(e)) + raise UserError(usererror) from e + except Exception as e: + error = _("Unknown Error") + tb = "".join(format_exception(*exc_info())) + error += "\n%s" % tb + logger.warning(error) + raise UserError(error) from e diff --git a/intrastat_base/readme/CONTRIBUTORS.rst b/intrastat_base/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..af9ef52 --- /dev/null +++ b/intrastat_base/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Alexis de Lattre, Akretion +* Luc De Meyer, Noviat +* Kumar Aberer, brain-tec AG +* Andrea Stirpe +* Denis Roussel diff --git a/intrastat_base/readme/DESCRIPTION.rst b/intrastat_base/readme/DESCRIPTION.rst new file mode 100644 index 0000000..179c7eb --- /dev/null +++ b/intrastat_base/readme/DESCRIPTION.rst @@ -0,0 +1,11 @@ +This module contains common functions for the intrastat reporting and +should be used in combination with the generic reporting module +*intrastat_product* and with the country-specific reporting modules such +as: + +- *l10n_fr_intrastat_service*: + the module for the *Déclaration Européenne des Services* (DES) for France +- *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 Declaration for Belgium. diff --git a/intrastat_base/readme/INSTALL.rst b/intrastat_base/readme/INSTALL.rst new file mode 100644 index 0000000..2f4f69f --- /dev/null +++ b/intrastat_base/readme/INSTALL.rst @@ -0,0 +1,5 @@ +WARNING: + +This module conflicts with the module *account_intrastat* from Odoo Enterprise. +If you have already installed the module *account_intrastat*, +you should uninstall it first before installing this module. diff --git a/intrastat_base/readme/USAGE.rst b/intrastat_base/readme/USAGE.rst new file mode 100644 index 0000000..7f7a6d0 --- /dev/null +++ b/intrastat_base/readme/USAGE.rst @@ -0,0 +1,5 @@ +This module adds an intrastat property on fiscal positions. + +With this module, the country field on partners becomes a required field. + +It adds an *Intrastat* section on the *Invoicing* configuration page. diff --git a/intrastat_base/static/description/icon.png b/intrastat_base/static/description/icon.png new file mode 100644 index 0000000..3a0328b Binary files /dev/null and b/intrastat_base/static/description/icon.png differ diff --git a/intrastat_base/static/description/index.html b/intrastat_base/static/description/index.html new file mode 100644 index 0000000..3bd1878 --- /dev/null +++ b/intrastat_base/static/description/index.html @@ -0,0 +1,449 @@ + + + + + + +Intrastat Reporting Base + + + +
+

Intrastat Reporting Base

+ + +

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

+

This module contains common functions for the intrastat reporting and +should be used in combination with the generic reporting module +intrastat_product and with the country-specific reporting modules such +as:

+
    +
  • l10n_fr_intrastat_service: +the module for the Déclaration Européenne des Services (DES) for France
  • +
  • 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 Declaration for Belgium.
  • +
+

Table of contents

+ +
+

Installation

+

WARNING:

+

This module conflicts with the module account_intrastat from Odoo Enterprise. +If you have already installed the module account_intrastat, +you should uninstall it first before installing this module.

+
+
+

Usage

+

This module adds an intrastat property on fiscal positions.

+

With this module, the country field on partners becomes a required field.

+

It adds an Intrastat section on the Invoicing configuration page.

+
+
+

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

+
    +
  • 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_base/tests/__init__.py b/intrastat_base/tests/__init__.py new file mode 100644 index 0000000..a2afb4b --- /dev/null +++ b/intrastat_base/tests/__init__.py @@ -0,0 +1,2 @@ +from . import common +from . import test_all diff --git a/intrastat_base/tests/common.py b/intrastat_base/tests/common.py new file mode 100644 index 0000000..ac1fbf3 --- /dev/null +++ b/intrastat_base/tests/common.py @@ -0,0 +1,16 @@ +# Copyright 2021 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +class IntrastatCommon(object): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.chart_template_obj = cls.env["account.chart.template"] + cls.mail_obj = cls.env["mail.mail"] + + cls.demo_user = cls.env.ref("base.user_demo") + cls.demo_company = cls.env.ref("base.main_company") + + cls.shipping_cost = cls.env.ref("intrastat_base.shipping_costs_exclude") diff --git a/intrastat_base/tests/models.py b/intrastat_base/tests/models.py new file mode 100644 index 0000000..302914c --- /dev/null +++ b/intrastat_base/tests/models.py @@ -0,0 +1,10 @@ +# Copyright 2021 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class IntrastatDeclarationTest(models.Model): + _inherit = ["mail.thread", "mail.activity.mixin", "intrastat.common"] + _name = "intrastat.declaration.test" + _description = "Intrastat Declaration Test" diff --git a/intrastat_base/tests/test_all.py b/intrastat_base/tests/test_all.py new file mode 100644 index 0000000..40b414f --- /dev/null +++ b/intrastat_base/tests/test_all.py @@ -0,0 +1,30 @@ +from odoo.exceptions import ValidationError + +from .common import IntrastatCommon + + +class TestIntrastatBase(IntrastatCommon): + """Tests for this module""" + + @classmethod + def setUpClass(cls): + super().setUpClass() + + def test_company(self): + # add 'Demo user' to intrastat_remind_user_ids + self.demo_company.write( + {"intrastat_remind_user_ids": [(6, False, [self.demo_user.id])]} + ) + # then check if intrastat_email_list contains the email of the user + self.assertEqual(self.demo_company.intrastat_email_list, self.demo_user.email) + + def test_no_email(self): + self.demo_user.email = False + with self.assertRaises(ValidationError): + self.demo_company.write( + {"intrastat_remind_user_ids": [(6, False, [self.demo_user.id])]} + ) + + def test_accessory(self): + with self.assertRaises(ValidationError): + self.shipping_cost.type = "consu" diff --git a/intrastat_base/views/account_fiscal_position.xml b/intrastat_base/views/account_fiscal_position.xml new file mode 100644 index 0000000..78a107b --- /dev/null +++ b/intrastat_base/views/account_fiscal_position.xml @@ -0,0 +1,28 @@ + + + + + intrastat.account.fiscal.position.form + account.fiscal.position + + + + + + + + + intrastat.account.fiscal.position.tree + account.fiscal.position + + + + + + + + diff --git a/intrastat_base/views/intrastat.xml b/intrastat_base/views/intrastat.xml new file mode 100644 index 0000000..befbd84 --- /dev/null +++ b/intrastat_base/views/intrastat.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/intrastat_base/views/product_template.xml b/intrastat_base/views/product_template.xml new file mode 100644 index 0000000..0d4bd9f --- /dev/null +++ b/intrastat_base/views/product_template.xml @@ -0,0 +1,26 @@ + + + + + intrastat.base.product.template.form + product.template + + + + + + + + + + + diff --git a/intrastat_base/views/res_config_settings.xml b/intrastat_base/views/res_config_settings.xml new file mode 100644 index 0000000..1c9ada8 --- /dev/null +++ b/intrastat_base/views/res_config_settings.xml @@ -0,0 +1,36 @@ + + + + + intrastat.res.config.settings.form + res.config.settings + + + +

Intrastat

+
+
+
+
+
+
+
+
+
+ + + + diff --git a/intrastat_base/views/res_partner.xml b/intrastat_base/views/res_partner.xml new file mode 100644 index 0000000..ea4e355 --- /dev/null +++ b/intrastat_base/views/res_partner.xml @@ -0,0 +1,24 @@ + + + + + + res.partner + + + + 1 + + + 1 + + + + diff --git a/intrastat_base/wizards/__init__.py b/intrastat_base/wizards/__init__.py new file mode 100644 index 0000000..0deb68c --- /dev/null +++ b/intrastat_base/wizards/__init__.py @@ -0,0 +1 @@ +from . import res_config_settings diff --git a/intrastat_base/wizards/res_config_settings.py b/intrastat_base/wizards/res_config_settings.py new file mode 100644 index 0000000..2b8adbd --- /dev/null +++ b/intrastat_base/wizards/res_config_settings.py @@ -0,0 +1,14 @@ +# Copyright 2017-2021 Akretion France (http://www.akretion.com/) +# Copyright 2018-2021 brain-tec AG (Kumar Aberer ) +# @author: Alexis de Lattre +# 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_remind_user_ids = fields.Many2many( + related="company_id.intrastat_remind_user_ids", readonly=False + ) diff --git a/setup/intrastat_base/odoo/addons/intrastat_base b/setup/intrastat_base/odoo/addons/intrastat_base new file mode 120000 index 0000000..74df3f8 --- /dev/null +++ b/setup/intrastat_base/odoo/addons/intrastat_base @@ -0,0 +1 @@ +../../../../intrastat_base \ No newline at end of file diff --git a/setup/intrastat_base/setup.py b/setup/intrastat_base/setup.py new file mode 100644 index 0000000..28c57bb --- /dev/null +++ b/setup/intrastat_base/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)