@extends('layouts.app') @section('breadcrumb', 'TPV Ágora') @section('content') @if($apiEnabled || $exportFolder)
@csrf
@endif
@if(session('status')) @endif @if($errors->any()) @endif
Ventas importadas
{{ number_format($sales->total()) }}
Fuente activa
{{ $source->name }}
Modo sync
@if($apiEnabled) API @elseif($exportFolder) Carpeta @else CSV manual @endif
Cierres generados
{{ number_format($closings->count()) }}

Importar exportación Ágora

En Ágora Retail: Informes → Diario de albaranes → Exportar (listado o extendido) o histórico de ventas. Guarda como CSV.

@csrf

Configuración recomendada

Opción A — API local (ideal): activa el Módulo de Servicios de Integración en Ágora Monitor y configura en .env:

  • AGORA_API_ENABLED=true
  • AGORA_API_URL=http://IP-TIENDA:PUERTO
  • AGORA_API_TOKEN=...

Opción B — Carpeta vigilada: programa Ágora para exportar CSV a una carpeta y define AGORA_EXPORT_FOLDER.

Diagnóstico: php artisan app:agora-health-check

@if($dailyChecks !== [])

Cuadre TPV vs banco (por día)

@foreach($dailyChecks as $check) @endforeach
Fecha Canal Total TPV Total banco Diferencia Estado
{{ \Carbon\Carbon::parse($check['date'])->format('d/m/Y') }} {{ strtoupper($check['channel']) }} {{ number_format($check['tpv_total'], 2, ',', '.') }} € {{ number_format($check['bank_total'], 2, ',', '.') }} € {{ number_format($check['difference'], 2, ',', '.') }} € @if($check['status'] === 'matched') Cuadrado @elseif($check['status'] === 'review') Revisar @else Descuadre @endif
@endif

Ventas TPV recientes

@forelse($sales as $sale) @empty @endforelse
Ticket Fecha Cliente Pago Total
{{ $sale->ticket_number ?? '—' }} {{ $sale->sold_at?->format('d/m/Y H:i') }} {{ $sale->customer_name ?? '—' }} {{ $sale->payment_method ?? '—' }} {{ number_format((float) $sale->total, 2, ',', '.') }} €
Sin ventas importadas. Sube un CSV o configura la sincronización.
@if($sales->hasPages())
{{ $sales->links() }}
@endif

Cierres de caja (auto)

@forelse($closings as $closing)
{{ $closing->closing_date?->format('d/m/Y') }}
Efectivo {{ number_format((float) $closing->cash_total, 2, ',', '.') }} € · Tarjeta {{ number_format((float) $closing->card_total, 2, ',', '.') }} € · Total {{ number_format((float) $closing->tpv_total, 2, ',', '.') }} €
@empty

Sin cierres generados.

@endforelse

Últimas sincronizaciones

@forelse($runs as $run)
{{ $run->finished_at?->format('d/m/Y H:i') ?? 'En curso' }} · {{ $run->records_success }} ok
{{ $run->status }} — {{ $run->error_message }}
@empty

Sin ejecuciones registradas.

@endforelse
@endsection