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