summaryrefslogtreecommitdiff
path: root/addons/l10n_ar
diff options
context:
space:
mode:
authorfw-bot <otis@odoo.com>2020-08-10 10:59:17 +0000
committerJosse Colpaert <jco@odoo.com>2020-08-10 13:48:57 +0000
commit600a1da6c327064e83feed122092c5d0ce1e7894 (patch)
treed01535cca0237e9233257e85229823d0afdeada2 /addons/l10n_ar
parentbe63b448450772f161ba95aefeb40aa3d8cea334 (diff)
[ADD] l10n_ar: add moved methods from l10n_ar_edi
This method will be change to generic and to be use for both l10n_ar_edi and l10n_ar_reports modules fw-port of 50882 closes odoo/odoo#55687 Related: odoo/enterprise#12329 Signed-off-by: Josse Colpaert <jco@openerp.com>
Diffstat (limited to 'addons/l10n_ar')
-rw-r--r--addons/l10n_ar/__manifest__.py2
-rw-r--r--addons/l10n_ar/demo/account_customer_invoice_demo.xml41
-rw-r--r--addons/l10n_ar/demo/account_customer_refund_demo.xml3
-rw-r--r--addons/l10n_ar/demo/account_supplier_invoice_demo.xml39
-rw-r--r--addons/l10n_ar/demo/account_tax_demo.xml96
-rw-r--r--addons/l10n_ar/demo/account_tax_template_demo.xml30
-rw-r--r--addons/l10n_ar/demo/product_product_demo.xml6
-rw-r--r--addons/l10n_ar/models/account_move.py67
8 files changed, 245 insertions, 39 deletions
diff --git a/addons/l10n_ar/__manifest__.py b/addons/l10n_ar/__manifest__.py
index 213a2656041..bea1b4f11bb 100644
--- a/addons/l10n_ar/__manifest__.py
+++ b/addons/l10n_ar/__manifest__.py
@@ -108,7 +108,7 @@ Master Data:
'demo/mono_demo.xml',
'demo/respinsc_demo.xml',
'demo/res_partner_demo.xml',
- 'demo/account_tax_template_demo.xml',
+ 'demo/account_tax_demo.xml',
'demo/product_product_demo.xml',
'demo/account_customer_invoice_demo.xml',
'demo/account_customer_refund_demo.xml',
diff --git a/addons/l10n_ar/demo/account_customer_invoice_demo.xml b/addons/l10n_ar/demo/account_customer_invoice_demo.xml
index 0c236af119c..0188fce4973 100644
--- a/addons/l10n_ar/demo/account_customer_invoice_demo.xml
+++ b/addons/l10n_ar/demo/account_customer_invoice_demo.xml
@@ -37,7 +37,7 @@
<field name="invoice_user_id" ref="base.user_demo"/>
<field name="invoice_payment_term_id" ref="account.account_payment_term_end_following_month"/>
<field name="move_type">out_invoice</field>
- <field name="invoice_date" eval="time.strftime('%Y-%m')+'-12'"/>
+ <field name="invoice_date" eval="time.strftime('%Y-%m')+'-01'"/>
<field name="company_id" ref="company_ri"/>
<field name="invoice_line_ids" eval="[
(0, 0, {'product_id': ref('product.product_product_27'), 'price_unit': 642.0, 'quantity': 5}),
@@ -51,7 +51,7 @@
<field name="invoice_user_id" ref="base.user_demo"/>
<field name="invoice_payment_term_id" ref="account.account_payment_term_end_following_month"/>
<field name="move_type">out_invoice</field>
- <field name="invoice_date" eval="time.strftime('%Y-%m')+'-12'"/>
+ <field name="invoice_date" eval="time.strftime('%Y-%m')+'-01'"/>
<field name="company_id" ref="company_ri"/>
<field name="invoice_line_ids" eval="[
(0, 0, {'product_id': ref('product.product_product_27'), 'price_unit': 642.0, 'quantity': 5}),
@@ -234,6 +234,7 @@
<field name="invoice_payment_term_id" ref="account.account_payment_term_end_following_month"/>
<field name="move_type">out_invoice</field>
<field name="invoice_date" eval="time.strftime('%Y-%m')+'-22'"/>
+ <field name="invoice_date" eval="time.strftime('%Y-%m')+'-01'"/>
<field name="company_id" ref="company_ri"/>
<field name="invoice_incoterm_id" ref="account.incoterm_EXW"/>
<field name="invoice_line_ids" eval="[
@@ -269,8 +270,23 @@
]"/>
</record>
+ <!-- Invoice to ADHOC with multiple taxes and perceptions -->
+ <record id="demo_invoice_19" model="account.move">
+ <field name="partner_id" ref="l10n_ar.res_partner_adhoc"/>
+ <field name="invoice_user_id" ref="base.user_demo"/>
+ <field name="invoice_payment_term_id" ref="account.account_payment_term_end_following_month"/>
+ <field name="move_type">out_invoice</field>
+ <field name="invoice_date" eval="time.strftime('%Y-%m')+'-13'"/>
+ <field name="company_id" ref="company_ri"/>
+ <field name="invoice_line_ids" eval="[
+ (0, 0, {'product_id': ref('product.product_product_2'), 'price_unit': 24.3, 'quantity': 3, 'name': 'Support Services 8'}),
+ (0, 0, {'product_id': ref('product_product_telefonia'), 'price_unit': 250.0, 'quantity': 1}),
+ (0, 0, {'product_id': ref('product.product_product_25'), 'price_unit': 3245.0, 'quantity': 1}),
+ ]"/>
+ </record>
+
<function model="account.move.line" name="_onchange_product_id" context="{'check_move_validity': False}">
- <value model="account.move.line" eval="obj().search([('move_id', 'in', [ref('demo_invoice_1'), ref('demo_invoice_2'), ref('demo_invoice_3'), ref('demo_invoice_4'), ref('demo_invoice_5'), ref('demo_invoice_6'), ref('demo_invoice_7'), ref('demo_invoice_8'), ref('demo_invoice_10'), ref('demo_invoice_11'), ref('demo_invoice_12'), ref('demo_invoice_13'), ref('demo_invoice_14'), ref('demo_invoice_15'), ref('demo_invoice_16'), ref('demo_invoice_17'), ref('demo_invoice_18')])]).ids"/>
+ <value model="account.move.line" eval="obj().search([('move_id', 'in', [ref('demo_invoice_1'), ref('demo_invoice_2'), ref('demo_invoice_3'), ref('demo_invoice_4'), ref('demo_invoice_5'), ref('demo_invoice_6'), ref('demo_invoice_7'), ref('demo_invoice_8'), ref('demo_invoice_10'), ref('demo_invoice_11'), ref('demo_invoice_12'), ref('demo_invoice_13'), ref('demo_invoice_14'), ref('demo_invoice_15'), ref('demo_invoice_16'), ref('demo_invoice_17'), ref('demo_invoice_18'), ref('demo_invoice_19')])]).ids"/>
</function>
<function model="account.move" name="_onchange_partner_id" context="{'check_move_validity': False}">
@@ -289,13 +305,28 @@
<value eval="[ref('demo_invoice_16')]"/>
</function>
+ <function model="account.move.line" name="write" context="{'check_move_validity': False, 'active_test': False}">
+ <value model="account.move.line" search="[('move_id', '=', ref('demo_invoice_19')), ('product_id', '=', ref('product.product_product_2'))]"/>
+ <value model="account.tax" eval="{'tax_ids': [(4, obj().search([('company_id', '=', ref('company_ri')), ('type_tax_use', '=', 'sale'), ('tax_group_id.l10n_ar_tribute_afip_code', '=', '06')], limit=1).id)]}"/>
+ </function>
+
+ <function model="account.move.line" name="write" context="{'check_move_validity': False, 'active_test': False}">
+ <value model="account.move.line" search="[('move_id', '=', ref('demo_invoice_19')), ('product_id', '=', ref('product_product_telefonia'))]"/>
+ <value model="account.tax" eval="{'tax_ids': [(4, obj().search([('company_id', '=', ref('company_ri')), ('type_tax_use', '=', 'sale'), ('tax_group_id.l10n_ar_tribute_afip_code', '=', '07')], limit=1).id)]}"/>
+ </function>
+
+ <function model="account.move.line" name="write" context="{'check_move_validity': False, 'active_test': False}">
+ <value model="account.move.line" search="[('move_id', '=', ref('demo_invoice_19')), ('product_id', '=', ref('product.product_product_25'))]"/>
+ <value model="account.tax" eval="{'tax_ids': [(4, obj().search([('company_id', '=', ref('company_ri')), ('type_tax_use', '=', 'sale'), ('tax_group_id.l10n_ar_tribute_afip_code', '=', '99')], limit=1).id)]}"/>
+ </function>
+
<function model="account.move" name="_recompute_dynamic_lines" context="{'check_move_validity': False}">
- <value eval="[ref('demo_invoice_1'), ref('demo_invoice_2'), ref('demo_invoice_3'), ref('demo_invoice_4'), ref('demo_invoice_5'), ref('demo_invoice_6'), ref('demo_invoice_7'), ref('demo_invoice_8'), ref('demo_invoice_10'), ref('demo_invoice_11'), ref('demo_invoice_12'), ref('demo_invoice_13'), ref('demo_invoice_14'), ref('demo_invoice_15'), ref('demo_invoice_16'), ref('demo_invoice_17'), ref('demo_invoice_18')]"/>
+ <value eval="[ref('demo_invoice_1'), ref('demo_invoice_2'), ref('demo_invoice_3'), ref('demo_invoice_4'), ref('demo_invoice_5'), ref('demo_invoice_6'), ref('demo_invoice_7'), ref('demo_invoice_8'), ref('demo_invoice_10'), ref('demo_invoice_11'), ref('demo_invoice_12'), ref('demo_invoice_13'), ref('demo_invoice_14'), ref('demo_invoice_15'), ref('demo_invoice_16'), ref('demo_invoice_17'), ref('demo_invoice_18'), ref('demo_invoice_19')]"/>
<value eval="True"/>
</function>
<function model="account.move" name="action_post">
- <value eval="[ref('demo_invoice_1'), ref('demo_invoice_2'), ref('demo_invoice_3'), ref('demo_invoice_4'), ref('demo_invoice_5'), ref('demo_invoice_6'), ref('demo_invoice_7'), ref('demo_invoice_8'), ref('demo_invoice_10'), ref('demo_invoice_11'), ref('demo_invoice_12'), ref('demo_invoice_13'), ref('demo_invoice_14'), ref('demo_invoice_15'), ref('demo_invoice_16'), ref('demo_invoice_17'), ref('demo_invoice_18')]"/>
+ <value eval="[ref('demo_invoice_1'), ref('demo_invoice_2'), ref('demo_invoice_3'), ref('demo_invoice_4'), ref('demo_invoice_5'), ref('demo_invoice_6'), ref('demo_invoice_7'), ref('demo_invoice_8'), ref('demo_invoice_10'), ref('demo_invoice_11'), ref('demo_invoice_12'), ref('demo_invoice_13'), ref('demo_invoice_14'), ref('demo_invoice_15'), ref('demo_invoice_16'), ref('demo_invoice_17'), ref('demo_invoice_18'), ref('demo_invoice_19')]"/>
</function>
</odoo>
diff --git a/addons/l10n_ar/demo/account_customer_refund_demo.xml b/addons/l10n_ar/demo/account_customer_refund_demo.xml
index d5c80ca849e..dd12a6b742a 100644
--- a/addons/l10n_ar/demo/account_customer_refund_demo.xml
+++ b/addons/l10n_ar/demo/account_customer_refund_demo.xml
@@ -6,6 +6,7 @@
<field name="reason">Mercadería defectuosa</field>
<field name="refund_method">refund</field>
<field name="move_ids" eval="[(4, ref('demo_invoice_3'), 0)]"/>
+ <field name="date" eval="time.strftime('%Y-%m')+'-01'"/>
</record>
<function model="account.move.reversal" name="reverse_moves" eval="[ref('demo_refund_invoice_3')]"/>
@@ -15,6 +16,7 @@
<field name="reason">Venta cancelada</field>
<field name="refund_method">cancel</field>
<field name="move_ids" eval="[(4, ref('demo_invoice_4'), 0)]"/>
+ <field name="date" eval="time.strftime('%Y-%m')+'-01'"/>
</record>
<function model="account.move.reversal" name="reverse_moves" eval="[ref('demo_refund_invoice_4')]"/>
@@ -24,6 +26,7 @@
<field name="reason">Venta cancelada</field>
<field name="refund_method">cancel</field>
<field name="move_ids" eval="[(4, ref('demo_invoice_16'), 0)]"/>
+ <field name="date" eval="time.strftime('%Y-%m')+'-01'"/>
</record>
<function model="account.move.reversal" name="reverse_moves" eval="[ref('demo_refund_invoice_16')]"/>
diff --git a/addons/l10n_ar/demo/account_supplier_invoice_demo.xml b/addons/l10n_ar/demo/account_supplier_invoice_demo.xml
index 8882a9e9320..b9f4d88609f 100644
--- a/addons/l10n_ar/demo/account_supplier_invoice_demo.xml
+++ b/addons/l10n_ar/demo/account_supplier_invoice_demo.xml
@@ -109,6 +109,21 @@
]"/>
</record>
+ <!-- Invoice to ADHOC with multiple taxes and perceptions -->
+ <record id="demo_sup_invoice_8" model="account.move">
+ <field name="partner_id" ref="l10n_ar.res_partner_adhoc"/>
+ <field name="invoice_user_id" ref="base.user_demo"/>
+ <field name="invoice_payment_term_id" ref="account.account_payment_term_end_following_month"/>
+ <field name="move_type">in_invoice</field>
+ <field name="invoice_date" eval="time.strftime('%Y-%m')+'-01'"/>
+ <field name="company_id" ref="company_ri"/>
+ <field name="invoice_line_ids" eval="[
+ (0, 0, {'product_id': ref('product.product_product_27'), 'price_unit': 642.0, 'quantity': 5}),
+ (0, 0, {'product_id': ref('product_product_telefonia'), 'price_unit': 250.0, 'quantity': 1}),
+ (0, 0, {'product_id': ref('product.product_product_25'), 'price_unit': 3245.0, 'quantity': 2}),
+ ]"/>
+ </record>
+
<!-- Import Cleareance -->
<record id="demo_despacho_1" model="account.move">
<field name="partner_id" ref="l10n_ar.partner_afip"/>
@@ -237,6 +252,9 @@
<record id="demo_sup_invoice_7" model="account.move">
<field name="l10n_latam_document_number">0001-00000334</field>
</record>
+ <record id="demo_sup_invoice_8" model="account.move">
+ <field name="l10n_latam_document_number">0001-00000335</field>
+ </record>
<record id="demo_despacho_1" model="account.move">
<field name="l10n_latam_document_number">16052IC04000605L</field>
</record>
@@ -267,16 +285,31 @@
</function>
<function model="account.move.line" name="_onchange_product_id" context="{'check_move_validity': False}">
- <value model="account.move.line" eval="obj().search([('move_id', 'in', [ref('demo_sup_invoice_1'), ref('demo_sup_invoice_2'), ref('demo_sup_invoice_3'), ref('demo_sup_invoice_4'), ref('demo_sup_invoice_5'), ref('demo_sup_invoice_6'), ref('demo_sup_invoice_7')])]).ids"/>
+ <value model="account.move.line" eval="obj().search([('move_id', 'in', [ref('demo_sup_invoice_1'), ref('demo_sup_invoice_2'), ref('demo_sup_invoice_3'), ref('demo_sup_invoice_4'), ref('demo_sup_invoice_5'), ref('demo_sup_invoice_6'), ref('demo_sup_invoice_7'), ref('demo_sup_invoice_8')])]).ids"/>
+ </function>
+
+ <function model="account.move.line" name="write" context="{'check_move_validity': False, 'active_test': False}">
+ <value model="account.move.line" search="[('move_id', '=', ref('demo_sup_invoice_8')), ('product_id', '=', ref('product.product_product_27'))]"/>
+ <value model="account.tax" eval="{'tax_ids': [(4, obj().search([('company_id', '=', ref('company_ri')), ('type_tax_use', '=', 'purchase'), ('tax_group_id.l10n_ar_tribute_afip_code', '=', '06')], limit=1).id)]}"/>
+ </function>
+
+ <function model="account.move.line" name="write" context="{'check_move_validity': False, 'active_test': False}">
+ <value model="account.move.line" search="[('move_id', '=', ref('demo_sup_invoice_8')), ('product_id', '=', ref('product_product_telefonia'))]"/>
+ <value model="account.tax" eval="{'tax_ids': [(4, obj().search([('company_id', '=', ref('company_ri')), ('type_tax_use', '=', 'purchase'), ('tax_group_id.l10n_ar_tribute_afip_code', '=', '07')], limit=1).id)]}"/>
+ </function>
+
+ <function model="account.move.line" name="write" context="{'check_move_validity': False, 'active_test': False}">
+ <value model="account.move.line" search="[('move_id', '=', ref('demo_sup_invoice_8')), ('product_id', '=', ref('product.product_product_25'))]"/>
+ <value model="account.tax" eval="{'tax_ids': [(4, obj().search([('company_id', '=', ref('company_ri')), ('type_tax_use', '=', 'purchase'), ('tax_group_id.l10n_ar_tribute_afip_code', '=', '99')], limit=1).id)]}"/>
</function>
<function model="account.move" name="_recompute_dynamic_lines" context="{'check_move_validity': False}">
- <value eval="[ref('demo_sup_invoice_1'), ref('demo_sup_invoice_2'), ref('demo_sup_invoice_3'), ref('demo_sup_invoice_4'), ref('demo_sup_invoice_5'), ref('demo_sup_invoice_6'), ref('demo_sup_invoice_7'), ref('demo_despacho_1')]"/>
+ <value eval="[ref('demo_sup_invoice_1'), ref('demo_sup_invoice_2'), ref('demo_sup_invoice_3'), ref('demo_sup_invoice_4'), ref('demo_sup_invoice_5'), ref('demo_sup_invoice_6'), ref('demo_sup_invoice_7'), ref('demo_sup_invoice_8'), ref('demo_despacho_1')]"/>
<value eval="True"/>
</function>
<function model="account.move" name="action_post">
- <value eval="[ref('demo_sup_invoice_1'), ref('demo_sup_invoice_2'), ref('demo_sup_invoice_3'), ref('demo_sup_invoice_4'), ref('demo_sup_invoice_5'), ref('demo_sup_invoice_6'), ref('demo_sup_invoice_7'), ref('demo_despacho_1')]"/>
+ <value eval="[ref('demo_sup_invoice_1'), ref('demo_sup_invoice_2'), ref('demo_sup_invoice_3'), ref('demo_sup_invoice_4'), ref('demo_sup_invoice_5'), ref('demo_sup_invoice_6'), ref('demo_sup_invoice_7'), ref('demo_sup_invoice_8'), ref('demo_despacho_1')]"/>
</function>
</odoo>
diff --git a/addons/l10n_ar/demo/account_tax_demo.xml b/addons/l10n_ar/demo/account_tax_demo.xml
new file mode 100644
index 00000000000..b4f29555eed
--- /dev/null
+++ b/addons/l10n_ar/demo/account_tax_demo.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<odoo>
+
+ <record id="ri_tax_other_taxes_ventas" model="account.tax">
+ <field name="name">Other Tax</field>
+ <field name="description">Other Tax</field>
+ <field name="sequence">4</field>
+ <field name="amount_type">fixed</field>
+ <field name="amount" eval="0.1"/>
+ <field name="invoice_repartition_line_ids" model="account.account" eval="[(5, 0, 0),
+ (0,0, {
+ 'factor_percent': 100,
+ 'repartition_type': 'base',
+ }),
+
+ (0,0, {
+ 'factor_percent': 100,
+ 'repartition_type': 'tax',
+ 'account_id': obj().search([
+ ('company_id', '=', obj().env.ref('l10n_ar.company_ri').id),
+ ('group_id', '=', obj().env.ref('l10n_ar.account_group_otros_impuestos').id)
+ ], limit=1).id,
+ }),
+ ]"/>
+ <field name="refund_repartition_line_ids" model="account.account" eval="[(5, 0, 0),
+ (0,0, {
+ 'factor_percent': 100,
+ 'repartition_type': 'base',
+ }),
+
+ (0,0, {
+ 'factor_percent': 100,
+ 'repartition_type': 'tax',
+ 'account_id': obj().search([
+ ('company_id', '=', obj().env.ref('l10n_ar.company_ri').id),
+ ('group_id', '=', obj().env.ref('l10n_ar.account_group_otros_impuestos').id)
+ ], limit=1).id,
+ }),
+ ]"/>
+ <field name="type_tax_use">sale</field>
+ <field name="tax_group_id" ref="account.tax_group_taxes"/>
+ <field name="company_id" ref="l10n_ar.company_ri"/>
+ </record>
+
+ <record id="ri_tax_other_taxes_compras" model="account.tax">
+ <field name="name">Other Tax</field>
+ <field name="description">Other Tax</field>
+ <field name="sequence">4</field>
+ <field name="amount_type">fixed</field>
+ <field name="amount" eval="0.1"/>
+ <field name="invoice_repartition_line_ids" model="account.account" eval="[(5, 0, 0),
+ (0,0, {
+ 'factor_percent': 100,
+ 'repartition_type': 'base',
+ }),
+
+ (0,0, {
+ 'factor_percent': 100,
+ 'repartition_type': 'tax',
+ 'account_id': obj().search([
+ ('company_id', '=', obj().env.ref('l10n_ar.company_ri').id),
+ ('group_id', '=', obj().env.ref('l10n_ar.account_group_otros_impuestos').id)
+ ], limit=1).id,
+
+ }),
+ ]"/>
+ <field name="refund_repartition_line_ids" model="account.account" eval="[(5, 0, 0),
+ (0,0, {
+ 'factor_percent': 100,
+ 'repartition_type': 'base',
+ }),
+
+ (0,0, {
+ 'factor_percent': 100,
+ 'repartition_type': 'tax',
+ 'account_id': obj().search([
+ ('company_id', '=', obj().env.ref('l10n_ar.company_ri').id),
+ ('group_id', '=', obj().env.ref('l10n_ar.account_group_otros_impuestos').id)
+ ], limit=1).id,
+ }),
+ ]"/>
+ <field name="type_tax_use">purchase</field>
+ <field name="tax_group_id" ref="account.tax_group_taxes"/>
+ <field name="company_id" ref="l10n_ar.company_ri"/>
+ </record>
+
+ <!-- for demo data we activate all the taxes related to perception iva iibb and other taxes for the already created demo companies -->
+
+ <function model="account.tax" name="write" context="{'active_test': False}">
+ <value model="account.tax" eval="obj().search([('company_id', '=', ref('company_ri')), ('tax_group_id', 'in',
+ [ref('tax_group_percepcion_iva'), ref('tax_group_percepcion_ganancias'), ref('tax_group_percepcion_iibb'), ref('account.tax_group_taxes')]
+ )]).ids"/>
+ <value eval="{'amount': 0.1, 'active': True}"/>
+ </function>
+
+</odoo>
diff --git a/addons/l10n_ar/demo/account_tax_template_demo.xml b/addons/l10n_ar/demo/account_tax_template_demo.xml
deleted file mode 100644
index 92150b7c82b..00000000000
--- a/addons/l10n_ar/demo/account_tax_template_demo.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<odoo>
-
- <!-- for demo data we add aliquots to the perceptions applied and suffered -->
-
- <record id="l10n_ar.ri_tax_percepcion_iva_aplicada" model="account.tax.template">
- <field eval="0.1" name="amount"/>
- </record>
-
- <record id="l10n_ar.ri_tax_percepcion_ganancias_aplicada" model="account.tax.template">
- <field eval="0.1" name="amount"/>
- </record>
-
- <record id="l10n_ar.ri_tax_percepcion_ganancias_sufrida" model="account.tax.template">
- <field eval="0.1" name="amount"/>
- </record>
-
- <record id="l10n_ar.ri_tax_percepcion_iibb_caba_sufrida" model="account.tax.template">
- <field eval="0.1" name="amount"/>
- </record>
-
- <record id="l10n_ar.ri_tax_percepcion_iibb_aplicada" model="account.tax.template">
- <field eval="0.1" name="amount"/>
- </record>
-
- <record id="l10n_ar.ri_tax_percepcion_iva_sufrida" model="account.tax.template">
- <field eval="0.1" name="amount"/>
- </record>
-
-</odoo>
diff --git a/addons/l10n_ar/demo/product_product_demo.xml b/addons/l10n_ar/demo/product_product_demo.xml
index af73af7b227..c2edf69850a 100644
--- a/addons/l10n_ar/demo/product_product_demo.xml
+++ b/addons/l10n_ar/demo/product_product_demo.xml
@@ -85,6 +85,10 @@
<field name="supplier_taxes_id" search="[('type_tax_use', '=', 'purchase'), ('tax_group_id', '=', 'VAT 27%')]"/>
</record>
+ <record id="product.product_product_2" model="product.product">
+ <field name="standard_price">45.5</field>
+ </record>
+
<!-- VAT 10,5% -->
<record id="product.product_product_25" model="product.product">
@@ -92,12 +96,14 @@
<!-- agregamos percecipn aplicada y sufrida tambien -->
<field name="taxes_id" search="[('type_tax_use', '=', 'sale'), ('tax_group_id', 'in', ['VAT 10.5%', 'Percepción IIBB', 'Percepción Ganancias', 'Percepción IVA'])]"/>
<field name="supplier_taxes_id" search="[('type_tax_use', '=', 'purchase'), ('tax_group_id', 'in', ['VAT 10.5%', 'Percepción IIBB', 'Percepción Ganancias', 'Percepción IVA'])]"/>
+ <field name="standard_price">3280.0</field>
</record>
<record id="product.product_product_27" model="product.product">
<field name="name">Laptop Customized (VAT 10,5)</field>
<field name="taxes_id" search="[('type_tax_use', '=', 'sale'), ('tax_group_id', '=', 'VAT 10.5%')]"/>
<field name="supplier_taxes_id" search="[('type_tax_use', '=', 'purchase'), ('tax_group_id', '=', 'VAT 10.5%')]"/>
+ <field name="standard_price">4500.0</field>
</record>
</odoo>
diff --git a/addons/l10n_ar/models/account_move.py b/addons/l10n_ar/models/account_move.py
index 19894f44911..c6617ee81a7 100644
--- a/addons/l10n_ar/models/account_move.py
+++ b/addons/l10n_ar/models/account_move.py
@@ -212,3 +212,70 @@ class AccountMove(models.Model):
param['l10n_latam_document_type_ids'] = tuple(self.l10n_latam_document_type_id.search(
[('l10n_ar_letter', '=', self.l10n_latam_document_type_id.l10n_ar_letter)]).ids)
return where_string, param
+
+ def _get_name_invoice_report(self, report_xml_id):
+ self.ensure_one()
+ if self.l10n_latam_use_documents and self.company_id.country_id.code == 'AR':
+ custom_report = {
+ 'account.report_invoice_document_with_payments': 'l10n_ar.report_invoice_document_with_payments',
+ 'account.report_invoice_document': 'l10n_ar.report_invoice_document',
+ }
+ return custom_report.get(report_xml_id) or report_xml_id
+ return super()._get_name_invoice_report(report_xml_id)
+
+ def _l10n_ar_get_amounts(self, company_currency=False):
+ """ Method used to prepare data to present amounts and taxes related amounts when creating an
+ electronic invoice for argentinian and the txt files for digital VAT books. Only take into account the argentinian taxes """
+ self.ensure_one()
+ amount_field = company_currency and 'balance' or 'price_subtotal'
+ # if we use balance we need to correct sign (on price_subtotal is positive for refunds and invoices)
+ sign = -1 if (company_currency and self.is_inbound()) else 1
+ tax_lines = self.line_ids.filtered('tax_line_id')
+ vat_taxes = tax_lines.filtered(lambda r: r.tax_line_id.tax_group_id.l10n_ar_vat_afip_code)
+
+ vat_taxable = self.env['account.move.line']
+ for line in self.invoice_line_ids:
+ if any(tax.tax_group_id.l10n_ar_vat_afip_code and tax.tax_group_id.l10n_ar_vat_afip_code not in ['0', '1', '2'] for tax in line.tax_ids):
+ vat_taxable |= line
+
+ profits_tax_group = self.env.ref('l10n_ar.tax_group_percepcion_ganancias')
+ return {'vat_amount': sign * sum(vat_taxes.mapped(amount_field)),
+ # For invoices of letter C should not pass VAT
+ 'vat_taxable_amount': sign * sum(vat_taxable.mapped(amount_field)) if self.l10n_latam_document_type_id.l10n_ar_letter != 'C' else self.amount_untaxed,
+ 'vat_exempt_base_amount': sign * sum(self.invoice_line_ids.filtered(lambda x: x.tax_ids.filtered(lambda y: y.tax_group_id.l10n_ar_vat_afip_code == '2')).mapped(amount_field)),
+ 'vat_untaxed_base_amount': sign * sum(self.invoice_line_ids.filtered(lambda x: x.tax_ids.filtered(lambda y: y.tax_group_id.l10n_ar_vat_afip_code == '1')).mapped(amount_field)),
+ # used on FE
+ 'not_vat_taxes_amount': sign * sum((tax_lines - vat_taxes).mapped(amount_field)),
+ # used on BFE + TXT
+ 'iibb_perc_amount': sign * sum(tax_lines.filtered(lambda r: r.tax_line_id.tax_group_id.l10n_ar_tribute_afip_code == '07').mapped(amount_field)),
+ 'mun_perc_amount': sign * sum(tax_lines.filtered(lambda r: r.tax_line_id.tax_group_id.l10n_ar_tribute_afip_code == '08').mapped(amount_field)),
+ 'intern_tax_amount': sign * sum(tax_lines.filtered(lambda r: r.tax_line_id.tax_group_id.l10n_ar_tribute_afip_code == '04').mapped(amount_field)),
+ 'other_taxes_amount': sign * sum(tax_lines.filtered(lambda r: r.tax_line_id.tax_group_id.l10n_ar_tribute_afip_code == '99').mapped(amount_field)),
+ 'profits_perc_amount': sign * sum(tax_lines.filtered(lambda r: r.tax_line_id.tax_group_id == profits_tax_group).mapped(amount_field)),
+ 'vat_perc_amount': sign * sum(tax_lines.filtered(lambda r: r.tax_line_id.tax_group_id.l10n_ar_tribute_afip_code == '06').mapped(amount_field)),
+ 'other_perc_amount': sign * sum(tax_lines.filtered(lambda r: r.tax_line_id.tax_group_id.l10n_ar_tribute_afip_code == '09' and r.tax_line_id.tax_group_id != profits_tax_group).mapped(amount_field)),
+ }
+
+ def _get_vat(self, company_currency=False):
+ """ Applies on wsfe web service and in the VAT digital books """
+ amount_field = company_currency and 'balance' or 'price_subtotal'
+ # if we use balance we need to correct sign (on price_subtotal is positive for refunds and invoices)
+ sign = -1 if (company_currency and self.is_inbound()) else 1
+ res = []
+ vat_taxable = self.env['account.move.line']
+ # get all invoice lines that are vat taxable
+ for line in self.line_ids:
+ if any(tax.tax_group_id.l10n_ar_vat_afip_code and tax.tax_group_id.l10n_ar_vat_afip_code not in ['0', '1', '2'] for tax in line.tax_line_id) and line[amount_field]:
+ vat_taxable |= line
+ for vat in vat_taxable:
+ base_imp = sum(self.invoice_line_ids.filtered(lambda x: x.tax_ids.filtered(lambda y: y.tax_group_id.l10n_ar_vat_afip_code == vat.tax_line_id.tax_group_id.l10n_ar_vat_afip_code)).mapped(amount_field))
+ res += [{'Id': vat.tax_line_id.tax_group_id.l10n_ar_vat_afip_code,
+ 'BaseImp': sign * base_imp,
+ 'Importe': sign * vat[amount_field]}]
+
+ # Report vat 0%
+ vat_base_0 = sign * sum(self.invoice_line_ids.filtered(lambda x: x.tax_ids.filtered(lambda y: y.tax_group_id.l10n_ar_vat_afip_code == '3')).mapped(amount_field))
+ if vat_base_0:
+ res += [{'Id': '3', 'BaseImp': vat_base_0, 'Importe': 0.0}]
+
+ return res if res else []