@php $logoSrc = $logoEmpresaPdfSrc ?? null; $clienteNome = $locacao->cliente->razao_social ?? $locacao->cliente->nome ?? '-'; $inicio = $locacao->data_inicio ? \Carbon\Carbon::parse($locacao->data_inicio) : null; if ($inicio && !empty($locacao->hora_inicio)) { $inicio->setTimeFromTimeString((string) $locacao->hora_inicio); } $fim = $locacao->data_fim ? \Carbon\Carbon::parse($locacao->data_fim) : null; if ($fim && !empty($locacao->hora_fim)) { $fim->setTimeFromTimeString((string) $locacao->hora_fim); } $ehPorHora = (bool) ($locacao->locacao_por_hora ?? false); if (!$ehPorHora && $inicio && $fim) { $ehPorHora = $inicio->format('Y-m-d') === $fim->format('Y-m-d'); } $qtdPeriodo = $ehPorHora ? max(1, (int) ceil(($inicio && $fim && $fim->gte($inicio)) ? ($inicio->diffInMinutes($fim) / 60) : 1)) : max(1, (int) ($locacao->quantidade_dias ?? (($inicio && $fim) ? $inicio->copy()->startOfDay()->diffInDays($fim->copy()->startOfDay()) + 1 : 1))); $labelPeriodo = $ehPorHora ? 'hora(s)' : 'dia(s)'; $periodoInicio = optional($locacao->data_inicio)->format('d/m/Y') . ' - ' . ($locacao->hora_inicio ?? '00:00') . ' hrs'; $periodoFim = optional($locacao->data_fim)->format('d/m/Y') . ' - ' . ($locacao->hora_fim ?? '23:59') . ' hrs'; $nomeEmpresa = $empresa->nome_fantasia ?? $empresa->razao_social ?? 'ACTLOC'; $horaInicioFmt = substr((string) ($locacao->hora_inicio ?? '00:00'), 0, 5); $horaFimFmt = substr((string) ($locacao->hora_fim ?? '23:59'), 0, 5); $cidade = trim((string) ($locacao->cidade ?: ($locacao->cliente->cidade ?? ($empresa->cidade ?? '')))); $uf = trim((string) ($locacao->estado ?: ($locacao->cliente->uf ?? ($empresa->uf ?? '')))); $cidadeUf = trim($cidade . ($uf !== '' ? ' - ' . $uf : '')); $vendedor = $responsavelContrato ?? ($locacao->responsavel ?? '-'); $docLocadora = $empresa->cnpj ?? '-'; $docCliente = $locacao->cliente->cpf_cnpj ?? '-'; $nomeDia = now()->locale('pt_BR')->isoFormat('dddd'); $nomeData = now()->locale('pt_BR')->isoFormat('DD [de] MMMM [de] YYYY'); $apiFilesBase = rtrim((string) config('custom.api_files_url', env('API_FILES_URL', 'https://api.gestornow.com')), '/'); $startsWith = function (string $texto, string $prefixo): bool { return strpos($texto, $prefixo) === 0; }; $resolverFotoProduto = function ($produto) use ($apiFilesBase, $locacao, $startsWith) { if (!is_object($produto)) { return null; } $fotoUrl = trim((string) ($produto->foto_url ?? '')); $fotoFilename = trim((string) ($produto->foto_filename ?? '')); if ($fotoFilename !== '') { return $apiFilesBase . '/uploads/produtos/imagens/' . (int) ($locacao->id_empresa ?? 0) . '/' . ltrim($fotoFilename, '/'); } if ($fotoUrl !== '') { if ($startsWith($fotoUrl, 'http://') || $startsWith($fotoUrl, 'https://')) { return $fotoUrl; } $path = '/' . ltrim($fotoUrl, '/'); if ($startsWith($path, '/api/produtos/imagens/')) { $path = '/uploads/produtos/imagens/' . ltrim(substr($path, strlen('/api/produtos/imagens/')), '/'); } elseif ($startsWith($path, '/produtos/imagens/')) { $path = '/uploads/produtos/imagens/' . ltrim(substr($path, strlen('/produtos/imagens/')), '/'); } elseif (!$startsWith($path, '/uploads/produtos/imagens/')) { $path = '/uploads/produtos/imagens/' . (int) ($locacao->id_empresa ?? 0) . '/' . ltrim($path, '/'); } return $apiFilesBase . $path; } return null; }; $salasNome = collect($locacao->salas ?? [])->mapWithKeys(function ($sala) { return [(int) ($sala->id_sala ?? 0) => ($sala->nome ?? 'Sala')]; }); $linhasEntrega = collect(); foreach ($locacao->produtos as $item) { $linhasEntrega->push([ 'sala_id' => (int) ($item->id_sala ?? 0), 'codigo' => $item->patrimonio->codigo_patrimonio ?? $item->patrimonio->numero_serie ?? '-', 'descricao' => $item->produto->nome ?? 'Item', 'qtd' => (int) ($item->quantidade ?? 1), 'foto' => $resolverFotoProduto($item->produto ?? null), ]); } foreach ($locacao->produtosTerceiros as $item) { $linhasEntrega->push([ 'sala_id' => (int) ($item->id_sala ?? 0), 'codigo' => '-', 'descricao' => $item->nome_produto ?? 'Produto de Terceiro', 'qtd' => (int) ($item->quantidade ?? 1), 'foto' => null, ]); } $gruposEntrega = $linhasEntrega->groupBy('sala_id'); $totalItens = (int) $linhasEntrega->sum('qtd'); @endphp
@if($logoSrc) @endif
COMPROVANTE DE ENTREGA
Contrato Nº:
{{ $locacao->numero_contrato }}
Data Emissão: {{ now()->format('d/m/Y H:i') }}
Data de Início: {{ optional($locacao->data_inicio)->format('d/m/Y') }} {{ $horaInicioFmt }} Data Fim: {{ optional($locacao->data_fim)->format('d/m/Y') }} {{ $horaFimFmt }}
Início do transporte: {{ optional($locacao->data_inicio)->format('d/m/Y') }} - {{ $horaInicioFmt }} hrs Volta do transporte: {{ optional($locacao->data_fim)->format('d/m/Y') }} - {{ $horaFimFmt }} hrs
Data da montagem: {{ optional($locacao->data_inicio)->format('d/m/Y') }} - {{ $horaInicioFmt }} hrs Data da desmontagem: {{ optional($locacao->data_fim)->format('d/m/Y') }} - {{ $horaFimFmt }} hrs
Totalizando: {{ $qtdPeriodo }} {{ $labelPeriodo }}. Vendedor: {{ $vendedor ?: '-' }}
Cliente: {{ $clienteNome }} CNPJ/CPF: {{ $docCliente }}
Endereço: {{ $locacao->endereco_entrega ?? $locacao->local_entrega ?? '-' }} IE/RG: {{ $locacao->cliente->rg ?? '-' }}
Telefone: {{ $locacao->cliente->telefone ?? $locacao->cliente->celular ?? '-' }} Email: {{ $locacao->cliente->email ?? '-' }}
Contato no Local: {{ $locacao->contato_local ?? $locacao->contato_responsavel ?? '-' }} Motorista: __________________________   Hora: ____________
@if(!empty($imprimirComFoto)) @endif @php $temLinhasEntrega = false; @endphp @foreach($gruposEntrega as $idSala => $linhasSala) @php $temLinhasEntrega = true; $nomeSala = $idSala > 0 ? ($salasNome[$idSala] ?? ('Sala #' . $idSala)) : 'Sem sala'; @endphp @foreach($linhasSala as $linha) @if(!empty($imprimirComFoto)) @endif @endforeach @endforeach @if(!$temLinhasEntrega) @endif
FotoCódigo / Série Descrição Qtd Dias Qtd Entregue
Sala: {{ $nomeSala }}
@if(!empty($linha['foto'])) Foto @else - @endif {{ $linha['codigo'] }} {{ $linha['descricao'] }} {{ $linha['qtd'] }} {{ $qtdPeriodo }}
Sem itens.
Total {{ $totalItens }}
Local Entrega: {{ $locacao->local_entrega ?? $locacao->endereco_entrega ?? '-' }}
Observações: {{ $locacao->observacoes_entrega ?? '-' }}
Observações Adicionais:
Declaro para os devidos fins que recebemos os equipamentos acima em perfeito estado de funcionamento e deverão ser devolvidos em perfeito estado de conservação, sob pena da contratante arcar com os valores de reposição.
{{ $cidadeUf ?: 'Limeira - SP' }}, {{ ucfirst($nomeDia) }}, {{ $nomeData }}
@if(!empty($assinaturaLocadoraPdfSrc ?? null)) Assinatura Locadora @endif
ENTREGUE POR:
{{ $nomeEmpresa }}
CNPJ: {{ $docLocadora }}
@if(!empty($assinaturaClientePdfSrc ?? null)) Assinatura Cliente @endif
RECEBIDO POR:
{{ $clienteNome }}
CPF/CNPJ: {{ $docCliente }}
CONFERIDO POR: