@extends('layouts.app') @section('title', 'Detalles de Factura de Venta') @section('content')

Factura de Venta: {{ $invoice->invoice_number }}

Información de la Factura
Número:
{{ $invoice->invoice_number }}
Fecha:
{{ $invoice->invoice_date ? $invoice->invoice_date->format('d/m/Y') : 'N/A' }}
Vencimiento:
{{ $invoice->due_date ? $invoice->due_date->format('d/m/Y') : 'N/A' }}
Estado:
@php $statusClasses = [ 'draft' => 'badge-secondary', 'sent' => 'badge-primary', 'paid' => 'badge-success', 'overdue' => 'badge-danger', // 'cancelled' eliminado - las facturas no se cancelan, se devuelven ]; @endphp @if($invoice->status === 'sent') Procesada @elseif($invoice->status === 'paid') Pagada @elseif($invoice->status === 'overdue') Vencida @elseif($invoice->status === 'draft') Borrador @else {{ ucfirst($invoice->status) }} @endif
Moneda:
{{ $invoice->currency ?? 'USD' }}
@if($invoice->currency !== 'USD')
Tasa Legal (USD):
{{ number_format($invoice->exchange_rate_legal ?? $invoice->exchange_rate ?? 1, 4) }}
@if($invoice->exchange_rate_real && $invoice->exchange_rate_real != $invoice->exchange_rate_legal)
Tasa Real:
{{ number_format($invoice->exchange_rate_real ?? 1, 4) }}
@endif @endif
Información del Cliente
@if($invoice->client)
Empresa:
{{ $invoice->client->business_name }}
NIT:
{{ $invoice->client->tax_id ?? 'N/A' }}
Teléfono:
{{ $invoice->client->phone ?? 'N/A' }}
Email:
{{ $invoice->client->email ?? 'N/A' }}
@else
Cliente no encontrado
@endif
Productos
@forelse($invoice->details as $detail) @php // Calcular precios en ambas monedas si es multi-moneda $isMultiCurrency = $invoice->currency !== 'USD'; if ($isMultiCurrency) { $unitPriceLocal = $detail->unit_price ?? 0; $totalPriceLocal = $detail->total_price ?? 0; $discountLocal = $detail->discount_amount ?? 0; // Convertir a USD usando la tasa guardada $rateForUSD = $invoice->exchange_rate_legal ?? $invoice->exchange_rate ?? 1; if ($rateForUSD > 0) { $unitPriceUSD = $unitPriceLocal / $rateForUSD; $totalPriceUSD = $totalPriceLocal / $rateForUSD; $discountUSD = $discountLocal / $rateForUSD; } else { $unitPriceUSD = $unitPriceLocal; $totalPriceUSD = $totalPriceLocal; $discountUSD = $discountLocal; } } else { $unitPriceUSD = $detail->unit_price ?? 0; $totalPriceUSD = $detail->total_price ?? 0; $discountUSD = $detail->discount_amount ?? 0; } @endphp @empty @endforelse
Producto Cantidad Precio Unit. Descuento Total
{{ $detail->product->name ?? 'N/A' }}
{{ $detail->product->code ?? 'N/A' }}
{{ number_format($detail->quantity_ordered ?? $detail->quantity ?? 0, 2) }} ${{ number_format($unitPriceUSD, 2) }} @if($isMultiCurrency)
{{ number_format($unitPriceLocal, 2) }} {{ $invoice->currency }} @endif
${{ number_format($discountUSD, 2) }} @if($isMultiCurrency)
{{ number_format($discountLocal, 2) }} {{ $invoice->currency }} @endif
${{ number_format($totalPriceUSD, 2) }} @if($isMultiCurrency)
{{ number_format($totalPriceLocal, 2) }} {{ $invoice->currency }} @endif
No hay productos
@if($invoice->notes)
Notas

{{ $invoice->notes }}

@endif
@php // Calcular montos en USD if ($invoice->currency === 'USD') { $subtotalUSD = $invoice->subtotal_usd ?? $invoice->subtotal ?? 0; $discountUSD = $invoice->discount_usd ?? $invoice->discount_amount ?? 0; $taxUSD = $invoice->tax_amount_usd ?? $invoice->tax_amount ?? 0; $totalUSD = $invoice->total_amount_usd ?? $invoice->total_amount ?? 0; $paidUSD = $invoice->amount_paid ?? 0; $dueUSD = $invoice->amount_due ?? 0; $isMultiCurrency = false; } else { // Para multi-moneda, calcular USD y mantener valores originales $isMultiCurrency = true; $subtotalLocal = $invoice->subtotal ?? 0; $discountLocal = $invoice->discount_amount ?? 0; $taxLocal = $invoice->tax_amount ?? 0; $totalLocal = $invoice->total_amount ?? 0; $paidLocal = $invoice->amount_paid ?? 0; $dueLocal = $invoice->amount_due ?? 0; // Convertir a USD usando total_legal (USD legal a cobrar) if ($invoice->total_legal > 0 && $invoice->total_amount > 0) { $rate = $invoice->total_amount / $invoice->total_legal; $subtotalUSD = $subtotalLocal / $rate; $discountUSD = $discountLocal / $rate; $taxUSD = $taxLocal / $rate; $totalUSD = $invoice->total_legal; $paidUSD = $paidLocal / $rate; $dueUSD = $dueLocal / $rate; } else { $rate = $invoice->exchange_rate_legal ?? $invoice->exchange_rate ?? 1; $subtotalUSD = $rate > 0 ? ($subtotalLocal / $rate) : 0; $discountUSD = $rate > 0 ? ($discountLocal / $rate) : 0; $taxUSD = $rate > 0 ? ($taxLocal / $rate) : 0; $totalUSD = $rate > 0 ? ($totalLocal / $rate) : 0; $paidUSD = $rate > 0 ? ($paidLocal / $rate) : 0; $dueUSD = $rate > 0 ? ($dueLocal / $rate) : 0; } } @endphp @if($isMultiCurrency)
Monto a Cobrar (USD)
Subtotal:
${{ number_format($subtotalUSD, 2) }}
Descuento:
${{ number_format($discountUSD, 2) }}
Impuestos:
${{ number_format($taxUSD, 2) }}

Total:
${{ number_format($totalUSD, 2) }}
Pagado:
${{ number_format($paidUSD, 2) }}
Pendiente:
${{ number_format($dueUSD, 2) }}
Referencial para documento ({{ $invoice->currency }})
Subtotal:
{{ number_format($subtotalLocal, 2) }} {{ $invoice->currency }}
Descuento:
{{ number_format($discountLocal, 2) }} {{ $invoice->currency }}
Impuestos:
{{ number_format($taxLocal, 2) }} {{ $invoice->currency }}

Total:
{{ number_format($totalLocal, 2) }} {{ $invoice->currency }}
Pagado:
{{ number_format($paidLocal, 2) }} {{ $invoice->currency }}
Pendiente:
{{ number_format($dueLocal, 2) }} {{ $invoice->currency }}
@else
Resumen de Totales (USD)
Subtotal:
${{ number_format($subtotalUSD, 2) }}
Descuento:
${{ number_format($discountUSD, 2) }}
Impuestos:
${{ number_format($taxUSD, 2) }}

Total:
${{ number_format($totalUSD, 2) }}
Pagado:
${{ number_format($paidUSD, 2) }}
Pendiente:
${{ number_format($dueUSD, 2) }}
@endif
Información Adicional
Vendedor:
@if($invoice->salesman) {{ $invoice->salesman->first_name }} {{ $invoice->salesman->last_name }} @else N/A @endif
Creado por:
@if($invoice->createdBy) {{ $invoice->createdBy->name }} @else N/A @endif
Fecha de creación:
{{ $invoice->created_at ? $invoice->created_at->format('d/m/Y H:i') : 'N/A' }}
Última actualización:
{{ $invoice->updated_at ? $invoice->updated_at->format('d/m/Y H:i') : 'N/A' }}
@endsection @push('scripts') @endpush