diff --git a/backend/api/v1/modules/a76/invoices/services.py b/backend/api/v1/modules/a76/invoices/services.py index 3960adf8..2d110de1 100644 --- a/backend/api/v1/modules/a76/invoices/services.py +++ b/backend/api/v1/modules/a76/invoices/services.py @@ -1,7 +1,7 @@ import traceback from typing import Optional, List, Tuple from sqlalchemy.orm import Session -from sqlalchemy import func +from sqlalchemy import and_, func, or_ from core.exceptions import ErrorCollector, DuplicateResourceException from core.context import get_user_context from .common.mappers import clean_dict @@ -328,7 +328,6 @@ class InvoiceService: # Filtro por permisos granulares (allowed_types) if "allowed_types" in filters: - from sqlalchemy import or_, and_ allowed = filters["allowed_types"] if allowed is None: # Acceso global (admin o view_all) - no filtramos por tipos @@ -337,7 +336,6 @@ class InvoiceService: # Seguridad: Si el usuario NO tiene permisos para ningún tipo específico query = query.filter(models.InvoiceHeader.id == -1) else: - from sqlalchemy import func conditions = [] for op, inv in allowed: # Aseguramos comparación insensible a mayúsculas para mayor robustez con la DB diff --git a/frontend/src/lib/components/sidebar/nav-projects.svelte b/frontend/src/lib/components/sidebar/nav-projects.svelte index 15f67eb9..ced6fb82 100644 --- a/frontend/src/lib/components/sidebar/nav-projects.svelte +++ b/frontend/src/lib/components/sidebar/nav-projects.svelte @@ -86,7 +86,7 @@ More - + (open = v)}> - + diff --git a/frontend/src/routes/dashboard/invoices/+page.svelte b/frontend/src/routes/dashboard/invoices/+page.svelte index e0d2ac57..7fb32bb5 100644 --- a/frontend/src/routes/dashboard/invoices/+page.svelte +++ b/frontend/src/routes/dashboard/invoices/+page.svelte @@ -79,8 +79,8 @@ operation_type: (data.filters?.operation_type || '') as '' | OperationType, invoice_type: data.filters?.invoice_type || '', invoice_number: data.filters?.invoice_number || '', - year_from: data.filters?.year_from || '', - year_to: data.filters?.year_to || '' + year_from: data.filters?.year || '', + year_to: data.filters?.year || '' }); let sorting = $state([]); @@ -279,22 +279,22 @@ const op = filters.operation_type; const type = filters.invoice_type; - const base = m.invoice_list_titles_base(); + const base = m['invoice_list.titles.base'](); if (op === 'imp') { - if (type === 'TEM') return `${base} ${m.invoice_list_titles_import_temporal()}`; - if (type === 'DEF') return `${base} ${m.invoice_list_titles_import_definitive()}`; - if (type === 'MEX') return `${base} ${m.invoice_list_titles_import_mexican()}`; - if (type === 'CR') return `${base} ${m.invoice_list_titles_import_regime_change()}`; - if (type === 'REP') return `${base} ${m.invoice_list_titles_import_repair()}`; - return `${base} ${m.invoice_list_titles_import()}`; + if (type === 'TEM') return `${base} ${m['invoice_list.titles.import_temporal']()}`; + if (type === 'DEF') return `${base} ${m['invoice_list.titles.import_definitive']()}`; + if (type === 'MEX') return `${base} ${m['invoice_list.titles.import_mexican']()}`; + if (type === 'CR') return `${base} ${m['invoice_list.titles.import_regime_change']()}`; + if (type === 'REP') return `${base} ${m['invoice_list.titles.import_repair']()}`; + return `${base} ${m['invoice_list.titles.import']()}`; } else if (op === 'exp') { - if (type === 'EXDEF') return `${base} ${m.invoice_list_titles_export_definitive()}`; - if (type === 'REPAR') return `${base} ${m.invoice_list_titles_export_repair()}`; - return `${base} ${m.invoice_list_titles_export()}`; + if (type === 'EXDEF') return `${base} ${m['invoice_list.titles.export_definitive']()}`; + if (type === 'REPAR') return `${base} ${m['invoice_list.titles.export_repair']()}`; + return `${base} ${m['invoice_list.titles.export']()}`; } - return m.invoice_list_header_title(); + return m['invoice_list.header.title'](); }); async function loadMore() { @@ -1678,14 +1678,16 @@ {#if showVuSubmenu} -
(showVuSubmenu = false)} oncontextmenu={(event) => { event.preventDefault(); showVuSubmenu = false; }} - >
+ >