{{-- ========================================================================= --}} {{-- MODAL / OVERLAY GLOBAL DE CARGA Y EJECUCIÓN EN TIEMPO REAL (LIVEWIRE) --}} {{-- ========================================================================= --}} {{-- Header del Panel SuperAdmin Profesional --}}
SUPERADMIN PORTAL @if($connectionOk) Conectado: {{ $selectedDb }} @else Sin Conexión @endif

Administrador Global de Tenants y Bases de Datos

Gestión centralizada de bodegas, configuraciones empresariales, licencias y usuarios por base de datos.

{{-- Botón para Crear Nuevo Tenant / Base de Datos --}} {{-- Selector de Base de Datos con Buscador Integrado Adentro --}}
{{-- Botón Editar DatosTenat de la BD seleccionada --}} {{-- Botón Cerrar Sesión --}} Salir
@if(!empty($connectionMsg))
{{ $connectionMsg }}
@endif
{{-- Mensajes Flash de Éxito / Error --}} @if (session()->has('success')) @endif @if (session()->has('error')) @endif {{-- Tarjetas KPI de Resumen Rápido del Tenant Conectado --}} @if($connectionOk)
1. Bodegas
{{ $conteos['bodegas'] ?? count($bodegas) }}
Gestionar bodegas →
2. Empresa / Fact.
{{ $conteos['empresas'] ?? count($empresas) }}
Consecutivos →
3. Usuarios
{{ $conteos['users'] ?? count($users) }}
Licencias & suspensión →
6. WhatsApp & Domicilios
{{ $conteos['whatsapp'] ?? count($whatsappTenants) }}
Configurar IA & Sedes →
5. Resoluciones DIAN
{{ $conteos['resoluciones'] ?? count($resoluciones) }}
Facturas & POS →
7. Cuadre IVA & Bases
Bases / IVA
Recalcular ventas →
@endif {{-- Navegación por Pestañas y Filtro de Búsqueda --}}
{{-- Buscador reactivo --}}
@if(!empty($filtroBusqueda)) @endif
@if($activeTab === 'bodegas') @elseif($activeTab === 'user') @elseif($activeTab === 'resoluciones') @elseif($activeTab === 'whatsapp') @elseif($activeTab === 'cuadre_iva') @endif
{{-- ========================================================================= --}} {{-- CONTENIDO PESTAÑA 1: BODEGAS --}} {{-- ========================================================================= --}} @if($activeTab === 'bodegas')
Bodegas del Tenant: {{ $selectedDb }}
{{ count($bodegas) }} registradas
@forelse($bodegas as $b) @empty @endforelse
ID Nombre Bodega / Negocio Dirección Código Empresa Base Caja Guía Despacho Configuración Operativa Acciones
#{{ $b['id'] ?? '' }}
{{ $b['nombreBodega'] ?? 'Sin nombre' }}
{{ $b['nombNegocio'] ?? '' }}
{{ $b['direcion'] ?? 'Sin dirección' }} {{ $b['codigoEmpresa'] ?? 'N/A' }} ${{ number_format((float)($b['baseCaja'] ?? 0), 0) }} Guía #{{ $b['Consecutivo_Guia_Despa'] ?? 0 }}
{{-- Control de Inventario Negativos --}} @if(($b['control_inventario_estado'] ?? '') === 'no') Negativos OK ('no') @elseif(($b['control_inventario_estado'] ?? '') === 'si') Sin Negativos ('si') @elseif(($b['control_inventario_estado'] ?? '') === 'mixto') Control Mixto @else Control: N/D @endif {{ ($b['UnaSolaListaPrecio'] ?? 0) == 1 ? '1 Lista' : 'Múltiples Listas' }} {{ ($b['calculoPromedio'] ?? 0) == 1 ? 'Costo Prom.' : 'Sin Prom.' }} {{ ($b['ActivarSugerenciasIA'] ?? 0) == 1 ? 'IA Activa' : 'Sin IA' }}
@if(($b['control_inventario_estado'] ?? '') === 'no') @else @endif
No se encontraron bodegas en esta base de datos o bajo el filtro indicado.
@endif {{-- ========================================================================= --}} {{-- CONTENIDO PESTAÑA 2: EMPRESA --}} {{-- ========================================================================= --}} @if($activeTab === 'empresa')
Configuración de Empresa y Facturación por Bodega
{{ count($empresas) }} configuraciones
@forelse($empresas as $emp) @empty @endforelse
Bodega # Código / NIT Representante Teléfono Consecutivos Fact. Electrónica POS Electrónico Acciones
Bodega #{{ $emp['bodegaEm'] ?? '1' }}
{{ $emp['codigo'] ?? '-' }}
NIT: {{ $emp['nit'] ?? '-' }}
{{ $emp['nombrerepesen'] ?? '-' }} {{ $emp['telf'] ?? '-' }}
Factura: {{ $emp['factura'] ?? 0 }} | Traslados: {{ $emp['traslados'] ?? 0 }}
Salida: {{ $emp['salida'] ?? 0 }} | Entrada: {{ $emp['entrada'] ?? 0 }}
@if(!empty($emp['ActivarFacturacionElectronica']) && $emp['ActivarFacturacionElectronica'] == 1) Activa ({{ $emp['prefijoElectro'] ?? 'FE' }})
# {{ $emp['numeroFactuElectro'] ?? 0 }}
@php $nombresProv = [1 => 'Clarisa', 2 => 'Emisión', 3 => 'Emytu']; $idProv = (int)($emp['proveedor_fe'] ?? 1); $nomP = $nombresProv[$idProv] ?? 'Clarisa'; @endphp Prov: {{ $nomP }} @else Inactiva @endif
@if(!empty($emp['activarPosElectronico']) && $emp['activarPosElectronico'] == 1) Activo ({{ $emp['PrefijoPosE'] ?? 'POS' }})
# {{ $emp['numeroPosE'] ?? 0 }}
@else Inactivo @endif
No se encontraron registros de empresa en esta base de datos.
@endif {{-- ========================================================================= --}} {{-- CONTENIDO PESTAÑA 3: USUARIOS & CONTROL DE LICENCIAS --}} {{-- ========================================================================= --}} @if($activeTab === 'user')
Usuarios del Tenant y Control de Licencias (tabla user)
Administración de accesos, contraseñas, fecha de suspensión y avisos de cobro de licencia.
{{ count($users) }} usuarios
@forelse($users as $u) {{-- Columnas de Licencia --}} @empty @endforelse
Usuario (nonombre) Contraseña (id) Perfil / Bodega Estado Licencia Fecha Suspensión Mensaje de Licencia Acciones
{{ $u['nonombre'] ?? '-' }} {{ $u['id'] ?? '****' }} {{ ($u['tipo'] ?? 0) == 1 ? 'Administrador (1)' : 'Operador (' . ($u['tipo'] ?? 0) . ')' }} Bodega #{{ $u['idbodega'] ?? '1' }} @if(($u['activarMensajeLicen'] ?? '0') == '1') Aviso Activo (1) @else Normal (0) @endif @if(!empty($u['FechaSuspencion'])) {{ $u['FechaSuspencion'] }} @else Sin suspensión @endif @if(!empty($u['mensajelicencia'])) {{ $u['mensajelicencia'] }} @else Ninguno @endif
No se encontraron usuarios en esta base de datos.
@endif {{-- ========================================================================= --}} {{-- CONTENIDO PESTAÑA 4: CENTRAL (tabla 'clientes') --}} {{-- ========================================================================= --}} @if($activeTab === 'credenciales')
Credenciales en BD Central (tabla clientes)
Registros que determinan la conexión y login de este tenant en el sistema central.
{{ count($credencialesCentral) }} accesos centrales
@forelse($credencialesCentral as $c) @empty @endforelse
Usuario Central (nombre) Contraseña Login (id_user) Base de Datos (bd) Usuario MySQL (dbname) Clave MySQL (bdpass) Acciones
{{ $c['nombre'] ?? '-' }} {{ $c['id_user'] ?? '****' }} {{ $c['bd'] ?? '-' }} {{ $c['dbname'] ?? '-' }} {{ !empty($c['bdpass']) ? $c['bdpass'] : '(Vacía / Sin clave)' }}
No hay credenciales registradas en la central para esta base de datos.
@endif {{-- ========================================================================= --}} {{-- CONTENIDO PESTAÑA 5: RESOLUCIONES ELECTRÓNICAS (tabla 'resolucioneelectr') --}} {{-- ========================================================================= --}} @if($activeTab === 'resoluciones')
Resoluciones Electrónicas (tabla resolucioneelectr)
Resoluciones de facturación electrónica, documentos soporte y POS autorizadas por la DIAN en {{ $selectedDb }}.
{{ count($resoluciones) }} resoluciones
@forelse($resoluciones as $r) @empty @endforelse
ID (idR) Tipo Resolución Bodega (bodegaRe) Nº Resolución Prefijo Rango Autorizado Vigencia (Desde / Hasta) Estado Acciones
#{{ $r['idR'] ?? '' }} {{ $r['tipoResolucion'] ?? 'General' }} Bodega #{{ $r['bodegaRe'] ?? ($r['bodegaR'] ?? 1) }}
{{ $r['NumeroResolucion'] ?? '-' }}
@if(!empty($r['urlApi'])) {{ $r['urlApi'] }} @endif
{{ $r['prefijo'] ?? '-' }} {{ number_format((int)($r['numeroInicail'] ?? 0)) }} → {{ number_format((int)($r['numerofinal'] ?? 0)) }}
Inicio: {{ $r['fecha'] ?? '-' }}
Vence: @if(!empty($r['fechaFinal'])) {{ $r['fechaFinal'] }} @else - @endif
No hay resoluciones electrónicas registradas en esta base de datos.
@endif {{-- ========================================================================= --}} {{-- SECCIÓN 6: WHATSAPP / BOT IA & DOMICILIOS (whatsapp_tenants.json) --}} {{-- ========================================================================= --}} @if($activeTab === 'whatsapp')
Tenants de WhatsApp, Bot IA y Domicilios
Configuración global de instancias Evolution API, tokens, bases de datos y tarifas de domicilio (almacenado en whatsapp_tenants.json).
{{ count($whatsappTenants) }} sedes activas
@forelse($whatsappTenants as $wKey => $wTenant) @empty @endforelse
Token (ID) Empresa / Sede Instancia WA Asesora IA Base de Datos Horario Atención Tarifa Domicilio Domicilio Gratis Zona Cobertura Acciones
{{ $wTenant['token'] ?? $wKey }} {{ $wTenant['nombre_empresa'] ?? '-' }} {{ $wTenant['instancia_wa'] ?? '-' }} {{ $wTenant['nombre_ia'] ?? 'Luciana' }} {{ $wTenant['bd'] ?? '-' }} {{ $wTenant['horario_inicio'] ?? '08:00' }} - {{ $wTenant['horario_fin'] ?? '20:00' }} {{ $wTenant['dias_atencion'] ?? 'Lunes a Domingo' }} @php $costoBase = (float)($wTenant['costo_domicilio'] ?? 0); $costoMax = (float)($wTenant['costo_domicilio_max'] ?? 0); @endphp @if($costoBase > 0 && $costoMax > $costoBase) $ {{ number_format($costoBase, 0, ',', '.') }} - {{ number_format($costoMax, 0, ',', '.') }} (Por distancia) @elseif($costoBase > 0) $ {{ number_format($costoBase, 0, ',', '.') }} COP @else A convenir @endif @if(!empty($wTenant['domicilio_gratis_desde']) && (float)$wTenant['domicilio_gratis_desde'] > 0) ≥ $ {{ number_format($wTenant['domicilio_gratis_desde'], 0, ',', '.') }} COP @else - @endif {{ $wTenant['rango_domicilio'] ?? 'Zona urbana' }}
No hay tenants configurados en whatsapp_tenants.json.
@endif {{-- ========================================================================= --}} {{-- SECCIÓN 7: CUADRE Y RECÁLCULO DE IVA Y BASES (VENTAS & FACTURAS) --}} {{-- ========================================================================= --}} @if($activeTab === 'cuadre_iva') {{-- Banner de Ejecución Exitosa Previa si existe --}} @if($cuadreEjecutado) @endif {{-- Tarjeta Principal de Configuración y Filtros --}}
Cuadre y Recálculo de IVA y Bases
Recalcula bases imponibles e IVAs en ventas consultando el impuesto de productos, y cuadra los acumulados en facturas.
BD: {{ $selectedDb }}
{{-- Alerta didáctica --}}
¿Cuándo usar este módulo?
Cuando un cliente era Responsable de IVA pero en el sistema estaba configurado erróneamente como No Responsable, generando ventas sin IVA (0%) o con bases en cero. Este proceso consulta la columna impuesto de la tabla productos (19, 5, 0 exento o 1 excluido), recalcula la base y el IVA exactos de cada venta (Base + IVA = Valor total), y actualiza las columnas base19, iva19, base5, iva5, excento y excluido en la tabla facturas.
{{-- Filtros: Bodega y Fechas --}}
{{-- Switch de configuración futura --}}
• Garantiza que las próximas ventas emitidas desde el POS liquiden IVA correctamente.
{{-- Vista Previa / Simulación de Resultados --}} @if($cuadreSimulacion) {{-- KPI Cards con Resumen Comparativo --}}
{{-- Total Ventas y Facturas --}}
1. Facturación
{{ number_format($cuadreSimulacion['total_ventas']) }}
Líneas en ventas
{{ number_format($cuadreSimulacion['total_facturas']) }} Facturas
{{-- Diagnóstico: Desajustes detectados --}}
2. Diagnóstico IVA
{{ number_format($cuadreSimulacion['ventas_con_diferencia']) }}
Ventas con diferencia de IVA
@if($cuadreSimulacion['ventas_con_diferencia'] > 0) Requiere cuadre @else Todo cuadrado correctamente @endif
{{-- Comparativo Tarifa 19% --}}
3. Tarifa 19%
IVA 19%
Base Actual: ${{ number_format($cuadreSimulacion['act_base19'], 2) }}
Base Cuadrada: ${{ number_format($cuadreSimulacion['calc_base19'], 2) }}

IVA Actual: ${{ number_format($cuadreSimulacion['act_iva19'], 2) }}
IVA Cuadrado: ${{ number_format($cuadreSimulacion['calc_iva19'], 2) }}
{{-- Comparativo Tarifa 5% --}}
4. Tarifa 5%
IVA 5%
Base: ${{ number_format($cuadreSimulacion['calc_base5'], 2) }}
IVA: ${{ number_format($cuadreSimulacion['calc_iva5'], 2) }}

Antes: ${{ number_format($cuadreSimulacion['act_iva5'], 2) }}
{{-- Excento y Excluido --}}
5. Exento / Excluido
Excento: ${{ number_format($cuadreSimulacion['calc_excento'], 2) }}
Excluido: ${{ number_format($cuadreSimulacion['calc_excluido'], 2) }}

Base = Valor
{{-- Tabla con Muestra de Verificación Detallada --}}
Muestra de Verificación Línea a Línea (Primeras 25 ventas)
Mostrando líneas de ventas asociadas a productos.impuesto para comparar valores anteriores vs calculados.
@if($cuadreSimulacion['ventas_con_diferencia'] > 0) @endif
@forelse($cuadreSimulacion['muestra'] as $m) @empty @endforelse
ID Venta Factura Código Producto Valor Total Tarifa Prod. (impuesto) Tipo IVA (Ant → Post) Base (Ant → Post) IVA (Ant → Post) Estado
#{{ $m['id'] }} {{ $m['factura'] }} {{ $m['codigoProducto'] }}
{{ $m['nombre_producto'] }}
${{ number_format($m['valor'], 2) }} {{ $m['impuesto_catalogo'] }}% {{ $m['tipoiva_actual'] }} {{ $m['tipoiva_calculado'] }} ${{ number_format($m['base_actual'], 2) }}
${{ number_format($m['base_calculada'], 2) }}
${{ number_format($m['iva_actual'], 2) }}
${{ number_format($m['iva_calculado'], 2) }}
@if($m['tiene_diferencia']) Por Ajustar @else Correcto @endif
No se encontraron ventas para la bodega y rango de fechas seleccionados.
@endif @endif {{-- ========================================================================= --}} {{-- MODAL 1: EDITAR / CREAR BODEGA --}} {{-- ========================================================================= --}} @if($modalBodegaAbierto) @endif {{-- ========================================================================= --}} {{-- MODAL 2: EDITAR EMPRESA --}} {{-- ========================================================================= --}} @if($modalEmpresaAbierto) @endif {{-- ========================================================================= --}} {{-- MODAL 3: EDITAR / CREAR USUARIO ('user') & CONTROL DE LICENCIAS --}} {{-- ========================================================================= --}} @if($modalUserAbierto) @endif {{-- ========================================================================= --}} {{-- MODAL 4: EDITAR CREDENCIALES CENTRAL ('clientes') --}} {{-- ========================================================================= --}} @if($modalCredencialAbierto) @endif {{-- ========================================================================= --}} {{-- MODAL 5: EDITAR DATOSTENAT (Base de Datos Central) --}} {{-- ========================================================================= --}} @if($modalDatosTenantAbierto) @endif {{-- ========================================================================= --}} {{-- MODAL 6: EDITAR / CREAR RESOLUCIÓN ELECTRÓNICA ('resolucioneelectr') --}} {{-- ========================================================================= --}} @if($modalResolucionAbierto) @endif {{-- ========================================================================= --}} {{-- MODAL WHATSAPP TENANT & DOMICILIOS --}} {{-- ========================================================================= --}} @if($modalWhatsAppTenantAbierto) @endif {{-- ========================================================================= --}} {{-- MODAL 7: CREAR NUEVO TENANT / BASE DE DATOS (Plantilla posclouddb.sql) --}} {{-- ========================================================================= --}} @if($modalNuevoTenantAbierto) @endif {{-- ========================================================================= --}} {{-- MODAL 9: CONFIRMAR EJECUCIÓN DE CUADRE DE IVA --}} {{-- ========================================================================= --}} @if($modalConfirmarCuadre) @endif {{-- Catálogo DANE oficial para selección de ciudad en Tenants --}} @php $ciudadesDane = []; $rutaCiudades = public_path('data/ciudades_dane.json'); if (file_exists($rutaCiudades)) { $ciudadesDane = json_decode(file_get_contents($rutaCiudades), true) ?: []; } @endphp @foreach($ciudadesDane as $c)