diff --git a/addons/l10n_do/__manifest__.py b/addons/l10n_do/__manifest__.py index fe1c621e9c9f0..524d470c7e8ca 100644 --- a/addons/l10n_do/__manifest__.py +++ b/addons/l10n_do/__manifest__.py @@ -1,9 +1,9 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. { - 'name': 'Dominican Republic - Accounting', - 'version': '2.0', - 'category': 'Accounting/Localizations/Account Charts', - 'description': """ + "name": "Dominican Republic - Accounting", + "version": "2.0", + "category": "Accounting/Localizations/Account Charts", + "description": """ Localization Module for Dominican Republic =========================================== @@ -70,19 +70,29 @@ 110101- Caja 11010101 Caja General """, - 'author': 'Gustavo Valverde - iterativo | Consultores de Odoo', - 'website': 'http://iterativo.do', - 'depends': [ - 'account', - 'base_iban', + "author": "Gustavo Valverde - iterativo | Consultores de Odoo", + "website": "http://iterativo.do", + "depends": [ + "l10n_latam_invoice_document", + "base_iban", ], - 'data': [ - 'data/account_account_tag_data.xml', - 'data/account_tax_report_data.xml', - 'data/l10n_do_res_partner_title.xml', + "data": [ + "data/l10n_latam.document.type.csv", + "data/account_account_tag_data.xml", + "data/account_tax_report_data.xml", + "data/l10n_do_res_partner_title.xml", ], - 'demo': [ - 'demo/demo_company.xml', + "demo": [ + "security/ir.model.access.csv", + "demo/demo_company.xml", + "demo/res_partner_demo.xml", + "views/account_journal_views.xml", + "views/l10n_latam_document_type_views.xml", + "views/report_invoice.xml", + "views/report_templates.xml", + "views/res_company_views.xml", + "views/res_config_settings_view.xml", + "views/res_partner_views.xml", ], - 'license': 'LGPL-3', + "license": "LGPL-3", } diff --git a/addons/l10n_do/data/l10n_latam.document.type.csv b/addons/l10n_do/data/l10n_latam.document.type.csv new file mode 100644 index 0000000000000..3df8d1c71e569 --- /dev/null +++ b/addons/l10n_do/data/l10n_latam.document.type.csv @@ -0,0 +1,23 @@ +id,sequence,code,name,report_name,internal_type,l10n_do_ncf_type,doc_code_prefix,country_id/id,active +ncf_fiscal_client,10,B,Fiscal Credit,Fiscal Credit Invoice,invoice,01,B01,base.do,TRUE +ncf_consumer_supplier,30,B,Consumption,Consumption Invoice,invoice,02,B02,base.do,TRUE +ncf_debit_note_client,40,B,Debit Note,Debit Note,debit_note,03,B03,base.do,TRUE +ncf_credit_note_client,60,B,Credit Note,Credit Note,credit_note,04,B04,base.do,TRUE +ncf_informal_supplier,80,B,Purchase Receipt,Purchase Receipt,invoice,11,B11,base.do,TRUE +ncf_unique_client,90,B,Unique Income,Unique Income Invoice,invoice,12,B12,base.do,TRUE +ncf_minor_supplier,100,B,Minor Expense,Minor Expense,invoice,13,B13,base.do,TRUE +ncf_special_client,110,B,Special Regime,Special Regime Invoice,invoice,14,B14,base.do,TRUE +ncf_gov_client,120,B,Government Invoice,Government Invoice,invoice,15,B15,base.do,TRUE +ncf_export_client,130,B,Exportation,Exportation Invoice,invoice,16,B16,base.do,TRUE +ncf_exterior_supplier,140,B,Abroad Payment,Abroad Payment Invoice,invoice,17,B17,base.do,TRUE +non_fiscal_import_supplier,150,N,Import,Import Invoice,invoice,,IMP,base.do,FALSE +ecf_fiscal_client,160,E,Electronic Fiscal Credit,Electronic Fiscal Credit Invoice,invoice,31,E31,base.do,TRUE +ecf_consumer_supplier,170,E,Electronic Consumption,Electronic Consumption Invoice,invoice,32,E32,base.do,TRUE +ecf_debit_note_client,180,E,Electronic Debit Note,Electronic Debit Note,debit_note,33,E33,base.do,TRUE +ecf_credit_note_client,190,E,Electronic Credit Note,Electronic Credit Note,credit_note,34,E34,base.do,TRUE +ecf_informal_supplier,200,E,Electronic Purchase Receipt,Electronic Purchase Receipt,invoice,41,E41,base.do,TRUE +ecf_minor_supplier,220,E,Electronic Minor Expense,Electronic Minor Expense Invoice,invoice,43,E43,base.do,TRUE +ecf_special_client,230,E,Electronic Special Regime,Electronic Special Regime Invoice,invoice,44,E44,base.do,TRUE +ecf_gov_client,240,E,Electronic Government Invoice,Electronic Government Invoice,invoice,45,E45,base.do,TRUE +ecf_export_client,250,E,Electronic Exportation,Electronic Exportation Invoice,invoice,46,E46,base.do,TRUE +ecf_exterior_supplier,260,E,Electronic Abroad Payment,Electronic Abroad Payment Invoice,invoice,47,E47,base.do,TRUE diff --git a/addons/l10n_do/demo/indexa_logo.png b/addons/l10n_do/demo/indexa_logo.png new file mode 100644 index 0000000000000..08bb741d50ded Binary files /dev/null and b/addons/l10n_do/demo/indexa_logo.png differ diff --git a/addons/l10n_do/demo/iterativo_logo.png b/addons/l10n_do/demo/iterativo_logo.png new file mode 100644 index 0000000000000..22f12fa8aa0a2 Binary files /dev/null and b/addons/l10n_do/demo/iterativo_logo.png differ diff --git a/addons/l10n_do/demo/katanalabs_logo.png b/addons/l10n_do/demo/katanalabs_logo.png new file mode 100644 index 0000000000000..8305d2f58c6d8 Binary files /dev/null and b/addons/l10n_do/demo/katanalabs_logo.png differ diff --git a/addons/l10n_do/demo/marcos_logo.png b/addons/l10n_do/demo/marcos_logo.png new file mode 100644 index 0000000000000..5e35c13815394 Binary files /dev/null and b/addons/l10n_do/demo/marcos_logo.png differ diff --git a/addons/l10n_do/demo/res_partner_demo.xml b/addons/l10n_do/demo/res_partner_demo.xml new file mode 100644 index 0000000000000..d757ba55d4530 --- /dev/null +++ b/addons/l10n_do/demo/res_partner_demo.xml @@ -0,0 +1,128 @@ + + + + + + + MARCOS ORGANIZADOR DE NEGOCIOS SRL + + Avenida de Los Próceres + + Santo Domingo + 131098193 + taxpayer + info@marcos.do + 809-540-4253 + https://marcos.do/ + + + + ITERATIVO SRL + + Rafael Augusto Sánchez 86 + Roble Corporate Center + 10148 + + Piantini + 131566332 + taxpayer + info@iterativo.do + 829-956-5191 + https://iterativo.do/ + + + + INDEXA SRL + + + Rafael Augusto Sánchez 86 + Roble Corporate Center + Piantini + 131793916 + taxpayer + info@indexa.do + 829-939-3231 + https://indexa.do/ + + + + KATANA LABS SRL + + + José Reyes 48 + 2da Planta + Zona Colonial + 132116852 + taxpayer + info@katanalabs.do + 829-399-5150 + https://katanalabs.do/ + + + + + + + JOSE LUIS LOPEZ GONZALEZ + + + 22400559690 + non_payer + joselopezg8@gmail.com + 829-939-3231 + + + KEVIN JIMENEZ LORENZO + + + 40222200327 + non_payer + kevinjimenezlorenzo@gmail.com + + + + + + ZONA FRANCA INDUSTRIAL DE LAS AMERICAS S A + + + 101168481 + special + 809-549-2031 + + + + + + FOOD FOR THE HUNGRY Y DOM + + + 401051842 + nonprofit + 800-248-6437 + + + + + + MINISTERIO DE INDUSTRIA Y COMERCIO Y MIPYMES + + + 401007355 + governmental + info@micm.gob.do + 809-567-7192 + + + MINISTERIO DE EDUCACION SUPERIOR CIENCIA Y TECNOLOGIA + + + 401505657 + governmental + 809-731-1100 + + + + + diff --git a/addons/l10n_do/i18n/es.po b/addons/l10n_do/i18n/es.po new file mode 100644 index 0000000000000..4c6395c3775e3 --- /dev/null +++ b/addons/l10n_do/i18n/es.po @@ -0,0 +1,1109 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_do +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.3alpha1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-23 19:15+0000\n" +"PO-Revision-Date: 2023-03-23 15:15-0400\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 3.2.2\n" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1203 +msgid " 1203 Deterioro de Valor Acumulado de Propiedades, Planta y Equipo" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1 +msgid "1 Activos" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_11 +msgid "11 Activos Corrientes" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1101 +msgid "1101 Efectivo y Equivalentes de Efectivo" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_110101 +msgid "110101 Caja" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_110102 +msgid "110102 Bancos" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_110103 +msgid "110103 Inversiones Temporales Plazo Menor 90 días" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1102 +msgid "1102 Inversiones en Valores a Corto Plazo" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1103 +msgid "1103 Cuentas y Documentos por Cobrar" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_110301 +msgid "110301 Documentos por Cobrar" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_110302 +msgid "110302 Cuentas por Cobrar" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1104 +msgid "1104 Provisión para Cuentas Incobrables" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1105 +msgid "1105 Inventarios" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1106 +msgid "1106 Deterioro Acumulado de Valor de Inventarios" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1107 +msgid "1107 Estimación por Obsolecencia de Inventario" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1108 +msgid "1108 Impuestos Adelantados" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_110801 +msgid "110801 ITBIS Pagado en Compras" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_110803 +msgid "110803 Otros Impuestos y Saldos" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1109 +msgid "1109 Inversiones Temporales" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1110 +msgid "1110 Pagos Anticipados" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_12 +msgid "12 Activos Fijos" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1201 +msgid "1201 Propiedades, Planta y Equipo" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_120101 +msgid "120101 Bienes Inmuebles (CAT 1)" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_120102 +msgid "120102 Bienes Muebles (CAT 2)" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_120103 +msgid "120103 Bienes Muebles (CAT 3)" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1202 +msgid "1202 Depreciación Acumulada de Propiedades, Planta y Equipo" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1204 +msgid "1204 Activos Intangibles" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1205 +msgid "1205 Bienes en Arrendamiento" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1206 +msgid "1206 Depreciación Acumulada de Bienes en Arrendamiento" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1207 +msgid "1207 Deterioro de Valor Acumulado de Bienes en Arrendamiento" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1208 +msgid "1208 Inversiones Permanentes" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_1209 +msgid "1209 Activos Diferidos" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_2 +msgid "2 Pasivos" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_21 +msgid "21 Pasivo Corriente" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_2101 +msgid "2101 Cuentas y Documentos por Pagar a Corto Plazo" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_2102 +msgid "2102 Beneficios por Pagar a Corto Plazo" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_2103 +msgid "2103 Impuestos y Retenciones" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_210301 +msgid "210301 ITBIS por Pagar" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_210302 +msgid "210302 ITBIS Retenido" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_210303 +msgid "210303 ISR Retenido" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_210304 +msgid "210304 Retenciones en Nómina" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_210305 +msgid "210305 Otros Impuestos o Retenciones" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_2104 +msgid "2104 Provisiones a Corto Plazo" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_2105 +msgid "2105 Tarjetas de Crédito" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_22 +msgid "22 Pasivo No Corriente" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_2201 +msgid "2201 Cuentas y Documentos por Pagar a Largo Plazo" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_2202 +msgid "2202 Provisión para Obligaciones Laborales" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_2203 +msgid "2203 Anticipos y Garantías de Clientes" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_2204 +msgid "2204 Provisiones a Largo Plazo" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_3 +msgid "3 Capital" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_31 +msgid "31 Capital Contable" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_3101 +msgid "3101 Capital Social" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_3102 +msgid "3102 Superávit por Revaluación de Activos" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_32 +msgid "32 Utilidades Restringidas" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_3201 +msgid "3201 Reserva Legal" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_33 +msgid "33 Resultados" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_3301 +msgid "3301 Resultados Acumulados" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_3302 +msgid "3302 Resultados del Ejercicio" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_3304 +msgid "3304 Otras Reservas de Patrimonio" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_4 +msgid "4 Ingresos y Ganancias" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_41 +msgid "41 Ingresos por Operaciones" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_4101 +msgid "4101 Ventas de Bienes" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_4102 +msgid "4102 Ventas de Servicios" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_4103 +msgid "4103 Devoluciones" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_4104 +msgid "4104 Descuentos" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_42 +msgid "42 Ingresos No Operacionales" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_4201 +msgid "4201 Intereses Ganados" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_4202 +msgid "4202 Ventas de Activos" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_4203 +msgid "4203 Dividendos Ganados" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_4204 +msgid "4204 Ingresos Extraordinarios" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5 +msgid "5 Costos Directos e Indirectos" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_51 +msgid "51 Costos y Gastos de Operación" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5101 +msgid "5101 Costos de Ventas" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5102 +msgid "5102 Costos de Producción" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_6 +msgid "6 Gastos y Pérdidas" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_52 +msgid "61 Gastos de Operación" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5201 +msgid "6101 Gastos de Personal" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_520101 +msgid "610101 Aportes a la Seguridad Social" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_520102 +msgid "610102 Otras Cargas Patronales" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5202 +msgid "6102 Gastos de Administración" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5203 +msgid "6103 Gastos por Trabajo, Suministros y Servicios" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_520301 +msgid "610301 Gastos Honorarios por Servicios Profesionales (P. Física)" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_520302 +msgid "610302 Gastos Honorarios por Servicios Profesionales (P. Jurídica)" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_520303 +msgid "610303 Gastos Honorarios por Servicios Profesionales (P. Jurídica)" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5204 +msgid "6104 Gastos por Depreciación" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5205 +msgid "6105 Gastos por Reparaciones" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5206 +msgid "6106 Gastos de Representación" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5207 +msgid "6107 Gastos Financieros" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_5208 +msgid "6108 Gastos Extraordinarios" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_7 +msgid "7 Cuentas Liquidadoras de Resultados" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_61 +msgid "71 Cuenta Liquidadora" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_6101 +msgid "7101 Pérdidas y Ganancias" +msgstr "" + +#. module: l10n_do +#: model:account.account.tag,name:l10n_do.account_tag_6102 +msgid "7102 Gastos por Impuestos" +msgstr "" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "" +"
\n" +" Contact:" +msgstr "" +"
\n" +" Contacto:" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.report_invoice_document +msgid "" +"\n" +" Original:\n" +" Customer\n" +" \n" +"
\n" +" \n" +" Copy:\n" +" Salesperson\n" +" \n" +"
\n" +"
" +msgstr "" +"\n" +" Original:\n" +" Cliente\n" +" \n" +"
\n" +" \n" +" Copia:\n" +" Vendedor\n" +" \n" +"
\n" +"
" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.report_invoice_document +msgid "" +"\n" +" E\n" +" " +msgstr "" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "/" +msgstr "" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "" +"\n" +" Valid until:\n" +" " +msgstr "" +"\n" +" Válida hasta:\n" +" " + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Expire:" +msgstr "Vence:" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Issuing Date:" +msgstr "Fecha emisión:" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Mobile.:" +msgstr "Celular.:" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Modified NCF:" +msgstr "NCF Modificado:" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Origin:" +msgstr "Origen:" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Phone.:" +msgstr "Teléfono.:" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "RNC:" +msgstr "" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Reference:" +msgstr "Referencia:" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Tel.:" +msgstr "" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.document_tax_totals +msgid "Total" +msgstr "" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/account_move.py:0 +#, python-format +msgid "" +"A VAT is mandatory for this type of NCF. Please set the current VAT of this " +"client" +msgstr "" +"El RNC/Cédula es obligatorio para este Tipo de Comprobante. Por favor " +"establezca un RNC/Cédula para este cliente" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_itbs_rntnd +msgid "A,1 ITBIS RETENIDO" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_retcn_prsn +msgid "A.25 Servicios Sujetos a Retención Personas = Físicas y Entidad" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_itbs_retcn_prsn +msgid "A.30 Itbis Por Servicios Sujetos A Retencion Personas Físicas" +msgstr "" + +#. module: l10n_do +#: model:ir.model,name:l10n_do.model_account_chart_template +msgid "Account Chart Template" +msgstr "Plantilla de Plan de Cuentas" + +#. module: l10n_do +#: model:ir.model.fields,help:l10n_do.field_l10n_latam_document_type__internal_type +msgid "" +"Analog to odoo account.move.move_type but with more options allowing to " +"identify the kind of document we are working with. (not only related to " +"account.move, could be for documents of other models like stock.picking)" +msgstr "" +"Análogo a account.move.type de Odoo pero con más opciones, permitiendo " +"identificar el tipo de documento sobre el que estamos trabajando. (no " +"solamente relativo a account.move, podría ser relativo a otros modelos, " +"como por ejemplo stock.picking)" + +#. module: l10n_do +#: model:account.report.column,name:l10n_do.tax_report_balance +msgid "Balance" +msgstr "" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Business Name:" +msgstr "Razón Social" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/template_do.py:0 +#, python-format +msgid "Caja Chica" +msgstr "" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/account_journal.py:0 +#, python-format +msgid "Cannot create chart of account until you configure your VAT." +msgstr "" +"No se puede crear el Catálogo de Cuentas hasta que configure su RNC/Cédula" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/template_do.py:0 +#, python-format +msgid "Cheques Clientes" +msgstr "" + +#. module: l10n_do +#: model:ir.model,name:l10n_do.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_do_account_journal_document_type__company_id +msgid "Company" +msgstr "Compañía" + +#. module: l10n_do +#: model:ir.model.fields,help:l10n_do.field_l10n_do_account_journal_document_type__company_id +msgid "Company related to this journal" +msgstr "Compañía relacionada a este diario" + +#. module: l10n_do +#: model:ir.model,name:l10n_do.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_res_partner__country_id +#: model:ir.model.fields,field_description:l10n_do.field_res_users__country_id +msgid "Country" +msgstr "País" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_do_account_journal_document_type__create_uid +msgid "Created by" +msgstr "" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_do_account_journal_document_type__create_date +msgid "Created on" +msgstr "" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Customer ID:" +msgstr "ID del cliente" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_do_account_journal_document_type__display_name +msgid "Display Name" +msgstr "" + +#. module: l10n_do +#: model:res.partner.title,name:l10n_do.res_partner_title_dra +msgid "Doctora" +msgstr "" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_account_journal__l10n_do_document_type_ids +#: model_terms:ir.ui.view,arch_db:l10n_do.view_account_journal_form +msgid "Document Types" +msgstr "Tipos de comprobante" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_do_account_journal_document_type__l10n_latam_document_type_id +msgid "Document type" +msgstr "Tipo de comprobante" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.view_document_type_filter +msgid "Dominican Documents" +msgstr "Documentos Dominicanos" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.res_config_settings_view_form +msgid "Dominican Localization" +msgstr "Localización Dominicana" + +#. module: l10n_do +#: model:res.partner.title,shortcut:l10n_do.res_partner_title_dra +msgid "Dra." +msgstr "" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_do_account_journal_document_type__l10n_do_ncf_expiration_date +msgid "Expiration date" +msgstr "Fecha de vencimiento" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/res_partner.py:0 +#, python-format +msgid "Fiscal Tax Payer" +msgstr "Contribuyente" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/account_move.py:0 +#, python-format +msgid "Fiscal invoices require partner fiscal type" +msgstr "Las facturas fiscales requieren Tipo de Contribuyente en el contacto" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/res_partner.py:0 +#, python-format +msgid "Foreigner" +msgstr "Extranjero" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/template_do.py:0 +#, python-format +msgid "Gastos No Deducibles" +msgstr "" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/account_journal.py:0 +#, python-format +msgid "Go to Companies" +msgstr "Ir a compañías" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/res_partner.py:0 +#, python-format +msgid "Governmental" +msgstr "Gubernamental" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_do_account_journal_document_type__id +msgid "ID" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_total_operaciones +msgid "II-1 Total de Operaciones" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_2A_ingrs_exprt +msgid "II.A INGRESOS POR EXPORTACIONES DE BIENES O SERVICIOS EXENTOS" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_2A2_ingrs_exprt +msgid "II.A.2 INGRESOS POR EXPORTACIONES DE BIENES O SERVICIOS EXENTOS" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_2A3_ingrs_local_vnts +msgid "II.A.3 INGRESOS POR VENTAS LOCALES DE BIENES O SERVICIOS EXENTOS" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_2b_grvd +msgid "II.B GRAVADAS" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_2b6_grvd +msgid "II.B.6 OPERACIONES GRAVADAS AL 18%" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_2b7_grvd +msgid "II.B.7 OPERACIONES GRAVADAS AL 11%" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_3_liquidacion +msgid "III LIQUIDACION" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_financial_report_line_02_01_do_account_tax_report_total_itbs +msgid "III.10 TOTAL ITBIS COBRADO (Sumar casillas 8+9)" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_itbs_pgdo_locales +msgid "III.11 ITBIS PAGADO EN COMPRAS LOCALES" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_itbs_pgdo_dedubl +msgid "III.12 ITBIS PAGADO POR SERVICIOS DEDUCIBLES" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_itbs_pgdo_imptcn +msgid "III.13 ITBIS PAGADO EN IMPORTACIONES" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_total_itbs_pgdo +msgid "III.14 TOTAL ITBIS PAGADO (Sumar casillas 11+12+13)" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_itbs_18_casilla +msgid "III.8 ITBIS COBRADO (18% de la casilla 6)" +msgstr "" + +#. module: l10n_do +#: model:account.report.line,name:l10n_do.account_tax_report_tbs_11_casilla +msgid "III.9 TBIS COBRADO (11% de la casilla 7)" +msgstr "" + +#. module: l10n_do +#: model:res.partner.title,shortcut:l10n_do.res_partner_title_ing +msgid "Ing." +msgstr "" + +#. module: l10n_do +#: model:res.partner.title,name:l10n_do.res_partner_title_ing +msgid "Ingeniero/a" +msgstr "" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_latam_document_type__internal_type +msgid "Internal Type" +msgstr "Tipo interno" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_res_company__l10n_do_ecf_issuer +msgid "Is e-CF issuer" +msgstr "Es Emisor Electrónico" + +#. module: l10n_do +#: model:ir.model,name:l10n_do.model_account_journal +#: model:ir.model.fields,field_description:l10n_do.field_l10n_do_account_journal_document_type__journal_id +msgid "Journal" +msgstr "Diario" + +#. module: l10n_do +#: model:ir.model,name:l10n_do.model_l10n_do_account_journal_document_type +msgid "Journal Document Type" +msgstr "Tipos de Comprobante" + +#. module: l10n_do +#: model:ir.model,name:l10n_do.model_account_move +msgid "Journal Entry" +msgstr "Asiento contable" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_do_account_journal_document_type__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_do_account_journal_document_type__write_date +msgid "Last Updated on" +msgstr "" + +#. module: l10n_do +#: model:ir.model,name:l10n_do.model_l10n_latam_document_type +msgid "Latam Document Type" +msgstr "Tipo de Documento Latam" + +#. module: l10n_do +#: model:res.partner.title,shortcut:l10n_do.res_partner_title_lic +msgid "Lic." +msgstr "" + +#. module: l10n_do +#: model:res.partner.title,shortcut:l10n_do.res_partner_title_licda +msgid "Licda." +msgstr "" + +#. module: l10n_do +#: model:res.partner.title,name:l10n_do.res_partner_title_licda +msgid "Licenciada" +msgstr "" + +#. module: l10n_do +#: model:res.partner.title,name:l10n_do.res_partner_title_lic +msgid "Licenciado" +msgstr "" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.custom_header +msgid "Logo" +msgstr "" + +#. module: l10n_do +#: model:res.partner.title,name:l10n_do.res_partner_title_mba +#: model:res.partner.title,shortcut:l10n_do.res_partner_title_mba +msgid "MBA" +msgstr "" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/template_do.py:0 +#, python-format +msgid "Migración CxC" +msgstr "" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/template_do.py:0 +#, python-format +msgid "Migración CxP" +msgstr "" + +#. module: l10n_do +#: model:res.partner.title,name:l10n_do.res_partner_title_msc +#: model:res.partner.title,shortcut:l10n_do.res_partner_title_msc +msgid "Msc." +msgstr "" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/l10n_latam_document_type.py:0 +#, python-format +msgid "NCF %s doesn't have the correct structure" +msgstr "El NCF %s no tiene la estructura correcta" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_latam_document_type__l10n_do_ncf_expiration_date +msgid "NCF Expiration date" +msgstr "Fecha de Vencimiento del NCF" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.view_document_type_filter +msgid "NCF Types" +msgstr "Tipos de NCF" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_l10n_latam_document_type__l10n_do_ncf_type +msgid "NCF types" +msgstr "Tipos de NCF" + +#. module: l10n_do +#: model:ir.model.fields,help:l10n_do.field_l10n_latam_document_type__l10n_do_ncf_type +msgid "" +"NCF types defined by the DGII that can be used to identify the documents " +"presented to the government and that depends on the operation type, the " +"responsibility of both the issuer and the receptor of the document" +msgstr "" +"Tipo de NCF definido por la DGII que puede ser usado para identificar los " +"documentos presentados al gobierno y que dependen del tipo de operación, la " +"responsabilidad tanto del emisor como del receptor del documento" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "NCF:" +msgstr "" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Name:" +msgstr "Nombre:" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/res_partner.py:0 +#, python-format +msgid "Non Tax Payer" +msgstr "Consumidor Final" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/res_partner.py:0 +#, python-format +msgid "Nonprofit Organization" +msgstr "Organización sin Fines de Lucro" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/account_journal.py:0 +#, python-format +msgid "Partner %s is needed to issue a fiscal invoice" +msgstr "El %s del contacto es necesario para emitir una factura fiscal" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "RNC:" +msgstr "" + +#. module: l10n_do +#: model:ir.model.fields.selection,name:l10n_do.selection__l10n_latam_document_type__internal_type__in_credit_note +msgid "Supplier Credit Note" +msgstr "Nota de Crédito de Proveedor" + +#. module: l10n_do +#: model:ir.model.fields.selection,name:l10n_do.selection__l10n_latam_document_type__internal_type__in_debit_note +msgid "Supplier Debit Note" +msgstr "Nota de Debito de Proveedor" + +#. module: l10n_do +#: model:ir.model.fields.selection,name:l10n_do.selection__l10n_latam_document_type__internal_type__in_invoice +msgid "Supplier Invoices" +msgstr "Factura de Proveedor" + +#. module: l10n_do +#: model_terms:ir.ui.view,arch_db:l10n_do.informations +msgid "Tax ID:" +msgstr "RNC/Cédula:" + +#. module: l10n_do +#: model:account.report,name:l10n_do.tax_report +msgid "Tax Report" +msgstr "Reporte de Impuestos" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_res_partner__l10n_do_dgii_tax_payer_type +#: model:ir.model.fields,field_description:l10n_do.field_res_users__l10n_do_dgii_tax_payer_type +msgid "Taxpayer Type" +msgstr "Tipo de contribuyente" + +#. module: l10n_do +#: model:ir.model.fields,field_description:l10n_do.field_account_bank_statement_line__l10n_do_ncf_expiration_date +#: model:ir.model.fields,field_description:l10n_do.field_account_move__l10n_do_ncf_expiration_date +#: model:ir.model.fields,field_description:l10n_do.field_account_payment__l10n_do_ncf_expiration_date +msgid "Valid until" +msgstr "Válida hasta" + +#. module: l10n_do +#: model:ir.model.fields,help:l10n_do.field_res_company__l10n_do_ecf_issuer +msgid "When activating this field, NCF issuance is disabled." +msgstr "Cuando se activa este campo, la emisión de NCF es deshabilitada." + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/res_partner.py:0 +#, python-format +msgid "You are not allowed to modify %s after partner fiscal document issuing" +msgstr "" +"No tiene permitido modificar %s una vez se ha emitido un documento fiscal" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/account_move.py:0 +#, python-format +msgid "You cannot delete fiscal invoice which have been posted before" +msgstr "" +"No puede eliminar una factura fiscal que ya ha sido validada anteriormente" + +#. module: l10n_do +#. odoo-python +#: code:addons/l10n_do/models/res_partner.py:0 +#, python-format +msgid "special from Tax Paying" +msgstr "Régimen Especial" diff --git a/addons/l10n_do/models/__init__.py b/addons/l10n_do/models/__init__.py index f801afff26ec1..a4332fc02ee4c 100644 --- a/addons/l10n_do/models/__init__.py +++ b/addons/l10n_do/models/__init__.py @@ -1,2 +1,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import template_do +from . import account_journal +from . import account_move +from . import l10n_latam_document_type +from . import res_company +from . import res_partner diff --git a/addons/l10n_do/models/account_journal.py b/addons/l10n_do/models/account_journal.py new file mode 100644 index 0000000000000..6980d58cf13c1 --- /dev/null +++ b/addons/l10n_do/models/account_journal.py @@ -0,0 +1,214 @@ +from odoo import fields, models, api, _ +from odoo.exceptions import RedirectWarning, ValidationError + + +class AccountJournal(models.Model): + _inherit = "account.journal" + + l10n_do_document_type_ids = fields.One2many( + "l10n_do.account.journal.document_type", + "journal_id", + string="Document Types", + copy=False, + ) + + def _get_all_ncf_types(self, types_list, invoice=False): + """ + Include ECF type prefixes if company is ECF issuer + :param types_list: NCF list used to create fiscal sequences + :return: types_list + """ + + ecf_types = ["e-%s" % d for d in types_list if d not in ("unique", "import")] + + if self._context.get("use_documents", False) or not invoice: + # When called from Journals return all ncf+ecf types to + # create fiscal sequences + return types_list + ecf_types + + if ( + invoice.is_purchase_document() + and invoice.partner_id.l10n_do_dgii_tax_payer_type + and invoice.partner_id.l10n_do_dgii_tax_payer_type + in ("non_payer", "foreigner") + ): + # Return ncf/ecf types depending on company ECF issuing status + return ecf_types if self.company_id.l10n_do_ecf_issuer else types_list + + return types_list + ecf_types + + @api.model + def _get_l10n_do_ncf_types_data(self): + return { + "issued": { + "taxpayer": ["fiscal"], + "non_payer": ["consumer", "unique"], + "nonprofit": ["fiscal"], + "special": ["special"], + "governmental": ["governmental"], + "foreigner": ["export", "consumer"], + }, + "received": { + "taxpayer": ["fiscal"], + "non_payer": ["informal", "minor"], + "nonprofit": ["special", "governmental"], + "special": ["fiscal", "special", "governmental"], + "governmental": ["fiscal", "special", "governmental"], + "foreigner": ["import", "exterior"], + }, + } + + def _get_journal_ncf_types(self, counterpart_partner=False, invoice=False): + """ + Regarding the DGII type of company and the type of journal + (sale/purchase), get the allowed NCF types. Optionally, receive + the counterpart partner (customer/supplier) and get the allowed + NCF types to work with him. This method is used to populate + document types on journals and also to filter document types on + specific invoices to/from customer/supplier + """ + self.ensure_one() + ncf_types_data = self._get_l10n_do_ncf_types_data() + + if not self.company_id.vat: + action = self.env.ref("base.action_res_company_form") + msg = _("Cannot create chart of account until you configure your VAT.") + raise RedirectWarning(msg, action.id, _("Go to Companies")) + + # Get all the ncf_types values from the nested dictionary, remove duplicates and + # convert it into a list + ncf_types = list( + set( + [ + value + for dic in ncf_types_data[ + "issued" if self.type == "sale" else "received" + ].values() + for value in dic + ] + ) + ) + if not counterpart_partner: + ncf_notes = ["debit_note", "credit_note"] + ncf_external = ["fiscal", "special", "governmental"] + + # When Journal document type create, include ncf_notes if sale + # or exclude ncf_external if purchase + res = ( + ncf_types + ncf_notes + if self.type == "sale" + else [ncf for ncf in ncf_types if ncf not in ncf_external] + ) + return self._get_all_ncf_types(res) + if counterpart_partner.l10n_do_dgii_tax_payer_type: + counterpart_ncf_types = ncf_types_data[ + "issued" if self.type == "sale" else "received" + ][counterpart_partner.l10n_do_dgii_tax_payer_type] + ncf_types = list(set(ncf_types) & set(counterpart_ncf_types)) + else: + raise ValidationError( + _("Partner %s is needed to issue a fiscal invoice") + % counterpart_partner._fields["l10n_do_dgii_tax_payer_type"].string + ) + if invoice and invoice.move_type in ["out_refund", "in_refund"]: + ncf_types = ["credit_note"] + + if ( + invoice + and invoice.debit_origin_id + or self.env.context.get("internal_type") == "debit_note" + ): + return ["debit_note", "e-debit_note"] + + return self._get_all_ncf_types(ncf_types, invoice) + + def _get_journal_codes(self): + self.ensure_one() + if self.type == "purchase": + return [] + elif self.type == "sale" and self.company_id.l10n_do_ecf_issuer: + return ["E"] + return ["B"] + + def _l10n_do_create_document_types(self): + self.ensure_one() + + if ( + not self.l10n_latam_use_documents + or self.company_id.country_id != self.env.ref("base.do") + ): + return + + document_types = self.l10n_do_document_type_ids + fiscal_types = self._get_journal_ncf_types() + + if self.type == "purchase": + fiscal_types = [ + ftype + for ftype in fiscal_types + if ftype not in ("fiscal", "credit_note") + ] + + domain = [ + ("country_id.code", "=", "DO"), + ("l10n_do_ncf_type", "in", fiscal_types), + ] + documents = self.env["l10n_latam.document.type"].search(domain) + for document in documents.filtered( + lambda doc: doc.l10n_do_ncf_type + not in document_types.l10n_latam_document_type_id.mapped("l10n_do_ncf_type") + ): + document_types |= ( + self.env["l10n_do.account.journal.document_type"] + .sudo() + .create( + { + "journal_id": self.id, + "l10n_latam_document_type_id": document.id, + } + ) + ) + + @api.model_create_multi + def create(self, vals_list): + journals = super().create(vals_list) + for res in journals: + res._l10n_do_create_document_types() + return journals + + def write(self, values): + to_check = {"type", "l10n_latam_use_documents"} + res = super().write(values) + if to_check.intersection(set(values.keys())): + for rec in self: + rec._l10n_do_create_document_types() + return res + + +class AccountJournalDocumentType(models.Model): + """ + Because l10n_latam.document.type model is not multicompany, this model + allows to manage document types by company + """ + + _name = "l10n_do.account.journal.document_type" + _description = "Journal Document Type" + + journal_id = fields.Many2one( + "account.journal", + "Journal", + required=True, + readonly=True, + ondelete="cascade", + ) + l10n_latam_document_type_id = fields.Many2one( + "l10n_latam.document.type", "Document type", required=True, readonly=True + ) + l10n_do_ncf_expiration_date = fields.Date( + string="Expiration date", + required=True, + default=fields.Date.end_of(fields.Date.today(), "year"), + ) + company_id = fields.Many2one( + string="Company", related="journal_id.company_id", readonly=True + ) diff --git a/addons/l10n_do/models/account_move.py b/addons/l10n_do/models/account_move.py new file mode 100644 index 0000000000000..4adffa990f770 --- /dev/null +++ b/addons/l10n_do/models/account_move.py @@ -0,0 +1,287 @@ +import re +from odoo import models, fields, api, _ +from odoo.exceptions import ValidationError, UserError + + +class AccountMove(models.Model): + _inherit = "account.move" + + l10n_do_ncf_expiration_date = fields.Date( + string="Valid until", + ) + + @api.onchange("l10n_latam_document_type_id", "l10n_latam_document_number") + def _inverse_l10n_latam_document_number(self): + do_invoices_with_document_number = self.filtered( + lambda x: x.l10n_latam_document_type_id + and x.country_code == "DO" + and x.l10n_latam_use_documents + and x.l10n_latam_document_number + ) + for rec in do_invoices_with_document_number: + l10n_latam_document_number = ( + rec.l10n_latam_document_type_id._format_document_number( + rec.l10n_latam_document_number + ) + ) + if rec.l10n_latam_document_number != l10n_latam_document_number: + rec.l10n_latam_document_number = l10n_latam_document_number + rec.name = l10n_latam_document_number + + super( + AccountMove, self - do_invoices_with_document_number + )._inverse_l10n_latam_document_number() + + def _get_l10n_latam_documents_domain(self): + self.ensure_one() + if not ( + self.journal_id.l10n_latam_use_documents + and self.journal_id.company_id.country_id == self.env.ref("base.do") + ): + return super()._get_l10n_latam_documents_domain() + + internal_types = ["debit_note"] + if self.move_type in ["out_refund", "in_refund"]: + internal_types.append("credit_note") + else: + internal_types.append("invoice") + + domain = [ + ("internal_type", "in", internal_types), + ("country_id", "=", self.company_id.country_id.id), + ] + ncf_types = self.journal_id._get_journal_ncf_types( + counterpart_partner=self.partner_id.commercial_partner_id, invoice=self + ) + domain += [ + "|", + ("l10n_do_ncf_type", "=", False), + ("l10n_do_ncf_type", "in", ncf_types), + ] + codes = self.journal_id._get_journal_codes() + if codes: + domain.append(("code", "in", codes)) + return domain + + def _l10n_do_get_formatted_sequence(self): + self.ensure_one() + document_type_id = self.l10n_latam_document_type_id + return "%s%s" % ( + document_type_id.doc_code_prefix, + "".zfill( + 10 if str(document_type_id.l10n_do_ncf_type).startswith("e-") else 8 + ), + ) + + def _get_starting_sequence(self): + if ( + self.l10n_latam_use_documents + and self.country_code == "DO" + and self.l10n_latam_document_type_id + ): + return self._l10n_do_get_formatted_sequence() + + return super()._get_starting_sequence() + + def _is_l10n_do_manual_document_number(self): + self.ensure_one() + + if self.reversed_entry_id: + return self.reversed_entry_id.l10n_latam_manual_document_number + + return self.move_type in ( + "in_invoice", + "in_refund", + ) and self.l10n_latam_document_type_id.l10n_do_ncf_type not in ( + "minor", + "e-minor", + "informal", + "e-informal", + "exterior", + "e-exterior", + ) + + def _is_manual_document_number(self): + if self.country_code == "DO": + return self._is_l10n_do_manual_document_number() + return super()._is_manual_document_number() + + def _must_check_constrains_date_sequence(self): + if self.country_code == "DO": + return False + return super(AccountMove, self)._must_check_constrains_date_sequence() + + def _get_sequence_format_param(self, previous): + + if self.country_code != "DO": + return super(AccountMove, self)._get_sequence_format_param(previous) + + regex = r"^(?P.*?)(?P\d{0,8})$" + + format_values = re.match(regex, previous).groupdict() + format_values["seq_length"] = len(format_values["seq"]) + format_values["seq"] = int(format_values.get("seq") or 0) + format_values["year_length"] = 1 + + placeholders = re.findall(r"(prefix\d|seq\d?)", regex) + format = "".join( + "{seq:0{seq_length}d}" if s == "seq" else "{%s}" % s for s in placeholders + ) + return format, format_values + + def _get_last_sequence_domain(self, relaxed=False): + where_string, param = super(AccountMove, self)._get_last_sequence_domain( + relaxed + ) + if self.country_code == "DO" and self.l10n_latam_use_documents: + where_string = where_string.replace("journal_id = %(journal_id)s AND", "") + where_string += ( + " AND l10n_latam_document_type_id = %(l10n_latam_document_type_id)s AND " + "company_id = %(company_id)s AND move_type IN %(move_type)s" + ) + + param["company_id"] = self.company_id.id or False + param["l10n_latam_document_type_id"] = ( + self.l10n_latam_document_type_id.id or 0 + ) + param["move_type"] = ( + ("in_invoice", "in_refund") + if self.l10n_latam_document_type_id._is_l10n_do_doc_type_vendor() + else ("out_invoice", "out_refund") + ) + return where_string, param + + def _get_l10n_do_amounts(self, company_currency=False): + """ + Method used to to prepare dominican fiscal invoices amounts data. Widely used + on reports and electronic invoicing. + + Returned values: + + itbis_amount: Total ITBIS + itbis_taxable_amount: Monto Gravado Total (con ITBIS) + itbis_exempt_amount: Monto Exento + """ + self.ensure_one() + amount_field = company_currency and "balance" or "price_subtotal" + sign = -1 if (company_currency and self.is_inbound()) else 1 + + itbis_tax_group = self.env.ref( + "account.%s_group_itbis" % self.company_id.id, False + ) + + taxed_move_lines = self.line_ids.filtered("tax_line_id") + itbis_taxed_move_lines = taxed_move_lines.filtered( + lambda l: itbis_tax_group in l.tax_line_id.mapped("tax_group_id") + and l.tax_line_id.amount > 0 + ) + + itbis_taxed_product_lines = self.invoice_line_ids.filtered( + lambda l: itbis_tax_group in l.tax_ids.mapped("tax_group_id") + ) + + return { + "itbis_amount": sign * sum(itbis_taxed_move_lines.mapped(amount_field)), + "itbis_taxable_amount": sign + * sum( + line[amount_field] + for line in itbis_taxed_product_lines + if line.price_total != line.price_subtotal + ), + "itbis_exempt_amount": sign + * sum( + line[amount_field] + for line in itbis_taxed_product_lines + if any(True for tax in line.tax_ids if tax.amount == 0) + ), + "company_invoice_total": abs(self.amount_untaxed_signed) + + sum( + ( + line.debit or line.credit + if self.currency_id == self.company_id.currency_id + else abs(line.amount_currency) + ) + for line in self.line_ids.filtered( + lambda l: l.tax_line_id and l.tax_line_id.amount > 0 + ) + ), + "invoice_total": abs(self.amount_untaxed) + + sum( + ( + line.debit or line.credit + if self.currency_id == self.company_id.currency_id + else abs(line.amount_currency) + ) + for line in self.line_ids.filtered( + lambda l: l.tax_line_id and l.tax_line_id.amount > 0 + ) + ), + } + + def _get_name_invoice_report(self): + self.ensure_one() + if ( + self.l10n_latam_use_documents + and self.company_id.account_fiscal_country_id.code == "DO" + ): + return "l10n_do.report_invoice_document" + return super()._get_name_invoice_report() + + @api.constrains("move_type", "l10n_latam_document_type_id") + def _check_invoice_type_document_type(self): + l10n_do_invoices = self.filtered( + lambda inv: inv.country_code == "DO" + and inv.l10n_latam_use_documents + and inv.l10n_latam_document_type_id + ) + for rec in l10n_do_invoices: + has_vat = bool(rec.partner_id.vat and bool(rec.partner_id.vat.strip())) + if not has_vat and ( + rec.amount_untaxed_signed >= 250000 + and rec.commercial_partner_id.l10n_do_dgii_tax_payer_type == "non_payer" + ): + raise ValidationError( + _( + "A VAT is mandatory for this type of NCF. " + "Please set the current VAT of this client" + ) + ) + super(AccountMove, self - l10n_do_invoices)._check_invoice_type_document_type() + + def _post(self, soft=True): + + res = super()._post(soft) + + l10n_do_invoices = self.filtered( + lambda inv: inv.country_code == "DO" + and inv.l10n_latam_use_documents + and inv.l10n_latam_document_type_id + ) + + for invoice in l10n_do_invoices: + invoice.l10n_do_ncf_expiration_date = ( + invoice.journal_id.l10n_do_document_type_ids.filtered( + lambda doc: doc.l10n_latam_document_type_id + == invoice.l10n_latam_document_type_id + ).l10n_do_ncf_expiration_date + ) + + non_payer_type_invoices = l10n_do_invoices.filtered( + lambda inv: not inv.partner_id.l10n_do_dgii_tax_payer_type + ) + if non_payer_type_invoices: + raise ValidationError(_("Fiscal invoices require partner fiscal type")) + + return res + + def unlink(self): + if self.filtered( + lambda inv: inv.is_purchase_document() + and inv.country_code == "DO" + and inv.l10n_latam_use_documents + and inv.posted_before + ): + raise UserError( + _("You cannot delete fiscal invoice which have been posted before") + ) + return super(AccountMove, self).unlink() diff --git a/addons/l10n_do/models/l10n_latam_document_type.py b/addons/l10n_do/models/l10n_latam_document_type.py new file mode 100644 index 0000000000000..23bb088bb0db6 --- /dev/null +++ b/addons/l10n_do/models/l10n_latam_document_type.py @@ -0,0 +1,97 @@ +from re import compile + +from odoo import models, fields, _ +from odoo.exceptions import ValidationError + + +class L10nLatamDocumentType(models.Model): + _inherit = "l10n_latam.document.type" + + def _get_l10n_do_ncf_types(self): + """Return a list of fiscal types and their respective sequence type to be used + on sequences, journals and document types.""" + return [ + ("fiscal", "01"), + ("consumer", "02"), + ("debit_note", "03"), + ("credit_note", "04"), + ("informal", "11"), + ("unique", "12"), + ("minor", "13"), + ("special", "14"), + ("governmental", "15"), + ("export", "16"), + ("exterior", "17"), + ("e-fiscal", "31"), + ("e-consumer", "32"), + ("e-debit_note", "33"), + ("e-credit_note", "34"), + ("e-informal", "41"), + ("e-minor", "43"), + ("e-special", "44"), + ("e-governmental", "45"), + ("e-export", "46"), + ("e-exterior", "47"), + ("in_fiscal", "01"), + ] + + l10n_do_ncf_type = fields.Selection( + selection="_get_l10n_do_ncf_types", + string="NCF types", + help="NCF types defined by the DGII that can be used to identify the" + " documents presented to the government and that depends on the" + " operation type, the responsibility of both the issuer and the" + " receptor of the document", + ) + l10n_do_ncf_expiration_date = fields.Date( # Deprecated. Do not forward port. + string="NCF Expiration date", + required=True, + default=fields.Date.end_of(fields.Date.today(), "year"), + ) + internal_type = fields.Selection( + selection_add=[ + ("in_invoice", "Supplier Invoices"), + ("in_credit_note", "Supplier Credit Note"), + ("in_debit_note", "Supplier Debit Note"), + ], + ondelete={ + "in_invoice": "cascade", + "in_credit_note": "cascade", + "in_debit_note": "cascade", + }, + ) + + def _is_l10n_do_doc_type_vendor(self): + return self.l10n_do_ncf_type in [ + "informal", + "minor", + "exterior", + "e-informal", + "e-minor", + "e-exterior", + ] + + def _format_document_number(self, document_number): + """Make validation of Import Dispatch Number + * making validations on the document_number. + * format the document_number against a pattern and return it + """ + self.ensure_one() + if self.country_id != self.env.ref("base.do"): + return super()._format_document_number(document_number) + + if not document_number: + return False + + # NCF/ECF validation regex + regex = r"^(P?((?=.{13})E)type(\d{10})|(((?=.{11})B))type(\d{8}))$".replace( + "type", dict(self._get_l10n_do_ncf_types())[self.l10n_do_ncf_type] + ) + pattern = compile(regex) + + if not bool(pattern.match(document_number)): + raise ValidationError( + _("NCF %s doesn't have the correct structure") % document_number + ) + + return document_number diff --git a/addons/l10n_do/models/res_company.py b/addons/l10n_do/models/res_company.py new file mode 100644 index 0000000000000..fa8d8d69472b7 --- /dev/null +++ b/addons/l10n_do/models/res_company.py @@ -0,0 +1,19 @@ +from odoo import models, fields + + +class ResCompany(models.Model): + _inherit = "res.company" + + l10n_do_ecf_issuer = fields.Boolean( + "Is e-CF issuer", + help="When activating this field, NCF issuance is disabled.", + ) + + def _localization_use_documents(self): + """ Dominican localization uses documents """ + self.ensure_one() + return ( + True + if self.country_id == self.env.ref("base.do") + else super()._localization_use_documents() + ) diff --git a/addons/l10n_do/models/res_partner.py b/addons/l10n_do/models/res_partner.py new file mode 100644 index 0000000000000..6a27d8dbe8a65 --- /dev/null +++ b/addons/l10n_do/models/res_partner.py @@ -0,0 +1,138 @@ +from odoo import models, fields, api, _ +from odoo.exceptions import AccessError + + +class Partner(models.Model): + _inherit = "res.partner" + + def _get_l10n_do_dgii_payer_types_selection(self): + """Return the list of payer types needed in invoices to clasify accordingly to + DGII requirements.""" + return [ + ("taxpayer", _("Fiscal Tax Payer")), + ("non_payer", _("Non Tax Payer")), + ("nonprofit", _("Nonprofit Organization")), + ("special", _("special from Tax Paying")), + ("governmental", _("Governmental")), + ("foreigner", _("Foreigner")), + ] + + l10n_do_dgii_tax_payer_type = fields.Selection( + selection="_get_l10n_do_dgii_payer_types_selection", + compute="_compute_l10n_do_dgii_payer_type", + inverse="_inverse_l10n_do_dgii_tax_payer_type", + string="Taxpayer Type", + index=True, + store=True, + ) + country_id = fields.Many2one( + default=lambda self: self.env.ref("base.do") + if self.env.user.company_id.country_id == self.env.ref("base.do") + else False + ) + + @api.model + def _commercial_fields(self): + return super()._commercial_fields() + ["l10n_do_dgii_tax_payer_type"] + + def _check_l10n_do_fiscal_fields(self, vals): + + if not self or self.parent_id: + # Do not perform any check because child contacts + # have readonly fiscal field. This also allows set + # contacts parent, even if this changes any of its + # fiscal fields. + return + + fiscal_fields = [ + field + for field in ["name", "vat", "country_id"] # l10n_do_dgii_tax_payer_type ? + if field in vals + ] + if ( + fiscal_fields + and self.env["account.move"] + .sudo() + .search( + [ + ("l10n_latam_use_documents", "=", True), + ("country_code", "=", "DO"), + ("commercial_partner_id", "=", self.id), + ("state", "=", "posted"), + ], + limit=1, + ) + ): + raise AccessError( + _( + "You are not allowed to modify %s after partner " + "fiscal document issuing" + ) + % (", ".join(self._fields[f].string for f in fiscal_fields)) + ) + + def write(self, vals): + + res = super(Partner, self).write(vals) + self._check_l10n_do_fiscal_fields(vals) + + return res + + @api.depends("vat", "country_id", "name") + def _compute_l10n_do_dgii_payer_type(self): + """ Compute the type of partner depending on soft decisions""" + company_id = self.env["res.company"].search( + [("id", "=", self.env.user.company_id.id)] + ) + for partner in self: + vat = str(partner.vat if partner.vat else partner.name) + is_dominican_partner = partner.country_id == self.env.ref("base.do") + + if partner.country_id and not is_dominican_partner: + partner.l10n_do_dgii_tax_payer_type = "foreigner" + + elif vat and ( + not partner.l10n_do_dgii_tax_payer_type + or partner.l10n_do_dgii_tax_payer_type == "non_payer" + ): + if partner.country_id and is_dominican_partner: + if vat.isdigit() and len(vat) == 9: + if not partner.vat: + partner.vat = vat + if partner.name and "MINISTERIO" in partner.name: + partner.l10n_do_dgii_tax_payer_type = "governmental" + elif partner.name and any( + [n for n in ("IGLESIA", "ZONA FRANCA") if n in partner.name] + ): + partner.l10n_do_dgii_tax_payer_type = "special" + elif vat.startswith("1"): + partner.l10n_do_dgii_tax_payer_type = "taxpayer" + elif vat.startswith("4"): + partner.l10n_do_dgii_tax_payer_type = "nonprofit" + else: + partner.l10n_do_dgii_tax_payer_type = "taxpayer" + + elif len(vat) == 11: + if vat.isdigit(): + if not partner.vat: + partner.vat = vat + payer_type = ( + "taxpayer" + if company_id.l10n_do_default_client == "fiscal" + else "non_payer" + ) + partner.l10n_do_dgii_tax_payer_type = payer_type + else: + partner.l10n_do_dgii_tax_payer_type = "non_payer" + else: + partner.l10n_do_dgii_tax_payer_type = "non_payer" + elif not partner.l10n_do_dgii_tax_payer_type: + partner.l10n_do_dgii_tax_payer_type = "non_payer" + else: + partner.l10n_do_dgii_tax_payer_type = ( + partner.l10n_do_dgii_tax_payer_type + ) + + def _inverse_l10n_do_dgii_tax_payer_type(self): + for partner in self: + partner.l10n_do_dgii_tax_payer_type = partner.l10n_do_dgii_tax_payer_type diff --git a/addons/l10n_do/models/template_do.py b/addons/l10n_do/models/template_do.py index f3ff71a7310c6..9a3f3aa33e844 100644 --- a/addons/l10n_do/models/template_do.py +++ b/addons/l10n_do/models/template_do.py @@ -4,67 +4,67 @@ class AccountChartTemplate(models.AbstractModel): - _inherit = 'account.chart.template' + _inherit = "account.chart.template" - @template('do') + @template("do") def _get_do_template_data(self): return { - 'code_digits': '8', - 'use_anglo_saxon': True, - 'property_account_receivable_id': 'do_niif_11030201', - 'property_account_payable_id': 'do_niif_21010200', - 'property_account_income_categ_id': 'do_niif_41010100', - 'property_account_expense_categ_id': 'do_niif_51010100', - 'property_stock_account_input_categ_id': 'do_niif_21021200', - 'property_stock_account_output_categ_id': 'do_niif_11050600', - 'property_stock_valuation_account_id': 'do_niif_11050100', + "code_digits": "8", + "use_anglo_saxon": True, + "property_account_receivable_id": "do_niif_11030201", + "property_account_payable_id": "do_niif_21010200", + "property_account_income_categ_id": "do_niif_41010100", + "property_account_expense_categ_id": "do_niif_51010100", + "property_stock_account_input_categ_id": "do_niif_21021200", + "property_stock_account_output_categ_id": "do_niif_11050600", + "property_stock_valuation_account_id": "do_niif_11050100", } - @template('do', 'res.company') + @template("do", "res.company") def _get_do_res_company(self): return { self.env.company.id: { - 'account_fiscal_country_id': 'base.do', - 'bank_account_code_prefix': '110102', - 'cash_account_code_prefix': '110101', - 'transfer_account_code_prefix': '11010100', - 'account_default_pos_receivable_account_id': 'do_niif_11030210', - 'income_currency_exchange_account_id': 'do_niif_42040100', - 'expense_currency_exchange_account_id': 'do_niif_52070800', - 'account_journal_early_pay_discount_loss_account_id': 'do_niif_99900003', - 'account_journal_early_pay_discount_gain_account_id': 'do_niif_99900004', + "account_fiscal_country_id": "base.do", + "bank_account_code_prefix": "110102", + "cash_account_code_prefix": "110101", + "transfer_account_code_prefix": "11010100", + "account_default_pos_receivable_account_id": "do_niif_11030210", + "income_currency_exchange_account_id": "do_niif_42040100", + "expense_currency_exchange_account_id": "do_niif_52070800", + "account_journal_early_pay_discount_loss_account_id": "do_niif_99900003", + "account_journal_early_pay_discount_gain_account_id": "do_niif_99900004", }, } - @template('do', 'account.journal') + @template("do", "account.journal") def _get_do_account_journal(self): return { "caja_chica": { - 'name': _('Caja Chica'), - 'type': 'cash', - 'sequence': 10, + "name": _("Caja Chica"), + "type": "cash", + "sequence": 10, }, "cheques_clientes": { - 'name': _('Cheques Clientes'), - 'type': 'cash', - 'sequence': 10, + "name": _("Cheques Clientes"), + "type": "cash", + "sequence": 10, }, "gasto": { - 'type': 'purchase', - 'name': _('Gastos No Deducibles'), - 'code': 'GASTO', - 'show_on_dashboard': True, + "type": "purchase", + "name": _("Gastos No Deducibles"), + "code": "GASTO", + "show_on_dashboard": True, }, "cxp": { - 'type': 'purchase', - 'name': _('Migración CxP'), - 'code': 'CXP', - 'show_on_dashboard': True, + "type": "purchase", + "name": _("Migración CxP"), + "code": "CXP", + "show_on_dashboard": True, }, "cxc": { - 'type': 'sale', - 'name': _('Migración CxC'), - 'code': 'CXC', - 'show_on_dashboard': True, + "type": "sale", + "name": _("Migración CxC"), + "code": "CXC", + "show_on_dashboard": True, }, } diff --git a/addons/l10n_do/security/ir.model.access.csv b/addons/l10n_do/security/ir.model.access.csv new file mode 100644 index 0000000000000..0cd4cd7641014 --- /dev/null +++ b/addons/l10n_do/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_l10n_do_account_journal_document_type,access_l10n_do_account_journal_document_type,model_l10n_do_account_journal_document_type,base.group_user,1,1,0,0 \ No newline at end of file diff --git a/addons/l10n_do/views/account_journal_views.xml b/addons/l10n_do/views/account_journal_views.xml new file mode 100644 index 0000000000000..2b61ea02a1a22 --- /dev/null +++ b/addons/l10n_do/views/account_journal_views.xml @@ -0,0 +1,23 @@ + + + + account.journal + account.journal.form + + + + + + + + + + + + + + + + diff --git a/addons/l10n_do/views/l10n_latam_document_type_views.xml b/addons/l10n_do/views/l10n_latam_document_type_views.xml new file mode 100644 index 0000000000000..6d1d102fb714e --- /dev/null +++ b/addons/l10n_do/views/l10n_latam_document_type_views.xml @@ -0,0 +1,41 @@ + + + + + l10n_latam.document.type.form + l10n_latam.document.type + + + + + + + + + + l10n_latam.document.type.tree + l10n_latam.document.type + + + + + + + + + + l10n_latam.document.type.filter + l10n_latam.document.type + + + + + + + + + + + + + diff --git a/addons/l10n_do/views/report_invoice.xml b/addons/l10n_do/views/report_invoice.xml new file mode 100644 index 0000000000000..853a3d5a95b38 --- /dev/null +++ b/addons/l10n_do/views/report_invoice.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + diff --git a/addons/l10n_do/views/report_templates.xml b/addons/l10n_do/views/report_templates.xml new file mode 100644 index 0000000000000..e36c9bfcc5562 --- /dev/null +++ b/addons/l10n_do/views/report_templates.xml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/addons/l10n_do/views/res_company_views.xml b/addons/l10n_do/views/res_company_views.xml new file mode 100644 index 0000000000000..848db342cc101 --- /dev/null +++ b/addons/l10n_do/views/res_company_views.xml @@ -0,0 +1,13 @@ + + + + res.company.form.inherit + + res.company + + + + + + + diff --git a/addons/l10n_do/views/res_config_settings_view.xml b/addons/l10n_do/views/res_config_settings_view.xml new file mode 100644 index 0000000000000..5e163c4053cbe --- /dev/null +++ b/addons/l10n_do/views/res_config_settings_view.xml @@ -0,0 +1,19 @@ + + + + + res.config.settings.view.form.inherited + res.config.settings + + + +
+

Dominican Localization

+
+
+ + + + + diff --git a/addons/l10n_do/views/res_partner_views.xml b/addons/l10n_do/views/res_partner_views.xml new file mode 100644 index 0000000000000..3181d45f9225a --- /dev/null +++ b/addons/l10n_do/views/res_partner_views.xml @@ -0,0 +1,16 @@ + + + + + view.partner.property.form + + res.partner + + + + + + + +