@php $title = __('orcamento.view_title'); $moedaSelecionada = $orcamento->moeda ?? 'BRL'; $categoriaServico = $orcamento->tipoServico?->categoriaServico; $observacoesPagamento = (string) ($orcamento->condicoesPagamento?->observacoes ?? ''); $parcelasVisualizacao = collect($parcelas ?? []); if ((string) ($categoriaServico?->id) === '2') { $prazoEntrega = $orcamento->prazo_entrega ?: __('orcamento.automatic_delivery_deadline_missing'); $observacoesOrcamento = __('orcamento.automatic_outsourcing_observations', ['deadline' => $prazoEntrega]); } else { $prazoEntrega = $orcamento->prazo_entrega ?: __('orcamento.automatic_delivery_deadline_missing'); $observacoesOrcamento = __('orcamento.automatic_delivery_deadline', ['deadline' => $prazoEntrega]); } if ($orcamento->condicoesPagamento) { $numeroParcelas = $orcamento->condicoesPagamento->numero_parcelas; $valorTotal = (float) ($orcamento->total_exibicao ?? $orcamento->total); $valorEntrada = (float) ($orcamento->condicoesPagamento->valor_entrada_exibicao ?? $orcamento->condicoesPagamento->valor_entrada); if ($numeroParcelas === 1) { $observacoesPagamento = __('orcamento.automatic_cash_payment', [ 'total' => \App\Helpers\MoneyHelper::formatarPorMoeda($valorTotal, $moedaSelecionada), ]); } else { $parcelasRegistradas = $parcelasVisualizacao ->where('numero_parcela', '>', 0) ->sortBy('numero_parcela') ->values(); $valorParcela = (float) ($parcelasRegistradas->first()->valor ?? 0); $valorUltimaParcela = (float) ($parcelasRegistradas->last()->valor ?? $valorParcela); $ajusteFinal = $valorUltimaParcela - $valorParcela; $observacoesPagamento = __('orcamento.automatic_installment_payment', [ 'entry' => \App\Helpers\MoneyHelper::formatarPorMoeda($valorEntrada, $moedaSelecionada), 'installments' => $numeroParcelas, 'installment' => \App\Helpers\MoneyHelper::formatarPorMoeda($valorParcela, $moedaSelecionada), ]); if (abs($ajusteFinal) >= 0.005) { $observacoesPagamento .= __('orcamento.automatic_final_installment_adjustment', [ 'sign' => $ajusteFinal > 0 ? '+' : '-', 'amount' => \App\Helpers\MoneyHelper::formatarPorMoeda(abs($ajusteFinal), $moedaSelecionada), ]); } } } @endphp @push('styles') @endpush

{{ __('orcamento.label_details') }}

{{ __('orcamento.subtitle_view') }}
@if($orcamento->status == 'Aguardando Cliente') @elseif($orcamento->status == 'Convertido em Venda') @if($orcamento->vendas && is_object($orcamento->vendas) && $orcamento->vendas->count() > 0) @php $venda = $orcamento->vendas->first(); @endphp @endif @endif @if($orcamento->status !== 'Convertido em Venda') @elseif($orcamento->status === 'Convertido em Venda' && $orcamento->vendas && is_object($orcamento->vendas) && $orcamento->vendas->count() > 0) @php $venda = $orcamento->vendas->first(); @endphp @if($venda->status === \App\Enum\StatusVenda::PENDENTE->value) @endif @endif
{{ __('orcamento.label_details') }}
{{ __('orcamento.label_service_category') }}
@if($categoriaServico) @php $labelCategoria = $categoriaServico->nome_exibicao ?? $categoriaServico->nome; $categoriaTraduzida = __('orcamento.service_categories_by_id.' . $categoriaServico->id); if ($categoriaTraduzida !== 'orcamento.service_categories_by_id.' . $categoriaServico->id) { $labelCategoria = $categoriaTraduzida; } @endphp
@endif
{{ __('orcamento.label_currency') }}
@foreach(['BRL', 'USD', 'EUR'] as $codigoMoeda)
@endforeach

{{ $orcamento->codigo }}

{{ $orcamento->data_emissao ? $orcamento->data_emissao->format('d/m/Y') : '' }}

{{ $orcamento->data_validade ? $orcamento->data_validade->format('d/m/Y') : '' }}

@php $statusColor = match($orcamento->status) { 'Pendente' => 'warning', 'Aguardando Cliente' => 'info', 'Aprovado pelo Cliente' => 'primary', 'Convertido em Venda' => 'success', 'Cancelado pelo Cliente' => 'danger', default => 'secondary' }; @endphp {{ $orcamento->status }}

{{ $orcamento->cliente->razao_social }}

@php $contatoPrincipal = $orcamento->cliente->contatos->where('principal', true)->first(); @endphp

{{ $contatoPrincipal?->nome ?? '-' }}

{{ $contatoPrincipal->telefone ?? '-' }}

{{ $orcamento->tipoServico?->nome_exibicao ?? $orcamento->tipoServico?->nome ?? '-' }}

{{ $orcamento->prazo_entrega ?? '-' }}

{{ $observacoesOrcamento !== '' ? $observacoesOrcamento : '-' }}

{{ __('orcamento.label_items') }}
@forelse($orcamento->orcamentoServicos as $index => $item) @empty @endforelse
# {{ __('orcamento.label_service_item') }} {{ __('orcamento.label_description') }} {{ __('orcamento.label_people_count') }} {{ __('orcamento.label_quantity_short') }} {{ __('orcamento.label_unit_short') }} {{ __('orcamento.label_unit_price_short') }} {{ __('orcamento.label_total_short') }}
{{ $index + 1 }}
{{ $item->servico?->nome_exibicao ?? $item->servico?->nome ?? 'Serviço não definido' }}
{{ $item->descricao ?? '-' }} {{ $item->pessoas ?? 1 }} {{ $item->quantidade ?? '0' }} {{ isset($item->unidade) ? ucfirst($item->unidade) : '-' }} {{ $item->valor_unitario_formatado_exibicao ?? \App\Helpers\MoneyHelper::formatarPorMoeda($item->valor_unitario, $moedaSelecionada) }} {{ $item->valor_total_formatado_exibicao ?? \App\Helpers\MoneyHelper::formatarPorMoeda($item->valor_total, $moedaSelecionada) }}
Nenhum item cadastrado

Este orçamento ainda não possui itens de serviço.

{{ __('orcamento.label_financial_summary') }}
{{ __('orcamento.label_subtotal') }}: {{ $orcamento->subtotal_formatado_exibicao ?? \App\Helpers\MoneyHelper::formatarPorMoeda($orcamento->subtotal ?? 0, $moedaSelecionada) }}
@if(($orcamento->desconto ?? 0) > 0)
{{ __('orcamento.label_discount') }} @if($orcamento->subtotal > 0) {{ number_format($orcamento->desconto, 1, in_array($moedaSelecionada, ['USD', 'EUR'], true) ? '.' : ',', '') }}% @endif -{{ $orcamento->valor_desconto_formatado_exibicao ?? \App\Helpers\MoneyHelper::formatarPorMoeda($orcamento->valor_desconto ?? 0, $moedaSelecionada) }}
@endif
{{ __('orcamento.label_total_general') }}: {{ $orcamento->total_formatado_exibicao ?? \App\Helpers\MoneyHelper::formatarPorMoeda($orcamento->total ?? 0, $moedaSelecionada) }}
{{ __('orcamento.label_quote_workflow') }}
@php $statusAtual = $orcamento->status; // Determinar quantos steps foram concluídos $completedSteps = 0; $activeStep = 1; // Verificar status da venda se existir $vendaStatus = null; $vendaConcluida = false; if ($orcamento->vendas && is_object($orcamento->vendas) && $orcamento->vendas->count() > 0) { $vendaStatus = $orcamento->vendas->first()->status; $vendaConcluida = $vendaStatus === \App\Enum\StatusVenda::CONCLUIDA->value; } switch ($statusAtual) { case \App\Enum\StatusOrcamento::PENDENTE->value: $completedSteps = 0; $activeStep = 1; break; case \App\Enum\StatusOrcamento::AGUARDANDO_CLIENTE->value: $completedSteps = 2; $activeStep = 2; break; case \App\Enum\StatusOrcamento::APROVADO_CLIENTE->value: $completedSteps = 2; $activeStep = 3; break; case \App\Enum\StatusOrcamento::CONVERTIDO_VENDA->value: $completedSteps = 3; $activeStep = 4; // Se tem venda e ela está concluída, considera step 4 completo if ($vendaConcluida) { $completedSteps = 4; $activeStep = 5; } break; case \App\Enum\StatusOrcamento::CANCELADO->value: // Quando cancelado, steps 1 e 2 ficam verdes (completed) $completedSteps = 2; $activeStep = 3; break; default: $completedSteps = 0; $activeStep = 1; break; } $progressClass = 'progress-' . $completedSteps; // Adicionar classe especial se venda existe mas não está concluída if ($statusAtual === \App\Enum\StatusOrcamento::CONVERTIDO_VENDA->value && !$vendaConcluida) { $progressClass .= ' venda-pendente'; } // Adicionar classe especial para orçamento cancelado if ($statusAtual === \App\Enum\StatusOrcamento::CANCELADO->value) { $progressClass = 'progress-cancelled'; } @endphp
  • {{ \App\Enum\StatusOrcamento::PENDENTE->value }} @if($completedSteps >= 1) @endif
    {{ $orcamento->created_at->format('d/m/Y H:i') }}
  • {{ \App\Enum\StatusOrcamento::AGUARDANDO_CLIENTE->value }} @if($completedSteps >= 2) @endif
    @if($completedSteps >= 2) {{ $orcamento->updated_at->format('d/m/Y H:i') }} @endif
  • @if($statusAtual === \App\Enum\StatusOrcamento::CANCELADO->value) @else @endif
    @if($statusAtual === \App\Enum\StatusOrcamento::CANCELADO->value) {{ \App\Enum\StatusOrcamento::CANCELADO->value }} @else {{ \App\Enum\StatusOrcamento::APROVADO_CLIENTE->value }} @if($completedSteps >= 3) @endif @endif
    @if($statusAtual === \App\Enum\StatusOrcamento::CANCELADO->value || $completedSteps >= 3) {{ $orcamento->updated_at->format('d/m/Y H:i') }} @endif
  • @if($statusAtual === \App\Enum\StatusOrcamento::CANCELADO->value) {{ \App\Enum\StatusOrcamento::VENDA_NAO_REALIZADA->value }} @elseif($statusAtual === \App\Enum\StatusOrcamento::CONVERTIDO_VENDA->value && $vendaStatus) {{ $vendaStatus }} @if($vendaConcluida) @endif @else {{ \App\Enum\StatusOrcamento::CONVERTIDO_VENDA->value }} @endif
    @if($statusAtual === \App\Enum\StatusOrcamento::CONVERTIDO_VENDA->value) {{ $orcamento->updated_at->format('d/m/Y H:i') }} @endif @if($statusAtual === \App\Enum\StatusOrcamento::CANCELADO->value) {{ $orcamento->updated_at->format('d/m/Y H:i') }} @endif
    @if($statusAtual === \App\Enum\StatusOrcamento::CONVERTIDO_VENDA->value && $orcamento->vendas && is_object($orcamento->vendas) && $orcamento->vendas->count() > 0) @endif
{{ __('orcamento.label_additional_information') }}
@if($orcamento->condicoesPagamento)
{{ __('orcamento.label_payment_conditions_title') }}
@if($orcamento->condicoesPagamento->forma_pagamento)
{{ __('orcamento.portal_form') }}: {{ $orcamento->condicoesPagamento->formaPagamento?->nome ?? __('orcamento.label_payment_undefined') }}
@endif @if($orcamento->condicoesPagamento->tipo_pagamento)
@php $tipoPagamento = trim((string) $orcamento->condicoesPagamento->tipo_pagamento); $tipoPagamentoExibicao = $tipoPagamento === 'À Vista' ? 'À Vista' : (ctype_digit($tipoPagamento) && (int) $tipoPagamento >= 2 && (int) $tipoPagamento <= 12 ? $tipoPagamento . 'x Sem Juros' : $tipoPagamento); @endphp {{ __('orcamento.portal_type') }}: {{ $tipoPagamentoExibicao }}
@endif @if($orcamento->condicoesPagamento->data_vencimento)
{{ __('orcamento.portal_due_date') }}: {{ $orcamento->condicoesPagamento->data_vencimento->format('d/m/Y') }}
@endif @if($orcamento->condicoesPagamento->valor_entrada && $orcamento->condicoesPagamento->valor_entrada > 0)
Entrada: {{ $orcamento->condicoesPagamento->valor_entrada_formatado_exibicao ?? \App\Helpers\MoneyHelper::formatarPorMoeda($orcamento->condicoesPagamento->valor_entrada, $moedaSelecionada) }}
@endif
@if($observacoesPagamento !== '')
{{ __('orcamento.portal_observations') }}:

{{ $observacoesPagamento }}

@endif @if($parcelasVisualizacao->isNotEmpty())
{{ __('orcamento.portal_installments_registered') }}:
@foreach($parcelasVisualizacao->sortBy('numero_parcela') as $parcela)
@if($parcela->numero_parcela == 0) Entrada: @else Parcela {{ $parcela->numero_parcela }}: @endif {{ $parcela->valor_formatado_exibicao ?? \App\Helpers\MoneyHelper::formatarPorMoeda($parcela->valor, $moedaSelecionada) }}
{{ __('orcamento.portal_due_date') }}: {{ $parcela->data_vencimento->format('d/m/Y') }}
@endforeach
@endif
@else

Nenhuma informação adicional cadastrada para este orçamento.

@endif