This commit is contained in:
876
api/app/Services/Manutencao/GerenciamentoService.php
Normal file
876
api/app/Services/Manutencao/GerenciamentoService.php
Normal file
@@ -0,0 +1,876 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Manutencao;
|
||||
|
||||
use App\Enums\Manutencao\StatusTipo as StatusEnum;
|
||||
use App\Models\Cadastro\Material\Material as MaterialModel;
|
||||
use App\Models\Cadastro\ServicoManutencao;
|
||||
use App\Models\Cadastro\ServicoManutencaoCausasProvaveis;
|
||||
use App\Models\Cadastro\ServicoManutencaoPrestadorFornecedor;
|
||||
use App\Models\Cadastro\UnidadeExecutanteManutencao;
|
||||
use App\Models\Manutencao\GerenciamentoMensagem;
|
||||
use App\Models\Manutencao\Solicitacao;
|
||||
use App\Models\Manutencao\SolicitacaoCausaProvavel;
|
||||
use App\Models\Manutencao\SolicitacaoItensAlmoxarifado;
|
||||
use App\Models\Manutencao\SolicitacaoMensagem;
|
||||
use App\Models\Manutencao\SolicitacaoResposta;
|
||||
use App\Models\Manutencao\SolicitacaoStatusHistorico;
|
||||
use App\Models\Manutencao\Status;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class GerenciamentoService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$solicitacoes = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->leftJoin('cadastro_grupo as grupo', 'grupo.id', 'servico.grupo_id')
|
||||
->leftJoin('cadastro_subgrupo as subgrupo', 'subgrupo.id', 'solicitacao.subgrupo_id')
|
||||
->join('manutencao_parametrizacao_status', 'manutencao_parametrizacao_status.id', 'solicitacao.status_id')
|
||||
->join('manutencao_status_tipo as status', 'status.id', 'manutencao_parametrizacao_status.tipo_id')
|
||||
->leftJoin('manutencao_prioridade_tipo as prioridade', 'prioridade.id', 'servico.prioridade_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'solicitacao.usuario_solicitante_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
DATE_FORMAT(solicitacao.created_at, "%d/%m/%Y") as data,
|
||||
solicitacao.id as id,
|
||||
grupo.nome as grupo,
|
||||
subgrupo.nome as subgrupo,
|
||||
servico.nome as servico,
|
||||
status.nome as status,
|
||||
prioridade.nome as prioridade,
|
||||
solicitacao.codigo as codigo,
|
||||
cidadao.nome as usuario_solicitante,
|
||||
solicitacao.assunto as assunto,
|
||||
status.id as status_id,
|
||||
(
|
||||
SELECT CASE
|
||||
WHEN COUNT(*) > 1 AND (
|
||||
SELECT status.nome
|
||||
FROM manutencao_solicitacao_status_historico as status_historico
|
||||
JOIN manutencao_status_tipo as status ON status.id = status_historico.status_id
|
||||
WHERE status_historico.solicitacao_id = solicitacao.id
|
||||
ORDER BY status_historico.created_at DESC
|
||||
LIMIT 1
|
||||
) != "Cancelado"
|
||||
AND solicitacao.pendente_finalizacao != true
|
||||
THEN true
|
||||
ELSE false
|
||||
END
|
||||
FROM manutencao_solicitacao_status_historico as status_historico
|
||||
WHERE status_historico.solicitacao_id = solicitacao.id
|
||||
) as allow_cancel,
|
||||
solicitacao.pendente_finalizacao as pendente_finalizacao
|
||||
')
|
||||
->distinct();
|
||||
|
||||
$solicitacoes = self::getQueryParams($solicitacoes);
|
||||
$solicitacoes = $solicitacoes->get();
|
||||
|
||||
$mensagens = DB::table('manutencao_gerenciamento_mensagem')
|
||||
->leftJoin('manutencao_solicitacao_resposta', 'manutencao_gerenciamento_mensagem.id', 'manutencao_solicitacao_resposta.mensagem_id')
|
||||
->leftJoin('cadastro_usuario as usuario_mensagem', 'manutencao_gerenciamento_mensagem.usuario_id', 'usuario_mensagem.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao_mensagem', 'usuario_mensagem.cidadao_id', 'cidadao_mensagem.id')
|
||||
->leftJoin('cadastro_usuario as usuario_resposta', 'manutencao_solicitacao_resposta.usuario_id', 'usuario_resposta.id')
|
||||
->leftJoin('cadastro_cidadao as cidadao_resposta', 'usuario_resposta.cidadao_id', 'cidadao_resposta.id')
|
||||
->selectRaw('
|
||||
manutencao_gerenciamento_mensagem.solicitacao_id,
|
||||
manutencao_gerenciamento_mensagem.id as mensagem_id,
|
||||
manutencao_gerenciamento_mensagem.mensagem as mensagem_conteudo,
|
||||
manutencao_gerenciamento_mensagem.created_at as mensagem_data_envio,
|
||||
manutencao_solicitacao_resposta.id as resposta_id,
|
||||
manutencao_solicitacao_resposta.mensagem as resposta_conteudo,
|
||||
manutencao_solicitacao_resposta.created_at as resposta_data_envio,
|
||||
cidadao_resposta.nome as resposta_usuario_nome,
|
||||
cidadao_mensagem.nome as mensagem_usuario_nome
|
||||
')
|
||||
->get()
|
||||
->groupBy('solicitacao_id');
|
||||
|
||||
$solicitacoes->each(function ($item) use ($mensagens) {
|
||||
$item->mensagens_resposta = $mensagens->get($item->id, collect())
|
||||
->sortByDesc('mensagem_data_envio')
|
||||
->map(function ($mensagem) {
|
||||
return [
|
||||
'mensagem' => [
|
||||
'mensagem_id' => $mensagem->mensagem_id,
|
||||
'mensagem_conteudo' => $mensagem->mensagem_conteudo,
|
||||
'mensagem_data' => $mensagem->mensagem_data_envio
|
||||
? Carbon::parse($mensagem->mensagem_data_envio)->format('d/m/Y') : null,
|
||||
'mensagem_hora' => $mensagem->mensagem_data_envio
|
||||
? Carbon::parse($mensagem->mensagem_data_envio)->format('H:i') : null,
|
||||
'mensagem_usuario' => $mensagem->mensagem_usuario_nome,
|
||||
],
|
||||
'resposta' => $mensagem->resposta_id ? [
|
||||
'resposta_id' => $mensagem->resposta_id,
|
||||
'resposta_mensagem' => $mensagem->resposta_conteudo,
|
||||
'resposta_data' => $mensagem->resposta_data_envio
|
||||
? Carbon::parse($mensagem->resposta_data_envio)->format('d/m/Y') : null,
|
||||
'resposta_hora' => $mensagem->resposta_data_envio
|
||||
? Carbon::parse($mensagem->resposta_data_envio)->format('H:i') : null,
|
||||
'resposta_usuario' => $mensagem->resposta_usuario_nome,
|
||||
] : null,
|
||||
];
|
||||
})
|
||||
->values()
|
||||
->toArray();
|
||||
});
|
||||
|
||||
return $solicitacoes->toArray();
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$camposParaCarregar = collect();
|
||||
|
||||
$camposParaCarregar->push(
|
||||
'servico',
|
||||
'unidade',
|
||||
'infraestrutura',
|
||||
'grupo',
|
||||
'subgrupo',
|
||||
'status',
|
||||
'prioridade',
|
||||
);
|
||||
|
||||
return [
|
||||
'model' => self::getModelData(),
|
||||
'form' => self::camposFiltrados($camposParaCarregar),
|
||||
'additionals' => self::getAdditionalsData(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function camposFiltrados($campos)
|
||||
{
|
||||
$dados = collect();
|
||||
|
||||
if ($campos->contains('servico')) {
|
||||
$dados->put('servicos', self::getServicos());
|
||||
}
|
||||
|
||||
if ($campos->contains('unidade')) {
|
||||
$dados->put('unidades', self::getUnidadesSolicitantes());
|
||||
}
|
||||
|
||||
if ($campos->contains('infraestrutura')) {
|
||||
$dados->put('infraestruturas', self::getInfraestruturasSolicitantes());
|
||||
}
|
||||
|
||||
if ($campos->contains('grupo')) {
|
||||
$dados->put('grupos', self::getGrupos());
|
||||
}
|
||||
|
||||
if ($campos->contains('subgrupo')) {
|
||||
$dados->put('subgrupos', self::getSubgrupos());
|
||||
}
|
||||
|
||||
if ($campos->contains('status')) {
|
||||
$dados->put('status', self::getStatus());
|
||||
}
|
||||
|
||||
if ($campos->contains('prioridade')) {
|
||||
$dados->put('prioridades', self::getPrioridade());
|
||||
}
|
||||
|
||||
return $dados->all();
|
||||
}
|
||||
|
||||
private static function getModelData()
|
||||
{
|
||||
return [
|
||||
'periodo' => [
|
||||
'date' => [
|
||||
'start' => null,
|
||||
'end' => null
|
||||
]
|
||||
],
|
||||
'usuario_solicitante_id' => null,
|
||||
'unidades_solicitantes_id' => null,
|
||||
'infraestruturas_solicitantes_id' => null,
|
||||
'grupos_id' => null,
|
||||
'subgrupos_id' => null,
|
||||
'servicos_id' => null,
|
||||
'status_id' => null,
|
||||
'prioridade_id' => null,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
|
||||
return [
|
||||
'unidades_solicitantes' => self::getUnidadesSolicitantes(),
|
||||
'infraestruturas_solicitantes' => self::getInfraestruturasSolicitantes(),
|
||||
'grupos' => self::getGrupos(),
|
||||
'subgrupos' => self::getSubgrupos(),
|
||||
'servicos' => self::getServicos(),
|
||||
'status' => self::getStatus(),
|
||||
'prioridades' => self::getPrioridade(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getAdditionalsData()
|
||||
{
|
||||
return [
|
||||
'data_atual' => Carbon::today()->format('d/m/Y'),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getPeriodo()
|
||||
{
|
||||
|
||||
$periodo = request()->get('periodo') ?? null;
|
||||
|
||||
if ($periodo && $periodo['date']['start'] && $periodo['date']['end']) {
|
||||
|
||||
$dataInicial = Carbon::createFromFormat('Y-m-d', $periodo['date']['start'])->startOfDay();
|
||||
$dataFinal = Carbon::createFromFormat('Y-m-d', $periodo['date']['end'])->endOfDay();
|
||||
} else {
|
||||
|
||||
$dataInicial = Carbon::today()->startOfDay();
|
||||
$dataFinal = Carbon::today()->endOfDay();
|
||||
}
|
||||
|
||||
return [
|
||||
'data_inicial' => $dataInicial,
|
||||
'data_final' => $dataFinal,
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
public static function autocompleteUsuarioSolicitante()
|
||||
{
|
||||
$periodo = request()->get('periodo');
|
||||
$startInicioDia = Carbon::createFromFormat('Y-m-d', $periodo['start'])->startOfDay();
|
||||
$endFinalDIa = Carbon::createFromFormat('Y-m-d', $periodo['end'])->endOfDay();
|
||||
|
||||
$usuarios = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'solicitacao.usuario_solicitante_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->where('solicitacao.created_at', '>=', $startInicioDia)
|
||||
->where('solicitacao.created_at', '<=', $endFinalDIa)
|
||||
->distinct()
|
||||
->selectRaw('
|
||||
usuario.id as id,
|
||||
cidadao.nome as nome_usuario_solicitante
|
||||
');
|
||||
|
||||
return $usuarios;
|
||||
}
|
||||
|
||||
private static function getServicos()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$servicos = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
servico.id as id,
|
||||
servico.nome as nome_servico
|
||||
');
|
||||
|
||||
$servicos = self::getQueryParams($servicos);
|
||||
|
||||
$servicos = $servicos
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($servico) {
|
||||
return [
|
||||
'id' => $servico->id,
|
||||
'nome_servico' => $servico->nome_servico,
|
||||
];
|
||||
}, $servicos);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getUnidadesSolicitantes()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$unidades = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
unidade.id as id,
|
||||
unidade.nome_fantasia as nome_unidade_solicitante
|
||||
');
|
||||
|
||||
$unidades = self::getQueryParams($unidades);
|
||||
|
||||
$unidades = $unidades
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($unidade) {
|
||||
return [
|
||||
'id' => $unidade->id,
|
||||
'nome_unidade_solicitante' => $unidade->nome_unidade_solicitante,
|
||||
];
|
||||
}, $unidades);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getInfraestruturasSolicitantes()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$infraestruturas = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
infraestrutura.id as id,
|
||||
COALESCE(infraestrutura.nome, unidade.nome_fantasia) as nome_infraestrutura_solicitante
|
||||
');
|
||||
|
||||
$infraestruturas = self::getQueryParams($infraestruturas);
|
||||
|
||||
$infraestruturas = $infraestruturas
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($infraestrutura) {
|
||||
return [
|
||||
'id' => $infraestrutura->id,
|
||||
'nome_infraestrutura_solicitante' => $infraestrutura->nome_infraestrutura_solicitante,
|
||||
];
|
||||
}, $infraestruturas);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getGrupos()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$grupos = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->join('cadastro_grupo as grupo', 'grupo.id', 'servico.grupo_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
grupo.id as id,
|
||||
grupo.nome as nome_grupo
|
||||
');
|
||||
|
||||
$grupos = self::getQueryParams($grupos);
|
||||
|
||||
$grupos = $grupos
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($grupo) {
|
||||
return [
|
||||
'id' => $grupo->id,
|
||||
'nome_grupo' => $grupo->nome_grupo,
|
||||
];
|
||||
}, $grupos);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getSubgrupos()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$subgrupos = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_subgrupo as subgrupo', 'subgrupo.id', 'solicitacao.subgrupo_id')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
subgrupo.id as id,
|
||||
subgrupo.nome as nome_subgrupo
|
||||
');
|
||||
|
||||
$subgrupos = self::getQueryParams($subgrupos);
|
||||
|
||||
$subgrupos = $subgrupos
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($subgrupo) {
|
||||
return [
|
||||
'id' => $subgrupo->id,
|
||||
'nome_subgrupo' => $subgrupo->nome_subgrupo,
|
||||
];
|
||||
}, $subgrupos);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getStatus()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$status = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('manutencao_parametrizacao_status', 'manutencao_parametrizacao_status.id', 'solicitacao.status_id')
|
||||
->join('manutencao_status_tipo as status', 'status.id', 'manutencao_parametrizacao_status.tipo_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
manutencao_parametrizacao_status.id as id,
|
||||
manutencao_parametrizacao_status.nome as nome
|
||||
');
|
||||
|
||||
$status = self::getQueryParams($status);
|
||||
|
||||
$status = $status
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($status) {
|
||||
return [
|
||||
'id' => $status->id,
|
||||
'nome' => $status->nome,
|
||||
];
|
||||
}, $status);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getPrioridade()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$prioridades = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->join('manutencao_prioridade_tipo as prioridade', 'prioridade.id', 'servico.prioridade_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
prioridade.id as id,
|
||||
prioridade.nome as nome_prioridade
|
||||
');
|
||||
|
||||
$prioridades = self::getQueryParams($prioridades);
|
||||
|
||||
$prioridades = $prioridades
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($prioridade) {
|
||||
return [
|
||||
'id' => $prioridade->id,
|
||||
'nome_prioridade' => $prioridade->nome_prioridade,
|
||||
];
|
||||
}, $prioridades);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getQueryParams($query)
|
||||
{
|
||||
|
||||
$params = request()->all();
|
||||
|
||||
if (isset($params['usuario_solicitante_id']) && !empty($params['usuario_solicitante_id'])) {
|
||||
$query->where('solicitacao.usuario_solicitante_id', $params['usuario_solicitante_id'] ?? $params['usuario_solicitante_id']['id']);
|
||||
}
|
||||
|
||||
if (isset($params['servicos_id']) && is_array($params['servicos_id'])) {
|
||||
$query->whereIn('solicitacao.servico_id', $params['servicos_id']);
|
||||
}
|
||||
|
||||
if (isset($params['unidades_solicitantes_id']) && is_array($params['unidades_solicitantes_id'])) {
|
||||
$query->whereIn('infraestrutura.unidade_id', $params['unidades_solicitantes_id']);
|
||||
}
|
||||
|
||||
if (isset($params['infraestruturas_solicitantes_id']) && is_array($params['infraestruturas_solicitantes_id'])) {
|
||||
$query->whereIn('solicitacao.infraestrutura_solicitante_id', $params['infraestruturas_solicitantes_id']);
|
||||
}
|
||||
|
||||
if (isset($params['grupos_id']) && is_array($params['grupos_id'])) {
|
||||
$query->whereIn('servico.grupo_id', $params['grupos_id']);
|
||||
}
|
||||
|
||||
if (isset($params['subgrupos_id']) && is_array($params['subgrupos_id'])) {
|
||||
$query->whereIn('solicitacao.subgrupo_id', $params['subgrupos_id']);
|
||||
}
|
||||
|
||||
if (isset($params['status_id']) && is_array($params['status_id'])) {
|
||||
|
||||
$query->whereIn('solicitacao.status_id', $params['status_id']);
|
||||
}
|
||||
|
||||
if (isset($params['prioridade_id']) && is_array($params['prioridade_id'])) {
|
||||
$query->whereIn('servico.prioridade_id', $params['prioridade_id']);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
|
||||
$solicitacao = Solicitacao::findOrFail($id);
|
||||
|
||||
$statusParametrizacao = DB::table('manutencao_parametrizacao_status')
|
||||
->where('id', $solicitacao->status_id)
|
||||
->first();
|
||||
|
||||
$statusTipoId = DB::table('manutencao_status_tipo')
|
||||
->where('id', $statusParametrizacao->tipo_id)
|
||||
->select('id')
|
||||
->first();
|
||||
|
||||
$data = [
|
||||
'additionals' => [
|
||||
'is_custo' => ServicoManutencao::find($solicitacao->servico_id)->is_custo,
|
||||
'is_agendamento_programado' => ServicoManutencao::find($solicitacao->servico_id)->is_agendamento_programado,
|
||||
'is_identifica_os_prestador' => ServicoManutencao::find($solicitacao->servico_id)->is_identifica_os_prestador,
|
||||
'is_identifica_itens_almoxarifado' => ServicoManutencao::find($solicitacao->servico_id)->is_identifica_itens_almoxarifado,
|
||||
'data_atual' => Carbon::today()->format('d/m/Y'),
|
||||
],
|
||||
'model' => [
|
||||
'comentario_atual' => null,
|
||||
'prestador_id' => $solicitacao->prestador_id ?? null,
|
||||
'custo' => $solicitacao->custo ?? null,
|
||||
'data_agendamento' => $solicitacao->data_agendamento ? $solicitacao->data_agendamento->format('d/m/Y') : null,
|
||||
'os_prestador' => $solicitacao->os_prestador ?? null,
|
||||
'itens' => self::getItensAlmoxarifado($solicitacao->id) ?? [],
|
||||
'material' => null,
|
||||
'quantidade' => 1,
|
||||
'servico' => $solicitacao->servico->nome,
|
||||
],
|
||||
'form' => [
|
||||
'additionals' => [],
|
||||
'assunto' => $solicitacao->assunto,
|
||||
'data_solicitacao' => $solicitacao->created_at->format('d/m/Y'),
|
||||
'detalhe' => $solicitacao->detalhe,
|
||||
'dias_solicitacao_aberto' => $solicitacao->created_at->diffInDays(Carbon::now()),
|
||||
'grupo' => $solicitacao->servico->grupo->nome,
|
||||
'infraestrutura_solicitante' => $solicitacao->infraestruturaSolicitante->nome ??
|
||||
$solicitacao->infraestruturaSolicitante->unidade->nome_fantasia,
|
||||
'mensagens_reposposta' => self::getMensage($solicitacao),
|
||||
'prestadores' => self::getPrestadores($solicitacao['servico_id']),
|
||||
'servico' => $solicitacao->servico->nome,
|
||||
'subgrupo' => $solicitacao->subgrupo->nome,
|
||||
'unidade_solicitante' => $solicitacao->infraestruturaSolicitante->unidade->nome_fantasia,
|
||||
'usuario_solicitante' => $solicitacao->usuarioSolicitante->cidadao->nome,
|
||||
'pedente_finalizacao' => $solicitacao->pendente_finalizacao,
|
||||
'status_tipo_id' => $statusTipoId->id,$statusTipoId->id,
|
||||
'causas_provaveis' => self::getCausaProvavel($solicitacao->id) ?? null,
|
||||
],
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private static function getItensAlmoxarifado($id)
|
||||
{
|
||||
$itens = SolicitacaoItensAlmoxarifado::where('solicitacao_id', $id)->get();
|
||||
|
||||
$itens = $itens->map(function ($item) {
|
||||
$descricao = MaterialModel::find($item->material_id)->descricao;
|
||||
|
||||
return [
|
||||
'material' => [
|
||||
'id' => $item->material_id,
|
||||
'descricao_completa' => $descricao,
|
||||
'quantidade' => $item->quantidade,
|
||||
],
|
||||
'quantidade' => $item->quantidade,
|
||||
];
|
||||
});
|
||||
|
||||
return $itens ?? [];
|
||||
}
|
||||
|
||||
private static function getCausaProvavel($solicitacaoId)
|
||||
{
|
||||
$causasProvaveisIds = SolicitacaoCausaProvavel::where('solicitacao_id', $solicitacaoId)->get();
|
||||
|
||||
$causasProvaveis = [];
|
||||
|
||||
foreach ($causasProvaveisIds as $causaProvavel) {
|
||||
$causasProvaveis[] = ServicoManutencaoCausasProvaveis::find($causaProvavel->causa_provavel_id);
|
||||
}
|
||||
|
||||
return $causasProvaveis;
|
||||
}
|
||||
|
||||
private static function getPrestadores($servicoId)
|
||||
{
|
||||
$unidadeExecutanteManutencao = ServicoManutencaoPrestadorFornecedor::where('servico_manutencao_id', $servicoId)
|
||||
->join('cadastro_unidade_executante_manutencao', 'cadastro_unidade_executante_manutencao.id', '=', 'cadastro_servico_manutencao_prestador_fornecedor.unidade_executante_manutencao_id')
|
||||
->select('cadastro_servico_manutencao_prestador_fornecedor.id as prestador_id', 'cadastro_unidade_executante_manutencao.*')
|
||||
->get();
|
||||
|
||||
foreach ($unidadeExecutanteManutencao as $unidade) {
|
||||
if ($unidade->is_prestador) {
|
||||
$prestadoresFornecedores[] = (object) [
|
||||
'id' => $unidade->prestador_id,
|
||||
'nome_unidade' => $unidade->getFornecedor->nome_fantasia ?? null,
|
||||
];
|
||||
} else {
|
||||
if (!is_null($unidade->usuario_id)) {
|
||||
$unidadeModel = UnidadeExecutanteManutencao::where('id', $unidade->id)->first();
|
||||
$usuario = $unidadeModel->getUsuario;
|
||||
$nomeUsuario = ' - ' . $usuario->nome;
|
||||
} else {
|
||||
$nomeUsuario = null;
|
||||
}
|
||||
|
||||
if (is_null($unidade->getInfraestrutura) || is_null($unidade->getInfraestrutura->unidade)) {
|
||||
$sql = DB::table('cadastro_infraestrutura')
|
||||
->join('cadastro_unidade', 'cadastro_infraestrutura.unidade_id', '=', 'cadastro_unidade.id')
|
||||
->where('cadastro_infraestrutura.id', $unidade->infraestrutura_id)
|
||||
->select('cadastro_unidade.nome_fantasia', 'cadastro_infraestrutura.id')
|
||||
->first();
|
||||
|
||||
$nome = $sql->nome_fantasia . $nomeUsuario;
|
||||
}
|
||||
|
||||
$nomeUnidade = $unidade->getInfraestrutura->unidade->nome_fantasia ?? null;
|
||||
|
||||
if ($nomeUnidade) {
|
||||
$nome = $nomeUnidade . $nomeUsuario;
|
||||
}
|
||||
|
||||
$prestadoresFornecedores[] = (object) [
|
||||
'id' => $unidade->prestador_id,
|
||||
'nome_unidade' => $nome,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
$prestadoresFornecedores = $prestadoresFornecedores ?? [];
|
||||
|
||||
usort($prestadoresFornecedores, function ($a, $b) {
|
||||
return $a->nome_unidade <=> $b->nome_unidade;
|
||||
});
|
||||
|
||||
return $prestadoresFornecedores;
|
||||
}
|
||||
|
||||
private static function getMensage($solicitacao)
|
||||
{
|
||||
$mensagens = SolicitacaoMensagem::where('solicitacao_id', $solicitacao->id)
|
||||
->orderBy('id', 'desc')
|
||||
->get();
|
||||
|
||||
$mensagens->each(function ($mensagem) {
|
||||
$mensagem->is_respondida = $mensagem->is_respondida ? 'Sim' : 'Não';
|
||||
});
|
||||
|
||||
$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,
|
||||
],
|
||||
];
|
||||
});
|
||||
|
||||
return $mensagens;
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
$solicitacao = Solicitacao::findOrFail($id);
|
||||
|
||||
if (request()->filled('acao')) {
|
||||
|
||||
switch (request('acao')) {
|
||||
case 'finalizar':
|
||||
|
||||
return self::finalizar($solicitacao);
|
||||
case 'mensagem':
|
||||
|
||||
return self::mensagem($solicitacao);
|
||||
default:
|
||||
|
||||
return self::updateSolicitacao($solicitacao);
|
||||
}
|
||||
} else {
|
||||
|
||||
return self::updateSolicitacao($solicitacao);
|
||||
}
|
||||
}
|
||||
|
||||
private static function finalizar($solicitacao)
|
||||
{
|
||||
$solicitacao->fill([
|
||||
'pendente_finalizacao' => true,
|
||||
'usuario_finalizador_id' => self::getCurrentLotacao()->usuario->id,
|
||||
'infraestrutura_finalizacao_id' => self::getCurrentLotacao()->infraestrutura->id,
|
||||
]);
|
||||
|
||||
$solicitacao->save();
|
||||
return $solicitacao;
|
||||
}
|
||||
|
||||
private static function mensagem($solicitacao)
|
||||
{
|
||||
$mensagem = new GerenciamentoMensagem();
|
||||
|
||||
$mensagem->fill([
|
||||
'solicitacao_id' => $solicitacao->id,
|
||||
'infraestrutura_id' => self::getCurrentCentroCusto()->infraestrutura->id,
|
||||
'usuario_id' => self::getCurrentLotacao()->usuario->id,
|
||||
'mensagem' => request('comentario_atual'),
|
||||
]);
|
||||
|
||||
$mensagem->save();
|
||||
|
||||
return $solicitacao;
|
||||
}
|
||||
|
||||
private static function updateSolicitacao($solicitacao)
|
||||
{
|
||||
$status = Status::where('id', $solicitacao->status_id)->firstOrFail();
|
||||
if ($status->tipo_id === StatusEnum::CANCELADO || $status->tipo_id === StatusEnum::FINALIZADO) return $solicitacao;
|
||||
|
||||
self::updateValidate();
|
||||
$data = request()->all();
|
||||
|
||||
if (isset($data['custo']) && $data['custo']) {
|
||||
$data['custo'] = str_replace('.', '', $data['custo']);
|
||||
$data['custo'] = str_replace(',', '.', $data['custo']);
|
||||
}
|
||||
|
||||
$solicitacao->fill([
|
||||
'prestador_id' => $data['prestador_id'],
|
||||
'custo' => $data['custo'] ?? null,
|
||||
'data_agendamento' => $data['data_agendamento_formatada'] ? Carbon::createFromFormat('d/m/Y', $data['data_agendamento_formatada'])->format('Y-m-d') : null,
|
||||
'os_prestador' => $data['os_prestador'],
|
||||
'usuario_atendente_id' => self::getCurrentLotacao()->usuario->id,
|
||||
'infraestrutura_atendente_id' => self::getCurrentLotacao()->infraestrutura->id,
|
||||
]);
|
||||
|
||||
$solicitacao->status_id = StatusEnum::EM_ATENDIMENTO;
|
||||
$solicitacao->save();
|
||||
|
||||
$solicitacao->refresh();
|
||||
|
||||
if ($data['comentario_atual']) {
|
||||
|
||||
$mensagem = new SolicitacaoMensagem();
|
||||
|
||||
$mensagem->fill([
|
||||
'solicitacao_id' => $solicitacao->id,
|
||||
'infraestrutura_id' => self::getCurrentCentroCusto()->infraestrutura->id,
|
||||
'usuario_id' => self::getCurrentLotacao()->usuario->id,
|
||||
'mensagem' => $data['comentario_atual'],
|
||||
]);
|
||||
|
||||
$mensagem->save();
|
||||
}
|
||||
|
||||
if (isset($data['itens']) && $data['itens']) {
|
||||
$solicitacao->itensAlmoxarifado()->delete();
|
||||
|
||||
foreach($data['itens'] as $item) {
|
||||
$itens = new SolicitacaoItensAlmoxarifado();
|
||||
|
||||
$itens->fill([
|
||||
'solicitacao_id' => $solicitacao->id,
|
||||
'material_id' => $item['material']['id'],
|
||||
'quantidade' => $item['quantidade'],
|
||||
]);
|
||||
|
||||
$itens->save();
|
||||
}
|
||||
}
|
||||
|
||||
$historico = new SolicitacaoStatusHistorico();
|
||||
|
||||
$historico->fill([
|
||||
'solicitacao_id' => $solicitacao->id,
|
||||
'status_id' => $solicitacao->status_id,
|
||||
'origem_id' => StatusEnum::EM_ATENDIMENTO,
|
||||
'usuario_id' => self::getCurrentLotacao()->usuario->id,
|
||||
'infraestrutura_id' => self::getCurrentLotacao()->infraestrutura->id,
|
||||
'mensagem' => $data['comentario_atual'] ?? null,
|
||||
'prestador_id' => $data['prestador_id'],
|
||||
'custo' => $data['custo'] ?? null,
|
||||
'data_agendamento' => $data['data_agendamento_formatada'] ? Carbon::createFromFormat('d/m/Y', $data['data_agendamento_formatada'])->format('Y-m-d') : null,
|
||||
'os_prestador' => $data['os_prestador'],
|
||||
'usuario_atendente_id' => self::getCurrentLotacao()->usuario->id,
|
||||
'infraestrutura_atendente_id' => self::getCurrentLotacao()->infraestrutura->id,
|
||||
]);
|
||||
|
||||
$historico->save();
|
||||
|
||||
return $solicitacao;
|
||||
}
|
||||
|
||||
private static function updateValidate()
|
||||
{
|
||||
$rule = [
|
||||
'comentario_atual' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:500',
|
||||
],
|
||||
'prestador_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists('cadastro_servico_manutencao_prestador_fornecedor', 'id'),
|
||||
],
|
||||
'data_agendamento_formatada' => [
|
||||
'nullable',
|
||||
'date_format:d/m/Y',
|
||||
],
|
||||
'os_prestador' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:10'
|
||||
],
|
||||
'custo' => [
|
||||
'nullable',
|
||||
'string',
|
||||
],
|
||||
];
|
||||
|
||||
request()->validate($rule);
|
||||
}
|
||||
}
|
||||
228
api/app/Services/Manutencao/ParametrizacaoService.php
Normal file
228
api/app/Services/Manutencao/ParametrizacaoService.php
Normal file
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Manutencao;
|
||||
|
||||
use App\Models\Manutencao\Prioridade;
|
||||
use App\Models\Manutencao\PrioridadeTipo;
|
||||
use App\Models\Manutencao\Sla;
|
||||
use App\Models\Manutencao\Status;
|
||||
use App\Models\Manutencao\StatusTipo;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
use App\Models\Cadastro\ServicoManutencao;
|
||||
use App\Models\Manutencao\SolicitacaoStatusHistorico;
|
||||
|
||||
class ParametrizacaoService extends Service
|
||||
{
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
|
||||
return [
|
||||
'status_tipo' => StatusTipo::all(),
|
||||
'prioridade_tipo' => PrioridadeTipo::all(),
|
||||
'prioridades' => Prioridade::select('id', 'nome')->get(),
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
private static function getModelData()
|
||||
{
|
||||
return [
|
||||
'status' => Status::all()->map(fn ($status) => [
|
||||
'id' => $status->id,
|
||||
'tipo_status_id' => $status->tipo_id,
|
||||
'tipo_status_nome' => $status->statusTipo->nome,
|
||||
'nome_status' => $status->nome,
|
||||
'allow_destroy' => SolicitacaoStatusHistorico::where('status_id', $status->id)->exists(),
|
||||
]),
|
||||
'prioridade' => Prioridade::all()->map(fn ($prioridade) => [
|
||||
'id' => $prioridade->id,
|
||||
'tipo_prioridade_id' => $prioridade->tipo_id,
|
||||
'tipo_prioridade_nome' => $prioridade->prioridadeTipo->nome,
|
||||
'nome_prioridade' => $prioridade->nome,
|
||||
'allow_destroy' => ServicoManutencao::where('prioridade_id', $prioridade->id)->exists(),
|
||||
]),
|
||||
'sla' => Sla::all()->map(fn ($sla) => [
|
||||
'id' => $sla->id,
|
||||
'prioridade_id' => $sla->prioridade_id,
|
||||
'prioridade_nome' => $sla->prioridade->nome,
|
||||
'tempo_de_atendimento' => $sla->tempo_atendimento,
|
||||
'allow_destroy' => TRUE,
|
||||
]),
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$status = collect(request()->status);
|
||||
$prioridade = collect(request()->prioridade);
|
||||
$sla = collect(request()->sla);
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
|
||||
$statusParams = self::saveStatus($status);
|
||||
$slaParams = self::saveSla($sla);
|
||||
$prioridadeParams = self::savePrioridade($prioridade);
|
||||
|
||||
DB::commit();
|
||||
|
||||
return [
|
||||
'status' => $statusParams,
|
||||
'prioridade' => $prioridadeParams,
|
||||
'sla' => $slaParams,
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
private static function saveStatus($status)
|
||||
{
|
||||
$statusIds = $status->pluck('id');
|
||||
|
||||
$status->each(function ($status) {
|
||||
Status::updateOrCreate(
|
||||
[
|
||||
'id' => $status['id'],
|
||||
],
|
||||
[
|
||||
'tipo_id' => $status['tipo_status_id'],
|
||||
'nome' => $status['nome_status'],
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
Status::whereNotIn('id', $statusIds)->delete();
|
||||
|
||||
return $status->pluck('id');
|
||||
}
|
||||
|
||||
private static function savePrioridade($prioridade)
|
||||
{
|
||||
$prioridadeIds = $prioridade->pluck('id');
|
||||
|
||||
$prioridade->each(function ($prioridade) {
|
||||
Prioridade::updateOrCreate(
|
||||
[
|
||||
'id' => $prioridade['id'],
|
||||
],
|
||||
[
|
||||
'tipo_id' => $prioridade['tipo_prioridade_id'],
|
||||
'nome' => $prioridade['nome_prioridade'],
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
Prioridade::whereNotIn('id', $prioridadeIds)->delete();
|
||||
|
||||
return $prioridade->pluck('id');
|
||||
}
|
||||
|
||||
private static function saveSla($sla)
|
||||
{
|
||||
$slaIds = $sla->pluck('id');
|
||||
|
||||
$sla->each(function ($sla) {
|
||||
Sla::updateOrCreate(
|
||||
[
|
||||
'id' => $sla['id'],
|
||||
],
|
||||
[
|
||||
'prioridade_id' => $sla['prioridade_id'],
|
||||
'tempo_atendimento' => $sla['tempo_de_atendimento'],
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
Sla::whereNotIn('id', $slaIds)->delete();
|
||||
|
||||
return $sla->pluck('id');
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
|
||||
self::getStatusValidations();
|
||||
self::getSlaValidations();
|
||||
self::getPrioridadeValidations();
|
||||
}
|
||||
|
||||
private static function getStatusValidations()
|
||||
{
|
||||
|
||||
request()->validate([
|
||||
'status' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'status.*.tipo_status_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(StatusTipo::class, 'id'),
|
||||
],
|
||||
'status.*.nome_status' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:100',
|
||||
'min:3',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
private static function getSlaValidations()
|
||||
{
|
||||
request()->validate([
|
||||
'sla' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'sla.*.prioridade_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(Prioridade::class, 'id'),
|
||||
],
|
||||
'sla.*.tempo_de_atendimento' => [
|
||||
'required',
|
||||
'string',
|
||||
'min:5',
|
||||
'max:6',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
private static function getPrioridadeValidations()
|
||||
{
|
||||
request()->validate([
|
||||
'prioridade' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'prioridade.*.tipo_prioridade_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(PrioridadeTipo::class, 'id'),
|
||||
],
|
||||
'prioridade.*.nome_prioridade' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:100',
|
||||
'min:3',
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
537
api/app/Services/Manutencao/RelatorioSolicitacoesService.php
Normal file
537
api/app/Services/Manutencao/RelatorioSolicitacoesService.php
Normal file
@@ -0,0 +1,537 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Manutencao;
|
||||
|
||||
use App\Enums\Manutencao\StatusTipo;
|
||||
use App\Models\Cadastro\ServicoManutencaoCausasProvaveis;
|
||||
use App\Models\Manutencao\Solicitacao;
|
||||
use App\Models\Manutencao\SolicitacaoCausaProvavel;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioSolicitacoesService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$solicitacoes = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->leftJoin('cadastro_grupo as grupo', 'grupo.id', 'servico.grupo_id')
|
||||
->leftJoin('cadastro_subgrupo as subgrupo', 'subgrupo.id', 'solicitacao.subgrupo_id')
|
||||
->leftJoin('manutencao_parametrizacao_status as parametrizacao_status', 'parametrizacao_status.id', 'solicitacao.status_id')
|
||||
->leftJoin('manutencao_status_tipo as status', 'status.id', 'parametrizacao_status.tipo_id')
|
||||
->leftJoin('manutencao_prioridade_tipo as prioridade', 'prioridade.id', 'servico.prioridade_id')
|
||||
->leftJoin('cadastro_infraestrutura as infraestrutura_executante', 'infraestrutura_executante.id', 'solicitacao.prestador_id')
|
||||
->leftJoin('cadastro_unidade as unidade_executante', 'unidade_executante.id', 'infraestrutura_executante.unidade_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'solicitacao.usuario_solicitante_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->select(
|
||||
DB::raw('COALESCE((
|
||||
SELECT DATE_FORMAT(status_historico_reaberto.created_at, "%d/%m/%Y")
|
||||
FROM manutencao_solicitacao_status_historico as status_historico_reaberto
|
||||
JOIN manutencao_parametrizacao_status as parametrizacao_status_reaberto
|
||||
ON parametrizacao_status_reaberto.id = status_historico_reaberto.status_id
|
||||
JOIN manutencao_status_tipo as status_tipo_reaberto
|
||||
ON status_tipo_reaberto.id = parametrizacao_status_reaberto.tipo_id
|
||||
WHERE status_tipo_reaberto.id = ' . StatusTipo::REABERTO . '
|
||||
AND status_historico_reaberto.solicitacao_id = solicitacao.id
|
||||
LIMIT 1
|
||||
), DATE_FORMAT(solicitacao.created_at, "%d/%m/%Y")) as data_abertura'),
|
||||
DB::raw('COALESCE((
|
||||
SELECT DATE_FORMAT(MAX(status_historico.created_at), "%d/%m/%Y")
|
||||
FROM manutencao_solicitacao_status_historico as status_historico
|
||||
JOIN manutencao_parametrizacao_status as parametrizacao_status
|
||||
ON parametrizacao_status.id = status_historico.status_id
|
||||
JOIN manutencao_status_tipo as status_tipo
|
||||
ON status_tipo.id = parametrizacao_status.tipo_id
|
||||
WHERE status_tipo.id = ' . StatusTipo::FINALIZADO . '
|
||||
AND status_historico.solicitacao_id = solicitacao.id
|
||||
LIMIT 1
|
||||
), "NÃO FINALIZADO") as data_finalizacao'),
|
||||
'prioridade.nome as prioridade',
|
||||
DB::raw('COALESCE((
|
||||
SELECT CONCAT(DATEDIFF(
|
||||
(SELECT MAX(status_historico.created_at)
|
||||
FROM manutencao_solicitacao_status_historico as status_historico
|
||||
JOIN manutencao_parametrizacao_status as parametrizacao_status
|
||||
ON parametrizacao_status.id = status_historico.status_id
|
||||
JOIN manutencao_status_tipo as status_tipo
|
||||
ON status_tipo.id = parametrizacao_status.tipo_id
|
||||
WHERE status_tipo.id = ' . StatusTipo::FINALIZADO . '
|
||||
AND status_historico.solicitacao_id = solicitacao.id
|
||||
),
|
||||
solicitacao.created_at
|
||||
), " DIAS")
|
||||
), CONCAT(DATEDIFF(CURDATE(), solicitacao.created_at), " DIAS")) as dias_abertura'),
|
||||
'parametrizacao_status.nome as status',
|
||||
'cidadao.nome as usuario_solicitante',
|
||||
'unidade.nome_fantasia as unidade',
|
||||
'grupo.nome as grupo',
|
||||
'solicitacao.codigo as codigo',
|
||||
'servico.nome as servico',
|
||||
'solicitacao.id as id',
|
||||
'status.id as status_id',
|
||||
'solicitacao.prestador_id as prestador_id',
|
||||
DB::raw('COALESCE(unidade_executante.nome_fantasia, "-") as unidade_executante'),
|
||||
)
|
||||
->distinct();
|
||||
|
||||
$solicitacoes = self::getQueryParams($solicitacoes);
|
||||
$solicitacoes = $solicitacoes
|
||||
->orderBy('solicitacao.created_at', 'asc')
|
||||
->get();
|
||||
|
||||
$totalGeral = $solicitacoes->count();
|
||||
|
||||
$abertoCount = $solicitacoes
|
||||
->where('status_id', StatusTipo::EM_ABERTO)
|
||||
->count();
|
||||
|
||||
$emAtendimentoCount = $solicitacoes
|
||||
->where('status_id', StatusTipo::EM_ATENDIMENTO)
|
||||
->count();
|
||||
|
||||
$finalizadoCount = $solicitacoes
|
||||
->where('status_id', StatusTipo::FINALIZADO)
|
||||
->count();
|
||||
|
||||
$reabertoCount = $solicitacoes
|
||||
->where('status_id', StatusTipo::REABERTO)
|
||||
->count();
|
||||
|
||||
$canceladoCount = $solicitacoes
|
||||
->where('status_id', StatusTipo::CANCELADO)
|
||||
->count();
|
||||
|
||||
$solicitacoes = collect($solicitacoes)->map(function ($solicitacao) {
|
||||
$causasProvaveisIds = SolicitacaoCausaProvavel::where('solicitacao_id', $solicitacao->id)->get();
|
||||
|
||||
$causasProvaveis = $causasProvaveisIds->map(function ($causaProvavel) {
|
||||
$causa = ServicoManutencaoCausasProvaveis::find($causaProvavel->causa_provavel_id);
|
||||
return $causa ? $causa->nome : null;
|
||||
})->filter();
|
||||
|
||||
$causasProvaveisNomes = $causasProvaveis->isNotEmpty()
|
||||
? $causasProvaveis->implode(', ')
|
||||
: 'NÃO INFORMADO';
|
||||
|
||||
$prestador = DB::table('cadastro_servico_manutencao_prestador_fornecedor')
|
||||
->leftJoin('cadastro_unidade_executante_manutencao as unidade_executante_prestador', 'unidade_executante_prestador.id', 'cadastro_servico_manutencao_prestador_fornecedor.unidade_executante_manutencao_id')
|
||||
->leftJoin('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'unidade_executante_prestador.infraestrutura_id')
|
||||
->leftJoin('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->where('cadastro_servico_manutencao_prestador_fornecedor.id', $solicitacao->prestador_id)
|
||||
->select('cadastro_unidade.nome_fantasia as unidade_executante')
|
||||
->first();
|
||||
|
||||
return [
|
||||
'id' => $solicitacao->id,
|
||||
'codigo' => $solicitacao->codigo,
|
||||
'data_abertura' => $solicitacao->data_abertura,
|
||||
'data_finalizacao' => $solicitacao->data_finalizacao,
|
||||
'dias_abertura' => $solicitacao->dias_abertura,
|
||||
'grupo' => $solicitacao->grupo,
|
||||
'prioridade' => $solicitacao->prioridade,
|
||||
'servico' => $solicitacao->servico,
|
||||
'status' => $solicitacao->status,
|
||||
'unidade' => $solicitacao->unidade,
|
||||
'usuario_solicitante' => $solicitacao->usuario_solicitante,
|
||||
'causas_provaveis' => $causasProvaveisNomes,
|
||||
'unidade_executante' => $prestador ? $prestador->unidade_executante : '-',
|
||||
'custo' => "R$ " . number_format(Solicitacao::find($solicitacao->id)->custo, 2, ',', '.'),
|
||||
];
|
||||
});
|
||||
|
||||
return [
|
||||
'solicitacoes' => $solicitacoes,
|
||||
'total_geral' => $totalGeral,
|
||||
'solicitacoes_status' => [
|
||||
'aberto' => $abertoCount,
|
||||
'em_atendimento' => $emAtendimentoCount,
|
||||
'finalizado' => $finalizadoCount,
|
||||
'reaberto' => $reabertoCount,
|
||||
'cancelado' => $canceladoCount,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
private static function getCausaProvavel($solicitacaoId)
|
||||
{
|
||||
$causasProvaveisIds = SolicitacaoCausaProvavel::where('solicitacao_id', $solicitacaoId)->get();
|
||||
|
||||
$causasProvaveis = [];
|
||||
|
||||
foreach ($causasProvaveisIds as $causaProvavel) {
|
||||
$causasProvaveis[] = ServicoManutencaoCausasProvaveis::find($causaProvavel->causa_provavel_id);
|
||||
}
|
||||
|
||||
return $causasProvaveis;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'additionals' => [
|
||||
'data_atual' => Carbon::today()->format('d/m/Y'),
|
||||
],
|
||||
'form' => [
|
||||
'grupos' => self::getGrupos(),
|
||||
'infraestruturas' => self::getInfraestruturas(),
|
||||
'prioridades' => self::getPrioridade(),
|
||||
'servicos' => self::getServicos(),
|
||||
'status' => self::getStatus(),
|
||||
'subgrupos' => self::getSubgrupos(),
|
||||
'unidades' => self::getUnidades(),
|
||||
|
||||
],
|
||||
'model' => [
|
||||
'grupos_id' => null,
|
||||
'infraestruturas_id' => null,
|
||||
'periodo' => ['start' => null, 'end' => null],
|
||||
'prioridades_id' => null,
|
||||
'servicos_id' => null,
|
||||
'status_id' => null,
|
||||
'subgrupos_id' => null,
|
||||
'unidades_id' => null,
|
||||
'usuario_id' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
switch (request()->listar) {
|
||||
case 'unidades': {
|
||||
return ['unidades' => self::getUnidades()];
|
||||
}
|
||||
case 'infraestruturas': {
|
||||
return ['infraestruturas' => self::getInfraestruturas()];
|
||||
}
|
||||
case 'grupos': {
|
||||
return ['grupos' => self::getGrupos()];
|
||||
}
|
||||
case 'subgrupos': {
|
||||
return ['subgrupos' => self::getSubgrupos()];
|
||||
}
|
||||
case 'servicos': {
|
||||
return ['servicos' => self::getServicos()];
|
||||
}
|
||||
case 'status': {
|
||||
return ['status' => self::getStatus()];
|
||||
}
|
||||
case 'prioridades': {
|
||||
return ['prioridades' => self::getPrioridade()];
|
||||
}
|
||||
default: {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function getQueryParams($query)
|
||||
{
|
||||
$params = request()->all();
|
||||
|
||||
if (isset($params['usuario_solicitante_id']) && !empty($params['usuario_solicitante_id'])) {
|
||||
$query->where('solicitacao.usuario_solicitante_id', $params['usuario_solicitante_id'] ?? $params['usuario_solicitante_id']['id']);
|
||||
}
|
||||
|
||||
if (isset($params['servicos_id']) && is_array($params['servicos_id'])) {
|
||||
$query->whereIn('solicitacao.servico_id', $params['servicos_id']);
|
||||
}
|
||||
|
||||
if (isset($params['unidades_solicitantes_id']) && is_array($params['unidades_solicitantes_id'])) {
|
||||
$query->whereIn('infraestrutura.unidade_id', $params['unidades_solicitantes_id']);
|
||||
}
|
||||
|
||||
if (isset($params['infraestruturas_id']) && is_array($params['infraestruturas_id'])) {
|
||||
$query->whereIn('solicitacao.infraestrutura_solicitante_id', $params['infraestruturas_id']);
|
||||
}
|
||||
|
||||
if (isset($params['grupos_id']) && is_array($params['grupos_id'])) {
|
||||
$query->whereIn('servico.grupo_id', $params['grupos_id']);
|
||||
}
|
||||
|
||||
if (isset($params['subgrupos_id']) && is_array($params['subgrupos_id'])) {
|
||||
$query->whereIn('solicitacao.subgrupo_id', $params['subgrupos_id']);
|
||||
}
|
||||
|
||||
if (isset($params['status_id']) && is_array($params['status_id'])) {
|
||||
|
||||
$query->whereIn('solicitacao.status_id', $params['status_id']);
|
||||
}
|
||||
|
||||
if (isset($params['prioridade_id']) && is_array($params['prioridade_id'])) {
|
||||
$query->whereIn('servico.prioridade_id', $params['prioridade_id']);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public static function autocompleteUsuarioSolicitante()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$usuarios = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'solicitacao.usuario_solicitante_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->distinct()
|
||||
->selectRaw('
|
||||
usuario.id as id,
|
||||
cidadao.nome as nome_usuario_solicitante
|
||||
');
|
||||
|
||||
return $usuarios;
|
||||
}
|
||||
|
||||
private static function getPeriodo()
|
||||
{
|
||||
$periodo = request()->get('periodo') ?? null;
|
||||
|
||||
if ($periodo && $periodo['start'] && $periodo['end']) {
|
||||
|
||||
$dataInicial = Carbon::createFromFormat('d/m/Y', $periodo['start'])->startOfDay();
|
||||
$dataFinal = Carbon::createFromFormat('d/m/Y', $periodo['end'])->endOfDay();
|
||||
} else {
|
||||
|
||||
$dataInicial = Carbon::today()->startOfDay();
|
||||
$dataFinal = Carbon::today()->endOfDay();
|
||||
}
|
||||
|
||||
return [
|
||||
'data_inicial' => $dataInicial,
|
||||
'data_final' => $dataFinal,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getUnidades()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$unidades = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
unidade.id as id,
|
||||
unidade.nome_fantasia as nome_fantasia
|
||||
');
|
||||
|
||||
$unidades = self::getQueryParams($unidades);
|
||||
|
||||
$unidades = $unidades
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($unidade) {
|
||||
return [
|
||||
'id' => $unidade->id,
|
||||
'nome_fantasia' => $unidade->nome_fantasia,
|
||||
];
|
||||
}, $unidades);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getInfraestruturas()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$infraestruturas = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
infraestrutura.id as id,
|
||||
COALESCE(infraestrutura.nome, unidade.nome_fantasia) as nome
|
||||
');
|
||||
|
||||
$infraestruturas = self::getQueryParams($infraestruturas);
|
||||
|
||||
$infraestruturas = $infraestruturas
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($infraestrutura) {
|
||||
return [
|
||||
'id' => $infraestrutura->id,
|
||||
'nome' => $infraestrutura->nome,
|
||||
];
|
||||
}, $infraestruturas);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getGrupos()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$grupos = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->join('cadastro_grupo as grupo', 'grupo.id', 'servico.grupo_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
grupo.id as id,
|
||||
grupo.nome as nome
|
||||
');
|
||||
|
||||
$grupos = self::getQueryParams($grupos);
|
||||
|
||||
$grupos = $grupos
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($grupo) {
|
||||
return [
|
||||
'id' => $grupo->id,
|
||||
'nome' => $grupo->nome,
|
||||
];
|
||||
}, $grupos);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getSubgrupos()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$subgrupos = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_subgrupo as subgrupo', 'subgrupo.id', 'solicitacao.subgrupo_id')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
subgrupo.id as id,
|
||||
subgrupo.nome as nome
|
||||
');
|
||||
|
||||
$subgrupos = self::getQueryParams($subgrupos);
|
||||
|
||||
$subgrupos = $subgrupos
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($subgrupo) {
|
||||
return [
|
||||
'id' => $subgrupo->id,
|
||||
'nome' => $subgrupo->nome,
|
||||
];
|
||||
}, $subgrupos);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getServicos()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$servicos = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
servico.id as id,
|
||||
servico.nome as nome
|
||||
');
|
||||
|
||||
$servicos = self::getQueryParams($servicos);
|
||||
|
||||
$servicos = $servicos
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($servico) {
|
||||
return [
|
||||
'id' => $servico->id,
|
||||
'nome' => $servico->nome,
|
||||
];
|
||||
}, $servicos);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getStatus()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$status = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('manutencao_parametrizacao_status', 'manutencao_parametrizacao_status.id', 'solicitacao.status_id')
|
||||
->join('manutencao_status_tipo as status', 'status.id', 'manutencao_parametrizacao_status.tipo_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
manutencao_parametrizacao_status.id as id,
|
||||
manutencao_parametrizacao_status.nome as nome
|
||||
');
|
||||
|
||||
$status = self::getQueryParams($status);
|
||||
|
||||
$status = $status
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($status) {
|
||||
return [
|
||||
'id' => $status->id,
|
||||
'nome' => $status->nome,
|
||||
];
|
||||
}, $status);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
private static function getPrioridade()
|
||||
{
|
||||
$periodo = self::getPeriodo();
|
||||
|
||||
$prioridades = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->join('manutencao_prioridade_tipo as prioridade', 'prioridade.id', 'servico.prioridade_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'solicitacao.infraestrutura_solicitante_id')
|
||||
->where('solicitacao.created_at', '>=', $periodo['data_inicial'])
|
||||
->where('solicitacao.created_at', '<=', $periodo['data_final'])
|
||||
->selectRaw('
|
||||
prioridade.id as id,
|
||||
prioridade.nome as nome
|
||||
');
|
||||
|
||||
$prioridades = self::getQueryParams($prioridades);
|
||||
|
||||
$prioridades = $prioridades
|
||||
->distinct()
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$form = array_map(function ($prioridade) {
|
||||
return [
|
||||
'id' => $prioridade->id,
|
||||
'nome' => $prioridade->nome,
|
||||
];
|
||||
}, $prioridades);
|
||||
|
||||
return $form;
|
||||
}
|
||||
}
|
||||
669
api/app/Services/Manutencao/SolicitacaoService.php
Normal file
669
api/app/Services/Manutencao/SolicitacaoService.php
Normal file
@@ -0,0 +1,669 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Manutencao;
|
||||
|
||||
use App\Enums\Cadastro\Grupo\GrupoTipo as GrupoEnum;
|
||||
use App\Enums\Manutencao\StatusOrigem as StatusOrigemEnum;
|
||||
use App\Enums\Manutencao\StatusTipo as StatusEnum;
|
||||
use App\Exceptions\Manutencao\CannotStoreSolicitacaoException;
|
||||
use App\Models\Cadastro\Grupo\Grupo;
|
||||
use App\Models\Cadastro\ServicoManutencao;
|
||||
use App\Models\Cadastro\ServicoManutencaoCausasProvaveis;
|
||||
use App\Models\Cadastro\Subgrupo\Subgrupo;
|
||||
use App\Models\Manutencao\Solicitacao;
|
||||
use App\Models\Manutencao\SolicitacaoCausaProvavel;
|
||||
use App\Models\Manutencao\SolicitacaoMensagem;
|
||||
use App\Models\Manutencao\SolicitacaoResposta;
|
||||
use App\Models\Manutencao\SolicitacaoStatusHistorico;
|
||||
use App\Models\Manutencao\Status;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use DB;
|
||||
use DateTimeImmutable;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class SolicitacaoService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
|
||||
$solicitacoes = DB::table('manutencao_solicitacao as solicitacao')
|
||||
->where('solicitacao.infraestrutura_solicitante_id', self::getCurrentLotacao()->infraestrutura->id)
|
||||
->where('solicitacao.status_id', '<>', StatusEnum::FINALIZADO)
|
||||
->join('cadastro_grupo as grupo', 'grupo.id', 'solicitacao.grupo_id')
|
||||
->join('cadastro_servico_manutencao as servico', 'servico.id', 'solicitacao.servico_id')
|
||||
->join('manutencao_parametrizacao_status as status', 'status.id', 'solicitacao.status_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'solicitacao.usuario_solicitante_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('manutencao_status_tipo as status_tipo', 'status_tipo.id', 'status.tipo_id')
|
||||
->leftJoin('manutencao_gerenciamento_mensagem as mensagem', 'mensagem.solicitacao_id', 'solicitacao.id')
|
||||
->leftJoin('manutencao_solicitacao_resposta as resposta', 'resposta.mensagem_id', 'mensagem.id')
|
||||
->select(
|
||||
'solicitacao.id',
|
||||
'solicitacao.codigo',
|
||||
DB::raw('DATE_FORMAT(solicitacao.created_at, "%d/%m/%Y") as data_solicitacao'),
|
||||
'grupo.nome as grupo',
|
||||
'servico.nome as servico',
|
||||
'solicitacao.assunto',
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN solicitacao.pendente_finalizacao = TRUE THEN CONCAT(status.nome, ' - FINALIZAÇÃO PEDENTE')
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM manutencao_gerenciamento_mensagem
|
||||
WHERE manutencao_gerenciamento_mensagem.solicitacao_id = solicitacao.id
|
||||
AND manutencao_gerenciamento_mensagem.is_respondida = FALSE
|
||||
) THEN CONCAT(status.nome, ' - MENSAGEM PENDENTE')
|
||||
ELSE status.nome
|
||||
END as status
|
||||
"),
|
||||
'cidadao.nome as usuario_solicitante',
|
||||
'status_tipo.id as tipo_status',
|
||||
DB::raw("
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM manutencao_gerenciamento_mensagem
|
||||
WHERE manutencao_gerenciamento_mensagem.solicitacao_id = solicitacao.id
|
||||
AND manutencao_gerenciamento_mensagem.is_respondida = FALSE
|
||||
) > 0 AS mensagem_pendente
|
||||
"),
|
||||
DB::raw("
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM manutencao_parametrizacao_status
|
||||
WHERE manutencao_parametrizacao_status.tipo_id = " . StatusEnum::EM_ABERTO . "
|
||||
AND solicitacao.status_id = manutencao_parametrizacao_status.id
|
||||
) AS allow_edit
|
||||
"),
|
||||
DB::raw("
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM manutencao_parametrizacao_status
|
||||
WHERE manutencao_parametrizacao_status.tipo_id = " . StatusEnum::EM_ATENDIMENTO . "
|
||||
AND solicitacao.status_id = manutencao_parametrizacao_status.id
|
||||
) AS allow_cancel
|
||||
"),
|
||||
DB::raw("
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM manutencao_parametrizacao_status
|
||||
WHERE (manutencao_parametrizacao_status.tipo_id = " . StatusEnum::FINALIZADO . "
|
||||
OR manutencao_parametrizacao_status.tipo_id = " . StatusEnum::CANCELADO . ")
|
||||
AND solicitacao.status_id = manutencao_parametrizacao_status.id
|
||||
) AS allow_reopen
|
||||
"),
|
||||
DB::raw("
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM manutencao_parametrizacao_status
|
||||
WHERE manutencao_parametrizacao_status.tipo_id = " . StatusEnum::EM_ABERTO . "
|
||||
AND solicitacao.status_id = manutencao_parametrizacao_status.id
|
||||
) AS allow_destroy
|
||||
"),
|
||||
'solicitacao.grupo_id',
|
||||
'solicitacao.infraestrutura_solicitante_id',
|
||||
'solicitacao.usuario_solicitante_id',
|
||||
'solicitacao.pendente_finalizacao',
|
||||
'mensagem.id as mensagem_id',
|
||||
'mensagem.mensagem as mensagem_conteudo',
|
||||
'mensagem.created_at as mensagem_data_envio',
|
||||
'resposta.id as resposta_id',
|
||||
'resposta.mensagem as resposta_conteudo',
|
||||
'resposta.created_at as resposta_data_envio',
|
||||
'cidadao.nome as usuario_nome_mensagem',
|
||||
DB::raw('
|
||||
(
|
||||
SELECT nome
|
||||
FROM cadastro_cidadao
|
||||
WHERE id = (SELECT cidadao_id FROM cadastro_usuario WHERE id = resposta.usuario_id)
|
||||
) as usuario_nome_resposta
|
||||
')
|
||||
)
|
||||
->orderBy('solicitacao.created_at', 'desc')
|
||||
->get();
|
||||
|
||||
$solicitacoes = $solicitacoes->groupBy('id')->map(function ($group) {
|
||||
$solicitacao = $group->first();
|
||||
$mensagens = collect();
|
||||
|
||||
$group->each(function ($item) use ($mensagens) {
|
||||
if ($item->mensagem_id) {
|
||||
$mensagens->push([
|
||||
'mensagem' => [
|
||||
'mensagem_id' => $item->mensagem_id,
|
||||
'mensagem_conteudo' => $item->mensagem_conteudo,
|
||||
'mensagem_data' => Carbon::parse($item->mensagem_data_envio)->format('d/m/Y'),
|
||||
'mensagem_hora' => Carbon::parse($item->mensagem_data_envio)->format('H:i'),
|
||||
'mensagem_usuario' => $item->usuario_nome_mensagem,
|
||||
],
|
||||
'resposta' => $item->resposta_id ? [
|
||||
'resposta_id' => $item->resposta_id,
|
||||
'resposta_mensagem' => $item->resposta_conteudo,
|
||||
'resposta_data' => Carbon::parse($item->resposta_data_envio)->format('d/m/Y'),
|
||||
'resposta_hora' => Carbon::parse($item->resposta_data_envio)->format('H:i'),
|
||||
'resposta_usuario' => $item->usuario_nome_resposta,
|
||||
] : null,
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
$solicitacao->mensagens_resposta = $mensagens->values();
|
||||
|
||||
return $solicitacao;
|
||||
})->values();
|
||||
|
||||
return $solicitacoes;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
|
||||
return [
|
||||
'model' => self::getModelData(),
|
||||
'form' => self::getFormData(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData()
|
||||
{
|
||||
|
||||
return [
|
||||
'infraestrutura_solicitante_id' => self::getCurrentLotacao()->infraestrutura->id,
|
||||
'usuario_solicitante' => [
|
||||
'id' => self::getCurrentLotacao()->usuario->id,
|
||||
'cidadao_nome' => self::getCurrentLotacao()->usuario->cidadao->nome,
|
||||
],
|
||||
'grupo_id' => null,
|
||||
'sub_grupo_id' => null,
|
||||
'servico_id' => null,
|
||||
'causa_provavel_id' => null,
|
||||
'causa_provavel_lista' => [],
|
||||
'assunto' => null,
|
||||
'detalhe' => null,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
|
||||
return [
|
||||
'unidade_solicitante' => self::getUnidadesSolicitantes(),
|
||||
'grupo' => Grupo::where('grupo_tipo_id', GrupoEnum::MANUTENCAO)
|
||||
->get(),
|
||||
'sub_grupo' => [],
|
||||
'servico' => [],
|
||||
'causa_provavel' => [],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getUnidadesSolicitantes()
|
||||
{
|
||||
|
||||
return DB::table('cadastro_unidade as unidade')
|
||||
->join(
|
||||
'cadastro_infraestrutura as infraestrutura',
|
||||
'infraestrutura.unidade_id',
|
||||
'unidade.id'
|
||||
)
|
||||
->whereNull('unidade.deleted_at')
|
||||
->orderBy('unidade.nome_fantasia')
|
||||
->selectRaw("
|
||||
infraestrutura.id,
|
||||
unidade.nome_fantasia
|
||||
")
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
|
||||
$params = request()->only('params');
|
||||
|
||||
switch (request()->listar) {
|
||||
|
||||
case 'subGrupo':
|
||||
|
||||
return self::getSubgrupos($params);
|
||||
case 'servico':
|
||||
|
||||
return self::getServicos($params);
|
||||
case 'causaProvavel':
|
||||
|
||||
return self::getCausasProvaveis($params);
|
||||
default:
|
||||
|
||||
$data = [];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static function getSubgrupos($params)
|
||||
{
|
||||
|
||||
return Subgrupo::where('grupo_id', $params)
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getServicos($params)
|
||||
{
|
||||
|
||||
return ServicoManutencao::where('sub_grupo_id', $params)
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getCausasProvaveis($params)
|
||||
{
|
||||
|
||||
return ServicoManutencaoCausasProvaveis::where('servico_manutencao_id', $params)
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
|
||||
self::validate();
|
||||
|
||||
$solicitacao = new Solicitacao();
|
||||
|
||||
$status_em_aberto_id = Status::where('tipo_id', StatusEnum::EM_ABERTO)
|
||||
->first()
|
||||
->id;
|
||||
|
||||
if (!$status_em_aberto_id) {
|
||||
|
||||
throw new CannotStoreSolicitacaoException();
|
||||
}
|
||||
|
||||
DB::transaction(function () use ($solicitacao, $status_em_aberto_id) {
|
||||
|
||||
$solicitacao->fill([
|
||||
'infraestrutura_solicitante_id' => request('infraestrutura_solicitante_id'),
|
||||
'usuario_solicitante_id' => request('usuario_solicitante_id'),
|
||||
'grupo_id' => request('grupo_id'),
|
||||
'subgrupo_id' => request('sub_grupo_id'),
|
||||
'assunto' => request('assunto') ?? null,
|
||||
'detalhe' => request('detalhe') ?? null,
|
||||
'servico_id' => request('servico_id') ?? null,
|
||||
'status_id' => $status_em_aberto_id,
|
||||
'codigo' => self::getNumeroSolicitacao(),
|
||||
]);
|
||||
|
||||
$solicitacao->save();
|
||||
|
||||
$solicitacaoStatusHistorico = new SolicitacaoStatusHistorico();
|
||||
|
||||
$solicitacaoStatusHistorico->fill([
|
||||
'solicitacao_id' => $solicitacao->id,
|
||||
'status_id' => $status_em_aberto_id,
|
||||
'origem_id' => StatusOrigemEnum::SOLICITANTE,
|
||||
'usuario_id' => request('usuario_solicitante_id'),
|
||||
'infraestrutura_id' => request('infraestrutura_solicitante_id'),
|
||||
'mensagem' => null,
|
||||
]);
|
||||
|
||||
$solicitacaoStatusHistorico->save();
|
||||
|
||||
collect(request()->causa_provavel_lista)->each(function ($causaProvavel) use ($solicitacao) {
|
||||
$solicitacao->causaProvavel()->create([
|
||||
'solicitacao_id' => $solicitacao->id,
|
||||
'causa_provavel_id' => $causaProvavel['id'],
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
return $solicitacao->refresh();
|
||||
}
|
||||
|
||||
public static function getNumeroSolicitacao()
|
||||
{
|
||||
$ultimoCodigoUtilizado = Solicitacao::orderBy('codigo', 'desc')
|
||||
->first()
|
||||
->codigo ?? 0;
|
||||
|
||||
return $ultimoCodigoUtilizado + 1;
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
|
||||
$solicitacao = Solicitacao::findOrFail($id);
|
||||
|
||||
$usuarioSolicitante = DB::table('cadastro_usuario as usuario')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->where('usuario.id', $solicitacao->usuario_solicitante_id)
|
||||
->select('usuario.id', 'cidadao.nome as cidadao_nome')
|
||||
->first();
|
||||
|
||||
return [
|
||||
'model' => [
|
||||
'id' => $solicitacao->id,
|
||||
'infraestrutura_solicitante_id' => $solicitacao->infraestrutura_solicitante_id,
|
||||
'usuario_solicitante' => [
|
||||
'id' => $usuarioSolicitante->id,
|
||||
'cidadao_nome' => $usuarioSolicitante->cidadao_nome,
|
||||
],
|
||||
'grupo_id' => $solicitacao->grupo_id,
|
||||
'sub_grupo_id' => $solicitacao->subgrupo_id,
|
||||
'servico_id' => $solicitacao->servico_id,
|
||||
'causa_provavel_id' => null,
|
||||
'causa_provavel_lista' => $solicitacao->causaProvavel->map(function ($causaProvavel) {
|
||||
return [
|
||||
'id' => $causaProvavel->causa_provavel_id,
|
||||
'nome' => $causaProvavel->causaProvavel->nome,
|
||||
'observacao' => $causaProvavel->causaProvavel->observacao,
|
||||
];
|
||||
}),
|
||||
'assunto' => $solicitacao->assunto ?? null,
|
||||
'detalhe' => $solicitacao->detalhe ?? null,
|
||||
],
|
||||
'form' => [
|
||||
'unidade_solicitante' => self::getUnidadesSolicitantes(),
|
||||
'grupo' => Grupo::where('grupo_tipo_id', GrupoEnum::MANUTENCAO)
|
||||
->get(),
|
||||
'sub_grupo' => Subgrupo::where('grupo_id', $solicitacao->grupo_id)
|
||||
->get(),
|
||||
'servico' => ServicoManutencao::where('sub_grupo_id', $solicitacao->subgrupo_id)
|
||||
->get(),
|
||||
'causa_provavel' => ServicoManutencaoCausasProvaveis::where('servico_manutencao_id', $solicitacao->servico_id)
|
||||
->get(),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
|
||||
$solicitacao = Solicitacao::findOrFail($id);
|
||||
|
||||
if (request()->filled('acao')) {
|
||||
|
||||
switch (request('acao')) {
|
||||
|
||||
case 'cancelar':
|
||||
|
||||
return self::cancelar($solicitacao);
|
||||
case 'reabrir':
|
||||
|
||||
return self::reabrir($solicitacao);
|
||||
case 'finalizar':
|
||||
|
||||
return self::finalizar($solicitacao);
|
||||
case 'responder':
|
||||
|
||||
return self::responder($solicitacao);
|
||||
default:
|
||||
|
||||
return self::updateSolicitacao($solicitacao);
|
||||
}
|
||||
} else {
|
||||
|
||||
return self::updateSolicitacao($solicitacao);
|
||||
}
|
||||
}
|
||||
|
||||
private static function cancelar($solicitacao)
|
||||
{
|
||||
|
||||
self::validateCancelamento();
|
||||
|
||||
$status_cancelado_id = Status::where('tipo_id', StatusEnum::CANCELADO)
|
||||
->first()
|
||||
->id ?? null;
|
||||
|
||||
if (!$status_cancelado_id) {
|
||||
|
||||
throw new CannotStoreSolicitacaoException();
|
||||
}
|
||||
|
||||
$solicitacao->status_id = $status_cancelado_id;
|
||||
$solicitacao->save();
|
||||
|
||||
self::storeHistorico($solicitacao);
|
||||
|
||||
return $solicitacao->refresh();
|
||||
}
|
||||
|
||||
private static function reabrir($solicitacao)
|
||||
{
|
||||
|
||||
self::validateReabrir();
|
||||
|
||||
$status_em_atendimento_id = Status::where('tipo_id', StatusEnum::EM_ATENDIMENTO)
|
||||
->first()
|
||||
->id ?? null;
|
||||
|
||||
if (!$status_em_atendimento_id) {
|
||||
|
||||
throw new CannotStoreSolicitacaoException();
|
||||
}
|
||||
|
||||
$solicitacao->status_id = $status_em_atendimento_id;
|
||||
$solicitacao->save();
|
||||
|
||||
self::storeHistorico($solicitacao);
|
||||
|
||||
return $solicitacao->refresh();
|
||||
}
|
||||
|
||||
private static function finalizar($solicitacao)
|
||||
{
|
||||
|
||||
self::validateFInalizar();
|
||||
|
||||
$status_finalizado_id = Status::where('tipo_id', StatusEnum::FINALIZADO)
|
||||
->first()
|
||||
->id ?? null;
|
||||
|
||||
if (!$status_finalizado_id) {
|
||||
|
||||
throw new CannotStoreSolicitacaoException();
|
||||
}
|
||||
|
||||
$solicitacao->status_id = $status_finalizado_id;
|
||||
$solicitacao->pendente_finalizacao = false;
|
||||
$solicitacao->save();
|
||||
|
||||
self::storeHistorico($solicitacao);
|
||||
|
||||
return $solicitacao->refresh();
|
||||
}
|
||||
|
||||
private static function responder($solicitacao)
|
||||
{
|
||||
|
||||
self::validateResponder();
|
||||
|
||||
$mensagem = new SolicitacaoResposta();
|
||||
|
||||
$mensagem->fill([
|
||||
'solicitacao_id' => $solicitacao->id,
|
||||
'mensagem_id' => request('mensagem_id'),
|
||||
'infraestrutura_id' => self::getCurrentCentroCusto()->infraestrutura->id,
|
||||
'usuario_id' => self::getCurrentLotacao()->usuario->id,
|
||||
'mensagem' => request('resposta'),
|
||||
]);
|
||||
|
||||
$mensagem->save();
|
||||
|
||||
$solicitacaoMensagem = SolicitacaoMensagem::findOrFail(request('mensagem_id'));
|
||||
$solicitacaoMensagem->is_respondida = true;
|
||||
$solicitacaoMensagem->save();
|
||||
|
||||
self::storeHistorico($solicitacao);
|
||||
|
||||
return $solicitacao->refresh();
|
||||
}
|
||||
|
||||
|
||||
private static function updateSolicitacao($solicitacao)
|
||||
{
|
||||
|
||||
self::validate();
|
||||
|
||||
DB::transaction(function () use ($solicitacao) {
|
||||
|
||||
$solicitacao->fill([
|
||||
'infraestrutura_solicitante_id' => request('infraestrutura_solicitante_id'),
|
||||
'usuario_solicitante_id' => request('usuario_solicitante_id'),
|
||||
'grupo_id' => request('grupo_id'),
|
||||
'subgrupo_id' => request('sub_grupo_id') ?? $solicitacao->subgrupo_id,
|
||||
'assunto' => request('assunto'),
|
||||
'detalhe' => request('detalhe'),
|
||||
'servico_id' => request('servico_id') ?? $solicitacao->servico_id,
|
||||
]);
|
||||
|
||||
$solicitacao->save();
|
||||
$solicitacao->causaProvavel()->delete();
|
||||
|
||||
collect(request()->causa_provavel_lista)->each(function ($causaProvavel) use ($solicitacao) {
|
||||
$solicitacao->causaProvavel()->create([
|
||||
'solicitacao_id' => $solicitacao->id,
|
||||
'causa_provavel_id' => $causaProvavel['id'],
|
||||
]);
|
||||
});
|
||||
|
||||
self::storeHistorico($solicitacao);
|
||||
});
|
||||
|
||||
return $solicitacao->refresh();
|
||||
}
|
||||
|
||||
private static function storeHistorico($solicitacao)
|
||||
{
|
||||
|
||||
$solicitacaoStatusHistorico = new SolicitacaoStatusHistorico();
|
||||
|
||||
$solicitacaoStatusHistorico->create([
|
||||
'solicitacao_id' => $solicitacao->id,
|
||||
'status_id' => $solicitacao->status_id,
|
||||
'origem_id' => StatusOrigemEnum::SOLICITANTE,
|
||||
'usuario_id' => request('usuario_solicitante_id') ?? self::getCurrentLotacao()->usuario->id,
|
||||
'infraestrutura_id' => request('infraestrutura_solicitante_id') ?? self::getCurrentCentroCusto()->infraestrutura->id,
|
||||
'mensagem' => request('justificativa') ?? null,
|
||||
]);
|
||||
|
||||
return $solicitacaoStatusHistorico;
|
||||
}
|
||||
|
||||
public static function validate()
|
||||
{
|
||||
|
||||
$rule = [
|
||||
'infraestrutura_solicitante_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists('cadastro_infraestrutura', 'id'),
|
||||
],
|
||||
'usuario_solicitante_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists('cadastro_usuario', 'id'),
|
||||
],
|
||||
'grupo_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists('cadastro_grupo', 'id'),
|
||||
],
|
||||
'sub_grupo_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists('cadastro_subgrupo', 'id'),
|
||||
],
|
||||
'servico_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists('cadastro_servico_manutencao', 'id'),
|
||||
],
|
||||
'assunto' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:150',
|
||||
'min:3',
|
||||
],
|
||||
'descricao' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:1000',
|
||||
'min:3',
|
||||
]
|
||||
];
|
||||
|
||||
request()->validate($rule);
|
||||
}
|
||||
|
||||
private static function validateCancelamento()
|
||||
{
|
||||
|
||||
$rule = [
|
||||
'justificativa' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:300',
|
||||
'min:3',
|
||||
],
|
||||
];
|
||||
|
||||
request()->validate($rule);
|
||||
}
|
||||
|
||||
private static function validateReabrir()
|
||||
{
|
||||
|
||||
$rule = [
|
||||
'justificativa' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:300',
|
||||
'min:3',
|
||||
],
|
||||
];
|
||||
|
||||
request()->validate($rule);
|
||||
}
|
||||
|
||||
private static function validateFInalizar()
|
||||
{
|
||||
|
||||
$rule = [
|
||||
'observacao' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:300',
|
||||
'min:3',
|
||||
],
|
||||
];
|
||||
|
||||
request()->validate($rule);
|
||||
}
|
||||
|
||||
private static function validateResponder()
|
||||
{
|
||||
|
||||
$rule = [
|
||||
'resposta' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:500',
|
||||
'min:3',
|
||||
],
|
||||
'mensagem_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists('manutencao_gerenciamento_mensagem', 'id'),
|
||||
],
|
||||
];
|
||||
|
||||
request()->validate($rule);
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
SolicitacaoCausaProvavel::where('solicitacao_id', $id)->delete();
|
||||
SolicitacaoStatusHistorico::where('solicitacao_id', $id)->delete();
|
||||
SolicitacaoMensagem::where('solicitacao_id', $id)->delete();
|
||||
SolicitacaoResposta::where('solicitacao_id', $id)->delete();
|
||||
Solicitacao::findOrFail($id)->delete();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user