diff options
| author | fw-bot <otis@odoo.com> | 2020-08-10 10:59:17 +0000 |
|---|---|---|
| committer | Josse Colpaert <jco@odoo.com> | 2020-08-10 13:48:57 +0000 |
| commit | 600a1da6c327064e83feed122092c5d0ce1e7894 (patch) | |
| tree | d01535cca0237e9233257e85229823d0afdeada2 /addons/l10n_ar | |
| parent | be63b448450772f161ba95aefeb40aa3d8cea334 (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__.py | 2 | ||||
| -rw-r--r-- | addons/l10n_ar/demo/account_customer_invoice_demo.xml | 41 | ||||
| -rw-r--r-- | addons/l10n_ar/demo/account_customer_refund_demo.xml | 3 | ||||
| -rw-r--r-- | addons/l10n_ar/demo/account_supplier_invoice_demo.xml | 39 | ||||
| -rw-r--r-- | addons/l10n_ar/demo/account_tax_demo.xml | 96 | ||||
| -rw-r--r-- | addons/l10n_ar/demo/account_tax_template_demo.xml | 30 | ||||
| -rw-r--r-- | addons/l10n_ar/demo/product_product_demo.xml | 6 | ||||
| -rw-r--r-- | addons/l10n_ar/models/account_move.py | 67 |
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 [] |
