Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 40 additions & 15 deletions l10n_ar_demo/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
old_load_manifest = module.load_manifest


def load_manifest(module, mod_path=None):
info = old_load_manifest(module, mod_path=mod_path)
if module in ['l10n_ar', 'l10n_ar_edi', 'l10n_ar_website_sale']:
def load_manifest(module_name, mod_path=None):
info = old_load_manifest(module_name, mod_path=mod_path)
if module_name in ['l10n_ar', 'l10n_ar_edi', 'l10n_ar_website_sale']:
info['demo'] = []
return info

Expand All @@ -26,16 +26,41 @@ def load_manifest(module, mod_path=None):


def _load_l10n_ar_demo_data(cr):
"""
Carga los datos demo de l10n_ar que fueron ocultados por load_manifest.
Este hook se ejecuta antes de cargar los demos de l10n_ar_demo para asegurar
que las dependencias (journals, productos, partners, etc) existan.
"""
env = api.Environment(cr, SUPERUSER_ID, {})
for module_name in ['l10n_ar', 'l10n_ar_edi', 'l10n_ar_website_sale']:
_logger.info('Loading demo data from %s' % module_name)
manifest_file = module.module_manifest(module.get_module_path(module_name))
f = tools.file_open(manifest_file, mode='rb')
try:
info = ast.literal_eval(tools.pycompat.to_text(f.read()))
finally:
f.close()
for demo_data in info.get('demo'):
_logger.info('Loading %s', (demo_data))
tools.convert_file(cr, module_name, demo_data, {}, 'init', True, 'demo', None)
env.cr.commit()

# Verificar si los datos demo ya fueron cargados (para evitar recargas en upgrades)
# Verificamos con company_exento que se crea en el primer archivo demo (exento_demo.xml)
if env['ir.model.data'].search([('module', '=', 'l10n_ar'), ('name', '=', 'company_exento')], limit=1):
_logger.info('Demo data from l10n_ar already loaded, skipping manual load')
return

# Desactivar constraints problemáticas temporalmente durante la carga inicial
# Esto es necesario porque los archivos demo de l10n_ar tienen problemas de orden
Copy link

Copilot AI Nov 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acceder directamente al registro (env.registry['account.journal']) para modificar métodos de clase es un patrón frágil. Si el modelo no existe o hay un error tipográfico en el nombre, fallará silenciosamente. Considera agregar validación: if 'account.journal' not in env.registry: _logger.warning('account.journal not found'); return.

Suggested change
# Esto es necesario porque los archivos demo de l10n_ar tienen problemas de orden
# Esto es necesario porque los archivos demo de l10n_ar tienen problemas de orden
if 'account.journal' not in env.registry:
_logger.warning('account.journal not found in registry; skipping demo data load')
return

Copilot uses AI. Check for mistakes.
AccountJournal = env.registry['account.journal']
orig_check1 = AccountJournal.check_use_document
orig_check2 = AccountJournal._check_afip_configurations
Comment on lines +45 to +46
Copy link

Copilot AI Nov 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si check_use_document o _check_afip_configurations no existen como atributos en el modelo, esta asignación fallará con AttributeError. Considera usar getattr(AccountJournal, 'check_use_document', None) para manejar casos donde estos métodos no existan en versiones diferentes del módulo.

Copilot uses AI. Check for mistakes.
AccountJournal.check_use_document = lambda self: None
AccountJournal._check_afip_configurations = lambda self: None

try:
for module_name in ['l10n_ar', 'l10n_ar_edi', 'l10n_ar_website_sale']:
_logger.info('Loading demo data from %s' % module_name)
manifest_file = module.module_manifest(module.get_module_path(module_name))
f = tools.file_open(manifest_file, mode='rb')
try:
info = ast.literal_eval(tools.pycompat.to_text(f.read()))
finally:
f.close()
Comment on lines +54 to +58
Copy link

Copilot AI Nov 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Considera usar context manager (with tools.file_open(...) as f:) en lugar de try/finally manual para manejar el cierre del archivo. Esto es más idiomático en Python y garantiza el cierre incluso si ocurre una excepción durante ast.literal_eval.

Suggested change
f = tools.file_open(manifest_file, mode='rb')
try:
info = ast.literal_eval(tools.pycompat.to_text(f.read()))
finally:
f.close()
with tools.file_open(manifest_file, mode='rb') as f:
info = ast.literal_eval(tools.pycompat.to_text(f.read()))

Copilot uses AI. Check for mistakes.
for demo_data in info.get('demo', []):
_logger.info('Loading %s', (demo_data))
Copy link

Copilot AI Nov 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

El parámetro demo_data está envuelto en una tupla innecesaria (demo_data). Debería ser simplemente demo_data o demo_data, si se pretende una tupla. La sintaxis actual funciona porque los paréntesis no crean tuplas por sí solos.

Suggested change
_logger.info('Loading %s', (demo_data))
_logger.info('Loading %s', demo_data)

Copilot uses AI. Check for mistakes.
tools.convert_file(cr, module_name, demo_data, {}, 'init', True, 'demo', None)
env.cr.commit()
finally:
# Restaurar constraints
AccountJournal.check_use_document = orig_check1
AccountJournal._check_afip_configurations = orig_check2
1 change: 1 addition & 0 deletions l10n_ar_demo/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
'data': [
],
'demo': [
'demo/account_journal_demo.xml',
'demo/account_tax_demo.xml',
'demo/customer_payment_demo.xml',
'demo/supplier_payment_demo.xml',
Expand Down
29 changes: 29 additions & 0 deletions l10n_ar_demo/demo/account_journal_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Crear diarios de retenciones para las empresas demo -->
<!-- Estos normalmente se crean por account_chart_template._create_bank_journals -->
<!-- pero solo si l10n_ar_account_withholding está instalado cuando se aplica el chart template -->

<record id="withholding_journal_ri" model="account.journal">
<field name="name">Retenciones</field>
<field name="type">cash</field>
<field name="company_id" ref="l10n_ar.company_ri"/>
<field name="code">RET</field>
</record>

<record id="withholding_journal_exento" model="account.journal">
<field name="name">Retenciones</field>
<field name="type">cash</field>
<field name="company_id" ref="l10n_ar.company_exento"/>
<field name="code">RET</field>
</record>

<record id="withholding_journal_mono" model="account.journal">
<field name="name">Retenciones</field>
<field name="type">cash</field>
<field name="company_id" ref="l10n_ar.company_mono"/>
<field name="code">RET</field>
</record>
</data>
</odoo>