diff --git a/addons/l10n_pe/__manifest__.py b/addons/l10n_pe/__manifest__.py
index de28a3f4151..b94a3516600 100644
--- a/addons/l10n_pe/__manifest__.py
+++ b/addons/l10n_pe/__manifest__.py
@@ -3,7 +3,7 @@
'name': 'Peru - Accounting',
'icon': '/account/static/description/l10n.png',
'countries': ['pe'],
- 'version': '2.0',
+ 'version': '3.0',
'category': 'Accounting/Localizations/Account Charts',
'author': 'Vauxoo, Odoo S.A.',
'website': 'https://www.odoo.com/documentation/master/applications/finance/fiscal_localizations/peru.html',
diff --git a/addons/l10n_pe/data/l10n_latam_document_type_data.xml b/addons/l10n_pe/data/l10n_latam_document_type_data.xml
index 97c3821b9bf..589f5ac7d41 100644
--- a/addons/l10n_pe/data/l10n_latam_document_type_data.xml
+++ b/addons/l10n_pe/data/l10n_latam_document_type_data.xml
@@ -9,6 +9,15 @@
F
invoice
+
+ 10
+ 02
+ Recibo por Honorarios
+ Recibo por Honorarios
+
+ R
+ invoice
+
20
03
@@ -18,6 +27,33 @@
B
invoice
+
+ 20
+ 04
+ Liquidación de compra
+ Liquidación de compra
+
+ L
+ invoice
+
+
+ 20
+ 05
+ Boletos de Transporte Aéreo que emiten las Compañías de Aviación Comercial por el servicio de transporte aéreo regular de pasajeros, emitido de manera manual, mecanizada o por medios electrónicos (BME)
+ Boletos de Transporte Aéreo que emiten las Compañías de Aviación Comercial por el servicio de transporte aéreo regular de pasajeros, emitido de manera manual, mecanizada o por medios electrónicos (BME)
+
+ B
+ invoice
+
+
+ 20
+ 06
+ Carta de porte aéreo por el servicio de transporte de carga aérea
+ Carta de porte aéreo por el servicio de transporte de carga aérea
+
+ C
+ invoice
+
40
07
@@ -54,6 +90,96 @@
B
debit_note
+
+ 50
+ 10
+ Recibo por Arrendamiento
+ Recibo por Arrendamiento
+
+ R
+ invoice
+
+
+ 50
+ 11
+ Póliza emitida por las Bolsas de Valores, Bolsas de Productos o Agentes de Intermediación por operaciones realizadas en las Bolsas de Valores o Productos o fuera de las mismas, autorizadas por SMV
+ Póliza emitida por las Bolsas de Valores, Bolsas de Productos o Agentes de Intermediación por operaciones realizadas en las Bolsas de Valores o Productos o fuera de las mismas, autorizadas por SMV
+
+ P
+ invoice
+
+
+ 50
+ 12
+ Ticket o cinta emitido por máquina registradora
+ Ticket o cinta emitido por máquina registradora
+
+ T
+ invoice
+
+
+ 50
+ 13
+ Documentos emitidos por las empresas del sistema financiero y de seguros, y por las cooperativas de ahorro y crédito no autorizadas a captar recursos del público, que se encuentren bajo el control de la Superintendencia de Banca, Seguros y AFP.
+ Documentos emitidos por las empresas del sistema financiero y de seguros, y por las cooperativas de ahorro y crédito no autorizadas a captar recursos del público, que se encuentren bajo el control de la Superintendencia de Banca, Seguros y AFP.
+
+ D
+ invoice
+
+
+ 50
+ 14
+ Recibo por servicios públicos de suministro de energía eléctrica, agua, teléfono, telex y telegráficos y otros servicios complementarios que se incluyan en el
+ Recibo por servicios públicos de suministro de energía eléctrica, agua, teléfono, telex y telegráficos y otros servicios complementarios que se incluyan en el
+
+ R
+ invoice
+
+
+ 50
+ 15
+ Boletos emitidos por el servicio de transporte terrestre regular urbano de pasajeros y el ferroviario público de pasajeros prestado en vía férrea local.
+ Boletos emitidos por el servicio de transporte terrestre regular urbano de pasajeros y el ferroviario público de pasajeros prestado en vía férrea local.
+
+ B
+ invoice
+
+
+ 50
+ 16
+ Boletos de viaje emitidos por las empresas de transporte nacional de pasajeros, siempre que cuenten con la autorización de la autoridad competente, en las rutas autorizadas. Vía terrestre o ferroviario público no emitido por medios electrónicos (BVME)
+ Boletos de viaje emitidos por las empresas de transporte nacional de pasajeros, siempre que cuenten con la autorización de la autoridad competente, en las rutas autorizadas. Vía terrestre o ferroviario público no emitido por medios electrónicos (BVME)
+
+ B
+ invoice
+
+
+ 50
+ 17
+ Documento emitido por la Iglesia Católica por el arrendamiento de bienes inmuebles
+ Documento emitido por la Iglesia Católica por el arrendamiento de bienes inmuebles
+
+ D
+ invoice
+
+
+ 50
+ 18
+ Documento emitido por las Administradoras Privadas de Fondo de Pensiones que se encuentran bajo la supervisión de la Superintendencia de Banca, Seguros y AFP
+ Documento emitido por las Administradoras Privadas de Fondo de Pensiones que se encuentran bajo la supervisión de la Superintendencia de Banca, Seguros y AFP
+
+ D
+ invoice
+
+
+ 50
+ 19
+ Boleto o entrada por atracciones y espectáculos públicos
+ Boleto o entrada por atracciones y espectáculos públicos
+
+ B
+ invoice
+
60
20
@@ -63,6 +189,150 @@
R
+
+ 60
+ 21
+ Conocimiento de embarque por el servicio de transporte de carga marítima
+ Conocimiento de embarque por el servicio de transporte de carga marítima
+
+ B
+ invoice
+
+
+ 60
+ 22
+ Comprobante por Operaciones No Habituales
+ Comprobante por Operaciones No Habituales
+
+ C
+ invoice
+
+
+ 60
+ 23
+ Pólizas de Adjudicación emitidas con ocasión del remate o adjudicación de bienes por venta forzada, por los martilleros o las entidades que rematen o subasten bienes por cuenta de terceros
+ Pólizas de Adjudicación emitidas con ocasión del remate o adjudicación de bienes por venta forzada, por los martilleros o las entidades que rematen o subasten bienes por cuenta de terceros
+
+ C
+ invoice
+
+
+ 60
+ 24
+ Certificado de pago de regalías emitidas por PERUPETRO S.A
+ Certificado de pago de regalías emitidas por PERUPETRO S.A
+
+ C
+ invoice
+
+
+ 60
+ 25
+ Documento de Atribución (Ley del Impuesto General a las Ventas e Impuesto Selectivo al Consumo, Art. 19º, último párrafo, R.S. N° 022-98-SUNAT).
+ Documento de Atribución (Ley del Impuesto General a las Ventas e Impuesto Selectivo al Consumo, Art. 19º, último párrafo, R.S. N° 022-98-SUNAT).
+
+ D
+ invoice
+
+
+ 60
+ 26
+ Recibo por el Pago de la Tarifa por Uso de Agua Superficial con fines agrarios y por el pago de la Cuota para la ejecución de una determinada obra o actividad acordada por la Asamblea General de la Comisión de Regantes o Resolución expedida por el Jefe de la Unidad de Aguas y de Riego (Decreto Supremo N° 003-90-AG, Arts. 28 y 48)
+ Recibo por el Pago de la Tarifa por Uso de Agua Superficial con fines agrarios y por el pago de la Cuota para la ejecución de una determinada obra o actividad acordada por la Asamblea General de la Comisión de Regantes o Resolución expedida por el Jefe de la Unidad de Aguas y de Riego (Decreto Supremo N° 003-90-AG, Arts. 28 y 48)
+
+ R
+ invoice
+
+
+ 60
+ 27
+ Seguro Complementario de Trabajo de Riesgo
+ Seguro Complementario de Trabajo de Riesgo
+
+ S
+ invoice
+
+
+ 60
+ 28
+ Documentos emitidos por los servicios aeroportuarios prestados a favor de los pasajeros, mediante mecanismo de etiquetas autoadhesivas.
+ Documentos emitidos por los servicios aeroportuarios prestados a favor de los pasajeros, mediante mecanismo de etiquetas autoadhesivas.
+
+ D
+ invoice
+
+
+ 60
+ 29
+ Documentos emitidos por la COFOPRI en calidad de oferta de venta de terrenos, los correspondientes a las subastas públicas y a la retribución de los servicios que presta
+ Documentos emitidos por la COFOPRI en calidad de oferta de venta de terrenos, los correspondientes a las subastas públicas y a la retribución de los servicios que presta
+
+ D
+ invoice
+
+
+ 60
+ 30
+ Documentos emitidos por las empresas que desempeñan el rol adquirente en los sistemas de pago mediante tarjetas de crédito y débito, emitidas por bancos e instituciones financieras o crediticias, domiciliados o no en el país.
+ Documentos emitidos por las empresas que desempeñan el rol adquirente en los sistemas de pago mediante tarjetas de crédito y débito, emitidas por bancos e instituciones financieras o crediticias, domiciliados o no en el país.
+
+ D
+ invoice
+
+
+ 60
+ 32
+ Documentos emitidos por las empresas recaudadoras de la denominada Garantía de Red Principal a la que hace referencia el numeral 7.6 del artículo 7° de la Ley N° 27133 – Ley de Promoción del Desarrollo de la Industria del Gas Natural
+ Documentos emitidos por las empresas recaudadoras de la denominada Garantía de Red Principal a la que hace referencia el numeral 7.6 del artículo 7° de la Ley N° 27133 – Ley de Promoción del Desarrollo de la Industria del Gas Natural
+
+ D
+ invoice
+
+
+ 60
+ 33
+ Manifiesto de Pasajeros
+ Manifiesto de Pasajeros
+
+ M
+ invoice
+
+
+ 60
+ 34
+ Documento del Operador
+ Documento del Operador
+
+ D
+ invoice
+
+
+ 60
+ 35
+ Documento del Partícipe
+ Documento del Partícipe
+
+ D
+ invoice
+
+
+ 60
+ 36
+ Recibo de Distribución de Gas Natural
+ Recibo de Distribución de Gas Natural
+
+ R
+ invoice
+
+
+ 60
+ 37
+ Documentos que emitan los concesionarios del servicio de revisiones técnicas vehiculares, por la prestación de dicho servicio
+ Documentos que emitan los concesionarios del servicio de revisiones técnicas vehiculares, por la prestación de dicho servicio
+
+ D
+ invoice
+
60
40
@@ -72,4 +342,202 @@
P
+
+ 70
+ 41
+ Comprobante de Percepción - Venta interna
+ Comprobante de Percepción - Venta interna
+
+ C
+ invoice
+
+
+ 70
+ 42
+ Documentos emitidos por las empresas que desempeñan el rol adquiriente en los sistemas de pago mediante tarjetas de crédito emitidas por ellas mismas
+ Documentos emitidos por las empresas que desempeñan el rol adquiriente en los sistemas de pago mediante tarjetas de crédito emitidas por ellas mismas
+
+ D
+ invoice
+
+
+ 70
+ 43
+ Boletos emitidos por las Compañías de Aviación Comercial que prestan servicios de transporte aéreo no regular de pasajeros y transporte aéreo especial de pasajeros.
+ Boletos emitidos por las Compañías de Aviación Comercial que prestan servicios de transporte aéreo no regular de pasajeros y transporte aéreo especial de pasajeros.
+
+ B
+ invoice
+
+
+ 70
+ 44
+ Billetes de lotería, rifas y apuestas.
+ Billetes de lotería, rifas y apuestas.
+
+ B
+ invoice
+
+
+ 70
+ 45
+ Documentos emitidos por centros educativos y culturales, universidades, asociaciones y fundaciones, en lo referente a actividades no gravadas con tributos administrados por la SUNAT.
+ Documentos emitidos por centros educativos y culturales, universidades, asociaciones y fundaciones, en lo referente a actividades no gravadas con tributos administrados por la SUNAT.
+
+ D
+ invoice
+
+
+ 70
+ 46
+ Formulario de Declaración - pago o Boleta de pago de tributos Internos
+ Formulario de Declaración - pago o Boleta de pago de tributos Internos
+
+ F
+ invoice
+
+
+ 70
+ 48
+ Comprobante de Operaciones - Ley N° 29972
+ Comprobante de Operaciones - Ley N° 29972
+
+ C
+ invoice
+
+
+ 70
+ 49
+ Constancia de Depósito - IVAP (Ley 28211)
+ Constancia de Depósito - IVAP (Ley 28211)
+
+ C
+ invoice
+
+
+ 70
+ 50
+ Declaración Única de Aduanas - Importación definitiva
+ Declaración Única de Aduanas - Importación definitiva
+
+ D
+ invoice
+
+
+ 70
+ 51
+ Póliza o DUI Fraccionada
+ Póliza o DUI Fraccionada
+
+ P
+ invoice
+
+
+ 70
+ 52
+ Despacho Simplificado - Importación Simplificada
+ Despacho Simplificado - Importación Simplificada
+
+ D
+ invoice
+
+
+ 70
+ 53
+ Declaración de Mensajería o Courier
+ Declaración de Mensajería o Courier
+
+ D
+ invoice
+
+
+ 70
+ 54
+ Liquidación de Cobranza
+ Liquidación de Cobranza
+
+ L
+ invoice
+
+
+ 70
+ 55
+ BVME para transporte ferroviario de pasajeros
+ BVME para transporte ferroviario de pasajeros
+
+ B
+ invoice
+
+
+ 70
+ 56
+ Comprobante de pago SEAE
+ Comprobante de pago SEAE
+
+ C
+ invoice
+
+
+ 70
+ 87
+ Nota de Crédito Especial
+ Nota de Crédito Especial
+
+ N
+ credit_note
+
+
+ 70
+ 88
+ Nota de Débito Especial
+ Nota de Débito Especial
+
+ N
+ debit_note
+
+
+ 70
+ 89
+ Nota de Ajuste de Operaciones - Ley N° 29972
+ Nota de Ajuste de Operaciones - Ley N° 29972
+
+ N
+ invoice
+
+
+ 70
+ 91
+ Comprobante de No Domiciliado
+ Comprobante de No Domiciliado
+
+ C
+ invoice
+
+
+ 70
+ 96
+ Exceso de crédito fiscal por retiro de bienes
+ Exceso de crédito fiscal por retiro de bienes
+
+ E
+ invoice
+
+
+ 70
+ 97
+ Nota de Crédito - No Domiciliado
+ Nota de Crédito - No Domiciliado
+
+ N
+ credit_note
+
+
+ 70
+ 98
+ Nota de Débito - No Domiciliado
+ Nota de Débito - No Domiciliado
+
+ N
+ debit_note
+
diff --git a/addons/l10n_pe/data/template/account.tax-pe.csv b/addons/l10n_pe/data/template/account.tax-pe.csv
index 18bf38c640b..45401bf730a 100644
--- a/addons/l10n_pe/data/template/account.tax-pe.csv
+++ b/addons/l10n_pe/data/template/account.tax-pe.csv
@@ -31,6 +31,18 @@
"","","","","","","","","","","","","tax","invoice","chart40111","",""
"","","","","","","","","","","","","base","refund","","",""
"","","","","","","","","","","","","tax","refund","chart40111","",""
+"purchase_tax_igv_18g_ng","18% Levied and Not Taxed","","IGV","1000","S","18.0","purchase","1","1","tax_group_igv_g_ng","True","base","invoice","","","18% Gravadas y No Gravada"
+"","","","","","","","","","","","","tax","invoice","chart40117","",""
+"","","","","","","","","","","","","base","refund","","",""
+"","","","","","","","","","","","","tax","refund","chart40117","",""
+"purchase_tax_igv_18_ng","18% Not Levied","","IGV NG","1000","S","18.0","purchase","1","1","tax_group_igv_ng","True","base","invoice","","","18% No Gravadas"
+"","","","","","","","","","","","","tax","invoice","chart40116","",""
+"","","","","","","","","","","","","base","refund","","",""
+"","","","","","","","","","","","","tax","refund","chart40116","",""
+"purchase_tax_exp_0","0% EXP","","EXP","9995","S","18.0","purchase","1","1","tax_group_exp","True","base","invoice","","","0% EXP"
+"","","","","","","","","","","","","tax","invoice","chart40115","",""
+"","","","","","","","","","","","","base","refund","","",""
+"","","","","","","","","","","","","tax","refund","chart40115","",""
"purchase_tax_exo","0% Exo","","EXO","9997","E","0.0","purchase","1","","tax_group_exo","","base","invoice","","","0% Exonerado"
"","","","","","","","","","","","","tax","invoice","chart40111","",""
"","","","","","","","","","","","","base","refund","","",""
diff --git a/addons/l10n_pe/data/template/account.tax.group-pe.csv b/addons/l10n_pe/data/template/account.tax.group-pe.csv
index 10e8ff6853d..6f4c5db43fb 100644
--- a/addons/l10n_pe/data/template/account.tax.group-pe.csv
+++ b/addons/l10n_pe/data/template/account.tax.group-pe.csv
@@ -1,5 +1,7 @@
"id","name","sequence","country_id","name@es"
"tax_group_igv","IGV","0","base.pe","IGV"
+"tax_group_igv_g_ng","IGV GyNG","0","base.pe","IGV GyNG"
+"tax_group_igv_ng","IGV NG","0","base.pe","IGV NG"
"tax_group_ivap","IVAP","0","base.pe","IVAP"
"tax_group_isc","ISC","0","base.pe","ISC"
"tax_group_exp","EXP","0","base.pe","EXP"
@@ -9,3 +11,4 @@
"tax_group_other","OTHERS","0","base.pe","OTROS"
"tax_group_det","DET","100","base.pe","DET"
"tax_group_icbper","ICBPER","0","base.pe",""
+"tax_group_ret","RET","100","base.pe","RET"
\ No newline at end of file
diff --git a/addons/l10n_pe/demo/account_demo.py b/addons/l10n_pe/demo/account_demo.py
index dcb40036afe..be473c8c47c 100644
--- a/addons/l10n_pe/demo/account_demo.py
+++ b/addons/l10n_pe/demo/account_demo.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
-from odoo import api, models
+from datetime import datetime, timedelta
+from odoo import api, Command, models
class AccountChartTemplate(models.AbstractModel):
@@ -8,16 +9,140 @@ class AccountChartTemplate(models.AbstractModel):
@api.model
def _get_demo_data_move(self, company=False):
+ def _get_tax_by_code(code, type_tax='sale'):
+ taxes = self.env['account.tax'].search([
+ ('company_id', '=', company.id), ('type_tax_use', '=', type_tax), ('l10n_pe_edi_tax_code', '=', code)], limit=1)
+ return [Command.set(taxes.ids)]
+
move_data = super()._get_demo_data_move(company)
+ ref = self.env.ref
+ last_month_date = datetime.strptime(move_data['demo_invoice_1']['invoice_date'], '%Y-%m-%d') - timedelta(days=1)
if company.account_fiscal_country_id.code == "PE":
- move_data['demo_invoice_1']['l10n_latam_document_type_id'] = 'l10n_pe.document_type01'
- move_data['demo_invoice_1']['l10n_latam_document_number'] = 'FFI-000001'
- move_data['demo_invoice_2']['l10n_latam_document_type_id'] = 'l10n_pe.document_type01'
- move_data['demo_invoice_2']['l10n_latam_document_number'] = 'FFI-000002'
- move_data['demo_invoice_3']['l10n_latam_document_type_id'] = 'l10n_pe.document_type01'
- move_data['demo_invoice_3']['l10n_latam_document_number'] = 'FFI-000003'
- move_data['demo_invoice_followup']['l10n_latam_document_type_id'] = 'l10n_pe.document_type01'
- move_data['demo_invoice_followup']['l10n_latam_document_number'] = 'FFI-000004'
- move_data['demo_invoice_5']['l10n_latam_document_number'] = '1'
- move_data['demo_invoice_equipment_purchase']['l10n_latam_document_number'] = 'INV-000089'
+ move_data['demo_invoice_1']['invoice_date'] = last_month_date
+ move_data['demo_invoice_1']['l10n_latam_document_number'] = 'FFF-0000001'
+ move_data['demo_invoice_1']['invoice_line_ids'] = [
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 25000.0, 'price_unit': 3.0, 'tax_ids': _get_tax_by_code('9997')}),
+ ]
+ move_data['demo_invoice_2']['invoice_date'] = last_month_date
+ move_data['demo_invoice_2']['l10n_latam_document_number'] = 'FFF-0000002'
+ move_data['demo_invoice_2']['invoice_line_ids'] = [
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 12500.0, 'price_unit': 3.0, 'tax_ids': _get_tax_by_code('1000')}),
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 1.0, 'price_unit': 1000.0, 'tax_ids': _get_tax_by_code('9997')}),
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 1.0, 'price_unit': 1500.0, 'tax_ids': _get_tax_by_code('9998')}),
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 12500.0, 'price_unit': 3.0, 'tax_ids': _get_tax_by_code('1000')}),
+ ]
+ move_data['demo_invoice_3']['invoice_date'] = last_month_date
+ move_data['demo_invoice_3']['l10n_latam_document_type_id'] = ref('l10n_pe.document_type08').id,
+ move_data['demo_invoice_3']['l10n_latam_document_number'] = 'NDI-0000001'
+ move_data['demo_invoice_3']['invoice_line_ids'] = [
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 12500.0, 'price_unit': 3.0, 'tax_ids': _get_tax_by_code('1000')}),
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 1.0, 'price_unit': 1000.0, 'tax_ids': _get_tax_by_code('9997')}),
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 1.0, 'price_unit': 1500.0, 'tax_ids': _get_tax_by_code('9998')}),
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 12500.0, 'price_unit': 3.0, 'tax_ids': _get_tax_by_code('1000')}),
+ ]
+ move_data['demo_invoice_followup']['move_type'] = 'in_invoice'
+ move_data['demo_invoice_followup']['partner_id'] = ref('base.res_partner_2').id
+ move_data['demo_invoice_followup']['invoice_date'] = last_month_date
+ move_data['demo_invoice_followup']['l10n_latam_document_number'] = 'FFF-100001'
+ move_data['demo_invoice_followup']['invoice_line_ids'] = [
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 1.0, 'price_unit': 500.0}),
+ ]
+ move_data['demo_invoice_5']['partner_id'] = ref('base.res_partner_2').id
+ move_data['demo_invoice_5']['invoice_date'] = last_month_date
+ move_data['demo_invoice_5']['l10n_latam_document_number'] = 'FFF-100002'
+ move_data['demo_invoice_5']['invoice_line_ids'] = [
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 1.0, 'price_unit': 500.0, 'tax_ids': _get_tax_by_code('1000', 'purchase')}),
+ ]
+ igv_gyng_tax = self.env['account.tax'].search([('company_id', '=', company.id), ('type_tax_use', '=', 'purchase'), ('tax_group_id.name', '=', 'IGV GyNG')], limit=1)
+ move_data['demo_invoice_equipment_purchase']['partner_id'] = ref('base.res_partner_2').id
+ move_data['demo_invoice_equipment_purchase']['invoice_date'] = last_month_date
+ move_data['demo_invoice_equipment_purchase']['l10n_latam_document_number'] = 'FFF-100003'
+ move_data['demo_invoice_equipment_purchase']['invoice_line_ids'] = [
+ Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 500.0, 'quantity': 1, 'tax_ids': [Command.set(igv_gyng_tax.ids)]}),
+ ]
+ move_data['demo_invoice_6'] = {
+ 'move_type': 'in_invoice',
+ 'partner_id': ref('base.res_partner_2').id,
+ 'invoice_user_id': ref('base.user_demo').id,
+ 'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
+ 'invoice_date': last_month_date,
+ 'l10n_latam_document_number': 'FFF-100004',
+ 'invoice_line_ids': [
+ Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 500.0, 'quantity': 1, 'tax_ids': _get_tax_by_code('9997', 'purchase')}),
+ Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 1000.0, 'quantity': 1, 'tax_ids': _get_tax_by_code('1000', 'purchase')}),
+ Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 1500.0, 'quantity': 2, 'tax_ids': _get_tax_by_code('9996', 'purchase')}),
+ Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 2000.0, 'quantity': 1, 'tax_ids': _get_tax_by_code('9998', 'purchase')}),
+ Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 2500.0, 'quantity': 1, 'tax_ids': _get_tax_by_code('1000', 'purchase')}),
+ ],
+ }
+ move_data['demo_invoice_7'] = {
+ 'move_type': 'in_invoice',
+ 'partner_id': ref('base.res_partner_12').id,
+ 'invoice_user_id': ref('base.user_demo').id,
+ 'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
+ 'invoice_date': last_month_date,
+ 'l10n_latam_document_number': 'FFF-000005',
+ 'l10n_latam_document_type_id': ref('l10n_pe.document_type91').id,
+ 'invoice_line_ids': [
+ Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 25000.0, 'quantity': 3, 'tax_ids': _get_tax_by_code('9995', 'purchase')}),
+ ],
+ }
+ move_data['demo_invoice_8'] = {
+ 'move_type': 'in_invoice',
+ 'partner_id': ref('base.res_partner_12').id,
+ 'invoice_user_id': ref('base.user_demo').id,
+ 'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
+ 'invoice_date': last_month_date,
+ 'l10n_latam_document_number': '118-145266',
+ 'l10n_latam_document_type_id': ref('l10n_pe.document_type50').id,
+ 'invoice_line_ids': [
+ Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 3, 'quantity': 25000.0, 'tax_ids': _get_tax_by_code('9995', 'purchase')}),
+ ],
+ }
+ move_data['demo_invoice_9'] = {
+ 'move_type': 'in_invoice',
+ 'partner_id': ref('base.res_partner_12').id,
+ 'invoice_user_id': ref('base.user_demo').id,
+ 'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
+ 'invoice_date': last_month_date,
+ 'l10n_latam_document_number': 'FFF-100009',
+ 'l10n_latam_document_type_id': ref('l10n_pe.document_type91').id,
+ 'invoice_line_ids': [
+ Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 3, 'quantity': 25000.0, 'tax_ids': _get_tax_by_code('9995', 'purchase')}),
+ ],
+ }
+ move_data['demo_invoice_10'] = {
+ 'move_type': 'out_refund',
+ 'partner_id': ref('base.res_partner_12').id,
+ 'invoice_user_id': ref('base.user_demo').id,
+ 'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
+ 'invoice_date': last_month_date,
+ 'l10n_latam_document_number': 'CNE-0000001',
+ 'invoice_line_ids': [
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 25000.0, 'price_unit': 3.0, 'tax_ids': _get_tax_by_code('9997')}),
+ ],
+ }
+ move_data['demo_invoice_11'] = {
+ 'move_type': 'in_refund',
+ 'partner_id': ref('base.res_partner_12').id,
+ 'invoice_user_id': ref('base.user_demo').id,
+ 'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
+ 'invoice_date': last_month_date,
+ 'l10n_latam_document_number': 'FFF-100005',
+ 'invoice_line_ids': [
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 1.0, 'price_unit': 500.0}),
+ ],
+ }
+ move_data['demo_invoice_12'] = {
+ 'move_type': 'in_invoice',
+ 'partner_id': ref('base.res_partner_12').id,
+ 'invoice_user_id': ref('base.user_demo').id,
+ 'l10n_latam_document_type_id': ref('l10n_pe.document_type08').id,
+ 'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
+ 'invoice_date': last_month_date,
+ 'l10n_latam_document_number': 'FFF-100006',
+ 'invoice_line_ids': [
+ Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 1.0, 'price_unit': 500.0}),
+ ],
+ }
return move_data
diff --git a/addons/l10n_pe/models/account_move.py b/addons/l10n_pe/models/account_move.py
index b763cb2875b..a0a143ed983 100644
--- a/addons/l10n_pe/models/account_move.py
+++ b/addons/l10n_pe/models/account_move.py
@@ -1,8 +1,37 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import models, fields
+from odoo import api, models, fields
from odoo.tools.sql import column_exists, create_column
+class AccountMove(models.Model):
+ _inherit = "account.move"
+
+ def _get_l10n_latam_documents_domain(self):
+ self.ensure_one()
+ result = super()._get_l10n_latam_documents_domain()
+ if self.company_id.country_id.code != "PE" or not self.journal_id.l10n_latam_use_documents:
+ return result
+ if self.journal_id.type == "sale":
+ result.append(("code", "in", ("01", "03", "07", "08", "20", "40")))
+ return result
+
+ @api.onchange('l10n_latam_document_type_id', 'l10n_latam_document_number')
+ def _inverse_l10n_latam_document_number(self):
+ """Inherit to complete the l10n_latam_document_number with the expected 8 characters after that a '-'
+ Example: Change FFF-32 by FFF-00000032, to avoid incorrect values on the reports"""
+ super()._inverse_l10n_latam_document_number()
+ to_review = self.filtered(
+ lambda x: x.journal_id.type == "purchase"
+ and x.l10n_latam_document_type_id.code in ("01", "03", "07", "08")
+ and x.l10n_latam_document_number
+ and "-" in x.l10n_latam_document_number
+ and x.l10n_latam_document_type_id.country_id.code == "PE"
+ )
+ for rec in to_review:
+ number = rec.l10n_latam_document_number.split("-")
+ rec.l10n_latam_document_number = "%s-%s" % (number[0], number[1].zfill(8))
+
+
class AccountMoveLine(models.Model):
_inherit = "account.move.line"