@extends('layouts.enterprise') @section('title', 'Reportes') @section('content') @php $profitFilters = $filters['profit'] ?? ['from' => $defaults['from'], 'to' => $defaults['to']]; $expenseFilters = $filters['expense'] ?? ['from' => $defaults['from'], 'to' => $defaults['to'], 'advances' => 'all']; $crossFilters = $filters['cross'] ?? ['from' => $defaults['from'], 'to' => $defaults['to']]; $incomeFilters = $filters['income'] ?? ['from' => $defaults['from'], 'to' => $defaults['to']]; $requestFilters = $filters['request'] ?? ['from' => $defaults['from'], 'to' => $defaults['to']]; $vatMode = $filters['vat_mode'] ?? 'without'; $activeTabName = $activeTab ?? 'profit'; $reportsRouteName = request()->routeIs('accountant.reports.*') ? 'accountant.reports.index' : 'admin.reports.index'; $withoutVatUrl = route($reportsRouteName, array_merge(request()->except(['vat_mode']), ['vat_mode' => 'without', 'tab' => $activeTabName])); $withVatUrl = route($reportsRouteName, array_merge(request()->except(['vat_mode']), ['vat_mode' => 'with', 'tab' => $activeTabName])); $reportChartsPayload = [ 'profit' => $profitData['charts'] ?? [], 'expense' => $expenseData['charts'] ?? [], 'cross' => $crossData['charts'] ?? [], 'income' => $incomeData['charts'] ?? [], 'request' => $requestData['charts'] ?? [], ]; @endphp

Reportes

Consulta ganancias, egresos, ingresos, solicitudes y cruce con rango de fechas por cada bloque.

Sin IVA @if($vatMode === 'without') Activo @endif Con IVA @if($vatMode === 'with') Activo @endif
Ganancias Egresos Ingresos Solicitudes General

Ganancias

Venta: ${{ number_format((float) ($profitData['totals']['sale'] ?? 0), 2) }} Costo: ${{ number_format((float) ($profitData['totals']['cost'] ?? 0), 2) }} Ganancia: ${{ number_format((float) ($profitData['totals']['profit'] ?? 0), 2) }}
Filtros de ganancias
Limpiar
@if(!($profitData['available'] ?? false))
{{ $profitData['message'] ?? 'No fue posible construir el reporte de ganancias.' }}
@endif

Ganancia en el rango

Ganancia por cliente

Ganancia mes a mes

Ganancia por años

Gastos

Total: ${{ number_format((float) ($expenseData['totals']['expenses'] ?? 0), 2) }} Normales: ${{ number_format((float) ($expenseData['totals']['regular'] ?? 0), 2) }} Anticipos: ${{ number_format((float) ($expenseData['totals']['advances'] ?? 0), 2) }}
Filtros de egresos
Limpiar
@if(!($expenseData['available'] ?? false))
{{ $expenseData['message'] ?? 'No fue posible construir el reporte de gastos.' }}
@elseif(!($expenseData['has_advance_column'] ?? false))
La columna de anticipos aún no existe en `invoice_payments`. Ejecuta migraciones para habilitar ese filtro.
@endif

Gastos en el rango

Gastos por proveedor

Gastos por impuestos

Gastos mes a mes

Gastos por años

Cruce de gastos y ganancias

Ganancia: ${{ number_format((float) ($crossData['totals']['profit'] ?? 0), 2) }} Gasto: ${{ number_format((float) ($crossData['totals']['expenses'] ?? 0), 2) }} Neto: ${{ number_format((float) ($crossData['totals']['net'] ?? 0), 2) }}
Filtros del cruce
Limpiar

Cruce mensual (pastel)

Cruce por años (barras)

Ingresos

Total: ${{ number_format((float) ($incomeData['totals']['incomes'] ?? 0), 2) }} Cobrados y validados: ${{ number_format((float) ($incomeData['totals']['linked'] ?? 0), 2) }} Fuente: Prefacturas relacionadas a movimientos de ingreso (Subtotal sin IVA)
Filtros de ingresos
Limpiar
@if(!($incomeData['available'] ?? false))
{{ $incomeData['message'] ?? 'No fue posible construir el reporte de ingresos.' }}
@endif

Ingresos en el rango

Ingresos por cliente

Ingresos mes a mes

Ingresos por años

Ingresos por ejecutivo

Ingresos por ejecutivo y cliente

Solicitudes

Totales: {{ number_format((int) ($requestData['totals']['requests_total'] ?? 0)) }} Completas: {{ number_format((int) ($requestData['totals']['requests_complete'] ?? 0)) }} Pendientes: {{ number_format((int) ($requestData['totals']['requests_pending'] ?? 0)) }} Sin factura: {{ number_format((int) ($requestData['totals']['requests_without_invoice'] ?? 0)) }} Parciales: {{ number_format((int) ($requestData['totals']['requests_partial'] ?? 0)) }} Pendientes por aprobar: {{ number_format((int) ($requestData['totals']['requests_pending_approval'] ?? 0)) }}
Proveedores totales: {{ number_format((int) ($requestData['totals']['providers_total'] ?? 0)) }} Con factura: {{ number_format((int) ($requestData['totals']['providers_complete'] ?? 0)) }} Sin factura: {{ number_format((int) ($requestData['totals']['providers_without_invoice'] ?? 0)) }} Parciales: {{ number_format((int) ($requestData['totals']['providers_partial'] ?? 0)) }} Pendientes por aprobar: {{ number_format((int) ($requestData['totals']['providers_pending_approval'] ?? 0)) }}
Filtros de solicitudes
Limpiar
@if(!($requestData['available'] ?? false))
{{ $requestData['message'] ?? 'No fue posible construir el reporte de solicitudes.' }}
@endif

Estatus de solicitudes

Estatus de proveedores

Solicitudes mes a mes

Proveedores con incidencias

Participación por proveedor

Solicitudes con más pendientes

@endsection @push('scripts') @endpush @push('styles') @endpush