Compare commits

...

2 Commits

Author SHA1 Message Date
e766e5b747 Typescript resuelto 2026-02-10 13:19:12 -07:00
471c263158 feat: Advanced filtering system v1.4.1.2
''
2026-02-10 13:04:46 -07:00
11 changed files with 28 additions and 60 deletions

BIN
backend/.coverage Normal file

Binary file not shown.

View File

@@ -366,49 +366,6 @@ async def get_all_tickets_admin(
]
@router.get("/{ticket_id}", response_model=TicketResponse)
async def get_ticket(
ticket_id: str,
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user)
):
if status_filter:
try:
status_enum = TicketStatus[status_filter.upper()]
query = query.where(Ticket.status == status_enum)
except KeyError:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=f"Invalid status: {status_filter}"
)
query = query.order_by(Ticket.created_at.desc()).offset(skip).limit(limit)
result = await db.execute(query)
tickets = result.scalars().all()
# ✅ CORREGIDO: Usar affected_system_id
return [
{
"id": str(t.id),
"ticket_number": t.ticket_number,
"subject": t.subject,
"title": t.subject,
"description": t.description,
"status": t.status.value,
"priority": t.priority.value,
"category_id": str(t.category_id) if t.category_id else None,
"affected_system_id": str(t.affected_system_id) if t.affected_system_id else None, # ✅ CORREGIDO
"created_by": str(t.created_by),
"assigned_to": str(t.assigned_to) if t.assigned_to else None,
"created_at": t.created_at,
"updated_at": t.updated_at
}
for t in tickets
]
@router.get("/{ticket_id}", response_model=TicketResponse)
async def get_ticket(
ticket_id: str,

View File

@@ -59,7 +59,6 @@
<button
on:click={toggleMenu}
class="flex items-center space-x-2 text-gray-700 hover:text-primary-600 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 rounded-md p-2"
role="button"
tabindex="0"
on:keydown={(e) => e.key === 'Enter' && toggleMenu()}
>

View File

@@ -174,5 +174,6 @@
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
line-clamp: 2; /* Propiedad estándar para compatibilidad */
}
</style>

View File

@@ -214,7 +214,6 @@
maxlength="6"
required
disabled={isLoading}
autofocus
/>
</div>
</div>

View File

@@ -461,8 +461,9 @@
<h3 class="font-medium text-gray-900 mb-4">Información General</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<label class="form-label">Razón Social</label>
<label class="form-label" for="business_name">Razón Social</label>
<input
id="business_name"
type="text"
class="form-input"
bind:value={businessProfile.business_name}
@@ -471,8 +472,9 @@
</div>
<div>
<label class="form-label">Nombre Comercial</label>
<label class="form-label" for="commercial_name">Nombre Comercial</label>
<input
id="commercial_name"
type="text"
class="form-input"
bind:value={businessProfile.commercial_name}
@@ -481,8 +483,9 @@
</div>
<div>
<label class="form-label">Clave de Cliente</label>
<label class="form-label" for="client_code">Clave de Cliente</label>
<input
id="client_code"
type="text"
class="form-input"
bind:value={businessProfile.client_code}
@@ -491,7 +494,7 @@
</div>
<div>
<label class="form-label">Tipo de Cliente</label>
<label class="form-label" for="client_type">Tipo de Cliente</label>
<select class="form-input" bind:value={businessProfile.client_type}>
<option value="">Seleccionar...</option>
<option value="corporativo">Corporativo</option>
@@ -503,8 +506,9 @@
</div>
<div>
<label class="form-label">RFC</label>
<label class="form-label" for="rfc">RFC</label>
<input
id="rfc"
type="text"
class="form-input {businessProfileErrors.rfc ? 'border-red-300' : ''}"
bind:value={businessProfile.rfc}
@@ -518,8 +522,9 @@
</div>
<div>
<label class="form-label">ID Fiscal (Otros países)</label>
<label class="form-label" for="tax_id">ID Fiscal (Otros países)</label>
<input
id="tax_id"
type="text"
class="form-input"
bind:value={businessProfile.tax_id}
@@ -619,8 +624,9 @@
<h3 class="font-medium text-gray-900 mb-4">Representantes</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<label class="form-label">Encargado/Representante</label>
<label class="form-label" for="company_representative">Encargado/Representante</label>
<input
id="company_representative"
type="text"
class="form-input"
bind:value={businessProfile.company_representative}
@@ -629,8 +635,9 @@
</div>
<div>
<label class="form-label">Representante Legal</label>
<label class="form-label" for="legal_representative">Representante Legal</label>
<input
id="legal_representative"
type="text"
class="form-input"
bind:value={businessProfile.legal_representative}
@@ -645,7 +652,7 @@
<h3 class="font-medium text-gray-900 mb-4">Configuración</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<label class="form-label">Moneda Preferida</label>
<label class="form-label" for="preferred_currency">Moneda Preferida</label>
<select class="form-input" bind:value={businessProfile.preferred_currency}>
<option value="MXN">MXN - Peso Mexicano</option>
<option value="USD">USD - Dólar Americano</option>
@@ -654,12 +661,12 @@
</div>
<div>
<label class="form-label">Nacionalidad</label>
<label class="form-label" for="nationality">Nacionalidad</label>
<input type="text" class="form-input" bind:value={businessProfile.nationality} />
</div>
<div class="md:col-span-2">
<label class="form-label">Notas Adicionales</label>
<label class="form-label" for="notes">Notas Adicionales</label>
<textarea
class="form-input"
rows="3"

View File

@@ -473,7 +473,7 @@
{#if showCloseDialog}
<div class="fixed inset-0 z-50 overflow-y-auto">
<div class="flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 transition-opacity" on:click={cancelCloseTicket}>
<div class="fixed inset-0 transition-opacity" role="dialog" tabindex="0" on:click={cancelCloseTicket} on:keydown={(e) => e.key === 'Escape' && cancelCloseTicket()}>
<div class="absolute inset-0 bg-gray-500 opacity-75"></div>
</div>

View File

@@ -18,7 +18,8 @@
"DOM.Iterable"
],
"allowSyntheticDefaultImports": true,
"isolatedModules": true
"isolatedModules": true,
"verbatimModuleSyntax": true
},
"include": [
"src/**/*",

View File

@@ -84,6 +84,9 @@
{#if isMenuOpen}
<div
class="fixed inset-0 z-40 lg:hidden"
role="dialog"
tabindex="0"
on:click={() => isMenuOpen = false}
on:keydown={(e) => e.key === 'Escape' && (isMenuOpen = false)}
></div>
{/if}

View File

@@ -78,7 +78,7 @@
<!-- Mobile sidebar backdrop -->
{#if open}
<div class="fixed inset-0 z-40 lg:hidden">
<div class="fixed inset-0 bg-gray-600 bg-opacity-75" on:click={() => open = false}></div>
<div class="fixed inset-0 bg-gray-600 bg-opacity-75" role="dialog" tabindex="0" on:click={() => open = false} on:keydown={(e) => e.key === 'Escape' && (open = false)}></div>
</div>
{/if}

View File

@@ -18,7 +18,8 @@
"DOM.Iterable"
],
"allowSyntheticDefaultImports": true,
"isolatedModules": true
"isolatedModules": true,
"verbatimModuleSyntax": true
},
"include": [
"src/**/*",