Skip to content

Tarjetas - Documentacion Tecnica Frontend

Modulo: ventas Feature: Tarjetas (tipos de tarjeta para facturacion) Fecha: 2026-02-09

DOCUMENTACION RETROSPECTIVA - Generada a partir de codigo implementado el 2026-02-09


Documento de Negocio

Requisitos de Negocio - Tarjetas


Arquitectura: Legacy (Vanilla JS + PHP)

Este recurso esta implementado enteramente con la arquitectura legacy del sistema: PHP server-side rendering para la vista, vanilla JavaScript con jQuery para la logica del cliente, y el patron proxy (backend PHP intermedio) para comunicacion con la API REST.

No existe migracion a React/TypeScript para este recurso.


Componentes Implementados

Vista Principal: tarjetas.php

Ubicacion: public/view/mod-ventas/tarjetas.phpURL: ?loc=mvtProposito: Pagina completa que muestra el listado de tarjetas con operaciones CRUD.

Estructura HTML:

  • Breadcrumb: Home > Ventas > Tarjetas
  • Boton de alta: "Nva. Tarjeta | Alt+A" (id: btn_alta)
  • Tabla DataTables (id: table_view)
  • Carga del sidebar de ventas
  • Activacion del item de menu "Bases > Clientes" en el sidebar (nota: activa idMainSideBarClientes en lugar de un id propio para tarjetas)

Dependencias externas cargadas:

  • jQuery + jQuery UI (autocompletado)
  • DataTables con plugins (responsive, buttons, BS4)
  • Bootstrap 4
  • AdminLTE
  • pdfmake, jszip (para exportaciones PDF/Excel)

Script Principal: tarjetas.js

Ubicacion: public/js/view/mod-ventas/tarjetas.jsTipo: ES Module Proposito: Logica de la vista principal (inicializacion de tabla, eventos CRUD).

Dependencias importadas:

ModuloProposito
getActionButtonsColumnConfigConfiguracion de botones de accion en columnas de tabla
createFormTarjetaFuncion que crea el formulario modal de tarjeta
ApiRequestClase para comunicacion con el backend (patron legacy)
LANG_TABLETraduccion al espanol para DataTables
eliminarFilaUtilidad para eliminar fila de DataTable
refrescarFilaUtilidad para actualizar fila de DataTable

Configuracion de DataTable:

ColumnaCampoVisibleRender
CodigoidNo (oculto)-
NombrenombreSiSanitizado via getHTML()
Acciones-SiBotones delete + edit

Botones de exportacion: ['excel', 'pdf']

Flujo de inicializacion:

  1. Se inicializa la tabla DataTables con columnas configuradas.
  2. Se muestra popup de carga.
  3. Se realiza request.get('mod-ventas/tarjetas').
  4. Se agregan las filas a la tabla.
  5. Se cierra el popup de carga.

Eventos:

  • Click en btn_alta: Abre createFormTarjeta() y agrega la fila retornada a la tabla.
  • Click en edit (por fila): Abre createFormTarjeta({ updateData }) y refresca la fila.
  • Click en delete (por fila): Muestra confirmacion, ejecuta request.delete('mod-ventas/tarjetas', { id }), elimina la fila.

Formulario Modal: tarjeta.js

Ubicacion: public/js/components/forms/ventas/tarjeta.jsTipo: ES Module (export default) Proposito: Crea dinamicamente un formulario modal (Bootstrap) para alta/edicion de tarjeta.

Firma:

javascript
async function createFormTarjeta({ updateData = {}, onSubmitCallback = null })

Parametros:

ParametroTipoDescripcion
updateDataobjectDatos para precargar en edicion ({ id, nombre, cuenta })
updateData.idnumberID de la tarjeta (solo en edicion)
updateData.nombrestringNombre de la tarjeta
updateData.cuenta?numberNumero de cuenta contable
onSubmitCallbackfunction(object)Callback ejecutado al guardar exitosamente

Flujo:

  1. Carga HTML del formulario via getContentFile() desde php/components/mod-venta/forms/tarjeta.
  2. Inserta el modal en el DOM.
  3. Configura eventos de apertura/cierre del modal.
  4. Si es edicion, precarga nombre y resuelve la cuenta contable via request.get('mod-contabilidad/cuenta', { numero }).
  5. Configura autocompletado en el campo cuenta (si existe, es decir, si la empresa tiene modulo Tesoreria):
    • Endpoint: mod-contabilidad/cuenta con parametros { filter, saldo_propio: true, scope: 'min' }
    • Formato: {numero} | {nombre}
    • Seleccion: almacena data.numero en tarjeta.cuenta
  6. Al submit:
    • Si tarjeta.id existe (edicion): request.put('mod-ventas/tarjetas', tarjeta)
    • Si no (alta): request.post('mod-ventas/tarjetas', tarjeta)
    • Ejecuta onSubmitCallback con el objeto tarjeta
    • Cierra el modal

Estado local (objeto tarjeta):

javascript
{
    id: null,       // ID (asignado en edicion o tras crear)
    nombre: null,   // Nombre de la tarjeta
    cuenta: null    // Numero de cuenta contable
}

Template del Formulario: tarjeta.php

Ubicacion: public/php/components/mod-venta/forms/tarjeta.phpTipo: PHP template (cargado via AJAX por tarjeta.js) Proposito: HTML del formulario modal, con logica condicional para mostrar campo de cuenta.

Campos del formulario:

CampoIDTipo HTMLRequeridoCondicion de visibilidad
NombreinputNombretextSi (required)Siempre visible
CuentainputCuentatext (autocompletado)Si (required, cuando visible)Solo si la empresa tiene modulo Tesoreria habilitado

Logica PHP condicional:

php
$modulos = json_decode($_SESSION["SD_PERMISO_SISTEMA"], true);
$hasTesoreria = (bool)$modulos[Modulo::TESORERIA->value];

Si $hasTesoreria es true, se renderiza el campo de cuenta con su label y badge informativo ("Busqueda por Codigo o nombre"). Si es false, el campo no se renderiza en absoluto.

Botones:

  • Cancelar (cierra el modal)
  • Aceptar (submit del formulario)

Proxy Backend: tarjetas.php

Ubicacion: public/php/backend/mod-ventas/tarjetas.phpTipo: Proxy PHP (patron legacy) Proposito: Redirigir peticiones del frontend legacy hacia la API REST del backend.

Metodos HTTP soportados:

MetodoComportamiento
GETReenvio a mod-ventas/tarjetas[/{id}]
POSTReenvio del body JSON a mod-ventas/tarjetas
PUTReenvio con extraccion del id del body para la URL
DELETEReenvio con extraccion del id del body para la URL

Patron: Utiliza la clase Request del frontend para comunicarse con el backend Slim. Valida sesion ($_SESSION['SD_USER']), parsea respuesta JSON, y retorna solo el campo data de la respuesta.


Integracion con Facturacion

El recurso tarjetas se integra con el formulario de facturacion:

Archivos involucrados:

  • js/view/mod-ventas/facturacion/form-header.js: Contiene la logica de seleccion de tarjeta.
  • js/view/mod-ventas/facturacion/comprobante.js: El objeto comprobante incluye propiedad tarjeta.
  • js/view/mod-ventas/facturacion/index.js: Verifica si el comprobante tiene tarjeta.

Flujo en facturacion:

  1. Al seleccionar una condicion de venta que tiene es_tarjeta = true, se muestra el select de tarjetas.
  2. Si las tarjetas no estan cargadas en el Map local, se obtienen via request.get('mod-ventas/tarjetas').
  3. Si no hay tarjetas registradas, se muestra error "Debe cargar al menos un tipo de tarjeta para continuar".
  4. Las tarjetas se cachean en un Map local para evitar requests repetidos.
  5. Al seleccionar una tarjeta, se asigna su ID al campo comprobante.tarjeta.
  6. Si se edita un comprobante que ya tenia tarjeta, se preselecciona la tarjeta en el select.

Estado y Flujo de Datos

Vista (tarjetas.php)
  |
  v
tarjetas.js (inicializacion)
  |-- GET mod-ventas/tarjetas --> proxy PHP --> API REST
  |     |
  |     v
  |   DataTable (tabla renderizada)
  |
  |-- Click "Nva. Tarjeta" / "Editar"
  |     |
  |     v
  |   createFormTarjeta (tarjeta.js)
  |     |-- Carga HTML (tarjeta.php via AJAX)
  |     |-- Si edicion: GET mod-contabilidad/cuenta (resolucion de cuenta)
  |     |-- Submit: POST o PUT mod-ventas/tarjetas
  |     |-- Callback: agrega/refresca fila en DataTable
  |
  |-- Click "Eliminar"
        |
        v
      Confirmacion --> DELETE mod-ventas/tarjetas --> elimina fila

Comunicacion con Backend

Endpoints consumidos

EndpointMetodoPropositoDesde
mod-ventas/tarjetasGETListar tarjetastarjetas.js, form-header.js (facturacion)
mod-ventas/tarjetasPOSTCrear tarjetatarjeta.js (formulario)
mod-ventas/tarjetasPUTActualizar tarjetatarjeta.js (formulario)
mod-ventas/tarjetasDELETEEliminar tarjetatarjetas.js (vista)
mod-contabilidad/cuentaGETBuscar cuenta por numerotarjeta.js (resolucion en edicion)
mod-contabilidad/cuentaGETAutocompletado de cuentastarjeta.js (campo cuenta)

Patron de comunicacion: Todas las peticiones pasan por el proxy PHP public/php/backend/mod-ventas/tarjetas.php, excepto las de contabilidad que usan su propio proxy.


Routing y Navegacion

URLVistaDescripcion
?loc=mvtview/mod-ventas/tarjetas.phpListado de tarjetas

Sidebar: El item aparece bajo "Bases" en el sidebar de ventas, condicionado al permiso VENTAS_BASES_TARJETAS.

Breadcrumb: Home > Ventas > Tarjetas


Validaciones del Formulario

Validacion HTML nativa

CampoAtributoEfecto
NombrerequiredNo permite submit sin valor
Nombremax="100"Limita a 100 caracteres (atributo max en input text, no maxlength - esto podria no funcionar como esperado)
CuentarequiredNo permite submit sin valor (solo cuando el campo esta visible, es decir, con Tesoreria habilitado)

Validacion JavaScript

ValidacionUbicacionComportamiento
Formulario validoisValidForm(form)Verifica validez HTML5 antes de submit
Nombre triminputNombre blurSi el valor trimmeado esta vacio, se asigna null

Nota: No existe validacion Zod ni esquema de validacion TypeScript. Este recurso utiliza el patron legacy de validacion HTML nativa + metodo utilitario isValidForm.


Preguntas Tecnicas Pendientes

Hay aspectos tecnicos que requieren validacion. Ver: Preguntas sobre Tarjetas


Referencias


NOTA IMPORTANTE: Esta documentacion fue generada automaticamente analizando el codigo implementado. Validar cambios futuros contra este baseline.