From 365017a9502db072a35390a295ad619c6a0aa96b Mon Sep 17 00:00:00 2001 From: Luis Torres Date: Thu, 6 Apr 2023 01:15:04 +0000 Subject: [PATCH] [IMP] l10n_pe: Welcome PLE reports Complement module to allow generate the PLE reports. - Missing purchase tax groups and taxes added to complete the vendor bills flow - Demo data completed to has data to allow generate the PLE reports - Document types for vendor bills completed in the data - Method to improve the domain in document types for customer invoices added - Extend method to autocomplete the number on vendor bills with the standard expected by the document type. closes odoo/odoo#124595 X-original-commit: 821d313a5de857a4903bb35aaea49c3a35f8781e Related: odoo/enterprise#42345 Signed-off-by: Josse Colpaert --- addons/l10n_pe/__manifest__.py | 2 +- .../data/l10n_latam_document_type_data.xml | 468 ++++++++++++++++++ .../l10n_pe/data/template/account.tax-pe.csv | 12 + .../data/template/account.tax.group-pe.csv | 3 + addons/l10n_pe/demo/account_demo.py | 147 +++++- addons/l10n_pe/models/account_move.py | 31 +- 6 files changed, 650 insertions(+), 13 deletions(-) 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"