This commit is contained in:
@@ -0,0 +1,247 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\Parametrizacao;
|
||||
|
||||
use App\Models\Cadastro\Parametrizacao\Parametrizacao;
|
||||
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPacienteAba;
|
||||
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPermissaoOcupacao;
|
||||
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPermissaoUsuario;
|
||||
use App\Models\Cadastro\ParametrizacaoMaterial;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ParametrizacaoService extends Service
|
||||
{
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getDadosForm(),
|
||||
'model' => self::getDadosModel(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getDadosForm()
|
||||
{
|
||||
return [
|
||||
'unidades' => self::getUnidades(),
|
||||
'infraestruturas' => [],
|
||||
'usuarios' => [],
|
||||
'paciente_abas' => ParametrizacaoPacienteAba::orderBy('nome')->get(['id', 'nome']),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getUnidades()
|
||||
{
|
||||
return DB::table('cadastro_unidade')
|
||||
->select([
|
||||
'id',
|
||||
'nome_fantasia',
|
||||
])
|
||||
->orderBy('nome_fantasia')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getInfraestruturas()
|
||||
{
|
||||
return DB::table('cadastro_infraestrutura')
|
||||
->select([
|
||||
'cadastro_infraestrutura.id',
|
||||
DB::raw("CASE WHEN cadastro_infraestrutura.principal THEN cadastro_unidade.nome_fantasia ELSE cadastro_infraestrutura.nome END AS nome"),
|
||||
])
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->where('cadastro_infraestrutura.unidade_id', request()->unidade_id)
|
||||
->whereNull('cadastro_infraestrutura.deleted_at')
|
||||
->orderByRaw('CASE WHEN cadastro_infraestrutura.principal THEN cadastro_unidade.nome_fantasia ELSE cadastro_infraestrutura.nome END')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getUsuarios()
|
||||
{
|
||||
return DB::table('cadastro_usuario')
|
||||
->select([
|
||||
'cadastro_usuario.id',
|
||||
'cadastro_cidadao.nome',
|
||||
])
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_lotacao')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_lotacao.infraestrutura_id')
|
||||
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
|
||||
->when(request()->infraestrutura_id, fn ($q, $infraestruturaId) => $q
|
||||
->where('cadastro_infraestrutura.id', $infraestruturaId)
|
||||
)
|
||||
)
|
||||
->orderBy('cadastro_cidadao.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getDadosModel()
|
||||
{
|
||||
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
$ocupacoes = ParametrizacaoPermissaoOcupacao::get();
|
||||
$usuarios = self::getParametrizacaoPermissaoUsuario();
|
||||
|
||||
$parametrizacaoMaterial = self::getParametrizacaoMaterial();
|
||||
|
||||
return [
|
||||
'ocupacao' => null,
|
||||
'unidade_id' => null,
|
||||
'infraestrutura_id' => null,
|
||||
'usuario_id' => null,
|
||||
'paciente_abas' => [],
|
||||
'ocupacoes' => $ocupacoes->map(fn ($ocupacao) => [
|
||||
'id' => $ocupacao->ocupacao_id,
|
||||
'codigo' => $ocupacao->ocupacao->codigo,
|
||||
'nome' => $ocupacao->ocupacao->nome,
|
||||
]),
|
||||
'usuarios' => $usuarios->map(function ($usuario) {
|
||||
return [
|
||||
'usuario_id' => $usuario->usuario_id,
|
||||
'usuario_nome' => $usuario->usuario_nome,
|
||||
'unidade_id' => $usuario->unidade_id,
|
||||
'unidade_nome_fantasia' => $usuario->unidade_nome_fantasia,
|
||||
'infraestrutura_id' => $usuario->infraestrutura_id,
|
||||
'infraestrutura_nome' => $usuario->infraestrutura_nome,
|
||||
'municipe' => $usuario->municipe,
|
||||
'provisorio' => $usuario->provisorio,
|
||||
'outro_municipio' => $usuario->outro_municipio,
|
||||
'desbloquear_usuario' => $usuario->desbloquear_usuario,
|
||||
'paciente_abas' => $usuario->paciente_abas ?? [],
|
||||
];
|
||||
}),
|
||||
'municipe' => false,
|
||||
'provisorio' => false,
|
||||
'outro_municipio' => false,
|
||||
'desbloquear_usuario' => false,
|
||||
'cadastro_paciente_desatualizado_quantidade_dias' => $parametrizacao->cadastro_paciente_desatualizado_quantidade_dias ?? null,
|
||||
'exibe_alerta_paciente_cns_temporario_invalido' => $parametrizacao->exibe_alerta_paciente_cns_temporario_invalido ?? false,
|
||||
'cadastro_paciente_provisorio_bloqueado' => $parametrizacao->cadastro_paciente_provisorio_bloqueado ?? false,
|
||||
'cadastro_paciente_provisorio_quantidade_dias' => $parametrizacao->cadastro_paciente_provisorio_quantidade_dias ?? null,
|
||||
'material' => [
|
||||
'gera_codigo_automatico' => $parametrizacaoMaterial->gera_codigo_automatico ?? false,
|
||||
],
|
||||
'validacoes' =>[
|
||||
'exige_cpf_paciente' => isset($parametrizacao) ? ($parametrizacao->exige_cpf_paciente ?? false) : true,
|
||||
'exige_cns_paciente' => isset($parametrizacao) ? ($parametrizacao->exige_cns_paciente ?? false) : true,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function getParametrizacaoPermissaoUsuario()
|
||||
{
|
||||
|
||||
$permissoes = DB::table('cadastro_parametrizacao_permissao_usuario as permissao')
|
||||
->select([
|
||||
'permissao.id',
|
||||
'permissao.usuario_id',
|
||||
'cidadao.nome as usuario_nome',
|
||||
'unidade.id as unidade_id',
|
||||
'unidade.nome_fantasia as unidade_nome_fantasia',
|
||||
'infraestrutura.id as infraestrutura_id',
|
||||
'infraestrutura.nome as infraestrutura_nome',
|
||||
'permissao.municipe',
|
||||
'permissao.provisorio',
|
||||
'permissao.outro_municipio',
|
||||
'permissao.desbloquear_usuario',
|
||||
])
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'permissao.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', function ($join) {
|
||||
$join->on('infraestrutura.id', 'permissao.infraestrutura_id')
|
||||
->whereNull('infraestrutura.deleted_at');
|
||||
})
|
||||
->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->get();
|
||||
|
||||
$abas = DB::table('cadastro_parametrizacao_permissao_usuario_paciente_aba as p_aba')
|
||||
->join('cadastro_parametrizacao_paciente_aba as aba', 'aba.id', 'p_aba.paciente_aba_id')
|
||||
->whereIn('p_aba.parametrizacao_id', $permissoes->pluck('id'))
|
||||
->select(
|
||||
'p_aba.parametrizacao_id',
|
||||
'aba.id',
|
||||
'aba.nome'
|
||||
)
|
||||
->orderBy('aba.nome')
|
||||
->get()
|
||||
->groupBy('parametrizacao_id');
|
||||
|
||||
return $permissoes->map(function ($p) use ($abas) {
|
||||
|
||||
$p->paciente_abas = optional($abas->get($p->id))->values() ?? collect();
|
||||
|
||||
return $p;
|
||||
});
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
DB::transaction(function () {
|
||||
|
||||
$parametrizacao = Parametrizacao::firstOrNew();
|
||||
|
||||
$parametros = [
|
||||
'cadastro_paciente_desatualizado_quantidade_dias' => request()->cadastro_paciente_desatualizado_quantidade_dias,
|
||||
'exibe_alerta_paciente_cns_temporario_invalido' => request()->exibe_alerta_paciente_cns_temporario_invalido,
|
||||
'cadastro_paciente_provisorio_bloqueado' => request()->cadastro_paciente_provisorio_bloqueado,
|
||||
'cadastro_paciente_provisorio_quantidade_dias' => request()->cadastro_paciente_provisorio_quantidade_dias,
|
||||
'exige_cpf_paciente' => request()->validacoes['exige_cpf_paciente'],
|
||||
'exige_cns_paciente' => request()->validacoes['exige_cns_paciente'],
|
||||
];
|
||||
|
||||
$parametrizacao->fill($parametros);
|
||||
$parametrizacao->save();
|
||||
|
||||
$ocupacoes = collect(request()->ocupacoes);
|
||||
|
||||
ParametrizacaoPermissaoOcupacao::whereNotIn(
|
||||
'ocupacao_id',
|
||||
$ocupacoes->pluck('id')
|
||||
)->delete();
|
||||
|
||||
$ocupacoes->each(function ($data) {
|
||||
ParametrizacaoPermissaoOcupacao::updateOrCreate(
|
||||
['ocupacao_id' => $data['id']]
|
||||
);
|
||||
});
|
||||
|
||||
$usuarios = collect(request()->usuarios);
|
||||
|
||||
ParametrizacaoPermissaoUsuario::query()->delete();
|
||||
|
||||
$usuarios->each(function ($data) {
|
||||
|
||||
$parametrizacaoUsuario = ParametrizacaoPermissaoUsuario::create([
|
||||
'usuario_id' => $data['usuario_id'],
|
||||
'infraestrutura_id' => $data['infraestrutura_id'],
|
||||
'municipe' => (bool) $data['municipe'],
|
||||
'provisorio' => (bool) $data['provisorio'],
|
||||
'outro_municipio' => (bool) $data['outro_municipio'],
|
||||
'desbloquear_usuario' => (bool) $data['desbloquear_usuario'],
|
||||
]);
|
||||
|
||||
$parametrizacaoUsuario->pacienteAbas()->sync($data['paciente_abas']);
|
||||
});
|
||||
|
||||
$parametrizacaoMaterial = self::getParametrizacaoMaterial();
|
||||
|
||||
if (is_null($parametrizacaoMaterial)) {
|
||||
ParametrizacaoMaterial::create([
|
||||
'gera_codigo_automatico' => request()->material['gera_codigo_automatico']
|
||||
]);
|
||||
} else {
|
||||
$parametrizacaoMaterial->update([
|
||||
'gera_codigo_automatico' => request()->material['gera_codigo_automatico']
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public static function getParametrizacaoMaterial()
|
||||
{
|
||||
return ParametrizacaoMaterial::first();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user