@php $logoFullPath = public_path('images/logo-full.png'); $logoPath = public_path('images/logo.png'); $logoBase64 = null; if(file_exists($logoFullPath)) { $logoData = base64_encode(file_get_contents($logoFullPath)); $logoBase64 = 'data:image/png;base64,' . $logoData; } elseif(file_exists($logoPath)) { $logoData = base64_encode(file_get_contents($logoPath)); $logoBase64 = 'data:image/png;base64,' . $logoData; } @endphp @if($logoBase64) @endif

Comercial Mar-K SPA

RUT: 77.943.847-3

Comercialización de Artículos Publicitarios

Tel.: 974791522 | Mail: ventas@mar-k.cl

@if($venta->cliente && $venta->cliente->company) {{-- Cliente con empresa --}}
Sr/a {{ $venta->nombre ?: 'No definido' }}
Cotización {{ str_pad($venta->id, 5, '0', STR_PAD_LEFT) }}
Fecha {{ $venta->fecha ? $venta->fecha->format('d/m/Y') : 'No definida' }}
Empresa {{ $venta->cliente->company->business_name }}
RUT Empresa {{ $venta->cliente->company->rut ?: 'No definido' }}
@if($venta->plazo_entrega)
Plazo de Entrega {{ $venta->plazo_entrega }} días
@else
@endif
Teléfono {{ $venta->telefono ?: 'No definido' }}
Correo {{ $venta->email ?: 'No definido' }}
@if($venta->despacho)
Tipo de Despacho {{ $venta->despacho }}
@else
@endif
@if($venta->despacho === 'Despacho a domicilio' && ($venta->direccion_despacho || $venta->comuna_despacho) || $venta->cliente->company->payment_method)
@if($venta->despacho === 'Despacho a domicilio' && ($venta->direccion_despacho || $venta->comuna_despacho))
Dirección de Despacho @php $direccionCompleta = collect([$venta->direccion_despacho, $venta->comuna_despacho]) ->filter() ->implode(', '); @endphp {{ $direccionCompleta ?: 'No definida' }}
@else
@endif @if($venta->cliente->company->payment_method)
Forma de Pago {{ $venta->cliente->company->payment_method }}
@else
@endif
@endif @else {{-- Cliente sin empresa --}}
Sr/a {{ $venta->nombre ?: 'No definido' }}
Cotización {{ str_pad($venta->id, 5, '0', STR_PAD_LEFT) }}
Fecha {{ $venta->fecha ? $venta->fecha->format('d/m/Y') : 'No definida' }}
Teléfono {{ $venta->telefono ?: 'No definido' }}
Email {{ $venta->email ?: 'No definido' }}
@if($venta->plazo_entrega)
Plazo de Entrega {{ $venta->plazo_entrega }} días
@else
@endif
@if($venta->despacho || ($venta->despacho === 'Despacho a domicilio' && ($venta->direccion_despacho || $venta->comuna_despacho)))
@if($venta->despacho)
Tipo de Despacho {{ $venta->despacho }}
@else
@endif @if($venta->despacho === 'Despacho a domicilio' && ($venta->direccion_despacho || $venta->comuna_despacho))
Dirección de Despacho @php $direccionCompleta = collect([$venta->direccion_despacho, $venta->comuna_despacho]) ->filter() ->implode(', '); @endphp {{ $direccionCompleta ?: 'No definida' }}
@else
@endif
@endif @endif
Productos
@if($venta->ventaProductos && $venta->ventaProductos->count() > 0) @foreach($venta->ventaProductos as $ventaProducto) @continue(!$ventaProducto->incluir_calculo) @php // Calcular valores usando la misma lógica que el JavaScript $cantidad = intval($ventaProducto->cantidad ?: 1); $precioProveedor = intval($ventaProducto->precio_proveedor ?: 0); $valorEstimado = intval($ventaProducto->valor_estimado ?: 0); $maquila = intval($ventaProducto->maquila ?: 0); $factoring = intval($ventaProducto->factoring ?: 0); $utilidad = intval($ventaProducto->utilidad ?: 0); $porcentajeAgencia = intval($venta->porcentaje_agencia ?: 0); // Base = precio proveedor + valor estimado aplicación + maquila $base = $precioProveedor + $valorEstimado + $maquila; // base * (1 + utilidad%) * (1 + agencia%) * (1 + factoring%) $conUtilidad = $base * (1 + $utilidad / 100); $conAgencia = $conUtilidad * (1 + $porcentajeAgencia / 100); $valorUnitarioConAgencia = (int) round($conAgencia * (1 + $factoring / 100)); // Valor total = valor unitario con agencia * cantidad $valorTotal = $valorUnitarioConAgencia * $cantidad; // Código del producto $codigo = 'Sin código'; if ($ventaProducto->producto) { $codigo = $ventaProducto->producto->code ?: 'Sin código'; } @endphp @endforeach
Imagen Descripción Cantidad Código Unitario Valor
@php $imagenBase64 = null; // Intentar con imágenes del producto primero if($ventaProducto->producto && $ventaProducto->producto->images) { $images = is_string($ventaProducto->producto->images) ? json_decode($ventaProducto->producto->images, true) : $ventaProducto->producto->images; $firstImage = is_array($images) && !empty($images) ? $images[0] : null; if($firstImage) { // Verificar si es una URL remota if(filter_var($firstImage, FILTER_VALIDATE_URL)) { try { $imagenData = @file_get_contents($firstImage); if($imagenData !== false) { $imagenBase64Data = base64_encode($imagenData); // Detectar tipo MIME desde la URL o contenido $extension = pathinfo(parse_url($firstImage, PHP_URL_PATH), PATHINFO_EXTENSION); $mimeType = $extension === 'png' ? 'png' : ($extension === 'webp' ? 'webp' : 'jpeg'); $imagenBase64 = "data:image/$mimeType;base64," . $imagenBase64Data; } } catch (\Exception $e) { // Silenciosamente ignorar errores de descarga } } else { // Es una ruta local $rutaImagen = storage_path('app/public/' . $firstImage); if(file_exists($rutaImagen)) { $imagenData = base64_encode(file_get_contents($rutaImagen)); $extension = strtolower(pathinfo($rutaImagen, PATHINFO_EXTENSION)); $mimeType = $extension === 'png' ? 'png' : ($extension === 'webp' ? 'webp' : 'jpeg'); $imagenBase64 = "data:image/$mimeType;base64," . $imagenData; } } } } // Si no hay imagen del producto, intentar con maqueta_imagen if(!$imagenBase64 && $ventaProducto->maqueta_imagen) { $rutaImagen = storage_path('app/public/' . $ventaProducto->maqueta_imagen); if(file_exists($rutaImagen)) { $imagenData = base64_encode(file_get_contents($rutaImagen)); $extension = strtolower(pathinfo($rutaImagen, PATHINFO_EXTENSION)); $mimeType = $extension === 'png' ? 'png' : ($extension === 'webp' ? 'webp' : 'jpeg'); $imagenBase64 = "data:image/$mimeType;base64," . $imagenData; } } @endphp @if($imagenBase64) Imagen del producto @else
Sin imagen
@endif
{{ $ventaProducto->producto->name ?? 'Producto no encontrado' }}
@if($ventaProducto->tiene_aplicacion && $ventaProducto->tipo_aplicacion && $ventaProducto->tipo_aplicacion !== 'Sin Aplicación')
Aplicación: {{ $ventaProducto->tipo_aplicacion }}
@endif @if($ventaProducto->tiene_aplicacion && $ventaProducto->cantidad_logos && $ventaProducto->cantidad_logos > 0)
Número de Logos: {{ $ventaProducto->cantidad_logos }}
@endif @if($ventaProducto->tiene_aplicacion && $ventaProducto->cantidad_colores && $ventaProducto->cantidad_colores > 0)
Número de Colores Logo: {{ $ventaProducto->getCantidadColoresLabel() }}
@endif @if($ventaProducto->tiene_aplicacion && $ventaProducto->tinta_solicitada) @php $tintaLabel = match($ventaProducto->tinta_solicitada) { 'negra' => 'Negra', 'azul' => 'Azul', default => ucfirst($ventaProducto->tinta_solicitada), }; @endphp
Color de Tinta: {{ $tintaLabel }}
@endif
{{ $cantidad }}
{{ $codigo }}
@if($ventaProducto->isAgotado())
@else
${{ number_format($valorUnitarioConAgencia, 0, ',', '.') }}
@endif
@if($ventaProducto->isAgotado())
Producto Agotado
@else
${{ number_format($valorTotal, 0, ',', '.') }}
@endif
@php $totalUtilidad = 0; $neto = 0; $descuento = intval($venta->descuento ?: 0); $porcentajeAgencia = intval($venta->porcentaje_agencia ?: 0); // Calcular valores usando la misma lógica que el JavaScript foreach($venta->ventaProductos as $ventaProducto) { // Solo incluir productos marcados para cálculo y que tengan precio if (!$ventaProducto->incluir_calculo || $ventaProducto->isAgotado()) { continue; } $cantidad = intval($ventaProducto->cantidad ?: 1); $precioProveedor = intval($ventaProducto->precio_proveedor ?: 0); $valorEstimado = intval($ventaProducto->valor_estimado ?: 0); $maquila = intval($ventaProducto->maquila ?: 0); $factoring = intval($ventaProducto->factoring ?: 0); $utilidad = intval($ventaProducto->utilidad ?: 0); // Base = precio proveedor + valor estimado aplicación + maquila $base = $precioProveedor + $valorEstimado + $maquila; // base * (1 + utilidad%) * (1 + agencia%) * (1 + factoring%) $conUtilidad = $base * (1 + $utilidad / 100); $conAgencia = $conUtilidad * (1 + $porcentajeAgencia / 100); $precioUnitario = (int) round($conAgencia * (1 + $factoring / 100)); // Acumular totales (ya incluye agencia por producto) $neto += $precioUnitario * $cantidad; } // El neto ya incluye la agencia internamente por cada producto // Aplicar descuento sobre el neto $descuentoMonto = (int) round($neto * ($descuento / 100)); // Valor de despacho (sujeto a IVA) $valorDespacho = intval($venta->valor_despacho ?: 0); // Base imponible = neto - descuento + despacho $subtotal = $neto - $descuentoMonto + $valorDespacho; // IVA sobre el subtotal $iva = (int) round($subtotal * 0.19); $total = $subtotal + $iva; @endphp
@if($cuenta_bancaria)

Datos Bancarios

{!! $cuenta_bancaria !!}
@endif
@if($descuento > 0) @endif @if($valorDespacho > 0) @endif
Neto ${{ number_format($neto, 0, ',', '.') }}
Descuento ({{ $descuento }}%) -${{ number_format($descuentoMonto, 0, ',', '.') }}
Despacho ${{ number_format($valorDespacho, 0, ',', '.') }}
IVA ${{ number_format($iva, 0, ',', '.') }}
Total ${{ number_format($total, 0, ',', '.') }}
@else
No hay productos asociados a esta cotización.
@endif

Tenga Presente

{!! $terminos_condiciones ?? '

No hay términos y condiciones configurados.

' !!}