init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -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));
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers\Impressao\Manutencao;
use App\Http\Controllers\Controller;
use App\Services\Manutencao\RelatorioSolicitacoesService;
use App\Utils\Exports\Pdf1;
class RelatorioSolicitacoesController extends Controller
{
private const TITLE = 'RELATÓRIO DE SOLICITAÇÃO DE MANUTENÇÃO';
private const TEMPLATE = 'manutencao.relatorio-solicitacao';
public static function getTemplate()
{
return [
'solicitacoes' => RelatorioSolicitacoesService::index(),
'params' => request()->all(),
];
}
public function __invoke()
{
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate(), 'landscape');
}
}

View File

@@ -0,0 +1,151 @@
<?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 SolicitacaoController extends Controller
{
private const TITLE = 'SOLICITAÇÃO DE MANUTENÇÃO';
private const TEMPLATE = 'manutencao.solicitacao';
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')
->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));
}
}