@extends('layouts.app', ['title' => term('nav_finance','Control financiero')]) @section('header_actions') Historial de cortes @endsection @push('styles') @endpush @section('content') @php // Defensivo: si un despliegue parcial dejara variables sin pasar, la vista no truena. $filters = $filters ?? []; $f = array_merge(['from'=>'','to'=>'','all_dates'=>null,'type'=>null,'category'=>null,'project_id'=>null,'client_id'=>null,'lote_id'=>null,'method'=>null,'movement_type'=>null,'search'=>null], $filters); $c = is_array($corte ?? null) ? $corte : []; $corte = [ 'apartados' => ['total' => $c['apartados']['total'] ?? 0, 'count' => $c['apartados']['count'] ?? 0], 'aportaciones' => ['total' => $c['aportaciones']['total'] ?? 0, 'count' => $c['aportaciones']['count'] ?? 0], 'salidas' => ['total' => $c['salidas']['total'] ?? 0, 'count' => $c['salidas']['count'] ?? 0], 'total_ingresos' => $c['total_ingresos'] ?? 0, 'total_salidas' => $c['total_salidas'] ?? 0, 'saldo_esperado' => $c['saldo_esperado'] ?? 0, 'efectivo_esperado'=> $c['efectivo_esperado'] ?? 0, 'by_method' => is_array($c['by_method'] ?? null) ? $c['by_method'] : [], ]; $movimientos = $movimientos ?? collect(); $movementsCount = $movementsCount ?? $movimientos->count(); $existingCut = $existingCut ?? null; $cutDate = $cutDate ?? null; $singleDay = $singleDay ?? false; $activePreset = $activePreset ?? null; $period = $period ?? ''; $user = $user ?? auth()->user(); $movementType = $movementType ?? (fn ($tx) => 'Aportación'); $methodLabel = $methodLabel ?? (fn ($tx) => 'Otro'); $mvMeta = [ 'Apartado' => ['cls' => 'ap', 'ico' => 'fa-bookmark'], 'Aportación' => ['cls' => 'apo', 'ico' => 'fa-hand-holding-dollar'], 'Salida' => ['cls' => 'sa', 'ico' => 'fa-circle-minus'], ]; $methodIcon = fn ($m) => match (trim((string) $m)) { 'Efectivo' => 'fa-coins', 'Transferencia' => 'fa-building-columns', 'Tarjeta' => 'fa-credit-card', 'SPEI' => 'fa-bolt', default => 'fa-money-bill-wave', }; $keepAll = array_filter([ 'from'=>$f['from'],'to'=>$f['to'],'all_dates'=>$f['all_dates'], 'type'=>$f['type'],'category'=>$f['category'], 'project_id'=>$f['project_id'],'client_id'=>$f['client_id'],'lote_id'=>$f['lote_id'], 'method'=>$f['method'],'movement_type'=>$f['movement_type'],'search'=>$f['search'], ], fn ($v) => $v !== null && $v !== ''); $presetBase = collect($keepAll)->except(['from','to','all_dates'])->all(); $typeBase = collect($keepAll)->except(['movement_type'])->all(); $corteUrl = route('finance.corte', $keepAll); $presetList = ['hoy' => 'Hoy', 'ayer' => 'Ayer', 'semana' => 'Semana', 'mes' => 'Mes']; $typeList = ['apartado'=>['Apartados','ap','fa-bookmark'],'aportacion'=>['Aportaciones','apo','fa-hand-holding-dollar'],'salida'=>['Salidas','sa','fa-circle-minus']]; $ti = $corte['total_ingresos'] ?: 0; $cutClosed = (bool) $existingCut; $diffInit = $cutClosed ? (float) $existingCut->diferencia : (0 - $corte['efectivo_esperado']); $diffCuadra = $cutClosed && abs($diffInit) < 0.005; // Tarjeta de diferencia: antes de cerrar muestra el efectivo esperado ("Por contar"); ya cerrada muestra la diferencia real. $cardVal = $cutClosed ? $diffInit : (float) $corte['efectivo_esperado']; $cardState = $cutClosed ? ($diffCuadra ? '¡Todo cuadra!' : ($diffInit < 0 ? 'Falta' : 'Sobra')) : 'Por contar'; $cardIcoBg = $cutClosed ? ($diffCuadra ? '#16a34a' : '#ef4444') : '#c9a84c'; $hasAdvancedFilters = (bool) array_filter([$f['search'],$f['type'],$f['category'],$f['project_id'],$f['client_id'],$f['lote_id'],$f['method']]); @endphp
* Los importes consideran los filtros seleccionados y la fecha del corte.
Sin ingresos en el periodo.
@endforelse @if(! empty($corte['by_method']))El cierre de caja es por día. Selecciona un solo día (o un preset como “Hoy”) para poder cerrar el corte.
Imprimir corte del periodo @endif| Proyecto | Total del Proyecto | Ingresado | Gastos | Capital | Activo |
|---|---|---|---|---|---|
|
{{ $balance['project']->name }}
Ver movimientos
{{ $balance['project']->location ?: 'Sin ubicación' }}
|
${{ number_format($balance['total'],0) }} | ${{ number_format($balance['ingresado'],0) }} | ${{ number_format($balance['gastos'],0) }} | ${{ number_format($balance['capital'],0) }} | ${{ number_format($balance['activo'],0) }} |
| Sin proyectos para calcular balance. | |||||