@extends('fragments.fullTemplate') @section('titulo') Pagos programados Bancos @endsection @section('estilos') @include('Bancos.Real.partials._styles') @endsection @section('contenido') @php $activePage = 'programados'; $money = function ($amount, $currency = 'MXN') { return ($currency === 'USD' ? 'US$' : '$') . number_format((float) $amount, 2, '.', ','); }; $fmt = function ($date) { return \App\Services\BancoFechaService::formatoVista($date); }; $inputDateTime = function ($date) { return $date ? str_replace(' ', 'T', \App\Services\BancoFechaService::normalizarEntrada($date)) : ''; }; $areaNegocioValue = function ($area) use ($catalogos) { $areaNormalizada = trim((string) $area); $unidad = collect($catalogos['unidades_negocio'] ?? [])->first(function ($item) use ($areaNormalizada) { return (string) $item['id'] === $areaNormalizada || mb_strtolower((string) $item['clave']) === mb_strtolower($areaNormalizada) || mb_strtolower((string) $item['nombre']) === mb_strtolower($areaNormalizada); }); return $unidad ? $unidad['id'] : $areaNormalizada; }; $programStatusClass = function ($status) { if ($status === 'Activa') return 'status-ok'; if ($status === 'Pausada') return 'status-warn'; if ($status === 'Finalizada') return 'status-blue'; return 'status-danger'; }; $movementStatusClass = function ($status) { if (in_array($status, ['Aplicado', 'Generado'], true)) return 'status-ok'; if (in_array($status, ['Pendiente', 'Programado', 'Pendiente de autorizacion', 'Pendiente importe variable'], true)) return 'status-warn'; if ($status === 'Detenido') return 'status-danger'; if ($status === 'Cancelado') return 'status-danger'; return 'status-muted'; }; $movementStatusLabel = function ($status) { if ($status === 'Pendiente de autorizacion') return 'Pendiente de autorizacion'; if ($status === 'Pendiente importe variable') return 'Pendiente de importe variable'; return $status ?: '-'; }; $programacionesConAlerta = $pagosProgramados->filter(function ($programado) { $cuentaConProblema = $programado->cuenta && in_array($programado->cuenta->estatus, ['Bloqueada', 'Inactiva'], true); $detenidas = $programado->movimientosGenerados->where('estatus', 'Detenido')->count() > 0; $variablesPendientes = $programado->tipo_pago === 'Variable' && $programado->movimientosGenerados->where('estatus', 'Pendiente importe variable')->count() > 0; $vencidasSinGenerar = $programado->movimientosGenerados->filter(function ($ejecucion) { return !$ejecucion->id_banco_movimiento && in_array($ejecucion->estatus, ['Pendiente', 'Pendiente importe variable'], true) && \App\Services\BancoFechaService::normalizarEntrada($ejecucion->fecha_programada) <= \App\Services\BancoFechaService::ahoraSql(); })->count() > 0; $autorizacionPendiente = $programado->autorizaciones ? $programado->autorizaciones->where('estatus', 'Pendiente')->count() > 0 : false; return $cuentaConProblema || $detenidas || $variablesPendientes || $vencidasSinGenerar || $autorizacionPendiente; })->count(); $programadosJson = $pagosProgramados->mapWithKeys(function ($programado) use ($inputDateTime, $areaNegocioValue, $fmt) { return [$programado->id_banco_pago_programado => [ 'id_banco_pago_programado' => $programado->id_banco_pago_programado, 'nombre_programacion' => $programado->nombre_programacion, 'tipo_pago' => $programado->tipo_pago, 'tipo_movimiento' => $programado->tipo_movimiento, 'estatus' => $programado->estatus, 'id_banco_cuenta' => $programado->id_banco_cuenta, 'area_negocio' => $areaNegocioValue($programado->area_negocio), 'entidad_tipo' => $programado->entidad_tipo, 'entidad_id' => $programado->entidad_id, 'entidad_nombre' => $programado->entidad_nombre, 'concepto' => $programado->concepto, 'descripcion' => $programado->descripcion, 'monto_base' => $programado->monto_base, 'moneda' => $programado->moneda, 'periodicidad' => $programado->periodicidad, 'vigencia_tipo' => $programado->vigencia_tipo ?: 'fecha', 'fecha_inicio' => $inputDateTime($programado->fecha_inicio), 'fecha_termino' => $inputDateTime($programado->fecha_termino), 'numero_pagos' => $programado->numero_pagos, 'proxima_ejecucion' => $inputDateTime($programado->proxima_ejecucion), 'preautorizado' => (int) $programado->preautorizado, 'fecha_autorizacion' => $inputDateTime($programado->fecha_autorizacion), 'fecha_autorizacion_vista' => $programado->fecha_autorizacion ? $fmt($programado->fecha_autorizacion) : '', 'creado_por_nombre' => $programado->creador ? $programado->creador->nombre_completo : '', 'autorizado_por_nombre' => $programado->autorizadoPor ? $programado->autorizadoPor->nombre_completo : '', 'monto_maximo_permitido' => $programado->monto_maximo_permitido, 'requiere_autorizacion_si_excede' => (int) $programado->requiere_autorizacion_si_excede, 'observaciones' => $programado->observaciones, 'calendario' => $programado->movimientosGenerados->sortBy('fecha_programada')->map(function ($generado) { return [ 'fecha_programada' => \App\Services\BancoFechaService::normalizarEntrada($generado->fecha_programada), 'estatus' => $generado->estatus, 'bloqueado' => $generado->id_banco_movimiento ? 1 : 0, ]; })->values()->all(), 'update_url' => route('bancos.real.programados.update', $programado->id_banco_pago_programado), ]]; }); @endphp
| Nombre de programación | Tipo de importe | Tipo de movimiento | Cuenta | Entidad relacionada | Concepto | Monto base | Periodicidad | Fecha inicio | Fecha término | Número de pagos | Próxima ejecución | Pagos generados | Pagos restantes | Estatus | Preautorizado | Acciones |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ $programado->nombre_programacion }} {{ $programado->folio }} |
{{ $programado->tipo_pago }} | {{ $programado->tipo_movimiento }} |
{{ $programado->cuenta ? $programado->cuenta->nombre_cuenta : '-' }} {{ $cuentaEstatus }} @if(in_array($cuentaEstatus, ['Bloqueada', 'Inactiva'], true)) No genera movimientos.
@endif
|
{{ $programado->entidad_nombre ?: '-' }} | {{ $programado->concepto }} | {{ $programado->tipo_pago === 'Variable' && (float) $programado->monto_base <= 0 ? 'Variable' : $money($programado->monto_base, $programado->moneda) }} | {{ $programado->periodicidad }} | {{ $fmt($programado->fecha_inicio) }} | {{ $fmt($programado->fecha_termino) }} | {{ $programado->numero_pagos }} | {{ $fmt($programado->proxima_ejecucion) }} | {{ $programado->pagos_generados }} | {{ $programado->pagos_restantes }} | {{ $programado->estatus }} |
{{ $programado->preautorizado ? 'Preautorizado' : 'Requiere revision' }}
@if($programado->tipo_pago === 'Variable')
Max: {{ $money($programado->monto_maximo_permitido, $programado->moneda) }}
@endif
|
|
| Sin pagos programados registrados. |
| Folio de programación | Nombre de programación | Próximo no. pago | Próxima fecha programada | Fecha ejecución real | Movimiento bancario | Estatus | Cuenta | Monto | Usuario/proceso | Acciones |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ $movimientoProgramado->programacion_folio }} | {{ $movimientoProgramado->nombre }} | {{ $movimientoProgramado->numero_pago }} | {{ $fmt($movimientoProgramado->fecha_programada) }} | {{ $fmt($movimientoProgramado->fecha_generacion) }} | {{ $movimientoProgramado->movimiento }} | {{ $movementStatusLabel($movimientoProgramado->estatus) }} | {{ $movimientoProgramado->cuenta }} | {{ $money($movimientoProgramado->monto, $movimientoProgramado->moneda) }} | {{ $movimientoProgramado->usuario }} | |
| Sin calendario de ejecuciones registrado. |