causaProvavel->map(function ($causaProvavel) { return $causaProvavel->causaProvavel ? $causaProvavel->causaProvavel->nome : null; })->filter(); $prestador = DB::table('cadastro_servico_manutencao_prestador_fornecedor as prestador') ->join('cadastro_unidade_executante_manutencao as unidade_executante', 'unidade_executante.id', 'prestador.unidade_executante_manutencao_id') ->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'unidade_executante.infraestrutura_id') ->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id') ->where('prestador.id', $solicitacao->prestador_id) ->select('unidade.nome_fantasia') ->get(); $mensagens = SolicitacaoMensagem::where('solicitacao_id', $solicitacao->id) ->orderBy('id', 'desc') ->get(); $resposta = SolicitacaoResposta::where('solicitacao_id', $solicitacao->id) ->orderBy('id', 'desc') ->get(); $mensagens = $mensagens->map(function ($mensagem, $key) use ($resposta) { return [ 'resposta' => isset($resposta[$key]) ? [ 'mensagem' => $resposta[$key]->mensagem ?? null, 'data' => $resposta[$key]->created_at->format('d/m/Y') ?? null, 'hora' => $resposta[$key]->created_at->format('H:i') ?? null, 'nome_usuario' => $resposta[$key]->usuario->cidadao->nome ?? null, 'nome_unidade' => $resposta[$key]->infraestrutura->unidade->nome_fantasia ?? null, ] : null, 'mensagem' => [ 'mensagem' => $mensagem->mensagem, 'data' => $mensagem->created_at->format('d/m/Y'), 'hora' => $mensagem->created_at->format('H:i'), 'is_respondida' => $mensagem->is_respondida ?? FALSE, 'resposta' => $mensagem->is_respondida, 'nome_usuario' => $mensagem->usuario->cidadao->nome, 'nome_unidade' => $mensagem->infraestrutura->unidade->nome_fantasia, ], ]; }); $itensAlmoxarifado = SolicitacaoItensAlmoxarifado::where('solicitacao_id', $solicitacao->id) ->get(); if ($itensAlmoxarifado->isNotEmpty()) { $itensAlmoxarifado = $itensAlmoxarifado->map(function ($item) { $descricao = MaterialModel::find($item->material_id)->descricao; return [ 'item' => $descricao, 'quantidade' => $item->quantidade, ]; }); } else { $itensAlmoxarifado = collect([]); } $statusAberto = DB::table('manutencao_solicitacao_status_historico as historico') ->join('manutencao_parametrizacao_status as status', 'status.id', 'historico.status_id') ->where('historico.solicitacao_id', $solicitacao->id) ->where('status.tipo_id', StatusTipo::EM_ABERTO) ->select( DB::raw('"Assinatura Solicitante" as assinatura'), DB::raw('DATE_FORMAT(historico.created_at, "%d/%m/%Y") as data') ) ->orderBy('historico.created_at', 'asc') ->first(); $statusEmAtendimento = DB::table('manutencao_solicitacao_status_historico as historico') ->join('manutencao_parametrizacao_status as status', 'status.id', 'historico.status_id') ->where('historico.solicitacao_id', $solicitacao->id) ->where('status.tipo_id', StatusTipo::EM_ATENDIMENTO) ->select( DB::raw('"Assinatura Prestador" as assinatura'), DB::raw('DATE_FORMAT(historico.created_at, "%d/%m/%Y") as data') ) ->orderBy('historico.created_at', 'asc') ->first(); $resultadoImpressao = collect([]); if ($statusAberto) { $resultadoImpressao->push($statusAberto); } if ($statusEmAtendimento) { $resultadoImpressao->push($statusEmAtendimento); } $data = [ 'solicitou' => Str::ucfirst($solicitacao->created_at->translatedFormat('l, d \de F \de Y, \à\s H:i:s')), 'solicitante' =>[ 'usuario' => $solicitacao->createdLotacao->usuario->cidadao->nome, 'unidade' => $solicitacao->infraestruturaSolicitante->unidade->nome_fantasia, 'infraestrutura' => $solicitacao->infraestruturaSolicitante->nome, ], 'codigo' => $solicitacao->codigo, 'grupo' => $solicitacao->grupo->nome, 'subgrupo' => $solicitacao->subgrupo->nome, 'servico' => $solicitacao->servico->nome, 'causaProvavel' => $causasProvaveis->isNotEmpty() ? $causasProvaveis->sort()->values() : collect('-'), 'assunto' => $solicitacao->assunto ?? '-', 'detalhe' => $solicitacao->detalhe ?? '-', 'status' => $solicitacao->status->nome, 'comentarios' => $mensagens, 'custo' => isset($solicitacao->custo) ? 'R$ ' . number_format($solicitacao->custo, 2, ',', '.') : '-', 'agendamento' => !empty($solicitacao->data_agendamento) ? $solicitacao->data_agendamento->format('d/m/Y') : '-', 'numeroOs' => $solicitacao->os_prestador ?? '-', 'prestador' => $prestador->isNotEmpty() ? $prestador->first()->nome_fantasia : '-', 'itens_almoxarifado' => $itensAlmoxarifado->isNotEmpty() ? $itensAlmoxarifado : collect([]), 'linhasParaAssinatura' => $resultadoImpressao->isNotEmpty() ? $resultadoImpressao : collect([]), ]; return $data; } public function __invoke($id) { return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id)); } }