mirror of
https://github.com/OCA/intrastat-extrastat.git
synced 2025-02-16 17:13:41 +02:00
[IMP] intrastat_product: add support for Brexit + small performance improvement + remove universal hs_code constaint
Add support for post-Brexit VAT numbers with latest python-stdnum version Remove use of country_id.intrastat Add 'vat' field on computation and declaration lines with a simple validity check Add 'partner_id' field on computation lines Prevent back to draft when an XML export is present Remove the universal constaint applied to the hs_codes for countries in the "Europe" list, as discussed in https://github.com/OCA/intrastat-extrastat/pull/116#discussion_r569735555 Co-authored-by: Alexis de Lattre <alexis.delattre@akretion.com> [UPD] Update intrastat_product.pot [UPD] README.rst
This commit is contained in:
committed by
Víctor Martínez
parent
d9cc54740d
commit
5ccd0a5b8d
@@ -21,6 +21,7 @@
|
||||
"report_xlsx_helper",
|
||||
],
|
||||
"excludes": ["account_intrastat"],
|
||||
"external_dependencies": {"python": ["python-stdnum>=1.16"]},
|
||||
"data": [
|
||||
"security/intrastat_security.xml",
|
||||
"security/ir.model.access.csv",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 13.0\n"
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@@ -128,6 +128,11 @@ msgstr ""
|
||||
msgid "Activity State"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:intrastat.transport_mode,name:intrastat_product.intrastat_transport_4
|
||||
msgid "Air"
|
||||
@@ -196,6 +201,12 @@ msgstr ""
|
||||
msgid "Back to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#, python-format
|
||||
msgid "Before going back to draft, you must delete the XML export."
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region__code
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction__code
|
||||
@@ -235,11 +246,6 @@ msgstr ""
|
||||
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
|
||||
@@ -424,6 +430,11 @@ msgstr ""
|
||||
msgid "Default Transport Mode"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
|
||||
msgid "Delete XML Export"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_region__description
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transaction__description
|
||||
@@ -438,7 +449,9 @@ msgid "Destination Country"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__src_dest_country_id
|
||||
#: model:ir.model.fields,help:intrastat_product.field_account_move__src_dest_country_id
|
||||
#: model:ir.model.fields,help:intrastat_product.field_account_payment__src_dest_country_id
|
||||
msgid "Destination country for dispatches. Origin country for arrivals."
|
||||
msgstr ""
|
||||
|
||||
@@ -450,7 +463,10 @@ msgid "Dispatches"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_hs_code__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__display_name
|
||||
@@ -459,6 +475,11 @@ msgstr ""
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_res_company__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_sale_order__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_stock_location__display_name
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
@@ -519,6 +540,11 @@ msgstr ""
|
||||
msgid "Followers (Partners)"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,help:intrastat_product.field_intrastat_product_declaration__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_form
|
||||
@@ -570,7 +596,10 @@ msgid "H.S. Codes"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_hs_code__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__id
|
||||
@@ -579,6 +608,11 @@ msgstr ""
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_res_company__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_sale_order__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_stock_location__id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
@@ -645,28 +679,9 @@ 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_bank_statement_line__intrastat
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_res_company__intrastat
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings__intrastat
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_sale_order__intrastat
|
||||
@@ -765,7 +780,9 @@ msgid "Intrastat Transaction"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_transaction_id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_transaction_id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_transaction_id
|
||||
#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transaction_form
|
||||
msgid "Intrastat Transaction Type"
|
||||
msgstr ""
|
||||
@@ -777,7 +794,9 @@ msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model,name:intrastat_product.model_intrastat_transport_mode
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_transport_id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_transport_id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_transport_id
|
||||
#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_transport_mode_form
|
||||
msgid "Intrastat Transport Mode"
|
||||
msgstr ""
|
||||
@@ -794,12 +813,16 @@ msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model,name:intrastat_product.model_account_move_intrastat_line
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__intrastat_line_ids
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move__intrastat_line_ids
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__intrastat_line_ids
|
||||
msgid "Intrastat declaration details"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__intrastat_transaction_id
|
||||
#: model:ir.model.fields,help:intrastat_product.field_account_move__intrastat_transaction_id
|
||||
#: model:ir.model.fields,help:intrastat_product.field_account_payment__intrastat_transaction_id
|
||||
msgid "Intrastat nature of transaction"
|
||||
msgstr ""
|
||||
|
||||
@@ -851,7 +874,7 @@ msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model,name:intrastat_product.model_account_move
|
||||
msgid "Journal Entries"
|
||||
msgid "Journal Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
@@ -866,7 +889,10 @@ msgid "Kg"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move_intrastat_line____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move_line____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_hs_code____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line____last_update
|
||||
@@ -875,6 +901,11 @@ msgstr ""
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_transport_mode____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_unit____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_report_intrastat_product_product_declaration_xls____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_res_company____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_res_config_settings____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_sale_order____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_stock_location____last_update
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_stock_warehouse____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
@@ -923,6 +954,20 @@ msgstr ""
|
||||
msgid "Missing Intrastat Code on product %s. "
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#, python-format
|
||||
msgid "Missing VAT Number on partner '%s'"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Missing country on invoice partner '%s' or on the delivery address (partner "
|
||||
"'%s'). "
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#, python-format
|
||||
@@ -1033,25 +1078,61 @@ msgstr ""
|
||||
msgid "Number of unread messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"On invoice '%s', the source/destination country is '%s' which is not part of"
|
||||
" the European Union."
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"On invoice '%s', the source/destination country is United-Kingdom and the "
|
||||
"fiscal position is '%s'. Make sure that the fiscal position is right. If the"
|
||||
" origin/destination is Northern Ireland, please set the VAT number of the "
|
||||
"partner '%s' in Odoo with its new VAT number starting with 'XI' following "
|
||||
"Brexit."
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"On invoice '%s', the source/destination country is United-Kingdom, the "
|
||||
"fiscal position is '%s' and the partner's VAT number is '%s'. Make sure that"
|
||||
" the fiscal position is right. If the origin/destination is Northern "
|
||||
"Ireland, please update the VAT number of the partner '%s' in Odoo with its "
|
||||
"new VAT number starting with 'XI' following Brexit."
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model_terms:ir.ui.view,arch_db:intrastat_product.view_move_form
|
||||
msgid "Origin Region"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,help:intrastat_product.field_account_bank_statement_line__src_dest_region_id
|
||||
#: model:ir.model.fields,help:intrastat_product.field_account_move__src_dest_region_id
|
||||
#: model:ir.model.fields,help:intrastat_product.field_account_payment__src_dest_region_id
|
||||
msgid ""
|
||||
"Origin region for dispatches, destination region for arrivals. This field is"
|
||||
" used for the Intrastat Declaration."
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__src_dest_country_id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move__src_dest_country_id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__src_dest_country_id
|
||||
msgid "Origin/Destination Country"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_bank_statement_line__src_dest_region_id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_move__src_dest_region_id
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_account_payment__src_dest_region_id
|
||||
msgid "Origin/Destination Region"
|
||||
msgstr ""
|
||||
|
||||
@@ -1067,6 +1148,13 @@ msgid ""
|
||||
"under their own power, e.g. aircraft, lorries, boats, etc.)"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__partner_id
|
||||
#, python-format
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__year_month
|
||||
msgid "Period"
|
||||
@@ -1199,13 +1287,6 @@ msgstr ""
|
||||
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 ""
|
||||
@@ -1280,10 +1361,10 @@ 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."
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#, python-format
|
||||
msgid "The VAT number '%s' is invalid."
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
@@ -1386,9 +1467,9 @@ 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:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__declaration_type
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__declaration_type
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__declaration_type
|
||||
#: model_terms:ir.ui.view,arch_db:intrastat_product.intrastat_product_declaration_view_search
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
@@ -1418,6 +1499,28 @@ msgstr ""
|
||||
msgid "Used to keep track of changes"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/report/intrastat_product_report_xls.py:0
|
||||
#, python-format
|
||||
msgid "VAT"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__vat
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration_line__vat
|
||||
msgid "VAT Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: code:addons/intrastat_product/models/intrastat_product_declaration.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"VAT number of partner '%s' is '%s'. If this partner is from Northern "
|
||||
"Ireland, his VAT number should be updated to his new VAT number starting "
|
||||
"with 'XI' following Brexit. If this partner is from Great Britain, maybe the"
|
||||
" fiscal position was wrong on invoice '%s' (the fiscal position was '%s')."
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_computation_line__valid
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__valid
|
||||
@@ -1449,9 +1552,19 @@ msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_id
|
||||
msgid "XML Attachment"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_datas
|
||||
msgid "XML Export"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__xml_attachment_name
|
||||
msgid "XML Filename"
|
||||
msgstr ""
|
||||
|
||||
#. module: intrastat_product
|
||||
#: model:ir.model.fields,field_description:intrastat_product.field_intrastat_product_declaration__year
|
||||
msgid "Year"
|
||||
|
||||
@@ -25,15 +25,10 @@ class AccountMove(models.Model):
|
||||
src_dest_country_id = fields.Many2one(
|
||||
comodel_name="res.country",
|
||||
string="Origin/Destination Country",
|
||||
compute="_compute_intrastat_country",
|
||||
compute="_compute_src_dest_country_id",
|
||||
store=True,
|
||||
help="Destination country for dispatches. Origin country for " "arrivals.",
|
||||
)
|
||||
intrastat_country = fields.Boolean(
|
||||
compute="_compute_intrastat_country",
|
||||
string="Intrastat Country",
|
||||
store=True,
|
||||
)
|
||||
src_dest_region_id = fields.Many2one(
|
||||
comodel_name="intrastat.region",
|
||||
string="Origin/Destination Region",
|
||||
@@ -52,13 +47,12 @@ class AccountMove(models.Model):
|
||||
)
|
||||
|
||||
@api.depends("partner_shipping_id.country_id", "partner_id.country_id")
|
||||
def _compute_intrastat_country(self):
|
||||
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
|
||||
inv.intrastat_country = country.intrastat
|
||||
|
||||
@api.model
|
||||
def _default_src_dest_region_id(self):
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# @author Luc de Meyer <info@noviat.com>
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class HSCode(models.Model):
|
||||
@@ -13,24 +12,3 @@ class HSCode(models.Model):
|
||||
intrastat_unit_id = fields.Many2one(
|
||||
comodel_name="intrastat.unit", string="Intrastat Supplementary Unit"
|
||||
)
|
||||
|
||||
@api.constrains("local_code")
|
||||
def _hs_code(self):
|
||||
if self.company_id.country_id.intrastat:
|
||||
if not self.local_code.isdigit():
|
||||
raise ValidationError(
|
||||
_(
|
||||
"Intrastat Codes should only contain digits. "
|
||||
"This is not the case for code '%s'."
|
||||
)
|
||||
% self.local_code
|
||||
)
|
||||
if len(self.local_code) != 8:
|
||||
raise ValidationError(
|
||||
_(
|
||||
"Intrastat Codes should "
|
||||
"contain 8 digits. This is not the case for "
|
||||
"Intrastat Code '%s' which has %d digits."
|
||||
)
|
||||
% (self.local_code, len(self.local_code))
|
||||
)
|
||||
|
||||
@@ -7,6 +7,7 @@ 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
|
||||
@@ -241,15 +242,71 @@ class IntrastatProductDeclaration(models.Model):
|
||||
msg, action.id, _("Go to Accounting Configuration Settings screen")
|
||||
)
|
||||
|
||||
def _get_partner_country(self, inv_line, notedict):
|
||||
country = (
|
||||
inv_line.move_id.src_dest_country_id
|
||||
or inv_line.move_id.partner_id.country_id
|
||||
)
|
||||
if not country.intrastat:
|
||||
country = False
|
||||
elif country == self.company_id.country_id:
|
||||
country = False
|
||||
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):
|
||||
@@ -338,7 +395,7 @@ class IntrastatProductDeclaration(models.Model):
|
||||
)
|
||||
% (source_uom.name, product.display_name)
|
||||
]
|
||||
self._note += self._format_line_note(inv_line, notedict, line_notes)
|
||||
self._format_line_note(inv_line, notedict, line_notes)
|
||||
return weight, suppl_unit_qty
|
||||
|
||||
return weight, suppl_unit_qty
|
||||
@@ -421,6 +478,39 @@ class IntrastatProductDeclaration(models.Model):
|
||||
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 """
|
||||
|
||||
@@ -516,6 +606,7 @@ class IntrastatProductDeclaration(models.Model):
|
||||
"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()
|
||||
@@ -559,22 +650,9 @@ class IntrastatProductDeclaration(models.Model):
|
||||
)
|
||||
continue
|
||||
|
||||
partner_country = self._get_partner_country(inv_line, notedict)
|
||||
if not partner_country:
|
||||
line_notes = [
|
||||
_(
|
||||
"Missing country on invoice partner '%s' "
|
||||
"or on the delivery address (partner '%s'). "
|
||||
)
|
||||
% (
|
||||
invoice.partner_id.display_name,
|
||||
invoice.partner_shipping_id
|
||||
and invoice.partner_shipping_id.display_name
|
||||
or "-",
|
||||
)
|
||||
]
|
||||
self._format_line_note(inv_line, notedict, line_notes)
|
||||
continue
|
||||
partner_country = self._get_partner_country(
|
||||
inv_line, notedict, eu_countries
|
||||
)
|
||||
|
||||
if inv_intrastat_line:
|
||||
hs_code = inv_intrastat_line.hs_code_id
|
||||
@@ -622,6 +700,8 @@ class IntrastatProductDeclaration(models.Model):
|
||||
|
||||
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,
|
||||
@@ -635,6 +715,7 @@ class IntrastatProductDeclaration(models.Model):
|
||||
"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
|
||||
@@ -686,7 +767,6 @@ class IntrastatProductDeclaration(models.Model):
|
||||
def action_gather(self):
|
||||
self.ensure_one()
|
||||
self.message_post(body=_("Generate Lines from Invoices"))
|
||||
self._check_generate_lines()
|
||||
notedict = {
|
||||
"note": "",
|
||||
"line_nbr": 0,
|
||||
@@ -739,6 +819,7 @@ class IntrastatProductDeclaration(models.Model):
|
||||
"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):
|
||||
@@ -758,6 +839,7 @@ class IntrastatProductDeclaration(models.Model):
|
||||
"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
|
||||
@@ -867,6 +949,8 @@ class IntrastatProductDeclaration(models.Model):
|
||||
"suppl_unit_qty",
|
||||
"suppl_unit",
|
||||
"transport",
|
||||
"vat",
|
||||
"partner_id",
|
||||
"invoice",
|
||||
]
|
||||
|
||||
@@ -884,6 +968,7 @@ class IntrastatProductDeclaration(models.Model):
|
||||
"suppl_unit_qty",
|
||||
"suppl_unit",
|
||||
"transport",
|
||||
"vat",
|
||||
]
|
||||
|
||||
@api.model
|
||||
@@ -898,6 +983,11 @@ class IntrastatProductDeclaration(models.Model):
|
||||
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"})
|
||||
|
||||
|
||||
@@ -924,6 +1014,9 @@ class IntrastatProductComputationLine(models.Model):
|
||||
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
|
||||
)
|
||||
@@ -978,6 +1071,7 @@ class IntrastatProductComputationLine(models.Model):
|
||||
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):
|
||||
@@ -985,6 +1079,12 @@ class IntrastatProductComputationLine(models.Model):
|
||||
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
|
||||
@@ -1027,7 +1127,6 @@ class IntrastatProductDeclarationLine(models.Model):
|
||||
"res.country",
|
||||
string="Country",
|
||||
help="Country of Origin/Destination",
|
||||
domain=[("intrastat", "=", True)],
|
||||
)
|
||||
hs_code_id = fields.Many2one("hs.code", string="Intrastat Code")
|
||||
intrastat_unit_id = fields.Many2one(
|
||||
@@ -1058,3 +1157,10 @@ class IntrastatProductDeclarationLine(models.Model):
|
||||
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)
|
||||
|
||||
@@ -145,6 +145,16 @@ class IntrastatProductDeclarationXlsx(models.AbstractModel):
|
||||
"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")},
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils: http://docutils.sourceforge.net/" />
|
||||
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
|
||||
<title>Intrastat Product</title>
|
||||
<style type="text/css">
|
||||
|
||||
|
||||
@@ -224,10 +224,7 @@
|
||||
/>
|
||||
<field name="product_id" />
|
||||
<field name="hs_code_id" />
|
||||
<field
|
||||
name="src_dest_country_id"
|
||||
domain="[('intrastat', '=', True)]"
|
||||
/>
|
||||
<field name="src_dest_country_id" />
|
||||
<field
|
||||
name="amount_company_currency"
|
||||
widget="monetary"
|
||||
@@ -255,6 +252,8 @@
|
||||
<field name="incoterm_id" invisible="1" />
|
||||
<field name="region_id" invisible="1" />
|
||||
<field name="product_origin_country_id" invisible="1" />
|
||||
<field name="vat" />
|
||||
<field name="partner_id" />
|
||||
<field name="invoice_id" />
|
||||
</group>
|
||||
<group string="Declaration" name="declaration">
|
||||
@@ -274,7 +273,7 @@
|
||||
/>
|
||||
<field name="product_id" />
|
||||
<field name="hs_code_id" />
|
||||
<field name="src_dest_country_id" domain="[('intrastat', '=', True)]" />
|
||||
<field name="src_dest_country_id" />
|
||||
<field name="amount_company_currency" />
|
||||
<field name="amount_accessory_cost_company_currency" />
|
||||
<field name="transaction_id" />
|
||||
@@ -294,6 +293,7 @@
|
||||
invisible="1"
|
||||
string="Product C/O"
|
||||
/>
|
||||
<field name="vat" />
|
||||
<field name="invoice_id" />
|
||||
<field name="declaration_type" invisible="1" />
|
||||
<field name="reporting_level" invisible="1" />
|
||||
@@ -311,10 +311,7 @@
|
||||
invisible="not context.get('intrastat_product_declaration_line_main_view')"
|
||||
/>
|
||||
<field name="hs_code_id" />
|
||||
<field
|
||||
name="src_dest_country_id"
|
||||
domain="[('intrastat', '=', True)]"
|
||||
/>
|
||||
<field name="src_dest_country_id" />
|
||||
<field
|
||||
name="amount_company_currency"
|
||||
widget="monetary"
|
||||
@@ -337,6 +334,7 @@
|
||||
<field name="region_id" invisible="1" />
|
||||
<field name="incoterm_id" invisible="1" />
|
||||
<field name="product_origin_country_id" invisible="1" />
|
||||
<field name="vat" />
|
||||
</group>
|
||||
<group name="computation" string="Related Transactions">
|
||||
<field name="computation_line_ids" nolabel="1" />
|
||||
@@ -354,7 +352,7 @@
|
||||
invisible="not context.get('intrastat_product_declaration_line_main_view')"
|
||||
/>
|
||||
<field name="hs_code_id" />
|
||||
<field name="src_dest_country_id" domain="[('intrastat', '=', True)]" />
|
||||
<field name="src_dest_country_id" />
|
||||
<field name="amount_company_currency" />
|
||||
<field name="transaction_id" />
|
||||
<field name="weight" />
|
||||
@@ -373,6 +371,7 @@
|
||||
invisible="1"
|
||||
string="Product C/O"
|
||||
/>
|
||||
<field name="vat" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
Reference in New Issue
Block a user