This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\Manutencao;
|
||||
|
||||
use App\Enums\Manutencao\StatusTipo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Material\Material as MaterialModel;
|
||||
use App\Models\Manutencao\Solicitacao;
|
||||
use App\Models\Manutencao\SolicitacaoItensAlmoxarifado;
|
||||
use App\Models\Manutencao\SolicitacaoMensagem;
|
||||
use App\Models\Manutencao\SolicitacaoResposta;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class GerenciamentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'SOLICITAÇÃO DE MANUTENÇÃO';
|
||||
private const TEMPLATE = 'manutencao.gerenciamento';
|
||||
|
||||
public static function getTemplate($id)
|
||||
{
|
||||
|
||||
$solicitacao = Solicitacao::findOrFail($id);
|
||||
|
||||
$causasProvaveis = $solicitacao->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')
|
||||
->leftJoin('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'unidade_executante.infraestrutura_id')
|
||||
->leftJoin('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->where('prestador.id', $solicitacao->prestador_id)
|
||||
->select('unidade.nome_fantasia')
|
||||
->get();
|
||||
|
||||
if ($prestador->isEmpty() || $prestador[0]->nome_fantasia === null) {
|
||||
|
||||
$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_fornecedor as fornecedor', 'fornecedor.id', 'unidade_executante.fornecedor_id')
|
||||
->where('prestador.id', $solicitacao->prestador_id)
|
||||
->select('fornecedor.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,
|
||||
],
|
||||
'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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user