@extends('layouts.dashboard.inface', ['section' => 'finance']) @section('content')
@include('realEstates.finance.nav', ['title' => 'Ventas, ingresos y comisiones']) @if($approvalBatches->isNotEmpty())

Mis procesos de aprobación recientes

@foreach($approvalBatches as $approvalBatch)

{{ $approvalBatch->reference }} · {{ ['preparing'=>'Preparando', 'ready'=>'Por confirmar', 'running'=>'En proceso / reanudar', 'blocked'=>'Requiere revisión', 'completed'=>'Completado'][$approvalBatch->status] ?? $approvalBatch->status }} · {{ $approvalBatch->approved + $approvalBatch->unchanged }} procesados de {{ $approvalBatch->total }} recibos

@endforeach
@endif
@include('realEstates.finance.fields', ['record' => $filters, 'fields' => ['start_date' => ['Desde', 'date', true], 'end_date' => ['Hasta', 'date', true], 'currency' => ['Moneda', 'text', true], 'development_id' => ['Desarrollo', $developments->pluck('name', 'id')->all()]]])
@include('realEstates.finance.commercial_totals')

Ventas para conciliación · {{ $sales->total() }} resultados

Se incluyen ventas históricas, canceladas y sin recibos dentro del alcance y moneda seleccionados. Aprobar concilia únicamente cobros reales; una venta sin recibos permanece visible pero no produce ingresos.

@include('realEstates.finance.bulk_approval_form', ['target' => 'sales', 'count' => $sales->total()])
@forelse($sales as $row)@empty@endforelse
SeleccionarVentaFechaPrecio de ventaEstadoRecibos registrados
@can('finance.manage')@endcan #{{ $row['sale']->id }}{{ $row['sale']->sale_date }}{{ \App\Domain\Finance\Money::format((string)$row['sale']->total_price) }}{{ $row['sale']->status }} {{ $row['sale']->trashed() ? '· Archivada' : '' }}{{ $row['sale']->payments_count }}@if(!$row['sale']->payments_count)

Sin recibos para aprobar

@endif
No hay ventas con estos filtros.
{{ $sales->links() }}

Clasificación económica de caja

@forelse($report['rows'] as $row) @empty@endforelse
ConceptoOrigen del inventarioPropiedadMovimientoImporte
{{ config('finance.economic_classes.'.$row->classification) }}{{ ['internal' => 'Interno', 'external' => 'Externo'][$row->inventory_origin] ?? 'No clasificado' }}{{ ['owned' => 'Propio', 'managed' => 'Administrado', 'third_party' => 'Terceros'][$row->ownership_context] ?? 'No clasificada' }}{{ config('finance.directions.'.$row->direction) }}{{ \App\Domain\Finance\Money::format($row->amount) }}
Sin movimientos para estos filtros.

Conciliación de recibos

La clasificación no modifica el recibo ni la deuda del comprador. «Empresa» registra caja; «Propietario» y «Por confirmar» no registran caja de la empresa. Toda corrección conserva usuario, referencia y versión.

{{ $receipts->total() }} recibos · Página {{ $receipts->currentPage() }} de {{ $receipts->lastPage() }}. Usa «Todos los resultados» para incluir las otras páginas.

@include('realEstates.finance.bulk_approval_form', ['target' => 'receipts', 'count' => $receipts->total()])
@forelse($receipts as $row) @empty@endforelse
SeleccionarRecibo / ventaFecha / importePropiedadRecibióConciliar
@can('finance.manage')@endcan#{{ $row['payment']->id }}

Venta: {{ $row['context']['sale_id'] ?? 'Apartado' }}

{{ $row['payment']->payment_date }}

{{ \App\Domain\Finance\Money::format((string)$row['payment']->payment_amount) }}

@unless($row['paid'])

No cobrado / no vigente

@endunless
{{ $row['context']['ownership_context'] === 'owned' ? 'Propio' : 'Terceros' }} · {{ $row['context']['inventory_origin'] === 'external' ? 'Externo' : 'Interno' }}{{ config('finance.receipt_receivers.'.$row['context']['receiver']) }} @can('finance.manage')
Confirmar o corregir
@csrf@include('realEstates.finance.confirm', ['message' => 'Verifiqué quién recibió este dinero.'])
@endcan
Sin recibos para estos filtros.
{{ $receipts->links() }}
@can('expenses.view')

Comisiones por venta

Ventas del periodo seleccionado. Regla: importe por lote vigente en la fecha de venta × lotes; oficina = cero. Se muestran obligación, gasto registrado y pagos por separado. Registrar no paga automáticamente. Cambios posteriores de regla o vendedor requieren revisión. Pagos mostrados: acumulados actuales de estas ventas.

@forelse($sales as $row) @if(isset($row['error']))@else @foreach(['rule', 'registered', 'paid', 'pending'] as $key)@endforeach @endif @empty@endforelse
Venta / fechaVendedor / reglaComisión vigenteGasto registradoPagadoPendiente / diferenciaAcción
#{{ $row['sale']->id }} · {{ $row['sale']->sale_date }}{{ $row['error'] }}Vendedor #{{ $row['rule']['seller_id'] ?? 'Sin asignar' }}

{{ $row['rule']['office_sale'] ? 'Oficina' : \App\Domain\Finance\Money::format($row['rule']['per_lot']).' × '.count($row['rule']['lot_ids']).' lotes' }}

{{ \App\Domain\Finance\Money::format($key === 'rule' ? $row['rule']['amount'] : $row[$key]) }}@if($row['expense'])Ver gasto / pagos@elseif(\App\Domain\Finance\Money::of($row['rule']['amount'])->isPositive() && $row['rule']['seller_id']) @can('expenses.create')
@csrf @include('realEstates.finance.confirm', ['message' => 'Confirmo el registro de la comisión.'])
@endcan @endif
Sin ventas en el periodo.
{{ $sales->links() }}

Las comisiones históricas sin vínculo comprobable a una venta o sin fecha de pago requieren conciliación; no se convierten automáticamente en salidas de caja.

@endcan
@endsection